From 2956f6f68badd519399f280dcb0414d29002bab2 Mon Sep 17 00:00:00 2001 From: lilei Date: Sun, 1 Dec 2019 20:32:02 -0500 Subject: [PATCH] jedi-vim: add submodules parso and jedi of jedi-vim parso:c0ace63a6905500e18d8ac06af1a0a9057e63498 jedi:005f69390c4b1a3b864e7373cfcbdaf95e65411d typeshed:3319cadf85012328f8a12b15da4eecc8de0cf305 Signed-off-by: lilei --- vim/bundle/jedi-vim/pythonx/jedi/.coveragerc | 13 + vim/bundle/jedi-vim/pythonx/jedi/.travis.yml | 68 + vim/bundle/jedi-vim/pythonx/jedi/AUTHORS.txt | 57 + .../jedi-vim/pythonx/jedi/CHANGELOG.rst | 182 ++ .../jedi-vim/pythonx/jedi/CONTRIBUTING.md | 8 + vim/bundle/jedi-vim/pythonx/jedi/LICENSE.txt | 24 + vim/bundle/jedi-vim/pythonx/jedi/MANIFEST.in | 17 + vim/bundle/jedi-vim/pythonx/jedi/README.rst | 224 +++ vim/bundle/jedi-vim/pythonx/jedi/appveyor.yml | 87 + .../pythonx/jedi/build/lib/jedi/__init__.py | 47 + .../pythonx/jedi/build/lib/jedi/__main__.py | 48 + .../jedi/build/lib/jedi/_compatibility.py | 665 ++++++ .../jedi/build/lib/jedi/api/__init__.py | 548 +++++ .../jedi/build/lib/jedi/api/classes.py | 768 +++++++ .../jedi/build/lib/jedi/api/completion.py | 326 +++ .../jedi/build/lib/jedi/api/environment.py | 458 +++++ .../jedi/build/lib/jedi/api/exceptions.py | 10 + .../jedi/build/lib/jedi/api/file_name.py | 161 ++ .../jedi/build/lib/jedi/api/helpers.py | 397 ++++ .../jedi/build/lib/jedi/api/interpreter.py | 47 + .../jedi/build/lib/jedi/api/keywords.py | 85 + .../jedi/build/lib/jedi/api/project.py | 197 ++ .../jedi/build/lib/jedi/api/replstartup.py | 29 + .../pythonx/jedi/build/lib/jedi/cache.py | 146 ++ .../jedi/build/lib/jedi/common/__init__.py | 1 + .../jedi/build/lib/jedi/common/context.py | 73 + .../jedi/build/lib/jedi/common/utils.py | 26 + .../pythonx/jedi/build/lib/jedi/debug.py | 143 ++ .../jedi/build/lib/jedi/evaluate/__init__.py | 443 ++++ .../jedi/build/lib/jedi/evaluate/analysis.py | 224 +++ .../jedi/build/lib/jedi/evaluate/arguments.py | 382 ++++ .../build/lib/jedi/evaluate/base_context.py | 436 ++++ .../jedi/build/lib/jedi/evaluate/cache.py | 123 ++ .../lib/jedi/evaluate/compiled/__init__.py | 64 + .../lib/jedi/evaluate/compiled/access.py | 497 +++++ .../lib/jedi/evaluate/compiled/context.py | 541 +++++ .../jedi/evaluate/compiled/getattr_static.py | 176 ++ .../build/lib/jedi/evaluate/compiled/mixed.py | 291 +++ .../evaluate/compiled/subprocess/__init__.py | 406 ++++ .../evaluate/compiled/subprocess/__main__.py | 55 + .../evaluate/compiled/subprocess/functions.py | 86 + .../lib/jedi/evaluate/context/__init__.py | 6 + .../lib/jedi/evaluate/context/decorator.py | 15 + .../lib/jedi/evaluate/context/function.py | 444 ++++ .../lib/jedi/evaluate/context/instance.py | 531 +++++ .../lib/jedi/evaluate/context/iterable.py | 821 ++++++++ .../build/lib/jedi/evaluate/context/klass.py | 344 ++++ .../build/lib/jedi/evaluate/context/module.py | 283 +++ .../lib/jedi/evaluate/context/namespace.py | 64 + .../build/lib/jedi/evaluate/docstrings.py | 311 +++ .../jedi/build/lib/jedi/evaluate/dynamic.py | 231 +++ .../jedi/build/lib/jedi/evaluate/filters.py | 412 ++++ .../jedi/build/lib/jedi/evaluate/finder.py | 290 +++ .../build/lib/jedi/evaluate/flow_analysis.py | 118 ++ .../lib/jedi/evaluate/gradual/__init__.py | 0 .../lib/jedi/evaluate/gradual/annotation.py | 405 ++++ .../lib/jedi/evaluate/gradual/conversion.py | 199 ++ .../lib/jedi/evaluate/gradual/stub_context.py | 105 + .../lib/jedi/evaluate/gradual/typeshed.py | 289 +++ .../build/lib/jedi/evaluate/gradual/typing.py | 707 +++++++ .../build/lib/jedi/evaluate/gradual/utils.py | 32 + .../jedi/build/lib/jedi/evaluate/helpers.py | 269 +++ .../jedi/build/lib/jedi/evaluate/imports.py | 568 ++++++ .../build/lib/jedi/evaluate/lazy_context.py | 59 + .../jedi/build/lib/jedi/evaluate/names.py | 375 ++++ .../jedi/build/lib/jedi/evaluate/param.py | 253 +++ .../build/lib/jedi/evaluate/parser_cache.py | 6 + .../jedi/build/lib/jedi/evaluate/recursion.py | 153 ++ .../jedi/build/lib/jedi/evaluate/signature.py | 116 ++ .../jedi/build/lib/jedi/evaluate/star_args.py | 206 ++ .../build/lib/jedi/evaluate/syntax_tree.py | 730 +++++++ .../jedi/build/lib/jedi/evaluate/sys_path.py | 261 +++ .../jedi/build/lib/jedi/evaluate/usages.py | 61 + .../jedi/build/lib/jedi/evaluate/utils.py | 119 ++ .../pythonx/jedi/build/lib/jedi/file_io.py | 48 + .../jedi/build/lib/jedi/parser_utils.py | 297 +++ .../jedi/build/lib/jedi/plugins/__init__.py | 47 + .../jedi/build/lib/jedi/plugins/flask.py | 21 + .../jedi/build/lib/jedi/plugins/registry.py | 10 + .../jedi/build/lib/jedi/plugins/stdlib.py | 835 ++++++++ .../jedi/build/lib/jedi/refactoring.py | 203 ++ .../pythonx/jedi/build/lib/jedi/settings.py | 163 ++ .../lib/jedi/third_party/typeshed/LICENSE | 238 +++ .../typeshed/stdlib/2/BaseHTTPServer.pyi | 47 + .../typeshed/stdlib/2/ConfigParser.pyi | 97 + .../third_party/typeshed/stdlib/2/Cookie.pyi | 40 + .../typeshed/stdlib/2/HTMLParser.pyi | 31 + .../third_party/typeshed/stdlib/2/Queue.pyi | 31 + .../typeshed/stdlib/2/SimpleHTTPServer.pyi | 16 + .../typeshed/stdlib/2/SocketServer.pyi | 99 + .../typeshed/stdlib/2/StringIO.pyi | 30 + .../typeshed/stdlib/2/UserDict.pyi | 44 + .../typeshed/stdlib/2/UserList.pyi | 18 + .../typeshed/stdlib/2/UserString.pyi | 75 + .../typeshed/stdlib/2/__builtin__.pyi | 1622 +++++++++++++++ .../third_party/typeshed/stdlib/2/_ast.pyi | 330 +++ .../typeshed/stdlib/2/_collections.pyi | 41 + .../typeshed/stdlib/2/_functools.pyi | 87 + .../typeshed/stdlib/2/_hotshot.pyi | 34 + .../third_party/typeshed/stdlib/2/_io.pyi | 183 ++ .../third_party/typeshed/stdlib/2/_json.pyi | 17 + .../third_party/typeshed/stdlib/2/_md5.pyi | 13 + .../third_party/typeshed/stdlib/2/_sha.pyi | 15 + .../third_party/typeshed/stdlib/2/_sha256.pyi | 23 + .../third_party/typeshed/stdlib/2/_sha512.pyi | 23 + .../third_party/typeshed/stdlib/2/_socket.pyi | 287 +++ .../third_party/typeshed/stdlib/2/_sre.pyi | 53 + .../third_party/typeshed/stdlib/2/_struct.pyi | 22 + .../typeshed/stdlib/2/_symtable.pyi | 39 + .../typeshed/stdlib/2/_threading_local.pyi | 14 + .../typeshed/stdlib/2/_warnings.pyi | 11 + .../third_party/typeshed/stdlib/2/abc.pyi | 29 + .../third_party/typeshed/stdlib/2/ast.pyi | 28 + .../third_party/typeshed/stdlib/2/atexit.pyi | 5 + .../third_party/typeshed/stdlib/2/cPickle.pyi | 32 + .../typeshed/stdlib/2/cStringIO.pyi | 54 + .../typeshed/stdlib/2/collections.pyi | 126 ++ .../typeshed/stdlib/2/commands.pyi | 12 + .../typeshed/stdlib/2/compileall.pyi | 10 + .../typeshed/stdlib/2/cookielib.pyi | 110 + .../typeshed/stdlib/2/dircache.pyi | 10 + .../typeshed/stdlib/2/distutils/__init__.pyi | 0 .../stdlib/2/distutils/emxccompiler.pyi | 5 + .../typeshed/stdlib/2/dummy_thread.pyi | 21 + .../typeshed/stdlib/2/email/MIMEText.pyi | 4 + .../typeshed/stdlib/2/email/__init__.pyi | 6 + .../typeshed/stdlib/2/email/_parseaddr.pyi | 40 + .../typeshed/stdlib/2/email/base64mime.pyi | 8 + .../typeshed/stdlib/2/email/charset.pyi | 26 + .../typeshed/stdlib/2/email/encoders.pyi | 4 + .../typeshed/stdlib/2/email/feedparser.pyi | 18 + .../typeshed/stdlib/2/email/generator.pyi | 9 + .../typeshed/stdlib/2/email/header.pyi | 11 + .../typeshed/stdlib/2/email/iterators.pyi | 5 + .../typeshed/stdlib/2/email/message.pyi | 45 + .../typeshed/stdlib/2/email/mime/__init__.pyi | 0 .../stdlib/2/email/mime/application.pyi | 11 + .../typeshed/stdlib/2/email/mime/audio.pyi | 5 + .../typeshed/stdlib/2/email/mime/base.pyi | 4 + .../typeshed/stdlib/2/email/mime/image.pyi | 5 + .../typeshed/stdlib/2/email/mime/message.pyi | 5 + .../stdlib/2/email/mime/multipart.pyi | 4 + .../stdlib/2/email/mime/nonmultipart.pyi | 4 + .../typeshed/stdlib/2/email/mime/text.pyi | 4 + .../typeshed/stdlib/2/email/parser.pyi | 10 + .../typeshed/stdlib/2/email/quoprimime.pyi | 18 + .../typeshed/stdlib/2/email/utils.pyi | 19 + .../typeshed/stdlib/2/encodings/__init__.pyi | 6 + .../typeshed/stdlib/2/encodings/utf_8.pyi | 15 + .../typeshed/stdlib/2/exceptions.pyi | 48 + .../third_party/typeshed/stdlib/2/fcntl.pyi | 87 + .../third_party/typeshed/stdlib/2/fnmatch.pyi | 8 + .../typeshed/stdlib/2/functools.pyi | 101 + .../typeshed/stdlib/2/future_builtins.pyi | 14 + .../jedi/third_party/typeshed/stdlib/2/gc.pyi | 29 + .../third_party/typeshed/stdlib/2/getopt.pyi | 12 + .../third_party/typeshed/stdlib/2/getpass.pyi | 8 + .../third_party/typeshed/stdlib/2/gettext.pyi | 41 + .../third_party/typeshed/stdlib/2/glob.pyi | 7 + .../third_party/typeshed/stdlib/2/gzip.pyi | 37 + .../third_party/typeshed/stdlib/2/hashlib.pyi | 31 + .../third_party/typeshed/stdlib/2/heapq.pyi | 16 + .../typeshed/stdlib/2/htmlentitydefs.pyi | 5 + .../third_party/typeshed/stdlib/2/httplib.pyi | 205 ++ .../third_party/typeshed/stdlib/2/imp.pyi | 35 + .../typeshed/stdlib/2/importlib.pyi | 4 + .../third_party/typeshed/stdlib/2/inspect.pyi | 135 ++ .../jedi/third_party/typeshed/stdlib/2/io.pyi | 42 + .../typeshed/stdlib/2/itertools.pyi | 165 ++ .../third_party/typeshed/stdlib/2/json.pyi | 96 + .../typeshed/stdlib/2/markupbase.pyi | 9 + .../third_party/typeshed/stdlib/2/md5.pyi | 6 + .../typeshed/stdlib/2/mimetools.pyi | 27 + .../stdlib/2/multiprocessing/__init__.pyi | 50 + .../2/multiprocessing/dummy/__init__.pyi | 51 + .../2/multiprocessing/dummy/connection.pyi | 26 + .../stdlib/2/multiprocessing/pool.pyi | 59 + .../stdlib/2/multiprocessing/process.pyi | 36 + .../stdlib/2/multiprocessing/util.pyi | 29 + .../third_party/typeshed/stdlib/2/mutex.pyi | 15 + .../typeshed/stdlib/2/nturl2path.pyi | 4 + .../typeshed/stdlib/2/os/__init__.pyi | 369 ++++ .../third_party/typeshed/stdlib/2/os/path.pyi | 180 ++ .../typeshed/stdlib/2/os2emxpath.pyi | 180 ++ .../third_party/typeshed/stdlib/2/pipes.pyi | 13 + .../typeshed/stdlib/2/platform.pyi | 45 + .../third_party/typeshed/stdlib/2/popen2.pyi | 28 + .../third_party/typeshed/stdlib/2/posix.pyi | 205 ++ .../third_party/typeshed/stdlib/2/random.pyi | 75 + .../jedi/third_party/typeshed/stdlib/2/re.pyi | 100 + .../third_party/typeshed/stdlib/2/repr.pyi | 31 + .../typeshed/stdlib/2/resource.pyi | 33 + .../third_party/typeshed/stdlib/2/rfc822.pyi | 79 + .../typeshed/stdlib/2/robotparser.pyi | 7 + .../third_party/typeshed/stdlib/2/runpy.pyi | 17 + .../third_party/typeshed/stdlib/2/sets.pyi | 61 + .../third_party/typeshed/stdlib/2/sha.pyi | 11 + .../third_party/typeshed/stdlib/2/shelve.pyi | 33 + .../third_party/typeshed/stdlib/2/shlex.pyi | 30 + .../third_party/typeshed/stdlib/2/signal.pyi | 71 + .../third_party/typeshed/stdlib/2/smtplib.pyi | 86 + .../third_party/typeshed/stdlib/2/spwd.pyi | 14 + .../typeshed/stdlib/2/sre_constants.pyi | 94 + .../typeshed/stdlib/2/sre_parse.pyi | 63 + .../third_party/typeshed/stdlib/2/stat.pyi | 59 + .../third_party/typeshed/stdlib/2/string.pyi | 78 + .../typeshed/stdlib/2/stringold.pyi | 46 + .../third_party/typeshed/stdlib/2/strop.pyi | 72 + .../typeshed/stdlib/2/subprocess.pyi | 117 ++ .../third_party/typeshed/stdlib/2/symbol.pyi | 91 + .../third_party/typeshed/stdlib/2/sys.pyi | 138 ++ .../typeshed/stdlib/2/tempfile.pyi | 111 + .../typeshed/stdlib/2/textwrap.pyi | 61 + .../third_party/typeshed/stdlib/2/thread.pyi | 30 + .../third_party/typeshed/stdlib/2/toaiff.pyi | 16 + .../typeshed/stdlib/2/tokenize.pyi | 136 ++ .../third_party/typeshed/stdlib/2/types.pyi | 168 ++ .../third_party/typeshed/stdlib/2/typing.pyi | 468 +++++ .../typeshed/stdlib/2/unittest.pyi | 262 +++ .../third_party/typeshed/stdlib/2/urllib.pyi | 134 ++ .../third_party/typeshed/stdlib/2/urllib2.pyi | 182 ++ .../typeshed/stdlib/2/urlparse.pyi | 70 + .../third_party/typeshed/stdlib/2/user.pyi | 9 + .../third_party/typeshed/stdlib/2/whichdb.pyi | 5 + .../typeshed/stdlib/2/xmlrpclib.pyi | 199 ++ .../typeshed/stdlib/2and3/__future__.pyi | 24 + .../typeshed/stdlib/2and3/_bisect.pyi | 11 + .../typeshed/stdlib/2and3/_codecs.pyi | 74 + .../typeshed/stdlib/2and3/_csv.pyi | 49 + .../typeshed/stdlib/2and3/_heapq.pyi | 15 + .../typeshed/stdlib/2and3/_random.pyi | 17 + .../typeshed/stdlib/2and3/_weakref.pyi | 28 + .../typeshed/stdlib/2and3/_weakrefset.pyi | 43 + .../typeshed/stdlib/2and3/argparse.pyi | 408 ++++ .../typeshed/stdlib/2and3/array.pyi | 73 + .../typeshed/stdlib/2and3/asynchat.pyi | 41 + .../typeshed/stdlib/2and3/asyncore.pyi | 144 ++ .../typeshed/stdlib/2and3/base64.pyi | 38 + .../typeshed/stdlib/2and3/binascii.pyi | 47 + .../typeshed/stdlib/2and3/binhex.pyi | 48 + .../typeshed/stdlib/2and3/bisect.pyi | 22 + .../typeshed/stdlib/2and3/builtins.pyi | 1622 +++++++++++++++ .../third_party/typeshed/stdlib/2and3/bz2.pyi | 48 + .../typeshed/stdlib/2and3/cProfile.pyi | 24 + .../typeshed/stdlib/2and3/calendar.pyi | 122 ++ .../third_party/typeshed/stdlib/2and3/cgi.pyi | 122 ++ .../typeshed/stdlib/2and3/chunk.pyi | 23 + .../typeshed/stdlib/2and3/cmath.pyi | 42 + .../third_party/typeshed/stdlib/2and3/cmd.pyi | 41 + .../typeshed/stdlib/2and3/code.pyi | 38 + .../typeshed/stdlib/2and3/codecs.pyi | 242 +++ .../typeshed/stdlib/2and3/codeop.pyi | 17 + .../typeshed/stdlib/2and3/colorsys.pyi | 15 + .../typeshed/stdlib/2and3/contextlib.pyi | 99 + .../typeshed/stdlib/2and3/copy.pyi | 14 + .../typeshed/stdlib/2and3/crypt.pyi | 23 + .../third_party/typeshed/stdlib/2and3/csv.pyi | 93 + .../typeshed/stdlib/2and3/ctypes/__init__.pyi | 285 +++ .../typeshed/stdlib/2and3/ctypes/util.pyi | 8 + .../typeshed/stdlib/2and3/ctypes/wintypes.pyi | 209 ++ .../typeshed/stdlib/2and3/datetime.pyi | 290 +++ .../typeshed/stdlib/2and3/decimal.pyi | 315 +++ .../typeshed/stdlib/2and3/difflib.pyi | 87 + .../third_party/typeshed/stdlib/2and3/dis.pyi | 77 + .../stdlib/2and3/distutils/__init__.pyi | 0 .../stdlib/2and3/distutils/archive_util.pyi | 12 + .../stdlib/2and3/distutils/bcppcompiler.pyi | 6 + .../stdlib/2and3/distutils/ccompiler.pyi | 119 ++ .../typeshed/stdlib/2and3/distutils/cmd.pyi | 40 + .../2and3/distutils/command/__init__.pyi | 0 .../stdlib/2and3/distutils/command/bdist.pyi | 0 .../2and3/distutils/command/bdist_dumb.pyi | 0 .../2and3/distutils/command/bdist_msi.pyi | 6 + .../distutils/command/bdist_packager.pyi | 0 .../2and3/distutils/command/bdist_rpm.pyi | 0 .../2and3/distutils/command/bdist_wininst.pyi | 0 .../stdlib/2and3/distutils/command/build.pyi | 0 .../2and3/distutils/command/build_clib.pyi | 0 .../2and3/distutils/command/build_ext.pyi | 0 .../2and3/distutils/command/build_py.pyi | 10 + .../2and3/distutils/command/build_scripts.pyi | 0 .../stdlib/2and3/distutils/command/check.pyi | 0 .../stdlib/2and3/distutils/command/clean.pyi | 0 .../stdlib/2and3/distutils/command/config.pyi | 0 .../2and3/distutils/command/install.pyi | 14 + .../2and3/distutils/command/install_data.pyi | 0 .../distutils/command/install_headers.pyi | 0 .../2and3/distutils/command/install_lib.pyi | 0 .../distutils/command/install_scripts.pyi | 0 .../2and3/distutils/command/register.pyi | 0 .../stdlib/2and3/distutils/command/sdist.pyi | 0 .../typeshed/stdlib/2and3/distutils/core.pyi | 50 + .../2and3/distutils/cygwinccompiler.pyi | 7 + .../typeshed/stdlib/2and3/distutils/debug.pyi | 3 + .../stdlib/2and3/distutils/dep_util.pyi | 8 + .../stdlib/2and3/distutils/dir_util.pyi | 15 + .../typeshed/stdlib/2and3/distutils/dist.pyi | 11 + .../stdlib/2and3/distutils/errors.pyi | 19 + .../stdlib/2and3/distutils/extension.pyi | 39 + .../stdlib/2and3/distutils/fancy_getopt.pyi | 27 + .../stdlib/2and3/distutils/file_util.pyi | 12 + .../stdlib/2and3/distutils/filelist.pyi | 3 + .../typeshed/stdlib/2and3/distutils/log.pyi | 28 + .../stdlib/2and3/distutils/msvccompiler.pyi | 6 + .../typeshed/stdlib/2and3/distutils/spawn.pyi | 8 + .../stdlib/2and3/distutils/sysconfig.pyi | 19 + .../stdlib/2and3/distutils/text_file.pyi | 18 + .../stdlib/2and3/distutils/unixccompiler.pyi | 6 + .../typeshed/stdlib/2and3/distutils/util.pyi | 20 + .../stdlib/2and3/distutils/version.pyi | 54 + .../typeshed/stdlib/2and3/doctest.pyi | 161 ++ .../typeshed/stdlib/2and3/errno.pyi | 130 ++ .../typeshed/stdlib/2and3/filecmp.pyi | 48 + .../typeshed/stdlib/2and3/fileinput.pyi | 62 + .../typeshed/stdlib/2and3/formatter.pyi | 105 + .../typeshed/stdlib/2and3/fractions.pyi | 96 + .../typeshed/stdlib/2and3/ftplib.pyi | 134 ++ .../typeshed/stdlib/2and3/genericpath.pyi | 21 + .../third_party/typeshed/stdlib/2and3/grp.pyi | 10 + .../typeshed/stdlib/2and3/hmac.pyi | 38 + .../typeshed/stdlib/2and3/imaplib.pyi | 133 ++ .../typeshed/stdlib/2and3/imghdr.pyi | 16 + .../typeshed/stdlib/2and3/keyword.pyi | 6 + .../stdlib/2and3/lib2to3/__init__.pyi | 1 + .../stdlib/2and3/lib2to3/pgen2/__init__.pyi | 10 + .../stdlib/2and3/lib2to3/pgen2/driver.pyi | 24 + .../stdlib/2and3/lib2to3/pgen2/grammar.pyi | 29 + .../stdlib/2and3/lib2to3/pgen2/literals.pyi | 9 + .../stdlib/2and3/lib2to3/pgen2/parse.pyi | 29 + .../stdlib/2and3/lib2to3/pgen2/pgen.pyi | 50 + .../stdlib/2and3/lib2to3/pgen2/token.pyi | 73 + .../stdlib/2and3/lib2to3/pgen2/tokenize.pyi | 30 + .../typeshed/stdlib/2and3/lib2to3/pygram.pyi | 116 ++ .../typeshed/stdlib/2and3/lib2to3/pytree.pyi | 86 + .../typeshed/stdlib/2and3/linecache.pyi | 12 + .../typeshed/stdlib/2and3/locale.pyi | 113 ++ .../stdlib/2and3/logging/__init__.pyi | 433 ++++ .../typeshed/stdlib/2and3/logging/config.pyi | 33 + .../stdlib/2and3/logging/handlers.pyi | 213 ++ .../typeshed/stdlib/2and3/macpath.pyi | 180 ++ .../typeshed/stdlib/2and3/marshal.pyi | 8 + .../typeshed/stdlib/2and3/math.pyi | 71 + .../typeshed/stdlib/2and3/mimetypes.pyi | 38 + .../typeshed/stdlib/2and3/mmap.pyi | 73 + .../typeshed/stdlib/2and3/netrc.pyi | 19 + .../third_party/typeshed/stdlib/2and3/nis.pyi | 10 + .../typeshed/stdlib/2and3/ntpath.pyi | 180 ++ .../typeshed/stdlib/2and3/numbers.pyi | 140 ++ .../typeshed/stdlib/2and3/opcode.pyi | 23 + .../typeshed/stdlib/2and3/operator.pyi | 227 +++ .../typeshed/stdlib/2and3/optparse.pyi | 228 +++ .../third_party/typeshed/stdlib/2and3/pdb.pyi | 62 + .../typeshed/stdlib/2and3/pickle.pyi | 140 ++ .../typeshed/stdlib/2and3/pickletools.pyi | 145 ++ .../typeshed/stdlib/2and3/pkgutil.pyi | 35 + .../typeshed/stdlib/2and3/plistlib.pyi | 57 + .../typeshed/stdlib/2and3/poplib.pyi | 77 + .../typeshed/stdlib/2and3/posixpath.pyi | 180 ++ .../typeshed/stdlib/2and3/pprint.pyi | 40 + .../typeshed/stdlib/2and3/profile.pyi | 27 + .../typeshed/stdlib/2and3/pstats.pyi | 39 + .../third_party/typeshed/stdlib/2and3/pty.pyi | 20 + .../third_party/typeshed/stdlib/2and3/pwd.pyi | 13 + .../typeshed/stdlib/2and3/py_compile.pyi | 20 + .../typeshed/stdlib/2and3/pyclbr.pyi | 40 + .../typeshed/stdlib/2and3/pydoc.pyi | 180 ++ .../stdlib/2and3/pyexpat/__init__.pyi | 75 + .../typeshed/stdlib/2and3/pyexpat/errors.pyi | 44 + .../typeshed/stdlib/2and3/pyexpat/model.pyi | 11 + .../typeshed/stdlib/2and3/quopri.pyi | 8 + .../typeshed/stdlib/2and3/readline.pyi | 41 + .../typeshed/stdlib/2and3/rlcompleter.pyi | 14 + .../typeshed/stdlib/2and3/sched.pyi | 27 + .../typeshed/stdlib/2and3/select.pyi | 137 ++ .../typeshed/stdlib/2and3/shutil.pyi | 135 ++ .../typeshed/stdlib/2and3/site.pyi | 17 + .../typeshed/stdlib/2and3/smtpd.pyi | 87 + .../typeshed/stdlib/2and3/sndhdr.pyi | 25 + .../typeshed/stdlib/2and3/socket.pyi | 626 ++++++ .../stdlib/2and3/sqlite3/__init__.pyi | 1 + .../typeshed/stdlib/2and3/sqlite3/dbapi2.pyi | 289 +++ .../typeshed/stdlib/2and3/sre_compile.pyi | 18 + .../third_party/typeshed/stdlib/2and3/ssl.pyi | 313 +++ .../typeshed/stdlib/2and3/stringprep.pyi | 23 + .../typeshed/stdlib/2and3/struct.pyi | 44 + .../typeshed/stdlib/2and3/sunau.pyi | 87 + .../typeshed/stdlib/2and3/symtable.pyi | 45 + .../typeshed/stdlib/2and3/sysconfig.pyi | 19 + .../typeshed/stdlib/2and3/syslog.pyi | 44 + .../typeshed/stdlib/2and3/tabnanny.pyi | 22 + .../typeshed/stdlib/2and3/tarfile.pyi | 189 ++ .../typeshed/stdlib/2and3/telnetlib.pyi | 115 ++ .../typeshed/stdlib/2and3/termios.pyi | 248 +++ .../typeshed/stdlib/2and3/threading.pyi | 187 ++ .../typeshed/stdlib/2and3/time.pyi | 103 + .../typeshed/stdlib/2and3/timeit.pyi | 34 + .../typeshed/stdlib/2and3/token.pyi | 71 + .../typeshed/stdlib/2and3/trace.pyi | 35 + .../typeshed/stdlib/2and3/traceback.pyi | 120 ++ .../third_party/typeshed/stdlib/2and3/tty.pyi | 17 + .../typeshed/stdlib/2and3/turtle.pyi | 501 +++++ .../typeshed/stdlib/2and3/unicodedata.pyi | 38 + .../third_party/typeshed/stdlib/2and3/uu.pyi | 13 + .../typeshed/stdlib/2and3/uuid.pyi | 90 + .../typeshed/stdlib/2and3/warnings.pyi | 38 + .../typeshed/stdlib/2and3/wave.pyi | 76 + .../typeshed/stdlib/2and3/weakref.pyi | 110 + .../typeshed/stdlib/2and3/webbrowser.pyi | 99 + .../stdlib/2and3/wsgiref/__init__.pyi | 0 .../stdlib/2and3/wsgiref/handlers.pyi | 87 + .../typeshed/stdlib/2and3/wsgiref/headers.pyi | 31 + .../stdlib/2and3/wsgiref/simple_server.pyi | 40 + .../typeshed/stdlib/2and3/wsgiref/types.pyi | 44 + .../typeshed/stdlib/2and3/wsgiref/util.pyi | 23 + .../stdlib/2and3/wsgiref/validate.pyi | 53 + .../typeshed/stdlib/2and3/xdrlib.pyi | 56 + .../typeshed/stdlib/2and3/xml/__init__.pyi | 1 + .../stdlib/2and3/xml/etree/ElementInclude.pyi | 17 + .../stdlib/2and3/xml/etree/ElementPath.pyi | 33 + .../stdlib/2and3/xml/etree/ElementTree.pyi | 167 ++ .../stdlib/2and3/xml/etree/__init__.pyi | 0 .../stdlib/2and3/xml/etree/cElementTree.pyi | 3 + .../stdlib/2and3/xml/parsers/__init__.pyi | 1 + .../2and3/xml/parsers/expat/__init__.pyi | 1 + .../stdlib/2and3/xml/parsers/expat/errors.pyi | 1 + .../stdlib/2and3/xml/parsers/expat/model.pyi | 1 + .../stdlib/2and3/xml/sax/__init__.pyi | 34 + .../typeshed/stdlib/2and3/xml/sax/handler.pyi | 46 + .../stdlib/2and3/xml/sax/saxutils.pyi | 58 + .../stdlib/2and3/xml/sax/xmlreader.pyi | 71 + .../typeshed/stdlib/2and3/zipfile.pyi | 105 + .../typeshed/stdlib/2and3/zipimport.pyi | 18 + .../typeshed/stdlib/2and3/zlib.pyi | 55 + .../typeshed/stdlib/3.5/zipapp.pyi | 16 + .../typeshed/stdlib/3.6/secrets.pyi | 14 + .../typeshed/stdlib/3.7/contextvars.pyi | 30 + .../typeshed/stdlib/3.7/dataclasses.pyi | 71 + .../third_party/typeshed/stdlib/3/_ast.pyi | 409 ++++ .../typeshed/stdlib/3/_compression.pyi | 16 + .../third_party/typeshed/stdlib/3/_curses.pyi | 447 +++++ .../typeshed/stdlib/3/_dummy_thread.pyi | 21 + .../third_party/typeshed/stdlib/3/_imp.pyi | 22 + .../stdlib/3/_importlib_modulespec.pyi | 45 + .../third_party/typeshed/stdlib/3/_json.pyi | 30 + .../typeshed/stdlib/3/_markupbase.pyi | 9 + .../typeshed/stdlib/3/_operator.pyi | 64 + .../typeshed/stdlib/3/_posixsubprocess.pyi | 14 + .../third_party/typeshed/stdlib/3/_stat.pyi | 69 + .../typeshed/stdlib/3/_subprocess.pyi | 38 + .../third_party/typeshed/stdlib/3/_thread.pyi | 31 + .../typeshed/stdlib/3/_threading_local.pyi | 18 + .../typeshed/stdlib/3/_tracemalloc.pyi | 26 + .../typeshed/stdlib/3/_warnings.pyi | 11 + .../third_party/typeshed/stdlib/3/_winapi.pyi | 96 + .../third_party/typeshed/stdlib/3/abc.pyi | 19 + .../third_party/typeshed/stdlib/3/ast.pyi | 39 + .../typeshed/stdlib/3/asyncio/__init__.pyi | 125 ++ .../typeshed/stdlib/3/asyncio/base_events.pyi | 140 ++ .../typeshed/stdlib/3/asyncio/coroutines.pyi | 9 + .../typeshed/stdlib/3/asyncio/events.pyi | 246 +++ .../typeshed/stdlib/3/asyncio/futures.pyi | 64 + .../typeshed/stdlib/3/asyncio/locks.pyi | 60 + .../typeshed/stdlib/3/asyncio/protocols.pyi | 24 + .../typeshed/stdlib/3/asyncio/queues.pyi | 50 + .../typeshed/stdlib/3/asyncio/runners.pyi | 9 + .../typeshed/stdlib/3/asyncio/streams.pyi | 119 ++ .../typeshed/stdlib/3/asyncio/subprocess.pyi | 67 + .../typeshed/stdlib/3/asyncio/tasks.pyi | 77 + .../typeshed/stdlib/3/asyncio/transports.pyi | 38 + .../third_party/typeshed/stdlib/3/atexit.pyi | 9 + .../stdlib/3/collections/__init__.pyi | 348 ++++ .../typeshed/stdlib/3/collections/abc.pyi | 40 + .../typeshed/stdlib/3/compileall.pyi | 20 + .../typeshed/stdlib/3/concurrent/__init__.pyi | 0 .../stdlib/3/concurrent/futures/__init__.pyi | 3 + .../stdlib/3/concurrent/futures/_base.pyi | 56 + .../stdlib/3/concurrent/futures/process.pyi | 17 + .../stdlib/3/concurrent/futures/thread.pyi | 15 + .../typeshed/stdlib/3/configparser.pyi | 234 +++ .../typeshed/stdlib/3/curses/__init__.pyi | 12 + .../typeshed/stdlib/3/curses/ascii.pyi | 62 + .../typeshed/stdlib/3/curses/panel.pyi | 20 + .../typeshed/stdlib/3/curses/textpad.pyi | 11 + .../typeshed/stdlib/3/email/__init__.pyi | 26 + .../typeshed/stdlib/3/email/charset.pyi | 31 + .../stdlib/3/email/contentmanager.pyi | 15 + .../typeshed/stdlib/3/email/encoders.pyi | 8 + .../typeshed/stdlib/3/email/errors.pyi | 19 + .../typeshed/stdlib/3/email/feedparser.pyi | 18 + .../typeshed/stdlib/3/email/generator.pyi | 27 + .../typeshed/stdlib/3/email/header.pyi | 25 + .../stdlib/3/email/headerregistry.pyi | 97 + .../typeshed/stdlib/3/email/iterators.pyi | 8 + .../typeshed/stdlib/3/email/message.pyi | 105 + .../typeshed/stdlib/3/email/mime/__init__.pyi | 0 .../stdlib/3/email/mime/application.pyi | 11 + .../typeshed/stdlib/3/email/mime/audio.pyi | 11 + .../typeshed/stdlib/3/email/mime/base.pyi | 10 + .../typeshed/stdlib/3/email/mime/image.pyi | 11 + .../typeshed/stdlib/3/email/mime/message.pyi | 7 + .../stdlib/3/email/mime/multipart.pyi | 12 + .../stdlib/3/email/mime/nonmultipart.pyi | 5 + .../typeshed/stdlib/3/email/mime/text.pyi | 8 + .../typeshed/stdlib/3/email/parser.pyi | 33 + .../typeshed/stdlib/3/email/policy.pyi | 64 + .../typeshed/stdlib/3/email/utils.pyi | 33 + .../typeshed/stdlib/3/encodings/__init__.pyi | 6 + .../typeshed/stdlib/3/encodings/utf_8.pyi | 15 + .../third_party/typeshed/stdlib/3/enum.pyi | 77 + .../typeshed/stdlib/3/faulthandler.pyi | 23 + .../third_party/typeshed/stdlib/3/fcntl.pyi | 96 + .../third_party/typeshed/stdlib/3/fnmatch.pyi | 11 + .../typeshed/stdlib/3/functools.pyi | 143 ++ .../jedi/third_party/typeshed/stdlib/3/gc.pyi | 28 + .../third_party/typeshed/stdlib/3/getopt.pyi | 14 + .../third_party/typeshed/stdlib/3/getpass.pyi | 12 + .../third_party/typeshed/stdlib/3/gettext.pyi | 44 + .../third_party/typeshed/stdlib/3/glob.pyi | 23 + .../third_party/typeshed/stdlib/3/gzip.pyi | 49 + .../third_party/typeshed/stdlib/3/hashlib.pyi | 69 + .../third_party/typeshed/stdlib/3/heapq.pyi | 23 + .../typeshed/stdlib/3/html/__init__.pyi | 4 + .../typeshed/stdlib/3/html/entities.pyi | 6 + .../typeshed/stdlib/3/html/parser.pyi | 31 + .../typeshed/stdlib/3/http/__init__.pyi | 69 + .../typeshed/stdlib/3/http/client.pyi | 223 +++ .../typeshed/stdlib/3/http/cookiejar.pyi | 115 ++ .../typeshed/stdlib/3/http/cookies.pyi | 31 + .../typeshed/stdlib/3/http/server.pyi | 71 + .../third_party/typeshed/stdlib/3/imp.pyi | 55 + .../typeshed/stdlib/3/importlib/__init__.pyi | 17 + .../typeshed/stdlib/3/importlib/abc.pyi | 97 + .../typeshed/stdlib/3/importlib/machinery.pyi | 116 ++ .../typeshed/stdlib/3/importlib/resources.pyi | 25 + .../typeshed/stdlib/3/importlib/util.pyi | 53 + .../third_party/typeshed/stdlib/3/inspect.pyi | 329 +++ .../jedi/third_party/typeshed/stdlib/3/io.pyi | 210 ++ .../typeshed/stdlib/3/ipaddress.pyi | 151 ++ .../typeshed/stdlib/3/itertools.pyi | 106 + .../typeshed/stdlib/3/json/__init__.pyi | 58 + .../typeshed/stdlib/3/json/decoder.pyi | 28 + .../typeshed/stdlib/3/json/encoder.pyi | 21 + .../third_party/typeshed/stdlib/3/lzma.pyi | 107 + .../third_party/typeshed/stdlib/3/msvcrt.pyi | 8 + .../stdlib/3/multiprocessing/__init__.pyi | 85 + .../stdlib/3/multiprocessing/connection.pyi | 48 + .../stdlib/3/multiprocessing/context.pyi | 179 ++ .../3/multiprocessing/dummy/__init__.pyi | 42 + .../3/multiprocessing/dummy/connection.pyi | 35 + .../stdlib/3/multiprocessing/managers.pyi | 47 + .../stdlib/3/multiprocessing/pool.pyi | 87 + .../stdlib/3/multiprocessing/process.pyi | 5 + .../stdlib/3/multiprocessing/queues.pyi | 30 + .../stdlib/3/multiprocessing/spawn.pyi | 18 + .../stdlib/3/multiprocessing/synchronize.pyi | 63 + .../third_party/typeshed/stdlib/3/nntplib.pyi | 102 + .../typeshed/stdlib/3/nturl2path.pyi | 2 + .../typeshed/stdlib/3/os/__init__.pyi | 722 +++++++ .../third_party/typeshed/stdlib/3/os/path.pyi | 180 ++ .../third_party/typeshed/stdlib/3/pathlib.pyi | 122 ++ .../third_party/typeshed/stdlib/3/pipes.pyi | 19 + .../typeshed/stdlib/3/platform.pyi | 34 + .../third_party/typeshed/stdlib/3/posix.pyi | 112 ++ .../third_party/typeshed/stdlib/3/queue.pyi | 32 + .../third_party/typeshed/stdlib/3/random.pyi | 71 + .../jedi/third_party/typeshed/stdlib/3/re.pyi | 155 ++ .../third_party/typeshed/stdlib/3/reprlib.pyi | 37 + .../typeshed/stdlib/3/resource.pyi | 42 + .../third_party/typeshed/stdlib/3/runpy.pyi | 23 + .../typeshed/stdlib/3/selectors.pyi | 90 + .../third_party/typeshed/stdlib/3/shelve.pyi | 31 + .../third_party/typeshed/stdlib/3/shlex.pyi | 50 + .../third_party/typeshed/stdlib/3/signal.pyi | 187 ++ .../third_party/typeshed/stdlib/3/smtplib.pyi | 141 ++ .../typeshed/stdlib/3/socketserver.pyi | 99 + .../third_party/typeshed/stdlib/3/spwd.pyi | 14 + .../typeshed/stdlib/3/sre_constants.pyi | 114 ++ .../typeshed/stdlib/3/sre_parse.pyi | 81 + .../third_party/typeshed/stdlib/3/stat.pyi | 75 + .../typeshed/stdlib/3/statistics.pyi | 24 + .../third_party/typeshed/stdlib/3/string.pyi | 42 + .../typeshed/stdlib/3/subprocess.pyi | 365 ++++ .../third_party/typeshed/stdlib/3/symbol.pyi | 97 + .../third_party/typeshed/stdlib/3/sys.pyi | 201 ++ .../typeshed/stdlib/3/tempfile.pyi | 123 ++ .../typeshed/stdlib/3/textwrap.pyi | 113 ++ .../typeshed/stdlib/3/tkinter/__init__.pyi | 663 ++++++ .../stdlib/3/tkinter/commondialog.pyi | 8 + .../typeshed/stdlib/3/tkinter/constants.pyi | 79 + .../typeshed/stdlib/3/tkinter/dialog.pyi | 10 + .../typeshed/stdlib/3/tkinter/filedialog.pyi | 65 + .../typeshed/stdlib/3/tkinter/messagebox.pyi | 31 + .../typeshed/stdlib/3/tkinter/ttk.pyi | 160 ++ .../typeshed/stdlib/3/tokenize.pyi | 114 ++ .../typeshed/stdlib/3/tracemalloc.pyi | 70 + .../third_party/typeshed/stdlib/3/types.pyi | 208 ++ .../third_party/typeshed/stdlib/3/typing.pyi | 597 ++++++ .../typeshed/stdlib/3/unittest/__init__.pyi | 31 + .../typeshed/stdlib/3/unittest/case.pyi | 224 +++ .../typeshed/stdlib/3/unittest/loader.pyi | 32 + .../typeshed/stdlib/3/unittest/mock.pyi | 146 ++ .../typeshed/stdlib/3/unittest/result.pyi | 36 + .../typeshed/stdlib/3/unittest/runner.pyi | 40 + .../typeshed/stdlib/3/unittest/signals.pyi | 14 + .../typeshed/stdlib/3/unittest/suite.pyi | 22 + .../typeshed/stdlib/3/urllib/__init__.pyi | 0 .../typeshed/stdlib/3/urllib/error.pyi | 12 + .../typeshed/stdlib/3/urllib/parse.pyi | 146 ++ .../typeshed/stdlib/3/urllib/request.pyi | 222 ++ .../typeshed/stdlib/3/urllib/response.pyi | 41 + .../typeshed/stdlib/3/urllib/robotparser.pyi | 18 + .../third_party/2/OpenSSL/__init__.pyi | 0 .../typeshed/third_party/2/OpenSSL/crypto.pyi | 191 ++ .../third_party/2/concurrent/__init__.pyi | 0 .../2/concurrent/futures/__init__.pyi | 3 + .../2/concurrent/futures/_base.pyi | 56 + .../2/concurrent/futures/process.pyi | 17 + .../2/concurrent/futures/thread.pyi | 15 + .../third_party/2/cryptography/__init__.pyi | 0 .../2/cryptography/hazmat/__init__.pyi | 0 .../hazmat/primitives/__init__.pyi | 0 .../hazmat/primitives/asymmetric/__init__.pyi | 0 .../hazmat/primitives/asymmetric/dsa.pyi | 4 + .../hazmat/primitives/asymmetric/rsa.pyi | 58 + .../hazmat/primitives/serialization.pyi | 33 + .../typeshed/third_party/2/enum.pyi | 77 + .../third_party/2/fb303/FacebookService.pyi | 297 +++ .../typeshed/third_party/2/fb303/__init__.pyi | 0 .../typeshed/third_party/2/gflags.pyi | 242 +++ .../typeshed/third_party/2/kazoo/__init__.pyi | 0 .../typeshed/third_party/2/kazoo/client.pyi | 97 + .../third_party/2/kazoo/exceptions.pyi | 58 + .../third_party/2/kazoo/recipe/__init__.pyi | 0 .../third_party/2/kazoo/recipe/watchers.pyi | 21 + .../typeshed/third_party/2/pathlib2.pyi | 122 ++ .../typeshed/third_party/2/pymssql.pyi | 48 + .../typeshed/third_party/2/redis/__init__.pyi | 24 + .../typeshed/third_party/2/redis/client.pyi | 292 +++ .../third_party/2/redis/connection.pyi | 134 ++ .../third_party/2/redis/exceptions.pyi | 17 + .../typeshed/third_party/2/redis/utils.pyi | 8 + .../third_party/2/routes/__init__.pyi | 15 + .../typeshed/third_party/2/routes/mapper.pyi | 67 + .../typeshed/third_party/2/routes/util.pyi | 20 + .../third_party/2/scribe/__init__.pyi | 0 .../typeshed/third_party/2/scribe/scribe.pyi | 39 + .../typeshed/third_party/2/scribe/ttypes.pyi | 18 + .../typeshed/third_party/2/six/__init__.pyi | 96 + .../2/six/moves/BaseHTTPServer.pyi | 1 + .../2/six/moves/SimpleHTTPServer.pyi | 1 + .../third_party/2/six/moves/__init__.pyi | 66 + .../third_party/2/six/moves/_dummy_thread.pyi | 1 + .../third_party/2/six/moves/_thread.pyi | 1 + .../third_party/2/six/moves/cPickle.pyi | 1 + .../third_party/2/six/moves/configparser.pyi | 1 + .../2/six/moves/email_mime_base.pyi | 1 + .../2/six/moves/email_mime_multipart.pyi | 1 + .../2/six/moves/email_mime_nonmultipart.pyi | 1 + .../2/six/moves/email_mime_text.pyi | 1 + .../third_party/2/six/moves/html_entities.pyi | 1 + .../third_party/2/six/moves/html_parser.pyi | 1 + .../third_party/2/six/moves/http_client.pyi | 1 + .../2/six/moves/http_cookiejar.pyi | 1 + .../third_party/2/six/moves/http_cookies.pyi | 1 + .../third_party/2/six/moves/queue.pyi | 1 + .../third_party/2/six/moves/reprlib.pyi | 1 + .../third_party/2/six/moves/socketserver.pyi | 1 + .../2/six/moves/urllib/__init__.pyi | 5 + .../third_party/2/six/moves/urllib/error.pyi | 3 + .../third_party/2/six/moves/urllib/parse.pyi | 24 + .../2/six/moves/urllib/request.pyi | 36 + .../2/six/moves/urllib/response.pyi | 5 + .../2/six/moves/urllib/robotparser.pyi | 1 + .../third_party/2/six/moves/urllib_error.pyi | 1 + .../third_party/2/six/moves/urllib_parse.pyi | 1 + .../2/six/moves/urllib_request.pyi | 1 + .../2/six/moves/urllib_response.pyi | 1 + .../2/six/moves/urllib_robotparser.pyi | 1 + .../third_party/2/six/moves/xmlrpc_client.pyi | 1 + .../third_party/2/tornado/__init__.pyi | 0 .../third_party/2/tornado/concurrent.pyi | 43 + .../typeshed/third_party/2/tornado/gen.pyi | 109 + .../third_party/2/tornado/httpclient.pyi | 96 + .../third_party/2/tornado/httpserver.pyi | 43 + .../third_party/2/tornado/httputil.pyi | 90 + .../typeshed/third_party/2/tornado/ioloop.pyi | 84 + .../typeshed/third_party/2/tornado/locks.pyi | 45 + .../third_party/2/tornado/netutil.pyi | 45 + .../third_party/2/tornado/process.pyi | 24 + .../third_party/2/tornado/tcpserver.pyi | 17 + .../third_party/2/tornado/testing.pyi | 60 + .../typeshed/third_party/2/tornado/util.pyi | 46 + .../typeshed/third_party/2/tornado/web.pyi | 257 +++ .../third_party/2and3/Crypto/Cipher/AES.pyi | 19 + .../third_party/2and3/Crypto/Cipher/ARC2.pyi | 19 + .../third_party/2and3/Crypto/Cipher/ARC4.pyi | 15 + .../2and3/Crypto/Cipher/Blowfish.pyi | 19 + .../third_party/2and3/Crypto/Cipher/CAST.pyi | 19 + .../third_party/2and3/Crypto/Cipher/DES.pyi | 19 + .../third_party/2and3/Crypto/Cipher/DES3.pyi | 20 + .../2and3/Crypto/Cipher/PKCS1_OAEP.pyi | 13 + .../2and3/Crypto/Cipher/PKCS1_v1_5.pyi | 13 + .../third_party/2and3/Crypto/Cipher/XOR.pyi | 16 + .../2and3/Crypto/Cipher/__init__.pyi | 11 + .../2and3/Crypto/Cipher/blockalgo.pyi | 17 + .../third_party/2and3/Crypto/Hash/HMAC.pyi | 16 + .../third_party/2and3/Crypto/Hash/MD2.pyi | 13 + .../third_party/2and3/Crypto/Hash/MD4.pyi | 13 + .../third_party/2and3/Crypto/Hash/MD5.pyi | 13 + .../third_party/2and3/Crypto/Hash/RIPEMD.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA224.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA256.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA384.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA512.pyi | 13 + .../2and3/Crypto/Hash/__init__.pyi | 11 + .../2and3/Crypto/Hash/hashalgo.pyi | 11 + .../2and3/Crypto/Protocol/AllOrNothing.pyi | 10 + .../2and3/Crypto/Protocol/Chaffing.pyi | 5 + .../third_party/2and3/Crypto/Protocol/KDF.pyi | 7 + .../2and3/Crypto/Protocol/__init__.pyi | 4 + .../2and3/Crypto/PublicKey/DSA.pyi | 27 + .../2and3/Crypto/PublicKey/ElGamal.pyi | 19 + .../2and3/Crypto/PublicKey/RSA.pyi | 32 + .../2and3/Crypto/PublicKey/__init__.pyi | 4 + .../2and3/Crypto/PublicKey/pubkey.pyi | 21 + .../Random/Fortuna/FortunaAccumulator.pyi | 25 + .../Random/Fortuna/FortunaGenerator.pyi | 16 + .../2and3/Crypto/Random/Fortuna/SHAd256.pyi | 13 + .../2and3/Crypto/Random/Fortuna/__init__.pyi | 0 .../2and3/Crypto/Random/OSRNG/__init__.pyi | 1 + .../2and3/Crypto/Random/OSRNG/fallback.pyi | 5 + .../2and3/Crypto/Random/OSRNG/posix.pyi | 6 + .../2and3/Crypto/Random/OSRNG/rng_base.pyi | 11 + .../2and3/Crypto/Random/__init__.pyi | 1 + .../2and3/Crypto/Random/random.pyi | 17 + .../2and3/Crypto/Signature/PKCS1_PSS.pyi | 9 + .../2and3/Crypto/Signature/PKCS1_v1_5.pyi | 7 + .../2and3/Crypto/Signature/__init__.pyi | 3 + .../third_party/2and3/Crypto/Util/Counter.pyi | 3 + .../third_party/2and3/Crypto/Util/RFC1751.pyi | 9 + .../2and3/Crypto/Util/__init__.pyi | 6 + .../third_party/2and3/Crypto/Util/asn1.pyi | 45 + .../third_party/2and3/Crypto/Util/number.pyi | 22 + .../2and3/Crypto/Util/randpool.pyi | 16 + .../third_party/2and3/Crypto/Util/strxor.pyi | 2 + .../third_party/2and3/Crypto/__init__.pyi | 7 + .../third_party/2and3/Crypto/pct_warnings.pyi | 7 + .../2and3/atomicwrites/__init__.pyi | 13 + .../third_party/2and3/attr/__init__.pyi | 255 +++ .../third_party/2and3/attr/converters.pyi | 12 + .../third_party/2and3/attr/exceptions.pyi | 7 + .../third_party/2and3/attr/filters.pyi | 5 + .../third_party/2and3/attr/validators.pyi | 24 + .../third_party/2and3/backports/__init__.pyi | 0 .../2and3/backports/ssl_match_hostname.pyi | 3 + .../third_party/2and3/backports_abc.pyi | 15 + .../third_party/2and3/bleach/__init__.pyi | 32 + .../third_party/2and3/bleach/callbacks.pyi | 6 + .../third_party/2and3/bleach/linkifier.pyi | 31 + .../third_party/2and3/bleach/sanitizer.pyi | 34 + .../third_party/2and3/bleach/utils.pyi | 8 + .../third_party/2and3/boto/__init__.pyi | 76 + .../typeshed/third_party/2and3/boto/auth.pyi | 108 + .../third_party/2and3/boto/auth_handler.pyi | 9 + .../third_party/2and3/boto/compat.pyi | 17 + .../third_party/2and3/boto/connection.pyi | 115 ++ .../third_party/2and3/boto/ec2/__init__.pyi | 7 + .../third_party/2and3/boto/elb/__init__.pyi | 39 + .../third_party/2and3/boto/exception.pyi | 146 ++ .../third_party/2and3/boto/kms/__init__.pyi | 5 + .../third_party/2and3/boto/kms/exceptions.pyi | 17 + .../third_party/2and3/boto/kms/layer1.pyi | 37 + .../third_party/2and3/boto/plugin.pyi | 9 + .../third_party/2and3/boto/regioninfo.pyi | 16 + .../third_party/2and3/boto/s3/__init__.pyi | 14 + .../third_party/2and3/boto/s3/acl.pyi | 39 + .../third_party/2and3/boto/s3/bucket.pyi | 94 + .../2and3/boto/s3/bucketlistresultset.pyi | 40 + .../2and3/boto/s3/bucketlogging.pyi | 11 + .../third_party/2and3/boto/s3/connection.pyi | 67 + .../third_party/2and3/boto/s3/cors.pyi | 19 + .../2and3/boto/s3/deletemarker.pyi | 12 + .../third_party/2and3/boto/s3/key.pyi | 232 +++ .../third_party/2and3/boto/s3/keyfile.pyi | 29 + .../third_party/2and3/boto/s3/lifecycle.pyi | 51 + .../third_party/2and3/boto/s3/multidelete.pyi | 27 + .../third_party/2and3/boto/s3/multipart.pyi | 49 + .../third_party/2and3/boto/s3/prefix.pyi | 10 + .../third_party/2and3/boto/s3/tagging.pyi | 22 + .../third_party/2and3/boto/s3/user.pyi | 10 + .../third_party/2and3/boto/s3/website.pyi | 62 + .../typeshed/third_party/2and3/boto/utils.pyi | 239 +++ .../typeshed/third_party/2and3/certifi.pyi | 2 + .../2and3/characteristic/__init__.pyi | 34 + .../third_party/2and3/click/__init__.pyi | 116 ++ .../third_party/2and3/click/_termui_impl.pyi | 14 + .../typeshed/third_party/2and3/click/core.pyi | 474 +++++ .../third_party/2and3/click/decorators.pyi | 336 ++++ .../third_party/2and3/click/exceptions.pyi | 96 + .../third_party/2and3/click/formatting.pyi | 86 + .../third_party/2and3/click/globals.pyi | 18 + .../third_party/2and3/click/parser.pyi | 102 + .../third_party/2and3/click/termui.pyi | 169 ++ .../third_party/2and3/click/testing.pyi | 63 + .../third_party/2and3/click/types.pyi | 269 +++ .../third_party/2and3/click/utils.pyi | 116 ++ .../typeshed/third_party/2and3/croniter.pyi | 41 + .../third_party/2and3/dateutil/__init__.pyi | 0 .../third_party/2and3/dateutil/_common.pyi | 15 + .../third_party/2and3/dateutil/parser.pyi | 46 + .../2and3/dateutil/relativedelta.pyi | 91 + .../third_party/2and3/dateutil/rrule.pyi | 103 + .../2and3/dateutil/tz/__init__.pyi | 15 + .../third_party/2and3/dateutil/tz/_common.pyi | 24 + .../third_party/2and3/dateutil/tz/tz.pyi | 96 + .../third_party/2and3/dateutil/utils.pyi | 7 + .../typeshed/third_party/2and3/emoji.pyi | 18 + .../typeshed/third_party/2and3/first.pyi | 13 + .../third_party/2and3/flask/__init__.pyi | 45 + .../typeshed/third_party/2and3/flask/app.pyi | 148 ++ .../third_party/2and3/flask/blueprints.pyi | 64 + .../typeshed/third_party/2and3/flask/cli.pyi | 64 + .../third_party/2and3/flask/config.pyi | 22 + .../typeshed/third_party/2and3/flask/ctx.pyi | 46 + .../third_party/2and3/flask/debughelpers.pyi | 21 + .../third_party/2and3/flask/globals.pyi | 18 + .../third_party/2and3/flask/helpers.pyi | 48 + .../third_party/2and3/flask/json/__init__.pyi | 19 + .../third_party/2and3/flask/json/tag.pyi | 71 + .../third_party/2and3/flask/logging.pyi | 13 + .../third_party/2and3/flask/sessions.pyi | 60 + .../third_party/2and3/flask/signals.pyi | 33 + .../third_party/2and3/flask/templating.pyi | 21 + .../third_party/2and3/flask/testing.pyi | 34 + .../third_party/2and3/flask/views.pyi | 22 + .../third_party/2and3/flask/wrappers.pyi | 35 + .../third_party/2and3/google/__init__.pyi | 0 .../2and3/google/protobuf/__init__.pyi | 1 + .../2and3/google/protobuf/any_pb2.pyi | 22 + .../2and3/google/protobuf/any_test_pb2.pyi | 32 + .../2and3/google/protobuf/api_pb2.pyi | 87 + .../google/protobuf/compiler/__init__.pyi | 0 .../google/protobuf/compiler/plugin_pb2.pyi | 82 + .../2and3/google/protobuf/descriptor.pyi | 182 ++ .../2and3/google/protobuf/descriptor_pb2.pyi | 732 +++++++ .../2and3/google/protobuf/descriptor_pool.pyi | 18 + .../2and3/google/protobuf/duration_pb2.pyi | 21 + .../2and3/google/protobuf/empty_pb2.pyi | 12 + .../2and3/google/protobuf/field_mask_pb2.pyi | 24 + .../google/protobuf/internal/__init__.pyi | 0 .../google/protobuf/internal/containers.pyi | 54 + .../google/protobuf/internal/decoder.pyi | 30 + .../google/protobuf/internal/encoder.pyi | 34 + .../protobuf/internal/enum_type_wrapper.pyi | 11 + .../protobuf/internal/message_listener.pyi | 5 + .../protobuf/internal/well_known_types.pyi | 92 + .../google/protobuf/internal/wire_format.pyi | 50 + .../2and3/google/protobuf/json_format.pyi | 31 + .../protobuf/map_proto2_unittest_pb2.pyi | 428 ++++ .../google/protobuf/map_unittest_pb2.pyi | 882 ++++++++ .../2and3/google/protobuf/message.pyi | 46 + .../2and3/google/protobuf/message_factory.pyi | 13 + .../2and3/google/protobuf/reflection.pyi | 6 + .../2and3/google/protobuf/service.pyi | 39 + .../google/protobuf/source_context_pb2.pyi | 18 + .../2and3/google/protobuf/struct_pb2.pyi | 105 + .../2and3/google/protobuf/symbol_database.pyi | 14 + .../protobuf/test_messages_proto2_pb2.pyi | 627 ++++++ .../protobuf/test_messages_proto3_pb2.pyi | 700 +++++++ .../2and3/google/protobuf/timestamp_pb2.pyi | 21 + .../2and3/google/protobuf/type_pb2.pyi | 215 ++ .../google/protobuf/unittest_arena_pb2.pyi | 43 + .../protobuf/unittest_custom_options_pb2.pyi | 472 +++++ .../google/protobuf/unittest_import_pb2.pyi | 66 + .../protobuf/unittest_import_public_pb2.pyi | 17 + .../google/protobuf/unittest_mset_pb2.pyi | 75 + .../unittest_mset_wire_format_pb2.pyi | 28 + .../protobuf/unittest_no_arena_import_pb2.pyi | 17 + .../google/protobuf/unittest_no_arena_pb2.pyi | 315 +++ .../unittest_no_generic_services_pb2.pyi | 40 + .../2and3/google/protobuf/unittest_pb2.pyi | 1777 +++++++++++++++++ .../protobuf/unittest_proto3_arena_pb2.pyi | 332 +++ .../2and3/google/protobuf/util/__init__.pyi | 0 .../protobuf/util/json_format_proto3_pb2.pyi | 659 ++++++ .../2and3/google/protobuf/wrappers_pb2.pyi | 106 + .../third_party/2and3/itsdangerous.pyi | 153 ++ .../third_party/2and3/jinja2/__init__.pyi | 7 + .../third_party/2and3/jinja2/_compat.pyi | 34 + .../third_party/2and3/jinja2/_stringdefs.pyi | 40 + .../third_party/2and3/jinja2/bccache.pyi | 44 + .../third_party/2and3/jinja2/compiler.pyi | 176 ++ .../third_party/2and3/jinja2/constants.pyi | 1 + .../third_party/2and3/jinja2/debug.pyi | 37 + .../third_party/2and3/jinja2/defaults.pyi | 21 + .../third_party/2and3/jinja2/environment.pyi | 125 ++ .../third_party/2and3/jinja2/exceptions.pyi | 31 + .../typeshed/third_party/2and3/jinja2/ext.pyi | 58 + .../third_party/2and3/jinja2/filters.pyi | 57 + .../third_party/2and3/jinja2/lexer.pyi | 117 ++ .../third_party/2and3/jinja2/loaders.pyi | 70 + .../third_party/2and3/jinja2/meta.pyi | 11 + .../third_party/2and3/jinja2/nodes.pyi | 250 +++ .../third_party/2and3/jinja2/optimizer.pyi | 29 + .../third_party/2and3/jinja2/parser.pyi | 60 + .../third_party/2and3/jinja2/runtime.pyi | 130 ++ .../third_party/2and3/jinja2/sandbox.pyi | 34 + .../third_party/2and3/jinja2/tests.pyi | 24 + .../third_party/2and3/jinja2/utils.pyi | 61 + .../third_party/2and3/jinja2/visitor.pyi | 8 + .../third_party/2and3/markupsafe/__init__.pyi | 53 + .../third_party/2and3/markupsafe/_compat.pyi | 19 + .../2and3/markupsafe/_constants.pyi | 3 + .../third_party/2and3/markupsafe/_native.pyi | 7 + .../2and3/markupsafe/_speedups.pyi | 7 + .../typeshed/third_party/2and3/mock.pyi | 146 ++ .../third_party/2and3/mypy_extensions.pyi | 44 + .../typeshed/third_party/2and3/pycurl.pyi | 605 ++++++ .../third_party/2and3/pymysql/__init__.pyi | 61 + .../third_party/2and3/pymysql/charset.pyi | 16 + .../third_party/2and3/pymysql/connections.pyi | 145 ++ .../2and3/pymysql/constants/CLIENT.pyi | 18 + .../2and3/pymysql/constants/COMMAND.pyi | 22 + .../2and3/pymysql/constants/ER.pyi | 471 +++++ .../2and3/pymysql/constants/FIELD_TYPE.pyi | 29 + .../2and3/pymysql/constants/FLAG.pyi | 17 + .../2and3/pymysql/constants/SERVER_STATUS.pyi | 10 + .../2and3/pymysql/constants/__init__.pyi | 0 .../third_party/2and3/pymysql/converters.pyi | 46 + .../third_party/2and3/pymysql/cursors.pyi | 46 + .../third_party/2and3/pymysql/err.pyi | 18 + .../third_party/2and3/pymysql/times.pyi | 10 + .../third_party/2and3/pymysql/util.pyi | 3 + .../third_party/2and3/pynamodb/__init__.pyi | 1 + .../third_party/2and3/pynamodb/attributes.pyi | 96 + .../2and3/pynamodb/connection/__init__.pyi | 2 + .../2and3/pynamodb/connection/base.pyi | 78 + .../2and3/pynamodb/connection/table.pyi | 18 + .../2and3/pynamodb/connection/util.pyi | 3 + .../third_party/2and3/pynamodb/constants.pyi | 166 ++ .../third_party/2and3/pynamodb/exceptions.pyi | 23 + .../third_party/2and3/pynamodb/indexes.pyi | 30 + .../third_party/2and3/pynamodb/models.pyi | 107 + .../third_party/2and3/pynamodb/settings.pyi | 8 + .../third_party/2and3/pynamodb/throttle.pyi | 19 + .../third_party/2and3/pynamodb/types.pyi | 5 + .../third_party/2and3/pytz/__init__.pyi | 41 + .../third_party/2and3/requests/__init__.pyi | 40 + .../third_party/2and3/requests/adapters.pyi | 79 + .../third_party/2and3/requests/api.pyi | 40 + .../third_party/2and3/requests/auth.pyi | 44 + .../third_party/2and3/requests/compat.pyi | 6 + .../third_party/2and3/requests/cookies.pyi | 67 + .../third_party/2and3/requests/exceptions.pyi | 26 + .../third_party/2and3/requests/hooks.pyi | 8 + .../third_party/2and3/requests/models.pyi | 142 ++ .../2and3/requests/packages/__init__.pyi | 4 + .../requests/packages/urllib3/__init__.pyi | 31 + .../packages/urllib3/_collections.pyi | 47 + .../requests/packages/urllib3/connection.pyi | 71 + .../packages/urllib3/connectionpool.pyi | 85 + .../packages/urllib3/contrib/__init__.pyi | 0 .../requests/packages/urllib3/exceptions.pyi | 50 + .../requests/packages/urllib3/fields.pyi | 16 + .../requests/packages/urllib3/filepost.pyi | 15 + .../packages/urllib3/packages/__init__.pyi | 0 .../packages/ssl_match_hostname/__init__.pyi | 4 + .../ssl_match_hostname/_implementation.pyi | 3 + .../requests/packages/urllib3/poolmanager.pyi | 27 + .../requests/packages/urllib3/request.pyi | 9 + .../requests/packages/urllib3/response.pyi | 53 + .../packages/urllib3/util/__init__.pyi | 25 + .../packages/urllib3/util/connection.pyi | 8 + .../packages/urllib3/util/request.pyi | 8 + .../packages/urllib3/util/response.pyi | 1 + .../requests/packages/urllib3/util/retry.pyi | 32 + .../requests/packages/urllib3/util/ssl_.pyi | 20 + .../packages/urllib3/util/timeout.pyi | 20 + .../requests/packages/urllib3/util/url.pyi | 22 + .../third_party/2and3/requests/sessions.pyi | 113 ++ .../2and3/requests/status_codes.pyi | 4 + .../third_party/2and3/requests/structures.pyi | 19 + .../third_party/2and3/requests/utils.pyi | 53 + .../third_party/2and3/simplejson/__init__.pyi | 13 + .../third_party/2and3/simplejson/decoder.pyi | 6 + .../third_party/2and3/simplejson/encoder.pyi | 9 + .../third_party/2and3/simplejson/scanner.pyi | 11 + .../third_party/2and3/singledispatch.pyi | 17 + .../typeshed/third_party/2and3/tabulate.pyi | 18 + .../typeshed/third_party/2and3/termcolor.pyi | 21 + .../typeshed/third_party/2and3/toml.pyi | 24 + .../third_party/2and3/typing_extensions.pyi | 58 + .../typeshed/third_party/2and3/ujson.pyi | 51 + .../third_party/2and3/werkzeug/__init__.pyi | 150 ++ .../third_party/2and3/werkzeug/_compat.pyi | 48 + .../third_party/2and3/werkzeug/_internal.pyi | 19 + .../third_party/2and3/werkzeug/_reloader.pyi | 29 + .../2and3/werkzeug/contrib/__init__.pyi | 0 .../2and3/werkzeug/contrib/atom.pyi | 50 + .../2and3/werkzeug/contrib/cache.pyi | 84 + .../2and3/werkzeug/contrib/fixers.pyi | 38 + .../2and3/werkzeug/contrib/iterio.pyi | 39 + .../2and3/werkzeug/contrib/jsrouting.pyi | 10 + .../2and3/werkzeug/contrib/limiter.pyi | 7 + .../2and3/werkzeug/contrib/lint.pyi | 43 + .../2and3/werkzeug/contrib/profiler.pyi | 15 + .../2and3/werkzeug/contrib/securecookie.pyi | 28 + .../2and3/werkzeug/contrib/sessions.pyi | 57 + .../2and3/werkzeug/contrib/testtools.pyi | 9 + .../2and3/werkzeug/contrib/wrappers.pyi | 27 + .../2and3/werkzeug/datastructures.pyi | 425 ++++ .../2and3/werkzeug/debug/__init__.pyi | 41 + .../2and3/werkzeug/debug/console.pyi | 44 + .../third_party/2and3/werkzeug/debug/repr.pyi | 33 + .../2and3/werkzeug/debug/tbtools.pyi | 63 + .../third_party/2and3/werkzeug/exceptions.pyi | 161 ++ .../third_party/2and3/werkzeug/filesystem.pyi | 7 + .../third_party/2and3/werkzeug/formparser.pyi | 45 + .../third_party/2and3/werkzeug/http.pyi | 92 + .../third_party/2and3/werkzeug/local.pyi | 100 + .../2and3/werkzeug/posixemulation.pyi | 7 + .../third_party/2and3/werkzeug/routing.pyi | 189 ++ .../third_party/2and3/werkzeug/script.pyi | 14 + .../third_party/2and3/werkzeug/security.pyi | 12 + .../third_party/2and3/werkzeug/serving.pyi | 93 + .../third_party/2and3/werkzeug/test.pyi | 94 + .../third_party/2and3/werkzeug/testapp.pyi | 9 + .../third_party/2and3/werkzeug/urls.pyi | 72 + .../third_party/2and3/werkzeug/useragents.pyi | 14 + .../third_party/2and3/werkzeug/utils.pyi | 58 + .../third_party/2and3/werkzeug/wrappers.pyi | 249 +++ .../third_party/2and3/werkzeug/wsgi.pyi | 91 + .../third_party/2and3/yaml/__init__.pyi | 82 + .../third_party/2and3/yaml/composer.pyi | 17 + .../third_party/2and3/yaml/constructor.pyi | 68 + .../typeshed/third_party/2and3/yaml/cyaml.pyi | 47 + .../third_party/2and3/yaml/dumper.pyi | 13 + .../third_party/2and3/yaml/emitter.pyi | 106 + .../typeshed/third_party/2and3/yaml/error.pyi | 21 + .../third_party/2and3/yaml/events.pyi | 62 + .../third_party/2and3/yaml/loader.pyi | 15 + .../typeshed/third_party/2and3/yaml/nodes.pyi | 31 + .../third_party/2and3/yaml/parser.pyi | 44 + .../third_party/2and3/yaml/reader.pyi | 34 + .../third_party/2and3/yaml/representer.pyi | 54 + .../third_party/2and3/yaml/resolver.pyi | 24 + .../third_party/2and3/yaml/scanner.pyi | 96 + .../third_party/2and3/yaml/serializer.pyi | 23 + .../third_party/2and3/yaml/tokens.pyi | 93 + .../typeshed/third_party/3.5/contextvars.pyi | 30 + .../typeshed/third_party/3/dataclasses.pyi | 71 + .../third_party/3/docutils/__init__.pyi | 3 + .../third_party/3/docutils/examples.pyi | 5 + .../typeshed/third_party/3/docutils/nodes.pyi | 10 + .../3/docutils/parsers/__init__.pyi | 3 + .../3/docutils/parsers/rst/__init__.pyi | 3 + .../3/docutils/parsers/rst/nodes.pyi | 3 + .../3/docutils/parsers/rst/roles.pyi | 12 + .../3/docutils/parsers/rst/states.pyi | 8 + .../typeshed/third_party/3/jwt/__init__.pyi | 43 + .../typeshed/third_party/3/jwt/algorithms.pyi | 83 + .../third_party/3/jwt/contrib/__init__.pyi | 0 .../3/jwt/contrib/algorithms/__init__.pyi | 1 + .../3/jwt/contrib/algorithms/py_ecdsa.pyi | 10 + .../3/jwt/contrib/algorithms/pycrypto.pyi | 10 + .../typeshed/third_party/3/orjson.pyi | 14 + .../third_party/3/pkg_resources/__init__.pyi | 253 +++ .../3/pkg_resources/py31compat.pyi | 14 + .../typeshed/third_party/3/six/__init__.pyi | 108 + .../3/six/moves/BaseHTTPServer.pyi | 1 + .../third_party/3/six/moves/CGIHTTPServer.pyi | 1 + .../3/six/moves/SimpleHTTPServer.pyi | 1 + .../third_party/3/six/moves/__init__.pyi | 69 + .../third_party/3/six/moves/_dummy_thread.pyi | 1 + .../third_party/3/six/moves/_thread.pyi | 1 + .../third_party/3/six/moves/builtins.pyi | 1 + .../third_party/3/six/moves/cPickle.pyi | 1 + .../third_party/3/six/moves/configparser.pyi | 1 + .../3/six/moves/email_mime_base.pyi | 1 + .../3/six/moves/email_mime_multipart.pyi | 1 + .../3/six/moves/email_mime_nonmultipart.pyi | 1 + .../3/six/moves/email_mime_text.pyi | 1 + .../third_party/3/six/moves/html_entities.pyi | 1 + .../third_party/3/six/moves/html_parser.pyi | 1 + .../third_party/3/six/moves/http_client.pyi | 1 + .../3/six/moves/http_cookiejar.pyi | 1 + .../third_party/3/six/moves/http_cookies.pyi | 1 + .../third_party/3/six/moves/queue.pyi | 1 + .../third_party/3/six/moves/reprlib.pyi | 1 + .../third_party/3/six/moves/socketserver.pyi | 1 + .../third_party/3/six/moves/tkinter.pyi | 1 + .../3/six/moves/tkinter_commondialog.pyi | 1 + .../3/six/moves/tkinter_constants.pyi | 1 + .../3/six/moves/tkinter_dialog.pyi | 1 + .../3/six/moves/tkinter_filedialog.pyi | 1 + .../3/six/moves/tkinter_tkfiledialog.pyi | 1 + .../third_party/3/six/moves/tkinter_ttk.pyi | 1 + .../3/six/moves/urllib/__init__.pyi | 5 + .../third_party/3/six/moves/urllib/error.pyi | 3 + .../third_party/3/six/moves/urllib/parse.pyi | 27 + .../3/six/moves/urllib/request.pyi | 39 + .../3/six/moves/urllib/response.pyi | 8 + .../3/six/moves/urllib/robotparser.pyi | 1 + .../third_party/3/six/moves/urllib_error.pyi | 1 + .../third_party/3/six/moves/urllib_parse.pyi | 1 + .../3/six/moves/urllib_request.pyi | 1 + .../3/six/moves/urllib_response.pyi | 1 + .../3/six/moves/urllib_robotparser.pyi | 1 + .../third_party/3/typed_ast/__init__.pyi | 2 + .../third_party/3/typed_ast/ast27.pyi | 361 ++++ .../typeshed/third_party/3/typed_ast/ast3.pyi | 413 ++++ .../third_party/3/typed_ast/conversions.pyi | 4 + .../pythonx/jedi/build/lib/jedi/utils.py | 134 ++ vim/bundle/jedi-vim/pythonx/jedi/conftest.py | 158 ++ .../jedi-vim/pythonx/jedi/deploy-master.sh | 53 + .../pythonx/jedi/dist/jedi-0.15.1-py3.6.egg | Bin 0 -> 1257030 bytes .../jedi-vim/pythonx/jedi/docs/Makefile | 153 ++ .../jedi-vim/pythonx/jedi/docs/README.md | 14 + .../docs/_screenshots/screenshot_complete.png | Bin 0 -> 17109 bytes .../docs/_screenshots/screenshot_function.png | Bin 0 -> 40035 bytes .../docs/_screenshots/screenshot_pydoc.png | Bin 0 -> 22041 bytes .../pythonx/jedi/docs/_static/logo-src.txt | 3 + .../pythonx/jedi/docs/_static/logo.png | Bin 0 -> 28795 bytes .../jedi/docs/_templates/ghbuttons.html | 4 + .../jedi/docs/_templates/sidebarlogo.html | 3 + .../pythonx/jedi/docs/_themes/flask/LICENSE | 37 + .../jedi/docs/_themes/flask/layout.html | 27 + .../jedi/docs/_themes/flask/relations.html | 19 + .../docs/_themes/flask/static/flasky.css_t | 394 ++++ .../docs/_themes/flask/static/small_flask.css | 70 + .../jedi/docs/_themes/flask/theme.conf | 9 + .../jedi/docs/_themes/flask_theme_support.py | 125 ++ vim/bundle/jedi-vim/pythonx/jedi/docs/conf.py | 291 +++ .../pythonx/jedi/docs/docs/api-classes.rst | 10 + .../jedi-vim/pythonx/jedi/docs/docs/api.rst | 132 ++ .../pythonx/jedi/docs/docs/development.rst | 222 ++ .../pythonx/jedi/docs/docs/features.rst | 236 +++ .../pythonx/jedi/docs/docs/installation.rst | 87 + .../pythonx/jedi/docs/docs/settings.rst | 6 + .../pythonx/jedi/docs/docs/testing.rst | 40 + .../jedi-vim/pythonx/jedi/docs/docs/usage.rst | 117 ++ .../jedi-vim/pythonx/jedi/docs/global.rst | 3 + .../jedi-vim/pythonx/jedi/docs/index.rst | 40 + .../pythonx/jedi/jedi.egg-info/PKG-INFO | 439 ++++ .../pythonx/jedi/jedi.egg-info/SOURCES.txt | 1369 +++++++++++++ .../jedi/jedi.egg-info/dependency_links.txt | 1 + .../pythonx/jedi/jedi.egg-info/requires.txt | 6 + .../pythonx/jedi/jedi.egg-info/top_level.txt | 1 + .../jedi-vim/pythonx/jedi/jedi/__init__.py | 47 + .../jedi-vim/pythonx/jedi/jedi/__main__.py | 48 + .../pythonx/jedi/jedi/_compatibility.py | 665 ++++++ .../pythonx/jedi/jedi/api/__init__.py | 548 +++++ .../jedi-vim/pythonx/jedi/jedi/api/classes.py | 768 +++++++ .../pythonx/jedi/jedi/api/completion.py | 326 +++ .../pythonx/jedi/jedi/api/environment.py | 458 +++++ .../pythonx/jedi/jedi/api/exceptions.py | 10 + .../pythonx/jedi/jedi/api/file_name.py | 161 ++ .../jedi-vim/pythonx/jedi/jedi/api/helpers.py | 397 ++++ .../pythonx/jedi/jedi/api/interpreter.py | 47 + .../pythonx/jedi/jedi/api/keywords.py | 85 + .../jedi-vim/pythonx/jedi/jedi/api/project.py | 197 ++ .../pythonx/jedi/jedi/api/replstartup.py | 29 + .../jedi-vim/pythonx/jedi/jedi/cache.py | 146 ++ .../pythonx/jedi/jedi/common/__init__.py | 1 + .../pythonx/jedi/jedi/common/context.py | 73 + .../pythonx/jedi/jedi/common/utils.py | 26 + .../jedi-vim/pythonx/jedi/jedi/debug.py | 143 ++ .../pythonx/jedi/jedi/evaluate/__init__.py | 443 ++++ .../pythonx/jedi/jedi/evaluate/analysis.py | 224 +++ .../pythonx/jedi/jedi/evaluate/arguments.py | 382 ++++ .../jedi/jedi/evaluate/base_context.py | 436 ++++ .../pythonx/jedi/jedi/evaluate/cache.py | 123 ++ .../jedi/jedi/evaluate/compiled/__init__.py | 64 + .../jedi/jedi/evaluate/compiled/access.py | 497 +++++ .../jedi/jedi/evaluate/compiled/context.py | 541 +++++ .../jedi/evaluate/compiled/getattr_static.py | 176 ++ .../jedi/jedi/evaluate/compiled/mixed.py | 291 +++ .../evaluate/compiled/subprocess/__init__.py | 406 ++++ .../evaluate/compiled/subprocess/__main__.py | 55 + .../evaluate/compiled/subprocess/functions.py | 86 + .../jedi/jedi/evaluate/context/__init__.py | 6 + .../jedi/jedi/evaluate/context/decorator.py | 15 + .../jedi/jedi/evaluate/context/function.py | 444 ++++ .../jedi/jedi/evaluate/context/instance.py | 531 +++++ .../jedi/jedi/evaluate/context/iterable.py | 821 ++++++++ .../jedi/jedi/evaluate/context/klass.py | 344 ++++ .../jedi/jedi/evaluate/context/module.py | 283 +++ .../jedi/jedi/evaluate/context/namespace.py | 64 + .../pythonx/jedi/jedi/evaluate/docstrings.py | 311 +++ .../pythonx/jedi/jedi/evaluate/dynamic.py | 231 +++ .../pythonx/jedi/jedi/evaluate/filters.py | 412 ++++ .../pythonx/jedi/jedi/evaluate/finder.py | 290 +++ .../jedi/jedi/evaluate/flow_analysis.py | 118 ++ .../jedi/jedi/evaluate/gradual/__init__.py | 0 .../jedi/jedi/evaluate/gradual/annotation.py | 405 ++++ .../jedi/jedi/evaluate/gradual/conversion.py | 199 ++ .../jedi/evaluate/gradual/stub_context.py | 105 + .../jedi/jedi/evaluate/gradual/typeshed.py | 289 +++ .../jedi/jedi/evaluate/gradual/typing.py | 707 +++++++ .../jedi/jedi/evaluate/gradual/utils.py | 32 + .../pythonx/jedi/jedi/evaluate/helpers.py | 269 +++ .../pythonx/jedi/jedi/evaluate/imports.py | 568 ++++++ .../jedi/jedi/evaluate/lazy_context.py | 59 + .../pythonx/jedi/jedi/evaluate/names.py | 375 ++++ .../pythonx/jedi/jedi/evaluate/param.py | 253 +++ .../jedi/jedi/evaluate/parser_cache.py | 6 + .../pythonx/jedi/jedi/evaluate/recursion.py | 153 ++ .../pythonx/jedi/jedi/evaluate/signature.py | 116 ++ .../pythonx/jedi/jedi/evaluate/star_args.py | 206 ++ .../pythonx/jedi/jedi/evaluate/syntax_tree.py | 730 +++++++ .../pythonx/jedi/jedi/evaluate/sys_path.py | 261 +++ .../pythonx/jedi/jedi/evaluate/usages.py | 61 + .../pythonx/jedi/jedi/evaluate/utils.py | 119 ++ .../jedi-vim/pythonx/jedi/jedi/file_io.py | 48 + .../pythonx/jedi/jedi/parser_utils.py | 297 +++ .../pythonx/jedi/jedi/plugins/__init__.py | 47 + .../pythonx/jedi/jedi/plugins/flask.py | 21 + .../pythonx/jedi/jedi/plugins/registry.py | 10 + .../pythonx/jedi/jedi/plugins/stdlib.py | 835 ++++++++ .../jedi-vim/pythonx/jedi/jedi/refactoring.py | 203 ++ .../jedi-vim/pythonx/jedi/jedi/settings.py | 163 ++ .../jedi/jedi/third_party/typeshed/.flake8 | 25 + .../jedi/third_party/typeshed/.travis.yml | 30 + .../jedi/third_party/typeshed/CONTRIBUTING.md | 382 ++++ .../jedi/jedi/third_party/typeshed/LICENSE | 238 +++ .../jedi/jedi/third_party/typeshed/README.md | 144 ++ .../typeshed/requirements-tests-py3.txt | 6 + .../typeshed/stdlib/2/BaseHTTPServer.pyi | 47 + .../typeshed/stdlib/2/ConfigParser.pyi | 97 + .../third_party/typeshed/stdlib/2/Cookie.pyi | 40 + .../typeshed/stdlib/2/HTMLParser.pyi | 31 + .../third_party/typeshed/stdlib/2/Queue.pyi | 31 + .../typeshed/stdlib/2/SimpleHTTPServer.pyi | 16 + .../typeshed/stdlib/2/SocketServer.pyi | 99 + .../typeshed/stdlib/2/StringIO.pyi | 30 + .../typeshed/stdlib/2/UserDict.pyi | 44 + .../typeshed/stdlib/2/UserList.pyi | 18 + .../typeshed/stdlib/2/UserString.pyi | 75 + .../typeshed/stdlib/2/__builtin__.pyi | 1622 +++++++++++++++ .../third_party/typeshed/stdlib/2/_ast.pyi | 330 +++ .../typeshed/stdlib/2/_collections.pyi | 41 + .../typeshed/stdlib/2/_functools.pyi | 87 + .../typeshed/stdlib/2/_hotshot.pyi | 34 + .../third_party/typeshed/stdlib/2/_io.pyi | 183 ++ .../third_party/typeshed/stdlib/2/_json.pyi | 17 + .../third_party/typeshed/stdlib/2/_md5.pyi | 13 + .../third_party/typeshed/stdlib/2/_sha.pyi | 15 + .../third_party/typeshed/stdlib/2/_sha256.pyi | 23 + .../third_party/typeshed/stdlib/2/_sha512.pyi | 23 + .../third_party/typeshed/stdlib/2/_socket.pyi | 287 +++ .../third_party/typeshed/stdlib/2/_sre.pyi | 53 + .../third_party/typeshed/stdlib/2/_struct.pyi | 22 + .../typeshed/stdlib/2/_symtable.pyi | 39 + .../typeshed/stdlib/2/_threading_local.pyi | 14 + .../typeshed/stdlib/2/_warnings.pyi | 11 + .../third_party/typeshed/stdlib/2/abc.pyi | 29 + .../third_party/typeshed/stdlib/2/ast.pyi | 28 + .../third_party/typeshed/stdlib/2/atexit.pyi | 5 + .../third_party/typeshed/stdlib/2/cPickle.pyi | 32 + .../typeshed/stdlib/2/cStringIO.pyi | 54 + .../typeshed/stdlib/2/collections.pyi | 126 ++ .../typeshed/stdlib/2/commands.pyi | 12 + .../typeshed/stdlib/2/compileall.pyi | 10 + .../typeshed/stdlib/2/cookielib.pyi | 110 + .../typeshed/stdlib/2/dircache.pyi | 10 + .../typeshed/stdlib/2/distutils/__init__.pyi | 0 .../stdlib/2/distutils/emxccompiler.pyi | 5 + .../typeshed/stdlib/2/dummy_thread.pyi | 21 + .../typeshed/stdlib/2/email/MIMEText.pyi | 4 + .../typeshed/stdlib/2/email/__init__.pyi | 6 + .../typeshed/stdlib/2/email/_parseaddr.pyi | 40 + .../typeshed/stdlib/2/email/base64mime.pyi | 8 + .../typeshed/stdlib/2/email/charset.pyi | 26 + .../typeshed/stdlib/2/email/encoders.pyi | 4 + .../typeshed/stdlib/2/email/feedparser.pyi | 18 + .../typeshed/stdlib/2/email/generator.pyi | 9 + .../typeshed/stdlib/2/email/header.pyi | 11 + .../typeshed/stdlib/2/email/iterators.pyi | 5 + .../typeshed/stdlib/2/email/message.pyi | 45 + .../typeshed/stdlib/2/email/mime/__init__.pyi | 0 .../stdlib/2/email/mime/application.pyi | 11 + .../typeshed/stdlib/2/email/mime/audio.pyi | 5 + .../typeshed/stdlib/2/email/mime/base.pyi | 4 + .../typeshed/stdlib/2/email/mime/image.pyi | 5 + .../typeshed/stdlib/2/email/mime/message.pyi | 5 + .../stdlib/2/email/mime/multipart.pyi | 4 + .../stdlib/2/email/mime/nonmultipart.pyi | 4 + .../typeshed/stdlib/2/email/mime/text.pyi | 4 + .../typeshed/stdlib/2/email/parser.pyi | 10 + .../typeshed/stdlib/2/email/quoprimime.pyi | 18 + .../typeshed/stdlib/2/email/utils.pyi | 19 + .../typeshed/stdlib/2/encodings/__init__.pyi | 6 + .../typeshed/stdlib/2/encodings/utf_8.pyi | 15 + .../typeshed/stdlib/2/exceptions.pyi | 48 + .../third_party/typeshed/stdlib/2/fcntl.pyi | 87 + .../third_party/typeshed/stdlib/2/fnmatch.pyi | 8 + .../typeshed/stdlib/2/functools.pyi | 101 + .../typeshed/stdlib/2/future_builtins.pyi | 14 + .../jedi/third_party/typeshed/stdlib/2/gc.pyi | 29 + .../third_party/typeshed/stdlib/2/getopt.pyi | 12 + .../third_party/typeshed/stdlib/2/getpass.pyi | 8 + .../third_party/typeshed/stdlib/2/gettext.pyi | 41 + .../third_party/typeshed/stdlib/2/glob.pyi | 7 + .../third_party/typeshed/stdlib/2/gzip.pyi | 37 + .../third_party/typeshed/stdlib/2/hashlib.pyi | 31 + .../third_party/typeshed/stdlib/2/heapq.pyi | 16 + .../typeshed/stdlib/2/htmlentitydefs.pyi | 5 + .../third_party/typeshed/stdlib/2/httplib.pyi | 205 ++ .../third_party/typeshed/stdlib/2/imp.pyi | 35 + .../typeshed/stdlib/2/importlib.pyi | 4 + .../third_party/typeshed/stdlib/2/inspect.pyi | 135 ++ .../jedi/third_party/typeshed/stdlib/2/io.pyi | 42 + .../typeshed/stdlib/2/itertools.pyi | 165 ++ .../third_party/typeshed/stdlib/2/json.pyi | 96 + .../typeshed/stdlib/2/markupbase.pyi | 9 + .../third_party/typeshed/stdlib/2/md5.pyi | 6 + .../typeshed/stdlib/2/mimetools.pyi | 27 + .../stdlib/2/multiprocessing/__init__.pyi | 50 + .../2/multiprocessing/dummy/__init__.pyi | 51 + .../2/multiprocessing/dummy/connection.pyi | 26 + .../stdlib/2/multiprocessing/pool.pyi | 59 + .../stdlib/2/multiprocessing/process.pyi | 36 + .../stdlib/2/multiprocessing/util.pyi | 29 + .../third_party/typeshed/stdlib/2/mutex.pyi | 15 + .../typeshed/stdlib/2/nturl2path.pyi | 4 + .../typeshed/stdlib/2/os/__init__.pyi | 369 ++++ .../third_party/typeshed/stdlib/2/os/path.pyi | 180 ++ .../typeshed/stdlib/2/os2emxpath.pyi | 180 ++ .../third_party/typeshed/stdlib/2/pipes.pyi | 13 + .../typeshed/stdlib/2/platform.pyi | 45 + .../third_party/typeshed/stdlib/2/popen2.pyi | 28 + .../third_party/typeshed/stdlib/2/posix.pyi | 205 ++ .../third_party/typeshed/stdlib/2/random.pyi | 75 + .../jedi/third_party/typeshed/stdlib/2/re.pyi | 100 + .../third_party/typeshed/stdlib/2/repr.pyi | 31 + .../typeshed/stdlib/2/resource.pyi | 33 + .../third_party/typeshed/stdlib/2/rfc822.pyi | 79 + .../typeshed/stdlib/2/robotparser.pyi | 7 + .../third_party/typeshed/stdlib/2/runpy.pyi | 17 + .../third_party/typeshed/stdlib/2/sets.pyi | 61 + .../third_party/typeshed/stdlib/2/sha.pyi | 11 + .../third_party/typeshed/stdlib/2/shelve.pyi | 33 + .../third_party/typeshed/stdlib/2/shlex.pyi | 30 + .../third_party/typeshed/stdlib/2/signal.pyi | 71 + .../third_party/typeshed/stdlib/2/smtplib.pyi | 86 + .../third_party/typeshed/stdlib/2/spwd.pyi | 14 + .../typeshed/stdlib/2/sre_constants.pyi | 94 + .../typeshed/stdlib/2/sre_parse.pyi | 63 + .../third_party/typeshed/stdlib/2/stat.pyi | 59 + .../third_party/typeshed/stdlib/2/string.pyi | 78 + .../typeshed/stdlib/2/stringold.pyi | 46 + .../third_party/typeshed/stdlib/2/strop.pyi | 72 + .../typeshed/stdlib/2/subprocess.pyi | 117 ++ .../third_party/typeshed/stdlib/2/symbol.pyi | 91 + .../third_party/typeshed/stdlib/2/sys.pyi | 138 ++ .../typeshed/stdlib/2/tempfile.pyi | 111 + .../typeshed/stdlib/2/textwrap.pyi | 61 + .../third_party/typeshed/stdlib/2/thread.pyi | 30 + .../third_party/typeshed/stdlib/2/toaiff.pyi | 16 + .../typeshed/stdlib/2/tokenize.pyi | 136 ++ .../third_party/typeshed/stdlib/2/types.pyi | 168 ++ .../third_party/typeshed/stdlib/2/typing.pyi | 468 +++++ .../typeshed/stdlib/2/unittest.pyi | 262 +++ .../third_party/typeshed/stdlib/2/urllib.pyi | 134 ++ .../third_party/typeshed/stdlib/2/urllib2.pyi | 182 ++ .../typeshed/stdlib/2/urlparse.pyi | 70 + .../third_party/typeshed/stdlib/2/user.pyi | 9 + .../third_party/typeshed/stdlib/2/whichdb.pyi | 5 + .../typeshed/stdlib/2/xmlrpclib.pyi | 199 ++ .../typeshed/stdlib/2and3/__future__.pyi | 24 + .../typeshed/stdlib/2and3/_bisect.pyi | 11 + .../typeshed/stdlib/2and3/_codecs.pyi | 74 + .../typeshed/stdlib/2and3/_csv.pyi | 49 + .../typeshed/stdlib/2and3/_heapq.pyi | 15 + .../typeshed/stdlib/2and3/_random.pyi | 17 + .../typeshed/stdlib/2and3/_weakref.pyi | 28 + .../typeshed/stdlib/2and3/_weakrefset.pyi | 43 + .../typeshed/stdlib/2and3/argparse.pyi | 408 ++++ .../typeshed/stdlib/2and3/array.pyi | 73 + .../typeshed/stdlib/2and3/asynchat.pyi | 41 + .../typeshed/stdlib/2and3/asyncore.pyi | 144 ++ .../typeshed/stdlib/2and3/base64.pyi | 38 + .../typeshed/stdlib/2and3/binascii.pyi | 47 + .../typeshed/stdlib/2and3/binhex.pyi | 48 + .../typeshed/stdlib/2and3/bisect.pyi | 22 + .../typeshed/stdlib/2and3/builtins.pyi | 1622 +++++++++++++++ .../third_party/typeshed/stdlib/2and3/bz2.pyi | 48 + .../typeshed/stdlib/2and3/cProfile.pyi | 24 + .../typeshed/stdlib/2and3/calendar.pyi | 122 ++ .../third_party/typeshed/stdlib/2and3/cgi.pyi | 122 ++ .../typeshed/stdlib/2and3/chunk.pyi | 23 + .../typeshed/stdlib/2and3/cmath.pyi | 42 + .../third_party/typeshed/stdlib/2and3/cmd.pyi | 41 + .../typeshed/stdlib/2and3/code.pyi | 38 + .../typeshed/stdlib/2and3/codecs.pyi | 242 +++ .../typeshed/stdlib/2and3/codeop.pyi | 17 + .../typeshed/stdlib/2and3/colorsys.pyi | 15 + .../typeshed/stdlib/2and3/contextlib.pyi | 99 + .../typeshed/stdlib/2and3/copy.pyi | 14 + .../typeshed/stdlib/2and3/crypt.pyi | 23 + .../third_party/typeshed/stdlib/2and3/csv.pyi | 93 + .../typeshed/stdlib/2and3/ctypes/__init__.pyi | 285 +++ .../typeshed/stdlib/2and3/ctypes/util.pyi | 8 + .../typeshed/stdlib/2and3/ctypes/wintypes.pyi | 209 ++ .../typeshed/stdlib/2and3/datetime.pyi | 290 +++ .../typeshed/stdlib/2and3/decimal.pyi | 315 +++ .../typeshed/stdlib/2and3/difflib.pyi | 87 + .../third_party/typeshed/stdlib/2and3/dis.pyi | 77 + .../stdlib/2and3/distutils/__init__.pyi | 0 .../stdlib/2and3/distutils/archive_util.pyi | 12 + .../stdlib/2and3/distutils/bcppcompiler.pyi | 6 + .../stdlib/2and3/distutils/ccompiler.pyi | 119 ++ .../typeshed/stdlib/2and3/distutils/cmd.pyi | 40 + .../2and3/distutils/command/__init__.pyi | 0 .../stdlib/2and3/distutils/command/bdist.pyi | 0 .../2and3/distutils/command/bdist_dumb.pyi | 0 .../2and3/distutils/command/bdist_msi.pyi | 6 + .../distutils/command/bdist_packager.pyi | 0 .../2and3/distutils/command/bdist_rpm.pyi | 0 .../2and3/distutils/command/bdist_wininst.pyi | 0 .../stdlib/2and3/distutils/command/build.pyi | 0 .../2and3/distutils/command/build_clib.pyi | 0 .../2and3/distutils/command/build_ext.pyi | 0 .../2and3/distutils/command/build_py.pyi | 10 + .../2and3/distutils/command/build_scripts.pyi | 0 .../stdlib/2and3/distutils/command/check.pyi | 0 .../stdlib/2and3/distutils/command/clean.pyi | 0 .../stdlib/2and3/distutils/command/config.pyi | 0 .../2and3/distutils/command/install.pyi | 14 + .../2and3/distutils/command/install_data.pyi | 0 .../distutils/command/install_headers.pyi | 0 .../2and3/distutils/command/install_lib.pyi | 0 .../distutils/command/install_scripts.pyi | 0 .../2and3/distutils/command/register.pyi | 0 .../stdlib/2and3/distutils/command/sdist.pyi | 0 .../typeshed/stdlib/2and3/distutils/core.pyi | 50 + .../2and3/distutils/cygwinccompiler.pyi | 7 + .../typeshed/stdlib/2and3/distutils/debug.pyi | 3 + .../stdlib/2and3/distutils/dep_util.pyi | 8 + .../stdlib/2and3/distutils/dir_util.pyi | 15 + .../typeshed/stdlib/2and3/distutils/dist.pyi | 11 + .../stdlib/2and3/distutils/errors.pyi | 19 + .../stdlib/2and3/distutils/extension.pyi | 39 + .../stdlib/2and3/distutils/fancy_getopt.pyi | 27 + .../stdlib/2and3/distutils/file_util.pyi | 12 + .../stdlib/2and3/distutils/filelist.pyi | 3 + .../typeshed/stdlib/2and3/distutils/log.pyi | 28 + .../stdlib/2and3/distutils/msvccompiler.pyi | 6 + .../typeshed/stdlib/2and3/distutils/spawn.pyi | 8 + .../stdlib/2and3/distutils/sysconfig.pyi | 19 + .../stdlib/2and3/distutils/text_file.pyi | 18 + .../stdlib/2and3/distutils/unixccompiler.pyi | 6 + .../typeshed/stdlib/2and3/distutils/util.pyi | 20 + .../stdlib/2and3/distutils/version.pyi | 54 + .../typeshed/stdlib/2and3/doctest.pyi | 161 ++ .../typeshed/stdlib/2and3/errno.pyi | 130 ++ .../typeshed/stdlib/2and3/filecmp.pyi | 48 + .../typeshed/stdlib/2and3/fileinput.pyi | 62 + .../typeshed/stdlib/2and3/formatter.pyi | 105 + .../typeshed/stdlib/2and3/fractions.pyi | 96 + .../typeshed/stdlib/2and3/ftplib.pyi | 134 ++ .../typeshed/stdlib/2and3/genericpath.pyi | 21 + .../third_party/typeshed/stdlib/2and3/grp.pyi | 10 + .../typeshed/stdlib/2and3/hmac.pyi | 38 + .../typeshed/stdlib/2and3/imaplib.pyi | 133 ++ .../typeshed/stdlib/2and3/imghdr.pyi | 16 + .../typeshed/stdlib/2and3/keyword.pyi | 6 + .../stdlib/2and3/lib2to3/__init__.pyi | 1 + .../stdlib/2and3/lib2to3/pgen2/__init__.pyi | 10 + .../stdlib/2and3/lib2to3/pgen2/driver.pyi | 24 + .../stdlib/2and3/lib2to3/pgen2/grammar.pyi | 29 + .../stdlib/2and3/lib2to3/pgen2/literals.pyi | 9 + .../stdlib/2and3/lib2to3/pgen2/parse.pyi | 29 + .../stdlib/2and3/lib2to3/pgen2/pgen.pyi | 50 + .../stdlib/2and3/lib2to3/pgen2/token.pyi | 73 + .../stdlib/2and3/lib2to3/pgen2/tokenize.pyi | 30 + .../typeshed/stdlib/2and3/lib2to3/pygram.pyi | 116 ++ .../typeshed/stdlib/2and3/lib2to3/pytree.pyi | 86 + .../typeshed/stdlib/2and3/linecache.pyi | 12 + .../typeshed/stdlib/2and3/locale.pyi | 113 ++ .../stdlib/2and3/logging/__init__.pyi | 433 ++++ .../typeshed/stdlib/2and3/logging/config.pyi | 33 + .../stdlib/2and3/logging/handlers.pyi | 213 ++ .../typeshed/stdlib/2and3/macpath.pyi | 180 ++ .../typeshed/stdlib/2and3/marshal.pyi | 8 + .../typeshed/stdlib/2and3/math.pyi | 71 + .../typeshed/stdlib/2and3/mimetypes.pyi | 38 + .../typeshed/stdlib/2and3/mmap.pyi | 73 + .../typeshed/stdlib/2and3/netrc.pyi | 19 + .../third_party/typeshed/stdlib/2and3/nis.pyi | 10 + .../typeshed/stdlib/2and3/ntpath.pyi | 180 ++ .../typeshed/stdlib/2and3/numbers.pyi | 140 ++ .../typeshed/stdlib/2and3/opcode.pyi | 23 + .../typeshed/stdlib/2and3/operator.pyi | 227 +++ .../typeshed/stdlib/2and3/optparse.pyi | 228 +++ .../third_party/typeshed/stdlib/2and3/pdb.pyi | 62 + .../typeshed/stdlib/2and3/pickle.pyi | 140 ++ .../typeshed/stdlib/2and3/pickletools.pyi | 145 ++ .../typeshed/stdlib/2and3/pkgutil.pyi | 35 + .../typeshed/stdlib/2and3/plistlib.pyi | 57 + .../typeshed/stdlib/2and3/poplib.pyi | 77 + .../typeshed/stdlib/2and3/posixpath.pyi | 180 ++ .../typeshed/stdlib/2and3/pprint.pyi | 40 + .../typeshed/stdlib/2and3/profile.pyi | 27 + .../typeshed/stdlib/2and3/pstats.pyi | 39 + .../third_party/typeshed/stdlib/2and3/pty.pyi | 20 + .../third_party/typeshed/stdlib/2and3/pwd.pyi | 13 + .../typeshed/stdlib/2and3/py_compile.pyi | 20 + .../typeshed/stdlib/2and3/pyclbr.pyi | 40 + .../typeshed/stdlib/2and3/pydoc.pyi | 180 ++ .../stdlib/2and3/pyexpat/__init__.pyi | 75 + .../typeshed/stdlib/2and3/pyexpat/errors.pyi | 44 + .../typeshed/stdlib/2and3/pyexpat/model.pyi | 11 + .../typeshed/stdlib/2and3/quopri.pyi | 8 + .../typeshed/stdlib/2and3/readline.pyi | 41 + .../typeshed/stdlib/2and3/rlcompleter.pyi | 14 + .../typeshed/stdlib/2and3/sched.pyi | 27 + .../typeshed/stdlib/2and3/select.pyi | 137 ++ .../typeshed/stdlib/2and3/shutil.pyi | 135 ++ .../typeshed/stdlib/2and3/site.pyi | 17 + .../typeshed/stdlib/2and3/smtpd.pyi | 87 + .../typeshed/stdlib/2and3/sndhdr.pyi | 25 + .../typeshed/stdlib/2and3/socket.pyi | 626 ++++++ .../stdlib/2and3/sqlite3/__init__.pyi | 1 + .../typeshed/stdlib/2and3/sqlite3/dbapi2.pyi | 289 +++ .../typeshed/stdlib/2and3/sre_compile.pyi | 18 + .../third_party/typeshed/stdlib/2and3/ssl.pyi | 313 +++ .../typeshed/stdlib/2and3/stringprep.pyi | 23 + .../typeshed/stdlib/2and3/struct.pyi | 44 + .../typeshed/stdlib/2and3/sunau.pyi | 87 + .../typeshed/stdlib/2and3/symtable.pyi | 45 + .../typeshed/stdlib/2and3/sysconfig.pyi | 19 + .../typeshed/stdlib/2and3/syslog.pyi | 44 + .../typeshed/stdlib/2and3/tabnanny.pyi | 22 + .../typeshed/stdlib/2and3/tarfile.pyi | 189 ++ .../typeshed/stdlib/2and3/telnetlib.pyi | 115 ++ .../typeshed/stdlib/2and3/termios.pyi | 248 +++ .../typeshed/stdlib/2and3/threading.pyi | 187 ++ .../typeshed/stdlib/2and3/time.pyi | 103 + .../typeshed/stdlib/2and3/timeit.pyi | 34 + .../typeshed/stdlib/2and3/token.pyi | 71 + .../typeshed/stdlib/2and3/trace.pyi | 35 + .../typeshed/stdlib/2and3/traceback.pyi | 120 ++ .../third_party/typeshed/stdlib/2and3/tty.pyi | 17 + .../typeshed/stdlib/2and3/turtle.pyi | 501 +++++ .../typeshed/stdlib/2and3/unicodedata.pyi | 38 + .../third_party/typeshed/stdlib/2and3/uu.pyi | 13 + .../typeshed/stdlib/2and3/uuid.pyi | 90 + .../typeshed/stdlib/2and3/warnings.pyi | 38 + .../typeshed/stdlib/2and3/wave.pyi | 76 + .../typeshed/stdlib/2and3/weakref.pyi | 110 + .../typeshed/stdlib/2and3/webbrowser.pyi | 99 + .../stdlib/2and3/wsgiref/__init__.pyi | 0 .../stdlib/2and3/wsgiref/handlers.pyi | 87 + .../typeshed/stdlib/2and3/wsgiref/headers.pyi | 31 + .../stdlib/2and3/wsgiref/simple_server.pyi | 40 + .../typeshed/stdlib/2and3/wsgiref/types.pyi | 44 + .../typeshed/stdlib/2and3/wsgiref/util.pyi | 23 + .../stdlib/2and3/wsgiref/validate.pyi | 53 + .../typeshed/stdlib/2and3/xdrlib.pyi | 56 + .../typeshed/stdlib/2and3/xml/__init__.pyi | 1 + .../stdlib/2and3/xml/etree/ElementInclude.pyi | 17 + .../stdlib/2and3/xml/etree/ElementPath.pyi | 33 + .../stdlib/2and3/xml/etree/ElementTree.pyi | 167 ++ .../stdlib/2and3/xml/etree/__init__.pyi | 0 .../stdlib/2and3/xml/etree/cElementTree.pyi | 3 + .../stdlib/2and3/xml/parsers/__init__.pyi | 1 + .../2and3/xml/parsers/expat/__init__.pyi | 1 + .../stdlib/2and3/xml/parsers/expat/errors.pyi | 1 + .../stdlib/2and3/xml/parsers/expat/model.pyi | 1 + .../stdlib/2and3/xml/sax/__init__.pyi | 34 + .../typeshed/stdlib/2and3/xml/sax/handler.pyi | 46 + .../stdlib/2and3/xml/sax/saxutils.pyi | 58 + .../stdlib/2and3/xml/sax/xmlreader.pyi | 71 + .../typeshed/stdlib/2and3/zipfile.pyi | 105 + .../typeshed/stdlib/2and3/zipimport.pyi | 18 + .../typeshed/stdlib/2and3/zlib.pyi | 55 + .../typeshed/stdlib/3.5/zipapp.pyi | 16 + .../typeshed/stdlib/3.6/secrets.pyi | 14 + .../typeshed/stdlib/3.7/contextvars.pyi | 30 + .../typeshed/stdlib/3.7/dataclasses.pyi | 71 + .../third_party/typeshed/stdlib/3/_ast.pyi | 409 ++++ .../typeshed/stdlib/3/_compression.pyi | 16 + .../third_party/typeshed/stdlib/3/_curses.pyi | 447 +++++ .../typeshed/stdlib/3/_dummy_thread.pyi | 21 + .../third_party/typeshed/stdlib/3/_imp.pyi | 22 + .../stdlib/3/_importlib_modulespec.pyi | 45 + .../third_party/typeshed/stdlib/3/_json.pyi | 30 + .../typeshed/stdlib/3/_markupbase.pyi | 9 + .../typeshed/stdlib/3/_operator.pyi | 64 + .../typeshed/stdlib/3/_posixsubprocess.pyi | 14 + .../third_party/typeshed/stdlib/3/_stat.pyi | 69 + .../typeshed/stdlib/3/_subprocess.pyi | 38 + .../third_party/typeshed/stdlib/3/_thread.pyi | 31 + .../typeshed/stdlib/3/_threading_local.pyi | 18 + .../typeshed/stdlib/3/_tracemalloc.pyi | 26 + .../typeshed/stdlib/3/_warnings.pyi | 11 + .../third_party/typeshed/stdlib/3/_winapi.pyi | 96 + .../third_party/typeshed/stdlib/3/abc.pyi | 19 + .../third_party/typeshed/stdlib/3/ast.pyi | 39 + .../typeshed/stdlib/3/asyncio/__init__.pyi | 125 ++ .../typeshed/stdlib/3/asyncio/base_events.pyi | 140 ++ .../typeshed/stdlib/3/asyncio/coroutines.pyi | 9 + .../typeshed/stdlib/3/asyncio/events.pyi | 246 +++ .../typeshed/stdlib/3/asyncio/futures.pyi | 64 + .../typeshed/stdlib/3/asyncio/locks.pyi | 60 + .../typeshed/stdlib/3/asyncio/protocols.pyi | 24 + .../typeshed/stdlib/3/asyncio/queues.pyi | 50 + .../typeshed/stdlib/3/asyncio/runners.pyi | 9 + .../typeshed/stdlib/3/asyncio/streams.pyi | 119 ++ .../typeshed/stdlib/3/asyncio/subprocess.pyi | 67 + .../typeshed/stdlib/3/asyncio/tasks.pyi | 77 + .../typeshed/stdlib/3/asyncio/transports.pyi | 38 + .../third_party/typeshed/stdlib/3/atexit.pyi | 9 + .../stdlib/3/collections/__init__.pyi | 348 ++++ .../typeshed/stdlib/3/collections/abc.pyi | 40 + .../typeshed/stdlib/3/compileall.pyi | 20 + .../typeshed/stdlib/3/concurrent/__init__.pyi | 0 .../stdlib/3/concurrent/futures/__init__.pyi | 3 + .../stdlib/3/concurrent/futures/_base.pyi | 56 + .../stdlib/3/concurrent/futures/process.pyi | 17 + .../stdlib/3/concurrent/futures/thread.pyi | 15 + .../typeshed/stdlib/3/configparser.pyi | 234 +++ .../typeshed/stdlib/3/curses/__init__.pyi | 12 + .../typeshed/stdlib/3/curses/ascii.pyi | 62 + .../typeshed/stdlib/3/curses/panel.pyi | 20 + .../typeshed/stdlib/3/curses/textpad.pyi | 11 + .../typeshed/stdlib/3/email/__init__.pyi | 26 + .../typeshed/stdlib/3/email/charset.pyi | 31 + .../stdlib/3/email/contentmanager.pyi | 15 + .../typeshed/stdlib/3/email/encoders.pyi | 8 + .../typeshed/stdlib/3/email/errors.pyi | 19 + .../typeshed/stdlib/3/email/feedparser.pyi | 18 + .../typeshed/stdlib/3/email/generator.pyi | 27 + .../typeshed/stdlib/3/email/header.pyi | 25 + .../stdlib/3/email/headerregistry.pyi | 97 + .../typeshed/stdlib/3/email/iterators.pyi | 8 + .../typeshed/stdlib/3/email/message.pyi | 105 + .../typeshed/stdlib/3/email/mime/__init__.pyi | 0 .../stdlib/3/email/mime/application.pyi | 11 + .../typeshed/stdlib/3/email/mime/audio.pyi | 11 + .../typeshed/stdlib/3/email/mime/base.pyi | 10 + .../typeshed/stdlib/3/email/mime/image.pyi | 11 + .../typeshed/stdlib/3/email/mime/message.pyi | 7 + .../stdlib/3/email/mime/multipart.pyi | 12 + .../stdlib/3/email/mime/nonmultipart.pyi | 5 + .../typeshed/stdlib/3/email/mime/text.pyi | 8 + .../typeshed/stdlib/3/email/parser.pyi | 33 + .../typeshed/stdlib/3/email/policy.pyi | 64 + .../typeshed/stdlib/3/email/utils.pyi | 33 + .../typeshed/stdlib/3/encodings/__init__.pyi | 6 + .../typeshed/stdlib/3/encodings/utf_8.pyi | 15 + .../third_party/typeshed/stdlib/3/enum.pyi | 77 + .../typeshed/stdlib/3/faulthandler.pyi | 23 + .../third_party/typeshed/stdlib/3/fcntl.pyi | 96 + .../third_party/typeshed/stdlib/3/fnmatch.pyi | 11 + .../typeshed/stdlib/3/functools.pyi | 143 ++ .../jedi/third_party/typeshed/stdlib/3/gc.pyi | 28 + .../third_party/typeshed/stdlib/3/getopt.pyi | 14 + .../third_party/typeshed/stdlib/3/getpass.pyi | 12 + .../third_party/typeshed/stdlib/3/gettext.pyi | 44 + .../third_party/typeshed/stdlib/3/glob.pyi | 23 + .../third_party/typeshed/stdlib/3/gzip.pyi | 49 + .../third_party/typeshed/stdlib/3/hashlib.pyi | 69 + .../third_party/typeshed/stdlib/3/heapq.pyi | 23 + .../typeshed/stdlib/3/html/__init__.pyi | 4 + .../typeshed/stdlib/3/html/entities.pyi | 6 + .../typeshed/stdlib/3/html/parser.pyi | 31 + .../typeshed/stdlib/3/http/__init__.pyi | 69 + .../typeshed/stdlib/3/http/client.pyi | 223 +++ .../typeshed/stdlib/3/http/cookiejar.pyi | 115 ++ .../typeshed/stdlib/3/http/cookies.pyi | 31 + .../typeshed/stdlib/3/http/server.pyi | 71 + .../third_party/typeshed/stdlib/3/imp.pyi | 55 + .../typeshed/stdlib/3/importlib/__init__.pyi | 17 + .../typeshed/stdlib/3/importlib/abc.pyi | 97 + .../typeshed/stdlib/3/importlib/machinery.pyi | 116 ++ .../typeshed/stdlib/3/importlib/resources.pyi | 25 + .../typeshed/stdlib/3/importlib/util.pyi | 53 + .../third_party/typeshed/stdlib/3/inspect.pyi | 329 +++ .../jedi/third_party/typeshed/stdlib/3/io.pyi | 210 ++ .../typeshed/stdlib/3/ipaddress.pyi | 151 ++ .../typeshed/stdlib/3/itertools.pyi | 106 + .../typeshed/stdlib/3/json/__init__.pyi | 58 + .../typeshed/stdlib/3/json/decoder.pyi | 28 + .../typeshed/stdlib/3/json/encoder.pyi | 21 + .../third_party/typeshed/stdlib/3/lzma.pyi | 107 + .../third_party/typeshed/stdlib/3/msvcrt.pyi | 8 + .../stdlib/3/multiprocessing/__init__.pyi | 85 + .../stdlib/3/multiprocessing/connection.pyi | 48 + .../stdlib/3/multiprocessing/context.pyi | 179 ++ .../3/multiprocessing/dummy/__init__.pyi | 42 + .../3/multiprocessing/dummy/connection.pyi | 35 + .../stdlib/3/multiprocessing/managers.pyi | 47 + .../stdlib/3/multiprocessing/pool.pyi | 87 + .../stdlib/3/multiprocessing/process.pyi | 5 + .../stdlib/3/multiprocessing/queues.pyi | 30 + .../stdlib/3/multiprocessing/spawn.pyi | 18 + .../stdlib/3/multiprocessing/synchronize.pyi | 63 + .../third_party/typeshed/stdlib/3/nntplib.pyi | 102 + .../typeshed/stdlib/3/nturl2path.pyi | 2 + .../typeshed/stdlib/3/os/__init__.pyi | 722 +++++++ .../third_party/typeshed/stdlib/3/os/path.pyi | 180 ++ .../third_party/typeshed/stdlib/3/pathlib.pyi | 122 ++ .../third_party/typeshed/stdlib/3/pipes.pyi | 19 + .../typeshed/stdlib/3/platform.pyi | 34 + .../third_party/typeshed/stdlib/3/posix.pyi | 112 ++ .../third_party/typeshed/stdlib/3/queue.pyi | 32 + .../third_party/typeshed/stdlib/3/random.pyi | 71 + .../jedi/third_party/typeshed/stdlib/3/re.pyi | 155 ++ .../third_party/typeshed/stdlib/3/reprlib.pyi | 37 + .../typeshed/stdlib/3/resource.pyi | 42 + .../third_party/typeshed/stdlib/3/runpy.pyi | 23 + .../typeshed/stdlib/3/selectors.pyi | 90 + .../third_party/typeshed/stdlib/3/shelve.pyi | 31 + .../third_party/typeshed/stdlib/3/shlex.pyi | 50 + .../third_party/typeshed/stdlib/3/signal.pyi | 187 ++ .../third_party/typeshed/stdlib/3/smtplib.pyi | 141 ++ .../typeshed/stdlib/3/socketserver.pyi | 99 + .../third_party/typeshed/stdlib/3/spwd.pyi | 14 + .../typeshed/stdlib/3/sre_constants.pyi | 114 ++ .../typeshed/stdlib/3/sre_parse.pyi | 81 + .../third_party/typeshed/stdlib/3/stat.pyi | 75 + .../typeshed/stdlib/3/statistics.pyi | 24 + .../third_party/typeshed/stdlib/3/string.pyi | 42 + .../typeshed/stdlib/3/subprocess.pyi | 365 ++++ .../third_party/typeshed/stdlib/3/symbol.pyi | 97 + .../third_party/typeshed/stdlib/3/sys.pyi | 201 ++ .../typeshed/stdlib/3/tempfile.pyi | 123 ++ .../typeshed/stdlib/3/textwrap.pyi | 113 ++ .../typeshed/stdlib/3/tkinter/__init__.pyi | 663 ++++++ .../stdlib/3/tkinter/commondialog.pyi | 8 + .../typeshed/stdlib/3/tkinter/constants.pyi | 79 + .../typeshed/stdlib/3/tkinter/dialog.pyi | 10 + .../typeshed/stdlib/3/tkinter/filedialog.pyi | 65 + .../typeshed/stdlib/3/tkinter/messagebox.pyi | 31 + .../typeshed/stdlib/3/tkinter/ttk.pyi | 160 ++ .../typeshed/stdlib/3/tokenize.pyi | 114 ++ .../typeshed/stdlib/3/tracemalloc.pyi | 70 + .../third_party/typeshed/stdlib/3/types.pyi | 208 ++ .../third_party/typeshed/stdlib/3/typing.pyi | 597 ++++++ .../typeshed/stdlib/3/unittest/__init__.pyi | 31 + .../typeshed/stdlib/3/unittest/case.pyi | 224 +++ .../typeshed/stdlib/3/unittest/loader.pyi | 32 + .../typeshed/stdlib/3/unittest/mock.pyi | 146 ++ .../typeshed/stdlib/3/unittest/result.pyi | 36 + .../typeshed/stdlib/3/unittest/runner.pyi | 40 + .../typeshed/stdlib/3/unittest/signals.pyi | 14 + .../typeshed/stdlib/3/unittest/suite.pyi | 22 + .../typeshed/stdlib/3/urllib/__init__.pyi | 0 .../typeshed/stdlib/3/urllib/error.pyi | 12 + .../typeshed/stdlib/3/urllib/parse.pyi | 146 ++ .../typeshed/stdlib/3/urllib/request.pyi | 222 ++ .../typeshed/stdlib/3/urllib/response.pyi | 41 + .../typeshed/stdlib/3/urllib/robotparser.pyi | 18 + .../typeshed/tests/check_consistent.py | 43 + .../typeshed/tests/mypy_blacklist.txt | 0 .../typeshed/tests/mypy_selftest.py | 28 + .../third_party/typeshed/tests/mypy_test.py | 156 ++ .../typeshed/tests/pytype_blacklist.txt | 17 + .../third_party/typeshed/tests/pytype_test.py | 213 ++ .../third_party/2/OpenSSL/__init__.pyi | 0 .../typeshed/third_party/2/OpenSSL/crypto.pyi | 191 ++ .../third_party/2/concurrent/__init__.pyi | 0 .../2/concurrent/futures/__init__.pyi | 3 + .../2/concurrent/futures/_base.pyi | 56 + .../2/concurrent/futures/process.pyi | 17 + .../2/concurrent/futures/thread.pyi | 15 + .../third_party/2/cryptography/__init__.pyi | 0 .../2/cryptography/hazmat/__init__.pyi | 0 .../hazmat/primitives/__init__.pyi | 0 .../hazmat/primitives/asymmetric/__init__.pyi | 0 .../hazmat/primitives/asymmetric/dsa.pyi | 4 + .../hazmat/primitives/asymmetric/rsa.pyi | 58 + .../hazmat/primitives/serialization.pyi | 33 + .../typeshed/third_party/2/enum.pyi | 77 + .../third_party/2/fb303/FacebookService.pyi | 297 +++ .../typeshed/third_party/2/fb303/__init__.pyi | 0 .../typeshed/third_party/2/gflags.pyi | 242 +++ .../typeshed/third_party/2/kazoo/__init__.pyi | 0 .../typeshed/third_party/2/kazoo/client.pyi | 97 + .../third_party/2/kazoo/exceptions.pyi | 58 + .../third_party/2/kazoo/recipe/__init__.pyi | 0 .../third_party/2/kazoo/recipe/watchers.pyi | 21 + .../typeshed/third_party/2/pathlib2.pyi | 122 ++ .../typeshed/third_party/2/pymssql.pyi | 48 + .../typeshed/third_party/2/redis/__init__.pyi | 24 + .../typeshed/third_party/2/redis/client.pyi | 292 +++ .../third_party/2/redis/connection.pyi | 134 ++ .../third_party/2/redis/exceptions.pyi | 17 + .../typeshed/third_party/2/redis/utils.pyi | 8 + .../third_party/2/routes/__init__.pyi | 15 + .../typeshed/third_party/2/routes/mapper.pyi | 67 + .../typeshed/third_party/2/routes/util.pyi | 20 + .../third_party/2/scribe/__init__.pyi | 0 .../typeshed/third_party/2/scribe/scribe.pyi | 39 + .../typeshed/third_party/2/scribe/ttypes.pyi | 18 + .../typeshed/third_party/2/six/__init__.pyi | 96 + .../2/six/moves/BaseHTTPServer.pyi | 1 + .../2/six/moves/SimpleHTTPServer.pyi | 1 + .../third_party/2/six/moves/__init__.pyi | 66 + .../third_party/2/six/moves/_dummy_thread.pyi | 1 + .../third_party/2/six/moves/_thread.pyi | 1 + .../third_party/2/six/moves/cPickle.pyi | 1 + .../third_party/2/six/moves/configparser.pyi | 1 + .../2/six/moves/email_mime_base.pyi | 1 + .../2/six/moves/email_mime_multipart.pyi | 1 + .../2/six/moves/email_mime_nonmultipart.pyi | 1 + .../2/six/moves/email_mime_text.pyi | 1 + .../third_party/2/six/moves/html_entities.pyi | 1 + .../third_party/2/six/moves/html_parser.pyi | 1 + .../third_party/2/six/moves/http_client.pyi | 1 + .../2/six/moves/http_cookiejar.pyi | 1 + .../third_party/2/six/moves/http_cookies.pyi | 1 + .../third_party/2/six/moves/queue.pyi | 1 + .../third_party/2/six/moves/reprlib.pyi | 1 + .../third_party/2/six/moves/socketserver.pyi | 1 + .../2/six/moves/urllib/__init__.pyi | 5 + .../third_party/2/six/moves/urllib/error.pyi | 3 + .../third_party/2/six/moves/urllib/parse.pyi | 24 + .../2/six/moves/urllib/request.pyi | 36 + .../2/six/moves/urllib/response.pyi | 5 + .../2/six/moves/urllib/robotparser.pyi | 1 + .../third_party/2/six/moves/urllib_error.pyi | 1 + .../third_party/2/six/moves/urllib_parse.pyi | 1 + .../2/six/moves/urllib_request.pyi | 1 + .../2/six/moves/urllib_response.pyi | 1 + .../2/six/moves/urllib_robotparser.pyi | 1 + .../third_party/2/six/moves/xmlrpc_client.pyi | 1 + .../third_party/2/tornado/__init__.pyi | 0 .../third_party/2/tornado/concurrent.pyi | 43 + .../typeshed/third_party/2/tornado/gen.pyi | 109 + .../third_party/2/tornado/httpclient.pyi | 96 + .../third_party/2/tornado/httpserver.pyi | 43 + .../third_party/2/tornado/httputil.pyi | 90 + .../typeshed/third_party/2/tornado/ioloop.pyi | 84 + .../typeshed/third_party/2/tornado/locks.pyi | 45 + .../third_party/2/tornado/netutil.pyi | 45 + .../third_party/2/tornado/process.pyi | 24 + .../third_party/2/tornado/tcpserver.pyi | 17 + .../third_party/2/tornado/testing.pyi | 60 + .../typeshed/third_party/2/tornado/util.pyi | 46 + .../typeshed/third_party/2/tornado/web.pyi | 257 +++ .../third_party/2and3/Crypto/Cipher/AES.pyi | 19 + .../third_party/2and3/Crypto/Cipher/ARC2.pyi | 19 + .../third_party/2and3/Crypto/Cipher/ARC4.pyi | 15 + .../2and3/Crypto/Cipher/Blowfish.pyi | 19 + .../third_party/2and3/Crypto/Cipher/CAST.pyi | 19 + .../third_party/2and3/Crypto/Cipher/DES.pyi | 19 + .../third_party/2and3/Crypto/Cipher/DES3.pyi | 20 + .../2and3/Crypto/Cipher/PKCS1_OAEP.pyi | 13 + .../2and3/Crypto/Cipher/PKCS1_v1_5.pyi | 13 + .../third_party/2and3/Crypto/Cipher/XOR.pyi | 16 + .../2and3/Crypto/Cipher/__init__.pyi | 11 + .../2and3/Crypto/Cipher/blockalgo.pyi | 17 + .../third_party/2and3/Crypto/Hash/HMAC.pyi | 16 + .../third_party/2and3/Crypto/Hash/MD2.pyi | 13 + .../third_party/2and3/Crypto/Hash/MD4.pyi | 13 + .../third_party/2and3/Crypto/Hash/MD5.pyi | 13 + .../third_party/2and3/Crypto/Hash/RIPEMD.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA224.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA256.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA384.pyi | 13 + .../third_party/2and3/Crypto/Hash/SHA512.pyi | 13 + .../2and3/Crypto/Hash/__init__.pyi | 11 + .../2and3/Crypto/Hash/hashalgo.pyi | 11 + .../2and3/Crypto/Protocol/AllOrNothing.pyi | 10 + .../2and3/Crypto/Protocol/Chaffing.pyi | 5 + .../third_party/2and3/Crypto/Protocol/KDF.pyi | 7 + .../2and3/Crypto/Protocol/__init__.pyi | 4 + .../2and3/Crypto/PublicKey/DSA.pyi | 27 + .../2and3/Crypto/PublicKey/ElGamal.pyi | 19 + .../2and3/Crypto/PublicKey/RSA.pyi | 32 + .../2and3/Crypto/PublicKey/__init__.pyi | 4 + .../2and3/Crypto/PublicKey/pubkey.pyi | 21 + .../Random/Fortuna/FortunaAccumulator.pyi | 25 + .../Random/Fortuna/FortunaGenerator.pyi | 16 + .../2and3/Crypto/Random/Fortuna/SHAd256.pyi | 13 + .../2and3/Crypto/Random/Fortuna/__init__.pyi | 0 .../2and3/Crypto/Random/OSRNG/__init__.pyi | 1 + .../2and3/Crypto/Random/OSRNG/fallback.pyi | 5 + .../2and3/Crypto/Random/OSRNG/posix.pyi | 6 + .../2and3/Crypto/Random/OSRNG/rng_base.pyi | 11 + .../2and3/Crypto/Random/__init__.pyi | 1 + .../2and3/Crypto/Random/random.pyi | 17 + .../2and3/Crypto/Signature/PKCS1_PSS.pyi | 9 + .../2and3/Crypto/Signature/PKCS1_v1_5.pyi | 7 + .../2and3/Crypto/Signature/__init__.pyi | 3 + .../third_party/2and3/Crypto/Util/Counter.pyi | 3 + .../third_party/2and3/Crypto/Util/RFC1751.pyi | 9 + .../2and3/Crypto/Util/__init__.pyi | 6 + .../third_party/2and3/Crypto/Util/asn1.pyi | 45 + .../third_party/2and3/Crypto/Util/number.pyi | 22 + .../2and3/Crypto/Util/randpool.pyi | 16 + .../third_party/2and3/Crypto/Util/strxor.pyi | 2 + .../third_party/2and3/Crypto/__init__.pyi | 7 + .../third_party/2and3/Crypto/pct_warnings.pyi | 7 + .../2and3/atomicwrites/__init__.pyi | 13 + .../third_party/2and3/attr/__init__.pyi | 255 +++ .../third_party/2and3/attr/converters.pyi | 12 + .../third_party/2and3/attr/exceptions.pyi | 7 + .../third_party/2and3/attr/filters.pyi | 5 + .../third_party/2and3/attr/validators.pyi | 24 + .../third_party/2and3/backports/__init__.pyi | 0 .../2and3/backports/ssl_match_hostname.pyi | 3 + .../third_party/2and3/backports_abc.pyi | 15 + .../third_party/2and3/bleach/__init__.pyi | 32 + .../third_party/2and3/bleach/callbacks.pyi | 6 + .../third_party/2and3/bleach/linkifier.pyi | 31 + .../third_party/2and3/bleach/sanitizer.pyi | 34 + .../third_party/2and3/bleach/utils.pyi | 8 + .../third_party/2and3/boto/__init__.pyi | 76 + .../typeshed/third_party/2and3/boto/auth.pyi | 108 + .../third_party/2and3/boto/auth_handler.pyi | 9 + .../third_party/2and3/boto/compat.pyi | 17 + .../third_party/2and3/boto/connection.pyi | 115 ++ .../third_party/2and3/boto/ec2/__init__.pyi | 7 + .../third_party/2and3/boto/elb/__init__.pyi | 39 + .../third_party/2and3/boto/exception.pyi | 146 ++ .../third_party/2and3/boto/kms/__init__.pyi | 5 + .../third_party/2and3/boto/kms/exceptions.pyi | 17 + .../third_party/2and3/boto/kms/layer1.pyi | 37 + .../third_party/2and3/boto/plugin.pyi | 9 + .../third_party/2and3/boto/regioninfo.pyi | 16 + .../third_party/2and3/boto/s3/__init__.pyi | 14 + .../third_party/2and3/boto/s3/acl.pyi | 39 + .../third_party/2and3/boto/s3/bucket.pyi | 94 + .../2and3/boto/s3/bucketlistresultset.pyi | 40 + .../2and3/boto/s3/bucketlogging.pyi | 11 + .../third_party/2and3/boto/s3/connection.pyi | 67 + .../third_party/2and3/boto/s3/cors.pyi | 19 + .../2and3/boto/s3/deletemarker.pyi | 12 + .../third_party/2and3/boto/s3/key.pyi | 232 +++ .../third_party/2and3/boto/s3/keyfile.pyi | 29 + .../third_party/2and3/boto/s3/lifecycle.pyi | 51 + .../third_party/2and3/boto/s3/multidelete.pyi | 27 + .../third_party/2and3/boto/s3/multipart.pyi | 49 + .../third_party/2and3/boto/s3/prefix.pyi | 10 + .../third_party/2and3/boto/s3/tagging.pyi | 22 + .../third_party/2and3/boto/s3/user.pyi | 10 + .../third_party/2and3/boto/s3/website.pyi | 62 + .../typeshed/third_party/2and3/boto/utils.pyi | 239 +++ .../typeshed/third_party/2and3/certifi.pyi | 2 + .../2and3/characteristic/__init__.pyi | 34 + .../third_party/2and3/click/README.md | 11 + .../third_party/2and3/click/__init__.pyi | 116 ++ .../third_party/2and3/click/_termui_impl.pyi | 14 + .../typeshed/third_party/2and3/click/core.pyi | 474 +++++ .../third_party/2and3/click/decorators.pyi | 336 ++++ .../third_party/2and3/click/exceptions.pyi | 96 + .../third_party/2and3/click/formatting.pyi | 86 + .../third_party/2and3/click/globals.pyi | 18 + .../third_party/2and3/click/parser.pyi | 102 + .../third_party/2and3/click/termui.pyi | 169 ++ .../third_party/2and3/click/testing.pyi | 63 + .../third_party/2and3/click/types.pyi | 269 +++ .../third_party/2and3/click/utils.pyi | 116 ++ .../typeshed/third_party/2and3/croniter.pyi | 41 + .../third_party/2and3/dateutil/__init__.pyi | 0 .../third_party/2and3/dateutil/_common.pyi | 15 + .../third_party/2and3/dateutil/parser.pyi | 46 + .../2and3/dateutil/relativedelta.pyi | 91 + .../third_party/2and3/dateutil/rrule.pyi | 103 + .../2and3/dateutil/tz/__init__.pyi | 15 + .../third_party/2and3/dateutil/tz/_common.pyi | 24 + .../third_party/2and3/dateutil/tz/tz.pyi | 96 + .../third_party/2and3/dateutil/utils.pyi | 7 + .../typeshed/third_party/2and3/emoji.pyi | 18 + .../typeshed/third_party/2and3/first.pyi | 13 + .../third_party/2and3/flask/__init__.pyi | 45 + .../typeshed/third_party/2and3/flask/app.pyi | 148 ++ .../third_party/2and3/flask/blueprints.pyi | 64 + .../typeshed/third_party/2and3/flask/cli.pyi | 64 + .../third_party/2and3/flask/config.pyi | 22 + .../typeshed/third_party/2and3/flask/ctx.pyi | 46 + .../third_party/2and3/flask/debughelpers.pyi | 21 + .../third_party/2and3/flask/globals.pyi | 18 + .../third_party/2and3/flask/helpers.pyi | 48 + .../third_party/2and3/flask/json/__init__.pyi | 19 + .../third_party/2and3/flask/json/tag.pyi | 71 + .../third_party/2and3/flask/logging.pyi | 13 + .../third_party/2and3/flask/sessions.pyi | 60 + .../third_party/2and3/flask/signals.pyi | 33 + .../third_party/2and3/flask/templating.pyi | 21 + .../third_party/2and3/flask/testing.pyi | 34 + .../third_party/2and3/flask/views.pyi | 22 + .../third_party/2and3/flask/wrappers.pyi | 35 + .../third_party/2and3/google/__init__.pyi | 0 .../2and3/google/protobuf/__init__.pyi | 1 + .../2and3/google/protobuf/any_pb2.pyi | 22 + .../2and3/google/protobuf/any_test_pb2.pyi | 32 + .../2and3/google/protobuf/api_pb2.pyi | 87 + .../google/protobuf/compiler/__init__.pyi | 0 .../google/protobuf/compiler/plugin_pb2.pyi | 82 + .../2and3/google/protobuf/descriptor.pyi | 182 ++ .../2and3/google/protobuf/descriptor_pb2.pyi | 732 +++++++ .../2and3/google/protobuf/descriptor_pool.pyi | 18 + .../2and3/google/protobuf/duration_pb2.pyi | 21 + .../2and3/google/protobuf/empty_pb2.pyi | 12 + .../2and3/google/protobuf/field_mask_pb2.pyi | 24 + .../google/protobuf/internal/__init__.pyi | 0 .../google/protobuf/internal/containers.pyi | 54 + .../google/protobuf/internal/decoder.pyi | 30 + .../google/protobuf/internal/encoder.pyi | 34 + .../protobuf/internal/enum_type_wrapper.pyi | 11 + .../protobuf/internal/message_listener.pyi | 5 + .../protobuf/internal/well_known_types.pyi | 92 + .../google/protobuf/internal/wire_format.pyi | 50 + .../2and3/google/protobuf/json_format.pyi | 31 + .../protobuf/map_proto2_unittest_pb2.pyi | 428 ++++ .../google/protobuf/map_unittest_pb2.pyi | 882 ++++++++ .../2and3/google/protobuf/message.pyi | 46 + .../2and3/google/protobuf/message_factory.pyi | 13 + .../2and3/google/protobuf/reflection.pyi | 6 + .../2and3/google/protobuf/service.pyi | 39 + .../google/protobuf/source_context_pb2.pyi | 18 + .../2and3/google/protobuf/struct_pb2.pyi | 105 + .../2and3/google/protobuf/symbol_database.pyi | 14 + .../protobuf/test_messages_proto2_pb2.pyi | 627 ++++++ .../protobuf/test_messages_proto3_pb2.pyi | 700 +++++++ .../2and3/google/protobuf/timestamp_pb2.pyi | 21 + .../2and3/google/protobuf/type_pb2.pyi | 215 ++ .../google/protobuf/unittest_arena_pb2.pyi | 43 + .../protobuf/unittest_custom_options_pb2.pyi | 472 +++++ .../google/protobuf/unittest_import_pb2.pyi | 66 + .../protobuf/unittest_import_public_pb2.pyi | 17 + .../google/protobuf/unittest_mset_pb2.pyi | 75 + .../unittest_mset_wire_format_pb2.pyi | 28 + .../protobuf/unittest_no_arena_import_pb2.pyi | 17 + .../google/protobuf/unittest_no_arena_pb2.pyi | 315 +++ .../unittest_no_generic_services_pb2.pyi | 40 + .../2and3/google/protobuf/unittest_pb2.pyi | 1777 +++++++++++++++++ .../protobuf/unittest_proto3_arena_pb2.pyi | 332 +++ .../2and3/google/protobuf/util/__init__.pyi | 0 .../protobuf/util/json_format_proto3_pb2.pyi | 659 ++++++ .../2and3/google/protobuf/wrappers_pb2.pyi | 106 + .../third_party/2and3/itsdangerous.pyi | 153 ++ .../third_party/2and3/jinja2/__init__.pyi | 7 + .../third_party/2and3/jinja2/_compat.pyi | 34 + .../third_party/2and3/jinja2/_stringdefs.pyi | 40 + .../third_party/2and3/jinja2/bccache.pyi | 44 + .../third_party/2and3/jinja2/compiler.pyi | 176 ++ .../third_party/2and3/jinja2/constants.pyi | 1 + .../third_party/2and3/jinja2/debug.pyi | 37 + .../third_party/2and3/jinja2/defaults.pyi | 21 + .../third_party/2and3/jinja2/environment.pyi | 125 ++ .../third_party/2and3/jinja2/exceptions.pyi | 31 + .../typeshed/third_party/2and3/jinja2/ext.pyi | 58 + .../third_party/2and3/jinja2/filters.pyi | 57 + .../third_party/2and3/jinja2/lexer.pyi | 117 ++ .../third_party/2and3/jinja2/loaders.pyi | 70 + .../third_party/2and3/jinja2/meta.pyi | 11 + .../third_party/2and3/jinja2/nodes.pyi | 250 +++ .../third_party/2and3/jinja2/optimizer.pyi | 29 + .../third_party/2and3/jinja2/parser.pyi | 60 + .../third_party/2and3/jinja2/runtime.pyi | 130 ++ .../third_party/2and3/jinja2/sandbox.pyi | 34 + .../third_party/2and3/jinja2/tests.pyi | 24 + .../third_party/2and3/jinja2/utils.pyi | 61 + .../third_party/2and3/jinja2/visitor.pyi | 8 + .../third_party/2and3/markupsafe/__init__.pyi | 53 + .../third_party/2and3/markupsafe/_compat.pyi | 19 + .../2and3/markupsafe/_constants.pyi | 3 + .../third_party/2and3/markupsafe/_native.pyi | 7 + .../2and3/markupsafe/_speedups.pyi | 7 + .../typeshed/third_party/2and3/mock.pyi | 146 ++ .../third_party/2and3/mypy_extensions.pyi | 44 + .../typeshed/third_party/2and3/pycurl.pyi | 605 ++++++ .../third_party/2and3/pymysql/__init__.pyi | 61 + .../third_party/2and3/pymysql/charset.pyi | 16 + .../third_party/2and3/pymysql/connections.pyi | 145 ++ .../2and3/pymysql/constants/CLIENT.pyi | 18 + .../2and3/pymysql/constants/COMMAND.pyi | 22 + .../2and3/pymysql/constants/ER.pyi | 471 +++++ .../2and3/pymysql/constants/FIELD_TYPE.pyi | 29 + .../2and3/pymysql/constants/FLAG.pyi | 17 + .../2and3/pymysql/constants/SERVER_STATUS.pyi | 10 + .../2and3/pymysql/constants/__init__.pyi | 0 .../third_party/2and3/pymysql/converters.pyi | 46 + .../third_party/2and3/pymysql/cursors.pyi | 46 + .../third_party/2and3/pymysql/err.pyi | 18 + .../third_party/2and3/pymysql/times.pyi | 10 + .../third_party/2and3/pymysql/util.pyi | 3 + .../third_party/2and3/pynamodb/__init__.pyi | 1 + .../third_party/2and3/pynamodb/attributes.pyi | 96 + .../2and3/pynamodb/connection/__init__.pyi | 2 + .../2and3/pynamodb/connection/base.pyi | 78 + .../2and3/pynamodb/connection/table.pyi | 18 + .../2and3/pynamodb/connection/util.pyi | 3 + .../third_party/2and3/pynamodb/constants.pyi | 166 ++ .../third_party/2and3/pynamodb/exceptions.pyi | 23 + .../third_party/2and3/pynamodb/indexes.pyi | 30 + .../third_party/2and3/pynamodb/models.pyi | 107 + .../third_party/2and3/pynamodb/settings.pyi | 8 + .../third_party/2and3/pynamodb/throttle.pyi | 19 + .../third_party/2and3/pynamodb/types.pyi | 5 + .../third_party/2and3/pytz/__init__.pyi | 41 + .../third_party/2and3/requests/__init__.pyi | 40 + .../third_party/2and3/requests/adapters.pyi | 79 + .../third_party/2and3/requests/api.pyi | 40 + .../third_party/2and3/requests/auth.pyi | 44 + .../third_party/2and3/requests/compat.pyi | 6 + .../third_party/2and3/requests/cookies.pyi | 67 + .../third_party/2and3/requests/exceptions.pyi | 26 + .../third_party/2and3/requests/hooks.pyi | 8 + .../third_party/2and3/requests/models.pyi | 142 ++ .../2and3/requests/packages/__init__.pyi | 4 + .../requests/packages/urllib3/__init__.pyi | 31 + .../packages/urllib3/_collections.pyi | 47 + .../requests/packages/urllib3/connection.pyi | 71 + .../packages/urllib3/connectionpool.pyi | 85 + .../packages/urllib3/contrib/__init__.pyi | 0 .../requests/packages/urllib3/exceptions.pyi | 50 + .../requests/packages/urllib3/fields.pyi | 16 + .../requests/packages/urllib3/filepost.pyi | 15 + .../packages/urllib3/packages/__init__.pyi | 0 .../packages/ssl_match_hostname/__init__.pyi | 4 + .../ssl_match_hostname/_implementation.pyi | 3 + .../requests/packages/urllib3/poolmanager.pyi | 27 + .../requests/packages/urllib3/request.pyi | 9 + .../requests/packages/urllib3/response.pyi | 53 + .../packages/urllib3/util/__init__.pyi | 25 + .../packages/urllib3/util/connection.pyi | 8 + .../packages/urllib3/util/request.pyi | 8 + .../packages/urllib3/util/response.pyi | 1 + .../requests/packages/urllib3/util/retry.pyi | 32 + .../requests/packages/urllib3/util/ssl_.pyi | 20 + .../packages/urllib3/util/timeout.pyi | 20 + .../requests/packages/urllib3/util/url.pyi | 22 + .../third_party/2and3/requests/sessions.pyi | 113 ++ .../2and3/requests/status_codes.pyi | 4 + .../third_party/2and3/requests/structures.pyi | 19 + .../third_party/2and3/requests/utils.pyi | 53 + .../third_party/2and3/simplejson/__init__.pyi | 13 + .../third_party/2and3/simplejson/decoder.pyi | 6 + .../third_party/2and3/simplejson/encoder.pyi | 9 + .../third_party/2and3/simplejson/scanner.pyi | 11 + .../third_party/2and3/singledispatch.pyi | 17 + .../typeshed/third_party/2and3/tabulate.pyi | 18 + .../typeshed/third_party/2and3/termcolor.pyi | 21 + .../typeshed/third_party/2and3/toml.pyi | 24 + .../third_party/2and3/typing_extensions.pyi | 58 + .../typeshed/third_party/2and3/ujson.pyi | 51 + .../third_party/2and3/werkzeug/__init__.pyi | 150 ++ .../third_party/2and3/werkzeug/_compat.pyi | 48 + .../third_party/2and3/werkzeug/_internal.pyi | 19 + .../third_party/2and3/werkzeug/_reloader.pyi | 29 + .../2and3/werkzeug/contrib/__init__.pyi | 0 .../2and3/werkzeug/contrib/atom.pyi | 50 + .../2and3/werkzeug/contrib/cache.pyi | 84 + .../2and3/werkzeug/contrib/fixers.pyi | 38 + .../2and3/werkzeug/contrib/iterio.pyi | 39 + .../2and3/werkzeug/contrib/jsrouting.pyi | 10 + .../2and3/werkzeug/contrib/limiter.pyi | 7 + .../2and3/werkzeug/contrib/lint.pyi | 43 + .../2and3/werkzeug/contrib/profiler.pyi | 15 + .../2and3/werkzeug/contrib/securecookie.pyi | 28 + .../2and3/werkzeug/contrib/sessions.pyi | 57 + .../2and3/werkzeug/contrib/testtools.pyi | 9 + .../2and3/werkzeug/contrib/wrappers.pyi | 27 + .../2and3/werkzeug/datastructures.pyi | 425 ++++ .../2and3/werkzeug/debug/__init__.pyi | 41 + .../2and3/werkzeug/debug/console.pyi | 44 + .../third_party/2and3/werkzeug/debug/repr.pyi | 33 + .../2and3/werkzeug/debug/tbtools.pyi | 63 + .../third_party/2and3/werkzeug/exceptions.pyi | 161 ++ .../third_party/2and3/werkzeug/filesystem.pyi | 7 + .../third_party/2and3/werkzeug/formparser.pyi | 45 + .../third_party/2and3/werkzeug/http.pyi | 92 + .../third_party/2and3/werkzeug/local.pyi | 100 + .../2and3/werkzeug/posixemulation.pyi | 7 + .../third_party/2and3/werkzeug/routing.pyi | 189 ++ .../third_party/2and3/werkzeug/script.pyi | 14 + .../third_party/2and3/werkzeug/security.pyi | 12 + .../third_party/2and3/werkzeug/serving.pyi | 93 + .../third_party/2and3/werkzeug/test.pyi | 94 + .../third_party/2and3/werkzeug/testapp.pyi | 9 + .../third_party/2and3/werkzeug/urls.pyi | 72 + .../third_party/2and3/werkzeug/useragents.pyi | 14 + .../third_party/2and3/werkzeug/utils.pyi | 58 + .../third_party/2and3/werkzeug/wrappers.pyi | 249 +++ .../third_party/2and3/werkzeug/wsgi.pyi | 91 + .../third_party/2and3/yaml/__init__.pyi | 82 + .../third_party/2and3/yaml/composer.pyi | 17 + .../third_party/2and3/yaml/constructor.pyi | 68 + .../typeshed/third_party/2and3/yaml/cyaml.pyi | 47 + .../third_party/2and3/yaml/dumper.pyi | 13 + .../third_party/2and3/yaml/emitter.pyi | 106 + .../typeshed/third_party/2and3/yaml/error.pyi | 21 + .../third_party/2and3/yaml/events.pyi | 62 + .../third_party/2and3/yaml/loader.pyi | 15 + .../typeshed/third_party/2and3/yaml/nodes.pyi | 31 + .../third_party/2and3/yaml/parser.pyi | 44 + .../third_party/2and3/yaml/reader.pyi | 34 + .../third_party/2and3/yaml/representer.pyi | 54 + .../third_party/2and3/yaml/resolver.pyi | 24 + .../third_party/2and3/yaml/scanner.pyi | 96 + .../third_party/2and3/yaml/serializer.pyi | 23 + .../third_party/2and3/yaml/tokens.pyi | 93 + .../typeshed/third_party/3.5/contextvars.pyi | 30 + .../typeshed/third_party/3/dataclasses.pyi | 71 + .../third_party/3/docutils/__init__.pyi | 3 + .../third_party/3/docutils/examples.pyi | 5 + .../typeshed/third_party/3/docutils/nodes.pyi | 10 + .../3/docutils/parsers/__init__.pyi | 3 + .../3/docutils/parsers/rst/__init__.pyi | 3 + .../3/docutils/parsers/rst/nodes.pyi | 3 + .../3/docutils/parsers/rst/roles.pyi | 12 + .../3/docutils/parsers/rst/states.pyi | 8 + .../typeshed/third_party/3/jwt/__init__.pyi | 43 + .../typeshed/third_party/3/jwt/algorithms.pyi | 83 + .../third_party/3/jwt/contrib/__init__.pyi | 0 .../3/jwt/contrib/algorithms/__init__.pyi | 1 + .../3/jwt/contrib/algorithms/py_ecdsa.pyi | 10 + .../3/jwt/contrib/algorithms/pycrypto.pyi | 10 + .../typeshed/third_party/3/orjson.pyi | 14 + .../third_party/3/pkg_resources/__init__.pyi | 253 +++ .../3/pkg_resources/py31compat.pyi | 14 + .../typeshed/third_party/3/six/__init__.pyi | 108 + .../3/six/moves/BaseHTTPServer.pyi | 1 + .../third_party/3/six/moves/CGIHTTPServer.pyi | 1 + .../3/six/moves/SimpleHTTPServer.pyi | 1 + .../third_party/3/six/moves/__init__.pyi | 69 + .../third_party/3/six/moves/_dummy_thread.pyi | 1 + .../third_party/3/six/moves/_thread.pyi | 1 + .../third_party/3/six/moves/builtins.pyi | 1 + .../third_party/3/six/moves/cPickle.pyi | 1 + .../third_party/3/six/moves/configparser.pyi | 1 + .../3/six/moves/email_mime_base.pyi | 1 + .../3/six/moves/email_mime_multipart.pyi | 1 + .../3/six/moves/email_mime_nonmultipart.pyi | 1 + .../3/six/moves/email_mime_text.pyi | 1 + .../third_party/3/six/moves/html_entities.pyi | 1 + .../third_party/3/six/moves/html_parser.pyi | 1 + .../third_party/3/six/moves/http_client.pyi | 1 + .../3/six/moves/http_cookiejar.pyi | 1 + .../third_party/3/six/moves/http_cookies.pyi | 1 + .../third_party/3/six/moves/queue.pyi | 1 + .../third_party/3/six/moves/reprlib.pyi | 1 + .../third_party/3/six/moves/socketserver.pyi | 1 + .../third_party/3/six/moves/tkinter.pyi | 1 + .../3/six/moves/tkinter_commondialog.pyi | 1 + .../3/six/moves/tkinter_constants.pyi | 1 + .../3/six/moves/tkinter_dialog.pyi | 1 + .../3/six/moves/tkinter_filedialog.pyi | 1 + .../3/six/moves/tkinter_tkfiledialog.pyi | 1 + .../third_party/3/six/moves/tkinter_ttk.pyi | 1 + .../3/six/moves/urllib/__init__.pyi | 5 + .../third_party/3/six/moves/urllib/error.pyi | 3 + .../third_party/3/six/moves/urllib/parse.pyi | 27 + .../3/six/moves/urllib/request.pyi | 39 + .../3/six/moves/urllib/response.pyi | 8 + .../3/six/moves/urllib/robotparser.pyi | 1 + .../third_party/3/six/moves/urllib_error.pyi | 1 + .../third_party/3/six/moves/urllib_parse.pyi | 1 + .../3/six/moves/urllib_request.pyi | 1 + .../3/six/moves/urllib_response.pyi | 1 + .../3/six/moves/urllib_robotparser.pyi | 1 + .../third_party/3/typed_ast/__init__.pyi | 2 + .../third_party/3/typed_ast/ast27.pyi | 361 ++++ .../typeshed/third_party/3/typed_ast/ast3.pyi | 413 ++++ .../third_party/3/typed_ast/conversions.pyi | 4 + .../jedi-vim/pythonx/jedi/jedi/utils.py | 134 ++ vim/bundle/jedi-vim/pythonx/jedi/pytest.ini | 14 + .../jedi-vim/pythonx/jedi/requirements.txt | 1 + .../jedi/scripts/diff_parser_profile.py | 50 + .../pythonx/jedi/scripts/memory_check.py | 58 + .../pythonx/jedi/scripts/profile_output.py | 77 + .../pythonx/jedi/scripts/profiled_pytest.sh | 1 + .../jedi-vim/pythonx/jedi/scripts/wx_check.py | 62 + vim/bundle/jedi-vim/pythonx/jedi/setup.cfg | 12 + vim/bundle/jedi-vim/pythonx/jedi/setup.py | 69 + vim/bundle/jedi-vim/pythonx/jedi/sith.py | 224 +++ .../jedi-vim/pythonx/jedi/test/__init__.py | 0 .../jedi/test/blabla_test_documentation.py | 29 + .../pythonx/jedi/test/completion/__init__.py | 8 + .../pythonx/jedi/test/completion/arrays.py | 475 +++++ .../pythonx/jedi/test/completion/async_.py | 109 + .../pythonx/jedi/test/completion/basic.py | 328 +++ .../pythonx/jedi/test/completion/classes.py | 604 ++++++ .../jedi/test/completion/completion.py | 50 + .../pythonx/jedi/test/completion/complex.py | 37 + .../jedi/test/completion/comprehensions.py | 258 +++ .../pythonx/jedi/test/completion/context.py | 55 + .../jedi/test/completion/decorators.py | 332 +++ .../jedi/test/completion/definition.py | 68 + .../jedi/test/completion/descriptors.py | 221 ++ .../pythonx/jedi/test/completion/docstring.py | 254 +++ .../jedi/test/completion/dynamic_arrays.py | 309 +++ .../jedi/test/completion/dynamic_params.py | 159 ++ .../jedi/test/completion/flow_analysis.py | 302 +++ .../pythonx/jedi/test/completion/fstring.py | 38 + .../pythonx/jedi/test/completion/functions.py | 498 +++++ .../jedi/test/completion/generators.py | 272 +++ .../pythonx/jedi/test/completion/goto.py | 251 +++ .../test/completion/import_tree/__init__.py | 7 + .../test/completion/import_tree/classes.py | 10 + .../completion/import_tree/flow_import.py | 4 + .../completion/import_tree/invisible_pkg.py | 7 + .../jedi/test/completion/import_tree/mod1.py | 4 + .../jedi/test/completion/import_tree/mod2.py | 1 + .../completion/import_tree/pkg/__init__.py | 3 + .../test/completion/import_tree/pkg/mod1.py | 3 + .../test/completion/import_tree/random.py | 6 + .../completion/import_tree/recurse_class1.py | 5 + .../completion/import_tree/recurse_class2.py | 4 + .../test/completion/import_tree/rename1.py | 3 + .../test/completion/import_tree/rename2.py | 6 + .../pythonx/jedi/test/completion/imports.py | 321 +++ .../pythonx/jedi/test/completion/invalid.py | 214 ++ .../jedi/test/completion/isinstance.py | 101 + .../pythonx/jedi/test/completion/keywords.py | 59 + .../pythonx/jedi/test/completion/lambdas.py | 113 ++ .../jedi/test/completion/named_expression.py | 13 + .../jedi/test/completion/named_param.py | 62 + .../pythonx/jedi/test/completion/on_import.py | 110 + .../pythonx/jedi/test/completion/ordering.py | 195 ++ .../pythonx/jedi/test/completion/parser.py | 43 + .../jedi/test/completion/pep0484_basic.py | 183 ++ .../jedi/test/completion/pep0484_comments.py | 186 ++ .../jedi/test/completion/pep0484_typing.py | 424 ++++ .../jedi/test/completion/pep0526_variables.py | 115 ++ .../test/completion/positional_only_params.py | 29 + .../jedi/test/completion/precedence.py | 143 ++ .../pythonx/jedi/test/completion/recursion.py | 93 + .../pythonx/jedi/test/completion/stdlib.py | 332 +++ .../test/completion/stub_folder/stub_only.pyi | 1 + .../stub_folder/stub_only_folder/__init__.pyi | 1 + .../stub_only_folder/nested_stub_only.pyi | 1 + .../stub_only_folder/nested_with_stub.py | 2 + .../stub_only_folder/nested_with_stub.pyi | 2 + .../stub_only_folder/python_only.py | 1 + .../test/completion/stub_folder/with_stub.py | 2 + .../test/completion/stub_folder/with_stub.pyi | 2 + .../stub_folder/with_stub_folder/__init__.py | 2 + .../stub_folder/with_stub_folder/__init__.pyi | 2 + .../with_stub_folder/nested_stub_only.pyi | 1 + .../with_stub_folder/nested_with_stub.py | 2 + .../with_stub_folder/nested_with_stub.pyi | 2 + .../with_stub_folder/python_only.py | 1 + .../pythonx/jedi/test/completion/stubs.py | 104 + .../pythonx/jedi/test/completion/sys_path.py | 24 + .../jedi/test/completion/thirdparty/PyQt4_.py | 19 + .../test/completion/thirdparty/django_.py | 11 + .../jedi/test/completion/thirdparty/jedi_.py | 52 + .../test/completion/thirdparty/psycopg2_.py | 11 + .../jedi/test/completion/thirdparty/pylab_.py | 36 + .../pythonx/jedi/test/completion/types.py | 188 ++ .../pythonx/jedi/test/completion/usages.py | 317 +++ .../jedi-vim/pythonx/jedi/test/conftest.py | 171 ++ .../pythonx/jedi/test/examples/README.rst | 5 + .../test/examples/buildout_project/bin/app | 12 + .../examples/buildout_project/bin/binary_file | 1 + .../examples/buildout_project/bin/empty_file | 0 .../examples/buildout_project/buildout.cfg | 0 .../src/proj_name/module_name.py | 0 .../jedi/test/examples/django/app/__init__.py | 0 .../jedi/test/examples/django/app/models.py | 1 + .../jedi/test/examples/django/manage.py | 10 + .../jedi/test/examples/issue1209/__init__.py | 0 .../test/examples/issue1209/api/__init__.py | 0 .../issue1209/api/whatever/__init__.py | 0 .../issue1209/api/whatever/api_test1.py | 0 .../examples/issue1209/whatever/__init__.py | 0 .../test/examples/issue1209/whatever/test.py | 0 .../namespace_package_relative_import/rel1.py | 1 + .../namespace_package_relative_import/rel2.py | 1 + .../no_python-stubs/__init__.pyi | 1 + .../with_python-stubs/__init__.pyi | 2 + .../with_python-stubs/module.pyi | 1 + .../stub_packages/with_python/__init__.py | 2 + .../stub_packages/with_python/module.py | 1 + .../jedi-vim/pythonx/jedi/test/helpers.py | 60 + .../jedi-vim/pythonx/jedi/test/refactor.py | 99 + .../pythonx/jedi/test/refactor/extract.py | 47 + .../pythonx/jedi/test/refactor/inline.py | 18 + .../pythonx/jedi/test/refactor/rename.py | 17 + vim/bundle/jedi-vim/pythonx/jedi/test/run.py | 481 +++++ .../pythonx/jedi/test/speed/precedence.py | 37 + .../test/static_analysis/attribute_error.py | 113 ++ .../static_analysis/attribute_warnings.py | 46 + .../jedi/test/static_analysis/branches.py | 52 + .../jedi/test/static_analysis/builtins.py | 11 + .../jedi/test/static_analysis/class_simple.py | 13 + .../test/static_analysis/comprehensions.py | 42 + .../jedi/test/static_analysis/descriptors.py | 13 + .../jedi/test/static_analysis/generators.py | 7 + .../static_analysis/import_tree/__init__.py | 5 + .../test/static_analysis/import_tree/a.py | 1 + .../test/static_analysis/import_tree/b.py | 0 .../jedi/test/static_analysis/imports.py | 25 + .../jedi/test/static_analysis/iterable.py | 21 + .../jedi/test/static_analysis/keywords.py | 7 + .../test/static_analysis/normal_arguments.py | 73 + .../jedi/test/static_analysis/operations.py | 17 + .../jedi/test/static_analysis/python2.py | 11 + .../test/static_analysis/star_arguments.py | 119 ++ .../jedi/test/static_analysis/try_except.py | 107 + .../pythonx/jedi/test/test_api/__init__.py | 0 .../import_tree_for_usages/__init__.py | 4 + .../test/test_api/import_tree_for_usages/a.py | 4 + .../test/test_api/import_tree_for_usages/b.py | 2 + .../test/test_api/simple_import/__init__.py | 5 + .../test/test_api/simple_import/module.py | 0 .../test/test_api/simple_import/module2.py | 0 .../jedi/test/test_api/test_analysis.py | 11 + .../pythonx/jedi/test/test_api/test_api.py | 302 +++ .../test_api_classes_follow_definition.py | 64 + .../test/test_api/test_call_signatures.py | 627 ++++++ .../jedi/test/test_api/test_classes.py | 461 +++++ .../jedi/test/test_api/test_completion.py | 267 +++ .../jedi/test/test_api/test_defined_names.py | 169 ++ .../jedi/test/test_api/test_environment.py | 155 ++ .../jedi/test/test_api/test_full_name.py | 114 ++ .../jedi/test/test_api/test_interpreter.py | 507 +++++ .../jedi/test/test_api/test_keyword.py | 60 + .../jedi/test/test_api/test_project.py | 24 + .../jedi/test/test_api/test_settings.py | 34 + .../jedi/test/test_api/test_signatures.py | 74 + .../jedi/test/test_api/test_unicode.py | 80 + .../pythonx/jedi/test/test_api/test_usages.py | 14 + .../jedi-vim/pythonx/jedi/test/test_cache.py | 29 + .../pythonx/jedi/test/test_compatibility.py | 26 + .../jedi-vim/pythonx/jedi/test/test_debug.py | 9 + .../jedi/test/test_evaluate/__init__.py | 0 .../absolute_import/local_module.py | 14 + .../test_evaluate/absolute_import/unittest.py | 14 + .../flask-site-packages/flask/__init__.py | 1 + .../flask-site-packages/flask/ext/__init__.py | 1 + .../flask-site-packages/flask_baz/__init__.py | 1 + .../flask-site-packages/flask_foo.py | 2 + .../flask-site-packages/flaskext/__init__.py | 0 .../flask-site-packages/flaskext/bar.py | 2 + .../flaskext/moo/__init__.py | 1 + .../ns1/pkg/ns1_file.py | 1 + .../ns2/pkg/ns2_file.py | 1 + .../namespace/pkg/module.py | 1 + .../__init__.cpython-34m.so | Bin 0 -> 16493 bytes .../init_extension_module/module.c | 15 + .../init_extension_module/setup.py | 10 + .../namespace_package/ns1/pkg/__init__.py | 9 + .../namespace_package/ns1/pkg/ns1_file.py | 1 + .../ns1/pkg/ns1_folder/__init__.py | 1 + .../namespace_package/ns2/pkg/ns2_file.py | 1 + .../ns2/pkg/ns2_folder/__init__.py | 1 + .../ns2/pkg/ns2_folder/nested/__init__.py | 1 + .../nested_namespaces/__init__.py | 0 .../nested_namespaces/namespace/__init__.py | 4 + .../namespace/pkg/__init__.py | 1 + .../test_evaluate/not_in_sys_path/__init__.py | 0 .../not_in_sys_path/not_in_sys_path.py | 1 + .../not_in_sys_path_package/__init__.py | 1 + .../not_in_sys_path_package/module.py | 1 + .../not_in_sys_path/pkg/__init__.py | 0 .../not_in_sys_path/pkg/module.py | 7 + .../dir-from-foo-pth/__init__.py | 2 + .../pth_directory/egg_link.egg-link | 1 + .../sample_venvs/pth_directory/foo.pth | 1 + .../pth_directory/import_smth.pth | 1 + .../pth_directory/relative.egg-link | 1 + .../sample_venvs/pth_directory/smth.py | 6 + .../test_evaluate/test_absolute_import.py | 11 + .../test/test_evaluate/test_annotations.py | 64 + .../test_evaluate/test_buildout_detection.py | 91 + .../jedi/test/test_evaluate/test_compiled.py | 171 ++ .../jedi/test/test_evaluate/test_context.py | 21 + .../jedi/test/test_evaluate/test_docstring.py | 416 ++++ .../jedi/test/test_evaluate/test_extension.py | 57 + .../jedi/test/test_evaluate/test_fstring.py | 19 + .../test_gradual/test_stub_loading.py | 27 + .../test_evaluate/test_gradual/test_stubs.py | 94 + .../test_gradual/test_typeshed.py | 236 +++ .../jedi/test/test_evaluate/test_helpers.py | 16 + .../test_implicit_namespace_package.py | 105 + .../jedi/test/test_evaluate/test_imports.py | 477 +++++ .../jedi/test/test_evaluate/test_literals.py | 46 + .../jedi/test/test_evaluate/test_mixed.py | 7 + .../test_evaluate/test_namespace_package.py | 96 + .../test/test_evaluate/test_precedence.py | 18 + .../jedi/test/test_evaluate/test_pyc.py | 73 + .../test/test_evaluate/test_representation.py | 34 + .../jedi/test/test_evaluate/test_signature.py | 268 +++ .../jedi/test/test_evaluate/test_stdlib.py | 103 + .../jedi/test/test_evaluate/test_sys_path.py | 110 + .../test_evaluate/zipped_imports/not_pkg.zip | Bin 0 -> 204 bytes .../test/test_evaluate/zipped_imports/pkg.zip | Bin 0 -> 1057 bytes .../pythonx/jedi/test/test_integration.py | 65 + .../test/test_parso_integration/test_basic.py | 95 + .../test_error_correction.py | 50 + .../test_parser_utils.py | 86 + .../pythonx/jedi/test/test_settings.py | 34 + .../jedi-vim/pythonx/jedi/test/test_speed.py | 73 + .../jedi-vim/pythonx/jedi/test/test_utils.py | 115 ++ vim/bundle/jedi-vim/pythonx/jedi/tox.ini | 39 + vim/bundle/jedi-vim/pythonx/parso/.coveragerc | 11 + vim/bundle/jedi-vim/pythonx/parso/.travis.yml | 25 + vim/bundle/jedi-vim/pythonx/parso/AUTHORS.txt | 54 + .../jedi-vim/pythonx/parso/CHANGELOG.rst | 77 + .../jedi-vim/pythonx/parso/CONTRIBUTING.md | 8 + vim/bundle/jedi-vim/pythonx/parso/LICENSE.txt | 86 + vim/bundle/jedi-vim/pythonx/parso/MANIFEST.in | 12 + vim/bundle/jedi-vim/pythonx/parso/README.rst | 91 + .../pythonx/parso/build/lib/parso/__init__.py | 58 + .../parso/build/lib/parso/_compatibility.py | 103 + .../pythonx/parso/build/lib/parso/cache.py | 169 ++ .../pythonx/parso/build/lib/parso/file_io.py | 35 + .../pythonx/parso/build/lib/parso/grammar.py | 256 +++ .../parso/build/lib/parso/normalizer.py | 183 ++ .../pythonx/parso/build/lib/parso/parser.py | 211 ++ .../parso/build/lib/parso/pgen2/__init__.py | 10 + .../parso/build/lib/parso/pgen2/generator.py | 358 ++++ .../build/lib/parso/pgen2/grammar_parser.py | 156 ++ .../parso/build/lib/parso/python/__init__.py | 0 .../parso/build/lib/parso/python/diff.py | 718 +++++++ .../parso/build/lib/parso/python/errors.py | 1011 ++++++++++ .../build/lib/parso/python/grammar26.txt | 159 ++ .../build/lib/parso/python/grammar27.txt | 143 ++ .../build/lib/parso/python/grammar33.txt | 134 ++ .../build/lib/parso/python/grammar34.txt | 134 ++ .../build/lib/parso/python/grammar35.txt | 153 ++ .../build/lib/parso/python/grammar36.txt | 158 ++ .../build/lib/parso/python/grammar37.txt | 156 ++ .../build/lib/parso/python/grammar38.txt | 171 ++ .../parso/build/lib/parso/python/parser.py | 218 ++ .../parso/build/lib/parso/python/pep8.py | 727 +++++++ .../parso/build/lib/parso/python/prefix.py | 97 + .../parso/build/lib/parso/python/token.py | 27 + .../parso/build/lib/parso/python/tokenize.py | 686 +++++++ .../parso/build/lib/parso/python/tree.py | 1245 ++++++++++++ .../pythonx/parso/build/lib/parso/tree.py | 366 ++++ .../pythonx/parso/build/lib/parso/utils.py | 175 ++ vim/bundle/jedi-vim/pythonx/parso/conftest.py | 163 ++ .../jedi-vim/pythonx/parso/deploy-master.sh | 52 + .../pythonx/parso/dist/parso-0.5.1-py3.6.egg | Bin 0 -> 184945 bytes .../jedi-vim/pythonx/parso/docs/Makefile | 153 ++ .../jedi-vim/pythonx/parso/docs/README.md | 6 + .../pythonx/parso/docs/_static/logo.png | Bin 0 -> 204714 bytes .../parso/docs/_static/logo_characters.png | Bin 0 -> 56519 bytes .../parso/docs/_templates/ghbuttons.html | 4 + .../parso/docs/_templates/sidebarlogo.html | 3 + .../pythonx/parso/docs/_themes/flask/LICENSE | 37 + .../parso/docs/_themes/flask/layout.html | 27 + .../parso/docs/_themes/flask/relations.html | 19 + .../docs/_themes/flask/static/flasky.css_t | 394 ++++ .../docs/_themes/flask/static/small_flask.css | 70 + .../parso/docs/_themes/flask/theme.conf | 9 + .../parso/docs/_themes/flask_theme_support.py | 125 ++ .../jedi-vim/pythonx/parso/docs/conf.py | 290 +++ .../pythonx/parso/docs/docs/development.rst | 38 + .../pythonx/parso/docs/docs/installation.rst | 32 + .../pythonx/parso/docs/docs/parser-tree.rst | 49 + .../pythonx/parso/docs/docs/usage.rst | 68 + .../jedi-vim/pythonx/parso/docs/global.rst | 4 + .../jedi-vim/pythonx/parso/docs/index.rst | 31 + .../pythonx/parso/parso.egg-info/PKG-INFO | 201 ++ .../pythonx/parso/parso.egg-info/SOURCES.txt | 123 ++ .../parso/parso.egg-info/dependency_links.txt | 1 + .../pythonx/parso/parso.egg-info/requires.txt | 4 + .../parso/parso.egg-info/top_level.txt | 1 + .../jedi-vim/pythonx/parso/parso/__init__.py | 58 + .../jedi-vim/pythonx/parso/parso/__init__.pyi | 19 + .../parso/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 1820 bytes .../__pycache__/_compatibility.cpython-36.pyc | Bin 0 -> 3620 bytes .../parso/__pycache__/cache.cpython-36.pyc | Bin 0 -> 3553 bytes .../parso/__pycache__/file_io.cpython-36.pyc | Bin 0 -> 1479 bytes .../parso/__pycache__/grammar.cpython-36.pyc | Bin 0 -> 8891 bytes .../__pycache__/normalizer.cpython-36.pyc | Bin 0 -> 6496 bytes .../parso/__pycache__/parser.cpython-36.pyc | Bin 0 -> 6822 bytes .../parso/__pycache__/tree.cpython-36.pyc | Bin 0 -> 12027 bytes .../parso/__pycache__/utils.cpython-36.pyc | Bin 0 -> 5059 bytes .../pythonx/parso/parso/_compatibility.py | 103 + .../jedi-vim/pythonx/parso/parso/cache.py | 169 ++ .../jedi-vim/pythonx/parso/parso/file_io.py | 35 + .../jedi-vim/pythonx/parso/parso/grammar.py | 256 +++ .../jedi-vim/pythonx/parso/parso/grammar.pyi | 38 + .../pythonx/parso/parso/normalizer.py | 183 ++ .../jedi-vim/pythonx/parso/parso/parser.py | 211 ++ .../pythonx/parso/parso/pgen2/__init__.py | 10 + .../pythonx/parso/parso/pgen2/__init__.pyi | 1 + .../pgen2/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 197 bytes .../__pycache__/generator.cpython-36.pyc | Bin 0 -> 9616 bytes .../__pycache__/grammar_parser.cpython-36.pyc | Bin 0 -> 4252 bytes .../pythonx/parso/parso/pgen2/generator.py | 358 ++++ .../pythonx/parso/parso/pgen2/generator.pyi | 38 + .../parso/parso/pgen2/grammar_parser.py | 156 ++ .../parso/parso/pgen2/grammar_parser.pyi | 20 + .../pythonx/parso/parso/python/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 136 bytes .../python/__pycache__/diff.cpython-36.pyc | Bin 0 -> 16439 bytes .../python/__pycache__/errors.cpython-36.pyc | Bin 0 -> 32286 bytes .../python/__pycache__/parser.cpython-36.pyc | Bin 0 -> 5345 bytes .../python/__pycache__/pep8.cpython-36.pyc | Bin 0 -> 18529 bytes .../python/__pycache__/prefix.cpython-36.pyc | Bin 0 -> 2264 bytes .../python/__pycache__/token.cpython-36.pyc | Bin 0 -> 1345 bytes .../__pycache__/tokenize.cpython-36.pyc | Bin 0 -> 14571 bytes .../python/__pycache__/tree.cpython-36.pyc | Bin 0 -> 40402 bytes .../pythonx/parso/parso/python/diff.py | 718 +++++++ .../pythonx/parso/parso/python/errors.py | 1011 ++++++++++ .../pythonx/parso/parso/python/grammar26.txt | 159 ++ .../pythonx/parso/parso/python/grammar27.txt | 143 ++ .../pythonx/parso/parso/python/grammar33.txt | 134 ++ .../pythonx/parso/parso/python/grammar34.txt | 134 ++ .../pythonx/parso/parso/python/grammar35.txt | 153 ++ .../pythonx/parso/parso/python/grammar36.txt | 158 ++ .../pythonx/parso/parso/python/grammar37.txt | 156 ++ .../pythonx/parso/parso/python/grammar38.txt | 171 ++ .../pythonx/parso/parso/python/issue_list.txt | 176 ++ .../pythonx/parso/parso/python/parser.py | 218 ++ .../pythonx/parso/parso/python/pep8.py | 727 +++++++ .../pythonx/parso/parso/python/prefix.py | 97 + .../pythonx/parso/parso/python/token.py | 27 + .../pythonx/parso/parso/python/token.pyi | 30 + .../pythonx/parso/parso/python/tokenize.py | 686 +++++++ .../pythonx/parso/parso/python/tokenize.pyi | 24 + .../pythonx/parso/parso/python/tree.py | 1245 ++++++++++++ .../jedi-vim/pythonx/parso/parso/tree.py | 366 ++++ .../jedi-vim/pythonx/parso/parso/utils.py | 175 ++ .../jedi-vim/pythonx/parso/parso/utils.pyi | 29 + vim/bundle/jedi-vim/pythonx/parso/pytest.ini | 12 + .../parso/scripts/diff_parser_profile.py | 50 + vim/bundle/jedi-vim/pythonx/parso/setup.cfg | 12 + vim/bundle/jedi-vim/pythonx/parso/setup.py | 55 + .../jedi-vim/pythonx/parso/test/__init__.py | 0 .../pythonx/parso/test/failing_examples.py | 321 +++ .../pythonx/parso/test/fuzz_diff_parser.py | 290 +++ .../parso/test/normalizer_issue_files/E10.py | 51 + .../parso/test/normalizer_issue_files/E101.py | 137 ++ .../parso/test/normalizer_issue_files/E11.py | 60 + .../test/normalizer_issue_files/E12_first.py | 78 + .../normalizer_issue_files/E12_not_first.py | 356 ++++ .../normalizer_issue_files/E12_not_second.py | 294 +++ .../test/normalizer_issue_files/E12_second.py | 195 ++ .../test/normalizer_issue_files/E12_third.py | 116 ++ .../parso/test/normalizer_issue_files/E20.py | 52 + .../parso/test/normalizer_issue_files/E21.py | 16 + .../parso/test/normalizer_issue_files/E22.py | 156 ++ .../parso/test/normalizer_issue_files/E23.py | 16 + .../parso/test/normalizer_issue_files/E25.py | 36 + .../parso/test/normalizer_issue_files/E26.py | 78 + .../parso/test/normalizer_issue_files/E27.py | 49 + .../parso/test/normalizer_issue_files/E29.py | 15 + .../parso/test/normalizer_issue_files/E30.py | 177 ++ .../test/normalizer_issue_files/E30not.py | 175 ++ .../parso/test/normalizer_issue_files/E40.py | 39 + .../parso/test/normalizer_issue_files/E50.py | 126 ++ .../parso/test/normalizer_issue_files/E70.py | 25 + .../parso/test/normalizer_issue_files/E71.py | 93 + .../parso/test/normalizer_issue_files/E72.py | 79 + .../parso/test/normalizer_issue_files/E73.py | 16 + .../parso/test/normalizer_issue_files/LICENSE | 29 + .../normalizer_issue_files/allowed_syntax.py | 53 + .../allowed_syntax_python2.py | 2 + .../allowed_syntax_python3.4.py | 3 + .../allowed_syntax_python3.5.py | 23 + .../allowed_syntax_python3.6.py | 45 + .../test/normalizer_issue_files/latin-1.py | 6 + .../test/normalizer_issue_files/python2.7.py | 14 + .../test/normalizer_issue_files/python3.py | 90 + .../test/normalizer_issue_files/utf-8-bom.py | 6 + .../test/normalizer_issue_files/utf-8.py | 35 + .../parso/test/test_absolute_import.py | 29 + .../jedi-vim/pythonx/parso/test/test_cache.py | 89 + .../pythonx/parso/test/test_diff_parser.py | 1288 ++++++++++++ .../pythonx/parso/test/test_error_recovery.py | 85 + .../parso/test/test_file_python_errors.py | 23 + .../pythonx/parso/test/test_fstring.py | 138 ++ .../pythonx/parso/test/test_get_code.py | 120 ++ .../pythonx/parso/test/test_grammar.py | 8 + .../pythonx/parso/test/test_load_grammar.py | 31 + .../test/test_normalizer_issues_files.py | 70 + .../parso/test/test_old_fast_parser.py | 210 ++ .../parso/test/test_param_splitting.py | 47 + .../pythonx/parso/test/test_parser.py | 210 ++ .../pythonx/parso/test/test_parser_tree.py | 182 ++ .../jedi-vim/pythonx/parso/test/test_pep8.py | 39 + .../jedi-vim/pythonx/parso/test/test_pgen2.py | 303 +++ .../pythonx/parso/test/test_prefix.py | 79 + .../pythonx/parso/test/test_python_errors.py | 309 +++ .../pythonx/parso/test/test_tokenize.py | 392 ++++ .../jedi-vim/pythonx/parso/test/test_utils.py | 65 + vim/bundle/jedi-vim/pythonx/parso/tox.ini | 17 + 2682 files changed, 219391 insertions(+) create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/.coveragerc create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/.travis.yml create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/AUTHORS.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/CHANGELOG.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/CONTRIBUTING.md create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/LICENSE.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/MANIFEST.in create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/README.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/appveyor.yml create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__main__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/_compatibility.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/classes.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/completion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/environment.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/exceptions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/file_name.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/helpers.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/interpreter.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/keywords.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/project.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/replstartup.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/debug.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/arguments.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/base_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/access.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/getattr_static.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/mixed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__main__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/functions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/decorator.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/function.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/instance.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/iterable.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/klass.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/namespace.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/docstrings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/dynamic.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/filters.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/finder.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/flow_analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/annotation.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/conversion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/stub_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typeshed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typing.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/helpers.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/imports.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/lazy_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/names.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/param.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/parser_cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/recursion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/signature.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/star_args.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/syntax_tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/sys_path.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/usages.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/file_io.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/parser_utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/flask.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/registry.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/stdlib.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/refactoring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/settings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/LICENSE create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Cookie.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/StringIO.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserDict.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserList.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserString.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_md5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha512.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_socket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sre.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_struct.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_symtable.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/atexit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/commands.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/compileall.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cookielib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dircache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/generator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/header.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fcntl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getpass.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gettext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/glob.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gzip.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/hashlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/httplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/importlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/inspect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/itertools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/markupbase.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/md5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mimetools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mutex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/pipes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/platform.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/popen2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/re.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/repr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/resource.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/rfc822.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/runpy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sets.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sha.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shelve.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shlex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/signal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/smtplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/spwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/string.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stringold.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/strop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/symbol.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tempfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/textwrap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/toaiff.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/typing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/unittest.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urlparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/user.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/whichdb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/array.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/base64.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/code.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/copy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/csv.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/dis.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/errno.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/grp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/locale.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/math.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/nis.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/operator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/profile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pty.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/readline.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sched.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/select.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/site.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/socket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/struct.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/termios.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/threading.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/time.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/token.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/trace.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tty.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uu.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wave.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_compression.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_curses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_operator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_winapi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/atexit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/compileall.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/generator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/header.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/policy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/enum.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fcntl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getpass.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gettext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/glob.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gzip.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/hashlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/server.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/inspect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/itertools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/lzma.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nntplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pathlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pipes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/platform.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/re.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/resource.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/runpy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/selectors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shelve.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shlex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/signal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/smtplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/spwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/statistics.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/string.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/symbol.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tempfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/textwrap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/typing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/enum.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/gflags.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pathlib2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pymssql.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/web.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/certifi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/core.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/croniter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/emoji.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/first.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mock.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/toml.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/ujson.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/dataclasses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/orjson.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/conftest.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/deploy-master.sh create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/dist/jedi-0.15.1-py3.6.egg create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/Makefile create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/README.md create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_complete.png create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_function.png create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_pydoc.png create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_static/logo-src.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_static/logo.png create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_templates/ghbuttons.html create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_templates/sidebarlogo.html create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/LICENSE create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/layout.html create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/relations.html create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/flasky.css_t create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/small_flask.css create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/theme.conf create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask_theme_support.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/conf.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api-classes.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/development.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/features.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/installation.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/settings.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/testing.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/docs/usage.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/global.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/docs/index.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/PKG-INFO create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/SOURCES.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/dependency_links.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/requires.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/top_level.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/__main__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/_compatibility.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/classes.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/completion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/environment.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/exceptions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/file_name.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/helpers.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/interpreter.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/keywords.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/project.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/api/replstartup.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/common/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/common/context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/common/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/debug.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/arguments.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/base_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/access.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/getattr_static.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/mixed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__main__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/functions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/decorator.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/function.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/instance.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/iterable.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/klass.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/namespace.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/docstrings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/dynamic.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/filters.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/finder.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/flow_analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/annotation.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/conversion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/stub_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typeshed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typing.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/helpers.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/imports.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/lazy_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/names.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/param.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/parser_cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/recursion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/signature.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/star_args.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/syntax_tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/sys_path.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/usages.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/file_io.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/parser_utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/flask.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/registry.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/stdlib.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/refactoring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/settings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.flake8 create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.travis.yml create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/CONTRIBUTING.md create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/LICENSE create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/README.md create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/requirements-tests-py3.txt create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Cookie.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/StringIO.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserDict.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserList.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserString.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_md5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha512.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_socket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sre.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_struct.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_symtable.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/atexit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/commands.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/compileall.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cookielib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dircache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/generator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/header.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fcntl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getpass.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gettext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/glob.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gzip.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/hashlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/httplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/importlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/inspect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/itertools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/markupbase.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/md5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mimetools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mutex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/pipes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/platform.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/popen2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/re.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/repr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/resource.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/rfc822.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/runpy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sets.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sha.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shelve.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shlex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/signal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/smtplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/spwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/string.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stringold.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/strop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/symbol.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tempfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/textwrap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/toaiff.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/typing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/unittest.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urlparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/user.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/whichdb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/array.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/base64.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/code.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/copy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/csv.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/dis.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/errno.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/grp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/locale.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/math.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/nis.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/operator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/profile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pty.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/readline.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sched.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/select.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/site.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/socket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/struct.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/termios.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/threading.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/time.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/token.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/trace.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tty.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uu.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wave.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_compression.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_curses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_json.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_operator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_winapi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ast.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/atexit.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/compileall.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/errors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/generator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/header.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/policy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/enum.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fcntl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/functools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getopt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getpass.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gettext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/glob.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gzip.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/hashlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/heapq.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/server.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/imp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/inspect.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/io.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/itertools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/lzma.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nntplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/path.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pathlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pipes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/platform.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/re.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/resource.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/runpy.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/selectors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shelve.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shlex.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/signal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/smtplib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/spwd.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/stat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/statistics.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/string.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/subprocess.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/symbol.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sys.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tempfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/textwrap.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/typing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/check_consistent.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_blacklist.txt create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_selftest.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_test.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_blacklist.txt create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_test.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/enum.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/gflags.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pathlib2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pymssql.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/process.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/web.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/certifi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/README.md create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/core.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/croniter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/emoji.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/first.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mock.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/toml.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/ujson.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/dataclasses.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/orjson.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/jedi/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/pytest.ini create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/requirements.txt create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/scripts/diff_parser_profile.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/scripts/memory_check.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/scripts/profile_output.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/scripts/profiled_pytest.sh create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/scripts/wx_check.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/setup.cfg create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/setup.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/sith.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/blabla_test_documentation.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/arrays.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/async_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/basic.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/classes.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/completion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/complex.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/comprehensions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/decorators.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/definition.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/descriptors.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/docstring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_arrays.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_params.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/flow_analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/fstring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/functions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/generators.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/goto.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/classes.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/flow_import.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/invisible_pkg.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/mod1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/random.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/imports.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/invalid.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/isinstance.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/keywords.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/lambdas.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_expression.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_param.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/on_import.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/ordering.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_basic.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_comments.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_typing.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0526_variables.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/positional_only_params.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/precedence.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/recursion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stdlib.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_stub_only.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/python_only.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_stub_only.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/python_only.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/stubs.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/sys_path.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/PyQt4_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/django_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/jedi_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/psycopg2_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/pylab_.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/types.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/completion/usages.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/conftest.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/README.rst create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/app create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/binary_file create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/empty_file create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/buildout.cfg create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/src/proj_name/module_name.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/models.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/manage.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/api_test1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/test.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel1.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/no_python-stubs/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/module.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/helpers.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/test/refactor.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/refactor/extract.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/refactor/inline.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/refactor/rename.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/test/run.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/speed/precedence.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_error.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_warnings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/branches.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/builtins.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/class_simple.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/comprehensions.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/descriptors.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/generators.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/a.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/b.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/imports.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/iterable.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/keywords.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/normal_arguments.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/operations.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/python2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/star_arguments.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/try_except.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/a.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/b.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module2.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_analysis.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api_classes_follow_definition.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_call_signatures.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_classes.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_completion.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_defined_names.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_environment.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_full_name.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_interpreter.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_keyword.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_project.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_settings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_signatures.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_unicode.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_usages.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_compatibility.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_debug.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/local_module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/unittest.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_foo.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns1/pkg/ns1_file.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns2/pkg/ns2_file.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_nested_namespaces/namespace/pkg/module.py create mode 100755 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/init_extension_module/module.c create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/init_extension_module/setup.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns1/pkg/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns1/pkg/ns1_file.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns1/pkg/ns1_folder/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_file.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/nested/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/nested_namespaces/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/nested_namespaces/namespace/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/nested_namespaces/namespace/pkg/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path_package/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/not_in_sys_path_package/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/pkg/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/not_in_sys_path/pkg/module.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/dir-from-foo-pth/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/egg_link.egg-link create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/foo.pth create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/import_smth.pth create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/relative.egg-link create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/sample_venvs/pth_directory/smth.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_absolute_import.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_annotations.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_buildout_detection.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_compiled.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_context.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_docstring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_extension.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_fstring.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stub_loading.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stubs.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_typeshed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_helpers.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_implicit_namespace_package.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_imports.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_literals.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_mixed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_namespace_package.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_precedence.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_pyc.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_representation.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_signature.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_stdlib.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_sys_path.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/not_pkg.zip create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/pkg.zip create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_integration.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_basic.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_error_correction.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_parser_utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_settings.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_speed.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/test/test_utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/jedi/tox.ini create mode 100644 vim/bundle/jedi-vim/pythonx/parso/.coveragerc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/.travis.yml create mode 100644 vim/bundle/jedi-vim/pythonx/parso/AUTHORS.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/CHANGELOG.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/CONTRIBUTING.md create mode 100644 vim/bundle/jedi-vim/pythonx/parso/LICENSE.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/MANIFEST.in create mode 100644 vim/bundle/jedi-vim/pythonx/parso/README.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/_compatibility.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/file_io.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/grammar.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/normalizer.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/generator.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/grammar_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/diff.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/errors.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar26.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar27.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar33.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar34.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar35.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar36.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar37.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar38.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/pep8.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/prefix.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/token.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tokenize.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/conftest.py create mode 100755 vim/bundle/jedi-vim/pythonx/parso/deploy-master.sh create mode 100644 vim/bundle/jedi-vim/pythonx/parso/dist/parso-0.5.1-py3.6.egg create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/Makefile create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/README.md create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo.png create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo_characters.png create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_templates/ghbuttons.html create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_templates/sidebarlogo.html create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/LICENSE create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/layout.html create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/relations.html create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/flasky.css_t create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/small_flask.css create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/theme.conf create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask_theme_support.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/conf.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/docs/development.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/docs/installation.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/docs/parser-tree.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/docs/usage.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/global.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/docs/index.rst create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/PKG-INFO create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/SOURCES.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/dependency_links.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/requires.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/top_level.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/__init__.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/_compatibility.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/cache.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/file_io.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/grammar.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/normalizer.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/parser.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/tree.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/utils.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/_compatibility.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/file_io.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/grammar.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/grammar.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/normalizer.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/__init__.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/generator.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/grammar_parser.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/__init__.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/diff.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/errors.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/parser.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/pep8.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/prefix.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/token.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/tokenize.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/tree.cpython-36.pyc create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/diff.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/errors.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar26.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar27.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar33.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar34.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar35.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar36.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar37.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar38.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/issue_list.txt create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/pep8.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/prefix.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/token.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/token.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/python/tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/parso/utils.pyi create mode 100644 vim/bundle/jedi-vim/pythonx/parso/pytest.ini create mode 100755 vim/bundle/jedi-vim/pythonx/parso/scripts/diff_parser_profile.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/setup.cfg create mode 100755 vim/bundle/jedi-vim/pythonx/parso/setup.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/__init__.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/failing_examples.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/fuzz_diff_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E10.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E101.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E11.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_first.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_first.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_second.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_second.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_third.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E20.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E21.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E22.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E23.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E25.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E26.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E27.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E29.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30not.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E40.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E50.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E70.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E71.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E72.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E73.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/LICENSE create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python2.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.4.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.5.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.6.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/latin-1.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python2.7.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python3.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8-bom.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_absolute_import.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_cache.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_diff_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_error_recovery.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_file_python_errors.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_fstring.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_get_code.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_grammar.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_load_grammar.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_normalizer_issues_files.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_old_fast_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_param_splitting.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_parser.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_parser_tree.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_pep8.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_pgen2.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_prefix.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_python_errors.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_tokenize.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/test/test_utils.py create mode 100644 vim/bundle/jedi-vim/pythonx/parso/tox.ini diff --git a/vim/bundle/jedi-vim/pythonx/jedi/.coveragerc b/vim/bundle/jedi-vim/pythonx/jedi/.coveragerc new file mode 100644 index 0000000..005e74f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/.coveragerc @@ -0,0 +1,13 @@ +[run] +omit = + jedi/_compatibility.py + jedi/evaluate/compiled/subprocess/__main__.py + jedi/__main__.py + # For now this is not being used. + jedi/refactoring.py + +[report] +# Regexes for lines to exclude from consideration +exclude_lines = + # Don't complain about missing debug-only code: + def __repr__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/.travis.yml b/vim/bundle/jedi-vim/pythonx/jedi/.travis.yml new file mode 100644 index 0000000..c99573f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/.travis.yml @@ -0,0 +1,68 @@ +dist: xenial +language: python +python: + - 2.7 + - 3.4 + - 3.5 + - 3.6 + - 3.7 + +env: + - JEDI_TEST_ENVIRONMENT=27 + - JEDI_TEST_ENVIRONMENT=34 + - JEDI_TEST_ENVIRONMENT=35 + - JEDI_TEST_ENVIRONMENT=36 + - JEDI_TEST_ENVIRONMENT=37 + +matrix: + include: + - python: 3.6 + env: + - TOXENV=cov + - JEDI_TEST_ENVIRONMENT=36 + # For now ignore pypy, there are so many issues that we don't really need + # to run it. + #- python: pypy + - python: 3.8-dev + env: + - JEDI_TEST_ENVIRONMENT=38 +install: + - pip install --quiet tox-travis +script: + - | + # Setup/install Python for $JEDI_TEST_ENVIRONMENT. + set -ex + test_env_version=${JEDI_TEST_ENVIRONMENT:0:1}.${JEDI_TEST_ENVIRONMENT:1:1} + if [ "$TRAVIS_PYTHON_VERSION" != "$test_env_version" ]; then + python_bin=python$test_env_version + python_path="$(which $python_bin || true)" + if [ -z "$python_path" ]; then + # Only required for JEDI_TEST_ENVIRONMENT=34. + download_name=python-$test_env_version + wget https://s3.amazonaws.com/travis-python-archives/binaries/ubuntu/16.04/x86_64/$download_name.tar.bz2 + sudo tar xjf $download_name.tar.bz2 --directory / opt/python + ln -s "/opt/python/${test_env_version}/bin/python" /home/travis/bin/$python_bin + elif [ "${python_path#/opt/pyenv/shims}" != "$python_path" ]; then + # Activate pyenv version (required with JEDI_TEST_ENVIRONMENT=36). + pyenv_bin="$(pyenv whence --path "$python_bin" | head -n1)" + ln -s "$pyenv_bin" /home/travis/bin/$python_bin + fi + $python_bin --version + python_ver=$($python_bin -c 'import sys; print("%d%d" % sys.version_info[0:2])') + if [ "$JEDI_TEST_ENVIRONMENT" != "$python_ver" ]; then + echo "Unexpected Python version for $JEDI_TEST_ENVIRONMENT: $python_ver" + set +ex + exit 2 + fi + fi + set +ex + - tox +after_script: + - | + if [ $TOXENV == "cov" ]; then + pip install --quiet codecov coveralls + coverage xml + coverage report -m + coveralls + bash <(curl -s https://codecov.io/bash) -X gcov -X coveragepy -X search -X fix -X xcode -f coverage.xml + fi diff --git a/vim/bundle/jedi-vim/pythonx/jedi/AUTHORS.txt b/vim/bundle/jedi-vim/pythonx/jedi/AUTHORS.txt new file mode 100644 index 0000000..3b740ac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/AUTHORS.txt @@ -0,0 +1,57 @@ +Main Authors +============ + +David Halter (@davidhalter) +Takafumi Arakaki (@tkf) + +Code Contributors +================= + +Danilo Bargen (@dbrgn) +Laurens Van Houtven (@lvh) <_@lvh.cc> +Aldo Stracquadanio (@Astrac) +Jean-Louis Fuchs (@ganwell) +tek (@tek) +Yasha Borevich (@jjay) +Aaron Griffin +andviro (@andviro) +Mike Gilbert (@floppym) +Aaron Meurer (@asmeurer) +Lubos Trilety +Akinori Hattori (@hattya) +srusskih (@srusskih) +Steven Silvester (@blink1073) +Colin Duquesnoy (@ColinDuquesnoy) +Jorgen Schaefer (@jorgenschaefer) +Fredrik Bergroth (@fbergroth) +Mathias Fußenegger (@mfussenegger) +Syohei Yoshida (@syohex) +ppalucky (@ppalucky) +immerrr (@immerrr) immerrr@gmail.com +Albertas Agejevas (@alga) +Savor d'Isavano (@KenetJervet) +Phillip Berndt (@phillipberndt) +Ian Lee (@IanLee1521) +Farkhad Khatamov (@hatamov) +Kevin Kelley (@kelleyk) +Sid Shanker (@squidarth) +Reinoud Elhorst (@reinhrst) +Guido van Rossum (@gvanrossum) +Dmytro Sadovnychyi (@sadovnychyi) +Cristi Burcă (@scribu) +bstaint (@bstaint) +Mathias Rav (@Mortal) +Daniel Fiterman (@dfit99) +Simon Ruggier (@sruggier) +Élie Gouzien (@ElieGouzien) +Robin Roth (@robinro) +Malte Plath (@langsamer) +Anton Zub (@zabulazza) +Maksim Novikov (@m-novikov) +Tobias Rzepka (@TobiasRzepka) +micbou (@micbou) +Dima Gerasimov (@karlicoss) +Max Woerner Chase (@mwchase) +Johannes Maria Frank (@jmfrank63) + +Note: (@user) means a github user name. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/CHANGELOG.rst b/vim/bundle/jedi-vim/pythonx/jedi/CHANGELOG.rst new file mode 100644 index 0000000..d1263e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/CHANGELOG.rst @@ -0,0 +1,182 @@ +.. :changelog: + +Changelog +--------- + +0.15.1 (2019-08-13) ++++++++++++++++++++ + +- Small bugfix and removal of a print statement + +0.15.0 (2019-08-11) ++++++++++++++++++++ + +- Added file path completions, there's a **new ``Completion.type``** ``path``, + now. Example: ``'/ho`` -> ``'/home/`` +- ``*args``/``**kwargs`` resolving. If possible Jedi replaces the parameters + with the actual alternatives. +- Better support for enums/dataclasses +- When using Interpreter, properties are now executed, since a lot of people + have complained about this. Discussion in #1299, #1347. + +New APIs: + +- ``Definition.get_signatures() -> List[Signature]``. Signatures are similar to + ``CallSignature``. ``Definition.params`` is therefore deprecated. +- ``Signature.to_string()`` to format call signatures. +- ``Signature.params -> List[ParamDefinition]``, ParamDefinition has the + following additional attributes ``infer_default()``, ``infer_annotation()``, + ``to_string()``, and ``kind``. +- ``Definition.execute() -> List[Definition]``, makes it possible to infer + return values of functions. + + +0.14.1 (2019-07-13) ++++++++++++++++++++ + +- CallSignature.index should now be working a lot better +- A couple of smaller bugfixes + +0.14.0 (2019-06-20) ++++++++++++++++++++ + +- Added ``goto_*(prefer_stubs=True)`` as well as ``goto_*(prefer_stubs=True)`` +- Stubs are used now for type inference +- Typeshed is used for better type inference +- Reworked Definition.full_name, should have more correct return values + +0.13.3 (2019-02-24) ++++++++++++++++++++ + +- Fixed an issue with embedded Python, see https://github.com/davidhalter/jedi-vim/issues/870 + +0.13.2 (2018-12-15) ++++++++++++++++++++ + +- Fixed a bug that led to Jedi spawning a lot of subprocesses. + +0.13.1 (2018-10-02) ++++++++++++++++++++ + +- Bugfixes, because tensorflow completions were still slow. + +0.13.0 (2018-10-02) ++++++++++++++++++++ + +- A small release. Some bug fixes. +- Remove Python 3.3 support. Python 3.3 support has been dropped by the Python + foundation. +- Default environments are now using the same Python version as the Python + process. In 0.12.x, we used to load the latest Python version on the system. +- Added ``include_builtins`` as a parameter to usages. +- ``goto_assignments`` has a new ``follow_builtin_imports`` parameter that + changes the previous behavior slightly. + +0.12.1 (2018-06-30) ++++++++++++++++++++ + +- This release forces you to upgrade parso. If you don't, nothing will work + anymore. Otherwise changes should be limited to bug fixes. Unfortunately Jedi + still uses a few internals of parso that make it hard to keep compatibility + over multiple releases. Parso >=0.3.0 is going to be needed. + +0.12.0 (2018-04-15) ++++++++++++++++++++ + +- Virtualenv/Environment support +- F-String Completion/Goto Support +- Cannot crash with segfaults anymore +- Cleaned up import logic +- Understand async/await and autocomplete it (including async generators) +- Better namespace completions +- Passing tests for Windows (including CI for Windows) +- Remove Python 2.6 support + +0.11.1 (2017-12-14) ++++++++++++++++++++ + +- Parso update - the caching layer was broken +- Better usages - a lot of internal code was ripped out and improved. + +0.11.0 (2017-09-20) ++++++++++++++++++++ + +- Split Jedi's parser into a separate project called ``parso``. +- Avoiding side effects in REPL completion. +- Numpy docstring support should be much better. +- Moved the `settings.*recursion*` away, they are no longer usable. + +0.10.2 (2017-04-05) ++++++++++++++++++++ + +- Python Packaging sucks. Some files were not included in 0.10.1. + +0.10.1 (2017-04-05) ++++++++++++++++++++ + +- Fixed a few very annoying bugs. +- Prepared the parser to be factored out of Jedi. + +0.10.0 (2017-02-03) ++++++++++++++++++++ + +- Actual semantic completions for the complete Python syntax. +- Basic type inference for ``yield from`` PEP 380. +- PEP 484 support (most of the important features of it). Thanks Claude! (@reinhrst) +- Added ``get_line_code`` to ``Definition`` and ``Completion`` objects. +- Completely rewritten the type inference engine. +- A new and better parser for (fast) parsing diffs of Python code. + +0.9.0 (2015-04-10) +++++++++++++++++++ + +- The import logic has been rewritten to look more like Python's. There is now + an ``Evaluator.modules`` import cache, which resembles ``sys.modules``. +- Integrated the parser of 2to3. This will make refactoring possible. It will + also be possible to check for error messages (like compiling an AST would give) + in the future. +- With the new parser, the evaluation also completely changed. It's now simpler + and more readable. +- Completely rewritten REPL completion. +- Added ``jedi.names``, a command to do static analysis. Thanks to that + sourcegraph guys for sponsoring this! +- Alpha version of the linter. + + +0.8.1 (2014-07-23) ++++++++++++++++++++ + +- Bugfix release, the last release forgot to include files that improve + autocompletion for builtin libraries. Fixed. + +0.8.0 (2014-05-05) ++++++++++++++++++++ + +- Memory Consumption for compiled modules (e.g. builtins, sys) has been reduced + drastically. Loading times are down as well (it takes basically as long as an + import). +- REPL completion is starting to become usable. +- Various small API changes. Generally this release focuses on stability and + refactoring of internal APIs. +- Introducing operator precedence, which makes calculating correct Array + indices and ``__getattr__`` strings possible. + +0.7.0 (2013-08-09) +++++++++++++++++++ + +- Switched from LGPL to MIT license. +- Added an Interpreter class to the API to make autocompletion in REPL + possible. +- Added autocompletion support for namespace packages. +- Add sith.py, a new random testing method. + +0.6.0 (2013-05-14) +++++++++++++++++++ + +- Much faster parser with builtin part caching. +- A test suite, thanks @tkf. + +0.5 versions (2012) ++++++++++++++++++++ + +- Initial development. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/CONTRIBUTING.md b/vim/bundle/jedi-vim/pythonx/jedi/CONTRIBUTING.md new file mode 100644 index 0000000..d791bae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/CONTRIBUTING.md @@ -0,0 +1,8 @@ +Pull Requests are great. + + 1. Fork the Repo on github. + 2. If you are adding functionality or fixing a bug, please add a test! + 3. Add your name to AUTHORS.txt + 4. Push to your fork and submit a pull request. + +**Try to use the PEP8 style guide** (and it's ok to have a line length of 100 characters). diff --git a/vim/bundle/jedi-vim/pythonx/jedi/LICENSE.txt b/vim/bundle/jedi-vim/pythonx/jedi/LICENSE.txt new file mode 100644 index 0000000..94f9545 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/LICENSE.txt @@ -0,0 +1,24 @@ +All contributions towards Jedi are MIT licensed. + +------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) <2013> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/MANIFEST.in b/vim/bundle/jedi-vim/pythonx/jedi/MANIFEST.in new file mode 100644 index 0000000..9486962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/MANIFEST.in @@ -0,0 +1,17 @@ +include README.rst +include CHANGELOG.rst +include LICENSE.txt +include AUTHORS.txt +include .coveragerc +include sith.py +include conftest.py +include pytest.ini +include tox.ini +include requirements.txt +include jedi/parser/python/grammar*.txt +recursive-include jedi/third_party *.pyi +include jedi/third_party/typeshed/LICENSE +include jedi/third_party/typeshed/README +recursive-include test * +recursive-include docs * +recursive-exclude * *.pyc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/README.rst b/vim/bundle/jedi-vim/pythonx/jedi/README.rst new file mode 100644 index 0000000..7c90f8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/README.rst @@ -0,0 +1,224 @@ +################################################################### +Jedi - an awesome autocompletion/static analysis library for Python +################################################################### + +.. image:: https://img.shields.io/pypi/v/jedi.svg?style=flat + :target: https://pypi.python.org/pypi/jedi + :alt: PyPI version + +.. image:: https://img.shields.io/pypi/pyversions/jedi.svg + :target: https://pypi.python.org/pypi/jedi + :alt: Supported Python versions + +.. image:: https://travis-ci.org/davidhalter/jedi.svg?branch=master + :target: https://travis-ci.org/davidhalter/jedi + :alt: Linux Tests + +.. image:: https://ci.appveyor.com/api/projects/status/mgva3bbawyma1new/branch/master?svg=true + :target: https://ci.appveyor.com/project/davidhalter/jedi/branch/master + :alt: Windows Tests + +.. image:: https://coveralls.io/repos/davidhalter/jedi/badge.svg?branch=master + :target: https://coveralls.io/r/davidhalter/jedi + :alt: Coverage status + + +*If you have specific questions, please add an issue or ask on* `Stack Overflow +`_ *with the label* ``python-jedi``. + + +Jedi is a static analysis tool for Python that can be used in IDEs/editors. +Jedi has a focus on autocompletion and goto functionality. Jedi is fast and is +very well tested. It understands Python and stubs on a deep level. + +Jedi has support for different goto functions. It's possible to search for +usages and list names in a Python file to get information about them. + +Jedi uses a very simple API to connect with IDE's. There's a reference +implementation as a `VIM-Plugin `_, +which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. +Autocompletion in your REPL is also possible, IPython uses it natively and for +the CPython REPL you have to install it. + +Jedi can currently be used with the following editors/projects: + +- Vim (jedi-vim_, YouCompleteMe_, deoplete-jedi_, completor.vim_) +- Emacs (Jedi.el_, company-mode_, elpy_, anaconda-mode_, ycmd_) +- Sublime Text (SublimeJEDI_ [ST2 + ST3], anaconda_ [only ST3]) +- TextMate_ (Not sure if it's actually working) +- Kate_ version 4.13+ supports it natively, you have to enable it, though. [`proof + `_] +- Atom_ (autocomplete-python-jedi_) +- `GNOME Builder`_ (with support for GObject Introspection) +- `Visual Studio Code`_ (via `Python Extension `_) +- Gedit (gedi_) +- wdb_ - Web Debugger +- `Eric IDE`_ (Available as a plugin) +- `IPython 6.0.0+ `_ + +and many more! + + +Here are some pictures taken from jedi-vim_: + +.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_complete.png + +Completion for almost anything (Ctrl+Space). + +.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png + +Display of function/class bodies, docstrings. + +.. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_pydoc.png + +Pydoc support (Shift+k). + +There is also support for goto and renaming. + +Get the latest version from `github `_ +(master branch should always be kind of stable/working). + +Docs are available at `https://jedi.readthedocs.org/en/latest/ +`_. Pull requests with documentation +enhancements and/or fixes are awesome and most welcome. Jedi uses `semantic +versioning `_. + +If you want to stay up-to-date (News / RFCs), please subscribe to this `github +thread `_.: + + + +Installation +============ + + pip install jedi + +Note: This just installs the Jedi library, not the editor plugins. For +information about how to make it work with your editor, refer to the +corresponding documentation. + +You don't want to use ``pip``? Please refer to the `manual +`_. + + +Feature Support and Caveats +=========================== + +Jedi really understands your Python code. For a comprehensive list what Jedi +understands, see: `Features +`_. A list of +caveats can be found on the same page. + +You can run Jedi on CPython 2.7 or 3.4+ but it should also +understand/parse code older than those versions. Additionally you should be able +to use `Virtualenvs `_ +very well. + +Tips on how to use Jedi efficiently can be found `here +`_. + +API +--- + +You can find the documentation for the `API here `_. + + +Autocompletion / Goto / Pydoc +----------------------------- + +Please check the API for a good explanation. There are the following commands: + +- ``jedi.Script.goto_assignments`` +- ``jedi.Script.completions`` +- ``jedi.Script.usages`` + +The returned objects are very powerful and really all you might need. + + +Autocompletion in your REPL (IPython, etc.) +------------------------------------------- + +Starting with IPython `6.0.0` Jedi is a dependency of IPython. Autocompletion +in IPython is therefore possible without additional configuration. + +It's possible to have Jedi autocompletion in REPL modes - `example video `_. +This means that in Python you can enable tab completion in a `REPL +`_. + + +Static Analysis +------------------------ + +To do all forms of static analysis, please try to use ``jedi.names``. It will +return a list of names that you can use to infer types and so on. + + +Refactoring +----------- + +Jedi's parser would support refactoring, but there's no API to use it right +now. If you're interested in helping out here, let me know. With the latest +parser changes, it should be very easy to actually make it work. + + +Development +=========== + +There's a pretty good and extensive `development documentation +`_. + + +Testing +======= + +The test suite depends on ``tox`` and ``pytest``:: + + pip install tox pytest + +To run the tests for all supported Python versions:: + + tox + +If you want to test only a specific Python version (e.g. Python 2.7), it's as +easy as :: + + tox -e py27 + +Tests are also run automatically on `Travis CI +`_. + +For more detailed information visit the `testing documentation +`_. + + +Acknowledgements +================ + +- Takafumi Arakaki (@tkf) for creating a solid test environment and a lot of + other things. +- Danilo Bargen (@dbrgn) for general housekeeping and being a good friend :). +- Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 + (originally used in lib2to3). + + + +.. _jedi-vim: https://github.com/davidhalter/jedi-vim +.. _youcompleteme: https://github.com/ycm-core/YouCompleteMe +.. _deoplete-jedi: https://github.com/zchee/deoplete-jedi +.. _completor.vim: https://github.com/maralla/completor.vim +.. _Jedi.el: https://github.com/tkf/emacs-jedi +.. _company-mode: https://github.com/syohex/emacs-company-jedi +.. _elpy: https://github.com/jorgenschaefer/elpy +.. _anaconda-mode: https://github.com/proofit404/anaconda-mode +.. _ycmd: https://github.com/abingham/emacs-ycmd +.. _sublimejedi: https://github.com/srusskih/SublimeJEDI +.. _anaconda: https://github.com/DamnWidget/anaconda +.. _wdb: https://github.com/Kozea/wdb +.. _TextMate: https://github.com/lawrenceakka/python-jedi.tmbundle +.. _Kate: https://kate-editor.org +.. _Atom: https://atom.io/ +.. _autocomplete-python-jedi: https://atom.io/packages/autocomplete-python-jedi +.. _GNOME Builder: https://wiki.gnome.org/Apps/Builder +.. _Visual Studio Code: https://code.visualstudio.com/ +.. _gedi: https://github.com/isamert/gedi +.. _Eric IDE: https://eric-ide.python-projects.org diff --git a/vim/bundle/jedi-vim/pythonx/jedi/appveyor.yml b/vim/bundle/jedi-vim/pythonx/jedi/appveyor.yml new file mode 100644 index 0000000..c1a246e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/appveyor.yml @@ -0,0 +1,87 @@ +environment: + matrix: + - TOXENV: py27 + PYTHON_PATH: C:\Python27 + JEDI_TEST_ENVIRONMENT: 27 + - TOXENV: py27 + PYTHON_PATH: C:\Python27 + JEDI_TEST_ENVIRONMENT: 34 + - TOXENV: py27 + PYTHON_PATH: C:\Python27 + JEDI_TEST_ENVIRONMENT: 35 + - TOXENV: py27 + PYTHON_PATH: C:\Python27 + JEDI_TEST_ENVIRONMENT: 36 + - TOXENV: py27 + PYTHON_PATH: C:\Python27 + JEDI_TEST_ENVIRONMENT: 37 + + - TOXENV: py34 + PYTHON_PATH: C:\Python34 + JEDI_TEST_ENVIRONMENT: 27 + - TOXENV: py34 + PYTHON_PATH: C:\Python34 + JEDI_TEST_ENVIRONMENT: 34 + - TOXENV: py34 + PYTHON_PATH: C:\Python34 + JEDI_TEST_ENVIRONMENT: 35 + - TOXENV: py34 + PYTHON_PATH: C:\Python34 + JEDI_TEST_ENVIRONMENT: 36 + - TOXENV: py34 + PYTHON_PATH: C:\Python34 + JEDI_TEST_ENVIRONMENT: 37 + + - TOXENV: py35 + PYTHON_PATH: C:\Python35 + JEDI_TEST_ENVIRONMENT: 27 + - TOXENV: py35 + PYTHON_PATH: C:\Python35 + JEDI_TEST_ENVIRONMENT: 34 + - TOXENV: py35 + PYTHON_PATH: C:\Python35 + JEDI_TEST_ENVIRONMENT: 35 + - TOXENV: py35 + PYTHON_PATH: C:\Python35 + JEDI_TEST_ENVIRONMENT: 36 + - TOXENV: py35 + PYTHON_PATH: C:\Python35 + JEDI_TEST_ENVIRONMENT: 37 + + - TOXENV: py36 + PYTHON_PATH: C:\Python36 + JEDI_TEST_ENVIRONMENT: 27 + - TOXENV: py36 + PYTHON_PATH: C:\Python36 + JEDI_TEST_ENVIRONMENT: 34 + - TOXENV: py36 + PYTHON_PATH: C:\Python36 + JEDI_TEST_ENVIRONMENT: 35 + - TOXENV: py36 + PYTHON_PATH: C:\Python36 + JEDI_TEST_ENVIRONMENT: 36 + - TOXENV: py36 + PYTHON_PATH: C:\Python36 + JEDI_TEST_ENVIRONMENT: 37 + + - TOXENV: py37 + PYTHON_PATH: C:\Python37 + JEDI_TEST_ENVIRONMENT: 27 + - TOXENV: py37 + PYTHON_PATH: C:\Python37 + JEDI_TEST_ENVIRONMENT: 34 + - TOXENV: py37 + PYTHON_PATH: C:\Python37 + JEDI_TEST_ENVIRONMENT: 35 + - TOXENV: py37 + PYTHON_PATH: C:\Python37 + JEDI_TEST_ENVIRONMENT: 36 + - TOXENV: py37 + PYTHON_PATH: C:\Python37 + JEDI_TEST_ENVIRONMENT: 37 +install: + - git submodule update --init --recursive + - set PATH=%PYTHON_PATH%;%PYTHON_PATH%\Scripts;%PATH% + - pip install tox +build_script: + - tox diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__init__.py new file mode 100644 index 0000000..28cb035 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__init__.py @@ -0,0 +1,47 @@ +""" +Jedi is a static analysis tool for Python that can be used in IDEs/editors. +Jedi has a focus on autocompletion and goto functionality. Jedi is fast and is +very well tested. It understands Python and stubs on a deep level. + +Jedi has support for different goto functions. It's possible to search for +usages and list names in a Python file to get information about them. + +Jedi uses a very simple API to connect with IDE's. There's a reference +implementation as a `VIM-Plugin `_, +which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. +Autocompletion in your REPL is also possible, IPython uses it natively and for +the CPython REPL you have to install it. + +Here's a simple example of the autocompletion feature: + +>>> import jedi +>>> source = ''' +... import json +... json.lo''' +>>> script = jedi.Script(source, 3, len('json.lo'), 'example.py') +>>> script + +>>> completions = script.completions() +>>> completions +[, ] +>>> print(completions[0].complete) +ad +>>> print(completions[0].name) +load + +As you see Jedi is pretty simple and allows you to concentrate on writing a +good text editor, while still having very good IDE features for Python. +""" + +__version__ = '0.15.1' + +from jedi.api import Script, Interpreter, set_debug_function, \ + preload_module, names +from jedi import settings +from jedi.api.environment import find_virtualenvs, find_system_environments, \ + get_default_environment, InvalidPythonEnvironment, create_environment, \ + get_system_environment +from jedi.api.exceptions import InternalError +# Finally load the internal plugins. This is only internal. +from jedi.plugins import registry +del registry diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__main__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__main__.py new file mode 100644 index 0000000..f2ee047 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/__main__.py @@ -0,0 +1,48 @@ +import sys +from os.path import join, dirname, abspath, isdir + + +def _start_linter(): + """ + This is a pre-alpha API. You're not supposed to use it at all, except for + testing. It will very likely change. + """ + import jedi + + if '--debug' in sys.argv: + jedi.set_debug_function() + + for path in sys.argv[2:]: + if path.startswith('--'): + continue + if isdir(path): + import fnmatch + import os + + paths = [] + for root, dirnames, filenames in os.walk(path): + for filename in fnmatch.filter(filenames, '*.py'): + paths.append(os.path.join(root, filename)) + else: + paths = [path] + + try: + for path in paths: + for error in jedi.Script(path=path)._analysis(): + print(error) + except Exception: + if '--pdb' in sys.argv: + import traceback + traceback.print_exc() + import pdb + pdb.post_mortem() + else: + raise + + +if len(sys.argv) == 2 and sys.argv[1] == 'repl': + # don't want to use __main__ only for repl yet, maybe we want to use it for + # something else. So just use the keyword ``repl`` for now. + print(join(dirname(abspath(__file__)), 'api', 'replstartup.py')) +elif len(sys.argv) > 1 and sys.argv[1] == 'linter': + _start_linter() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/_compatibility.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/_compatibility.py new file mode 100644 index 0000000..28e23b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/_compatibility.py @@ -0,0 +1,665 @@ +""" +To ensure compatibility from Python ``2.7`` - ``3.x``, a module has been +created. Clearly there is huge need to use conforming syntax. +""" +from __future__ import print_function +import atexit +import errno +import functools +import sys +import os +import re +import pkgutil +import warnings +import inspect +import subprocess +import weakref +try: + import importlib +except ImportError: + pass +from zipimport import zipimporter + +from jedi.file_io import KnownContentFileIO, ZipFileIO + +is_py3 = sys.version_info[0] >= 3 +is_py35 = is_py3 and sys.version_info[1] >= 5 +py_version = int(str(sys.version_info[0]) + str(sys.version_info[1])) + + +class DummyFile(object): + def __init__(self, loader, string): + self.loader = loader + self.string = string + + def read(self): + return self.loader.get_source(self.string) + + def close(self): + del self.loader + + +def find_module_py34(string, path=None, full_name=None, is_global_search=True): + spec = None + loader = None + + for finder in sys.meta_path: + if is_global_search and finder != importlib.machinery.PathFinder: + p = None + else: + p = path + try: + find_spec = finder.find_spec + except AttributeError: + # These are old-school clases that still have a different API, just + # ignore those. + continue + + spec = find_spec(string, p) + if spec is not None: + loader = spec.loader + if loader is None and not spec.has_location: + # This is a namespace package. + full_name = string if not path else full_name + implicit_ns_info = ImplicitNSInfo(full_name, spec.submodule_search_locations._path) + return implicit_ns_info, True + break + + return find_module_py33(string, path, loader) + + +def find_module_py33(string, path=None, loader=None, full_name=None, is_global_search=True): + loader = loader or importlib.machinery.PathFinder.find_module(string, path) + + if loader is None and path is None: # Fallback to find builtins + try: + with warnings.catch_warnings(record=True): + # Mute "DeprecationWarning: Use importlib.util.find_spec() + # instead." While we should replace that in the future, it's + # probably good to wait until we deprecate Python 3.3, since + # it was added in Python 3.4 and find_loader hasn't been + # removed in 3.6. + loader = importlib.find_loader(string) + except ValueError as e: + # See #491. Importlib might raise a ValueError, to avoid this, we + # just raise an ImportError to fix the issue. + raise ImportError("Originally " + repr(e)) + + if loader is None: + raise ImportError("Couldn't find a loader for {}".format(string)) + + return _from_loader(loader, string) + + +def _from_loader(loader, string): + is_package = loader.is_package(string) + try: + get_filename = loader.get_filename + except AttributeError: + return None, is_package + else: + module_path = cast_path(get_filename(string)) + + # To avoid unicode and read bytes, "overwrite" loader.get_source if + # possible. + f = type(loader).get_source + if is_py3 and f is not importlib.machinery.SourceFileLoader.get_source: + # Unfortunately we are reading unicode here, not bytes. + # It seems hard to get bytes, because the zip importer + # logic just unpacks the zip file and returns a file descriptor + # that we cannot as easily access. Therefore we just read it as + # a string in the cases where get_source was overwritten. + code = loader.get_source(string) + else: + code = _get_source(loader, string) + + if code is None: + return None, is_package + if isinstance(loader, zipimporter): + return ZipFileIO(module_path, code, cast_path(loader.archive)), is_package + + return KnownContentFileIO(module_path, code), is_package + + +def _get_source(loader, fullname): + """ + This method is here as a replacement for SourceLoader.get_source. That + method returns unicode, but we prefer bytes. + """ + path = loader.get_filename(fullname) + try: + return loader.get_data(path) + except OSError: + raise ImportError('source not available through get_data()', + name=fullname) + + +def find_module_pre_py3(string, path=None, full_name=None, is_global_search=True): + # This import is here, because in other places it will raise a + # DeprecationWarning. + import imp + try: + module_file, module_path, description = imp.find_module(string, path) + module_type = description[2] + is_package = module_type is imp.PKG_DIRECTORY + if is_package: + # In Python 2 directory package imports are returned as folder + # paths, not __init__.py paths. + p = os.path.join(module_path, '__init__.py') + try: + module_file = open(p) + module_path = p + except FileNotFoundError: + pass + elif module_type != imp.PY_SOURCE: + if module_file is not None: + module_file.close() + module_file = None + + if module_file is None: + code = None + return None, is_package + + with module_file: + code = module_file.read() + return KnownContentFileIO(cast_path(module_path), code), is_package + except ImportError: + pass + + if path is None: + path = sys.path + for item in path: + loader = pkgutil.get_importer(item) + if loader: + loader = loader.find_module(string) + if loader is not None: + return _from_loader(loader, string) + raise ImportError("No module named {}".format(string)) + + +find_module = find_module_py34 if is_py3 else find_module_pre_py3 +find_module.__doc__ = """ +Provides information about a module. + +This function isolates the differences in importing libraries introduced with +python 3.3 on; it gets a module name and optionally a path. It will return a +tuple containin an open file for the module (if not builtin), the filename +or the name of the module if it is a builtin one and a boolean indicating +if the module is contained in a package. +""" + + +def _iter_modules(paths, prefix=''): + # Copy of pkgutil.iter_modules adapted to work with namespaces + + for path in paths: + importer = pkgutil.get_importer(path) + + if not isinstance(importer, importlib.machinery.FileFinder): + # We're only modifying the case for FileFinder. All the other cases + # still need to be checked (like zip-importing). Do this by just + # calling the pkgutil version. + for mod_info in pkgutil.iter_modules([path], prefix): + yield mod_info + continue + + # START COPY OF pkutils._iter_file_finder_modules. + if importer.path is None or not os.path.isdir(importer.path): + return + + yielded = {} + + try: + filenames = os.listdir(importer.path) + except OSError: + # ignore unreadable directories like import does + filenames = [] + filenames.sort() # handle packages before same-named modules + + for fn in filenames: + modname = inspect.getmodulename(fn) + if modname == '__init__' or modname in yielded: + continue + + # jedi addition: Avoid traversing special directories + if fn.startswith('.') or fn == '__pycache__': + continue + + path = os.path.join(importer.path, fn) + ispkg = False + + if not modname and os.path.isdir(path) and '.' not in fn: + modname = fn + # A few jedi modifications: Don't check if there's an + # __init__.py + try: + os.listdir(path) + except OSError: + # ignore unreadable directories like import does + continue + ispkg = True + + if modname and '.' not in modname: + yielded[modname] = 1 + yield importer, prefix + modname, ispkg + # END COPY + + +iter_modules = _iter_modules if py_version >= 34 else pkgutil.iter_modules + + +class ImplicitNSInfo(object): + """Stores information returned from an implicit namespace spec""" + def __init__(self, name, paths): + self.name = name + self.paths = paths + + +if is_py3: + all_suffixes = importlib.machinery.all_suffixes +else: + def all_suffixes(): + # Is deprecated and raises a warning in Python 3.6. + import imp + return [suffix for suffix, _, _ in imp.get_suffixes()] + + +# unicode function +try: + unicode = unicode +except NameError: + unicode = str + + +# re-raise function +if is_py3: + def reraise(exception, traceback): + raise exception.with_traceback(traceback) +else: + eval(compile(""" +def reraise(exception, traceback): + raise exception, None, traceback +""", 'blub', 'exec')) + +reraise.__doc__ = """ +Re-raise `exception` with a `traceback` object. + +Usage:: + + reraise(Exception, sys.exc_info()[2]) + +""" + + +def use_metaclass(meta, *bases): + """ Create a class with a metaclass. """ + if not bases: + bases = (object,) + return meta("Py2CompatibilityMetaClass", bases, {}) + + +try: + encoding = sys.stdout.encoding + if encoding is None: + encoding = 'utf-8' +except AttributeError: + encoding = 'ascii' + + +def u(string, errors='strict'): + """Cast to unicode DAMMIT! + Written because Python2 repr always implicitly casts to a string, so we + have to cast back to a unicode (and we now that we always deal with valid + unicode, because we check that in the beginning). + """ + if isinstance(string, bytes): + return unicode(string, encoding='UTF-8', errors=errors) + return string + + +def cast_path(obj): + """ + Take a bytes or str path and cast it to unicode. + + Apparently it is perfectly fine to pass both byte and unicode objects into + the sys.path. This probably means that byte paths are normal at other + places as well. + + Since this just really complicates everything and Python 2.7 will be EOL + soon anyway, just go with always strings. + """ + return u(obj, errors='replace') + + +def force_unicode(obj): + # Intentionally don't mix those two up, because those two code paths might + # be different in the future (maybe windows?). + return cast_path(obj) + + +try: + import builtins # module name in python 3 +except ImportError: + import __builtin__ as builtins # noqa: F401 + + +import ast # noqa: F401 + + +def literal_eval(string): + return ast.literal_eval(string) + + +try: + from itertools import zip_longest +except ImportError: + from itertools import izip_longest as zip_longest # Python 2 # noqa: F401 + +try: + FileNotFoundError = FileNotFoundError +except NameError: + FileNotFoundError = IOError + +try: + IsADirectoryError = IsADirectoryError +except NameError: + IsADirectoryError = IOError + +try: + PermissionError = PermissionError +except NameError: + PermissionError = IOError + + +def no_unicode_pprint(dct): + """ + Python 2/3 dict __repr__ may be different, because of unicode differens + (with or without a `u` prefix). Normally in doctests we could use `pprint` + to sort dicts and check for equality, but here we have to write a separate + function to do that. + """ + import pprint + s = pprint.pformat(dct) + print(re.sub("u'", "'", s)) + + +def utf8_repr(func): + """ + ``__repr__`` methods in Python 2 don't allow unicode objects to be + returned. Therefore cast them to utf-8 bytes in this decorator. + """ + def wrapper(self): + result = func(self) + if isinstance(result, unicode): + return result.encode('utf-8') + else: + return result + + if is_py3: + return func + else: + return wrapper + + +if is_py3: + import queue +else: + import Queue as queue # noqa: F401 + +try: + # Attempt to load the C implementation of pickle on Python 2 as it is way + # faster. + import cPickle as pickle +except ImportError: + import pickle +if sys.version_info[:2] == (3, 3): + """ + Monkeypatch the unpickler in Python 3.3. This is needed, because the + argument `encoding='bytes'` is not supported in 3.3, but badly needed to + communicate with Python 2. + """ + + class NewUnpickler(pickle._Unpickler): + dispatch = dict(pickle._Unpickler.dispatch) + + def _decode_string(self, value): + # Used to allow strings from Python 2 to be decoded either as + # bytes or Unicode strings. This should be used only with the + # STRING, BINSTRING and SHORT_BINSTRING opcodes. + if self.encoding == "bytes": + return value + else: + return value.decode(self.encoding, self.errors) + + def load_string(self): + data = self.readline()[:-1] + # Strip outermost quotes + if len(data) >= 2 and data[0] == data[-1] and data[0] in b'"\'': + data = data[1:-1] + else: + raise pickle.UnpicklingError("the STRING opcode argument must be quoted") + self.append(self._decode_string(pickle.codecs.escape_decode(data)[0])) + dispatch[pickle.STRING[0]] = load_string + + def load_binstring(self): + # Deprecated BINSTRING uses signed 32-bit length + len, = pickle.struct.unpack('' % ( + self.__class__.__name__, + repr(self._orig_path), + self._evaluator.environment, + ) + + def completions(self): + """ + Return :class:`classes.Completion` objects. Those objects contain + information about the completions, more than just names. + + :return: Completion objects, sorted by name and __ comes last. + :rtype: list of :class:`classes.Completion` + """ + with debug.increase_indent_cm('completions'): + completion = Completion( + self._evaluator, self._get_module(), self._code_lines, + self._pos, self.call_signatures + ) + return completion.completions() + + def goto_definitions(self, **kwargs): + """ + Return the definitions of a the path under the cursor. goto function! + This follows complicated paths and returns the end, not the first + definition. The big difference between :meth:`goto_assignments` and + :meth:`goto_definitions` is that :meth:`goto_assignments` doesn't + follow imports and statements. Multiple objects may be returned, + because Python itself is a dynamic language, which means depending on + an option you can have two different versions of a function. + + :param only_stubs: Only return stubs for this goto call. + :param prefer_stubs: Prefer stubs to Python objects for this type + inference call. + :rtype: list of :class:`classes.Definition` + """ + with debug.increase_indent_cm('goto_definitions'): + return self._goto_definitions(**kwargs) + + def _goto_definitions(self, only_stubs=False, prefer_stubs=False): + leaf = self._module_node.get_name_of_position(self._pos) + if leaf is None: + leaf = self._module_node.get_leaf_for_position(self._pos) + if leaf is None: + return [] + + context = self._evaluator.create_context(self._get_module(), leaf) + + contexts = helpers.evaluate_goto_definition(self._evaluator, context, leaf) + contexts = convert_contexts( + contexts, + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + + defs = [classes.Definition(self._evaluator, c.name) for c in contexts] + # The additional set here allows the definitions to become unique in an + # API sense. In the internals we want to separate more things than in + # the API. + return helpers.sorted_definitions(set(defs)) + + def goto_assignments(self, follow_imports=False, follow_builtin_imports=False, **kwargs): + """ + Return the first definition found, while optionally following imports. + Multiple objects may be returned, because Python itself is a + dynamic language, which means depending on an option you can have two + different versions of a function. + + .. note:: It is deprecated to use follow_imports and follow_builtin_imports as + positional arguments. Will be a keyword argument in 0.16.0. + + :param follow_imports: The goto call will follow imports. + :param follow_builtin_imports: If follow_imports is True will decide if + it follow builtin imports. + :param only_stubs: Only return stubs for this goto call. + :param prefer_stubs: Prefer stubs to Python objects for this goto call. + :rtype: list of :class:`classes.Definition` + """ + with debug.increase_indent_cm('goto_assignments'): + return self._goto_assignments(follow_imports, follow_builtin_imports, **kwargs) + + def _goto_assignments(self, follow_imports, follow_builtin_imports, + only_stubs=False, prefer_stubs=False): + def filter_follow_imports(names, check): + for name in names: + if check(name): + new_names = list(filter_follow_imports(name.goto(), check)) + found_builtin = False + if follow_builtin_imports: + for new_name in new_names: + if new_name.start_pos is None: + found_builtin = True + + if found_builtin: + yield name + else: + for new_name in new_names: + yield new_name + else: + yield name + + tree_name = self._module_node.get_name_of_position(self._pos) + if tree_name is None: + # Without a name we really just want to jump to the result e.g. + # executed by `foo()`, if we the cursor is after `)`. + return self.goto_definitions(only_stubs=only_stubs, prefer_stubs=prefer_stubs) + context = self._evaluator.create_context(self._get_module(), tree_name) + names = list(self._evaluator.goto(context, tree_name)) + + if follow_imports: + names = filter_follow_imports(names, lambda name: name.is_import()) + names = convert_names( + names, + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + + defs = [classes.Definition(self._evaluator, d) for d in set(names)] + return helpers.sorted_definitions(defs) + + def usages(self, additional_module_paths=(), **kwargs): + """ + Return :class:`classes.Definition` objects, which contain all + names that point to the definition of the name under the cursor. This + is very useful for refactoring (renaming), or to show all usages of a + variable. + + .. todo:: Implement additional_module_paths + + :param additional_module_paths: Deprecated, never ever worked. + :param include_builtins: Default True, checks if a usage is a builtin + (e.g. ``sys``) and in that case does not return it. + :rtype: list of :class:`classes.Definition` + """ + if additional_module_paths: + warnings.warn( + "Deprecated since version 0.12.0. This never even worked, just ignore it.", + DeprecationWarning, + stacklevel=2 + ) + + def _usages(include_builtins=True): + tree_name = self._module_node.get_name_of_position(self._pos) + if tree_name is None: + # Must be syntax + return [] + + names = usages.usages(self._get_module(), tree_name) + + definitions = [classes.Definition(self._evaluator, n) for n in names] + if not include_builtins: + definitions = [d for d in definitions if not d.in_builtin_module()] + return helpers.sorted_definitions(definitions) + return _usages(**kwargs) + + def call_signatures(self): + """ + Return the function object of the call you're currently in. + + E.g. if the cursor is here:: + + abs(# <-- cursor is here + + This would return the ``abs`` function. On the other hand:: + + abs()# <-- cursor is here + + This would return an empty list.. + + :rtype: list of :class:`classes.CallSignature` + """ + call_details = helpers.get_call_signature_details(self._module_node, self._pos) + if call_details is None: + return [] + + context = self._evaluator.create_context( + self._get_module(), + call_details.bracket_leaf + ) + definitions = helpers.cache_call_signatures( + self._evaluator, + context, + call_details.bracket_leaf, + self._code_lines, + self._pos + ) + debug.speed('func_call followed') + + # TODO here we use stubs instead of the actual contexts. We should use + # the signatures from stubs, but the actual contexts, probably?! + return [classes.CallSignature(self._evaluator, signature, call_details) + for signature in definitions.get_signatures()] + + def _analysis(self): + self._evaluator.is_analysis = True + self._evaluator.analysis_modules = [self._module_node] + module = self._get_module() + try: + for node in get_executable_nodes(self._module_node): + context = module.create_context(node) + if node.type in ('funcdef', 'classdef'): + # Resolve the decorators. + tree_name_to_contexts(self._evaluator, context, node.children[1]) + elif isinstance(node, tree.Import): + import_names = set(node.get_defined_names()) + if node.is_nested(): + import_names |= set(path[-1] for path in node.get_paths()) + for n in import_names: + imports.infer_import(context, n) + elif node.type == 'expr_stmt': + types = context.eval_node(node) + for testlist in node.children[:-1:2]: + # Iterate tuples. + unpack_tuple_to_dict(context, types, testlist) + else: + if node.type == 'name': + defs = self._evaluator.goto_definitions(context, node) + else: + defs = evaluate_call_of_leaf(context, node) + try_iter_content(defs) + self._evaluator.reset_recursion_limitations() + + ana = [a for a in self._evaluator.analysis if self.path == a.path] + return sorted(set(ana), key=lambda x: x.line) + finally: + self._evaluator.is_analysis = False + + +class Interpreter(Script): + """ + Jedi API for Python REPLs. + + In addition to completion of simple attribute access, Jedi + supports code completion based on static code analysis. + Jedi can complete attributes of object which is not initialized + yet. + + >>> from os.path import join + >>> namespace = locals() + >>> script = Interpreter('join("").up', [namespace]) + >>> print(script.completions()[0].name) + upper + """ + _allow_descriptor_getattr_default = True + + def __init__(self, source, namespaces, **kwds): + """ + Parse `source` and mixin interpreted Python objects from `namespaces`. + + :type source: str + :arg source: Code to parse. + :type namespaces: list of dict + :arg namespaces: a list of namespace dictionaries such as the one + returned by :func:`locals`. + + Other optional arguments are same as the ones for :class:`Script`. + If `line` and `column` are None, they are assumed be at the end of + `source`. + """ + try: + namespaces = [dict(n) for n in namespaces] + except Exception: + raise TypeError("namespaces must be a non-empty list of dicts.") + + environment = kwds.get('environment', None) + if environment is None: + environment = InterpreterEnvironment() + else: + if not isinstance(environment, InterpreterEnvironment): + raise TypeError("The environment needs to be an InterpreterEnvironment subclass.") + + super(Interpreter, self).__init__(source, environment=environment, + _project=Project(os.getcwd()), **kwds) + self.namespaces = namespaces + self._evaluator.allow_descriptor_getattr = self._allow_descriptor_getattr_default + + def _get_module(self): + return interpreter.MixedModuleContext( + self._evaluator, + self._module_node, + self.namespaces, + file_io=KnownContentFileIO(self.path, self._code), + code_lines=self._code_lines, + ) + + +def names(source=None, path=None, encoding='utf-8', all_scopes=False, + definitions=True, references=False, environment=None): + """ + Returns a list of `Definition` objects, containing name parts. + This means you can call ``Definition.goto_assignments()`` and get the + reference of a name. + The parameters are the same as in :py:class:`Script`, except or the + following ones: + + :param all_scopes: If True lists the names of all scopes instead of only + the module namespace. + :param definitions: If True lists the names that have been defined by a + class, function or a statement (``a = b`` returns ``a``). + :param references: If True lists all the names that are not listed by + ``definitions=True``. E.g. ``a = b`` returns ``b``. + """ + def def_ref_filter(_def): + is_def = _def._name.tree_name.is_definition() + return definitions and is_def or references and not is_def + + def create_name(name): + if name.parent.type == 'param': + cls = ParamName + else: + cls = TreeNameDefinition + return cls( + module_context.create_context(name), + name + ) + + # Set line/column to a random position, because they don't matter. + script = Script(source, line=1, column=0, path=path, encoding=encoding, environment=environment) + module_context = script._get_module() + defs = [ + classes.Definition( + script._evaluator, + create_name(name) + ) for name in get_module_names(script._module_node, all_scopes) + ] + return sorted(filter(def_ref_filter, defs), key=lambda x: (x.line, x.column)) + + +def preload_module(*modules): + """ + Preloading modules tells Jedi to load a module now, instead of lazy parsing + of modules. Usful for IDEs, to control which modules to load on startup. + + :param modules: different module names, list of string. + """ + for m in modules: + s = "import %s as x; x." % m + Script(s, 1, len(s), None).completions() + + +def set_debug_function(func_cb=debug.print_to_stdout, warnings=True, + notices=True, speed=True): + """ + Define a callback debug function to get all the debug messages. + + If you don't specify any arguments, debug messages will be printed to stdout. + + :param func_cb: The callback function for debug messages, with n params. + """ + debug.debug_function = func_cb + debug.enable_warning = warnings + debug.enable_notice = notices + debug.enable_speed = speed diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/classes.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/classes.py new file mode 100644 index 0000000..c393ca6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/classes.py @@ -0,0 +1,768 @@ +""" +The :mod:`jedi.api.classes` module contains the return classes of the API. +These classes are the much bigger part of the whole API, because they contain +the interesting information about completion and goto operations. +""" +import re +import sys +import warnings + +from jedi import settings +from jedi import debug +from jedi.evaluate.utils import unite +from jedi.cache import memoize_method +from jedi.evaluate import imports +from jedi.evaluate import compiled +from jedi.evaluate.imports import ImportName +from jedi.evaluate.context import FunctionExecutionContext +from jedi.evaluate.gradual.typeshed import StubModuleContext +from jedi.evaluate.gradual.conversion import convert_names, convert_contexts +from jedi.evaluate.base_context import ContextSet +from jedi.api.keywords import KeywordName + + +def _sort_names_by_start_pos(names): + return sorted(names, key=lambda s: s.start_pos or (0, 0)) + + +def defined_names(evaluator, context): + """ + List sub-definitions (e.g., methods in class). + + :type scope: Scope + :rtype: list of Definition + """ + filter = next(context.get_filters(search_global=True)) + names = [name for name in filter.values()] + return [Definition(evaluator, n) for n in _sort_names_by_start_pos(names)] + + +def _contexts_to_definitions(contexts): + return [Definition(c.evaluator, c.name) for c in contexts] + + +class BaseDefinition(object): + _mapping = { + 'posixpath': 'os.path', + 'riscospath': 'os.path', + 'ntpath': 'os.path', + 'os2emxpath': 'os.path', + 'macpath': 'os.path', + 'genericpath': 'os.path', + 'posix': 'os', + '_io': 'io', + '_functools': 'functools', + '_collections': 'collections', + '_socket': 'socket', + '_sqlite3': 'sqlite3', + '__builtin__': 'builtins', + } + + _tuple_mapping = dict((tuple(k.split('.')), v) for (k, v) in { + 'argparse._ActionsContainer': 'argparse.ArgumentParser', + }.items()) + + def __init__(self, evaluator, name): + self._evaluator = evaluator + self._name = name + """ + An instance of :class:`parso.python.tree.Name` subclass. + """ + self.is_keyword = isinstance(self._name, KeywordName) + + @memoize_method + def _get_module(self): + # This can take a while to complete, because in the worst case of + # imports (consider `import a` completions), we need to load all + # modules starting with a first. + return self._name.get_root_context() + + @property + def module_path(self): + """Shows the file path of a module. e.g. ``/usr/lib/python2.7/os.py``""" + module = self._get_module() + if module.is_stub() or not module.is_compiled(): + # Compiled modules should not return a module path even if they + # have one. + return self._get_module().py__file__() + + return None + + @property + def name(self): + """ + Name of variable/function/class/module. + + For example, for ``x = None`` it returns ``'x'``. + + :rtype: str or None + """ + return self._name.string_name + + @property + def type(self): + """ + The type of the definition. + + Here is an example of the value of this attribute. Let's consider + the following source. As what is in ``variable`` is unambiguous + to Jedi, :meth:`jedi.Script.goto_definitions` should return a list of + definition for ``sys``, ``f``, ``C`` and ``x``. + + >>> from jedi._compatibility import no_unicode_pprint + >>> from jedi import Script + >>> source = ''' + ... import keyword + ... + ... class C: + ... pass + ... + ... class D: + ... pass + ... + ... x = D() + ... + ... def f(): + ... pass + ... + ... for variable in [keyword, f, C, x]: + ... variable''' + + >>> script = Script(source) + >>> defs = script.goto_definitions() + + Before showing what is in ``defs``, let's sort it by :attr:`line` + so that it is easy to relate the result to the source code. + + >>> defs = sorted(defs, key=lambda d: d.line) + >>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE + [, + , + , + ] + + Finally, here is what you can get from :attr:`type`: + + >>> defs = [str(d.type) for d in defs] # It's unicode and in Py2 has u before it. + >>> defs[0] + 'module' + >>> defs[1] + 'class' + >>> defs[2] + 'instance' + >>> defs[3] + 'function' + + Valid values for are ``module``, ``class``, ``instance``, ``function``, + ``param``, ``path`` and ``keyword``. + + """ + tree_name = self._name.tree_name + resolve = False + if tree_name is not None: + # TODO move this to their respective names. + definition = tree_name.get_definition() + if definition is not None and definition.type == 'import_from' and \ + tree_name.is_definition(): + resolve = True + + if isinstance(self._name, imports.SubModuleName) or resolve: + for context in self._name.infer(): + return context.api_type + return self._name.api_type + + @property + def module_name(self): + """ + The module name. + + >>> from jedi import Script + >>> source = 'import json' + >>> script = Script(source, path='example.py') + >>> d = script.goto_definitions()[0] + >>> print(d.module_name) # doctest: +ELLIPSIS + json + """ + return self._get_module().name.string_name + + def in_builtin_module(self): + """Whether this is a builtin module.""" + if isinstance(self._get_module(), StubModuleContext): + return any(isinstance(context, compiled.CompiledObject) + for context in self._get_module().non_stub_context_set) + return isinstance(self._get_module(), compiled.CompiledObject) + + @property + def line(self): + """The line where the definition occurs (starting with 1).""" + start_pos = self._name.start_pos + if start_pos is None: + return None + return start_pos[0] + + @property + def column(self): + """The column where the definition occurs (starting with 0).""" + start_pos = self._name.start_pos + if start_pos is None: + return None + return start_pos[1] + + def docstring(self, raw=False, fast=True): + r""" + Return a document string for this completion object. + + Example: + + >>> from jedi import Script + >>> source = '''\ + ... def f(a, b=1): + ... "Document for function f." + ... ''' + >>> script = Script(source, 1, len('def f'), 'example.py') + >>> doc = script.goto_definitions()[0].docstring() + >>> print(doc) + f(a, b=1) + + Document for function f. + + Notice that useful extra information is added to the actual + docstring. For function, it is call signature. If you need + actual docstring, use ``raw=True`` instead. + + >>> print(script.goto_definitions()[0].docstring(raw=True)) + Document for function f. + + :param fast: Don't follow imports that are only one level deep like + ``import foo``, but follow ``from foo import bar``. This makes + sense for speed reasons. Completing `import a` is slow if you use + the ``foo.docstring(fast=False)`` on every object, because it + parses all libraries starting with ``a``. + """ + return _Help(self._name).docstring(fast=fast, raw=raw) + + @property + def description(self): + """A textual description of the object.""" + return self._name.string_name + + @property + def full_name(self): + """ + Dot-separated path of this object. + + It is in the form of ``[.[...]][.]``. + It is useful when you want to look up Python manual of the + object at hand. + + Example: + + >>> from jedi import Script + >>> source = ''' + ... import os + ... os.path.join''' + >>> script = Script(source, 3, len('os.path.join'), 'example.py') + >>> print(script.goto_definitions()[0].full_name) + os.path.join + + Notice that it returns ``'os.path.join'`` instead of (for example) + ``'posixpath.join'``. This is not correct, since the modules name would + be `````. However most users find the latter + more practical. + """ + if not self._name.is_context_name: + return None + + names = self._name.get_qualified_names(include_module_names=True) + if names is None: + return names + + names = list(names) + try: + names[0] = self._mapping[names[0]] + except KeyError: + pass + + return '.'.join(names) + + def is_stub(self): + if not self._name.is_context_name: + return False + + return self._name.get_root_context().is_stub() + + def goto_assignments(self, **kwargs): # Python 2... + with debug.increase_indent_cm('goto for %s' % self._name): + return self._goto_assignments(**kwargs) + + def _goto_assignments(self, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + + if not self._name.is_context_name: + return [] + + names = convert_names( + self._name.goto(), + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + return [self if n == self._name else Definition(self._evaluator, n) + for n in names] + + def infer(self, **kwargs): # Python 2... + with debug.increase_indent_cm('infer for %s' % self._name): + return self._infer(**kwargs) + + def _infer(self, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + + if not self._name.is_context_name: + return [] + + # First we need to make sure that we have stub names (if possible) that + # we can follow. If we don't do that, we can end up with the inferred + # results of Python objects instead of stubs. + names = convert_names([self._name], prefer_stubs=True) + contexts = convert_contexts( + ContextSet.from_sets(n.infer() for n in names), + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + resulting_names = [c.name for c in contexts] + return [self if n == self._name else Definition(self._evaluator, n) + for n in resulting_names] + + @property + @memoize_method + def params(self): + """ + Deprecated! Will raise a warning soon. Use get_signatures()[...].params. + + Raises an ``AttributeError`` if the definition is not callable. + Otherwise returns a list of `Definition` that represents the params. + """ + # Only return the first one. There might be multiple one, especially + # with overloading. + for context in self._name.infer(): + for signature in context.get_signatures(): + return [ + Definition(self._evaluator, n) + for n in signature.get_param_names(resolve_stars=True) + ] + + if self.type == 'function' or self.type == 'class': + # Fallback, if no signatures were defined (which is probably by + # itself a bug). + return [] + raise AttributeError('There are no params defined on this.') + + def parent(self): + if not self._name.is_context_name: + return None + + context = self._name.parent_context + if context is None: + return None + + if isinstance(context, FunctionExecutionContext): + context = context.function_context + return Definition(self._evaluator, context.name) + + def __repr__(self): + return "<%s %sname=%r, description=%r>" % ( + self.__class__.__name__, + 'full_' if self.full_name else '', + self.full_name or self.name, + self.description, + ) + + def get_line_code(self, before=0, after=0): + """ + Returns the line of code where this object was defined. + + :param before: Add n lines before the current line to the output. + :param after: Add n lines after the current line to the output. + + :return str: Returns the line(s) of code or an empty string if it's a + builtin. + """ + if not self._name.is_context_name or self.in_builtin_module(): + return '' + + lines = self._name.get_root_context().code_lines + + index = self._name.start_pos[0] - 1 + start_index = max(index - before, 0) + return ''.join(lines[start_index:index + after + 1]) + + def get_signatures(self): + return [Signature(self._evaluator, s) for s in self._name.infer().get_signatures()] + + def execute(self): + return _contexts_to_definitions(self._name.infer().execute_evaluated()) + + +class Completion(BaseDefinition): + """ + `Completion` objects are returned from :meth:`api.Script.completions`. They + provide additional information about a completion. + """ + def __init__(self, evaluator, name, stack, like_name_length): + super(Completion, self).__init__(evaluator, name) + + self._like_name_length = like_name_length + self._stack = stack + + # Completion objects with the same Completion name (which means + # duplicate items in the completion) + self._same_name_completions = [] + + def _complete(self, like_name): + append = '' + if settings.add_bracket_after_function \ + and self.type == 'function': + append = '(' + + if self._name.api_type == 'param' and self._stack is not None: + nonterminals = [stack_node.nonterminal for stack_node in self._stack] + if 'trailer' in nonterminals and 'argument' not in nonterminals: + # TODO this doesn't work for nested calls. + append += '=' + + name = self._name.string_name + if like_name: + name = name[self._like_name_length:] + return name + append + + @property + def complete(self): + """ + Return the rest of the word, e.g. completing ``isinstance``:: + + isinstan# <-- Cursor is here + + would return the string 'ce'. It also adds additional stuff, depending + on your `settings.py`. + + Assuming the following function definition:: + + def foo(param=0): + pass + + completing ``foo(par`` would give a ``Completion`` which `complete` + would be `am=` + + + """ + return self._complete(True) + + @property + def name_with_symbols(self): + """ + Similar to :attr:`name`, but like :attr:`name` returns also the + symbols, for example assuming the following function definition:: + + def foo(param=0): + pass + + completing ``foo(`` would give a ``Completion`` which + ``name_with_symbols`` would be "param=". + + """ + return self._complete(False) + + def docstring(self, raw=False, fast=True): + if self._like_name_length >= 3: + # In this case we can just resolve the like name, because we + # wouldn't load like > 100 Python modules anymore. + fast = False + return super(Completion, self).docstring(raw=raw, fast=fast) + + @property + def description(self): + """Provide a description of the completion object.""" + # TODO improve the class structure. + return Definition.description.__get__(self) + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self._name.string_name) + + @memoize_method + def follow_definition(self): + """ + Deprecated! + + Return the original definitions. I strongly recommend not using it for + your completions, because it might slow down |jedi|. If you want to + read only a few objects (<=20), it might be useful, especially to get + the original docstrings. The basic problem of this function is that it + follows all results. This means with 1000 completions (e.g. numpy), + it's just PITA-slow. + """ + warnings.warn( + "Deprecated since version 0.14.0. Use .infer.", + DeprecationWarning, + stacklevel=2 + ) + return self.infer() + + +class Definition(BaseDefinition): + """ + *Definition* objects are returned from :meth:`api.Script.goto_assignments` + or :meth:`api.Script.goto_definitions`. + """ + def __init__(self, evaluator, definition): + super(Definition, self).__init__(evaluator, definition) + + @property + def description(self): + """ + A description of the :class:`.Definition` object, which is heavily used + in testing. e.g. for ``isinstance`` it returns ``def isinstance``. + + Example: + + >>> from jedi._compatibility import no_unicode_pprint + >>> from jedi import Script + >>> source = ''' + ... def f(): + ... pass + ... + ... class C: + ... pass + ... + ... variable = f if random.choice([0,1]) else C''' + >>> script = Script(source, column=3) # line is maximum by default + >>> defs = script.goto_definitions() + >>> defs = sorted(defs, key=lambda d: d.line) + >>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE + [, + ] + >>> str(defs[0].description) # strip literals in python2 + 'def f' + >>> str(defs[1].description) + 'class C' + + """ + typ = self.type + tree_name = self._name.tree_name + if typ == 'param': + return typ + ' ' + self._name.to_string() + if typ in ('function', 'class', 'module', 'instance') or tree_name is None: + if typ == 'function': + # For the description we want a short and a pythonic way. + typ = 'def' + return typ + ' ' + self._name.string_name + + definition = tree_name.get_definition() or tree_name + # Remove the prefix, because that's not what we want for get_code + # here. + txt = definition.get_code(include_prefix=False) + # Delete comments: + txt = re.sub(r'#[^\n]+\n', ' ', txt) + # Delete multi spaces/newlines + txt = re.sub(r'\s+', ' ', txt).strip() + return txt + + @property + def desc_with_module(self): + """ + In addition to the definition, also return the module. + + .. warning:: Don't use this function yet, its behaviour may change. If + you really need it, talk to me. + + .. todo:: Add full path. This function is should return a + `module.class.function` path. + """ + position = '' if self.in_builtin_module else '@%s' % self.line + return "%s:%s%s" % (self.module_name, self.description, position) + + @memoize_method + def defined_names(self): + """ + List sub-definitions (e.g., methods in class). + + :rtype: list of Definition + """ + defs = self._name.infer() + return sorted( + unite(defined_names(self._evaluator, d) for d in defs), + key=lambda s: s._name.start_pos or (0, 0) + ) + + def is_definition(self): + """ + Returns True, if defined as a name in a statement, function or class. + Returns False, if it's a reference to such a definition. + """ + if self._name.tree_name is None: + return True + else: + return self._name.tree_name.is_definition() + + def __eq__(self, other): + return self._name.start_pos == other._name.start_pos \ + and self.module_path == other.module_path \ + and self.name == other.name \ + and self._evaluator == other._evaluator + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self._name.start_pos, self.module_path, self.name, self._evaluator)) + + +class Signature(Definition): + """ + `Signature` objects is the return value of `Script.function_definition`. + It knows what functions you are currently in. e.g. `isinstance(` would + return the `isinstance` function. without `(` it would return nothing. + """ + def __init__(self, evaluator, signature): + super(Signature, self).__init__(evaluator, signature.name) + self._signature = signature + + @property + def params(self): + """ + :return list of ParamDefinition: + """ + return [ParamDefinition(self._evaluator, n) + for n in self._signature.get_param_names(resolve_stars=True)] + + def to_string(self): + return self._signature.to_string() + + +class CallSignature(Signature): + """ + `CallSignature` objects is the return value of `Script.call_signatures`. + It knows what functions you are currently in. e.g. `isinstance(` would + return the `isinstance` function with its params. Without `(` it would + return nothing. + """ + def __init__(self, evaluator, signature, call_details): + super(CallSignature, self).__init__(evaluator, signature) + self._call_details = call_details + self._signature = signature + + @property + def index(self): + """ + The Param index of the current call. + Returns None if the index cannot be found in the curent call. + """ + return self._call_details.calculate_index( + self._signature.get_param_names(resolve_stars=True) + ) + + @property + def bracket_start(self): + """ + The line/column of the bracket that is responsible for the last + function call. + """ + return self._call_details.bracket_leaf.start_pos + + def __repr__(self): + return '<%s: index=%r %s>' % ( + type(self).__name__, + self.index, + self._signature.to_string(), + ) + + +class ParamDefinition(Definition): + def infer_default(self): + """ + :return list of Definition: + """ + return _contexts_to_definitions(self._name.infer_default()) + + def infer_annotation(self, **kwargs): + """ + :return list of Definition: + + :param execute_annotation: If False, the values are not executed and + you get classes instead of instances. + """ + return _contexts_to_definitions(self._name.infer_annotation(**kwargs)) + + def to_string(self): + return self._name.to_string() + + @property + def kind(self): + """ + Returns an enum instance. Returns the same values as the builtin + :py:attr:`inspect.Parameter.kind`. + + No support for Python < 3.4 anymore. + """ + if sys.version_info < (3, 5): + raise NotImplementedError( + 'Python 2 is end-of-life, the new feature is not available for it' + ) + return self._name.get_kind() + + +def _format_signatures(context): + return '\n'.join( + signature.to_string() + for signature in context.get_signatures() + ) + + +class _Help(object): + """ + Temporary implementation, will be used as `Script.help() or something in + the future. + """ + def __init__(self, definition): + self._name = definition + + @memoize_method + def _get_contexts(self, fast): + if isinstance(self._name, ImportName) and fast: + return {} + + if self._name.api_type == 'statement': + return {} + + return self._name.infer() + + def docstring(self, fast=True, raw=True): + """ + The docstring ``__doc__`` for any object. + + See :attr:`doc` for example. + """ + full_doc = '' + # Using the first docstring that we see. + for context in self._get_contexts(fast=fast): + if full_doc: + # In case we have multiple contexts, just return all of them + # separated by a few dashes. + full_doc += '\n' + '-' * 30 + '\n' + + doc = context.py__doc__() + + signature_text = '' + if self._name.is_context_name: + if not raw: + signature_text = _format_signatures(context) + if not doc and context.is_stub(): + for c in convert_contexts(ContextSet({context}), ignore_compiled=False): + doc = c.py__doc__() + if doc: + break + + if signature_text and doc: + full_doc += signature_text + '\n\n' + doc + else: + full_doc += signature_text + doc + + return full_doc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/completion.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/completion.py new file mode 100644 index 0000000..aa5be0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/completion.py @@ -0,0 +1,326 @@ +import re + +from parso.python.token import PythonTokenTypes +from parso.python import tree +from parso.tree import search_ancestor, Leaf + +from jedi._compatibility import Parameter +from jedi import debug +from jedi import settings +from jedi.api import classes +from jedi.api import helpers +from jedi.api import keywords +from jedi.api.file_name import file_name_completions +from jedi.evaluate import imports +from jedi.evaluate.helpers import evaluate_call_of_leaf, parse_dotted_names +from jedi.evaluate.filters import get_global_filters +from jedi.evaluate.gradual.conversion import convert_contexts +from jedi.parser_utils import get_statement_of_position, cut_value_at_position + + +def get_call_signature_param_names(call_signatures): + # add named params + for call_sig in call_signatures: + for p in call_sig.params: + # Allow protected access, because it's a public API. + if p._name.get_kind() in (Parameter.POSITIONAL_OR_KEYWORD, + Parameter.KEYWORD_ONLY): + yield p._name + + +def filter_names(evaluator, completion_names, stack, like_name): + comp_dct = {} + if settings.case_insensitive_completion: + like_name = like_name.lower() + for name in completion_names: + string = name.string_name + if settings.case_insensitive_completion: + string = string.lower() + + if string.startswith(like_name): + new = classes.Completion( + evaluator, + name, + stack, + len(like_name) + ) + k = (new.name, new.complete) # key + if k in comp_dct and settings.no_completion_duplicates: + comp_dct[k]._same_name_completions.append(new) + else: + comp_dct[k] = new + yield new + + +def get_user_scope(module_context, position): + """ + Returns the scope in which the user resides. This includes flows. + """ + user_stmt = get_statement_of_position(module_context.tree_node, position) + if user_stmt is None: + def scan(scope): + for s in scope.children: + if s.start_pos <= position <= s.end_pos: + if isinstance(s, (tree.Scope, tree.Flow)) \ + or s.type in ('async_stmt', 'async_funcdef'): + return scan(s) or s + elif s.type in ('suite', 'decorated'): + return scan(s) + return None + + scanned_node = scan(module_context.tree_node) + if scanned_node: + return module_context.create_context(scanned_node, node_is_context=True) + return module_context + else: + return module_context.create_context(user_stmt) + + +def get_flow_scope_node(module_node, position): + node = module_node.get_leaf_for_position(position, include_prefixes=True) + while not isinstance(node, (tree.Scope, tree.Flow)): + node = node.parent + + return node + + +class Completion: + def __init__(self, evaluator, module, code_lines, position, call_signatures_callback): + self._evaluator = evaluator + self._module_context = module + self._module_node = module.tree_node + self._code_lines = code_lines + + # The first step of completions is to get the name + self._like_name = helpers.get_on_completion_name(self._module_node, code_lines, position) + # The actual cursor position is not what we need to calculate + # everything. We want the start of the name we're on. + self._original_position = position + self._position = position[0], position[1] - len(self._like_name) + self._call_signatures_callback = call_signatures_callback + + def completions(self): + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + string, start_leaf = _extract_string_while_in_string(leaf, self._position) + if string is not None: + completions = list(file_name_completions( + self._evaluator, self._module_context, start_leaf, string, + self._like_name, self._call_signatures_callback, + self._code_lines, self._original_position + )) + if completions: + return completions + + completion_names = self._get_context_completions(leaf) + + completions = filter_names(self._evaluator, completion_names, + self.stack, self._like_name) + + return sorted(completions, key=lambda x: (x.name.startswith('__'), + x.name.startswith('_'), + x.name.lower())) + + def _get_context_completions(self, leaf): + """ + Analyzes the context that a completion is made in and decides what to + return. + + Technically this works by generating a parser stack and analysing the + current stack for possible grammar nodes. + + Possible enhancements: + - global/nonlocal search global + - yield from / raise from <- could be only exceptions/generators + - In args: */**: no completion + - In params (also lambda): no completion before = + """ + + grammar = self._evaluator.grammar + self.stack = stack = None + + try: + self.stack = stack = helpers.get_stack_at_position( + grammar, self._code_lines, leaf, self._position + ) + except helpers.OnErrorLeaf as e: + value = e.error_leaf.value + if value == '.': + # After ErrorLeaf's that are dots, we will not do any + # completions since this probably just confuses the user. + return [] + + # If we don't have a context, just use global completion. + return self._global_completions() + + allowed_transitions = \ + list(stack._allowed_transition_names_and_token_types()) + + if 'if' in allowed_transitions: + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + previous_leaf = leaf.get_previous_leaf() + + indent = self._position[1] + if not (leaf.start_pos <= self._position <= leaf.end_pos): + indent = leaf.start_pos[1] + + if previous_leaf is not None: + stmt = previous_leaf + while True: + stmt = search_ancestor( + stmt, 'if_stmt', 'for_stmt', 'while_stmt', 'try_stmt', + 'error_node', + ) + if stmt is None: + break + + type_ = stmt.type + if type_ == 'error_node': + first = stmt.children[0] + if isinstance(first, Leaf): + type_ = first.value + '_stmt' + # Compare indents + if stmt.start_pos[1] == indent: + if type_ == 'if_stmt': + allowed_transitions += ['elif', 'else'] + elif type_ == 'try_stmt': + allowed_transitions += ['except', 'finally', 'else'] + elif type_ == 'for_stmt': + allowed_transitions.append('else') + + completion_names = [] + current_line = self._code_lines[self._position[0] - 1][:self._position[1]] + if not current_line or current_line[-1] in ' \t.;': + completion_names += self._get_keyword_completion_names(allowed_transitions) + + if any(t in allowed_transitions for t in (PythonTokenTypes.NAME, + PythonTokenTypes.INDENT)): + # This means that we actually have to do type inference. + + nonterminals = [stack_node.nonterminal for stack_node in stack] + + nodes = [] + for stack_node in stack: + if stack_node.dfa.from_rule == 'small_stmt': + nodes = [] + else: + nodes += stack_node.nodes + + if nodes and nodes[-1] in ('as', 'def', 'class'): + # No completions for ``with x as foo`` and ``import x as foo``. + # Also true for defining names as a class or function. + return list(self._get_class_context_completions(is_function=True)) + elif "import_stmt" in nonterminals: + level, names = parse_dotted_names(nodes, "import_from" in nonterminals) + + only_modules = not ("import_from" in nonterminals and 'import' in nodes) + completion_names += self._get_importer_names( + names, + level, + only_modules=only_modules, + ) + elif nonterminals[-1] in ('trailer', 'dotted_name') and nodes[-1] == '.': + dot = self._module_node.get_leaf_for_position(self._position) + completion_names += self._trailer_completions(dot.get_previous_leaf()) + else: + completion_names += self._global_completions() + completion_names += self._get_class_context_completions(is_function=False) + + if 'trailer' in nonterminals: + call_signatures = self._call_signatures_callback() + completion_names += get_call_signature_param_names(call_signatures) + + return completion_names + + def _get_keyword_completion_names(self, allowed_transitions): + for k in allowed_transitions: + if isinstance(k, str) and k.isalpha(): + yield keywords.KeywordName(self._evaluator, k) + + def _global_completions(self): + context = get_user_scope(self._module_context, self._position) + debug.dbg('global completion scope: %s', context) + flow_scope_node = get_flow_scope_node(self._module_node, self._position) + filters = get_global_filters( + self._evaluator, + context, + self._position, + origin_scope=flow_scope_node + ) + completion_names = [] + for filter in filters: + completion_names += filter.values() + return completion_names + + def _trailer_completions(self, previous_leaf): + user_context = get_user_scope(self._module_context, self._position) + evaluation_context = self._evaluator.create_context( + self._module_context, previous_leaf + ) + contexts = evaluate_call_of_leaf(evaluation_context, previous_leaf) + completion_names = [] + debug.dbg('trailer completion contexts: %s', contexts, color='MAGENTA') + for context in contexts: + for filter in context.get_filters( + search_global=False, + origin_scope=user_context.tree_node): + completion_names += filter.values() + + python_contexts = convert_contexts(contexts) + for c in python_contexts: + if c not in contexts: + for filter in c.get_filters( + search_global=False, + origin_scope=user_context.tree_node): + completion_names += filter.values() + return completion_names + + def _get_importer_names(self, names, level=0, only_modules=True): + names = [n.value for n in names] + i = imports.Importer(self._evaluator, names, self._module_context, level) + return i.completion_names(self._evaluator, only_modules=only_modules) + + def _get_class_context_completions(self, is_function=True): + """ + Autocomplete inherited methods when overriding in child class. + """ + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + cls = tree.search_ancestor(leaf, 'classdef') + if isinstance(cls, (tree.Class, tree.Function)): + # Complete the methods that are defined in the super classes. + random_context = self._module_context.create_context( + cls, + node_is_context=True + ) + else: + return + + if cls.start_pos[1] >= leaf.start_pos[1]: + return + + filters = random_context.get_filters(search_global=False, is_instance=True) + # The first dict is the dictionary of class itself. + next(filters) + for filter in filters: + for name in filter.values(): + # TODO we should probably check here for properties + if (name.api_type == 'function') == is_function: + yield name + + +def _extract_string_while_in_string(leaf, position): + if leaf.type == 'string': + match = re.match(r'^\w*(\'{3}|"{3}|\'|")', leaf.value) + quote = match.group(1) + if leaf.line == position[0] and position[1] < leaf.column + match.end(): + return None, None + if leaf.end_pos[0] == position[0] and position[1] > leaf.end_pos[1] - len(quote): + return None, None + return cut_value_at_position(leaf, position)[match.end():], leaf + + leaves = [] + while leaf is not None and leaf.line == position[0]: + if leaf.type == 'error_leaf' and ('"' in leaf.value or "'" in leaf.value): + return ''.join(l.get_code() for l in leaves), leaf + leaves.insert(0, leaf) + leaf = leaf.get_previous_leaf() + return None, None diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/environment.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/environment.py new file mode 100644 index 0000000..e57f548 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/environment.py @@ -0,0 +1,458 @@ +""" +Environments are a way to activate different Python versions or Virtualenvs for +static analysis. The Python binary in that environment is going to be executed. +""" +import os +import sys +import hashlib +import filecmp +from collections import namedtuple + +from jedi._compatibility import highest_pickle_protocol, which +from jedi.cache import memoize_method, time_cache +from jedi.evaluate.compiled.subprocess import CompiledSubprocess, \ + EvaluatorSameProcess, EvaluatorSubprocess + +import parso + +_VersionInfo = namedtuple('VersionInfo', 'major minor micro') + +_SUPPORTED_PYTHONS = ['3.8', '3.7', '3.6', '3.5', '3.4', '2.7'] +_SAFE_PATHS = ['/usr/bin', '/usr/local/bin'] +_CURRENT_VERSION = '%s.%s' % (sys.version_info.major, sys.version_info.minor) + + +class InvalidPythonEnvironment(Exception): + """ + If you see this exception, the Python executable or Virtualenv you have + been trying to use is probably not a correct Python version. + """ + + +class _BaseEnvironment(object): + @memoize_method + def get_grammar(self): + version_string = '%s.%s' % (self.version_info.major, self.version_info.minor) + return parso.load_grammar(version=version_string) + + @property + def _sha256(self): + try: + return self._hash + except AttributeError: + self._hash = _calculate_sha256_for_file(self.executable) + return self._hash + + +def _get_info(): + return ( + sys.executable, + sys.prefix, + sys.version_info[:3], + ) + + +class Environment(_BaseEnvironment): + """ + This class is supposed to be created by internal Jedi architecture. You + should not create it directly. Please use create_environment or the other + functions instead. It is then returned by that function. + """ + _subprocess = None + + def __init__(self, executable): + self._start_executable = executable + # Initialize the environment + self._get_subprocess() + + def _get_subprocess(self): + if self._subprocess is not None and not self._subprocess.is_crashed: + return self._subprocess + + try: + self._subprocess = CompiledSubprocess(self._start_executable) + info = self._subprocess._send(None, _get_info) + except Exception as exc: + raise InvalidPythonEnvironment( + "Could not get version information for %r: %r" % ( + self._start_executable, + exc)) + + # Since it could change and might not be the same(?) as the one given, + # set it here. + self.executable = info[0] + """ + The Python executable, matches ``sys.executable``. + """ + self.path = info[1] + """ + The path to an environment, matches ``sys.prefix``. + """ + self.version_info = _VersionInfo(*info[2]) + """ + Like ``sys.version_info``. A tuple to show the current Environment's + Python version. + """ + + # py2 sends bytes via pickle apparently?! + if self.version_info.major == 2: + self.executable = self.executable.decode() + self.path = self.path.decode() + + # Adjust pickle protocol according to host and client version. + self._subprocess._pickle_protocol = highest_pickle_protocol([ + sys.version_info, self.version_info]) + + return self._subprocess + + def __repr__(self): + version = '.'.join(str(i) for i in self.version_info) + return '<%s: %s in %s>' % (self.__class__.__name__, version, self.path) + + def get_evaluator_subprocess(self, evaluator): + return EvaluatorSubprocess(evaluator, self._get_subprocess()) + + @memoize_method + def get_sys_path(self): + """ + The sys path for this environment. Does not include potential + modifications like ``sys.path.append``. + + :returns: list of str + """ + # It's pretty much impossible to generate the sys path without actually + # executing Python. The sys path (when starting with -S) itself depends + # on how the Python version was compiled (ENV variables). + # If you omit -S when starting Python (normal case), additionally + # site.py gets executed. + return self._get_subprocess().get_sys_path() + + +class _SameEnvironmentMixin(object): + def __init__(self): + self._start_executable = self.executable = sys.executable + self.path = sys.prefix + self.version_info = _VersionInfo(*sys.version_info[:3]) + + +class SameEnvironment(_SameEnvironmentMixin, Environment): + pass + + +class InterpreterEnvironment(_SameEnvironmentMixin, _BaseEnvironment): + def get_evaluator_subprocess(self, evaluator): + return EvaluatorSameProcess(evaluator) + + def get_sys_path(self): + return sys.path + + +def _get_virtual_env_from_var(): + """Get virtualenv environment from VIRTUAL_ENV environment variable. + + It uses `safe=False` with ``create_environment``, because the environment + variable is considered to be safe / controlled by the user solely. + """ + var = os.environ.get('VIRTUAL_ENV') + if var: + # Under macOS in some cases - notably when using Pipenv - the + # sys.prefix of the virtualenv is /path/to/env/bin/.. instead of + # /path/to/env so we need to fully resolve the paths in order to + # compare them. + if os.path.realpath(var) == os.path.realpath(sys.prefix): + return _try_get_same_env() + + try: + return create_environment(var, safe=False) + except InvalidPythonEnvironment: + pass + + +def _calculate_sha256_for_file(path): + sha256 = hashlib.sha256() + with open(path, 'rb') as f: + for block in iter(lambda: f.read(filecmp.BUFSIZE), b''): + sha256.update(block) + return sha256.hexdigest() + + +def get_default_environment(): + """ + Tries to return an active Virtualenv. If there is no VIRTUAL_ENV variable + set it will return the latest Python version installed on the system. This + makes it possible to use as many new Python features as possible when using + autocompletion and other functionality. + + :returns: :class:`Environment` + """ + virtual_env = _get_virtual_env_from_var() + if virtual_env is not None: + return virtual_env + + return _try_get_same_env() + + +def _try_get_same_env(): + env = SameEnvironment() + if not os.path.basename(env.executable).lower().startswith('python'): + # This tries to counter issues with embedding. In some cases (e.g. + # VIM's Python Mac/Windows, sys.executable is /foo/bar/vim. This + # happens, because for Mac a function called `_NSGetExecutablePath` is + # used and for Windows `GetModuleFileNameW`. These are both platform + # specific functions. For all other systems sys.executable should be + # alright. However here we try to generalize: + # + # 1. Check if the executable looks like python (heuristic) + # 2. In case it's not try to find the executable + # 3. In case we don't find it use an interpreter environment. + # + # The last option will always work, but leads to potential crashes of + # Jedi - which is ok, because it happens very rarely and even less, + # because the code below should work for most cases. + if os.name == 'nt': + # The first case would be a virtualenv and the second a normal + # Python installation. + checks = (r'Scripts\python.exe', 'python.exe') + else: + # For unix it looks like Python is always in a bin folder. + checks = ( + 'bin/python%s.%s' % (sys.version_info[0], sys.version[1]), + 'bin/python%s' % (sys.version_info[0]), + 'bin/python', + ) + for check in checks: + guess = os.path.join(sys.exec_prefix, check) + if os.path.isfile(guess): + # Bingo - We think we have our Python. + return Environment(guess) + # It looks like there is no reasonable Python to be found. + return InterpreterEnvironment() + # If no virtualenv is found, use the environment we're already + # using. + return env + + +def get_cached_default_environment(): + var = os.environ.get('VIRTUAL_ENV') + environment = _get_cached_default_environment() + + # Under macOS in some cases - notably when using Pipenv - the + # sys.prefix of the virtualenv is /path/to/env/bin/.. instead of + # /path/to/env so we need to fully resolve the paths in order to + # compare them. + if var and os.path.realpath(var) != os.path.realpath(environment.path): + _get_cached_default_environment.clear_cache() + return _get_cached_default_environment() + return environment + + +@time_cache(seconds=10 * 60) # 10 Minutes +def _get_cached_default_environment(): + return get_default_environment() + + +def find_virtualenvs(paths=None, **kwargs): + """ + :param paths: A list of paths in your file system to be scanned for + Virtualenvs. It will search in these paths and potentially execute the + Python binaries. Also the VIRTUAL_ENV variable will be checked if it + contains a valid Virtualenv. + :param safe: Default True. In case this is False, it will allow this + function to execute potential `python` environments. An attacker might + be able to drop an executable in a path this function is searching by + default. If the executable has not been installed by root, it will not + be executed. + + :yields: :class:`Environment` + """ + def py27_comp(paths=None, safe=True): + if paths is None: + paths = [] + + _used_paths = set() + + # Using this variable should be safe, because attackers might be able + # to drop files (via git) but not environment variables. + virtual_env = _get_virtual_env_from_var() + if virtual_env is not None: + yield virtual_env + _used_paths.add(virtual_env.path) + + for directory in paths: + if not os.path.isdir(directory): + continue + + directory = os.path.abspath(directory) + for path in os.listdir(directory): + path = os.path.join(directory, path) + if path in _used_paths: + # A path shouldn't be evaluated twice. + continue + _used_paths.add(path) + + try: + executable = _get_executable_path(path, safe=safe) + yield Environment(executable) + except InvalidPythonEnvironment: + pass + + return py27_comp(paths, **kwargs) + + +def find_system_environments(): + """ + Ignores virtualenvs and returns the Python versions that were installed on + your system. This might return nothing, if you're running Python e.g. from + a portable version. + + The environments are sorted from latest to oldest Python version. + + :yields: :class:`Environment` + """ + for version_string in _SUPPORTED_PYTHONS: + try: + yield get_system_environment(version_string) + except InvalidPythonEnvironment: + pass + + +# TODO: this function should probably return a list of environments since +# multiple Python installations can be found on a system for the same version. +def get_system_environment(version): + """ + Return the first Python environment found for a string of the form 'X.Y' + where X and Y are the major and minor versions of Python. + + :raises: :exc:`.InvalidPythonEnvironment` + :returns: :class:`Environment` + """ + exe = which('python' + version) + if exe: + if exe == sys.executable: + return SameEnvironment() + return Environment(exe) + + if os.name == 'nt': + for exe in _get_executables_from_windows_registry(version): + try: + return Environment(exe) + except InvalidPythonEnvironment: + pass + raise InvalidPythonEnvironment("Cannot find executable python%s." % version) + + +def create_environment(path, safe=True): + """ + Make it possible to manually create an Environment object by specifying a + Virtualenv path or an executable path. + + :raises: :exc:`.InvalidPythonEnvironment` + :returns: :class:`Environment` + """ + if os.path.isfile(path): + _assert_safe(path, safe) + return Environment(path) + return Environment(_get_executable_path(path, safe=safe)) + + +def _get_executable_path(path, safe=True): + """ + Returns None if it's not actually a virtual env. + """ + + if os.name == 'nt': + python = os.path.join(path, 'Scripts', 'python.exe') + else: + python = os.path.join(path, 'bin', 'python') + if not os.path.exists(python): + raise InvalidPythonEnvironment("%s seems to be missing." % python) + + _assert_safe(python, safe) + return python + + +def _get_executables_from_windows_registry(version): + # The winreg module is named _winreg on Python 2. + try: + import winreg + except ImportError: + import _winreg as winreg + + # TODO: support Python Anaconda. + sub_keys = [ + r'SOFTWARE\Python\PythonCore\{version}\InstallPath', + r'SOFTWARE\Wow6432Node\Python\PythonCore\{version}\InstallPath', + r'SOFTWARE\Python\PythonCore\{version}-32\InstallPath', + r'SOFTWARE\Wow6432Node\Python\PythonCore\{version}-32\InstallPath' + ] + for root_key in [winreg.HKEY_CURRENT_USER, winreg.HKEY_LOCAL_MACHINE]: + for sub_key in sub_keys: + sub_key = sub_key.format(version=version) + try: + with winreg.OpenKey(root_key, sub_key) as key: + prefix = winreg.QueryValueEx(key, '')[0] + exe = os.path.join(prefix, 'python.exe') + if os.path.isfile(exe): + yield exe + except WindowsError: + pass + + +def _assert_safe(executable_path, safe): + if safe and not _is_safe(executable_path): + raise InvalidPythonEnvironment( + "The python binary is potentially unsafe.") + + +def _is_safe(executable_path): + # Resolve sym links. A venv typically is a symlink to a known Python + # binary. Only virtualenvs copy symlinks around. + real_path = os.path.realpath(executable_path) + + if _is_unix_safe_simple(real_path): + return True + + # Just check the list of known Python versions. If it's not in there, + # it's likely an attacker or some Python that was not properly + # installed in the system. + for environment in find_system_environments(): + if environment.executable == real_path: + return True + + # If the versions don't match, just compare the binary files. If we + # don't do that, only venvs will be working and not virtualenvs. + # venvs are symlinks while virtualenvs are actual copies of the + # Python files. + # This still means that if the system Python is updated and the + # virtualenv's Python is not (which is probably never going to get + # upgraded), it will not work with Jedi. IMO that's fine, because + # people should just be using venv. ~ dave + if environment._sha256 == _calculate_sha256_for_file(real_path): + return True + return False + + +def _is_unix_safe_simple(real_path): + if _is_unix_admin(): + # In case we are root, just be conservative and + # only execute known paths. + return any(real_path.startswith(p) for p in _SAFE_PATHS) + + uid = os.stat(real_path).st_uid + # The interpreter needs to be owned by root. This means that it wasn't + # written by a user and therefore attacking Jedi is not as simple. + # The attack could look like the following: + # 1. A user clones a repository. + # 2. The repository has an innocent looking folder called foobar. jedi + # searches for the folder and executes foobar/bin/python --version if + # there's also a foobar/bin/activate. + # 3. The bin/python is obviously not a python script but a bash script or + # whatever the attacker wants. + return uid == 0 + + +def _is_unix_admin(): + try: + return os.getuid() == 0 + except AttributeError: + return False # Windows diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/exceptions.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/exceptions.py new file mode 100644 index 0000000..99cebdb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/exceptions.py @@ -0,0 +1,10 @@ +class _JediError(Exception): + pass + + +class InternalError(_JediError): + pass + + +class WrongVersion(_JediError): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/file_name.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/file_name.py new file mode 100644 index 0000000..2a2c4e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/file_name.py @@ -0,0 +1,161 @@ +import os + +from jedi._compatibility import FileNotFoundError, force_unicode +from jedi.evaluate.names import AbstractArbitraryName +from jedi.api import classes +from jedi.evaluate.helpers import get_str_or_none +from jedi.parser_utils import get_string_quote + + +def file_name_completions(evaluator, module_context, start_leaf, string, + like_name, call_signatures_callback, code_lines, position): + # First we want to find out what can actually be changed as a name. + like_name_length = len(os.path.basename(string) + like_name) + + addition = _get_string_additions(module_context, start_leaf) + if addition is None: + return + string = addition + string + + # Here we use basename again, because if strings are added like + # `'foo' + 'bar`, it should complete to `foobar/`. + must_start_with = os.path.basename(string) + like_name + string = os.path.dirname(string) + + sigs = call_signatures_callback() + is_in_os_path_join = sigs and all(s.full_name == 'os.path.join' for s in sigs) + if is_in_os_path_join: + to_be_added = _add_os_path_join(module_context, start_leaf, sigs[0].bracket_start) + if to_be_added is None: + is_in_os_path_join = False + else: + string = to_be_added + string + base_path = os.path.join(evaluator.project._path, string) + try: + listed = os.listdir(base_path) + except FileNotFoundError: + return + for name in listed: + if name.startswith(must_start_with): + path_for_name = os.path.join(base_path, name) + if is_in_os_path_join or not os.path.isdir(path_for_name): + if start_leaf.type == 'string': + quote = get_string_quote(start_leaf) + else: + assert start_leaf.type == 'error_leaf' + quote = start_leaf.value + potential_other_quote = \ + code_lines[position[0] - 1][position[1]:position[1] + len(quote)] + # Add a quote if it's not already there. + if quote != potential_other_quote: + name += quote + else: + name += os.path.sep + + yield classes.Completion( + evaluator, + FileName(evaluator, name[len(must_start_with) - like_name_length:]), + stack=None, + like_name_length=like_name_length + ) + + +def _get_string_additions(module_context, start_leaf): + def iterate_nodes(): + node = addition.parent + was_addition = True + for child_node in reversed(node.children[:node.children.index(addition)]): + if was_addition: + was_addition = False + yield child_node + continue + + if child_node != '+': + break + was_addition = True + + addition = start_leaf.get_previous_leaf() + if addition != '+': + return '' + context = module_context.create_context(start_leaf) + return _add_strings(context, reversed(list(iterate_nodes()))) + + +def _add_strings(context, nodes, add_slash=False): + string = '' + first = True + for child_node in nodes: + contexts = context.eval_node(child_node) + if len(contexts) != 1: + return None + c, = contexts + s = get_str_or_none(c) + if s is None: + return None + if not first and add_slash: + string += os.path.sep + string += force_unicode(s) + first = False + return string + + +class FileName(AbstractArbitraryName): + api_type = u'path' + is_context_name = False + + +def _add_os_path_join(module_context, start_leaf, bracket_start): + def check(maybe_bracket, nodes): + if maybe_bracket.start_pos != bracket_start: + return None + + if not nodes: + return '' + context = module_context.create_context(nodes[0]) + return _add_strings(context, nodes, add_slash=True) or '' + + if start_leaf.type == 'error_leaf': + # Unfinished string literal, like `join('` + context_node = start_leaf.parent + index = context_node.children.index(start_leaf) + if index > 0: + error_node = context_node.children[index - 1] + if error_node.type == 'error_node' and len(error_node.children) >= 2: + index = -2 + if error_node.children[-1].type == 'arglist': + arglist_nodes = error_node.children[-1].children + index -= 1 + else: + arglist_nodes = [] + + return check(error_node.children[index + 1], arglist_nodes[::2]) + return None + + # Maybe an arglist or some weird error case. Therefore checked below. + searched_node_child = start_leaf + while searched_node_child.parent is not None \ + and searched_node_child.parent.type not in ('arglist', 'trailer', 'error_node'): + searched_node_child = searched_node_child.parent + + if searched_node_child.get_first_leaf() is not start_leaf: + return None + searched_node = searched_node_child.parent + if searched_node is None: + return None + + index = searched_node.children.index(searched_node_child) + arglist_nodes = searched_node.children[:index] + if searched_node.type == 'arglist': + trailer = searched_node.parent + if trailer.type == 'error_node': + trailer_index = trailer.children.index(searched_node) + assert trailer_index >= 2 + assert trailer.children[trailer_index - 1] == '(' + return check(trailer.children[trailer_index - 1], arglist_nodes[::2]) + elif trailer.type == 'trailer': + return check(trailer.children[0], arglist_nodes[::2]) + elif searched_node.type == 'trailer': + return check(searched_node.children[0], []) + elif searched_node.type == 'error_node': + # Stuff like `join(""` + return check(arglist_nodes[-1], []) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/helpers.py new file mode 100644 index 0000000..6fafb11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/helpers.py @@ -0,0 +1,397 @@ +""" +Helpers for the API +""" +import re +from collections import namedtuple +from textwrap import dedent + +from parso.python.parser import Parser +from parso.python import tree + +from jedi._compatibility import u, Parameter +from jedi.evaluate.base_context import NO_CONTEXTS +from jedi.evaluate.syntax_tree import eval_atom +from jedi.evaluate.helpers import evaluate_call_of_leaf +from jedi.evaluate.compiled import get_string_context_set +from jedi.cache import call_signature_time_cache + + +CompletionParts = namedtuple('CompletionParts', ['path', 'has_dot', 'name']) + + +def sorted_definitions(defs): + # Note: `or ''` below is required because `module_path` could be + return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0, x.name)) + + +def get_on_completion_name(module_node, lines, position): + leaf = module_node.get_leaf_for_position(position) + if leaf is None or leaf.type in ('string', 'error_leaf'): + # Completions inside strings are a bit special, we need to parse the + # string. The same is true for comments and error_leafs. + line = lines[position[0] - 1] + # The first step of completions is to get the name + return re.search(r'(?!\d)\w+$|$', line[:position[1]]).group(0) + elif leaf.type not in ('name', 'keyword'): + return '' + + return leaf.value[:position[1] - leaf.start_pos[1]] + + +def _get_code(code_lines, start_pos, end_pos): + # Get relevant lines. + lines = code_lines[start_pos[0] - 1:end_pos[0]] + # Remove the parts at the end of the line. + lines[-1] = lines[-1][:end_pos[1]] + # Remove first line indentation. + lines[0] = lines[0][start_pos[1]:] + return ''.join(lines) + + +class OnErrorLeaf(Exception): + @property + def error_leaf(self): + return self.args[0] + + +def _get_code_for_stack(code_lines, leaf, position): + # It might happen that we're on whitespace or on a comment. This means + # that we would not get the right leaf. + if leaf.start_pos >= position: + # If we're not on a comment simply get the previous leaf and proceed. + leaf = leaf.get_previous_leaf() + if leaf is None: + return u('') # At the beginning of the file. + + is_after_newline = leaf.type == 'newline' + while leaf.type == 'newline': + leaf = leaf.get_previous_leaf() + if leaf is None: + return u('') + + if leaf.type == 'error_leaf' or leaf.type == 'string': + if leaf.start_pos[0] < position[0]: + # On a different line, we just begin anew. + return u('') + + # Error leafs cannot be parsed, completion in strings is also + # impossible. + raise OnErrorLeaf(leaf) + else: + user_stmt = leaf + while True: + if user_stmt.parent.type in ('file_input', 'suite', 'simple_stmt'): + break + user_stmt = user_stmt.parent + + if is_after_newline: + if user_stmt.start_pos[1] > position[1]: + # This means that it's actually a dedent and that means that we + # start without context (part of a suite). + return u('') + + # This is basically getting the relevant lines. + return _get_code(code_lines, user_stmt.get_start_pos_of_prefix(), position) + + +def get_stack_at_position(grammar, code_lines, leaf, pos): + """ + Returns the possible node names (e.g. import_from, xor_test or yield_stmt). + """ + class EndMarkerReached(Exception): + pass + + def tokenize_without_endmarker(code): + # TODO This is for now not an official parso API that exists purely + # for Jedi. + tokens = grammar._tokenize(code) + for token in tokens: + if token.string == safeword: + raise EndMarkerReached() + elif token.prefix.endswith(safeword): + # This happens with comments. + raise EndMarkerReached() + elif token.string.endswith(safeword): + yield token # Probably an f-string literal that was not finished. + raise EndMarkerReached() + else: + yield token + + # The code might be indedented, just remove it. + code = dedent(_get_code_for_stack(code_lines, leaf, pos)) + # We use a word to tell Jedi when we have reached the start of the + # completion. + # Use Z as a prefix because it's not part of a number suffix. + safeword = 'ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI' + code = code + ' ' + safeword + + p = Parser(grammar._pgen_grammar, error_recovery=True) + try: + p.parse(tokens=tokenize_without_endmarker(code)) + except EndMarkerReached: + return p.stack + raise SystemError( + "This really shouldn't happen. There's a bug in Jedi:\n%s" + % list(tokenize_without_endmarker(code)) + ) + + +def evaluate_goto_definition(evaluator, context, leaf): + if leaf.type == 'name': + # In case of a name we can just use goto_definition which does all the + # magic itself. + return evaluator.goto_definitions(context, leaf) + + parent = leaf.parent + definitions = NO_CONTEXTS + if parent.type == 'atom': + # e.g. `(a + b)` + definitions = context.eval_node(leaf.parent) + elif parent.type == 'trailer': + # e.g. `a()` + definitions = evaluate_call_of_leaf(context, leaf) + elif isinstance(leaf, tree.Literal): + # e.g. `"foo"` or `1.0` + return eval_atom(context, leaf) + elif leaf.type in ('fstring_string', 'fstring_start', 'fstring_end'): + return get_string_context_set(evaluator) + return definitions + + +class CallDetails(object): + def __init__(self, bracket_leaf, children, position): + ['bracket_leaf', 'call_index', 'keyword_name_str'] + self.bracket_leaf = bracket_leaf + self._children = children + self._position = position + + @property + def index(self): + return _get_index_and_key(self._children, self._position)[0] + + @property + def keyword_name_str(self): + return _get_index_and_key(self._children, self._position)[1] + + def calculate_index(self, param_names): + positional_count = 0 + used_names = set() + star_count = -1 + args = list(_iter_arguments(self._children, self._position)) + if not args: + if param_names: + return 0 + else: + return None + + is_kwarg = False + for i, (star_count, key_start, had_equal) in enumerate(args): + is_kwarg |= had_equal | (star_count == 2) + if star_count: + pass # For now do nothing, we don't know what's in there here. + else: + if i + 1 != len(args): # Not last + if had_equal: + used_names.add(key_start) + else: + positional_count += 1 + + for i, param_name in enumerate(param_names): + kind = param_name.get_kind() + + if not is_kwarg: + if kind == Parameter.VAR_POSITIONAL: + return i + if kind in (Parameter.POSITIONAL_OR_KEYWORD, Parameter.POSITIONAL_ONLY): + if i == positional_count: + return i + + if key_start is not None and not star_count == 1 or star_count == 2: + if param_name.string_name not in used_names \ + and (kind == Parameter.KEYWORD_ONLY + or kind == Parameter.POSITIONAL_OR_KEYWORD + and positional_count <= i): + if star_count: + return i + if had_equal: + if param_name.string_name == key_start: + return i + else: + if param_name.string_name.startswith(key_start): + return i + + if kind == Parameter.VAR_KEYWORD: + return i + return None + + +def _iter_arguments(nodes, position): + def remove_after_pos(name): + if name.type != 'name': + return None + return name.value[:position[1] - name.start_pos[1]] + + # Returns Generator[Tuple[star_count, Optional[key_start: str], had_equal]] + nodes_before = [c for c in nodes if c.start_pos < position] + if nodes_before[-1].type == 'arglist': + for x in _iter_arguments(nodes_before[-1].children, position): + yield x # Python 2 :( + return + + previous_node_yielded = False + stars_seen = 0 + for i, node in enumerate(nodes_before): + if node.type == 'argument': + previous_node_yielded = True + first = node.children[0] + second = node.children[1] + if second == '=': + if second.start_pos < position: + yield 0, first.value, True + else: + yield 0, remove_after_pos(first), False + elif first in ('*', '**'): + yield len(first.value), remove_after_pos(second), False + else: + # Must be a Comprehension + first_leaf = node.get_first_leaf() + if first_leaf.type == 'name' and first_leaf.start_pos >= position: + yield 0, remove_after_pos(first_leaf), False + else: + yield 0, None, False + stars_seen = 0 + elif node.type in ('testlist', 'testlist_star_expr'): # testlist is Python 2 + for n in node.children[::2]: + if n.type == 'star_expr': + stars_seen = 1 + n = n.children[1] + yield stars_seen, remove_after_pos(n), False + stars_seen = 0 + # The count of children is even if there's a comma at the end. + previous_node_yielded = bool(len(node.children) % 2) + elif isinstance(node, tree.PythonLeaf) and node.value == ',': + if not previous_node_yielded: + yield stars_seen, '', False + stars_seen = 0 + previous_node_yielded = False + elif isinstance(node, tree.PythonLeaf) and node.value in ('*', '**'): + stars_seen = len(node.value) + elif node == '=' and nodes_before[-1]: + previous_node_yielded = True + before = nodes_before[i - 1] + if before.type == 'name': + yield 0, before.value, True + else: + yield 0, None, False + # Just ignore the star that is probably a syntax error. + stars_seen = 0 + + if not previous_node_yielded: + if nodes_before[-1].type == 'name': + yield stars_seen, remove_after_pos(nodes_before[-1]), False + else: + yield stars_seen, '', False + + +def _get_index_and_key(nodes, position): + """ + Returns the amount of commas and the keyword argument string. + """ + nodes_before = [c for c in nodes if c.start_pos < position] + if nodes_before[-1].type == 'arglist': + return _get_index_and_key(nodes_before[-1].children, position) + + key_str = None + + last = nodes_before[-1] + if last.type == 'argument' and last.children[1] == '=' \ + and last.children[1].end_pos <= position: + # Checked if the argument + key_str = last.children[0].value + elif last == '=': + key_str = nodes_before[-2].value + + return nodes_before.count(','), key_str + + +def _get_call_signature_details_from_error_node(node, additional_children, position): + for index, element in reversed(list(enumerate(node.children))): + # `index > 0` means that it's a trailer and not an atom. + if element == '(' and element.end_pos <= position and index > 0: + # It's an error node, we don't want to match too much, just + # until the parentheses is enough. + children = node.children[index:] + name = element.get_previous_leaf() + if name is None: + continue + if name.type == 'name' or name.parent.type in ('trailer', 'atom'): + return CallDetails(element, children + additional_children, position) + + +def get_call_signature_details(module, position): + leaf = module.get_leaf_for_position(position, include_prefixes=True) + if leaf.start_pos >= position: + # Whitespace / comments after the leaf count towards the previous leaf. + leaf = leaf.get_previous_leaf() + if leaf is None: + return None + + if leaf == ')': + # TODO is this ok? + if leaf.end_pos == position: + leaf = leaf.get_next_leaf() + + # Now that we know where we are in the syntax tree, we start to look at + # parents for possible function definitions. + node = leaf.parent + while node is not None: + if node.type in ('funcdef', 'classdef'): + # Don't show call signatures if there's stuff before it that just + # makes it feel strange to have a call signature. + return None + + additional_children = [] + for n in reversed(node.children): + if n.start_pos < position: + if n.type == 'error_node': + result = _get_call_signature_details_from_error_node( + n, additional_children, position + ) + if result is not None: + return result + + additional_children[0:0] = n.children + continue + additional_children.insert(0, n) + + if node.type == 'trailer' and node.children[0] == '(': + leaf = node.get_previous_leaf() + if leaf is None: + return None + return CallDetails(node.children[0], node.children, position) + + node = node.parent + + return None + + +@call_signature_time_cache("call_signatures_validity") +def cache_call_signatures(evaluator, context, bracket_leaf, code_lines, user_pos): + """This function calculates the cache key.""" + line_index = user_pos[0] - 1 + + before_cursor = code_lines[line_index][:user_pos[1]] + other_lines = code_lines[bracket_leaf.start_pos[0]:line_index] + whole = ''.join(other_lines + [before_cursor]) + before_bracket = re.match(r'.*\(', whole, re.DOTALL) + + module_path = context.get_root_context().py__file__() + if module_path is None: + yield None # Don't cache! + else: + yield (module_path, before_bracket, bracket_leaf.start_pos) + yield evaluate_goto_definition( + evaluator, + context, + bracket_leaf.get_previous_leaf(), + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/interpreter.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/interpreter.py new file mode 100644 index 0000000..515e007 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/interpreter.py @@ -0,0 +1,47 @@ +""" +TODO Some parts of this module are still not well documented. +""" + +from jedi.evaluate.context import ModuleContext +from jedi.evaluate import compiled +from jedi.evaluate.compiled import mixed +from jedi.evaluate.compiled.access import create_access_path +from jedi.evaluate.base_context import ContextWrapper + + +def _create(evaluator, obj): + return compiled.create_from_access_path( + evaluator, create_access_path(evaluator, obj) + ) + + +class NamespaceObject(object): + def __init__(self, dct): + self.__dict__ = dct + + +class MixedModuleContext(ContextWrapper): + type = 'mixed_module' + + def __init__(self, evaluator, tree_module, namespaces, file_io, code_lines): + module_context = ModuleContext( + evaluator, tree_module, + file_io=file_io, + string_names=('__main__',), + code_lines=code_lines + ) + super(MixedModuleContext, self).__init__(module_context) + self._namespace_objects = [NamespaceObject(n) for n in namespaces] + + def get_filters(self, *args, **kwargs): + for filter in self._wrapped_context.get_filters(*args, **kwargs): + yield filter + + for namespace_obj in self._namespace_objects: + compiled_object = _create(self.evaluator, namespace_obj) + mixed_object = mixed.MixedObject( + compiled_object=compiled_object, + tree_context=self._wrapped_context + ) + for filter in mixed_object.get_filters(*args, **kwargs): + yield filter diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/keywords.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/keywords.py new file mode 100644 index 0000000..cc301b8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/keywords.py @@ -0,0 +1,85 @@ +import pydoc + +from jedi.evaluate.utils import ignored +from jedi.evaluate.names import AbstractArbitraryName + +try: + from pydoc_data import topics as pydoc_topics +except ImportError: + # Python 2 + try: + import pydoc_topics + except ImportError: + # This is for Python 3 embeddable version, which dont have + # pydoc_data module in its file python3x.zip. + pydoc_topics = None + + +def get_operator(evaluator, string, pos): + return Keyword(evaluator, string, pos) + + +class KeywordName(AbstractArbitraryName): + api_type = u'keyword' + + def infer(self): + return [Keyword(self.evaluator, self.string_name, (0, 0))] + + +class Keyword(object): + api_type = u'keyword' + + def __init__(self, evaluator, name, pos): + self.name = KeywordName(evaluator, name) + self.start_pos = pos + self.parent = evaluator.builtins_module + + @property + def names(self): + """ For a `parsing.Name` like comparision """ + return [self.name] + + def py__doc__(self): + return imitate_pydoc(self.name.string_name) + + def get_signatures(self): + # TODO this makes no sense, I think Keyword should somehow merge with + # Context to make it easier for the api/classes.py to deal with all + # of it. + return [] + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self.name) + + +def imitate_pydoc(string): + """ + It's not possible to get the pydoc's without starting the annoying pager + stuff. + """ + if pydoc_topics is None: + return '' + + # str needed because of possible unicode stuff in py2k (pydoc doesn't work + # with unicode strings) + string = str(string) + h = pydoc.help + with ignored(KeyError): + # try to access symbols + string = h.symbols[string] + string, _, related = string.partition(' ') + + get_target = lambda s: h.topics.get(s, h.keywords.get(s)) + while isinstance(string, str): + string = get_target(string) + + try: + # is a tuple now + label, related = string + except TypeError: + return '' + + try: + return pydoc_topics.topics[label].strip() if pydoc_topics else '' + except KeyError: + return '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/project.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/project.py new file mode 100644 index 0000000..63ee2b8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/project.py @@ -0,0 +1,197 @@ +import os +import json + +from jedi._compatibility import FileNotFoundError, PermissionError, IsADirectoryError +from jedi.api.environment import SameEnvironment, \ + get_cached_default_environment +from jedi.api.exceptions import WrongVersion +from jedi._compatibility import force_unicode +from jedi.evaluate.sys_path import discover_buildout_paths +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.common.utils import traverse_parents + +_CONFIG_FOLDER = '.jedi' +_CONTAINS_POTENTIAL_PROJECT = 'setup.py', '.git', '.hg', 'requirements.txt', 'MANIFEST.in' + +_SERIALIZER_VERSION = 1 + + +def _remove_duplicates_from_path(path): + used = set() + for p in path: + if p in used: + continue + used.add(p) + yield p + + +def _force_unicode_list(lst): + return list(map(force_unicode, lst)) + + +class Project(object): + # TODO serialize environment + _serializer_ignore_attributes = ('_environment',) + _environment = None + + @staticmethod + def _get_json_path(base_path): + return os.path.join(base_path, _CONFIG_FOLDER, 'project.json') + + @classmethod + def load(cls, path): + """ + :param path: The path of the directory you want to use as a project. + """ + with open(cls._get_json_path(path)) as f: + version, data = json.load(f) + + if version == 1: + self = cls.__new__() + self.__dict__.update(data) + return self + else: + raise WrongVersion( + "The Jedi version of this project seems newer than what we can handle." + ) + + def __init__(self, path, **kwargs): + """ + :param path: The base path for this project. + :param sys_path: list of str. You can override the sys path if you + want. By default the ``sys.path.`` is generated from the + environment (virtualenvs, etc). + :param smart_sys_path: If this is enabled (default), adds paths from + local directories. Otherwise you will have to rely on your packages + being properly configured on the ``sys.path``. + """ + def py2_comp(path, environment=None, sys_path=None, + smart_sys_path=True, _django=False): + self._path = os.path.abspath(path) + if isinstance(environment, SameEnvironment): + self._environment = environment + + self._sys_path = sys_path + self._smart_sys_path = smart_sys_path + self._django = _django + + py2_comp(path, **kwargs) + + @evaluator_as_method_param_cache() + def _get_base_sys_path(self, evaluator, environment=None): + if self._sys_path is not None: + return self._sys_path + + # The sys path has not been set explicitly. + if environment is None: + environment = self.get_environment() + + sys_path = list(environment.get_sys_path()) + try: + sys_path.remove('') + except ValueError: + pass + return sys_path + + @evaluator_as_method_param_cache() + def _get_sys_path(self, evaluator, environment=None, add_parent_paths=True): + """ + Keep this method private for all users of jedi. However internally this + one is used like a public method. + """ + suffixed = [] + prefixed = [] + + sys_path = list(self._get_base_sys_path(evaluator, environment)) + if self._smart_sys_path: + prefixed.append(self._path) + + if evaluator.script_path is not None: + suffixed += discover_buildout_paths(evaluator, evaluator.script_path) + + if add_parent_paths: + traversed = list(traverse_parents(evaluator.script_path)) + + # AFAIK some libraries have imports like `foo.foo.bar`, which + # leads to the conclusion to by default prefer longer paths + # rather than shorter ones by default. + suffixed += reversed(traversed) + + if self._django: + prefixed.append(self._path) + + path = prefixed + sys_path + suffixed + return list(_force_unicode_list(_remove_duplicates_from_path(path))) + + def save(self): + data = dict(self.__dict__) + for attribute in self._serializer_ignore_attributes: + data.pop(attribute, None) + + with open(self._get_json_path(self._path), 'wb') as f: + return json.dump((_SERIALIZER_VERSION, data), f) + + def get_environment(self): + if self._environment is None: + return get_cached_default_environment() + + return self._environment + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._path) + + +def _is_potential_project(path): + for name in _CONTAINS_POTENTIAL_PROJECT: + if os.path.exists(os.path.join(path, name)): + return True + return False + + +def _is_django_path(directory): + """ Detects the path of the very well known Django library (if used) """ + try: + with open(os.path.join(directory, 'manage.py'), 'rb') as f: + return b"DJANGO_SETTINGS_MODULE" in f.read() + except (FileNotFoundError, IsADirectoryError, PermissionError): + return False + + return False + + +def get_default_project(path=None): + if path is None: + path = os.getcwd() + + check = os.path.realpath(path) + probable_path = None + first_no_init_file = None + for dir in traverse_parents(check, include_current=True): + try: + return Project.load(dir) + except (FileNotFoundError, IsADirectoryError, PermissionError): + pass + + if first_no_init_file is None: + if os.path.exists(os.path.join(dir, '__init__.py')): + # In the case that a __init__.py exists, it's in 99% just a + # Python package and the project sits at least one level above. + continue + else: + first_no_init_file = dir + + if _is_django_path(dir): + return Project(dir, _django=True) + + if probable_path is None and _is_potential_project(dir): + probable_path = dir + + if probable_path is not None: + # TODO search for setup.py etc + return Project(probable_path) + + if first_no_init_file is not None: + return Project(first_no_init_file) + + curdir = path if os.path.isdir(path) else os.path.dirname(path) + return Project(curdir) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/replstartup.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/replstartup.py new file mode 100644 index 0000000..3ac8470 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/api/replstartup.py @@ -0,0 +1,29 @@ +""" +To use Jedi completion in Python interpreter, add the following in your shell +setup (e.g., ``.bashrc``). This works only on Linux/Mac, because readline is +not available on Windows. If you still want Jedi autocompletion in your REPL, +just use IPython instead:: + + export PYTHONSTARTUP="$(python -m jedi repl)" + +Then you will be able to use Jedi completer in your Python interpreter:: + + $ python + Python 2.7.2+ (default, Jul 20 2012, 22:15:08) + [GCC 4.6.1] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import os + >>> os.path.join('a', 'b').split().in # doctest: +SKIP + ..dex ..sert + +""" +import jedi.utils +from jedi import __version__ as __jedi_version__ + +print('REPL completion using Jedi %s' % __jedi_version__) +jedi.utils.setup_readline() + +del jedi + +# Note: try not to do many things here, as it will contaminate global +# namespace of the interpreter. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/cache.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/cache.py new file mode 100644 index 0000000..93e2bd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/cache.py @@ -0,0 +1,146 @@ +""" +This caching is very important for speed and memory optimizations. There's +nothing really spectacular, just some decorators. The following cache types are +available: + +- ``time_cache`` can be used to cache something for just a limited time span, + which can be useful if there's user interaction and the user cannot react + faster than a certain time. + +This module is one of the reasons why |jedi| is not thread-safe. As you can see +there are global variables, which are holding the cache information. Some of +these variables are being cleaned after every API usage. +""" +import time +from functools import wraps + +from jedi import settings +from parso.cache import parser_cache + +_time_caches = {} + + +def underscore_memoization(func): + """ + Decorator for methods:: + + class A(object): + def x(self): + if self._x: + self._x = 10 + return self._x + + Becomes:: + + class A(object): + @underscore_memoization + def x(self): + return 10 + + A now has an attribute ``_x`` written by this decorator. + """ + name = '_' + func.__name__ + + def wrapper(self): + try: + return getattr(self, name) + except AttributeError: + result = func(self) + setattr(self, name, result) + return result + + return wrapper + + +def clear_time_caches(delete_all=False): + """ Jedi caches many things, that should be completed after each completion + finishes. + + :param delete_all: Deletes also the cache that is normally not deleted, + like parser cache, which is important for faster parsing. + """ + global _time_caches + + if delete_all: + for cache in _time_caches.values(): + cache.clear() + parser_cache.clear() + else: + # normally just kill the expired entries, not all + for tc in _time_caches.values(): + # check time_cache for expired entries + for key, (t, value) in list(tc.items()): + if t < time.time(): + # delete expired entries + del tc[key] + + +def call_signature_time_cache(time_add_setting): + """ + This decorator works as follows: Call it with a setting and after that + use the function with a callable that returns the key. + But: This function is only called if the key is not available. After a + certain amount of time (`time_add_setting`) the cache is invalid. + + If the given key is None, the function will not be cached. + """ + def _temp(key_func): + dct = {} + _time_caches[time_add_setting] = dct + + def wrapper(*args, **kwargs): + generator = key_func(*args, **kwargs) + key = next(generator) + try: + expiry, value = dct[key] + if expiry > time.time(): + return value + except KeyError: + pass + + value = next(generator) + time_add = getattr(settings, time_add_setting) + if key is not None: + dct[key] = time.time() + time_add, value + return value + return wrapper + return _temp + + +def time_cache(seconds): + def decorator(func): + cache = {} + + @wraps(func) + def wrapper(*args, **kwargs): + key = (args, frozenset(kwargs.items())) + try: + created, result = cache[key] + if time.time() < created + seconds: + return result + except KeyError: + pass + result = func(*args, **kwargs) + cache[key] = time.time(), result + return result + + wrapper.clear_cache = lambda: cache.clear() + return wrapper + + return decorator + + +def memoize_method(method): + """A normal memoize function.""" + @wraps(method) + def wrapper(self, *args, **kwargs): + cache_dict = self.__dict__.setdefault('_memoize_method_dct', {}) + dct = cache_dict.setdefault(method, {}) + key = (args, frozenset(kwargs.items())) + try: + return dct[key] + except KeyError: + result = method(self, *args, **kwargs) + dct[key] = result + return result + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/__init__.py new file mode 100644 index 0000000..702a5e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/__init__.py @@ -0,0 +1 @@ +from jedi.common.context import BaseContextSet, BaseContext diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/context.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/context.py new file mode 100644 index 0000000..92a5fe0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/context.py @@ -0,0 +1,73 @@ +class BaseContext(object): + def __init__(self, evaluator, parent_context=None): + self.evaluator = evaluator + self.parent_context = parent_context + + def get_root_context(self): + context = self + while True: + if context.parent_context is None: + return context + context = context.parent_context + + +class BaseContextSet(object): + def __init__(self, iterable): + self._set = frozenset(iterable) + for context in iterable: + assert not isinstance(context, BaseContextSet) + + @classmethod + def _from_frozen_set(cls, frozenset_): + self = cls.__new__(cls) + self._set = frozenset_ + return self + + @classmethod + def from_sets(cls, sets): + """ + Used to work with an iterable of set. + """ + aggregated = set() + for set_ in sets: + if isinstance(set_, BaseContextSet): + aggregated |= set_._set + else: + aggregated |= frozenset(set_) + return cls._from_frozen_set(frozenset(aggregated)) + + def __or__(self, other): + return self._from_frozen_set(self._set | other._set) + + def __and__(self, other): + return self._from_frozen_set(self._set & other._set) + + def __iter__(self): + for element in self._set: + yield element + + def __bool__(self): + return bool(self._set) + + def __len__(self): + return len(self._set) + + def __repr__(self): + return 'S{%s}' % (', '.join(str(s) for s in self._set)) + + def filter(self, filter_func): + return self.__class__(filter(filter_func, self._set)) + + def __getattr__(self, name): + def mapper(*args, **kwargs): + return self.from_sets( + getattr(context, name)(*args, **kwargs) + for context in self._set + ) + return mapper + + def __eq__(self, other): + return self._set == other._set + + def __hash__(self): + return hash(self._set) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/utils.py new file mode 100644 index 0000000..92ff52e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/common/utils.py @@ -0,0 +1,26 @@ +import os +from contextlib import contextmanager + + +def traverse_parents(path, include_current=False): + if not include_current: + path = os.path.dirname(path) + + previous = None + while previous != path: + yield path + previous = path + path = os.path.dirname(path) + + +@contextmanager +def monkeypatch(obj, attribute_name, new_value): + """ + Like pytest's monkeypatch, but as a context manager. + """ + old_value = getattr(obj, attribute_name) + try: + setattr(obj, attribute_name, new_value) + yield + finally: + setattr(obj, attribute_name, old_value) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/debug.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/debug.py new file mode 100644 index 0000000..4136acf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/debug.py @@ -0,0 +1,143 @@ +import os +import time +from contextlib import contextmanager + +from jedi._compatibility import encoding, is_py3, u + +_inited = False + + +def _lazy_colorama_init(): + """ + Lazily init colorama if necessary, not to screw up stdout if debugging is + not enabled. + + This version of the function does nothing. + """ + + +try: + if os.name == 'nt': + # Does not work on Windows, as pyreadline and colorama interfere + raise ImportError + else: + # Use colorama for nicer console output. + from colorama import Fore, init + from colorama import initialise + + def _lazy_colorama_init(): # noqa: F811 + """ + Lazily init colorama if necessary, not to screw up stdout is + debug not enabled. + + This version of the function does init colorama. + """ + global _inited + if not _inited: + # pytest resets the stream at the end - causes troubles. Since + # after every output the stream is reset automatically we don't + # need this. + initialise.atexit_done = True + try: + init(strip=False) + except Exception: + # Colorama fails with initializing under vim and is buggy in + # version 0.3.6. + pass + _inited = True + +except ImportError: + class Fore(object): + RED = '' + GREEN = '' + YELLOW = '' + MAGENTA = '' + RESET = '' + BLUE = '' + +NOTICE = object() +WARNING = object() +SPEED = object() + +enable_speed = False +enable_warning = False +enable_notice = False + +# callback, interface: level, str +debug_function = None +_debug_indent = 0 +_start_time = time.time() + + +def reset_time(): + global _start_time, _debug_indent + _start_time = time.time() + _debug_indent = 0 + + +def increase_indent(func): + """Decorator for makin """ + def wrapper(*args, **kwargs): + with increase_indent_cm(): + return func(*args, **kwargs) + return wrapper + + +@contextmanager +def increase_indent_cm(title=None): + global _debug_indent + if title: + dbg('Start: ' + title, color='MAGENTA') + _debug_indent += 1 + try: + yield + finally: + _debug_indent -= 1 + if title: + dbg('End: ' + title, color='MAGENTA') + + +def dbg(message, *args, **kwargs): + """ Looks at the stack, to see if a debug message should be printed. """ + # Python 2 compatibility, because it doesn't understand default args + color = kwargs.pop('color', 'GREEN') + assert color + + if debug_function and enable_notice: + i = ' ' * _debug_indent + _lazy_colorama_init() + debug_function(color, i + 'dbg: ' + message % tuple(u(repr(a)) for a in args)) + + +def warning(message, *args, **kwargs): + format = kwargs.pop('format', True) + assert not kwargs + + if debug_function and enable_warning: + i = ' ' * _debug_indent + if format: + message = message % tuple(u(repr(a)) for a in args) + debug_function('RED', i + 'warning: ' + message) + + +def speed(name): + if debug_function and enable_speed: + now = time.time() + i = ' ' * _debug_indent + debug_function('YELLOW', i + 'speed: ' + '%s %s' % (name, now - _start_time)) + + +def print_to_stdout(color, str_out): + """ + The default debug function that prints to standard out. + + :param str color: A string that is an attribute of ``colorama.Fore``. + """ + col = getattr(Fore, color) + _lazy_colorama_init() + if not is_py3: + str_out = str_out.encode(encoding, 'replace') + print(col + str_out + Fore.RESET) + + +# debug_function = print_to_stdout diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/__init__.py new file mode 100644 index 0000000..a4f7e90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/__init__.py @@ -0,0 +1,443 @@ +""" +Evaluation of Python code in |jedi| is based on three assumptions: + +* The code uses as least side effects as possible. Jedi understands certain + list/tuple/set modifications, but there's no guarantee that Jedi detects + everything (list.append in different modules for example). +* No magic is being used: + + - metaclasses + - ``setattr()`` / ``__import__()`` + - writing to ``globals()``, ``locals()``, ``object.__dict__`` +* The programmer is not a total dick, e.g. like `this + `_ :-) + +The actual algorithm is based on a principle called lazy evaluation. That +said, the typical entry point for static analysis is calling +``eval_expr_stmt``. There's separate logic for autocompletion in the API, the +evaluator is all about evaluating an expression. + +TODO this paragraph is not what jedi does anymore, it's similar, but not the +same. + +Now you need to understand what follows after ``eval_expr_stmt``. Let's +make an example:: + + import datetime + datetime.date.toda# <-- cursor here + +First of all, this module doesn't care about completion. It really just cares +about ``datetime.date``. At the end of the procedure ``eval_expr_stmt`` will +return the ``date`` class. + +To *visualize* this (simplified): + +- ``Evaluator.eval_expr_stmt`` doesn't do much, because there's no assignment. +- ``Context.eval_node`` cares for resolving the dotted path +- ``Evaluator.find_types`` searches for global definitions of datetime, which + it finds in the definition of an import, by scanning the syntax tree. +- Using the import logic, the datetime module is found. +- Now ``find_types`` is called again by ``eval_node`` to find ``date`` + inside the datetime module. + +Now what would happen if we wanted ``datetime.date.foo.bar``? Two more +calls to ``find_types``. However the second call would be ignored, because the +first one would return nothing (there's no foo attribute in ``date``). + +What if the import would contain another ``ExprStmt`` like this:: + + from foo import bar + Date = bar.baz + +Well... You get it. Just another ``eval_expr_stmt`` recursion. It's really +easy. Python can obviously get way more complicated then this. To understand +tuple assignments, list comprehensions and everything else, a lot more code had +to be written. + +Jedi has been tested very well, so you can just start modifying code. It's best +to write your own test first for your "new" feature. Don't be scared of +breaking stuff. As long as the tests pass, you're most likely to be fine. + +I need to mention now that lazy evaluation is really good because it +only *evaluates* what needs to be *evaluated*. All the statements and modules +that are not used are just being ignored. +""" +from parso.python import tree +import parso +from parso import python_bytes_to_unicode +from jedi.file_io import FileIO + +from jedi import debug +from jedi import parser_utils +from jedi.evaluate.utils import unite +from jedi.evaluate import imports +from jedi.evaluate import recursion +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate import helpers +from jedi.evaluate.names import TreeNameDefinition, ParamName +from jedi.evaluate.base_context import ContextualizedName, ContextualizedNode, \ + ContextSet, NO_CONTEXTS, iterate_contexts +from jedi.evaluate.context import ClassContext, FunctionContext, \ + AnonymousInstance, BoundMethod +from jedi.evaluate.context.iterable import CompForContext +from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \ + eval_node, check_tuple_assignments +from jedi.plugins import plugin_manager + + +class Evaluator(object): + def __init__(self, project, environment=None, script_path=None): + if environment is None: + environment = project.get_environment() + self.environment = environment + self.script_path = script_path + self.compiled_subprocess = environment.get_evaluator_subprocess(self) + self.grammar = environment.get_grammar() + + self.latest_grammar = parso.load_grammar(version='3.7') + self.memoize_cache = {} # for memoize decorators + self.module_cache = imports.ModuleCache() # does the job of `sys.modules`. + self.stub_module_cache = {} # Dict[Tuple[str, ...], Optional[ModuleContext]] + self.compiled_cache = {} # see `evaluate.compiled.create()` + self.inferred_element_counts = {} + self.mixed_cache = {} # see `evaluate.compiled.mixed._create()` + self.analysis = [] + self.dynamic_params_depth = 0 + self.is_analysis = False + self.project = project + self.access_cache = {} + self.allow_descriptor_getattr = False + + self.reset_recursion_limitations() + self.allow_different_encoding = True + + def import_module(self, import_names, parent_module_context=None, + sys_path=None, prefer_stubs=True): + if sys_path is None: + sys_path = self.get_sys_path() + return imports.import_module(self, import_names, parent_module_context, + sys_path, prefer_stubs=prefer_stubs) + + @staticmethod + @plugin_manager.decorate() + def execute(context, arguments): + debug.dbg('execute: %s %s', context, arguments) + with debug.increase_indent_cm(): + context_set = context.py__call__(arguments=arguments) + debug.dbg('execute result: %s in %s', context_set, context) + return context_set + + @property + @evaluator_function_cache() + def builtins_module(self): + module_name = u'builtins' + if self.environment.version_info.major == 2: + module_name = u'__builtin__' + builtins_module, = self.import_module((module_name,), sys_path=()) + return builtins_module + + @property + @evaluator_function_cache() + def typing_module(self): + typing_module, = self.import_module((u'typing',)) + return typing_module + + def reset_recursion_limitations(self): + self.recursion_detector = recursion.RecursionDetector() + self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self) + + def get_sys_path(self, **kwargs): + """Convenience function""" + return self.project._get_sys_path(self, environment=self.environment, **kwargs) + + def eval_element(self, context, element): + if isinstance(context, CompForContext): + return eval_node(context, element) + + if_stmt = element + while if_stmt is not None: + if_stmt = if_stmt.parent + if if_stmt.type in ('if_stmt', 'for_stmt'): + break + if parser_utils.is_scope(if_stmt): + if_stmt = None + break + predefined_if_name_dict = context.predefined_names.get(if_stmt) + # TODO there's a lot of issues with this one. We actually should do + # this in a different way. Caching should only be active in certain + # cases and this all sucks. + if predefined_if_name_dict is None and if_stmt \ + and if_stmt.type == 'if_stmt' and self.is_analysis: + if_stmt_test = if_stmt.children[1] + name_dicts = [{}] + # If we already did a check, we don't want to do it again -> If + # context.predefined_names is filled, we stop. + # We don't want to check the if stmt itself, it's just about + # the content. + if element.start_pos > if_stmt_test.end_pos: + # Now we need to check if the names in the if_stmt match the + # names in the suite. + if_names = helpers.get_names_of_node(if_stmt_test) + element_names = helpers.get_names_of_node(element) + str_element_names = [e.value for e in element_names] + if any(i.value in str_element_names for i in if_names): + for if_name in if_names: + definitions = self.goto_definitions(context, if_name) + # Every name that has multiple different definitions + # causes the complexity to rise. The complexity should + # never fall below 1. + if len(definitions) > 1: + if len(name_dicts) * len(definitions) > 16: + debug.dbg('Too many options for if branch evaluation %s.', if_stmt) + # There's only a certain amount of branches + # Jedi can evaluate, otherwise it will take to + # long. + name_dicts = [{}] + break + + original_name_dicts = list(name_dicts) + name_dicts = [] + for definition in definitions: + new_name_dicts = list(original_name_dicts) + for i, name_dict in enumerate(new_name_dicts): + new_name_dicts[i] = name_dict.copy() + new_name_dicts[i][if_name.value] = ContextSet([definition]) + + name_dicts += new_name_dicts + else: + for name_dict in name_dicts: + name_dict[if_name.value] = definitions + if len(name_dicts) > 1: + result = NO_CONTEXTS + for name_dict in name_dicts: + with helpers.predefine_names(context, if_stmt, name_dict): + result |= eval_node(context, element) + return result + else: + return self._eval_element_if_evaluated(context, element) + else: + if predefined_if_name_dict: + return eval_node(context, element) + else: + return self._eval_element_if_evaluated(context, element) + + def _eval_element_if_evaluated(self, context, element): + """ + TODO This function is temporary: Merge with eval_element. + """ + parent = element + while parent is not None: + parent = parent.parent + predefined_if_name_dict = context.predefined_names.get(parent) + if predefined_if_name_dict is not None: + return eval_node(context, element) + return self._eval_element_cached(context, element) + + @evaluator_function_cache(default=NO_CONTEXTS) + def _eval_element_cached(self, context, element): + return eval_node(context, element) + + def goto_definitions(self, context, name): + def_ = name.get_definition(import_name_always=True) + if def_ is not None: + type_ = def_.type + is_classdef = type_ == 'classdef' + if is_classdef or type_ == 'funcdef': + if is_classdef: + c = ClassContext(self, context, name.parent) + else: + c = FunctionContext.from_context(context, name.parent) + return ContextSet([c]) + + if type_ == 'expr_stmt': + is_simple_name = name.parent.type not in ('power', 'trailer') + if is_simple_name: + return eval_expr_stmt(context, def_, name) + if type_ == 'for_stmt': + container_types = context.eval_node(def_.children[3]) + cn = ContextualizedNode(context, def_.children[3]) + for_types = iterate_contexts(container_types, cn) + c_node = ContextualizedName(context, name) + return check_tuple_assignments(self, c_node, for_types) + if type_ in ('import_from', 'import_name'): + return imports.infer_import(context, name) + else: + result = self._follow_error_node_imports_if_possible(context, name) + if result is not None: + return result + + return helpers.evaluate_call_of_leaf(context, name) + + def _follow_error_node_imports_if_possible(self, context, name): + error_node = tree.search_ancestor(name, 'error_node') + if error_node is not None: + # Get the first command start of a started simple_stmt. The error + # node is sometimes a small_stmt and sometimes a simple_stmt. Check + # for ; leaves that start a new statements. + start_index = 0 + for index, n in enumerate(error_node.children): + if n.start_pos > name.start_pos: + break + if n == ';': + start_index = index + 1 + nodes = error_node.children[start_index:] + first_name = nodes[0].get_first_leaf().value + + # Make it possible to infer stuff like `import foo.` or + # `from foo.bar`. + if first_name in ('from', 'import'): + is_import_from = first_name == 'from' + level, names = helpers.parse_dotted_names( + nodes, + is_import_from=is_import_from, + until_node=name, + ) + return imports.Importer(self, names, context.get_root_context(), level).follow() + return None + + def goto(self, context, name): + definition = name.get_definition(import_name_always=True) + if definition is not None: + type_ = definition.type + if type_ == 'expr_stmt': + # Only take the parent, because if it's more complicated than just + # a name it's something you can "goto" again. + is_simple_name = name.parent.type not in ('power', 'trailer') + if is_simple_name: + return [TreeNameDefinition(context, name)] + elif type_ == 'param': + return [ParamName(context, name)] + elif type_ in ('import_from', 'import_name'): + module_names = imports.infer_import(context, name, is_goto=True) + return module_names + else: + return [TreeNameDefinition(context, name)] + else: + contexts = self._follow_error_node_imports_if_possible(context, name) + if contexts is not None: + return [context.name for context in contexts] + + par = name.parent + node_type = par.type + if node_type == 'argument' and par.children[1] == '=' and par.children[0] == name: + # Named param goto. + trailer = par.parent + if trailer.type == 'arglist': + trailer = trailer.parent + if trailer.type != 'classdef': + if trailer.type == 'decorator': + context_set = context.eval_node(trailer.children[1]) + else: + i = trailer.parent.children.index(trailer) + to_evaluate = trailer.parent.children[:i] + if to_evaluate[0] == 'await': + to_evaluate.pop(0) + context_set = context.eval_node(to_evaluate[0]) + for trailer in to_evaluate[1:]: + context_set = eval_trailer(context, context_set, trailer) + param_names = [] + for context in context_set: + for signature in context.get_signatures(): + for param_name in signature.get_param_names(): + if param_name.string_name == name.value: + param_names.append(param_name) + return param_names + elif node_type == 'dotted_name': # Is a decorator. + index = par.children.index(name) + if index > 0: + new_dotted = helpers.deep_ast_copy(par) + new_dotted.children[index - 1:] = [] + values = context.eval_node(new_dotted) + return unite( + value.py__getattribute__(name, name_context=context, is_goto=True) + for value in values + ) + + if node_type == 'trailer' and par.children[0] == '.': + values = helpers.evaluate_call_of_leaf(context, name, cut_own_trailer=True) + return values.py__getattribute__(name, name_context=context, is_goto=True) + else: + stmt = tree.search_ancestor( + name, 'expr_stmt', 'lambdef' + ) or name + if stmt.type == 'lambdef': + stmt = name + return context.py__getattribute__( + name, + position=stmt.start_pos, + search_global=True, is_goto=True + ) + + def create_context(self, base_context, node, node_is_context=False, node_is_object=False): + def parent_scope(node): + while True: + node = node.parent + + if parser_utils.is_scope(node): + return node + elif node.type in ('argument', 'testlist_comp'): + if node.children[1].type in ('comp_for', 'sync_comp_for'): + return node.children[1] + elif node.type == 'dictorsetmaker': + for n in node.children[1:4]: + # In dictionaries it can be pretty much anything. + if n.type in ('comp_for', 'sync_comp_for'): + return n + + def from_scope_node(scope_node, is_nested=True, node_is_object=False): + if scope_node == base_node: + return base_context + + is_funcdef = scope_node.type in ('funcdef', 'lambdef') + parent_scope = parser_utils.get_parent_scope(scope_node) + parent_context = from_scope_node(parent_scope) + + if is_funcdef: + func = FunctionContext.from_context(parent_context, scope_node) + if parent_context.is_class(): + instance = AnonymousInstance( + self, parent_context.parent_context, parent_context) + func = BoundMethod( + instance=instance, + function=func + ) + + if is_nested and not node_is_object: + return func.get_function_execution() + return func + elif scope_node.type == 'classdef': + return ClassContext(self, parent_context, scope_node) + elif scope_node.type in ('comp_for', 'sync_comp_for'): + if node.start_pos >= scope_node.children[-1].start_pos: + return parent_context + return CompForContext.from_comp_for(parent_context, scope_node) + raise Exception("There's a scope that was not managed.") + + base_node = base_context.tree_node + + if node_is_context and parser_utils.is_scope(node): + scope_node = node + else: + scope_node = parent_scope(node) + if scope_node.type in ('funcdef', 'classdef'): + colon = scope_node.children[scope_node.children.index(':')] + if node.start_pos < colon.start_pos: + parent = node.parent + if not (parent.type == 'param' and parent.name == node): + scope_node = parent_scope(scope_node) + return from_scope_node(scope_node, is_nested=True, node_is_object=node_is_object) + + def parse_and_get_code(self, code=None, path=None, encoding='utf-8', + use_latest_grammar=False, file_io=None, **kwargs): + if self.allow_different_encoding: + if code is None: + if file_io is None: + file_io = FileIO(path) + code = file_io.read() + code = python_bytes_to_unicode(code, encoding=encoding, errors='replace') + + grammar = self.latest_grammar if use_latest_grammar else self.grammar + return grammar.parse(code=code, path=path, file_io=file_io, **kwargs), code + + def parse(self, *args, **kwargs): + return self.parse_and_get_code(*args, **kwargs)[0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/analysis.py new file mode 100644 index 0000000..47f1bbd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/analysis.py @@ -0,0 +1,224 @@ +""" +Module for statical analysis. +""" +from parso.python import tree + +from jedi._compatibility import force_unicode +from jedi import debug +from jedi.evaluate.helpers import is_string + + +CODES = { + 'attribute-error': (1, AttributeError, 'Potential AttributeError.'), + 'name-error': (2, NameError, 'Potential NameError.'), + 'import-error': (3, ImportError, 'Potential ImportError.'), + 'type-error-too-many-arguments': (4, TypeError, None), + 'type-error-too-few-arguments': (5, TypeError, None), + 'type-error-keyword-argument': (6, TypeError, None), + 'type-error-multiple-values': (7, TypeError, None), + 'type-error-star-star': (8, TypeError, None), + 'type-error-star': (9, TypeError, None), + 'type-error-operation': (10, TypeError, None), + 'type-error-not-iterable': (11, TypeError, None), + 'type-error-isinstance': (12, TypeError, None), + 'type-error-not-subscriptable': (13, TypeError, None), + 'value-error-too-many-values': (14, ValueError, None), + 'value-error-too-few-values': (15, ValueError, None), +} + + +class Error(object): + def __init__(self, name, module_path, start_pos, message=None): + self.path = module_path + self._start_pos = start_pos + self.name = name + if message is None: + message = CODES[self.name][2] + self.message = message + + @property + def line(self): + return self._start_pos[0] + + @property + def column(self): + return self._start_pos[1] + + @property + def code(self): + # The class name start + first = self.__class__.__name__[0] + return first + str(CODES[self.name][0]) + + def __unicode__(self): + return '%s:%s:%s: %s %s' % (self.path, self.line, self.column, + self.code, self.message) + + def __str__(self): + return self.__unicode__() + + def __eq__(self, other): + return (self.path == other.path and self.name == other.name and + self._start_pos == other._start_pos) + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self.path, self._start_pos, self.name)) + + def __repr__(self): + return '<%s %s: %s@%s,%s>' % (self.__class__.__name__, + self.name, self.path, + self._start_pos[0], self._start_pos[1]) + + +class Warning(Error): + pass + + +def add(node_context, error_name, node, message=None, typ=Error, payload=None): + exception = CODES[error_name][1] + if _check_for_exception_catch(node_context, node, exception, payload): + return + + # TODO this path is probably not right + module_context = node_context.get_root_context() + module_path = module_context.py__file__() + issue_instance = typ(error_name, module_path, node.start_pos, message) + debug.warning(str(issue_instance), format=False) + node_context.evaluator.analysis.append(issue_instance) + return issue_instance + + +def _check_for_setattr(instance): + """ + Check if there's any setattr method inside an instance. If so, return True. + """ + module = instance.get_root_context() + node = module.tree_node + if node is None: + # If it's a compiled module or doesn't have a tree_node + return False + + try: + stmt_names = node.get_used_names()['setattr'] + except KeyError: + return False + + return any(node.start_pos < n.start_pos < node.end_pos + # Check if it's a function called setattr. + and not (n.parent.type == 'funcdef' and n.parent.name == n) + for n in stmt_names) + + +def add_attribute_error(name_context, lookup_context, name): + message = ('AttributeError: %s has no attribute %s.' % (lookup_context, name)) + from jedi.evaluate.context.instance import CompiledInstanceName + # Check for __getattr__/__getattribute__ existance and issue a warning + # instead of an error, if that happens. + typ = Error + if lookup_context.is_instance() and not lookup_context.is_compiled(): + slot_names = lookup_context.get_function_slot_names(u'__getattr__') + \ + lookup_context.get_function_slot_names(u'__getattribute__') + for n in slot_names: + # TODO do we even get here? + if isinstance(name, CompiledInstanceName) and \ + n.parent_context.obj == object: + typ = Warning + break + + if _check_for_setattr(lookup_context): + typ = Warning + + payload = lookup_context, name + add(name_context, 'attribute-error', name, message, typ, payload) + + +def _check_for_exception_catch(node_context, jedi_name, exception, payload=None): + """ + Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and + doesn't count as an error (if equal to `exception`). + Also checks `hasattr` for AttributeErrors and uses the `payload` to compare + it. + Returns True if the exception was catched. + """ + def check_match(cls, exception): + if not cls.is_class(): + return False + + for python_cls in exception.mro(): + if cls.py__name__() == python_cls.__name__ \ + and cls.parent_context == cls.evaluator.builtins_module: + return True + return False + + def check_try_for_except(obj, exception): + # Only nodes in try + iterator = iter(obj.children) + for branch_type in iterator: + colon = next(iterator) + suite = next(iterator) + if branch_type == 'try' \ + and not (branch_type.start_pos < jedi_name.start_pos <= suite.end_pos): + return False + + for node in obj.get_except_clause_tests(): + if node is None: + return True # An exception block that catches everything. + else: + except_classes = node_context.eval_node(node) + for cls in except_classes: + from jedi.evaluate.context import iterable + if isinstance(cls, iterable.Sequence) and \ + cls.array_type == 'tuple': + # multiple exceptions + for lazy_context in cls.py__iter__(): + for typ in lazy_context.infer(): + if check_match(typ, exception): + return True + else: + if check_match(cls, exception): + return True + + def check_hasattr(node, suite): + try: + assert suite.start_pos <= jedi_name.start_pos < suite.end_pos + assert node.type in ('power', 'atom_expr') + base = node.children[0] + assert base.type == 'name' and base.value == 'hasattr' + trailer = node.children[1] + assert trailer.type == 'trailer' + arglist = trailer.children[1] + assert arglist.type == 'arglist' + from jedi.evaluate.arguments import TreeArguments + args = list(TreeArguments(node_context.evaluator, node_context, arglist).unpack()) + # Arguments should be very simple + assert len(args) == 2 + + # Check name + key, lazy_context = args[1] + names = list(lazy_context.infer()) + assert len(names) == 1 and is_string(names[0]) + assert force_unicode(names[0].get_safe_value()) == payload[1].value + + # Check objects + key, lazy_context = args[0] + objects = lazy_context.infer() + return payload[0] in objects + except AssertionError: + return False + + obj = jedi_name + while obj is not None and not isinstance(obj, (tree.Function, tree.Class)): + if isinstance(obj, tree.Flow): + # try/except catch check + if obj.type == 'try_stmt' and check_try_for_except(obj, exception): + return True + # hasattr check + if exception == AttributeError and obj.type in ('if_stmt', 'while_stmt'): + if check_hasattr(obj.children[1], obj.children[3]): + return True + obj = obj.parent + + return False diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/arguments.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/arguments.py new file mode 100644 index 0000000..4e32653 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/arguments.py @@ -0,0 +1,382 @@ +import re + +from parso.python import tree + +from jedi._compatibility import zip_longest +from jedi import debug +from jedi.evaluate.utils import PushBackIterator +from jedi.evaluate import analysis +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \ + LazyTreeContext, get_merged_lazy_context +from jedi.evaluate.names import ParamName, TreeNameDefinition +from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet, ContextualizedNode +from jedi.evaluate.context import iterable +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.evaluate.param import get_executed_params_and_issues, ExecutedParam + + +def try_iter_content(types, depth=0): + """Helper method for static analysis.""" + if depth > 10: + # It's possible that a loop has references on itself (especially with + # CompiledObject). Therefore don't loop infinitely. + return + + for typ in types: + try: + f = typ.py__iter__ + except AttributeError: + pass + else: + for lazy_context in f(): + try_iter_content(lazy_context.infer(), depth + 1) + + +class ParamIssue(Exception): + pass + + +def repack_with_argument_clinic(string, keep_arguments_param=False, keep_callback_param=False): + """ + Transforms a function or method with arguments to the signature that is + given as an argument clinic notation. + + Argument clinic is part of CPython and used for all the functions that are + implemented in C (Python 3.7): + + str.split.__text_signature__ + # Results in: '($self, /, sep=None, maxsplit=-1)' + """ + clinic_args = list(_parse_argument_clinic(string)) + + def decorator(func): + def wrapper(context, *args, **kwargs): + if keep_arguments_param: + arguments = kwargs['arguments'] + else: + arguments = kwargs.pop('arguments') + if not keep_arguments_param: + kwargs.pop('callback', None) + try: + args += tuple(_iterate_argument_clinic( + context.evaluator, + arguments, + clinic_args + )) + except ParamIssue: + return NO_CONTEXTS + else: + return func(context, *args, **kwargs) + + return wrapper + return decorator + + +def _iterate_argument_clinic(evaluator, arguments, parameters): + """Uses a list with argument clinic information (see PEP 436).""" + iterator = PushBackIterator(arguments.unpack()) + for i, (name, optional, allow_kwargs, stars) in enumerate(parameters): + if stars == 1: + lazy_contexts = [] + for key, argument in iterator: + if key is not None: + iterator.push_back((key, argument)) + break + + lazy_contexts.append(argument) + yield ContextSet([iterable.FakeSequence(evaluator, u'tuple', lazy_contexts)]) + lazy_contexts + continue + elif stars == 2: + raise NotImplementedError() + key, argument = next(iterator, (None, None)) + if key is not None: + debug.warning('Keyword arguments in argument clinic are currently not supported.') + raise ParamIssue + if argument is None and not optional: + debug.warning('TypeError: %s expected at least %s arguments, got %s', + name, len(parameters), i) + raise ParamIssue + + context_set = NO_CONTEXTS if argument is None else argument.infer() + + if not context_set and not optional: + # For the stdlib we always want values. If we don't get them, + # that's ok, maybe something is too hard to resolve, however, + # we will not proceed with the evaluation of that function. + debug.warning('argument_clinic "%s" not resolvable.', name) + raise ParamIssue + yield context_set + + +def _parse_argument_clinic(string): + allow_kwargs = False + optional = False + while string: + # Optional arguments have to begin with a bracket. And should always be + # at the end of the arguments. This is therefore not a proper argument + # clinic implementation. `range()` for exmple allows an optional start + # value at the beginning. + match = re.match(r'(?:(?:(\[),? ?|, ?|)(\**\w+)|, ?/)\]*', string) + string = string[len(match.group(0)):] + if not match.group(2): # A slash -> allow named arguments + allow_kwargs = True + continue + optional = optional or bool(match.group(1)) + word = match.group(2) + stars = word.count('*') + word = word[stars:] + yield (word, optional, allow_kwargs, stars) + if stars: + allow_kwargs = True + + +class _AbstractArgumentsMixin(object): + def eval_all(self, funcdef=None): + """ + Evaluates all arguments as a support for static analysis + (normally Jedi). + """ + for key, lazy_context in self.unpack(): + types = lazy_context.infer() + try_iter_content(types) + + def unpack(self, funcdef=None): + raise NotImplementedError + + def get_executed_params_and_issues(self, execution_context): + return get_executed_params_and_issues(execution_context, self) + + def get_calling_nodes(self): + return [] + + +class AbstractArguments(_AbstractArgumentsMixin): + context = None + argument_node = None + trailer = None + + +class AnonymousArguments(AbstractArguments): + def get_executed_params_and_issues(self, execution_context): + from jedi.evaluate.dynamic import search_params + return search_params( + execution_context.evaluator, + execution_context, + execution_context.tree_node + ), [] + + def __repr__(self): + return '%s()' % self.__class__.__name__ + + +def unpack_arglist(arglist): + if arglist is None: + return + + # Allow testlist here as well for Python2's class inheritance + # definitions. + if not (arglist.type in ('arglist', 'testlist') or ( + # in python 3.5 **arg is an argument, not arglist + (arglist.type == 'argument') and + arglist.children[0] in ('*', '**'))): + yield 0, arglist + return + + iterator = iter(arglist.children) + for child in iterator: + if child == ',': + continue + elif child in ('*', '**'): + yield len(child.value), next(iterator) + elif child.type == 'argument' and \ + child.children[0] in ('*', '**'): + assert len(child.children) == 2 + yield len(child.children[0].value), child.children[1] + else: + yield 0, child + + +class TreeArguments(AbstractArguments): + def __init__(self, evaluator, context, argument_node, trailer=None): + """ + The argument_node is either a parser node or a list of evaluated + objects. Those evaluated objects may be lists of evaluated objects + themselves (one list for the first argument, one for the second, etc). + + :param argument_node: May be an argument_node or a list of nodes. + """ + self.argument_node = argument_node + self.context = context + self._evaluator = evaluator + self.trailer = trailer # Can be None, e.g. in a class definition. + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, *args, **kwargs): + return cls(*args, **kwargs) + + def unpack(self, funcdef=None): + named_args = [] + for star_count, el in unpack_arglist(self.argument_node): + if star_count == 1: + arrays = self.context.eval_node(el) + iterators = [_iterate_star_args(self.context, a, el, funcdef) + for a in arrays] + for values in list(zip_longest(*iterators)): + # TODO zip_longest yields None, that means this would raise + # an exception? + yield None, get_merged_lazy_context( + [v for v in values if v is not None] + ) + elif star_count == 2: + arrays = self.context.eval_node(el) + for dct in arrays: + for key, values in _star_star_dict(self.context, dct, el, funcdef): + yield key, values + else: + if el.type == 'argument': + c = el.children + if len(c) == 3: # Keyword argument. + named_args.append((c[0].value, LazyTreeContext(self.context, c[2]),)) + else: # Generator comprehension. + # Include the brackets with the parent. + sync_comp_for = el.children[1] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + comp = iterable.GeneratorComprehension( + self._evaluator, + defining_context=self.context, + sync_comp_for_node=sync_comp_for, + entry_node=el.children[0], + ) + yield None, LazyKnownContext(comp) + else: + yield None, LazyTreeContext(self.context, el) + + # Reordering arguments is necessary, because star args sometimes appear + # after named argument, but in the actual order it's prepended. + for named_arg in named_args: + yield named_arg + + def _as_tree_tuple_objects(self): + for star_count, argument in unpack_arglist(self.argument_node): + default = None + if argument.type == 'argument': + if len(argument.children) == 3: # Keyword argument. + argument, default = argument.children[::2] + yield argument, default, star_count + + def iter_calling_names_with_star(self): + for name, default, star_count in self._as_tree_tuple_objects(): + # TODO this function is a bit strange. probably refactor? + if not star_count or not isinstance(name, tree.Name): + continue + + yield TreeNameDefinition(self.context, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.argument_node) + + def get_calling_nodes(self): + from jedi.evaluate.dynamic import DynamicExecutedParams + old_arguments_list = [] + arguments = self + + while arguments not in old_arguments_list: + if not isinstance(arguments, TreeArguments): + break + + old_arguments_list.append(arguments) + for calling_name in reversed(list(arguments.iter_calling_names_with_star())): + names = calling_name.goto() + if len(names) != 1: + break + if not isinstance(names[0], ParamName): + break + param = names[0].get_param() + if isinstance(param, DynamicExecutedParams): + # For dynamic searches we don't even want to see errors. + return [] + if not isinstance(param, ExecutedParam): + break + if param.var_args is None: + break + arguments = param.var_args + break + + if arguments.argument_node is not None: + return [ContextualizedNode(arguments.context, arguments.argument_node)] + if arguments.trailer is not None: + return [ContextualizedNode(arguments.context, arguments.trailer)] + return [] + + +class ValuesArguments(AbstractArguments): + def __init__(self, values_list): + self._values_list = values_list + + def unpack(self, funcdef=None): + for values in self._values_list: + yield None, LazyKnownContexts(values) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._values_list) + + +class TreeArgumentsWrapper(_AbstractArgumentsMixin): + def __init__(self, arguments): + self._wrapped_arguments = arguments + + @property + def context(self): + return self._wrapped_arguments.context + + @property + def argument_node(self): + return self._wrapped_arguments.argument_node + + @property + def trailer(self): + return self._wrapped_arguments.trailer + + def unpack(self, func=None): + raise NotImplementedError + + def get_calling_nodes(self): + return self._wrapped_arguments.get_calling_nodes() + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_arguments) + + +def _iterate_star_args(context, array, input_node, funcdef=None): + if not array.py__getattribute__('__iter__'): + if funcdef is not None: + # TODO this funcdef should not be needed. + m = "TypeError: %s() argument after * must be a sequence, not %s" \ + % (funcdef.name.value, array) + analysis.add(context, 'type-error-star', input_node, message=m) + try: + iter_ = array.py__iter__ + except AttributeError: + pass + else: + for lazy_context in iter_(): + yield lazy_context + + +def _star_star_dict(context, array, input_node, funcdef): + from jedi.evaluate.context.instance import CompiledInstance + if isinstance(array, CompiledInstance) and array.name.string_name == 'dict': + # For now ignore this case. In the future add proper iterators and just + # make one call without crazy isinstance checks. + return {} + elif isinstance(array, iterable.Sequence) and array.array_type == 'dict': + return array.exact_key_items() + else: + if funcdef is not None: + m = "TypeError: %s argument after ** must be a mapping, not %s" \ + % (funcdef.name.value, array) + analysis.add(context, 'type-error-star-star', input_node, message=m) + return {} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/base_context.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/base_context.py new file mode 100644 index 0000000..8a03248 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/base_context.py @@ -0,0 +1,436 @@ +""" +Contexts are the "values" that Python would return. However Contexts are at the +same time also the "contexts" that a user is currently sitting in. + +A ContextSet is typically used to specify the return of a function or any other +static analysis operation. In jedi there are always multiple returns and not +just one. +""" +from functools import reduce +from operator import add +from parso.python.tree import ExprStmt, SyncCompFor + +from jedi import debug +from jedi._compatibility import zip_longest, unicode +from jedi.parser_utils import clean_scope_docstring +from jedi.common import BaseContextSet, BaseContext +from jedi.evaluate.helpers import SimpleGetItemNotFound +from jedi.evaluate.utils import safe_property +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.cache import memoize_method + +_sentinel = object() + + +class HelperContextMixin(object): + def get_root_context(self): + context = self + while True: + if context.parent_context is None: + return context + context = context.parent_context + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, *args, **kwargs): + return cls(*args, **kwargs) + + def execute(self, arguments): + return self.evaluator.execute(self, arguments=arguments) + + def execute_evaluated(self, *value_list): + from jedi.evaluate.arguments import ValuesArguments + arguments = ValuesArguments([ContextSet([value]) for value in value_list]) + return self.evaluator.execute(self, arguments) + + def execute_annotation(self): + return self.execute_evaluated() + + def gather_annotation_classes(self): + return ContextSet([self]) + + def merge_types_of_iterate(self, contextualized_node=None, is_async=False): + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self.iterate(contextualized_node, is_async) + ) + + def py__getattribute__(self, name_or_str, name_context=None, position=None, + search_global=False, is_goto=False, + analysis_errors=True): + """ + :param position: Position of the last statement -> tuple of line, column + """ + if name_context is None: + name_context = self + from jedi.evaluate import finder + f = finder.NameFinder(self.evaluator, self, name_context, name_or_str, + position, analysis_errors=analysis_errors) + filters = f.get_filters(search_global) + if is_goto: + return f.filter_name(filters) + return f.find(filters, attribute_lookup=not search_global) + + def py__await__(self): + await_context_set = self.py__getattribute__(u"__await__") + if not await_context_set: + debug.warning('Tried to run __await__ on context %s', self) + return await_context_set.execute_evaluated() + + def eval_node(self, node): + return self.evaluator.eval_element(self, node) + + def create_context(self, node, node_is_context=False, node_is_object=False): + return self.evaluator.create_context(self, node, node_is_context, node_is_object) + + def iterate(self, contextualized_node=None, is_async=False): + debug.dbg('iterate %s', self) + if is_async: + from jedi.evaluate.lazy_context import LazyKnownContexts + # TODO if no __aiter__ contexts are there, error should be: + # TypeError: 'async for' requires an object with __aiter__ method, got int + return iter([ + LazyKnownContexts( + self.py__getattribute__('__aiter__').execute_evaluated() + .py__getattribute__('__anext__').execute_evaluated() + .py__getattribute__('__await__').execute_evaluated() + .py__stop_iteration_returns() + ) # noqa + ]) + return self.py__iter__(contextualized_node) + + def is_sub_class_of(self, class_context): + for cls in self.py__mro__(): + if cls.is_same_class(class_context): + return True + return False + + def is_same_class(self, class2): + # Class matching should prefer comparisons that are not this function. + if type(class2).is_same_class != HelperContextMixin.is_same_class: + return class2.is_same_class(self) + return self == class2 + + +class Context(HelperContextMixin, BaseContext): + """ + Should be defined, otherwise the API returns empty types. + """ + predefined_names = {} + """ + To be defined by subclasses. + """ + tree_node = None + + @property + def api_type(self): + # By default just lower name of the class. Can and should be + # overwritten. + return self.__class__.__name__.lower() + + def py__getitem__(self, index_context_set, contextualized_node): + from jedi.evaluate import analysis + # TODO this context is probably not right. + analysis.add( + contextualized_node.context, + 'type-error-not-subscriptable', + contextualized_node.node, + message="TypeError: '%s' object is not subscriptable" % self + ) + return NO_CONTEXTS + + def py__iter__(self, contextualized_node=None): + if contextualized_node is not None: + from jedi.evaluate import analysis + analysis.add( + contextualized_node.context, + 'type-error-not-iterable', + contextualized_node.node, + message="TypeError: '%s' object is not iterable" % self) + return iter([]) + + def get_signatures(self): + return [] + + def is_class(self): + return False + + def is_instance(self): + return False + + def is_function(self): + return False + + def is_module(self): + return False + + def is_namespace(self): + return False + + def is_compiled(self): + return False + + def is_bound_method(self): + return False + + def py__bool__(self): + """ + Since Wrapper is a super class for classes, functions and modules, + the return value will always be true. + """ + return True + + def py__doc__(self): + try: + self.tree_node.get_doc_node + except AttributeError: + return '' + else: + return clean_scope_docstring(self.tree_node) + return None + + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + raise ValueError("There exists no safe value for context %s" % self) + return default + + def py__call__(self, arguments): + debug.warning("no execution possible %s", self) + return NO_CONTEXTS + + def py__stop_iteration_returns(self): + debug.warning("Not possible to return the stop iterations of %s", self) + return NO_CONTEXTS + + def get_qualified_names(self): + # Returns Optional[Tuple[str, ...]] + return None + + def is_stub(self): + # The root context knows if it's a stub or not. + return self.parent_context.is_stub() + + +def iterate_contexts(contexts, contextualized_node=None, is_async=False): + """ + Calls `iterate`, on all contexts but ignores the ordering and just returns + all contexts that the iterate functions yield. + """ + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in contexts.iterate(contextualized_node, is_async=is_async) + ) + + +class _ContextWrapperBase(HelperContextMixin): + predefined_names = {} + + @safe_property + def name(self): + from jedi.evaluate.names import ContextName + wrapped_name = self._wrapped_context.name + if wrapped_name.tree_name is not None: + return ContextName(self, wrapped_name.tree_name) + else: + from jedi.evaluate.compiled import CompiledContextName + return CompiledContextName(self, wrapped_name.string_name) + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, evaluator, *args, **kwargs): + return cls(*args, **kwargs) + + def __getattr__(self, name): + assert name != '_wrapped_context', 'Problem with _get_wrapped_context' + return getattr(self._wrapped_context, name) + + +class LazyContextWrapper(_ContextWrapperBase): + @safe_property + @memoize_method + def _wrapped_context(self): + with debug.increase_indent_cm('Resolve lazy context wrapper'): + return self._get_wrapped_context() + + def __repr__(self): + return '<%s>' % (self.__class__.__name__) + + def _get_wrapped_context(self): + raise NotImplementedError + + +class ContextWrapper(_ContextWrapperBase): + def __init__(self, wrapped_context): + self._wrapped_context = wrapped_context + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._wrapped_context) + + +class TreeContext(Context): + def __init__(self, evaluator, parent_context, tree_node): + super(TreeContext, self).__init__(evaluator, parent_context) + self.predefined_names = {} + self.tree_node = tree_node + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.tree_node) + + +class ContextualizedNode(object): + def __init__(self, context, node): + self.context = context + self.node = node + + def get_root_context(self): + return self.context.get_root_context() + + def infer(self): + return self.context.eval_node(self.node) + + def __repr__(self): + return '<%s: %s in %s>' % (self.__class__.__name__, self.node, self.context) + + +class ContextualizedName(ContextualizedNode): + # TODO merge with TreeNameDefinition?! + @property + def name(self): + return self.node + + def assignment_indexes(self): + """ + Returns an array of tuple(int, node) of the indexes that are used in + tuple assignments. + + For example if the name is ``y`` in the following code:: + + x, (y, z) = 2, '' + + would result in ``[(1, xyz_node), (0, yz_node)]``. + + When searching for b in the case ``a, *b, c = [...]`` it will return:: + + [(slice(1, -1), abc_node)] + """ + indexes = [] + is_star_expr = False + node = self.node.parent + compare = self.node + while node is not None: + if node.type in ('testlist', 'testlist_comp', 'testlist_star_expr', 'exprlist'): + for i, child in enumerate(node.children): + if child == compare: + index = int(i / 2) + if is_star_expr: + from_end = int((len(node.children) - i) / 2) + index = slice(index, -from_end) + indexes.insert(0, (index, node)) + break + else: + raise LookupError("Couldn't find the assignment.") + is_star_expr = False + elif node.type == 'star_expr': + is_star_expr = True + elif isinstance(node, (ExprStmt, SyncCompFor)): + break + + compare = node + node = node.parent + return indexes + + +def _getitem(context, index_contexts, contextualized_node): + from jedi.evaluate.context.iterable import Slice + + # The actual getitem call. + simple_getitem = getattr(context, 'py__simple_getitem__', None) + + result = NO_CONTEXTS + unused_contexts = set() + for index_context in index_contexts: + if simple_getitem is not None: + index = index_context + if isinstance(index_context, Slice): + index = index.obj + + try: + method = index.get_safe_value + except AttributeError: + pass + else: + index = method(default=None) + + if type(index) in (float, int, str, unicode, slice, bytes): + try: + result |= simple_getitem(index) + continue + except SimpleGetItemNotFound: + pass + + unused_contexts.add(index_context) + + # The index was somehow not good enough or simply a wrong type. + # Therefore we now iterate through all the contexts and just take + # all results. + if unused_contexts or not index_contexts: + result |= context.py__getitem__( + ContextSet(unused_contexts), + contextualized_node + ) + debug.dbg('py__getitem__ result: %s', result) + return result + + +class ContextSet(BaseContextSet): + def py__class__(self): + return ContextSet(c.py__class__() for c in self._set) + + def iterate(self, contextualized_node=None, is_async=False): + from jedi.evaluate.lazy_context import get_merged_lazy_context + type_iters = [c.iterate(contextualized_node, is_async=is_async) for c in self._set] + for lazy_contexts in zip_longest(*type_iters): + yield get_merged_lazy_context( + [l for l in lazy_contexts if l is not None] + ) + + def execute(self, arguments): + return ContextSet.from_sets(c.evaluator.execute(c, arguments) for c in self._set) + + def execute_evaluated(self, *args, **kwargs): + return ContextSet.from_sets(c.execute_evaluated(*args, **kwargs) for c in self._set) + + def py__getattribute__(self, *args, **kwargs): + if kwargs.get('is_goto'): + return reduce(add, [c.py__getattribute__(*args, **kwargs) for c in self._set], []) + return ContextSet.from_sets(c.py__getattribute__(*args, **kwargs) for c in self._set) + + def get_item(self, *args, **kwargs): + return ContextSet.from_sets(_getitem(c, *args, **kwargs) for c in self._set) + + def try_merge(self, function_name): + context_set = self.__class__([]) + for c in self._set: + try: + method = getattr(c, function_name) + except AttributeError: + pass + else: + context_set |= method() + return context_set + + def gather_annotation_classes(self): + return ContextSet.from_sets([c.gather_annotation_classes() for c in self._set]) + + def get_signatures(self): + return [sig for c in self._set for sig in c.get_signatures()] + + +NO_CONTEXTS = ContextSet([]) + + +def iterator_to_context_set(func): + def wrapper(*args, **kwargs): + return ContextSet(func(*args, **kwargs)) + + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/cache.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/cache.py new file mode 100644 index 0000000..e865a0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/cache.py @@ -0,0 +1,123 @@ +""" +- the popular ``_memoize_default`` works like a typical memoize and returns the + default otherwise. +- ``CachedMetaClass`` uses ``_memoize_default`` to do the same with classes. +""" + +from jedi import debug + +_NO_DEFAULT = object() +_RECURSION_SENTINEL = object() + + +def _memoize_default(default=_NO_DEFAULT, evaluator_is_first_arg=False, second_arg_is_evaluator=False): + """ This is a typical memoization decorator, BUT there is one difference: + To prevent recursion it sets defaults. + + Preventing recursion is in this case the much bigger use than speed. I + don't think, that there is a big speed difference, but there are many cases + where recursion could happen (think about a = b; b = a). + """ + def func(function): + def wrapper(obj, *args, **kwargs): + # TODO These checks are kind of ugly and slow. + if evaluator_is_first_arg: + cache = obj.memoize_cache + elif second_arg_is_evaluator: + cache = args[0].memoize_cache # needed for meta classes + else: + cache = obj.evaluator.memoize_cache + + try: + memo = cache[function] + except KeyError: + cache[function] = memo = {} + + key = (obj, args, frozenset(kwargs.items())) + if key in memo: + return memo[key] + else: + if default is not _NO_DEFAULT: + memo[key] = default + rv = function(obj, *args, **kwargs) + memo[key] = rv + return rv + return wrapper + + return func + + +def evaluator_function_cache(default=_NO_DEFAULT): + def decorator(func): + return _memoize_default(default=default, evaluator_is_first_arg=True)(func) + + return decorator + + +def evaluator_method_cache(default=_NO_DEFAULT): + def decorator(func): + return _memoize_default(default=default)(func) + + return decorator + + +def evaluator_as_method_param_cache(): + def decorator(call): + return _memoize_default(second_arg_is_evaluator=True)(call) + + return decorator + + +class CachedMetaClass(type): + """ + This is basically almost the same than the decorator above, it just caches + class initializations. Either you do it this way or with decorators, but + with decorators you lose class access (isinstance, etc). + """ + @evaluator_as_method_param_cache() + def __call__(self, *args, **kwargs): + return super(CachedMetaClass, self).__call__(*args, **kwargs) + + +def evaluator_method_generator_cache(): + """ + This is a special memoizer. It memoizes generators and also checks for + recursion errors and returns no further iterator elemends in that case. + """ + def func(function): + def wrapper(obj, *args, **kwargs): + cache = obj.evaluator.memoize_cache + try: + memo = cache[function] + except KeyError: + cache[function] = memo = {} + + key = (obj, args, frozenset(kwargs.items())) + + if key in memo: + actual_generator, cached_lst = memo[key] + else: + actual_generator = function(obj, *args, **kwargs) + cached_lst = [] + memo[key] = actual_generator, cached_lst + + i = 0 + while True: + try: + next_element = cached_lst[i] + if next_element is _RECURSION_SENTINEL: + debug.warning('Found a generator recursion for %s' % obj) + # This means we have hit a recursion. + return + except IndexError: + cached_lst.append(_RECURSION_SENTINEL) + next_element = next(actual_generator, None) + if next_element is None: + cached_lst.pop() + return + cached_lst[-1] = next_element + yield next_element + i += 1 + return wrapper + + return func diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/__init__.py new file mode 100644 index 0000000..cfda727 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/__init__.py @@ -0,0 +1,64 @@ +from jedi._compatibility import unicode +from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \ + CompiledObjectFilter, CompiledContextName, create_from_access_path +from jedi.evaluate.base_context import ContextWrapper, LazyContextWrapper + + +def builtin_from_name(evaluator, string): + typing_builtins_module = evaluator.builtins_module + if string in ('None', 'True', 'False'): + builtins, = typing_builtins_module.non_stub_context_set + filter_ = next(builtins.get_filters()) + else: + filter_ = next(typing_builtins_module.get_filters()) + name, = filter_.get(string) + context, = name.infer() + return context + + +class CompiledValue(LazyContextWrapper): + def __init__(self, compiled_obj): + self.evaluator = compiled_obj.evaluator + self._compiled_obj = compiled_obj + + def __getattribute__(self, name): + if name in ('get_safe_value', 'execute_operation', 'access_handle', + 'negate', 'py__bool__', 'is_compiled'): + return getattr(self._compiled_obj, name) + return super(CompiledValue, self).__getattribute__(name) + + def _get_wrapped_context(self): + instance, = builtin_from_name( + self.evaluator, self._compiled_obj.name.string_name).execute_evaluated() + return instance + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj) + + +def create_simple_object(evaluator, obj): + """ + Only allows creations of objects that are easily picklable across Python + versions. + """ + assert type(obj) in (int, float, str, bytes, unicode, slice, complex, bool), obj + compiled_obj = create_from_access_path( + evaluator, + evaluator.compiled_subprocess.create_simple_object(obj) + ) + return CompiledValue(compiled_obj) + + +def get_string_context_set(evaluator): + return builtin_from_name(evaluator, u'str').execute_evaluated() + + +def load_module(evaluator, dotted_name, **kwargs): + # Temporary, some tensorflow builtins cannot be loaded, so it's tried again + # and again and it's really slow. + if dotted_name.startswith('tensorflow.'): + return None + access_path = evaluator.compiled_subprocess.load_module(dotted_name=dotted_name, **kwargs) + if access_path is None: + return None + return create_from_access_path(evaluator, access_path) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/access.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/access.py new file mode 100644 index 0000000..18aacf5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/access.py @@ -0,0 +1,497 @@ +from __future__ import print_function +import inspect +import types +import sys +import operator as op +from collections import namedtuple + +from jedi._compatibility import unicode, is_py3, builtins, \ + py_version, force_unicode +from jedi.evaluate.compiled.getattr_static import getattr_static + +ALLOWED_GETITEM_TYPES = (str, list, tuple, unicode, bytes, bytearray, dict) + +MethodDescriptorType = type(str.replace) +# These are not considered classes and access is granted even though they have +# a __class__ attribute. +NOT_CLASS_TYPES = ( + types.BuiltinFunctionType, + types.CodeType, + types.FrameType, + types.FunctionType, + types.GeneratorType, + types.GetSetDescriptorType, + types.LambdaType, + types.MemberDescriptorType, + types.MethodType, + types.ModuleType, + types.TracebackType, + MethodDescriptorType +) + +if is_py3: + NOT_CLASS_TYPES += ( + types.MappingProxyType, + types.SimpleNamespace, + types.DynamicClassAttribute, + ) + + +# Those types don't exist in typing. +MethodDescriptorType = type(str.replace) +WrapperDescriptorType = type(set.__iter__) +# `object.__subclasshook__` is an already executed descriptor. +object_class_dict = type.__dict__["__dict__"].__get__(object) +ClassMethodDescriptorType = type(object_class_dict['__subclasshook__']) + +_sentinel = object() + +# Maps Python syntax to the operator module. +COMPARISON_OPERATORS = { + '==': op.eq, + '!=': op.ne, + 'is': op.is_, + 'is not': op.is_not, + '<': op.lt, + '<=': op.le, + '>': op.gt, + '>=': op.ge, +} + +_OPERATORS = { + '+': op.add, + '-': op.sub, +} +_OPERATORS.update(COMPARISON_OPERATORS) + +ALLOWED_DESCRIPTOR_ACCESS = ( + types.FunctionType, + types.GetSetDescriptorType, + types.MemberDescriptorType, + MethodDescriptorType, + WrapperDescriptorType, + ClassMethodDescriptorType, + staticmethod, + classmethod, +) + + +def safe_getattr(obj, name, default=_sentinel): + try: + attr, is_get_descriptor = getattr_static(obj, name) + except AttributeError: + if default is _sentinel: + raise + return default + else: + if isinstance(attr, ALLOWED_DESCRIPTOR_ACCESS): + # In case of descriptors that have get methods we cannot return + # it's value, because that would mean code execution. + # Since it's an isinstance call, code execution is still possible, + # but this is not really a security feature, but much more of a + # safety feature. Code execution is basically always possible when + # a module is imported. This is here so people don't shoot + # themselves in the foot. + return getattr(obj, name) + return attr + + +SignatureParam = namedtuple( + 'SignatureParam', + 'name has_default default default_string has_annotation annotation annotation_string kind_name' +) + + +def compiled_objects_cache(attribute_name): + def decorator(func): + """ + This decorator caches just the ids, oopposed to caching the object itself. + Caching the id has the advantage that an object doesn't need to be + hashable. + """ + def wrapper(evaluator, obj, parent_context=None): + cache = getattr(evaluator, attribute_name) + # Do a very cheap form of caching here. + key = id(obj) + try: + cache[key] + return cache[key][0] + except KeyError: + # TODO wuaaaarrghhhhhhhh + if attribute_name == 'mixed_cache': + result = func(evaluator, obj, parent_context) + else: + result = func(evaluator, obj) + # Need to cache all of them, otherwise the id could be overwritten. + cache[key] = result, obj, parent_context + return result + return wrapper + + return decorator + + +def create_access(evaluator, obj): + return evaluator.compiled_subprocess.get_or_create_access_handle(obj) + + +def load_module(evaluator, dotted_name, sys_path): + temp, sys.path = sys.path, sys_path + try: + __import__(dotted_name) + except ImportError: + # If a module is "corrupt" or not really a Python module or whatever. + print('Module %s not importable in path %s.' % (dotted_name, sys_path), file=sys.stderr) + return None + except Exception: + # Since __import__ pretty much makes code execution possible, just + # catch any error here and print it. + import traceback + print("Cannot import:\n%s" % traceback.format_exc(), file=sys.stderr) + return None + finally: + sys.path = temp + + # Just access the cache after import, because of #59 as well as the very + # complicated import structure of Python. + module = sys.modules[dotted_name] + return create_access_path(evaluator, module) + + +class AccessPath(object): + def __init__(self, accesses): + self.accesses = accesses + + # Writing both of these methods here looks a bit ridiculous. However with + # the differences of Python 2/3 it's actually necessary, because we will + # otherwise have a accesses attribute that is bytes instead of unicode. + def __getstate__(self): + return self.accesses + + def __setstate__(self, value): + self.accesses = value + + +def create_access_path(evaluator, obj): + access = create_access(evaluator, obj) + return AccessPath(access.get_access_path_tuples()) + + +def _force_unicode_decorator(func): + return lambda *args, **kwargs: force_unicode(func(*args, **kwargs)) + + +def get_api_type(obj): + if inspect.isclass(obj): + return u'class' + elif inspect.ismodule(obj): + return u'module' + elif inspect.isbuiltin(obj) or inspect.ismethod(obj) \ + or inspect.ismethoddescriptor(obj) or inspect.isfunction(obj): + return u'function' + # Everything else... + return u'instance' + + +class DirectObjectAccess(object): + def __init__(self, evaluator, obj): + self._evaluator = evaluator + self._obj = obj + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.get_repr()) + + def _create_access(self, obj): + return create_access(self._evaluator, obj) + + def _create_access_path(self, obj): + return create_access_path(self._evaluator, obj) + + def py__bool__(self): + return bool(self._obj) + + def py__file__(self): + try: + return self._obj.__file__ + except AttributeError: + return None + + def py__doc__(self): + return force_unicode(inspect.getdoc(self._obj)) or u'' + + def py__name__(self): + if not _is_class_instance(self._obj) or \ + inspect.ismethoddescriptor(self._obj): # slots + cls = self._obj + else: + try: + cls = self._obj.__class__ + except AttributeError: + # happens with numpy.core.umath._UFUNC_API (you get it + # automatically by doing `import numpy`. + return None + + try: + return force_unicode(cls.__name__) + except AttributeError: + return None + + def py__mro__accesses(self): + return tuple(self._create_access_path(cls) for cls in self._obj.__mro__[1:]) + + def py__getitem__all_values(self): + if isinstance(self._obj, dict): + return [self._create_access_path(v) for v in self._obj.values()] + return self.py__iter__list() + + def py__simple_getitem__(self, index): + if type(self._obj) not in ALLOWED_GETITEM_TYPES: + # Get rid of side effects, we won't call custom `__getitem__`s. + return None + + return self._create_access_path(self._obj[index]) + + def py__iter__list(self): + if not hasattr(self._obj, '__getitem__'): + return None + + if type(self._obj) not in ALLOWED_GETITEM_TYPES: + # Get rid of side effects, we won't call custom `__getitem__`s. + return [] + + lst = [] + for i, part in enumerate(self._obj): + if i > 20: + # Should not go crazy with large iterators + break + lst.append(self._create_access_path(part)) + return lst + + def py__class__(self): + return self._create_access_path(self._obj.__class__) + + def py__bases__(self): + return [self._create_access_path(base) for base in self._obj.__bases__] + + def py__path__(self): + return self._obj.__path__ + + @_force_unicode_decorator + def get_repr(self): + builtins = 'builtins', '__builtin__' + + if inspect.ismodule(self._obj): + return repr(self._obj) + # Try to avoid execution of the property. + if safe_getattr(self._obj, '__module__', default='') in builtins: + return repr(self._obj) + + type_ = type(self._obj) + if type_ == type: + return type.__repr__(self._obj) + + if safe_getattr(type_, '__module__', default='') in builtins: + # Allow direct execution of repr for builtins. + return repr(self._obj) + return object.__repr__(self._obj) + + def is_class(self): + return inspect.isclass(self._obj) + + def is_module(self): + return inspect.ismodule(self._obj) + + def is_instance(self): + return _is_class_instance(self._obj) + + def ismethoddescriptor(self): + return inspect.ismethoddescriptor(self._obj) + + def get_qualified_names(self): + def try_to_get_name(obj): + return getattr(obj, '__qualname__', getattr(obj, '__name__', None)) + + if self.is_module(): + return () + name = try_to_get_name(self._obj) + if name is None: + name = try_to_get_name(type(self._obj)) + if name is None: + return () + return tuple(name.split('.')) + + def dir(self): + return list(map(force_unicode, dir(self._obj))) + + def has_iter(self): + try: + iter(self._obj) + return True + except TypeError: + return False + + def is_allowed_getattr(self, name): + # TODO this API is ugly. + try: + attr, is_get_descriptor = getattr_static(self._obj, name) + except AttributeError: + return False, False + else: + if is_get_descriptor and type(attr) not in ALLOWED_DESCRIPTOR_ACCESS: + # In case of descriptors that have get methods we cannot return + # it's value, because that would mean code execution. + return True, True + return True, False + + def getattr_paths(self, name, default=_sentinel): + try: + return_obj = getattr(self._obj, name) + except Exception as e: + if default is _sentinel: + if isinstance(e, AttributeError): + # Happens e.g. in properties of + # PyQt4.QtGui.QStyleOptionComboBox.currentText + # -> just set it to None + raise + # Just in case anything happens, return an AttributeError. It + # should not crash. + raise AttributeError + return_obj = default + access = self._create_access(return_obj) + if inspect.ismodule(return_obj): + return [access] + + module = inspect.getmodule(return_obj) + if module is None: + module = inspect.getmodule(type(return_obj)) + if module is None: + module = builtins + return [self._create_access(module), access] + + def get_safe_value(self): + if type(self._obj) in (bool, bytes, float, int, str, unicode, slice): + return self._obj + raise ValueError("Object is type %s and not simple" % type(self._obj)) + + def get_api_type(self): + return get_api_type(self._obj) + + def get_access_path_tuples(self): + accesses = [create_access(self._evaluator, o) for o in self._get_objects_path()] + return [(access.py__name__(), access) for access in accesses] + + def _get_objects_path(self): + def get(): + obj = self._obj + yield obj + try: + obj = obj.__objclass__ + except AttributeError: + pass + else: + yield obj + + try: + # Returns a dotted string path. + imp_plz = obj.__module__ + except AttributeError: + # Unfortunately in some cases like `int` there's no __module__ + if not inspect.ismodule(obj): + yield builtins + else: + if imp_plz is None: + # Happens for example in `(_ for _ in []).send.__module__`. + yield builtins + else: + try: + yield sys.modules[imp_plz] + except KeyError: + # __module__ can be something arbitrary that doesn't exist. + yield builtins + + return list(reversed(list(get()))) + + def execute_operation(self, other_access_handle, operator): + other_access = other_access_handle.access + op = _OPERATORS[operator] + return self._create_access_path(op(self._obj, other_access._obj)) + + def needs_type_completions(self): + return inspect.isclass(self._obj) and self._obj != type + + def get_signature_params(self): + return [ + SignatureParam( + name=p.name, + has_default=p.default is not p.empty, + default=self._create_access_path(p.default), + default_string=repr(p.default), + has_annotation=p.annotation is not p.empty, + annotation=self._create_access_path(p.annotation), + annotation_string=str(p.default), + kind_name=str(p.kind) + ) for p in self._get_signature().parameters.values() + ] + + def _get_signature(self): + obj = self._obj + if py_version < 33: + raise ValueError("inspect.signature was introduced in 3.3") + if py_version == 34: + # In 3.4 inspect.signature are wrong for str and int. This has + # been fixed in 3.5. The signature of object is returned, + # because no signature was found for str. Here we imitate 3.5 + # logic and just ignore the signature if the magic methods + # don't match object. + # 3.3 doesn't even have the logic and returns nothing for str + # and classes that inherit from object. + user_def = inspect._signature_get_user_defined_method + if (inspect.isclass(obj) + and not user_def(type(obj), '__init__') + and not user_def(type(obj), '__new__') + and (obj.__init__ != object.__init__ + or obj.__new__ != object.__new__)): + raise ValueError + + try: + return inspect.signature(obj) + except (RuntimeError, TypeError): + # Reading the code of the function in Python 3.6 implies there are + # at least these errors that might occur if something is wrong with + # the signature. In that case we just want a simple escape for now. + raise ValueError + + def get_return_annotation(self): + try: + o = self._obj.__annotations__.get('return') + except AttributeError: + return None + + if o is None: + return None + + return self._create_access_path(o) + + def negate(self): + return self._create_access_path(-self._obj) + + def get_dir_infos(self): + """ + Used to return a couple of infos that are needed when accessing the sub + objects of an objects + """ + # TODO is_allowed_getattr might raise an AttributeError + tuples = dict( + (force_unicode(name), self.is_allowed_getattr(name)) + for name in self.dir() + ) + return self.needs_type_completions(), tuples + + +def _is_class_instance(obj): + """Like inspect.* methods.""" + try: + cls = obj.__class__ + except AttributeError: + return False + else: + return cls != type and not issubclass(cls, NOT_CLASS_TYPES) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/context.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/context.py new file mode 100644 index 0000000..731fce0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/context.py @@ -0,0 +1,541 @@ +""" +Imitate the parser representation. +""" +import re +from functools import partial + +from jedi import debug +from jedi.evaluate.utils import to_list +from jedi._compatibility import force_unicode, Parameter, cast_path +from jedi.cache import underscore_memoization, memoize_method +from jedi.evaluate.filters import AbstractFilter +from jedi.evaluate.names import AbstractNameDefinition, ContextNameMixin, \ + ParamNameInterface +from jedi.evaluate.base_context import Context, ContextSet, NO_CONTEXTS +from jedi.evaluate.lazy_context import LazyKnownContext +from jedi.evaluate.compiled.access import _sentinel +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate.helpers import reraise_getitem_errors +from jedi.evaluate.signature import BuiltinSignature + + +class CheckAttribute(object): + """Raises an AttributeError if the attribute X isn't available.""" + def __init__(self, check_name=None): + # Remove the py in front of e.g. py__call__. + self.check_name = check_name + + def __call__(self, func): + self.func = func + if self.check_name is None: + self.check_name = force_unicode(func.__name__[2:]) + return self + + def __get__(self, instance, owner): + if instance is None: + return self + + # This might raise an AttributeError. That's wanted. + instance.access_handle.getattr_paths(self.check_name) + return partial(self.func, instance) + + +class CompiledObject(Context): + def __init__(self, evaluator, access_handle, parent_context=None): + super(CompiledObject, self).__init__(evaluator, parent_context) + self.access_handle = access_handle + + def py__call__(self, arguments): + return_annotation = self.access_handle.get_return_annotation() + if return_annotation is not None: + # TODO the return annotation may also be a string. + return create_from_access_path(self.evaluator, return_annotation).execute_annotation() + + try: + self.access_handle.getattr_paths(u'__call__') + except AttributeError: + return super(CompiledObject, self).py__call__(arguments) + else: + if self.access_handle.is_class(): + from jedi.evaluate.context import CompiledInstance + return ContextSet([ + CompiledInstance(self.evaluator, self.parent_context, self, arguments) + ]) + else: + return ContextSet(self._execute_function(arguments)) + + @CheckAttribute() + def py__class__(self): + return create_from_access_path(self.evaluator, self.access_handle.py__class__()) + + @CheckAttribute() + def py__mro__(self): + return (self,) + tuple( + create_from_access_path(self.evaluator, access) + for access in self.access_handle.py__mro__accesses() + ) + + @CheckAttribute() + def py__bases__(self): + return tuple( + create_from_access_path(self.evaluator, access) + for access in self.access_handle.py__bases__() + ) + + @CheckAttribute() + def py__path__(self): + return map(cast_path, self.access_handle.py__path__()) + + @property + def string_names(self): + # For modules + name = self.py__name__() + if name is None: + return () + return tuple(name.split('.')) + + def get_qualified_names(self): + return self.access_handle.get_qualified_names() + + def py__bool__(self): + return self.access_handle.py__bool__() + + def py__file__(self): + return cast_path(self.access_handle.py__file__()) + + def is_class(self): + return self.access_handle.is_class() + + def is_module(self): + return self.access_handle.is_module() + + def is_compiled(self): + return True + + def is_stub(self): + return False + + def is_instance(self): + return self.access_handle.is_instance() + + def py__doc__(self): + return self.access_handle.py__doc__() + + @to_list + def get_param_names(self): + try: + signature_params = self.access_handle.get_signature_params() + except ValueError: # Has no signature + params_str, ret = self._parse_function_doc() + if not params_str: + tokens = [] + else: + tokens = params_str.split(',') + if self.access_handle.ismethoddescriptor(): + tokens.insert(0, 'self') + for p in tokens: + name, _, default = p.strip().partition('=') + yield UnresolvableParamName(self, name, default) + else: + for signature_param in signature_params: + yield SignatureParamName(self, signature_param) + + def get_signatures(self): + _, return_string = self._parse_function_doc() + return [BuiltinSignature(self, return_string)] + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.access_handle.get_repr()) + + @underscore_memoization + def _parse_function_doc(self): + doc = self.py__doc__() + if doc is None: + return '', '' + + return _parse_function_doc(doc) + + @property + def api_type(self): + return self.access_handle.get_api_type() + + @underscore_memoization + def _cls(self): + """ + We used to limit the lookups for instantiated objects like list(), but + this is not the case anymore. Python itself + """ + # Ensures that a CompiledObject is returned that is not an instance (like list) + return self + + def get_filters(self, search_global=False, is_instance=False, + until_position=None, origin_scope=None): + yield self._ensure_one_filter(is_instance) + + @memoize_method + def _ensure_one_filter(self, is_instance): + """ + search_global shouldn't change the fact that there's one dict, this way + there's only one `object`. + """ + return CompiledObjectFilter(self.evaluator, self, is_instance) + + @CheckAttribute(u'__getitem__') + def py__simple_getitem__(self, index): + with reraise_getitem_errors(IndexError, KeyError, TypeError): + access = self.access_handle.py__simple_getitem__(index) + if access is None: + return NO_CONTEXTS + + return ContextSet([create_from_access_path(self.evaluator, access)]) + + def py__getitem__(self, index_context_set, contextualized_node): + all_access_paths = self.access_handle.py__getitem__all_values() + if all_access_paths is None: + # This means basically that no __getitem__ has been defined on this + # object. + return super(CompiledObject, self).py__getitem__(index_context_set, contextualized_node) + return ContextSet( + create_from_access_path(self.evaluator, access) + for access in all_access_paths + ) + + def py__iter__(self, contextualized_node=None): + # Python iterators are a bit strange, because there's no need for + # the __iter__ function as long as __getitem__ is defined (it will + # just start with __getitem__(0). This is especially true for + # Python 2 strings, where `str.__iter__` is not even defined. + if not self.access_handle.has_iter(): + for x in super(CompiledObject, self).py__iter__(contextualized_node): + yield x + + access_path_list = self.access_handle.py__iter__list() + if access_path_list is None: + # There is no __iter__ method on this object. + return + + for access in access_path_list: + yield LazyKnownContext(create_from_access_path(self.evaluator, access)) + + def py__name__(self): + return self.access_handle.py__name__() + + @property + def name(self): + name = self.py__name__() + if name is None: + name = self.access_handle.get_repr() + return CompiledContextName(self, name) + + def _execute_function(self, params): + from jedi.evaluate import docstrings + from jedi.evaluate.compiled import builtin_from_name + if self.api_type != 'function': + return + + for name in self._parse_function_doc()[1].split(): + try: + # TODO wtf is this? this is exactly the same as the thing + # below. It uses getattr as well. + self.evaluator.builtins_module.access_handle.getattr_paths(name) + except AttributeError: + continue + else: + bltn_obj = builtin_from_name(self.evaluator, name) + for result in self.evaluator.execute(bltn_obj, params): + yield result + for type_ in docstrings.infer_return_types(self): + yield type_ + + def get_safe_value(self, default=_sentinel): + try: + return self.access_handle.get_safe_value() + except ValueError: + if default == _sentinel: + raise + return default + + def execute_operation(self, other, operator): + return create_from_access_path( + self.evaluator, + self.access_handle.execute_operation(other.access_handle, operator) + ) + + def negate(self): + return create_from_access_path(self.evaluator, self.access_handle.negate()) + + def get_metaclasses(self): + return NO_CONTEXTS + + +class CompiledName(AbstractNameDefinition): + def __init__(self, evaluator, parent_context, name): + self._evaluator = evaluator + self.parent_context = parent_context + self.string_name = name + + def _get_qualified_names(self): + parent_qualified_names = self.parent_context.get_qualified_names() + return parent_qualified_names + (self.string_name,) + + def __repr__(self): + try: + name = self.parent_context.name # __name__ is not defined all the time + except AttributeError: + name = None + return '<%s: (%s).%s>' % (self.__class__.__name__, name, self.string_name) + + @property + def api_type(self): + api = self.infer() + # If we can't find the type, assume it is an instance variable + if not api: + return "instance" + return next(iter(api)).api_type + + @underscore_memoization + def infer(self): + return ContextSet([_create_from_name( + self._evaluator, self.parent_context, self.string_name + )]) + + +class SignatureParamName(ParamNameInterface, AbstractNameDefinition): + def __init__(self, compiled_obj, signature_param): + self.parent_context = compiled_obj.parent_context + self._signature_param = signature_param + + @property + def string_name(self): + return self._signature_param.name + + def to_string(self): + s = self._kind_string() + self.string_name + if self._signature_param.has_annotation: + s += ': ' + self._signature_param.annotation_string + if self._signature_param.has_default: + s += '=' + self._signature_param.default_string + return s + + def get_kind(self): + return getattr(Parameter, self._signature_param.kind_name) + + def infer(self): + p = self._signature_param + evaluator = self.parent_context.evaluator + contexts = NO_CONTEXTS + if p.has_default: + contexts = ContextSet([create_from_access_path(evaluator, p.default)]) + if p.has_annotation: + annotation = create_from_access_path(evaluator, p.annotation) + contexts |= annotation.execute_evaluated() + return contexts + + +class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition): + def __init__(self, compiled_obj, name, default): + self.parent_context = compiled_obj.parent_context + self.string_name = name + self._default = default + + def get_kind(self): + return Parameter.POSITIONAL_ONLY + + def to_string(self): + string = self.string_name + if self._default: + string += '=' + self._default + return string + + def infer(self): + return NO_CONTEXTS + + +class CompiledContextName(ContextNameMixin, AbstractNameDefinition): + def __init__(self, context, name): + self.string_name = name + self._context = context + self.parent_context = context.parent_context + + +class EmptyCompiledName(AbstractNameDefinition): + """ + Accessing some names will raise an exception. To avoid not having any + completions, just give Jedi the option to return this object. It infers to + nothing. + """ + def __init__(self, evaluator, name): + self.parent_context = evaluator.builtins_module + self.string_name = name + + def infer(self): + return NO_CONTEXTS + + +class CompiledObjectFilter(AbstractFilter): + name_class = CompiledName + + def __init__(self, evaluator, compiled_object, is_instance=False): + self._evaluator = evaluator + self.compiled_object = compiled_object + self.is_instance = is_instance + + def get(self, name): + return self._get( + name, + lambda: self.compiled_object.access_handle.is_allowed_getattr(name), + lambda: self.compiled_object.access_handle.dir(), + check_has_attribute=True + ) + + def _get(self, name, allowed_getattr_callback, dir_callback, check_has_attribute=False): + """ + To remove quite a few access calls we introduced the callback here. + """ + has_attribute, is_descriptor = allowed_getattr_callback() + if check_has_attribute and not has_attribute: + return [] + + # Always use unicode objects in Python 2 from here. + name = force_unicode(name) + + if (is_descriptor and not self._evaluator.allow_descriptor_getattr) or not has_attribute: + return [self._get_cached_name(name, is_empty=True)] + + if self.is_instance and name not in dir_callback(): + return [] + return [self._get_cached_name(name)] + + @memoize_method + def _get_cached_name(self, name, is_empty=False): + if is_empty: + return EmptyCompiledName(self._evaluator, name) + else: + return self._create_name(name) + + def values(self): + from jedi.evaluate.compiled import builtin_from_name + names = [] + needs_type_completions, dir_infos = self.compiled_object.access_handle.get_dir_infos() + for name in dir_infos: + names += self._get( + name, + lambda: dir_infos[name], + lambda: dir_infos.keys(), + ) + + # ``dir`` doesn't include the type names. + if not self.is_instance and needs_type_completions: + for filter in builtin_from_name(self._evaluator, u'type').get_filters(): + names += filter.values() + return names + + def _create_name(self, name): + return self.name_class(self._evaluator, self.compiled_object, name) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.compiled_object) + + +docstr_defaults = { + 'floating point number': u'float', + 'character': u'str', + 'integer': u'int', + 'dictionary': u'dict', + 'string': u'str', +} + + +def _parse_function_doc(doc): + """ + Takes a function and returns the params and return value as a tuple. + This is nothing more than a docstring parser. + + TODO docstrings like utime(path, (atime, mtime)) and a(b [, b]) -> None + TODO docstrings like 'tuple of integers' + """ + doc = force_unicode(doc) + # parse round parentheses: def func(a, (b,c)) + try: + count = 0 + start = doc.index('(') + for i, s in enumerate(doc[start:]): + if s == '(': + count += 1 + elif s == ')': + count -= 1 + if count == 0: + end = start + i + break + param_str = doc[start + 1:end] + except (ValueError, UnboundLocalError): + # ValueError for doc.index + # UnboundLocalError for undefined end in last line + debug.dbg('no brackets found - no param') + end = 0 + param_str = u'' + else: + # remove square brackets, that show an optional param ( = None) + def change_options(m): + args = m.group(1).split(',') + for i, a in enumerate(args): + if a and '=' not in a: + args[i] += '=None' + return ','.join(args) + + while True: + param_str, changes = re.subn(r' ?\[([^\[\]]+)\]', + change_options, param_str) + if changes == 0: + break + param_str = param_str.replace('-', '_') # see: isinstance.__doc__ + + # parse return value + r = re.search(u'-[>-]* ', doc[end:end + 7]) + if r is None: + ret = u'' + else: + index = end + r.end() + # get result type, which can contain newlines + pattern = re.compile(r'(,\n|[^\n-])+') + ret_str = pattern.match(doc, index).group(0).strip() + # New object -> object() + ret_str = re.sub(r'[nN]ew (.*)', r'\1()', ret_str) + + ret = docstr_defaults.get(ret_str, ret_str) + + return param_str, ret + + +def _create_from_name(evaluator, compiled_object, name): + access_paths = compiled_object.access_handle.getattr_paths(name, default=None) + parent_context = compiled_object + if parent_context.is_class(): + parent_context = parent_context.parent_context + + context = None + for access_path in access_paths: + context = create_cached_compiled_object( + evaluator, access_path, parent_context=context + ) + return context + + +def _normalize_create_args(func): + """The cache doesn't care about keyword vs. normal args.""" + def wrapper(evaluator, obj, parent_context=None): + return func(evaluator, obj, parent_context) + return wrapper + + +def create_from_access_path(evaluator, access_path): + parent_context = None + for name, access in access_path.accesses: + parent_context = create_cached_compiled_object(evaluator, access, parent_context) + return parent_context + + +@_normalize_create_args +@evaluator_function_cache() +def create_cached_compiled_object(evaluator, access_handle, parent_context): + return CompiledObject(evaluator, access_handle, parent_context) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/getattr_static.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/getattr_static.py new file mode 100644 index 0000000..946ac09 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/getattr_static.py @@ -0,0 +1,176 @@ +""" +A static version of getattr. +This is a backport of the Python 3 code with a little bit of additional +information returned to enable Jedi to make decisions. +""" + +import types + +from jedi._compatibility import py_version + +_sentinel = object() + + +def _check_instance(obj, attr): + instance_dict = {} + try: + instance_dict = object.__getattribute__(obj, "__dict__") + except AttributeError: + pass + return dict.get(instance_dict, attr, _sentinel) + + +def _check_class(klass, attr): + for entry in _static_getmro(klass): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr] + except KeyError: + pass + return _sentinel + + +def _is_type(obj): + try: + _static_getmro(obj) + except TypeError: + return False + return True + + +def _shadowed_dict_newstyle(klass): + dict_attr = type.__dict__["__dict__"] + for entry in _static_getmro(klass): + try: + class_dict = dict_attr.__get__(entry)["__dict__"] + except KeyError: + pass + else: + if not (type(class_dict) is types.GetSetDescriptorType and + class_dict.__name__ == "__dict__" and + class_dict.__objclass__ is entry): + return class_dict + return _sentinel + + +def _static_getmro_newstyle(klass): + return type.__dict__['__mro__'].__get__(klass) + + +if py_version >= 30: + _shadowed_dict = _shadowed_dict_newstyle + _get_type = type + _static_getmro = _static_getmro_newstyle +else: + def _shadowed_dict(klass): + """ + In Python 2 __dict__ is not overwritable: + + class Foo(object): pass + setattr(Foo, '__dict__', 4) + + Traceback (most recent call last): + File "", line 1, in + TypeError: __dict__ must be a dictionary object + + It applies to both newstyle and oldstyle classes: + + class Foo(object): pass + setattr(Foo, '__dict__', 4) + Traceback (most recent call last): + File "", line 1, in + AttributeError: attribute '__dict__' of 'type' objects is not writable + + It also applies to instances of those objects. However to keep things + straight forward, newstyle classes always use the complicated way of + accessing it while oldstyle classes just use getattr. + """ + if type(klass) is _oldstyle_class_type: + return getattr(klass, '__dict__', _sentinel) + return _shadowed_dict_newstyle(klass) + + class _OldStyleClass: + pass + + _oldstyle_instance_type = type(_OldStyleClass()) + _oldstyle_class_type = type(_OldStyleClass) + + def _get_type(obj): + type_ = object.__getattribute__(obj, '__class__') + if type_ is _oldstyle_instance_type: + # Somehow for old style classes we need to access it directly. + return obj.__class__ + return type_ + + def _static_getmro(klass): + if type(klass) is _oldstyle_class_type: + def oldstyle_mro(klass): + """ + Oldstyle mro is a really simplistic way of look up mro: + https://stackoverflow.com/questions/54867/what-is-the-difference-between-old-style-and-new-style-classes-in-python + """ + yield klass + for base in klass.__bases__: + for yield_from in oldstyle_mro(base): + yield yield_from + + return oldstyle_mro(klass) + + return _static_getmro_newstyle(klass) + + +def _safe_hasattr(obj, name): + return _check_class(_get_type(obj), name) is not _sentinel + + +def _safe_is_data_descriptor(obj): + return _safe_hasattr(obj, '__set__') or _safe_hasattr(obj, '__delete__') + + +def getattr_static(obj, attr, default=_sentinel): + """Retrieve attributes without triggering dynamic lookup via the + descriptor protocol, __getattr__ or __getattribute__. + + Note: this function may not be able to retrieve all attributes + that getattr can fetch (like dynamically created attributes) + and may find attributes that getattr can't (like descriptors + that raise AttributeError). It can also return descriptor objects + instead of instance members in some cases. See the + documentation for details. + + Returns a tuple `(attr, is_get_descriptor)`. is_get_descripter means that + the attribute is a descriptor that has a `__get__` attribute. + """ + instance_result = _sentinel + if not _is_type(obj): + klass = _get_type(obj) + dict_attr = _shadowed_dict(klass) + if (dict_attr is _sentinel or type(dict_attr) is types.MemberDescriptorType): + instance_result = _check_instance(obj, attr) + else: + klass = obj + + klass_result = _check_class(klass, attr) + + if instance_result is not _sentinel and klass_result is not _sentinel: + if _safe_hasattr(klass_result, '__get__') \ + and _safe_is_data_descriptor(klass_result): + # A get/set descriptor has priority over everything. + return klass_result, True + + if instance_result is not _sentinel: + return instance_result, False + if klass_result is not _sentinel: + return klass_result, _safe_hasattr(klass_result, '__get__') + + if obj is klass: + # for types we check the metaclass too + for entry in _static_getmro(type(klass)): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr], False + except KeyError: + pass + if default is not _sentinel: + return default, False + raise AttributeError(attr) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/mixed.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/mixed.py new file mode 100644 index 0000000..37d9fbe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/mixed.py @@ -0,0 +1,291 @@ +""" +Used only for REPL Completion. +""" + +import inspect +import os +import sys + +from jedi.parser_utils import get_cached_code_lines + +from jedi import settings +from jedi.evaluate import compiled +from jedi.cache import underscore_memoization +from jedi.file_io import FileIO +from jedi.evaluate.base_context import ContextSet, ContextWrapper +from jedi.evaluate.helpers import SimpleGetItemNotFound +from jedi.evaluate.context import ModuleContext +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate.compiled.getattr_static import getattr_static +from jedi.evaluate.compiled.access import compiled_objects_cache, \ + ALLOWED_GETITEM_TYPES, get_api_type +from jedi.evaluate.compiled.context import create_cached_compiled_object +from jedi.evaluate.gradual.conversion import to_stub + +_sentinel = object() + + +class MixedObject(ContextWrapper): + """ + A ``MixedObject`` is used in two ways: + + 1. It uses the default logic of ``parser.python.tree`` objects, + 2. except for getattr calls. The names dicts are generated in a fashion + like ``CompiledObject``. + + This combined logic makes it possible to provide more powerful REPL + completion. It allows side effects that are not noticable with the default + parser structure to still be completeable. + + The biggest difference from CompiledObject to MixedObject is that we are + generally dealing with Python code and not with C code. This will generate + fewer special cases, because we in Python you don't have the same freedoms + to modify the runtime. + """ + def __init__(self, compiled_object, tree_context): + super(MixedObject, self).__init__(tree_context) + self.compiled_object = compiled_object + self.access_handle = compiled_object.access_handle + + def get_filters(self, *args, **kwargs): + yield MixedObjectFilter(self.evaluator, self) + + def get_signatures(self): + # Prefer `inspect.signature` over somehow analyzing Python code. It + # should be very precise, especially for stuff like `partial`. + return self.compiled_object.get_signatures() + + def py__call__(self, arguments): + return (to_stub(self._wrapped_context) or self._wrapped_context).py__call__(arguments) + + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + return self.compiled_object.get_safe_value() + else: + return self.compiled_object.get_safe_value(default) + + def py__simple_getitem__(self, index): + python_object = self.compiled_object.access_handle.access._obj + if type(python_object) in ALLOWED_GETITEM_TYPES: + return self.compiled_object.py__simple_getitem__(index) + raise SimpleGetItemNotFound + + def __repr__(self): + return '<%s: %s>' % ( + type(self).__name__, + self.access_handle.get_repr() + ) + + +class MixedName(compiled.CompiledName): + """ + The ``CompiledName._compiled_object`` is our MixedObject. + """ + @property + def start_pos(self): + contexts = list(self.infer()) + if not contexts: + # This means a start_pos that doesn't exist (compiled objects). + return 0, 0 + return contexts[0].name.start_pos + + @start_pos.setter + def start_pos(self, value): + # Ignore the __init__'s start_pos setter call. + pass + + @underscore_memoization + def infer(self): + # TODO use logic from compiled.CompiledObjectFilter + access_paths = self.parent_context.access_handle.getattr_paths( + self.string_name, + default=None + ) + assert len(access_paths) + contexts = [None] + for access in access_paths: + contexts = ContextSet.from_sets( + _create(self._evaluator, access, parent_context=c) + if c is None or isinstance(c, MixedObject) + else ContextSet({create_cached_compiled_object(c.evaluator, access, c)}) + for c in contexts + ) + return contexts + + @property + def api_type(self): + return next(iter(self.infer())).api_type + + +class MixedObjectFilter(compiled.CompiledObjectFilter): + name_class = MixedName + + +@evaluator_function_cache() +def _load_module(evaluator, path): + module_node = evaluator.parse( + path=path, + cache=True, + diff_cache=settings.fast_parser, + cache_path=settings.cache_directory + ).get_root_node() + # python_module = inspect.getmodule(python_object) + # TODO we should actually make something like this possible. + #evaluator.modules[python_module.__name__] = module_node + return module_node + + +def _get_object_to_check(python_object): + """Check if inspect.getfile has a chance to find the source.""" + if sys.version_info[0] > 2: + python_object = inspect.unwrap(python_object) + + if (inspect.ismodule(python_object) or + inspect.isclass(python_object) or + inspect.ismethod(python_object) or + inspect.isfunction(python_object) or + inspect.istraceback(python_object) or + inspect.isframe(python_object) or + inspect.iscode(python_object)): + return python_object + + try: + return python_object.__class__ + except AttributeError: + raise TypeError # Prevents computation of `repr` within inspect. + + +def _find_syntax_node_name(evaluator, python_object): + original_object = python_object + try: + python_object = _get_object_to_check(python_object) + path = inspect.getsourcefile(python_object) + except TypeError: + # The type might not be known (e.g. class_with_dict.__weakref__) + return None + if path is None or not os.path.exists(path): + # The path might not exist or be e.g. . + return None + + file_io = FileIO(path) + module_node = _load_module(evaluator, path) + + if inspect.ismodule(python_object): + # We don't need to check names for modules, because there's not really + # a way to write a module in a module in Python (and also __name__ can + # be something like ``email.utils``). + code_lines = get_cached_code_lines(evaluator.grammar, path) + return module_node, module_node, file_io, code_lines + + try: + name_str = python_object.__name__ + except AttributeError: + # Stuff like python_function.__code__. + return None + + if name_str == '': + return None # It's too hard to find lambdas. + + # Doesn't always work (e.g. os.stat_result) + names = module_node.get_used_names().get(name_str, []) + # Only functions and classes are relevant. If a name e.g. points to an + # import, it's probably a builtin (like collections.deque) and needs to be + # ignored. + names = [ + n for n in names + if n.parent.type in ('funcdef', 'classdef') and n.parent.name == n + ] + if not names: + return None + + try: + code = python_object.__code__ + # By using the line number of a code object we make the lookup in a + # file pretty easy. There's still a possibility of people defining + # stuff like ``a = 3; foo(a); a = 4`` on the same line, but if people + # do so we just don't care. + line_nr = code.co_firstlineno + except AttributeError: + pass + else: + line_names = [name for name in names if name.start_pos[0] == line_nr] + # There's a chance that the object is not available anymore, because + # the code has changed in the background. + if line_names: + names = line_names + + code_lines = get_cached_code_lines(evaluator.grammar, path) + # It's really hard to actually get the right definition, here as a last + # resort we just return the last one. This chance might lead to odd + # completions at some points but will lead to mostly correct type + # inference, because people tend to define a public name in a module only + # once. + tree_node = names[-1].parent + if tree_node.type == 'funcdef' and get_api_type(original_object) == 'instance': + # If an instance is given and we're landing on a function (e.g. + # partial in 3.5), something is completely wrong and we should not + # return that. + return None + return module_node, tree_node, file_io, code_lines + + +@compiled_objects_cache('mixed_cache') +def _create(evaluator, access_handle, parent_context, *args): + compiled_object = create_cached_compiled_object( + evaluator, + access_handle, + parent_context=parent_context and parent_context.compiled_object + ) + + # TODO accessing this is bad, but it probably doesn't matter that much, + # because we're working with interpreteters only here. + python_object = access_handle.access._obj + result = _find_syntax_node_name(evaluator, python_object) + if result is None: + # TODO Care about generics from stuff like `[1]` and don't return like this. + if type(python_object) in (dict, list, tuple): + return ContextSet({compiled_object}) + + tree_contexts = to_stub(compiled_object) + if not tree_contexts: + return ContextSet({compiled_object}) + else: + module_node, tree_node, file_io, code_lines = result + + if parent_context is None: + # TODO this __name__ is probably wrong. + name = compiled_object.get_root_context().py__name__() + string_names = tuple(name.split('.')) + module_context = ModuleContext( + evaluator, module_node, + file_io=file_io, + string_names=string_names, + code_lines=code_lines, + is_package=hasattr(compiled_object, 'py__path__'), + ) + if name is not None: + evaluator.module_cache.add(string_names, ContextSet([module_context])) + else: + if parent_context.tree_node.get_root_node() != module_node: + # This happens e.g. when __module__ is wrong, or when using + # TypeVar('foo'), where Jedi uses 'foo' as the name and + # Python's TypeVar('foo').__module__ will be typing. + return ContextSet({compiled_object}) + module_context = parent_context.get_root_context() + + tree_contexts = ContextSet({ + module_context.create_context( + tree_node, + node_is_context=True, + node_is_object=True + ) + }) + if tree_node.type == 'classdef': + if not access_handle.is_class(): + # Is an instance, not a class. + tree_contexts = tree_contexts.execute_evaluated() + + return ContextSet( + MixedObject(compiled_object, tree_context=tree_context) + for tree_context in tree_contexts + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__init__.py new file mode 100644 index 0000000..dea2f66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__init__.py @@ -0,0 +1,406 @@ +""" +Makes it possible to do the compiled analysis in a subprocess. This has two +goals: + +1. Making it safer - Segfaults and RuntimeErrors as well as stdout/stderr can + be ignored and dealt with. +2. Make it possible to handle different Python versions as well as virtualenvs. +""" + +import os +import sys +import subprocess +import socket +import errno +import traceback +from functools import partial +from threading import Thread +try: + from queue import Queue, Empty +except ImportError: + from Queue import Queue, Empty # python 2.7 + +from jedi._compatibility import queue, is_py3, force_unicode, \ + pickle_dump, pickle_load, GeneralizedPopen, weakref +from jedi import debug +from jedi.cache import memoize_method +from jedi.evaluate.compiled.subprocess import functions +from jedi.evaluate.compiled.access import DirectObjectAccess, AccessPath, \ + SignatureParam +from jedi.api.exceptions import InternalError + + +_MAIN_PATH = os.path.join(os.path.dirname(__file__), '__main__.py') + + +def _enqueue_output(out, queue): + for line in iter(out.readline, b''): + queue.put(line) + + +def _add_stderr_to_debug(stderr_queue): + while True: + # Try to do some error reporting from the subprocess and print its + # stderr contents. + try: + line = stderr_queue.get_nowait() + line = line.decode('utf-8', 'replace') + debug.warning('stderr output: %s' % line.rstrip('\n')) + except Empty: + break + + +def _get_function(name): + return getattr(functions, name) + + +def _cleanup_process(process, thread): + try: + process.kill() + process.wait() + except OSError: + # Raised if the process is already killed. + pass + thread.join() + for stream in [process.stdin, process.stdout, process.stderr]: + try: + stream.close() + except OSError: + # Raised if the stream is broken. + pass + + +class _EvaluatorProcess(object): + def __init__(self, evaluator): + self._evaluator_weakref = weakref.ref(evaluator) + self._evaluator_id = id(evaluator) + self._handles = {} + + def get_or_create_access_handle(self, obj): + id_ = id(obj) + try: + return self.get_access_handle(id_) + except KeyError: + access = DirectObjectAccess(self._evaluator_weakref(), obj) + handle = AccessHandle(self, access, id_) + self.set_access_handle(handle) + return handle + + def get_access_handle(self, id_): + return self._handles[id_] + + def set_access_handle(self, handle): + self._handles[handle.id] = handle + + +class EvaluatorSameProcess(_EvaluatorProcess): + """ + Basically just an easy access to functions.py. It has the same API + as EvaluatorSubprocess and does the same thing without using a subprocess. + This is necessary for the Interpreter process. + """ + def __getattr__(self, name): + return partial(_get_function(name), self._evaluator_weakref()) + + +class EvaluatorSubprocess(_EvaluatorProcess): + def __init__(self, evaluator, compiled_subprocess): + super(EvaluatorSubprocess, self).__init__(evaluator) + self._used = False + self._compiled_subprocess = compiled_subprocess + + def __getattr__(self, name): + func = _get_function(name) + + def wrapper(*args, **kwargs): + self._used = True + + result = self._compiled_subprocess.run( + self._evaluator_weakref(), + func, + args=args, + kwargs=kwargs, + ) + # IMO it should be possible to create a hook in pickle.load to + # mess with the loaded objects. However it's extremely complicated + # to work around this so just do it with this call. ~ dave + return self._convert_access_handles(result) + + return wrapper + + def _convert_access_handles(self, obj): + if isinstance(obj, SignatureParam): + return SignatureParam(*self._convert_access_handles(tuple(obj))) + elif isinstance(obj, tuple): + return tuple(self._convert_access_handles(o) for o in obj) + elif isinstance(obj, list): + return [self._convert_access_handles(o) for o in obj] + elif isinstance(obj, AccessHandle): + try: + # Rewrite the access handle to one we're already having. + obj = self.get_access_handle(obj.id) + except KeyError: + obj.add_subprocess(self) + self.set_access_handle(obj) + elif isinstance(obj, AccessPath): + return AccessPath(self._convert_access_handles(obj.accesses)) + return obj + + def __del__(self): + if self._used and not self._compiled_subprocess.is_crashed: + self._compiled_subprocess.delete_evaluator(self._evaluator_id) + + +class CompiledSubprocess(object): + is_crashed = False + # Start with 2, gets set after _get_info. + _pickle_protocol = 2 + + def __init__(self, executable): + self._executable = executable + self._evaluator_deletion_queue = queue.deque() + self._cleanup_callable = lambda: None + + def __repr__(self): + pid = os.getpid() + return '<%s _executable=%r, _pickle_protocol=%r, is_crashed=%r, pid=%r>' % ( + self.__class__.__name__, + self._executable, + self._pickle_protocol, + self.is_crashed, + pid, + ) + + @memoize_method + def _get_process(self): + debug.dbg('Start environment subprocess %s', self._executable) + parso_path = sys.modules['parso'].__file__ + args = ( + self._executable, + _MAIN_PATH, + os.path.dirname(os.path.dirname(parso_path)), + '.'.join(str(x) for x in sys.version_info[:3]), + ) + process = GeneralizedPopen( + args, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + # Use system default buffering on Python 2 to improve performance + # (this is already the case on Python 3). + bufsize=-1 + ) + self._stderr_queue = Queue() + self._stderr_thread = t = Thread( + target=_enqueue_output, + args=(process.stderr, self._stderr_queue) + ) + t.daemon = True + t.start() + # Ensure the subprocess is properly cleaned up when the object + # is garbage collected. + self._cleanup_callable = weakref.finalize(self, + _cleanup_process, + process, + t) + return process + + def run(self, evaluator, function, args=(), kwargs={}): + # Delete old evaluators. + while True: + try: + evaluator_id = self._evaluator_deletion_queue.pop() + except IndexError: + break + else: + self._send(evaluator_id, None) + + assert callable(function) + return self._send(id(evaluator), function, args, kwargs) + + def get_sys_path(self): + return self._send(None, functions.get_sys_path, (), {}) + + def _kill(self): + self.is_crashed = True + self._cleanup_callable() + + def _send(self, evaluator_id, function, args=(), kwargs={}): + if self.is_crashed: + raise InternalError("The subprocess %s has crashed." % self._executable) + + if not is_py3: + # Python 2 compatibility + kwargs = {force_unicode(key): value for key, value in kwargs.items()} + + data = evaluator_id, function, args, kwargs + try: + pickle_dump(data, self._get_process().stdin, self._pickle_protocol) + except (socket.error, IOError) as e: + # Once Python2 will be removed we can just use `BrokenPipeError`. + # Also, somehow in windows it returns EINVAL instead of EPIPE if + # the subprocess dies. + if e.errno not in (errno.EPIPE, errno.EINVAL): + # Not a broken pipe + raise + self._kill() + raise InternalError("The subprocess %s was killed. Maybe out of memory?" + % self._executable) + + try: + is_exception, traceback, result = pickle_load(self._get_process().stdout) + except EOFError as eof_error: + try: + stderr = self._get_process().stderr.read().decode('utf-8', 'replace') + except Exception as exc: + stderr = '' % exc + self._kill() + _add_stderr_to_debug(self._stderr_queue) + raise InternalError( + "The subprocess %s has crashed (%r, stderr=%s)." % ( + self._executable, + eof_error, + stderr, + )) + + _add_stderr_to_debug(self._stderr_queue) + + if is_exception: + # Replace the attribute error message with a the traceback. It's + # way more informative. + result.args = (traceback,) + raise result + return result + + def delete_evaluator(self, evaluator_id): + """ + Currently we are not deleting evalutors instantly. They only get + deleted once the subprocess is used again. It would probably a better + solution to move all of this into a thread. However, the memory usage + of a single evaluator shouldn't be that high. + """ + # With an argument - the evaluator gets deleted. + self._evaluator_deletion_queue.append(evaluator_id) + + +class Listener(object): + def __init__(self, pickle_protocol): + self._evaluators = {} + # TODO refactor so we don't need to process anymore just handle + # controlling. + self._process = _EvaluatorProcess(Listener) + self._pickle_protocol = pickle_protocol + + def _get_evaluator(self, function, evaluator_id): + from jedi.evaluate import Evaluator + + try: + evaluator = self._evaluators[evaluator_id] + except KeyError: + from jedi.api.environment import InterpreterEnvironment + evaluator = Evaluator( + # The project is not actually needed. Nothing should need to + # access it. + project=None, + environment=InterpreterEnvironment() + ) + self._evaluators[evaluator_id] = evaluator + return evaluator + + def _run(self, evaluator_id, function, args, kwargs): + if evaluator_id is None: + return function(*args, **kwargs) + elif function is None: + del self._evaluators[evaluator_id] + else: + evaluator = self._get_evaluator(function, evaluator_id) + + # Exchange all handles + args = list(args) + for i, arg in enumerate(args): + if isinstance(arg, AccessHandle): + args[i] = evaluator.compiled_subprocess.get_access_handle(arg.id) + for key, value in kwargs.items(): + if isinstance(value, AccessHandle): + kwargs[key] = evaluator.compiled_subprocess.get_access_handle(value.id) + + return function(evaluator, *args, **kwargs) + + def listen(self): + stdout = sys.stdout + # Mute stdout. Nobody should actually be able to write to it, + # because stdout is used for IPC. + sys.stdout = open(os.devnull, 'w') + stdin = sys.stdin + if sys.version_info[0] > 2: + stdout = stdout.buffer + stdin = stdin.buffer + # Python 2 opens streams in text mode on Windows. Set stdout and stdin + # to binary mode. + elif sys.platform == 'win32': + import msvcrt + msvcrt.setmode(stdout.fileno(), os.O_BINARY) + msvcrt.setmode(stdin.fileno(), os.O_BINARY) + + while True: + try: + payload = pickle_load(stdin) + except EOFError: + # It looks like the parent process closed. + # Don't make a big fuss here and just exit. + exit(0) + try: + result = False, None, self._run(*payload) + except Exception as e: + result = True, traceback.format_exc(), e + + pickle_dump(result, stdout, self._pickle_protocol) + + +class AccessHandle(object): + def __init__(self, subprocess, access, id_): + self.access = access + self._subprocess = subprocess + self.id = id_ + + def add_subprocess(self, subprocess): + self._subprocess = subprocess + + def __repr__(self): + try: + detail = self.access + except AttributeError: + detail = '#' + str(self.id) + return '<%s of %s>' % (self.__class__.__name__, detail) + + def __getstate__(self): + return self.id + + def __setstate__(self, state): + self.id = state + + def __getattr__(self, name): + if name in ('id', 'access') or name.startswith('_'): + raise AttributeError("Something went wrong with unpickling") + + #if not is_py3: print >> sys.stderr, name + #print('getattr', name, file=sys.stderr) + return partial(self._workaround, force_unicode(name)) + + def _workaround(self, name, *args, **kwargs): + """ + TODO Currently we're passing slice objects around. This should not + happen. They are also the only unhashable objects that we're passing + around. + """ + if args and isinstance(args[0], slice): + return self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) + return self._cached_results(name, *args, **kwargs) + + @memoize_method + def _cached_results(self, name, *args, **kwargs): + #if type(self._subprocess) == EvaluatorSubprocess: + #print(name, args, kwargs, + #self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) + #) + return self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__main__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__main__.py new file mode 100644 index 0000000..4be2820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/__main__.py @@ -0,0 +1,55 @@ +import os +import sys + + +def _get_paths(): + # Get the path to jedi. + _d = os.path.dirname + _jedi_path = _d(_d(_d(_d(_d(__file__))))) + _parso_path = sys.argv[1] + # The paths are the directory that jedi and parso lie in. + return {'jedi': _jedi_path, 'parso': _parso_path} + + +# Remove the first entry, because it's simply a directory entry that equals +# this directory. +del sys.path[0] + +if sys.version_info > (3, 4): + from importlib.machinery import PathFinder + + class _ExactImporter(object): + def __init__(self, path_dct): + self._path_dct = path_dct + + def find_module(self, fullname, path=None): + if path is None and fullname in self._path_dct: + p = self._path_dct[fullname] + loader = PathFinder.find_module(fullname, path=[p]) + return loader + return None + + # Try to import jedi/parso. + sys.meta_path.insert(0, _ExactImporter(_get_paths())) + from jedi.evaluate.compiled import subprocess # NOQA + sys.meta_path.pop(0) +else: + import imp + + def load(name): + paths = list(_get_paths().values()) + fp, pathname, description = imp.find_module(name, paths) + return imp.load_module(name, fp, pathname, description) + + load('parso') + load('jedi') + from jedi.evaluate.compiled import subprocess # NOQA + +from jedi._compatibility import highest_pickle_protocol # noqa: E402 + + +# Retrieve the pickle protocol. +host_sys_version = [int(x) for x in sys.argv[2].split('.')] +pickle_protocol = highest_pickle_protocol([sys.version_info, host_sys_version]) +# And finally start the client. +subprocess.Listener(pickle_protocol=pickle_protocol).listen() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/functions.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/functions.py new file mode 100644 index 0000000..b3fdac0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/compiled/subprocess/functions.py @@ -0,0 +1,86 @@ +from __future__ import print_function +import sys +import os + +from jedi._compatibility import find_module, cast_path, force_unicode, \ + iter_modules, all_suffixes +from jedi.evaluate.compiled import access +from jedi import parser_utils + + +def get_sys_path(): + return list(map(cast_path, sys.path)) + + +def load_module(evaluator, **kwargs): + return access.load_module(evaluator, **kwargs) + + +def get_compiled_method_return(evaluator, id, attribute, *args, **kwargs): + handle = evaluator.compiled_subprocess.get_access_handle(id) + return getattr(handle.access, attribute)(*args, **kwargs) + + +def create_simple_object(evaluator, obj): + return access.create_access_path(evaluator, obj) + + +def get_module_info(evaluator, sys_path=None, full_name=None, **kwargs): + """ + Returns Tuple[Union[NamespaceInfo, FileIO, None], Optional[bool]] + """ + if sys_path is not None: + sys.path, temp = sys_path, sys.path + try: + return find_module(full_name=full_name, **kwargs) + except ImportError: + return None, None + finally: + if sys_path is not None: + sys.path = temp + + +def list_module_names(evaluator, search_path): + return [ + force_unicode(name) + for module_loader, name, is_pkg in iter_modules(search_path) + ] + + +def get_builtin_module_names(evaluator): + return list(map(force_unicode, sys.builtin_module_names)) + + +def _test_raise_error(evaluator, exception_type): + """ + Raise an error to simulate certain problems for unit tests. + """ + raise exception_type + + +def _test_print(evaluator, stderr=None, stdout=None): + """ + Force some prints in the subprocesses. This exists for unit tests. + """ + if stderr is not None: + print(stderr, file=sys.stderr) + sys.stderr.flush() + if stdout is not None: + print(stdout) + sys.stdout.flush() + + +def _get_init_path(directory_path): + """ + The __init__ file can be searched in a directory. If found return it, else + None. + """ + for suffix in all_suffixes(): + path = os.path.join(directory_path, '__init__' + suffix) + if os.path.exists(path): + return path + return None + + +def safe_literal_eval(evaluator, value): + return parser_utils.safe_literal_eval(value) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/__init__.py new file mode 100644 index 0000000..56f6495 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/__init__.py @@ -0,0 +1,6 @@ +from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context.klass import ClassContext +from jedi.evaluate.context.function import FunctionContext, \ + MethodContext, FunctionExecutionContext +from jedi.evaluate.context.instance import AnonymousInstance, BoundMethod, \ + CompiledInstance, AbstractInstanceContext, TreeInstance diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/decorator.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/decorator.py new file mode 100644 index 0000000..317c5f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/decorator.py @@ -0,0 +1,15 @@ +''' +Decorators are not really contexts, however we need some wrappers to improve +docstrings and other things around decorators. +''' + +from jedi.evaluate.base_context import ContextWrapper + + +class Decoratee(ContextWrapper): + def __init__(self, wrapped_context, original_context): + self._wrapped_context = wrapped_context + self._original_context = original_context + + def py__doc__(self): + return self._original_context.py__doc__() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/function.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/function.py new file mode 100644 index 0000000..203dcf0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/function.py @@ -0,0 +1,444 @@ +from parso.python import tree + +from jedi._compatibility import use_metaclass +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import docstrings +from jedi.evaluate import flow_analysis +from jedi.evaluate import helpers +from jedi.evaluate.signature import TreeSignature +from jedi.evaluate.arguments import AnonymousArguments +from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter +from jedi.evaluate.names import ContextName, AbstractNameDefinition, ParamName +from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \ + ContextSet, TreeContext, ContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, \ + LazyTreeContext +from jedi.evaluate.context import iterable +from jedi import parser_utils +from jedi.evaluate.parser_cache import get_yield_exprs +from jedi.evaluate.helpers import contexts_from_qualified_names + + +class LambdaName(AbstractNameDefinition): + string_name = '' + api_type = u'function' + + def __init__(self, lambda_context): + self._lambda_context = lambda_context + self.parent_context = lambda_context.parent_context + + @property + def start_pos(self): + return self._lambda_context.tree_node.start_pos + + def infer(self): + return ContextSet([self._lambda_context]) + + +class FunctionAndClassBase(TreeContext): + def get_qualified_names(self): + if self.parent_context.is_class(): + n = self.parent_context.get_qualified_names() + if n is None: + # This means that the parent class lives within a function. + return None + return n + (self.py__name__(),) + elif self.parent_context.is_module(): + return (self.py__name__(),) + else: + return None + + +class FunctionMixin(object): + api_type = u'function' + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + if search_global: + yield ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ) + else: + cls = self.py__class__() + for instance in cls.execute_evaluated(): + for filter in instance.get_filters(search_global=False, origin_scope=origin_scope): + yield filter + + def py__get__(self, instance, class_context): + from jedi.evaluate.context.instance import BoundMethod + if instance is None: + # Calling the Foo.bar results in the original bar function. + return ContextSet([self]) + return ContextSet([BoundMethod(instance, self)]) + + def get_param_names(self): + function_execution = self.get_function_execution() + return [ParamName(function_execution, param.name) + for param in self.tree_node.get_params()] + + @property + def name(self): + if self.tree_node.type == 'lambdef': + return LambdaName(self) + return ContextName(self, self.tree_node.name) + + def py__name__(self): + return self.name.string_name + + def py__call__(self, arguments): + function_execution = self.get_function_execution(arguments) + return function_execution.infer() + + def get_function_execution(self, arguments=None): + if arguments is None: + arguments = AnonymousArguments() + + return FunctionExecutionContext(self.evaluator, self.parent_context, self, arguments) + + def get_signatures(self): + return [TreeSignature(f) for f in self.get_signature_functions()] + + +class FunctionContext(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndClassBase)): + """ + Needed because of decorators. Decorators are evaluated here. + """ + def is_function(self): + return True + + @classmethod + def from_context(cls, context, tree_node): + def create(tree_node): + if context.is_class(): + return MethodContext( + context.evaluator, + context, + parent_context=parent_context, + tree_node=tree_node + ) + else: + return cls( + context.evaluator, + parent_context=parent_context, + tree_node=tree_node + ) + + overloaded_funcs = list(_find_overload_functions(context, tree_node)) + + parent_context = context + while parent_context.is_class() or parent_context.is_instance(): + parent_context = parent_context.parent_context + + function = create(tree_node) + + if overloaded_funcs: + return OverloadedFunctionContext( + function, + [create(f) for f in overloaded_funcs] + ) + return function + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'FunctionType') + return c + + def get_default_param_context(self): + return self.parent_context + + def get_signature_functions(self): + return [self] + + +class MethodContext(FunctionContext): + def __init__(self, evaluator, class_context, *args, **kwargs): + super(MethodContext, self).__init__(evaluator, *args, **kwargs) + self.class_context = class_context + + def get_default_param_context(self): + return self.class_context + + def get_qualified_names(self): + # Need to implement this, because the parent context of a method + # context is not the class context but the module. + names = self.class_context.get_qualified_names() + if names is None: + return None + return names + (self.py__name__(),) + + +class FunctionExecutionContext(TreeContext): + """ + This class is used to evaluate functions and their returns. + + This is the most complicated class, because it contains the logic to + transfer parameters. It is even more complicated, because there may be + multiple calls to functions and recursion has to be avoided. But this is + responsibility of the decorators. + """ + function_execution_filter = FunctionExecutionFilter + + def __init__(self, evaluator, parent_context, function_context, var_args): + super(FunctionExecutionContext, self).__init__( + evaluator, + parent_context, + function_context.tree_node, + ) + self.function_context = function_context + self.var_args = var_args + + @evaluator_method_cache(default=NO_CONTEXTS) + @recursion.execution_recursion_decorator() + def get_return_values(self, check_yields=False): + funcdef = self.tree_node + if funcdef.type == 'lambdef': + return self.eval_node(funcdef.children[-1]) + + if check_yields: + context_set = NO_CONTEXTS + returns = get_yield_exprs(self.evaluator, funcdef) + else: + returns = funcdef.iter_return_stmts() + from jedi.evaluate.gradual.annotation import infer_return_types + context_set = infer_return_types(self) + if context_set: + # If there are annotations, prefer them over anything else. + # This will make it faster. + return context_set + context_set |= docstrings.infer_return_types(self.function_context) + + for r in returns: + check = flow_analysis.reachability_check(self, funcdef, r) + if check is flow_analysis.UNREACHABLE: + debug.dbg('Return unreachable: %s', r) + else: + if check_yields: + context_set |= ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self._get_yield_lazy_context(r) + ) + else: + try: + children = r.children + except AttributeError: + ctx = compiled.builtin_from_name(self.evaluator, u'None') + context_set |= ContextSet([ctx]) + else: + context_set |= self.eval_node(children[1]) + if check is flow_analysis.REACHABLE: + debug.dbg('Return reachable: %s', r) + break + return context_set + + def _get_yield_lazy_context(self, yield_expr): + if yield_expr.type == 'keyword': + # `yield` just yields None. + ctx = compiled.builtin_from_name(self.evaluator, u'None') + yield LazyKnownContext(ctx) + return + + node = yield_expr.children[1] + if node.type == 'yield_arg': # It must be a yield from. + cn = ContextualizedNode(self, node.children[1]) + for lazy_context in cn.infer().iterate(cn): + yield lazy_context + else: + yield LazyTreeContext(self, node) + + @recursion.execution_recursion_decorator(default=iter([])) + def get_yield_lazy_contexts(self, is_async=False): + # TODO: if is_async, wrap yield statements in Awaitable/async_generator_asend + for_parents = [(y, tree.search_ancestor(y, 'for_stmt', 'funcdef', + 'while_stmt', 'if_stmt')) + for y in get_yield_exprs(self.evaluator, self.tree_node)] + + # Calculate if the yields are placed within the same for loop. + yields_order = [] + last_for_stmt = None + for yield_, for_stmt in for_parents: + # For really simple for loops we can predict the order. Otherwise + # we just ignore it. + parent = for_stmt.parent + if parent.type == 'suite': + parent = parent.parent + if for_stmt.type == 'for_stmt' and parent == self.tree_node \ + and parser_utils.for_stmt_defines_one_name(for_stmt): # Simplicity for now. + if for_stmt == last_for_stmt: + yields_order[-1][1].append(yield_) + else: + yields_order.append((for_stmt, [yield_])) + elif for_stmt == self.tree_node: + yields_order.append((None, [yield_])) + else: + types = self.get_return_values(check_yields=True) + if types: + yield LazyKnownContexts(types) + return + last_for_stmt = for_stmt + + for for_stmt, yields in yields_order: + if for_stmt is None: + # No for_stmt, just normal yields. + for yield_ in yields: + for result in self._get_yield_lazy_context(yield_): + yield result + else: + input_node = for_stmt.get_testlist() + cn = ContextualizedNode(self, input_node) + ordered = cn.infer().iterate(cn) + ordered = list(ordered) + for lazy_context in ordered: + dct = {str(for_stmt.children[1].value): lazy_context.infer()} + with helpers.predefine_names(self, for_stmt, dct): + for yield_in_same_for_stmt in yields: + for result in self._get_yield_lazy_context(yield_in_same_for_stmt): + yield result + + def merge_yield_contexts(self, is_async=False): + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self.get_yield_lazy_contexts() + ) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield self.function_execution_filter(self.evaluator, self, + until_position=until_position, + origin_scope=origin_scope) + + @evaluator_method_cache() + def get_executed_params_and_issues(self): + return self.var_args.get_executed_params_and_issues(self) + + def matches_signature(self): + executed_params, issues = self.get_executed_params_and_issues() + if issues: + return False + + matches = all(executed_param.matches_signature() + for executed_param in executed_params) + if debug.enable_notice: + signature = parser_utils.get_call_signature(self.tree_node) + if matches: + debug.dbg("Overloading match: %s@%s (%s)", + signature, self.tree_node.start_pos[0], self.var_args, color='BLUE') + else: + debug.dbg("Overloading no match: %s@%s (%s)", + signature, self.tree_node.start_pos[0], self.var_args, color='BLUE') + return matches + + def infer(self): + """ + Created to be used by inheritance. + """ + evaluator = self.evaluator + is_coroutine = self.tree_node.parent.type in ('async_stmt', 'async_funcdef') + is_generator = bool(get_yield_exprs(evaluator, self.tree_node)) + from jedi.evaluate.gradual.typing import GenericClass + + if is_coroutine: + if is_generator: + if evaluator.environment.version_info < (3, 6): + return NO_CONTEXTS + async_generator_classes = evaluator.typing_module \ + .py__getattribute__('AsyncGenerator') + + yield_contexts = self.merge_yield_contexts(is_async=True) + # The contravariant doesn't seem to be defined. + generics = (yield_contexts.py__class__(), NO_CONTEXTS) + return ContextSet( + # In Python 3.6 AsyncGenerator is still a class. + GenericClass(c, generics) + for c in async_generator_classes + ).execute_annotation() + else: + if evaluator.environment.version_info < (3, 5): + return NO_CONTEXTS + async_classes = evaluator.typing_module.py__getattribute__('Coroutine') + return_contexts = self.get_return_values() + # Only the first generic is relevant. + generics = (return_contexts.py__class__(), NO_CONTEXTS, NO_CONTEXTS) + return ContextSet( + GenericClass(c, generics) for c in async_classes + ).execute_annotation() + else: + if is_generator: + return ContextSet([iterable.Generator(evaluator, self)]) + else: + return self.get_return_values() + + +class OverloadedFunctionContext(FunctionMixin, ContextWrapper): + def __init__(self, function, overloaded_functions): + super(OverloadedFunctionContext, self).__init__(function) + self._overloaded_functions = overloaded_functions + + def py__call__(self, arguments): + debug.dbg("Execute overloaded function %s", self._wrapped_context, color='BLUE') + function_executions = [] + context_set = NO_CONTEXTS + matched = False + for f in self._overloaded_functions: + function_execution = f.get_function_execution(arguments) + function_executions.append(function_execution) + if function_execution.matches_signature(): + matched = True + return function_execution.infer() + + if matched: + return context_set + + if self.evaluator.is_analysis: + # In this case we want precision. + return NO_CONTEXTS + return ContextSet.from_sets(fe.infer() for fe in function_executions) + + def get_signature_functions(self): + return self._overloaded_functions + + +def _find_overload_functions(context, tree_node): + def _is_overload_decorated(funcdef): + if funcdef.parent.type == 'decorated': + decorators = funcdef.parent.children[0] + if decorators.type == 'decorator': + decorators = [decorators] + else: + decorators = decorators.children + for decorator in decorators: + dotted_name = decorator.children[1] + if dotted_name.type == 'name' and dotted_name.value == 'overload': + # TODO check with contexts if it's the right overload + return True + return False + + if tree_node.type == 'lambdef': + return + + if _is_overload_decorated(tree_node): + yield tree_node + + while True: + filter = ParserTreeFilter( + context.evaluator, + context, + until_position=tree_node.start_pos + ) + names = filter.get(tree_node.name.value) + assert isinstance(names, list) + if not names: + break + + found = False + for name in names: + funcdef = name.tree_name.parent + if funcdef.type == 'funcdef' and _is_overload_decorated(funcdef): + tree_node = funcdef + found = True + yield funcdef + + if not found: + break diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/instance.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/instance.py new file mode 100644 index 0000000..e00ff03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/instance.py @@ -0,0 +1,531 @@ +from abc import abstractproperty + +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate.compiled.context import CompiledObjectFilter +from jedi.evaluate.helpers import contexts_from_qualified_names +from jedi.evaluate.filters import AbstractFilter +from jedi.evaluate.names import ContextName, TreeNameDefinition +from jedi.evaluate.base_context import Context, NO_CONTEXTS, ContextSet, \ + iterator_to_context_set, ContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.arguments import AnonymousArguments, \ + ValuesArguments, TreeArgumentsWrapper +from jedi.evaluate.context.function import \ + FunctionContext, FunctionMixin, OverloadedFunctionContext +from jedi.evaluate.context.klass import ClassContext, apply_py__get__, \ + ClassFilter +from jedi.evaluate.context import iterable +from jedi.parser_utils import get_parent_scope + + +class InstanceExecutedParam(object): + def __init__(self, instance, tree_param): + self._instance = instance + self._tree_param = tree_param + self.string_name = self._tree_param.name.value + + def infer(self): + return ContextSet([self._instance]) + + def matches_signature(self): + return True + + +class AnonymousInstanceArguments(AnonymousArguments): + def __init__(self, instance): + self._instance = instance + + def get_executed_params_and_issues(self, execution_context): + from jedi.evaluate.dynamic import search_params + tree_params = execution_context.tree_node.get_params() + if not tree_params: + return [], [] + + self_param = InstanceExecutedParam(self._instance, tree_params[0]) + if len(tree_params) == 1: + # If the only param is self, we don't need to try to find + # executions of this function, we have all the params already. + return [self_param], [] + executed_params = list(search_params( + execution_context.evaluator, + execution_context, + execution_context.tree_node + )) + executed_params[0] = self_param + return executed_params, [] + + +class AbstractInstanceContext(Context): + """ + This class is used to evaluate instances. + """ + api_type = u'instance' + + def __init__(self, evaluator, parent_context, class_context, var_args): + super(AbstractInstanceContext, self).__init__(evaluator, parent_context) + # Generated instances are classes that are just generated by self + # (No var_args) used. + self.class_context = class_context + self.var_args = var_args + + def is_instance(self): + return True + + def get_qualified_names(self): + return self.class_context.get_qualified_names() + + def get_annotated_class_object(self): + return self.class_context # This is the default. + + def py__call__(self, arguments): + names = self.get_function_slot_names(u'__call__') + if not names: + # Means the Instance is not callable. + return super(AbstractInstanceContext, self).py__call__(arguments) + + return ContextSet.from_sets(name.infer().execute(arguments) for name in names) + + def py__class__(self): + return self.class_context + + def py__bool__(self): + # Signalize that we don't know about the bool type. + return None + + def get_function_slot_names(self, name): + # Python classes don't look at the dictionary of the instance when + # looking up `__call__`. This is something that has to do with Python's + # internal slot system (note: not __slots__, but C slots). + for filter in self.get_filters(include_self_names=False): + names = filter.get(name) + if names: + return names + return [] + + def execute_function_slots(self, names, *evaluated_args): + return ContextSet.from_sets( + name.infer().execute_evaluated(*evaluated_args) + for name in names + ) + + def py__get__(self, obj, class_context): + """ + obj may be None. + """ + # Arguments in __get__ descriptors are obj, class. + # `method` is the new parent of the array, don't know if that's good. + names = self.get_function_slot_names(u'__get__') + if names: + if obj is None: + obj = compiled.builtin_from_name(self.evaluator, u'None') + return self.execute_function_slots(names, obj, class_context) + else: + return ContextSet([self]) + + def get_filters(self, search_global=None, until_position=None, + origin_scope=None, include_self_names=True): + class_context = self.get_annotated_class_object() + if include_self_names: + for cls in class_context.py__mro__(): + if not isinstance(cls, compiled.CompiledObject) \ + or cls.tree_node is not None: + # In this case we're excluding compiled objects that are + # not fake objects. It doesn't make sense for normal + # compiled objects to search for self variables. + yield SelfAttributeFilter(self.evaluator, self, cls, origin_scope) + + class_filters = class_context.get_filters( + search_global=False, + origin_scope=origin_scope, + is_instance=True, + ) + for f in class_filters: + if isinstance(f, ClassFilter): + yield InstanceClassFilter(self.evaluator, self, f) + elif isinstance(f, CompiledObjectFilter): + yield CompiledInstanceClassFilter(self.evaluator, self, f) + else: + # Propably from the metaclass. + yield f + + def py__getitem__(self, index_context_set, contextualized_node): + names = self.get_function_slot_names(u'__getitem__') + if not names: + return super(AbstractInstanceContext, self).py__getitem__( + index_context_set, + contextualized_node, + ) + + args = ValuesArguments([index_context_set]) + return ContextSet.from_sets(name.infer().execute(args) for name in names) + + def py__iter__(self, contextualized_node=None): + iter_slot_names = self.get_function_slot_names(u'__iter__') + if not iter_slot_names: + return super(AbstractInstanceContext, self).py__iter__(contextualized_node) + + def iterate(): + for generator in self.execute_function_slots(iter_slot_names): + if generator.is_instance() and not generator.is_compiled(): + # `__next__` logic. + if self.evaluator.environment.version_info.major == 2: + name = u'next' + else: + name = u'__next__' + next_slot_names = generator.get_function_slot_names(name) + if next_slot_names: + yield LazyKnownContexts( + generator.execute_function_slots(next_slot_names) + ) + else: + debug.warning('Instance has no __next__ function in %s.', generator) + else: + for lazy_context in generator.py__iter__(): + yield lazy_context + return iterate() + + @abstractproperty + def name(self): + pass + + def create_init_executions(self): + for name in self.get_function_slot_names(u'__init__'): + # TODO is this correct? I think we need to check for functions. + if isinstance(name, LazyInstanceClassName): + function = FunctionContext.from_context( + self.parent_context, + name.tree_name.parent + ) + bound_method = BoundMethod(self, function) + yield bound_method.get_function_execution(self.var_args) + + @evaluator_method_cache() + def create_instance_context(self, class_context, node): + if node.parent.type in ('funcdef', 'classdef'): + node = node.parent + scope = get_parent_scope(node) + if scope == class_context.tree_node: + return class_context + else: + parent_context = self.create_instance_context(class_context, scope) + if scope.type == 'funcdef': + func = FunctionContext.from_context( + parent_context, + scope, + ) + bound_method = BoundMethod(self, func) + if scope.name.value == '__init__' and parent_context == class_context: + return bound_method.get_function_execution(self.var_args) + else: + return bound_method.get_function_execution() + elif scope.type == 'classdef': + class_context = ClassContext(self.evaluator, parent_context, scope) + return class_context + elif scope.type in ('comp_for', 'sync_comp_for'): + # Comprehensions currently don't have a special scope in Jedi. + return self.create_instance_context(class_context, scope) + else: + raise NotImplementedError + return class_context + + def get_signatures(self): + call_funcs = self.py__getattribute__('__call__').py__get__(self, self.class_context) + return [s.bind(self) for s in call_funcs.get_signatures()] + + def __repr__(self): + return "<%s of %s(%s)>" % (self.__class__.__name__, self.class_context, + self.var_args) + + +class CompiledInstance(AbstractInstanceContext): + def __init__(self, evaluator, parent_context, class_context, var_args): + self._original_var_args = var_args + super(CompiledInstance, self).__init__(evaluator, parent_context, class_context, var_args) + + @property + def name(self): + return compiled.CompiledContextName(self, self.class_context.name.string_name) + + def get_first_non_keyword_argument_contexts(self): + key, lazy_context = next(self._original_var_args.unpack(), ('', None)) + if key is not None: + return NO_CONTEXTS + + return lazy_context.infer() + + def is_stub(self): + return False + + +class TreeInstance(AbstractInstanceContext): + def __init__(self, evaluator, parent_context, class_context, var_args): + # I don't think that dynamic append lookups should happen here. That + # sounds more like something that should go to py__iter__. + if class_context.py__name__() in ['list', 'set'] \ + and parent_context.get_root_context() == evaluator.builtins_module: + # compare the module path with the builtin name. + if settings.dynamic_array_additions: + var_args = iterable.get_dynamic_array_instance(self, var_args) + + super(TreeInstance, self).__init__(evaluator, parent_context, + class_context, var_args) + self.tree_node = class_context.tree_node + + @property + def name(self): + return ContextName(self, self.class_context.name.tree_name) + + # This can recurse, if the initialization of the class includes a reference + # to itself. + @evaluator_method_cache(default=None) + def _get_annotated_class_object(self): + from jedi.evaluate.gradual.annotation import py__annotations__, \ + infer_type_vars_for_execution + + for func in self._get_annotation_init_functions(): + # Just take the first result, it should always be one, because we + # control the typeshed code. + bound = BoundMethod(self, func) + execution = bound.get_function_execution(self.var_args) + if not execution.matches_signature(): + # First check if the signature even matches, if not we don't + # need to infer anything. + continue + + all_annotations = py__annotations__(execution.tree_node) + defined, = self.class_context.define_generics( + infer_type_vars_for_execution(execution, all_annotations), + ) + debug.dbg('Inferred instance context as %s', defined, color='BLUE') + return defined + return None + + def get_annotated_class_object(self): + return self._get_annotated_class_object() or self.class_context + + def _get_annotation_init_functions(self): + filter = next(self.class_context.get_filters()) + for init_name in filter.get('__init__'): + for init in init_name.infer(): + if init.is_function(): + for signature in init.get_signatures(): + yield signature.context + + +class AnonymousInstance(TreeInstance): + def __init__(self, evaluator, parent_context, class_context): + super(AnonymousInstance, self).__init__( + evaluator, + parent_context, + class_context, + var_args=AnonymousInstanceArguments(self), + ) + + def get_annotated_class_object(self): + return self.class_context # This is the default. + + +class CompiledInstanceName(compiled.CompiledName): + + def __init__(self, evaluator, instance, klass, name): + super(CompiledInstanceName, self).__init__( + evaluator, + klass.parent_context, + name.string_name + ) + self._instance = instance + self._class_member_name = name + + @iterator_to_context_set + def infer(self): + for result_context in self._class_member_name.infer(): + if result_context.api_type == 'function': + yield CompiledBoundMethod(result_context) + else: + yield result_context + + +class CompiledInstanceClassFilter(AbstractFilter): + name_class = CompiledInstanceName + + def __init__(self, evaluator, instance, f): + self._evaluator = evaluator + self._instance = instance + self._class_filter = f + + def get(self, name): + return self._convert(self._class_filter.get(name)) + + def values(self): + return self._convert(self._class_filter.values()) + + def _convert(self, names): + klass = self._class_filter.compiled_object + return [ + CompiledInstanceName(self._evaluator, self._instance, klass, n) + for n in names + ] + + +class BoundMethod(FunctionMixin, ContextWrapper): + def __init__(self, instance, function): + super(BoundMethod, self).__init__(function) + self.instance = instance + + def is_bound_method(self): + return True + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'MethodType') + return c + + def _get_arguments(self, arguments): + if arguments is None: + arguments = AnonymousInstanceArguments(self.instance) + + return InstanceArguments(self.instance, arguments) + + def get_function_execution(self, arguments=None): + arguments = self._get_arguments(arguments) + return super(BoundMethod, self).get_function_execution(arguments) + + def py__call__(self, arguments): + if isinstance(self._wrapped_context, OverloadedFunctionContext): + return self._wrapped_context.py__call__(self._get_arguments(arguments)) + + function_execution = self.get_function_execution(arguments) + return function_execution.infer() + + def get_signature_functions(self): + return [ + BoundMethod(self.instance, f) + for f in self._wrapped_context.get_signature_functions() + ] + + def get_signatures(self): + return [sig.bind(self) for sig in super(BoundMethod, self).get_signatures()] + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_context) + + +class CompiledBoundMethod(ContextWrapper): + def is_bound_method(self): + return True + + def get_signatures(self): + return [sig.bind(self) for sig in self._wrapped_context.get_signatures()] + + +class SelfName(TreeNameDefinition): + """ + This name calculates the parent_context lazily. + """ + def __init__(self, instance, class_context, tree_name): + self._instance = instance + self.class_context = class_context + self.tree_name = tree_name + + @property + def parent_context(self): + return self._instance.create_instance_context(self.class_context, self.tree_name) + + +class LazyInstanceClassName(object): + def __init__(self, instance, class_context, class_member_name): + self._instance = instance + self.class_context = class_context + self._class_member_name = class_member_name + + @iterator_to_context_set + def infer(self): + for result_context in self._class_member_name.infer(): + for c in apply_py__get__(result_context, self._instance, self.class_context): + yield c + + def __getattr__(self, name): + return getattr(self._class_member_name, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._class_member_name) + + +class InstanceClassFilter(AbstractFilter): + """ + This filter is special in that it uses the class filter and wraps the + resulting names in LazyINstanceClassName. The idea is that the class name + filtering can be very flexible and always be reflected in instances. + """ + def __init__(self, evaluator, instance, class_filter): + self._instance = instance + self._class_filter = class_filter + + def get(self, name): + return self._convert(self._class_filter.get(name, from_instance=True)) + + def values(self): + return self._convert(self._class_filter.values(from_instance=True)) + + def _convert(self, names): + return [LazyInstanceClassName(self._instance, self._class_filter.context, n) for n in names] + + def __repr__(self): + return '<%s for %s>' % (self.__class__.__name__, self._class_filter.context) + + +class SelfAttributeFilter(ClassFilter): + """ + This class basically filters all the use cases where `self.*` was assigned. + """ + name_class = SelfName + + def __init__(self, evaluator, context, class_context, origin_scope): + super(SelfAttributeFilter, self).__init__( + evaluator=evaluator, + context=context, + node_context=class_context, + origin_scope=origin_scope, + is_instance=True, + ) + self._class_context = class_context + + def _filter(self, names): + names = self._filter_self_names(names) + start, end = self._parser_scope.start_pos, self._parser_scope.end_pos + return [n for n in names if start < n.start_pos < end] + + def _filter_self_names(self, names): + for name in names: + trailer = name.parent + if trailer.type == 'trailer' \ + and len(trailer.parent.children) == 2 \ + and trailer.children[0] == '.': + if name.is_definition() and self._access_possible(name, from_instance=True): + # TODO filter non-self assignments. + yield name + + def _convert_names(self, names): + return [self.name_class(self.context, self._class_context, name) for name in names] + + def _check_flows(self, names): + return names + + +class InstanceArguments(TreeArgumentsWrapper): + def __init__(self, instance, arguments): + super(InstanceArguments, self).__init__(arguments) + self.instance = instance + + def unpack(self, func=None): + yield None, LazyKnownContext(self.instance) + for values in self._wrapped_arguments.unpack(func): + yield values + + def get_executed_params_and_issues(self, execution_context): + if isinstance(self._wrapped_arguments, AnonymousInstanceArguments): + return self._wrapped_arguments.get_executed_params_and_issues(execution_context) + + return super(InstanceArguments, self).get_executed_params_and_issues(execution_context) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/iterable.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/iterable.py new file mode 100644 index 0000000..bf69bde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/iterable.py @@ -0,0 +1,821 @@ +""" +Contains all classes and functions to deal with lists, dicts, generators and +iterators in general. + +Array modifications +******************* + +If the content of an array (``set``/``list``) is requested somewhere, the +current module will be checked for appearances of ``arr.append``, +``arr.insert``, etc. If the ``arr`` name points to an actual array, the +content will be added + +This can be really cpu intensive, as you can imagine. Because |jedi| has to +follow **every** ``append`` and check wheter it's the right array. However this +works pretty good, because in *slow* cases, the recursion detector and other +settings will stop this process. + +It is important to note that: + +1. Array modfications work only in the current module. +2. Jedi only checks Array additions; ``list.pop``, etc are ignored. +""" +import sys + +from jedi import debug +from jedi import settings +from jedi._compatibility import force_unicode, is_py3 +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate import recursion +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \ + LazyTreeContext +from jedi.evaluate.helpers import get_int_or_none, is_string, \ + predefine_names, evaluate_call_of_leaf, reraise_getitem_errors, \ + SimpleGetItemNotFound +from jedi.evaluate.utils import safe_property, to_list +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.filters import ParserTreeFilter, LazyAttributeOverwrite, \ + publish_method +from jedi.evaluate.base_context import ContextSet, Context, NO_CONTEXTS, \ + TreeContext, ContextualizedNode, iterate_contexts, HelperContextMixin, _sentinel +from jedi.parser_utils import get_sync_comp_fors + + +class IterableMixin(object): + def py__stop_iteration_returns(self): + return ContextSet([compiled.builtin_from_name(self.evaluator, u'None')]) + + # At the moment, safe values are simple values like "foo", 1 and not + # lists/dicts. Therefore as a small speed optimization we can just do the + # default instead of resolving the lazy wrapped contexts, that are just + # doing this in the end as well. + # This mostly speeds up patterns like `sys.version_info >= (3, 0)` in + # typeshed. + if sys.version_info[0] == 2: + # Python 2........... + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + raise ValueError("There exists no safe value for context %s" % self) + return default + else: + get_safe_value = Context.get_safe_value + + +class GeneratorBase(LazyAttributeOverwrite, IterableMixin): + array_type = None + + def _get_wrapped_context(self): + generator, = self.evaluator.typing_module \ + .py__getattribute__('Generator') \ + .execute_annotation() + return generator + + def is_instance(self): + return False + + def py__bool__(self): + return True + + @publish_method('__iter__') + def py__iter__(self, contextualized_node=None): + return ContextSet([self]) + + @publish_method('send') + @publish_method('next', python_version_match=2) + @publish_method('__next__', python_version_match=3) + def py__next__(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def py__stop_iteration_returns(self): + return ContextSet([compiled.builtin_from_name(self.evaluator, u'None')]) + + @property + def name(self): + return compiled.CompiledContextName(self, 'Generator') + + +class Generator(GeneratorBase): + """Handling of `yield` functions.""" + def __init__(self, evaluator, func_execution_context): + super(Generator, self).__init__(evaluator) + self._func_execution_context = func_execution_context + + def py__iter__(self, contextualized_node=None): + return self._func_execution_context.get_yield_lazy_contexts() + + def py__stop_iteration_returns(self): + return self._func_execution_context.get_return_values() + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._func_execution_context) + + +class CompForContext(TreeContext): + @classmethod + def from_comp_for(cls, parent_context, comp_for): + return cls(parent_context.evaluator, parent_context, comp_for) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield ParserTreeFilter(self.evaluator, self) + + +def comprehension_from_atom(evaluator, context, atom): + bracket = atom.children[0] + test_list_comp = atom.children[1] + + if bracket == '{': + if atom.children[1].children[1] == ':': + sync_comp_for = test_list_comp.children[3] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + + return DictComprehension( + evaluator, + context, + sync_comp_for_node=sync_comp_for, + key_node=test_list_comp.children[0], + value_node=test_list_comp.children[2], + ) + else: + cls = SetComprehension + elif bracket == '(': + cls = GeneratorComprehension + elif bracket == '[': + cls = ListComprehension + + sync_comp_for = test_list_comp.children[1] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + + return cls( + evaluator, + defining_context=context, + sync_comp_for_node=sync_comp_for, + entry_node=test_list_comp.children[0], + ) + + +class ComprehensionMixin(object): + @evaluator_method_cache() + def _get_comp_for_context(self, parent_context, comp_for): + return CompForContext.from_comp_for(parent_context, comp_for) + + def _nested(self, comp_fors, parent_context=None): + comp_for = comp_fors[0] + + is_async = comp_for.parent.type == 'comp_for' + + input_node = comp_for.children[3] + parent_context = parent_context or self._defining_context + input_types = parent_context.eval_node(input_node) + # TODO: simulate await if self.is_async + + cn = ContextualizedNode(parent_context, input_node) + iterated = input_types.iterate(cn, is_async=is_async) + exprlist = comp_for.children[1] + for i, lazy_context in enumerate(iterated): + types = lazy_context.infer() + dct = unpack_tuple_to_dict(parent_context, types, exprlist) + context_ = self._get_comp_for_context( + parent_context, + comp_for, + ) + with predefine_names(context_, comp_for, dct): + try: + for result in self._nested(comp_fors[1:], context_): + yield result + except IndexError: + iterated = context_.eval_node(self._entry_node) + if self.array_type == 'dict': + yield iterated, context_.eval_node(self._value_node) + else: + yield iterated + + @evaluator_method_cache(default=[]) + @to_list + def _iterate(self): + comp_fors = tuple(get_sync_comp_fors(self._sync_comp_for_node)) + for result in self._nested(comp_fors): + yield result + + def py__iter__(self, contextualized_node=None): + for set_ in self._iterate(): + yield LazyKnownContexts(set_) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._sync_comp_for_node) + + +class _DictMixin(object): + def _get_generics(self): + return tuple(c_set.py__class__() for c_set in self.get_mapping_item_contexts()) + + +class Sequence(LazyAttributeOverwrite, IterableMixin): + api_type = u'instance' + + @property + def name(self): + return compiled.CompiledContextName(self, self.array_type) + + def _get_generics(self): + return (self.merge_types_of_iterate().py__class__(),) + + def _get_wrapped_context(self): + from jedi.evaluate.gradual.typing import GenericClass + klass = compiled.builtin_from_name(self.evaluator, self.array_type) + c, = GenericClass(klass, self._get_generics()).execute_annotation() + return c + + def py__bool__(self): + return None # We don't know the length, because of appends. + + def py__class__(self): + return compiled.builtin_from_name(self.evaluator, self.array_type) + + @safe_property + def parent(self): + return self.evaluator.builtins_module + + def py__getitem__(self, index_context_set, contextualized_node): + if self.array_type == 'dict': + return self._dict_values() + return iterate_contexts(ContextSet([self])) + + +class _BaseComprehension(ComprehensionMixin): + def __init__(self, evaluator, defining_context, sync_comp_for_node, entry_node): + assert sync_comp_for_node.type == 'sync_comp_for' + super(_BaseComprehension, self).__init__(evaluator) + self._defining_context = defining_context + self._sync_comp_for_node = sync_comp_for_node + self._entry_node = entry_node + + +class ListComprehension(_BaseComprehension, Sequence): + array_type = u'list' + + def py__simple_getitem__(self, index): + if isinstance(index, slice): + return ContextSet([self]) + + all_types = list(self.py__iter__()) + with reraise_getitem_errors(IndexError, TypeError): + lazy_context = all_types[index] + return lazy_context.infer() + + +class SetComprehension(_BaseComprehension, Sequence): + array_type = u'set' + + +class GeneratorComprehension(_BaseComprehension, GeneratorBase): + pass + + +class DictComprehension(ComprehensionMixin, Sequence): + array_type = u'dict' + + def __init__(self, evaluator, defining_context, sync_comp_for_node, key_node, value_node): + assert sync_comp_for_node.type == 'sync_comp_for' + super(DictComprehension, self).__init__(evaluator) + self._defining_context = defining_context + self._sync_comp_for_node = sync_comp_for_node + self._entry_node = key_node + self._value_node = value_node + + def py__iter__(self, contextualized_node=None): + for keys, values in self._iterate(): + yield LazyKnownContexts(keys) + + def py__simple_getitem__(self, index): + for keys, values in self._iterate(): + for k in keys: + if isinstance(k, compiled.CompiledObject): + # Be careful in the future if refactoring, index could be a + # slice. + if k.get_safe_value(default=object()) == index: + return values + raise SimpleGetItemNotFound() + + def _dict_keys(self): + return ContextSet.from_sets(keys for keys, values in self._iterate()) + + def _dict_values(self): + return ContextSet.from_sets(values for keys, values in self._iterate()) + + @publish_method('values') + def _imitate_values(self): + lazy_context = LazyKnownContexts(self._dict_values()) + return ContextSet([FakeSequence(self.evaluator, u'list', [lazy_context])]) + + @publish_method('items') + def _imitate_items(self): + lazy_contexts = [ + LazyKnownContext( + FakeSequence( + self.evaluator, + u'tuple', + [LazyKnownContexts(key), + LazyKnownContexts(value)] + ) + ) + for key, value in self._iterate() + ] + + return ContextSet([FakeSequence(self.evaluator, u'list', lazy_contexts)]) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + def exact_key_items(self): + # NOTE: A smarter thing can probably done here to achieve better + # completions, but at least like this jedi doesn't crash + return [] + + +class SequenceLiteralContext(Sequence): + _TUPLE_LIKE = 'testlist_star_expr', 'testlist', 'subscriptlist' + mapping = {'(': u'tuple', + '[': u'list', + '{': u'set'} + + def __init__(self, evaluator, defining_context, atom): + super(SequenceLiteralContext, self).__init__(evaluator) + self.atom = atom + self._defining_context = defining_context + + if self.atom.type in self._TUPLE_LIKE: + self.array_type = u'tuple' + else: + self.array_type = SequenceLiteralContext.mapping[atom.children[0]] + """The builtin name of the array (list, set, tuple or dict).""" + + def py__simple_getitem__(self, index): + """Here the index is an int/str. Raises IndexError/KeyError.""" + if self.array_type == u'dict': + compiled_obj_index = compiled.create_simple_object(self.evaluator, index) + for key, value in self.get_tree_entries(): + for k in self._defining_context.eval_node(key): + try: + method = k.execute_operation + except AttributeError: + pass + else: + if method(compiled_obj_index, u'==').get_safe_value(): + return self._defining_context.eval_node(value) + raise SimpleGetItemNotFound('No key found in dictionary %s.' % self) + + if isinstance(index, slice): + return ContextSet([self]) + else: + with reraise_getitem_errors(TypeError, KeyError, IndexError): + node = self.get_tree_entries()[index] + return self._defining_context.eval_node(node) + + def py__iter__(self, contextualized_node=None): + """ + While values returns the possible values for any array field, this + function returns the value for a certain index. + """ + if self.array_type == u'dict': + # Get keys. + types = NO_CONTEXTS + for k, _ in self.get_tree_entries(): + types |= self._defining_context.eval_node(k) + # We don't know which dict index comes first, therefore always + # yield all the types. + for _ in types: + yield LazyKnownContexts(types) + else: + for node in self.get_tree_entries(): + if node == ':' or node.type == 'subscript': + # TODO this should probably use at least part of the code + # of eval_subscript_list. + yield LazyKnownContext(Slice(self._defining_context, None, None, None)) + else: + yield LazyTreeContext(self._defining_context, node) + for addition in check_array_additions(self._defining_context, self): + yield addition + + def py__len__(self): + # This function is not really used often. It's more of a try. + return len(self.get_tree_entries()) + + def _dict_values(self): + return ContextSet.from_sets( + self._defining_context.eval_node(v) + for k, v in self.get_tree_entries() + ) + + def get_tree_entries(self): + c = self.atom.children + + if self.atom.type in self._TUPLE_LIKE: + return c[::2] + + array_node = c[1] + if array_node in (']', '}', ')'): + return [] # Direct closing bracket, doesn't contain items. + + if array_node.type == 'testlist_comp': + # filter out (for now) pep 448 single-star unpacking + return [value for value in array_node.children[::2] + if value.type != "star_expr"] + elif array_node.type == 'dictorsetmaker': + kv = [] + iterator = iter(array_node.children) + for key in iterator: + if key == "**": + # dict with pep 448 double-star unpacking + # for now ignoring the values imported by ** + next(iterator) + next(iterator, None) # Possible comma. + else: + op = next(iterator, None) + if op is None or op == ',': + if key.type == "star_expr": + # pep 448 single-star unpacking + # for now ignoring values imported by * + pass + else: + kv.append(key) # A set. + else: + assert op == ':' # A dict. + kv.append((key, next(iterator))) + next(iterator, None) # Possible comma. + return kv + else: + if array_node.type == "star_expr": + # pep 448 single-star unpacking + # for now ignoring values imported by * + return [] + else: + return [array_node] + + def exact_key_items(self): + """ + Returns a generator of tuples like dict.items(), where the key is + resolved (as a string) and the values are still lazy contexts. + """ + for key_node, value in self.get_tree_entries(): + for key in self._defining_context.eval_node(key_node): + if is_string(key): + yield key.get_safe_value(), LazyTreeContext(self._defining_context, value) + + def __repr__(self): + return "<%s of %s>" % (self.__class__.__name__, self.atom) + + +class DictLiteralContext(_DictMixin, SequenceLiteralContext): + array_type = u'dict' + + def __init__(self, evaluator, defining_context, atom): + super(SequenceLiteralContext, self).__init__(evaluator) + self._defining_context = defining_context + self.atom = atom + + @publish_method('values') + def _imitate_values(self): + lazy_context = LazyKnownContexts(self._dict_values()) + return ContextSet([FakeSequence(self.evaluator, u'list', [lazy_context])]) + + @publish_method('items') + def _imitate_items(self): + lazy_contexts = [ + LazyKnownContext(FakeSequence( + self.evaluator, u'tuple', + (LazyTreeContext(self._defining_context, key_node), + LazyTreeContext(self._defining_context, value_node)) + )) for key_node, value_node in self.get_tree_entries() + ] + + return ContextSet([FakeSequence(self.evaluator, u'list', lazy_contexts)]) + + def _dict_keys(self): + return ContextSet.from_sets( + self._defining_context.eval_node(k) + for k, v in self.get_tree_entries() + ) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + +class _FakeArray(SequenceLiteralContext): + def __init__(self, evaluator, container, type): + super(SequenceLiteralContext, self).__init__(evaluator) + self.array_type = type + self.atom = container + # TODO is this class really needed? + + +class FakeSequence(_FakeArray): + def __init__(self, evaluator, array_type, lazy_context_list): + """ + type should be one of "tuple", "list" + """ + super(FakeSequence, self).__init__(evaluator, None, array_type) + self._lazy_context_list = lazy_context_list + + def py__simple_getitem__(self, index): + if isinstance(index, slice): + return ContextSet([self]) + + with reraise_getitem_errors(IndexError, TypeError): + lazy_context = self._lazy_context_list[index] + return lazy_context.infer() + + def py__iter__(self, contextualized_node=None): + return self._lazy_context_list + + def py__bool__(self): + return bool(len(self._lazy_context_list)) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._lazy_context_list) + + +class FakeDict(_DictMixin, _FakeArray): + def __init__(self, evaluator, dct): + super(FakeDict, self).__init__(evaluator, dct, u'dict') + self._dct = dct + + def py__iter__(self, contextualized_node=None): + for key in self._dct: + yield LazyKnownContext(compiled.create_simple_object(self.evaluator, key)) + + def py__simple_getitem__(self, index): + if is_py3 and self.evaluator.environment.version_info.major == 2: + # In Python 2 bytes and unicode compare. + if isinstance(index, bytes): + index_unicode = force_unicode(index) + try: + return self._dct[index_unicode].infer() + except KeyError: + pass + elif isinstance(index, str): + index_bytes = index.encode('utf-8') + try: + return self._dct[index_bytes].infer() + except KeyError: + pass + + with reraise_getitem_errors(KeyError, TypeError): + lazy_context = self._dct[index] + return lazy_context.infer() + + @publish_method('values') + def _values(self): + return ContextSet([FakeSequence( + self.evaluator, u'tuple', + [LazyKnownContexts(self._dict_values())] + )]) + + def _dict_values(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self._dct.values()) + + def _dict_keys(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + def exact_key_items(self): + return self._dct.items() + + +class MergedArray(_FakeArray): + def __init__(self, evaluator, arrays): + super(MergedArray, self).__init__(evaluator, arrays, arrays[-1].array_type) + self._arrays = arrays + + def py__iter__(self, contextualized_node=None): + for array in self._arrays: + for lazy_context in array.py__iter__(): + yield lazy_context + + def py__simple_getitem__(self, index): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def get_tree_entries(self): + for array in self._arrays: + for a in array.get_tree_entries(): + yield a + + def __len__(self): + return sum(len(a) for a in self._arrays) + + +def unpack_tuple_to_dict(context, types, exprlist): + """ + Unpacking tuple assignments in for statements and expr_stmts. + """ + if exprlist.type == 'name': + return {exprlist.value: types} + elif exprlist.type == 'atom' and exprlist.children[0] in ('(', '['): + return unpack_tuple_to_dict(context, types, exprlist.children[1]) + elif exprlist.type in ('testlist', 'testlist_comp', 'exprlist', + 'testlist_star_expr'): + dct = {} + parts = iter(exprlist.children[::2]) + n = 0 + for lazy_context in types.iterate(exprlist): + n += 1 + try: + part = next(parts) + except StopIteration: + # TODO this context is probably not right. + analysis.add(context, 'value-error-too-many-values', part, + message="ValueError: too many values to unpack (expected %s)" % n) + else: + dct.update(unpack_tuple_to_dict(context, lazy_context.infer(), part)) + has_parts = next(parts, None) + if types and has_parts is not None: + # TODO this context is probably not right. + analysis.add(context, 'value-error-too-few-values', has_parts, + message="ValueError: need more than %s values to unpack" % n) + return dct + elif exprlist.type == 'power' or exprlist.type == 'atom_expr': + # Something like ``arr[x], var = ...``. + # This is something that is not yet supported, would also be difficult + # to write into a dict. + return {} + elif exprlist.type == 'star_expr': # `a, *b, c = x` type unpackings + # Currently we're not supporting them. + return {} + raise NotImplementedError + + +def check_array_additions(context, sequence): + """ Just a mapper function for the internal _check_array_additions """ + if sequence.array_type not in ('list', 'set'): + # TODO also check for dict updates + return NO_CONTEXTS + + return _check_array_additions(context, sequence) + + +@evaluator_method_cache(default=NO_CONTEXTS) +@debug.increase_indent +def _check_array_additions(context, sequence): + """ + Checks if a `Array` has "add" (append, insert, extend) statements: + + >>> a = [""] + >>> a.append(1) + """ + from jedi.evaluate import arguments + + debug.dbg('Dynamic array search for %s' % sequence, color='MAGENTA') + module_context = context.get_root_context() + if not settings.dynamic_array_additions or isinstance(module_context, compiled.CompiledObject): + debug.dbg('Dynamic array search aborted.', color='MAGENTA') + return NO_CONTEXTS + + def find_additions(context, arglist, add_name): + params = list(arguments.TreeArguments(context.evaluator, context, arglist).unpack()) + result = set() + if add_name in ['insert']: + params = params[1:] + if add_name in ['append', 'add', 'insert']: + for key, lazy_context in params: + result.add(lazy_context) + elif add_name in ['extend', 'update']: + for key, lazy_context in params: + result |= set(lazy_context.infer().iterate()) + return result + + temp_param_add, settings.dynamic_params_for_other_modules = \ + settings.dynamic_params_for_other_modules, False + + is_list = sequence.name.string_name == 'list' + search_names = (['append', 'extend', 'insert'] if is_list else ['add', 'update']) + + added_types = set() + for add_name in search_names: + try: + possible_names = module_context.tree_node.get_used_names()[add_name] + except KeyError: + continue + else: + for name in possible_names: + context_node = context.tree_node + if not (context_node.start_pos < name.start_pos < context_node.end_pos): + continue + trailer = name.parent + power = trailer.parent + trailer_pos = power.children.index(trailer) + try: + execution_trailer = power.children[trailer_pos + 1] + except IndexError: + continue + else: + if execution_trailer.type != 'trailer' \ + or execution_trailer.children[0] != '(' \ + or execution_trailer.children[1] == ')': + continue + + random_context = context.create_context(name) + + with recursion.execution_allowed(context.evaluator, power) as allowed: + if allowed: + found = evaluate_call_of_leaf( + random_context, + name, + cut_own_trailer=True + ) + if sequence in found: + # The arrays match. Now add the results + added_types |= find_additions( + random_context, + execution_trailer.children[1], + add_name + ) + + # reset settings + settings.dynamic_params_for_other_modules = temp_param_add + debug.dbg('Dynamic array result %s' % added_types, color='MAGENTA') + return added_types + + +def get_dynamic_array_instance(instance, arguments): + """Used for set() and list() instances.""" + ai = _ArrayInstance(instance, arguments) + from jedi.evaluate import arguments + return arguments.ValuesArguments([ContextSet([ai])]) + + +class _ArrayInstance(HelperContextMixin): + """ + Used for the usage of set() and list(). + This is definitely a hack, but a good one :-) + It makes it possible to use set/list conversions. + """ + def __init__(self, instance, var_args): + self.instance = instance + self.var_args = var_args + + def py__class__(self): + tuple_, = self.instance.evaluator.builtins_module.py__getattribute__('tuple') + return tuple_ + + def py__iter__(self, contextualized_node=None): + var_args = self.var_args + try: + _, lazy_context = next(var_args.unpack()) + except StopIteration: + pass + else: + for lazy in lazy_context.infer().iterate(): + yield lazy + + from jedi.evaluate import arguments + if isinstance(var_args, arguments.TreeArguments): + additions = _check_array_additions(var_args.context, self.instance) + for addition in additions: + yield addition + + def iterate(self, contextualized_node=None, is_async=False): + return self.py__iter__(contextualized_node) + + +class Slice(object): + def __init__(self, context, start, stop, step): + self._context = context + self._slice_object = None + # All of them are either a Precedence or None. + self._start = start + self._stop = stop + self._step = step + + def __getattr__(self, name): + if self._slice_object is None: + context = compiled.builtin_from_name(self._context.evaluator, 'slice') + self._slice_object, = context.execute_evaluated() + return getattr(self._slice_object, name) + + @property + def obj(self): + """ + Imitate CompiledObject.obj behavior and return a ``builtin.slice()`` + object. + """ + def get(element): + if element is None: + return None + + result = self._context.eval_node(element) + if len(result) != 1: + # For simplicity, we want slices to be clear defined with just + # one type. Otherwise we will return an empty slice object. + raise IndexError + + context, = result + return get_int_or_none(context) + + try: + return slice(get(self._start), get(self._stop), get(self._step)) + except IndexError: + return slice(None, None, None) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/klass.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/klass.py new file mode 100644 index 0000000..b587c6e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/klass.py @@ -0,0 +1,344 @@ +""" +Like described in the :mod:`parso.python.tree` module, +there's a need for an ast like module to represent the states of parsed +modules. + +But now there are also structures in Python that need a little bit more than +that. An ``Instance`` for example is only a ``Class`` before it is +instantiated. This class represents these cases. + +So, why is there also a ``Class`` class here? Well, there are decorators and +they change classes in Python 3. + +Representation modules also define "magic methods". Those methods look like +``py__foo__`` and are typically mappable to the Python equivalents ``__call__`` +and others. Here's a list: + +====================================== ======================================== +**Method** **Description** +-------------------------------------- ---------------------------------------- +py__call__(arguments: Array) On callable objects, returns types. +py__bool__() Returns True/False/None; None means that + there's no certainty. +py__bases__() Returns a list of base classes. +py__iter__() Returns a generator of a set of types. +py__class__() Returns the class of an instance. +py__simple_getitem__(index: int/str) Returns a a set of types of the index. + Can raise an IndexError/KeyError. +py__getitem__(indexes: ContextSet) Returns a a set of types of the index. +py__file__() Only on modules. Returns None if does + not exist. +py__package__() -> List[str] Only on modules. For the import system. +py__path__() Only on modules. For the import system. +py__get__(call_object) Only on instances. Simulates + descriptors. +py__doc__() Returns the docstring for a context. +====================================== ======================================== + +""" +from jedi import debug +from jedi._compatibility import use_metaclass +from jedi.parser_utils import get_cached_parent_scope +from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass, \ + evaluator_method_generator_cache +from jedi.evaluate import compiled +from jedi.evaluate.lazy_context import LazyKnownContexts +from jedi.evaluate.filters import ParserTreeFilter +from jedi.evaluate.names import TreeNameDefinition, ContextName +from jedi.evaluate.arguments import unpack_arglist, ValuesArguments +from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \ + NO_CONTEXTS +from jedi.evaluate.context.function import FunctionAndClassBase +from jedi.plugins import plugin_manager + + +def apply_py__get__(context, instance, class_context): + try: + method = context.py__get__ + except AttributeError: + yield context + else: + for descriptor_context in method(instance, class_context): + yield descriptor_context + + +class ClassName(TreeNameDefinition): + def __init__(self, parent_context, tree_name, name_context, apply_decorators): + super(ClassName, self).__init__(parent_context, tree_name) + self._name_context = name_context + self._apply_decorators = apply_decorators + + @iterator_to_context_set + def infer(self): + # We're using a different context to infer, so we cannot call super(). + from jedi.evaluate.syntax_tree import tree_name_to_contexts + inferred = tree_name_to_contexts( + self.parent_context.evaluator, self._name_context, self.tree_name) + + for result_context in inferred: + if self._apply_decorators: + for c in apply_py__get__(result_context, + instance=None, + class_context=self.parent_context): + yield c + else: + yield result_context + + +class ClassFilter(ParserTreeFilter): + name_class = ClassName + + def __init__(self, *args, **kwargs): + self._is_instance = kwargs.pop('is_instance') # Python 2 :/ + super(ClassFilter, self).__init__(*args, **kwargs) + + def _convert_names(self, names): + return [ + self.name_class( + parent_context=self.context, + tree_name=name, + name_context=self._node_context, + apply_decorators=not self._is_instance, + ) for name in names + ] + + def _equals_origin_scope(self): + node = self._origin_scope + while node is not None: + if node == self._parser_scope or node == self.context: + return True + node = get_cached_parent_scope(self._used_names, node) + return False + + def _access_possible(self, name, from_instance=False): + # Filter for ClassVar variables + # TODO this is not properly done, yet. It just checks for the string + # ClassVar in the annotation, which can be quite imprecise. If we + # wanted to do this correct, we would have to resolve the ClassVar. + if not from_instance: + expr_stmt = name.get_definition() + if expr_stmt is not None and expr_stmt.type == 'expr_stmt': + annassign = expr_stmt.children[1] + if annassign.type == 'annassign': + # TODO this is not proper matching + if 'ClassVar' not in annassign.children[1].get_code(): + return False + + # Filter for name mangling of private variables like __foo + return not name.value.startswith('__') or name.value.endswith('__') \ + or self._equals_origin_scope() + + def _filter(self, names, from_instance=False): + names = super(ClassFilter, self)._filter(names) + return [name for name in names if self._access_possible(name, from_instance)] + + +class ClassMixin(object): + def is_class(self): + return True + + def py__call__(self, arguments=None): + from jedi.evaluate.context import TreeInstance + if arguments is None: + arguments = ValuesArguments([]) + return ContextSet([TreeInstance(self.evaluator, self.parent_context, self, arguments)]) + + def py__class__(self): + return compiled.builtin_from_name(self.evaluator, u'type') + + @property + def name(self): + return ContextName(self, self.tree_node.name) + + def py__name__(self): + return self.name.string_name + + def get_param_names(self): + for context_ in self.py__getattribute__(u'__init__'): + if context_.is_function(): + return list(context_.get_param_names())[1:] + return [] + + @evaluator_method_generator_cache() + def py__mro__(self): + mro = [self] + yield self + # TODO Do a proper mro resolution. Currently we are just listing + # classes. However, it's a complicated algorithm. + for lazy_cls in self.py__bases__(): + # TODO there's multiple different mro paths possible if this yields + # multiple possibilities. Could be changed to be more correct. + for cls in lazy_cls.infer(): + # TODO detect for TypeError: duplicate base class str, + # e.g. `class X(str, str): pass` + try: + mro_method = cls.py__mro__ + except AttributeError: + # TODO add a TypeError like: + """ + >>> class Y(lambda: test): pass + Traceback (most recent call last): + File "", line 1, in + TypeError: function() argument 1 must be code, not str + >>> class Y(1): pass + Traceback (most recent call last): + File "", line 1, in + TypeError: int() takes at most 2 arguments (3 given) + """ + debug.warning('Super class of %s is not a class: %s', self, cls) + else: + for cls_new in mro_method(): + if cls_new not in mro: + mro.append(cls_new) + yield cls_new + + def get_filters(self, search_global=False, until_position=None, + origin_scope=None, is_instance=False): + metaclasses = self.get_metaclasses() + if metaclasses: + for f in self.get_metaclass_filters(metaclasses): + yield f + + if search_global: + yield self.get_global_filter(until_position, origin_scope) + else: + for cls in self.py__mro__(): + if isinstance(cls, compiled.CompiledObject): + for filter in cls.get_filters(is_instance=is_instance): + yield filter + else: + yield ClassFilter( + self.evaluator, self, node_context=cls, + origin_scope=origin_scope, + is_instance=is_instance + ) + if not is_instance: + from jedi.evaluate.compiled import builtin_from_name + type_ = builtin_from_name(self.evaluator, u'type') + assert isinstance(type_, ClassContext) + if type_ != self: + for instance in type_.py__call__(): + instance_filters = instance.get_filters() + # Filter out self filters + next(instance_filters) + next(instance_filters) + yield next(instance_filters) + + def get_signatures(self): + init_funcs = self.py__call__().py__getattribute__('__init__') + return [sig.bind(self) for sig in init_funcs.get_signatures()] + + def get_global_filter(self, until_position=None, origin_scope=None): + return ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ) + + +class ClassContext(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBase)): + """ + This class is not only important to extend `tree.Class`, it is also a + important for descriptors (if the descriptor methods are evaluated or not). + """ + api_type = u'class' + + @evaluator_method_cache() + def list_type_vars(self): + found = [] + arglist = self.tree_node.get_super_arglist() + if arglist is None: + return [] + + for stars, node in unpack_arglist(arglist): + if stars: + continue # These are not relevant for this search. + + from jedi.evaluate.gradual.annotation import find_unknown_type_vars + for type_var in find_unknown_type_vars(self.parent_context, node): + if type_var not in found: + # The order matters and it's therefore a list. + found.append(type_var) + return found + + def _get_bases_arguments(self): + arglist = self.tree_node.get_super_arglist() + if arglist: + from jedi.evaluate import arguments + return arguments.TreeArguments(self.evaluator, self.parent_context, arglist) + return None + + @evaluator_method_cache(default=()) + def py__bases__(self): + args = self._get_bases_arguments() + if args is not None: + lst = [value for key, value in args.unpack() if key is None] + if lst: + return lst + + if self.py__name__() == 'object' \ + and self.parent_context == self.evaluator.builtins_module: + return [] + return [LazyKnownContexts( + self.evaluator.builtins_module.py__getattribute__('object') + )] + + def py__getitem__(self, index_context_set, contextualized_node): + from jedi.evaluate.gradual.typing import LazyGenericClass + if not index_context_set: + return ContextSet([self]) + return ContextSet( + LazyGenericClass( + self, + index_context, + context_of_index=contextualized_node.context, + ) + for index_context in index_context_set + ) + + def define_generics(self, type_var_dict): + from jedi.evaluate.gradual.typing import GenericClass + + def remap_type_vars(): + """ + The TypeVars in the resulting classes have sometimes different names + and we need to check for that, e.g. a signature can be: + + def iter(iterable: Iterable[_T]) -> Iterator[_T]: ... + + However, the iterator is defined as Iterator[_T_co], which means it has + a different type var name. + """ + for type_var in self.list_type_vars(): + yield type_var_dict.get(type_var.py__name__(), NO_CONTEXTS) + + if type_var_dict: + return ContextSet([GenericClass( + self, + generics=tuple(remap_type_vars()) + )]) + return ContextSet({self}) + + @plugin_manager.decorate() + def get_metaclass_filters(self, metaclass): + debug.dbg('Unprocessed metaclass %s', metaclass) + return [] + + @evaluator_method_cache(default=NO_CONTEXTS) + def get_metaclasses(self): + args = self._get_bases_arguments() + if args is not None: + m = [value for key, value in args.unpack() if key == 'metaclass'] + metaclasses = ContextSet.from_sets(lazy_context.infer() for lazy_context in m) + metaclasses = ContextSet(m for m in metaclasses if m.is_class()) + if metaclasses: + return metaclasses + + for lazy_base in self.py__bases__(): + for context in lazy_base.infer(): + if context.is_class(): + contexts = context.get_metaclasses() + if contexts: + return contexts + return NO_CONTEXTS diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/module.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/module.py new file mode 100644 index 0000000..28f92f3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/module.py @@ -0,0 +1,283 @@ +import re +import os + +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.names import ContextNameMixin, AbstractNameDefinition +from jedi.evaluate.filters import GlobalNameFilter, ParserTreeFilter, DictFilter, MergedFilter +from jedi.evaluate import compiled +from jedi.evaluate.base_context import TreeContext +from jedi.evaluate.names import SubModuleName +from jedi.evaluate.helpers import contexts_from_qualified_names +from jedi.evaluate.compiled import create_simple_object +from jedi.evaluate.base_context import ContextSet + + +class _ModuleAttributeName(AbstractNameDefinition): + """ + For module attributes like __file__, __str__ and so on. + """ + api_type = u'instance' + + def __init__(self, parent_module, string_name, string_value=None): + self.parent_context = parent_module + self.string_name = string_name + self._string_value = string_value + + def infer(self): + if self._string_value is not None: + s = self._string_value + if self.parent_context.evaluator.environment.version_info.major == 2 \ + and not isinstance(s, bytes): + s = s.encode('utf-8') + return ContextSet([ + create_simple_object(self.parent_context.evaluator, s) + ]) + return compiled.get_string_context_set(self.parent_context.evaluator) + + +class ModuleName(ContextNameMixin, AbstractNameDefinition): + start_pos = 1, 0 + + def __init__(self, context, name): + self._context = context + self._name = name + + @property + def string_name(self): + return self._name + + +def iter_module_names(evaluator, paths): + # Python modules/packages + for n in evaluator.compiled_subprocess.list_module_names(paths): + yield n + + for path in paths: + try: + dirs = os.listdir(path) + except OSError: + # The file might not exist or reading it might lead to an error. + debug.warning("Not possible to list directory: %s", path) + continue + for name in dirs: + # Namespaces + if os.path.isdir(os.path.join(path, name)): + # pycache is obviously not an interestin namespace. Also the + # name must be a valid identifier. + # TODO use str.isidentifier, once Python 2 is removed + if name != '__pycache__' and not re.search(r'\W|^\d', name): + yield name + # Stub files + if name.endswith('.pyi'): + if name != '__init__.pyi': + yield name[:-4] + + +class SubModuleDictMixin(object): + @evaluator_method_cache() + def sub_modules_dict(self): + """ + Lists modules in the directory of this module (if this module is a + package). + """ + names = {} + try: + method = self.py__path__ + except AttributeError: + pass + else: + mods = iter_module_names(self.evaluator, method()) + for name in mods: + # It's obviously a relative import to the current module. + names[name] = SubModuleName(self, name) + + # In the case of an import like `from x.` we don't need to + # add all the variables, this is only about submodules. + return names + + +class ModuleMixin(SubModuleDictMixin): + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield MergedFilter( + ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ), + GlobalNameFilter(self, self.tree_node), + ) + yield DictFilter(self.sub_modules_dict()) + yield DictFilter(self._module_attributes_dict()) + for star_filter in self.iter_star_filters(): + yield star_filter + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'ModuleType') + return c + + def is_module(self): + return True + + def is_stub(self): + return False + + @property + @evaluator_method_cache() + def name(self): + return ModuleName(self, self._string_name) + + @property + def _string_name(self): + """ This is used for the goto functions. """ + # TODO It's ugly that we even use this, the name is usually well known + # ahead so just pass it when create a ModuleContext. + if self._path is None: + return '' # no path -> empty name + else: + sep = (re.escape(os.path.sep),) * 2 + r = re.search(r'([^%s]*?)(%s__init__)?(\.pyi?|\.so)?$' % sep, self._path) + # Remove PEP 3149 names + return re.sub(r'\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1)) + + @evaluator_method_cache() + def _module_attributes_dict(self): + names = ['__package__', '__doc__', '__name__'] + # All the additional module attributes are strings. + dct = dict((n, _ModuleAttributeName(self, n)) for n in names) + file = self.py__file__() + if file is not None: + dct['__file__'] = _ModuleAttributeName(self, '__file__', file) + return dct + + def iter_star_filters(self, search_global=False): + for star_module in self.star_imports(): + yield next(star_module.get_filters(search_global)) + + # I'm not sure if the star import cache is really that effective anymore + # with all the other really fast import caches. Recheck. Also we would need + # to push the star imports into Evaluator.module_cache, if we reenable this. + @evaluator_method_cache([]) + def star_imports(self): + from jedi.evaluate.imports import Importer + + modules = [] + for i in self.tree_node.iter_imports(): + if i.is_star_import(): + new = Importer( + self.evaluator, + import_path=i.get_paths()[-1], + module_context=self, + level=i.level + ).follow() + + for module in new: + if isinstance(module, ModuleContext): + modules += module.star_imports() + modules += new + return modules + + def get_qualified_names(self): + """ + A module doesn't have a qualified name, but it's important to note that + it's reachable and not `None`. With this information we can add + qualified names on top for all context children. + """ + return () + + +class ModuleContext(ModuleMixin, TreeContext): + api_type = u'module' + parent_context = None + + def __init__(self, evaluator, module_node, file_io, string_names, code_lines, is_package=False): + super(ModuleContext, self).__init__( + evaluator, + parent_context=None, + tree_node=module_node + ) + self.file_io = file_io + if file_io is None: + self._path = None + else: + self._path = file_io.path + self.string_names = string_names # Optional[Tuple[str, ...]] + self.code_lines = code_lines + self.is_package = is_package + + def is_stub(self): + if self._path is not None and self._path.endswith('.pyi'): + # Currently this is the way how we identify stubs when e.g. goto is + # used in them. This could be changed if stubs would be identified + # sooner and used as StubModuleContext. + return True + return super(ModuleContext, self).is_stub() + + def py__name__(self): + if self.string_names is None: + return None + return '.'.join(self.string_names) + + def py__file__(self): + """ + In contrast to Python's __file__ can be None. + """ + if self._path is None: + return None + + return os.path.abspath(self._path) + + def py__package__(self): + if self.is_package: + return self.string_names + return self.string_names[:-1] + + def _py__path__(self): + # A namespace package is typically auto generated and ~10 lines long. + first_few_lines = ''.join(self.code_lines[:50]) + # these are strings that need to be used for namespace packages, + # the first one is ``pkgutil``, the second ``pkg_resources``. + options = ('declare_namespace(__name__)', 'extend_path(__path__') + if options[0] in first_few_lines or options[1] in first_few_lines: + # It is a namespace, now try to find the rest of the + # modules on sys_path or whatever the search_path is. + paths = set() + for s in self.evaluator.get_sys_path(): + other = os.path.join(s, self.name.string_name) + if os.path.isdir(other): + paths.add(other) + if paths: + return list(paths) + # Nested namespace packages will not be supported. Nobody ever + # asked for it and in Python 3 they are there without using all the + # crap above. + + # Default to the of this file. + file = self.py__file__() + assert file is not None # Shouldn't be a package in the first place. + return [os.path.dirname(file)] + + @property + def py__path__(self): + """ + Not seen here, since it's a property. The callback actually uses a + variable, so use it like:: + + foo.py__path__(sys_path) + + In case of a package, this returns Python's __path__ attribute, which + is a list of paths (strings). + Raises an AttributeError if the module is not a package. + """ + if self.is_package: + return self._py__path__ + else: + raise AttributeError('Only packages have __path__ attributes.') + + def __repr__(self): + return "<%s: %s@%s-%s is_stub=%s>" % ( + self.__class__.__name__, self._string_name, + self.tree_node.start_pos[0], self.tree_node.end_pos[0], + self.is_stub() + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/namespace.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/namespace.py new file mode 100644 index 0000000..12c8b3a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/context/namespace.py @@ -0,0 +1,64 @@ +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.filters import DictFilter +from jedi.evaluate.names import ContextNameMixin, AbstractNameDefinition +from jedi.evaluate.base_context import Context +from jedi.evaluate.context.module import SubModuleDictMixin + + +class ImplicitNSName(ContextNameMixin, AbstractNameDefinition): + """ + Accessing names for implicit namespace packages should infer to nothing. + This object will prevent Jedi from raising exceptions + """ + def __init__(self, implicit_ns_context, string_name): + self._context = implicit_ns_context + self.string_name = string_name + + +class ImplicitNamespaceContext(Context, SubModuleDictMixin): + """ + Provides support for implicit namespace packages + """ + # Is a module like every other module, because if you import an empty + # folder foobar it will be available as an object: + # . + api_type = u'module' + parent_context = None + + def __init__(self, evaluator, fullname, paths): + super(ImplicitNamespaceContext, self).__init__(evaluator, parent_context=None) + self.evaluator = evaluator + self._fullname = fullname + self._paths = paths + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield DictFilter(self.sub_modules_dict()) + + @property + @evaluator_method_cache() + def name(self): + string_name = self.py__package__()[-1] + return ImplicitNSName(self, string_name) + + def py__file__(self): + return None + + def py__package__(self): + """Return the fullname + """ + return self._fullname.split('.') + + def py__path__(self): + return self._paths + + def py__name__(self): + return self._fullname + + def is_namespace(self): + return True + + def is_stub(self): + return False + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._fullname) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/docstrings.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/docstrings.py new file mode 100644 index 0000000..d38dbf1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/docstrings.py @@ -0,0 +1,311 @@ +""" +Docstrings are another source of information for functions and classes. +:mod:`jedi.evaluate.dynamic` tries to find all executions of functions, while +the docstring parsing is much easier. There are three different types of +docstrings that |jedi| understands: + +- `Sphinx `_ +- `Epydoc `_ +- `Numpydoc `_ + +For example, the sphinx annotation ``:type foo: str`` clearly states that the +type of ``foo`` is ``str``. + +As an addition to parameter searching, this module also provides return +annotations. +""" + +import re +import warnings +from textwrap import dedent + +from parso import parse, ParserSyntaxError + +from jedi._compatibility import u +from jedi import debug +from jedi.evaluate.utils import indent_block +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import iterator_to_context_set, ContextSet, \ + NO_CONTEXTS +from jedi.evaluate.lazy_context import LazyKnownContexts + + +DOCSTRING_PARAM_PATTERNS = [ + r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx + r'\s*:param\s+(\w+)\s+%s:[^\n]*', # Sphinx param with type + r'\s*@type\s+%s:\s*([^\n]+)', # Epydoc +] + +DOCSTRING_RETURN_PATTERNS = [ + re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx + re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epydoc +] + +REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`') + + +_numpy_doc_string_cache = None + + +def _get_numpy_doc_string_cls(): + global _numpy_doc_string_cache + if isinstance(_numpy_doc_string_cache, (ImportError, SyntaxError)): + raise _numpy_doc_string_cache + from numpydoc.docscrape import NumpyDocString + _numpy_doc_string_cache = NumpyDocString + return _numpy_doc_string_cache + + +def _search_param_in_numpydocstr(docstr, param_str): + """Search `docstr` (in numpydoc format) for type(-s) of `param_str`.""" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + try: + # This is a non-public API. If it ever changes we should be + # prepared and return gracefully. + params = _get_numpy_doc_string_cls()(docstr)._parsed_data['Parameters'] + except Exception: + return [] + for p_name, p_type, p_descr in params: + if p_name == param_str: + m = re.match(r'([^,]+(,[^,]+)*?)(,[ ]*optional)?$', p_type) + if m: + p_type = m.group(1) + return list(_expand_typestr(p_type)) + return [] + + +def _search_return_in_numpydocstr(docstr): + """ + Search `docstr` (in numpydoc format) for type(-s) of function returns. + """ + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + try: + doc = _get_numpy_doc_string_cls()(docstr) + except Exception: + return + try: + # This is a non-public API. If it ever changes we should be + # prepared and return gracefully. + returns = doc._parsed_data['Returns'] + returns += doc._parsed_data['Yields'] + except Exception: + return + for r_name, r_type, r_descr in returns: + # Return names are optional and if so the type is in the name + if not r_type: + r_type = r_name + for type_ in _expand_typestr(r_type): + yield type_ + + +def _expand_typestr(type_str): + """ + Attempts to interpret the possible types in `type_str` + """ + # Check if alternative types are specified with 'or' + if re.search(r'\bor\b', type_str): + for t in type_str.split('or'): + yield t.split('of')[0].strip() + # Check if like "list of `type`" and set type to list + elif re.search(r'\bof\b', type_str): + yield type_str.split('of')[0] + # Check if type has is a set of valid literal values eg: {'C', 'F', 'A'} + elif type_str.startswith('{'): + node = parse(type_str, version='3.7').children[0] + if node.type == 'atom': + for leaf in node.children[1].children: + if leaf.type == 'number': + if '.' in leaf.value: + yield 'float' + else: + yield 'int' + elif leaf.type == 'string': + if 'b' in leaf.string_prefix.lower(): + yield 'bytes' + else: + yield 'str' + # Ignore everything else. + + # Otherwise just work with what we have. + else: + yield type_str + + +def _search_param_in_docstr(docstr, param_str): + """ + Search `docstr` for type(-s) of `param_str`. + + >>> _search_param_in_docstr(':type param: int', 'param') + ['int'] + >>> _search_param_in_docstr('@type param: int', 'param') + ['int'] + >>> _search_param_in_docstr( + ... ':type param: :class:`threading.Thread`', 'param') + ['threading.Thread'] + >>> bool(_search_param_in_docstr('no document', 'param')) + False + >>> _search_param_in_docstr(':param int param: some description', 'param') + ['int'] + + """ + # look at #40 to see definitions of those params + patterns = [re.compile(p % re.escape(param_str)) + for p in DOCSTRING_PARAM_PATTERNS] + for pattern in patterns: + match = pattern.search(docstr) + if match: + return [_strip_rst_role(match.group(1))] + + return _search_param_in_numpydocstr(docstr, param_str) + + +def _strip_rst_role(type_str): + """ + Strip off the part looks like a ReST role in `type_str`. + + >>> _strip_rst_role(':class:`ClassName`') # strip off :class: + 'ClassName' + >>> _strip_rst_role(':py:obj:`module.Object`') # works with domain + 'module.Object' + >>> _strip_rst_role('ClassName') # do nothing when not ReST role + 'ClassName' + + See also: + http://sphinx-doc.org/domains.html#cross-referencing-python-objects + + """ + match = REST_ROLE_PATTERN.match(type_str) + if match: + return match.group(1) + else: + return type_str + + +def _evaluate_for_statement_string(module_context, string): + code = dedent(u(""" + def pseudo_docstring_stuff(): + ''' + Create a pseudo function for docstring statements. + Need this docstring so that if the below part is not valid Python this + is still a function. + ''' + {} + """)) + if string is None: + return [] + + for element in re.findall(r'((?:\w+\.)*\w+)\.', string): + # Try to import module part in dotted name. + # (e.g., 'threading' in 'threading.Thread'). + string = 'import %s\n' % element + string + + # Take the default grammar here, if we load the Python 2.7 grammar here, it + # will be impossible to use `...` (Ellipsis) as a token. Docstring types + # don't need to conform with the current grammar. + debug.dbg('Parse docstring code %s', string, color='BLUE') + grammar = module_context.evaluator.latest_grammar + try: + module = grammar.parse(code.format(indent_block(string)), error_recovery=False) + except ParserSyntaxError: + return [] + try: + funcdef = next(module.iter_funcdefs()) + # First pick suite, then simple_stmt and then the node, + # which is also not the last item, because there's a newline. + stmt = funcdef.children[-1].children[-1].children[-2] + except (AttributeError, IndexError): + return [] + + if stmt.type not in ('name', 'atom', 'atom_expr'): + return [] + + from jedi.evaluate.context import FunctionContext + function_context = FunctionContext( + module_context.evaluator, + module_context, + funcdef + ) + func_execution_context = function_context.get_function_execution() + # Use the module of the param. + # TODO this module is not the module of the param in case of a function + # call. In that case it's the module of the function call. + # stuffed with content from a function call. + return list(_execute_types_in_stmt(func_execution_context, stmt)) + + +def _execute_types_in_stmt(module_context, stmt): + """ + Executing all types or general elements that we find in a statement. This + doesn't include tuple, list and dict literals, because the stuff they + contain is executed. (Used as type information). + """ + definitions = module_context.eval_node(stmt) + return ContextSet.from_sets( + _execute_array_values(module_context.evaluator, d) + for d in definitions + ) + + +def _execute_array_values(evaluator, array): + """ + Tuples indicate that there's not just one return value, but the listed + ones. `(str, int)` means that it returns a tuple with both types. + """ + from jedi.evaluate.context.iterable import SequenceLiteralContext, FakeSequence + if isinstance(array, SequenceLiteralContext): + values = [] + for lazy_context in array.py__iter__(): + objects = ContextSet.from_sets( + _execute_array_values(evaluator, typ) + for typ in lazy_context.infer() + ) + values.append(LazyKnownContexts(objects)) + return {FakeSequence(evaluator, array.array_type, values)} + else: + return array.execute_annotation() + + +@evaluator_method_cache() +def infer_param(execution_context, param): + from jedi.evaluate.context.instance import InstanceArguments + from jedi.evaluate.context import FunctionExecutionContext + + def eval_docstring(docstring): + return ContextSet( + p + for param_str in _search_param_in_docstr(docstring, param.name.value) + for p in _evaluate_for_statement_string(module_context, param_str) + ) + module_context = execution_context.get_root_context() + func = param.get_parent_function() + if func.type == 'lambdef': + return NO_CONTEXTS + + types = eval_docstring(execution_context.py__doc__()) + if isinstance(execution_context, FunctionExecutionContext) \ + and isinstance(execution_context.var_args, InstanceArguments) \ + and execution_context.function_context.py__name__() == '__init__': + class_context = execution_context.var_args.instance.class_context + types |= eval_docstring(class_context.py__doc__()) + + debug.dbg('Found param types for docstring: %s', types, color='BLUE') + return types + + +@evaluator_method_cache() +@iterator_to_context_set +def infer_return_types(function_context): + def search_return_in_docstr(code): + for p in DOCSTRING_RETURN_PATTERNS: + match = p.search(code) + if match: + yield _strip_rst_role(match.group(1)) + # Check for numpy style return hint + for type_ in _search_return_in_numpydocstr(code): + yield type_ + + for type_str in search_return_in_docstr(function_context.py__doc__()): + for type_eval in _evaluate_for_statement_string(function_context.get_root_context(), type_str): + yield type_eval diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/dynamic.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/dynamic.py new file mode 100644 index 0000000..fc3b19f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/dynamic.py @@ -0,0 +1,231 @@ +""" +One of the really important features of |jedi| is to have an option to +understand code like this:: + + def foo(bar): + bar. # completion here + foo(1) + +There's no doubt wheter bar is an ``int`` or not, but if there's also a call +like ``foo('str')``, what would happen? Well, we'll just show both. Because +that's what a human would expect. + +It works as follows: + +- |Jedi| sees a param +- search for function calls named ``foo`` +- execute these calls and check the input. +""" + +from jedi import settings +from jedi import debug +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate import imports +from jedi.evaluate.arguments import TreeArguments +from jedi.evaluate.param import create_default_params +from jedi.evaluate.helpers import is_stdlib_path +from jedi.evaluate.utils import to_list +from jedi.parser_utils import get_parent_scope +from jedi.evaluate.context import ModuleContext, instance +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate import recursion + + +MAX_PARAM_SEARCHES = 20 + + +class DynamicExecutedParams(object): + """ + Simulates being a parameter while actually just being multiple params. + """ + + def __init__(self, evaluator, executed_params): + self.evaluator = evaluator + self._executed_params = executed_params + + def infer(self): + with recursion.execution_allowed(self.evaluator, self) as allowed: + # We need to catch recursions that may occur, because an + # anonymous functions can create an anonymous parameter that is + # more or less self referencing. + if allowed: + return ContextSet.from_sets(p.infer() for p in self._executed_params) + return NO_CONTEXTS + + +@debug.increase_indent +def search_params(evaluator, execution_context, funcdef): + """ + A dynamic search for param values. If you try to complete a type: + + >>> def func(foo): + ... foo + >>> func(1) + >>> func("") + + It is not known what the type ``foo`` without analysing the whole code. You + have to look for all calls to ``func`` to find out what ``foo`` possibly + is. + """ + if not settings.dynamic_params: + return create_default_params(execution_context, funcdef) + + evaluator.dynamic_params_depth += 1 + try: + path = execution_context.get_root_context().py__file__() + if path is not None and is_stdlib_path(path): + # We don't want to search for usages in the stdlib. Usually people + # don't work with it (except if you are a core maintainer, sorry). + # This makes everything slower. Just disable it and run the tests, + # you will see the slowdown, especially in 3.6. + return create_default_params(execution_context, funcdef) + + if funcdef.type == 'lambdef': + string_name = _get_lambda_name(funcdef) + if string_name is None: + return create_default_params(execution_context, funcdef) + else: + string_name = funcdef.name.value + debug.dbg('Dynamic param search in %s.', string_name, color='MAGENTA') + + try: + module_context = execution_context.get_root_context() + function_executions = _search_function_executions( + evaluator, + module_context, + funcdef, + string_name=string_name, + ) + if function_executions: + zipped_params = zip(*list( + function_execution.get_executed_params_and_issues()[0] + for function_execution in function_executions + )) + params = [DynamicExecutedParams(evaluator, executed_params) + for executed_params in zipped_params] + # Evaluate the ExecutedParams to types. + else: + return create_default_params(execution_context, funcdef) + finally: + debug.dbg('Dynamic param result finished', color='MAGENTA') + return params + finally: + evaluator.dynamic_params_depth -= 1 + + +@evaluator_function_cache(default=None) +@to_list +def _search_function_executions(evaluator, module_context, funcdef, string_name): + """ + Returns a list of param names. + """ + compare_node = funcdef + if string_name == '__init__': + cls = get_parent_scope(funcdef) + if cls.type == 'classdef': + string_name = cls.name.value + compare_node = cls + + found_executions = False + i = 0 + for for_mod_context in imports.get_modules_containing_name( + evaluator, [module_context], string_name): + if not isinstance(module_context, ModuleContext): + return + for name, trailer in _get_possible_nodes(for_mod_context, string_name): + i += 1 + + # This is a simple way to stop Jedi's dynamic param recursion + # from going wild: The deeper Jedi's in the recursion, the less + # code should be evaluated. + if i * evaluator.dynamic_params_depth > MAX_PARAM_SEARCHES: + return + + random_context = evaluator.create_context(for_mod_context, name) + for function_execution in _check_name_for_execution( + evaluator, random_context, compare_node, name, trailer): + found_executions = True + yield function_execution + + # If there are results after processing a module, we're probably + # good to process. This is a speed optimization. + if found_executions: + return + + +def _get_lambda_name(node): + stmt = node.parent + if stmt.type == 'expr_stmt': + first_operator = next(stmt.yield_operators(), None) + if first_operator == '=': + first = stmt.children[0] + if first.type == 'name': + return first.value + + return None + + +def _get_possible_nodes(module_context, func_string_name): + try: + names = module_context.tree_node.get_used_names()[func_string_name] + except KeyError: + return + + for name in names: + bracket = name.get_next_leaf() + trailer = bracket.parent + if trailer.type == 'trailer' and bracket == '(': + yield name, trailer + + +def _check_name_for_execution(evaluator, context, compare_node, name, trailer): + from jedi.evaluate.context.function import FunctionExecutionContext + + def create_func_excs(): + arglist = trailer.children[1] + if arglist == ')': + arglist = None + args = TreeArguments(evaluator, context, arglist, trailer) + if value_node.type == 'classdef': + created_instance = instance.TreeInstance( + evaluator, + value.parent_context, + value, + args + ) + for execution in created_instance.create_init_executions(): + yield execution + else: + yield value.get_function_execution(args) + + for value in evaluator.goto_definitions(context, name): + value_node = value.tree_node + if compare_node == value_node: + for func_execution in create_func_excs(): + yield func_execution + elif isinstance(value.parent_context, FunctionExecutionContext) and \ + compare_node.type == 'funcdef': + # Here we're trying to find decorators by checking the first + # parameter. It's not very generic though. Should find a better + # solution that also applies to nested decorators. + params, _ = value.parent_context.get_executed_params_and_issues() + if len(params) != 1: + continue + values = params[0].infer() + nodes = [v.tree_node for v in values] + if nodes == [compare_node]: + # Found a decorator. + module_context = context.get_root_context() + execution_context = next(create_func_excs()) + for name, trailer in _get_possible_nodes(module_context, params[0].string_name): + if value_node.start_pos < name.start_pos < value_node.end_pos: + random_context = evaluator.create_context(execution_context, name) + iterator = _check_name_for_execution( + evaluator, + random_context, + compare_node, + name, + trailer + ) + for function_execution in iterator: + yield function_execution diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/filters.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/filters.py new file mode 100644 index 0000000..0b758ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/filters.py @@ -0,0 +1,412 @@ +""" +Filters are objects that you can use to filter names in different scopes. They +are needed for name resolution. +""" +from abc import abstractmethod +import weakref + +from parso.tree import search_ancestor + +from jedi._compatibility import use_metaclass +from jedi.evaluate import flow_analysis +from jedi.evaluate.base_context import ContextSet, Context, ContextWrapper, \ + LazyContextWrapper +from jedi.parser_utils import get_cached_parent_scope +from jedi.evaluate.utils import to_list +from jedi.evaluate.names import TreeNameDefinition, ParamName, AbstractNameDefinition + +_definition_name_cache = weakref.WeakKeyDictionary() + + +class AbstractFilter(object): + _until_position = None + + def _filter(self, names): + if self._until_position is not None: + return [n for n in names if n.start_pos < self._until_position] + return names + + @abstractmethod + def get(self, name): + raise NotImplementedError + + @abstractmethod + def values(self): + raise NotImplementedError + + +class FilterWrapper(object): + name_wrapper_class = None + + def __init__(self, wrapped_filter): + self._wrapped_filter = wrapped_filter + + def wrap_names(self, names): + return [self.name_wrapper_class(name) for name in names] + + def get(self, name): + return self.wrap_names(self._wrapped_filter.get(name)) + + def values(self): + return self.wrap_names(self._wrapped_filter.values()) + + +def _get_definition_names(used_names, name_key): + try: + for_module = _definition_name_cache[used_names] + except KeyError: + for_module = _definition_name_cache[used_names] = {} + + try: + return for_module[name_key] + except KeyError: + names = used_names.get(name_key, ()) + result = for_module[name_key] = tuple(name for name in names if name.is_definition()) + return result + + +class AbstractUsedNamesFilter(AbstractFilter): + name_class = TreeNameDefinition + + def __init__(self, context, parser_scope): + self._parser_scope = parser_scope + self._module_node = self._parser_scope.get_root_node() + self._used_names = self._module_node.get_used_names() + self.context = context + + def get(self, name, **filter_kwargs): + return self._convert_names(self._filter( + _get_definition_names(self._used_names, name), + **filter_kwargs + )) + + def _convert_names(self, names): + return [self.name_class(self.context, name) for name in names] + + def values(self, **filter_kwargs): + return self._convert_names( + name + for name_key in self._used_names + for name in self._filter( + _get_definition_names(self._used_names, name_key), + **filter_kwargs + ) + ) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.context) + + +class ParserTreeFilter(AbstractUsedNamesFilter): + # TODO remove evaluator as an argument, it's not used. + def __init__(self, evaluator, context, node_context=None, until_position=None, + origin_scope=None): + """ + node_context is an option to specify a second context for use cases + like the class mro where the parent class of a new name would be the + context, but for some type inference it's important to have a local + context of the other classes. + """ + if node_context is None: + node_context = context + super(ParserTreeFilter, self).__init__(context, node_context.tree_node) + self._node_context = node_context + self._origin_scope = origin_scope + self._until_position = until_position + + def _filter(self, names): + names = super(ParserTreeFilter, self)._filter(names) + names = [n for n in names if self._is_name_reachable(n)] + return list(self._check_flows(names)) + + def _is_name_reachable(self, name): + parent = name.parent + if parent.type == 'trailer': + return False + base_node = parent if parent.type in ('classdef', 'funcdef') else name + return get_cached_parent_scope(self._used_names, base_node) == self._parser_scope + + def _check_flows(self, names): + for name in sorted(names, key=lambda name: name.start_pos, reverse=True): + check = flow_analysis.reachability_check( + context=self._node_context, + context_scope=self._parser_scope, + node=name, + origin_scope=self._origin_scope + ) + if check is not flow_analysis.UNREACHABLE: + yield name + + if check is flow_analysis.REACHABLE: + break + + +class FunctionExecutionFilter(ParserTreeFilter): + param_name = ParamName + + def __init__(self, evaluator, context, node_context=None, + until_position=None, origin_scope=None): + super(FunctionExecutionFilter, self).__init__( + evaluator, + context, + node_context, + until_position, + origin_scope + ) + + @to_list + def _convert_names(self, names): + for name in names: + param = search_ancestor(name, 'param') + if param: + yield self.param_name(self.context, name) + else: + yield TreeNameDefinition(self.context, name) + + +class GlobalNameFilter(AbstractUsedNamesFilter): + def __init__(self, context, parser_scope): + super(GlobalNameFilter, self).__init__(context, parser_scope) + + def get(self, name): + try: + names = self._used_names[name] + except KeyError: + return [] + return self._convert_names(self._filter(names)) + + @to_list + def _filter(self, names): + for name in names: + if name.parent.type == 'global_stmt': + yield name + + def values(self): + return self._convert_names( + name for name_list in self._used_names.values() + for name in self._filter(name_list) + ) + + +class DictFilter(AbstractFilter): + def __init__(self, dct): + self._dct = dct + + def get(self, name): + try: + value = self._convert(name, self._dct[name]) + except KeyError: + return [] + else: + return list(self._filter([value])) + + def values(self): + def yielder(): + for item in self._dct.items(): + try: + yield self._convert(*item) + except KeyError: + pass + return self._filter(yielder()) + + def _convert(self, name, value): + return value + + def __repr__(self): + keys = ', '.join(self._dct.keys()) + return '<%s: for {%s}>' % (self.__class__.__name__, keys) + + +class MergedFilter(object): + def __init__(self, *filters): + self._filters = filters + + def get(self, name): + return [n for filter in self._filters for n in filter.get(name)] + + def values(self): + return [n for filter in self._filters for n in filter.values()] + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, ', '.join(str(f) for f in self._filters)) + + +class _BuiltinMappedMethod(Context): + """``Generator.__next__`` ``dict.values`` methods and so on.""" + api_type = u'function' + + def __init__(self, builtin_context, method, builtin_func): + super(_BuiltinMappedMethod, self).__init__( + builtin_context.evaluator, + parent_context=builtin_context + ) + self._method = method + self._builtin_func = builtin_func + + def py__call__(self, arguments): + # TODO add TypeError if params are given/or not correct. + return self._method(self.parent_context) + + def __getattr__(self, name): + return getattr(self._builtin_func, name) + + +class SpecialMethodFilter(DictFilter): + """ + A filter for methods that are defined in this module on the corresponding + classes like Generator (for __next__, etc). + """ + class SpecialMethodName(AbstractNameDefinition): + api_type = u'function' + + def __init__(self, parent_context, string_name, value, builtin_context): + callable_, python_version = value + if python_version is not None and \ + python_version != parent_context.evaluator.environment.version_info.major: + raise KeyError + + self.parent_context = parent_context + self.string_name = string_name + self._callable = callable_ + self._builtin_context = builtin_context + + def infer(self): + for filter in self._builtin_context.get_filters(): + # We can take the first index, because on builtin methods there's + # always only going to be one name. The same is true for the + # inferred values. + for name in filter.get(self.string_name): + builtin_func = next(iter(name.infer())) + break + else: + continue + break + return ContextSet([ + _BuiltinMappedMethod(self.parent_context, self._callable, builtin_func) + ]) + + def __init__(self, context, dct, builtin_context): + super(SpecialMethodFilter, self).__init__(dct) + self.context = context + self._builtin_context = builtin_context + """ + This context is what will be used to introspect the name, where as the + other context will be used to execute the function. + + We distinguish, because we have to. + """ + + def _convert(self, name, value): + return self.SpecialMethodName(self.context, name, value, self._builtin_context) + + +class _OverwriteMeta(type): + def __init__(cls, name, bases, dct): + super(_OverwriteMeta, cls).__init__(name, bases, dct) + + base_dct = {} + for base_cls in reversed(cls.__bases__): + try: + base_dct.update(base_cls.overwritten_methods) + except AttributeError: + pass + + for func in cls.__dict__.values(): + try: + base_dct.update(func.registered_overwritten_methods) + except AttributeError: + pass + cls.overwritten_methods = base_dct + + +class _AttributeOverwriteMixin(object): + def get_filters(self, search_global=False, *args, **kwargs): + yield SpecialMethodFilter(self, self.overwritten_methods, self._wrapped_context) + + for filter in self._wrapped_context.get_filters(search_global): + yield filter + + +class LazyAttributeOverwrite(use_metaclass(_OverwriteMeta, _AttributeOverwriteMixin, + LazyContextWrapper)): + def __init__(self, evaluator): + self.evaluator = evaluator + + +class AttributeOverwrite(use_metaclass(_OverwriteMeta, _AttributeOverwriteMixin, + ContextWrapper)): + pass + + +def publish_method(method_name, python_version_match=None): + def decorator(func): + dct = func.__dict__.setdefault('registered_overwritten_methods', {}) + dct[method_name] = func, python_version_match + return func + return decorator + + +def get_global_filters(evaluator, context, until_position, origin_scope): + """ + Returns all filters in order of priority for name resolution. + + For global name lookups. The filters will handle name resolution + themselves, but here we gather possible filters downwards. + + >>> from jedi._compatibility import u, no_unicode_pprint + >>> from jedi import Script + >>> script = Script(u(''' + ... x = ['a', 'b', 'c'] + ... def func(): + ... y = None + ... ''')) + >>> module_node = script._module_node + >>> scope = next(module_node.iter_funcdefs()) + >>> scope + + >>> context = script._get_module().create_context(scope) + >>> filters = list(get_global_filters(context.evaluator, context, (4, 0), None)) + + First we get the names from the function scope. + + >>> no_unicode_pprint(filters[0]) # doctest: +ELLIPSIS + MergedFilter(, ) + >>> sorted(str(n) for n in filters[0].values()) # doctest: +NORMALIZE_WHITESPACE + ['', + ''] + >>> filters[0]._filters[0]._until_position + (4, 0) + >>> filters[0]._filters[1]._until_position + + Then it yields the names from one level "lower". In this example, this is + the module scope (including globals). + As a side note, you can see, that the position in the filter is None on the + globals filter, because there the whole module is searched. + + >>> list(filters[1].values()) # package modules -> Also empty. + [] + >>> sorted(name.string_name for name in filters[2].values()) # Module attributes + ['__doc__', '__name__', '__package__'] + + Finally, it yields the builtin filter, if `include_builtin` is + true (default). + + >>> list(filters[3].values()) # doctest: +ELLIPSIS + [...] + """ + from jedi.evaluate.context.function import FunctionExecutionContext + while context is not None: + # Names in methods cannot be resolved within the class. + for filter in context.get_filters( + search_global=True, + until_position=until_position, + origin_scope=origin_scope): + yield filter + if isinstance(context, FunctionExecutionContext): + # The position should be reset if the current scope is a function. + until_position = None + + context = context.parent_context + + # Add builtins to the global scope. + yield next(evaluator.builtins_module.get_filters()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/finder.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/finder.py new file mode 100644 index 0000000..7b8b001 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/finder.py @@ -0,0 +1,290 @@ +""" +Searching for names with given scope and name. This is very central in Jedi and +Python. The name resolution is quite complicated with descripter, +``__getattribute__``, ``__getattr__``, ``global``, etc. + +If you want to understand name resolution, please read the first few chapters +in http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/. + +Flow checks ++++++++++++ + +Flow checks are not really mature. There's only a check for ``isinstance``. It +would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. +Unfortunately every other thing is being ignored (e.g. a == '' would be easy to +check for -> a is a string). There's big potential in these checks. +""" + +from parso.python import tree +from parso.tree import search_ancestor +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate import flow_analysis +from jedi.evaluate.arguments import TreeArguments +from jedi.evaluate import helpers +from jedi.evaluate.context import iterable +from jedi.evaluate.filters import get_global_filters +from jedi.evaluate.names import TreeNameDefinition +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.parser_utils import is_scope, get_parent_scope +from jedi.evaluate.gradual.conversion import convert_contexts + + +class NameFinder(object): + def __init__(self, evaluator, context, name_context, name_or_str, + position=None, analysis_errors=True): + self._evaluator = evaluator + # Make sure that it's not just a syntax tree node. + self._context = context + self._name_context = name_context + self._name = name_or_str + if isinstance(name_or_str, tree.Name): + self._string_name = name_or_str.value + else: + self._string_name = name_or_str + self._position = position + self._found_predefined_types = None + self._analysis_errors = analysis_errors + + def find(self, filters, attribute_lookup): + """ + :params bool attribute_lookup: Tell to logic if we're accessing the + attribute or the contents of e.g. a function. + """ + names = self.filter_name(filters) + if self._found_predefined_types is not None and names: + check = flow_analysis.reachability_check( + context=self._context, + context_scope=self._context.tree_node, + node=self._name, + ) + if check is flow_analysis.UNREACHABLE: + return NO_CONTEXTS + return self._found_predefined_types + + types = self._names_to_types(names, attribute_lookup) + + if not names and self._analysis_errors and not types \ + and not (isinstance(self._name, tree.Name) and + isinstance(self._name.parent.parent, tree.Param)): + if isinstance(self._name, tree.Name): + if attribute_lookup: + analysis.add_attribute_error( + self._name_context, self._context, self._name) + else: + message = ("NameError: name '%s' is not defined." + % self._string_name) + analysis.add(self._name_context, 'name-error', self._name, message) + + return types + + def _get_origin_scope(self): + if isinstance(self._name, tree.Name): + scope = self._name + while scope.parent is not None: + # TODO why if classes? + if not isinstance(scope, tree.Scope): + break + scope = scope.parent + return scope + else: + return None + + def get_filters(self, search_global=False): + origin_scope = self._get_origin_scope() + if search_global: + position = self._position + + # For functions and classes the defaults don't belong to the + # function and get evaluated in the context before the function. So + # make sure to exclude the function/class name. + if origin_scope is not None: + ancestor = search_ancestor(origin_scope, 'funcdef', 'classdef', 'lambdef') + lambdef = None + if ancestor == 'lambdef': + # For lambdas it's even more complicated since parts will + # be evaluated later. + lambdef = ancestor + ancestor = search_ancestor(origin_scope, 'funcdef', 'classdef') + if ancestor is not None: + colon = ancestor.children[-2] + if position is not None and position < colon.start_pos: + if lambdef is None or position < lambdef.children[-2].start_pos: + position = ancestor.start_pos + + return get_global_filters(self._evaluator, self._context, position, origin_scope) + else: + return self._get_context_filters(origin_scope) + + def _get_context_filters(self, origin_scope): + for f in self._context.get_filters(False, self._position, origin_scope=origin_scope): + yield f + # This covers the case where a stub files are incomplete. + if self._context.is_stub(): + for c in convert_contexts(ContextSet({self._context})): + for f in c.get_filters(): + yield f + + def filter_name(self, filters): + """ + Searches names that are defined in a scope (the different + ``filters``), until a name fits. + """ + names = [] + # This paragraph is currently needed for proper branch evaluation + # (static analysis). + if self._context.predefined_names and isinstance(self._name, tree.Name): + node = self._name + while node is not None and not is_scope(node): + node = node.parent + if node.type in ("if_stmt", "for_stmt", "comp_for", 'sync_comp_for'): + try: + name_dict = self._context.predefined_names[node] + types = name_dict[self._string_name] + except KeyError: + continue + else: + self._found_predefined_types = types + break + + for filter in filters: + names = filter.get(self._string_name) + if names: + if len(names) == 1: + n, = names + if isinstance(n, TreeNameDefinition): + # Something somewhere went terribly wrong. This + # typically happens when using goto on an import in an + # __init__ file. I think we need a better solution, but + # it's kind of hard, because for Jedi it's not clear + # that that name has not been defined, yet. + if n.tree_name == self._name: + def_ = self._name.get_definition() + if def_ is not None and def_.type == 'import_from': + continue + break + + debug.dbg('finder.filter_name %s in (%s): %s@%s', + self._string_name, self._context, names, self._position) + return list(names) + + def _check_getattr(self, inst): + """Checks for both __getattr__ and __getattribute__ methods""" + # str is important, because it shouldn't be `Name`! + name = compiled.create_simple_object(self._evaluator, self._string_name) + + # This is a little bit special. `__getattribute__` is in Python + # executed before `__getattr__`. But: I know no use case, where + # this could be practical and where Jedi would return wrong types. + # If you ever find something, let me know! + # We are inversing this, because a hand-crafted `__getattribute__` + # could still call another hand-crafted `__getattr__`, but not the + # other way around. + names = (inst.get_function_slot_names(u'__getattr__') or + inst.get_function_slot_names(u'__getattribute__')) + return inst.execute_function_slots(names, name) + + def _names_to_types(self, names, attribute_lookup): + contexts = ContextSet.from_sets(name.infer() for name in names) + + debug.dbg('finder._names_to_types: %s -> %s', names, contexts) + if not names and self._context.is_instance() and not self._context.is_compiled(): + # handling __getattr__ / __getattribute__ + return self._check_getattr(self._context) + + # Add isinstance and other if/assert knowledge. + if not contexts and isinstance(self._name, tree.Name) and \ + not self._name_context.is_instance() and not self._context.is_compiled(): + flow_scope = self._name + base_nodes = [self._name_context.tree_node] + + if any(b.type in ('comp_for', 'sync_comp_for') for b in base_nodes): + return contexts + while True: + flow_scope = get_parent_scope(flow_scope, include_flows=True) + n = _check_flow_information(self._name_context, flow_scope, + self._name, self._position) + if n is not None: + return n + if flow_scope in base_nodes: + break + return contexts + + +def _check_flow_information(context, flow, search_name, pos): + """ Try to find out the type of a variable just with the information that + is given by the flows: e.g. It is also responsible for assert checks.:: + + if isinstance(k, str): + k. # <- completion here + + ensures that `k` is a string. + """ + if not settings.dynamic_flow_information: + return None + + result = None + if is_scope(flow): + # Check for asserts. + module_node = flow.get_root_node() + try: + names = module_node.get_used_names()[search_name.value] + except KeyError: + return None + names = reversed([ + n for n in names + if flow.start_pos <= n.start_pos < (pos or flow.end_pos) + ]) + + for name in names: + ass = search_ancestor(name, 'assert_stmt') + if ass is not None: + result = _check_isinstance_type(context, ass.assertion, search_name) + if result is not None: + return result + + if flow.type in ('if_stmt', 'while_stmt'): + potential_ifs = [c for c in flow.children[1::4] if c != ':'] + for if_test in reversed(potential_ifs): + if search_name.start_pos > if_test.end_pos: + return _check_isinstance_type(context, if_test, search_name) + return result + + +def _check_isinstance_type(context, element, search_name): + try: + assert element.type in ('power', 'atom_expr') + # this might be removed if we analyze and, etc + assert len(element.children) == 2 + first, trailer = element.children + assert first.type == 'name' and first.value == 'isinstance' + assert trailer.type == 'trailer' and trailer.children[0] == '(' + assert len(trailer.children) == 3 + + # arglist stuff + arglist = trailer.children[1] + args = TreeArguments(context.evaluator, context, arglist, trailer) + param_list = list(args.unpack()) + # Disallow keyword arguments + assert len(param_list) == 2 + (key1, lazy_context_object), (key2, lazy_context_cls) = param_list + assert key1 is None and key2 is None + call = helpers.call_of_leaf(search_name) + is_instance_call = helpers.call_of_leaf(lazy_context_object.data) + # Do a simple get_code comparison. They should just have the same code, + # and everything will be all right. + normalize = context.evaluator.grammar._normalize + assert normalize(is_instance_call) == normalize(call) + except AssertionError: + return None + + context_set = NO_CONTEXTS + for cls_or_tup in lazy_context_cls.infer(): + if isinstance(cls_or_tup, iterable.Sequence) and cls_or_tup.array_type == 'tuple': + for lazy_context in cls_or_tup.py__iter__(): + context_set |= lazy_context.infer().execute_evaluated() + else: + context_set |= cls_or_tup.execute_evaluated() + return context_set diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/flow_analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/flow_analysis.py new file mode 100644 index 0000000..474071f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/flow_analysis.py @@ -0,0 +1,118 @@ +from jedi.parser_utils import get_flow_branch_keyword, is_scope, get_parent_scope +from jedi.evaluate.recursion import execution_allowed + + +class Status(object): + lookup_table = {} + + def __init__(self, value, name): + self._value = value + self._name = name + Status.lookup_table[value] = self + + def invert(self): + if self is REACHABLE: + return UNREACHABLE + elif self is UNREACHABLE: + return REACHABLE + else: + return UNSURE + + def __and__(self, other): + if UNSURE in (self, other): + return UNSURE + else: + return REACHABLE if self._value and other._value else UNREACHABLE + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self._name) + + +REACHABLE = Status(True, 'reachable') +UNREACHABLE = Status(False, 'unreachable') +UNSURE = Status(None, 'unsure') + + +def _get_flow_scopes(node): + while True: + node = get_parent_scope(node, include_flows=True) + if node is None or is_scope(node): + return + yield node + + +def reachability_check(context, context_scope, node, origin_scope=None): + first_flow_scope = get_parent_scope(node, include_flows=True) + if origin_scope is not None: + origin_flow_scopes = list(_get_flow_scopes(origin_scope)) + node_flow_scopes = list(_get_flow_scopes(node)) + + branch_matches = True + for flow_scope in origin_flow_scopes: + if flow_scope in node_flow_scopes: + node_keyword = get_flow_branch_keyword(flow_scope, node) + origin_keyword = get_flow_branch_keyword(flow_scope, origin_scope) + branch_matches = node_keyword == origin_keyword + if flow_scope.type == 'if_stmt': + if not branch_matches: + return UNREACHABLE + elif flow_scope.type == 'try_stmt': + if not branch_matches and origin_keyword == 'else' \ + and node_keyword == 'except': + return UNREACHABLE + if branch_matches: + break + + # Direct parents get resolved, we filter scopes that are separate + # branches. This makes sense for autocompletion and static analysis. + # For actual Python it doesn't matter, because we're talking about + # potentially unreachable code. + # e.g. `if 0:` would cause all name lookup within the flow make + # unaccessible. This is not a "problem" in Python, because the code is + # never called. In Jedi though, we still want to infer types. + while origin_scope is not None: + if first_flow_scope == origin_scope and branch_matches: + return REACHABLE + origin_scope = origin_scope.parent + + return _break_check(context, context_scope, first_flow_scope, node) + + +def _break_check(context, context_scope, flow_scope, node): + reachable = REACHABLE + if flow_scope.type == 'if_stmt': + if flow_scope.is_node_after_else(node): + for check_node in flow_scope.get_test_nodes(): + reachable = _check_if(context, check_node) + if reachable in (REACHABLE, UNSURE): + break + reachable = reachable.invert() + else: + flow_node = flow_scope.get_corresponding_test_node(node) + if flow_node is not None: + reachable = _check_if(context, flow_node) + elif flow_scope.type in ('try_stmt', 'while_stmt'): + return UNSURE + + # Only reachable branches need to be examined further. + if reachable in (UNREACHABLE, UNSURE): + return reachable + + if context_scope != flow_scope and context_scope != flow_scope.parent: + flow_scope = get_parent_scope(flow_scope, include_flows=True) + return reachable & _break_check(context, context_scope, flow_scope, node) + else: + return reachable + + +def _check_if(context, node): + with execution_allowed(context.evaluator, node) as allowed: + if not allowed: + return UNSURE + + types = context.eval_node(node) + values = set(x.py__bool__() for x in types) + if len(values) == 1: + return Status.lookup_table[values.pop()] + else: + return UNSURE diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/annotation.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/annotation.py new file mode 100644 index 0000000..c014512 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/annotation.py @@ -0,0 +1,405 @@ +""" +PEP 0484 ( https://www.python.org/dev/peps/pep-0484/ ) describes type hints +through function annotations. There is a strong suggestion in this document +that only the type of type hinting defined in PEP0484 should be allowed +as annotations in future python versions. +""" + +import re + +from parso import ParserSyntaxError, parse + +from jedi._compatibility import force_unicode +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.typing import TypeVar, LazyGenericClass, \ + AbstractAnnotatedClass +from jedi.evaluate.gradual.typing import GenericClass +from jedi.evaluate.helpers import is_string +from jedi.evaluate.compiled import builtin_from_name +from jedi import debug +from jedi import parser_utils + + +def eval_annotation(context, annotation): + """ + Evaluates an annotation node. This means that it evaluates the part of + `int` here: + + foo: int = 3 + + Also checks for forward references (strings) + """ + context_set = context.eval_node(annotation) + if len(context_set) != 1: + debug.warning("Eval'ed typing index %s should lead to 1 object, " + " not %s" % (annotation, context_set)) + return context_set + + evaled_context = list(context_set)[0] + if is_string(evaled_context): + result = _get_forward_reference_node(context, evaled_context.get_safe_value()) + if result is not None: + return context.eval_node(result) + return context_set + + +def _evaluate_annotation_string(context, string, index=None): + node = _get_forward_reference_node(context, string) + if node is None: + return NO_CONTEXTS + + context_set = context.eval_node(node) + if index is not None: + context_set = context_set.filter( + lambda context: context.array_type == u'tuple' # noqa + and len(list(context.py__iter__())) >= index + ).py__simple_getitem__(index) + return context_set + + +def _get_forward_reference_node(context, string): + try: + new_node = context.evaluator.grammar.parse( + force_unicode(string), + start_symbol='eval_input', + error_recovery=False + ) + except ParserSyntaxError: + debug.warning('Annotation not parsed: %s' % string) + return None + else: + module = context.tree_node.get_root_node() + parser_utils.move(new_node, module.end_pos[0]) + new_node.parent = context.tree_node + return new_node + + +def _split_comment_param_declaration(decl_text): + """ + Split decl_text on commas, but group generic expressions + together. + + For example, given "foo, Bar[baz, biz]" we return + ['foo', 'Bar[baz, biz]']. + + """ + try: + node = parse(decl_text, error_recovery=False).children[0] + except ParserSyntaxError: + debug.warning('Comment annotation is not valid Python: %s' % decl_text) + return [] + + if node.type == 'name': + return [node.get_code().strip()] + + params = [] + try: + children = node.children + except AttributeError: + return [] + else: + for child in children: + if child.type in ['name', 'atom_expr', 'power']: + params.append(child.get_code().strip()) + + return params + + +@evaluator_method_cache() +def infer_param(execution_context, param): + contexts = _infer_param(execution_context, param) + evaluator = execution_context.evaluator + if param.star_count == 1: + tuple_ = builtin_from_name(evaluator, 'tuple') + return ContextSet([GenericClass( + tuple_, + generics=(contexts,), + ) for c in contexts]) + elif param.star_count == 2: + dct = builtin_from_name(evaluator, 'dict') + return ContextSet([GenericClass( + dct, + generics=(ContextSet([builtin_from_name(evaluator, 'str')]), contexts), + ) for c in contexts]) + pass + return contexts + + +def _infer_param(execution_context, param): + """ + Infers the type of a function parameter, using type annotations. + """ + annotation = param.annotation + if annotation is None: + # If no Python 3-style annotation, look for a Python 2-style comment + # annotation. + # Identify parameters to function in the same sequence as they would + # appear in a type comment. + all_params = [child for child in param.parent.children + if child.type == 'param'] + + node = param.parent.parent + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return NO_CONTEXTS + + match = re.match(r"^#\s*type:\s*\(([^#]*)\)\s*->", comment) + if not match: + return NO_CONTEXTS + params_comments = _split_comment_param_declaration(match.group(1)) + + # Find the specific param being investigated + index = all_params.index(param) + # If the number of parameters doesn't match length of type comment, + # ignore first parameter (assume it's self). + if len(params_comments) != len(all_params): + debug.warning( + "Comments length != Params length %s %s", + params_comments, all_params + ) + from jedi.evaluate.context.instance import InstanceArguments + if isinstance(execution_context.var_args, InstanceArguments): + if index == 0: + # Assume it's self, which is already handled + return NO_CONTEXTS + index -= 1 + if index >= len(params_comments): + return NO_CONTEXTS + + param_comment = params_comments[index] + return _evaluate_annotation_string( + execution_context.function_context.get_default_param_context(), + param_comment + ) + # Annotations are like default params and resolve in the same way. + context = execution_context.function_context.get_default_param_context() + return eval_annotation(context, annotation) + + +def py__annotations__(funcdef): + dct = {} + for function_param in funcdef.get_params(): + param_annotation = function_param.annotation + if param_annotation is not None: + dct[function_param.name.value] = param_annotation + + return_annotation = funcdef.annotation + if return_annotation: + dct['return'] = return_annotation + return dct + + +@evaluator_method_cache() +def infer_return_types(function_execution_context): + """ + Infers the type of a function's return value, + according to type annotations. + """ + all_annotations = py__annotations__(function_execution_context.tree_node) + annotation = all_annotations.get("return", None) + if annotation is None: + # If there is no Python 3-type annotation, look for a Python 2-type annotation + node = function_execution_context.tree_node + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return NO_CONTEXTS + + match = re.match(r"^#\s*type:\s*\([^#]*\)\s*->\s*([^#]*)", comment) + if not match: + return NO_CONTEXTS + + return _evaluate_annotation_string( + function_execution_context.function_context.get_default_param_context(), + match.group(1).strip() + ).execute_annotation() + if annotation is None: + return NO_CONTEXTS + + context = function_execution_context.function_context.get_default_param_context() + unknown_type_vars = list(find_unknown_type_vars(context, annotation)) + annotation_contexts = eval_annotation(context, annotation) + if not unknown_type_vars: + return annotation_contexts.execute_annotation() + + type_var_dict = infer_type_vars_for_execution(function_execution_context, all_annotations) + + return ContextSet.from_sets( + ann.define_generics(type_var_dict) + if isinstance(ann, (AbstractAnnotatedClass, TypeVar)) else ContextSet({ann}) + for ann in annotation_contexts + ).execute_annotation() + + +def infer_type_vars_for_execution(execution_context, annotation_dict): + """ + Some functions use type vars that are not defined by the class, but rather + only defined in the function. See for example `iter`. In those cases we + want to: + + 1. Search for undefined type vars. + 2. Infer type vars with the execution state we have. + 3. Return the union of all type vars that have been found. + """ + context = execution_context.function_context.get_default_param_context() + + annotation_variable_results = {} + executed_params, _ = execution_context.get_executed_params_and_issues() + for executed_param in executed_params: + try: + annotation_node = annotation_dict[executed_param.string_name] + except KeyError: + continue + + annotation_variables = find_unknown_type_vars(context, annotation_node) + if annotation_variables: + # Infer unknown type var + annotation_context_set = context.eval_node(annotation_node) + star_count = executed_param._param_node.star_count + actual_context_set = executed_param.infer(use_hints=False) + if star_count == 1: + actual_context_set = actual_context_set.merge_types_of_iterate() + elif star_count == 2: + # TODO _dict_values is not public. + actual_context_set = actual_context_set.try_merge('_dict_values') + for ann in annotation_context_set: + _merge_type_var_dicts( + annotation_variable_results, + _infer_type_vars(ann, actual_context_set), + ) + + return annotation_variable_results + + +def _merge_type_var_dicts(base_dict, new_dict): + for type_var_name, contexts in new_dict.items(): + try: + base_dict[type_var_name] |= contexts + except KeyError: + base_dict[type_var_name] = contexts + + +def _infer_type_vars(annotation_context, context_set): + """ + This function tries to find information about undefined type vars and + returns a dict from type var name to context set. + + This is for example important to understand what `iter([1])` returns. + According to typeshed, `iter` returns an `Iterator[_T]`: + + def iter(iterable: Iterable[_T]) -> Iterator[_T]: ... + + This functions would generate `int` for `_T` in this case, because it + unpacks the `Iterable`. + """ + type_var_dict = {} + if isinstance(annotation_context, TypeVar): + return {annotation_context.py__name__(): context_set.py__class__()} + elif isinstance(annotation_context, LazyGenericClass): + name = annotation_context.py__name__() + if name == 'Iterable': + given = annotation_context.get_generics() + if given: + for nested_annotation_context in given[0]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + context_set.merge_types_of_iterate() + ) + ) + elif name == 'Mapping': + given = annotation_context.get_generics() + if len(given) == 2: + for context in context_set: + try: + method = context.get_mapping_item_contexts + except AttributeError: + continue + key_contexts, value_contexts = method() + + for nested_annotation_context in given[0]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + key_contexts, + ) + ) + for nested_annotation_context in given[1]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + value_contexts, + ) + ) + return type_var_dict + + +def find_type_from_comment_hint_for(context, node, name): + return _find_type_from_comment_hint(context, node, node.children[1], name) + + +def find_type_from_comment_hint_with(context, node, name): + assert len(node.children[1].children) == 3, \ + "Can only be here when children[1] is 'foo() as f'" + varlist = node.children[1].children[2] + return _find_type_from_comment_hint(context, node, varlist, name) + + +def find_type_from_comment_hint_assign(context, node, name): + return _find_type_from_comment_hint(context, node, node.children[0], name) + + +def _find_type_from_comment_hint(context, node, varlist, name): + index = None + if varlist.type in ("testlist_star_expr", "exprlist", "testlist"): + # something like "a, b = 1, 2" + index = 0 + for child in varlist.children: + if child == name: + break + if child.type == "operator": + continue + index += 1 + else: + return [] + + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return [] + match = re.match(r"^#\s*type:\s*([^#]*)", comment) + if match is None: + return [] + return _evaluate_annotation_string( + context, match.group(1).strip(), index + ).execute_annotation() + + +def find_unknown_type_vars(context, node): + def check_node(node): + if node.type in ('atom_expr', 'power'): + trailer = node.children[-1] + if trailer.type == 'trailer' and trailer.children[0] == '[': + for subscript_node in _unpack_subscriptlist(trailer.children[1]): + check_node(subscript_node) + else: + type_var_set = context.eval_node(node) + for type_var in type_var_set: + if isinstance(type_var, TypeVar) and type_var not in found: + found.append(type_var) + + found = [] # We're not using a set, because the order matters. + check_node(node) + return found + + +def _unpack_subscriptlist(subscriptlist): + if subscriptlist.type == 'subscriptlist': + for subscript in subscriptlist.children[::2]: + if subscript.type != 'subscript': + yield subscript + else: + if subscriptlist.type != 'subscript': + yield subscriptlist diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/conversion.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/conversion.py new file mode 100644 index 0000000..88f4942 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/conversion.py @@ -0,0 +1,199 @@ +from jedi import debug +from jedi.evaluate.base_context import ContextSet, \ + NO_CONTEXTS +from jedi.evaluate.utils import to_list +from jedi.evaluate.gradual.stub_context import StubModuleContext + + +def _stub_to_python_context_set(stub_context, ignore_compiled=False): + stub_module = stub_context.get_root_context() + if not stub_module.is_stub(): + return ContextSet([stub_context]) + + was_instance = stub_context.is_instance() + if was_instance: + stub_context = stub_context.py__class__() + + qualified_names = stub_context.get_qualified_names() + if qualified_names is None: + return NO_CONTEXTS + + was_bound_method = stub_context.is_bound_method() + if was_bound_method: + # Infer the object first. We can infer the method later. + method_name = qualified_names[-1] + qualified_names = qualified_names[:-1] + was_instance = True + + contexts = _infer_from_stub(stub_module, qualified_names, ignore_compiled) + if was_instance: + contexts = ContextSet.from_sets( + c.execute_evaluated() + for c in contexts + if c.is_class() + ) + if was_bound_method: + # Now that the instance has been properly created, we can simply get + # the method. + contexts = contexts.py__getattribute__(method_name) + return contexts + + +def _infer_from_stub(stub_module, qualified_names, ignore_compiled): + from jedi.evaluate.compiled.mixed import MixedObject + assert isinstance(stub_module, (StubModuleContext, MixedObject)), stub_module + non_stubs = stub_module.non_stub_context_set + if ignore_compiled: + non_stubs = non_stubs.filter(lambda c: not c.is_compiled()) + for name in qualified_names: + non_stubs = non_stubs.py__getattribute__(name) + return non_stubs + + +@to_list +def _try_stub_to_python_names(names, prefer_stub_to_compiled=False): + for name in names: + module = name.get_root_context() + if not module.is_stub(): + yield name + continue + + name_list = name.get_qualified_names() + if name_list is None: + contexts = NO_CONTEXTS + else: + contexts = _infer_from_stub( + module, + name_list[:-1], + ignore_compiled=prefer_stub_to_compiled, + ) + if contexts and name_list: + new_names = contexts.py__getattribute__(name_list[-1], is_goto=True) + for new_name in new_names: + yield new_name + if new_names: + continue + elif contexts: + for c in contexts: + yield c.name + continue + # This is the part where if we haven't found anything, just return the + # stub name. + yield name + + +def _load_stub_module(module): + if module.is_stub(): + return module + from jedi.evaluate.gradual.typeshed import _try_to_load_stub_cached + return _try_to_load_stub_cached( + module.evaluator, + import_names=module.string_names, + python_context_set=ContextSet([module]), + parent_module_context=None, + sys_path=module.evaluator.get_sys_path(), + ) + + +@to_list +def _python_to_stub_names(names, fallback_to_python=False): + for name in names: + module = name.get_root_context() + if module.is_stub(): + yield name + continue + + if name.is_import(): + for new_name in name.goto(): + # Imports don't need to be converted, because they are already + # stubs if possible. + if fallback_to_python or new_name.is_stub(): + yield new_name + continue + + name_list = name.get_qualified_names() + stubs = NO_CONTEXTS + if name_list is not None: + stub_module = _load_stub_module(module) + if stub_module is not None: + stubs = ContextSet({stub_module}) + for name in name_list[:-1]: + stubs = stubs.py__getattribute__(name) + if stubs and name_list: + new_names = stubs.py__getattribute__(name_list[-1], is_goto=True) + for new_name in new_names: + yield new_name + if new_names: + continue + elif stubs: + for c in stubs: + yield c.name + continue + if fallback_to_python: + # This is the part where if we haven't found anything, just return + # the stub name. + yield name + + +def convert_names(names, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + with debug.increase_indent_cm('convert names'): + if only_stubs or prefer_stubs: + return _python_to_stub_names(names, fallback_to_python=prefer_stubs) + else: + return _try_stub_to_python_names(names, prefer_stub_to_compiled=True) + + +def convert_contexts(contexts, only_stubs=False, prefer_stubs=False, ignore_compiled=True): + assert not (only_stubs and prefer_stubs) + with debug.increase_indent_cm('convert contexts'): + if only_stubs or prefer_stubs: + return ContextSet.from_sets( + to_stub(context) + or (ContextSet({context}) if prefer_stubs else NO_CONTEXTS) + for context in contexts + ) + else: + return ContextSet.from_sets( + _stub_to_python_context_set(stub_context, ignore_compiled=ignore_compiled) + or ContextSet({stub_context}) + for stub_context in contexts + ) + + +# TODO merge with _python_to_stub_names? +def to_stub(context): + if context.is_stub(): + return ContextSet([context]) + + was_instance = context.is_instance() + if was_instance: + context = context.py__class__() + + qualified_names = context.get_qualified_names() + stub_module = _load_stub_module(context.get_root_context()) + if stub_module is None or qualified_names is None: + return NO_CONTEXTS + + was_bound_method = context.is_bound_method() + if was_bound_method: + # Infer the object first. We can infer the method later. + method_name = qualified_names[-1] + qualified_names = qualified_names[:-1] + was_instance = True + + stub_contexts = ContextSet([stub_module]) + for name in qualified_names: + stub_contexts = stub_contexts.py__getattribute__(name) + + if was_instance: + stub_contexts = ContextSet.from_sets( + c.execute_evaluated() + for c in stub_contexts + if c.is_class() + ) + if was_bound_method: + # Now that the instance has been properly created, we can simply get + # the method. + stub_contexts = stub_contexts.py__getattribute__(method_name) + return stub_contexts diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/stub_context.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/stub_context.py new file mode 100644 index 0000000..94090c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/stub_context.py @@ -0,0 +1,105 @@ +from jedi.evaluate.base_context import ContextWrapper +from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.filters import ParserTreeFilter, \ + TreeNameDefinition +from jedi.evaluate.gradual.typing import TypingModuleFilterWrapper + + +class StubModuleContext(ModuleContext): + def __init__(self, non_stub_context_set, *args, **kwargs): + super(StubModuleContext, self).__init__(*args, **kwargs) + self.non_stub_context_set = non_stub_context_set + + def is_stub(self): + return True + + def sub_modules_dict(self): + """ + We have to overwrite this, because it's possible to have stubs that + don't have code for all the child modules. At the time of writing this + there are for example no stubs for `json.tool`. + """ + names = {} + for context in self.non_stub_context_set: + try: + method = context.sub_modules_dict + except AttributeError: + pass + else: + names.update(method()) + names.update(super(StubModuleContext, self).sub_modules_dict()) + return names + + def _get_first_non_stub_filters(self): + for context in self.non_stub_context_set: + yield next(context.get_filters(search_global=False)) + + def _get_stub_filters(self, search_global, **filter_kwargs): + return [StubFilter( + self.evaluator, + context=self, + search_global=search_global, + **filter_kwargs + )] + list(self.iter_star_filters(search_global=search_global)) + + def get_filters(self, search_global=False, until_position=None, + origin_scope=None, **kwargs): + filters = super(StubModuleContext, self).get_filters( + search_global, until_position, origin_scope, **kwargs + ) + next(filters) # Ignore the first filter and replace it with our own + stub_filters = self._get_stub_filters( + search_global=search_global, + until_position=until_position, + origin_scope=origin_scope, + ) + for f in stub_filters: + yield f + + for f in filters: + yield f + + +class TypingModuleWrapper(StubModuleContext): + def get_filters(self, *args, **kwargs): + filters = super(TypingModuleWrapper, self).get_filters(*args, **kwargs) + yield TypingModuleFilterWrapper(next(filters)) + for f in filters: + yield f + + +# From here on down we make looking up the sys.version_info fast. +class _StubName(TreeNameDefinition): + def infer(self): + inferred = super(_StubName, self).infer() + if self.string_name == 'version_info' and self.get_root_context().py__name__() == 'sys': + return [VersionInfo(c) for c in inferred] + return inferred + + +class StubFilter(ParserTreeFilter): + name_class = _StubName + + def __init__(self, *args, **kwargs): + self._search_global = kwargs.pop('search_global') # Python 2 :/ + super(StubFilter, self).__init__(*args, **kwargs) + + def _is_name_reachable(self, name): + if not super(StubFilter, self)._is_name_reachable(name): + return False + + if not self._search_global: + # Imports in stub files are only public if they have an "as" + # export. + definition = name.get_definition() + if definition.type in ('import_from', 'import_name'): + if name.parent.type not in ('import_as_name', 'dotted_as_name'): + return False + n = name.value + if n.startswith('_') and not (n.startswith('__') and n.endswith('__')): + return False + return True + + +class VersionInfo(ContextWrapper): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typeshed.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typeshed.py new file mode 100644 index 0000000..5a386c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typeshed.py @@ -0,0 +1,289 @@ +import os +import re +from functools import wraps + +from jedi.file_io import FileIO +from jedi._compatibility import FileNotFoundError, cast_path +from jedi.parser_utils import get_cached_code_lines +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.stub_context import TypingModuleWrapper, StubModuleContext + +_jedi_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +TYPESHED_PATH = os.path.join(_jedi_path, 'third_party', 'typeshed') + +_IMPORT_MAP = dict( + _collections='collections', + _socket='socket', +) + + +def _merge_create_stub_map(directories): + map_ = {} + for directory in directories: + map_.update(_create_stub_map(directory)) + return map_ + + +def _create_stub_map(directory): + """ + Create a mapping of an importable name in Python to a stub file. + """ + def generate(): + try: + listed = os.listdir(directory) + except (FileNotFoundError, OSError): + # OSError is Python 2 + return + + for entry in listed: + entry = cast_path(entry) + path = os.path.join(directory, entry) + if os.path.isdir(path): + init = os.path.join(path, '__init__.pyi') + if os.path.isfile(init): + yield entry, init + elif entry.endswith('.pyi') and os.path.isfile(path): + name = entry.rstrip('.pyi') + if name != '__init__': + yield name, path + + # Create a dictionary from the tuple generator. + return dict(generate()) + + +def _get_typeshed_directories(version_info): + check_version_list = ['2and3', str(version_info.major)] + for base in ['stdlib', 'third_party']: + base = os.path.join(TYPESHED_PATH, base) + base_list = os.listdir(base) + for base_list_entry in base_list: + match = re.match(r'(\d+)\.(\d+)$', base_list_entry) + if match is not None: + if int(match.group(1)) == version_info.major \ + and int(match.group(2)) <= version_info.minor: + check_version_list.append(base_list_entry) + + for check_version in check_version_list: + yield os.path.join(base, check_version) + + +_version_cache = {} + + +def _cache_stub_file_map(version_info): + """ + Returns a map of an importable name in Python to a stub file. + """ + # TODO this caches the stub files indefinitely, maybe use a time cache + # for that? + version = version_info[:2] + try: + return _version_cache[version] + except KeyError: + pass + + _version_cache[version] = file_set = \ + _merge_create_stub_map(_get_typeshed_directories(version_info)) + return file_set + + +def import_module_decorator(func): + @wraps(func) + def wrapper(evaluator, import_names, parent_module_context, sys_path, prefer_stubs): + try: + python_context_set = evaluator.module_cache.get(import_names) + except KeyError: + if parent_module_context is not None and parent_module_context.is_stub(): + parent_module_contexts = parent_module_context.non_stub_context_set + else: + parent_module_contexts = [parent_module_context] + if import_names == ('os', 'path'): + # This is a huge exception, we follow a nested import + # ``os.path``, because it's a very important one in Python + # that is being achieved by messing with ``sys.modules`` in + # ``os``. + python_parent = next(iter(parent_module_contexts)) + if python_parent is None: + python_parent, = evaluator.import_module(('os',), prefer_stubs=False) + python_context_set = python_parent.py__getattribute__('path') + else: + python_context_set = ContextSet.from_sets( + func(evaluator, import_names, p, sys_path,) + for p in parent_module_contexts + ) + evaluator.module_cache.add(import_names, python_context_set) + + if not prefer_stubs: + return python_context_set + + stub = _try_to_load_stub_cached(evaluator, import_names, python_context_set, + parent_module_context, sys_path) + if stub is not None: + return ContextSet([stub]) + return python_context_set + + return wrapper + + +def _try_to_load_stub_cached(evaluator, import_names, *args, **kwargs): + try: + return evaluator.stub_module_cache[import_names] + except KeyError: + pass + + # TODO is this needed? where are the exceptions coming from that make this + # necessary? Just remove this line. + evaluator.stub_module_cache[import_names] = None + evaluator.stub_module_cache[import_names] = result = \ + _try_to_load_stub(evaluator, import_names, *args, **kwargs) + return result + + +def _try_to_load_stub(evaluator, import_names, python_context_set, + parent_module_context, sys_path): + """ + Trying to load a stub for a set of import_names. + + This is modelled to work like "PEP 561 -- Distributing and Packaging Type + Information", see https://www.python.org/dev/peps/pep-0561. + """ + if parent_module_context is None and len(import_names) > 1: + try: + parent_module_context = _try_to_load_stub_cached( + evaluator, import_names[:-1], NO_CONTEXTS, + parent_module_context=None, sys_path=sys_path) + except KeyError: + pass + + # 1. Try to load foo-stubs folders on path for import name foo. + if len(import_names) == 1: + # foo-stubs + for p in sys_path: + init = os.path.join(p, *import_names) + '-stubs' + os.path.sep + '__init__.pyi' + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(init), + import_names=import_names, + ) + if m is not None: + return m + + # 2. Try to load pyi files next to py files. + for c in python_context_set: + try: + method = c.py__file__ + except AttributeError: + pass + else: + file_path = method() + file_paths = [] + if c.is_namespace(): + file_paths = [os.path.join(p, '__init__.pyi') for p in c.py__path__()] + elif file_path is not None and file_path.endswith('.py'): + file_paths = [file_path + 'i'] + + for file_path in file_paths: + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + # The file path should end with .pyi + file_io=FileIO(file_path), + import_names=import_names, + ) + if m is not None: + return m + + # 3. Try to load typeshed + m = _load_from_typeshed(evaluator, python_context_set, parent_module_context, import_names) + if m is not None: + return m + + # 4. Try to load pyi file somewhere if python_context_set was not defined. + if not python_context_set: + if parent_module_context is not None: + try: + method = parent_module_context.py__path__ + except AttributeError: + check_path = [] + else: + check_path = method() + # In case import_names + names_for_path = (import_names[-1],) + else: + check_path = sys_path + names_for_path = import_names + + for p in check_path: + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(os.path.join(p, *names_for_path) + '.pyi'), + import_names=import_names, + ) + if m is not None: + return m + + # If no stub is found, that's fine, the calling function has to deal with + # it. + return None + + +def _load_from_typeshed(evaluator, python_context_set, parent_module_context, import_names): + import_name = import_names[-1] + map_ = None + if len(import_names) == 1: + map_ = _cache_stub_file_map(evaluator.grammar.version_info) + import_name = _IMPORT_MAP.get(import_name, import_name) + elif isinstance(parent_module_context, StubModuleContext): + if not parent_module_context.is_package: + # Only if it's a package (= a folder) something can be + # imported. + return None + path = parent_module_context.py__path__() + map_ = _merge_create_stub_map(path) + + if map_ is not None: + path = map_.get(import_name) + if path is not None: + return _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(path), + import_names=import_names, + ) + + +def _try_to_load_stub_from_file(evaluator, python_context_set, file_io, import_names): + try: + stub_module_node = evaluator.parse( + file_io=file_io, + cache=True, + use_latest_grammar=True + ) + except (OSError, IOError): # IOError is Python 2 only + # The file that you're looking for doesn't exist (anymore). + return None + else: + return create_stub_module( + evaluator, python_context_set, stub_module_node, file_io, + import_names + ) + + +def create_stub_module(evaluator, python_context_set, stub_module_node, file_io, import_names): + if import_names == ('typing',): + module_cls = TypingModuleWrapper + else: + module_cls = StubModuleContext + file_name = os.path.basename(file_io.path) + stub_module_context = module_cls( + python_context_set, evaluator, stub_module_node, + file_io=file_io, + string_names=import_names, + # The code was loaded with latest_grammar, so use + # that. + code_lines=get_cached_code_lines(evaluator.latest_grammar, file_io.path), + is_package=file_name == '__init__.pyi', + ) + return stub_module_context diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typing.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typing.py new file mode 100644 index 0000000..20f2321 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/typing.py @@ -0,0 +1,707 @@ +""" +We need to somehow work with the typing objects. Since the typing objects are +pretty bare we need to add all the Jedi customizations to make them work as +contexts. + +This file deals with all the typing.py cases. +""" +from jedi._compatibility import unicode, force_unicode +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.compiled import builtin_from_name +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, Context, \ + iterator_to_context_set, ContextWrapper, LazyContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContexts +from jedi.evaluate.context.iterable import SequenceLiteralContext +from jedi.evaluate.arguments import repack_with_argument_clinic +from jedi.evaluate.utils import to_list +from jedi.evaluate.filters import FilterWrapper +from jedi.evaluate.names import NameWrapper, AbstractTreeName, \ + AbstractNameDefinition, ContextName +from jedi.evaluate.helpers import is_string +from jedi.evaluate.context.klass import ClassMixin, ClassFilter + +_PROXY_CLASS_TYPES = 'Tuple Generic Protocol Callable Type'.split() +_TYPE_ALIAS_TYPES = { + 'List': 'builtins.list', + 'Dict': 'builtins.dict', + 'Set': 'builtins.set', + 'FrozenSet': 'builtins.frozenset', + 'ChainMap': 'collections.ChainMap', + 'Counter': 'collections.Counter', + 'DefaultDict': 'collections.defaultdict', + 'Deque': 'collections.deque', +} +_PROXY_TYPES = 'Optional Union ClassVar'.split() + + +class TypingName(AbstractTreeName): + def __init__(self, context, other_name): + super(TypingName, self).__init__(context.parent_context, other_name.tree_name) + self._context = context + + def infer(self): + return ContextSet([self._context]) + + +class _BaseTypingContext(Context): + def __init__(self, evaluator, parent_context, tree_name): + super(_BaseTypingContext, self).__init__(evaluator, parent_context) + self._tree_name = tree_name + + @property + def tree_node(self): + return self._tree_name + + def get_filters(self, *args, **kwargs): + # TODO this is obviously wrong. Is it though? + class EmptyFilter(ClassFilter): + def __init__(self): + pass + + def get(self, name, **kwargs): + return [] + + def values(self, **kwargs): + return [] + + yield EmptyFilter() + + def py__class__(self): + # TODO this is obviously not correct, but at least gives us a class if + # we have none. Some of these objects don't really have a base class in + # typeshed. + return builtin_from_name(self.evaluator, u'object') + + @property + def name(self): + return ContextName(self, self._tree_name) + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._tree_name.value) + + +class TypingModuleName(NameWrapper): + def infer(self): + return ContextSet(self._remap()) + + def _remap(self): + name = self.string_name + evaluator = self.parent_context.evaluator + try: + actual = _TYPE_ALIAS_TYPES[name] + except KeyError: + pass + else: + yield TypeAlias.create_cached(evaluator, self.parent_context, self.tree_name, actual) + return + + if name in _PROXY_CLASS_TYPES: + yield TypingClassContext.create_cached(evaluator, self.parent_context, self.tree_name) + elif name in _PROXY_TYPES: + yield TypingContext.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'runtime': + # We don't want anything here, not sure what this function is + # supposed to do, since it just appears in the stubs and shouldn't + # have any effects there (because it's never executed). + return + elif name == 'TypeVar': + yield TypeVarClass.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'Any': + yield Any.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'TYPE_CHECKING': + # This is needed for e.g. imports that are only available for type + # checking or are in cycles. The user can then check this variable. + yield builtin_from_name(evaluator, u'True') + elif name == 'overload': + yield OverloadFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'NewType': + yield NewTypeFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'cast': + # TODO implement cast + yield CastFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'TypedDict': + # TODO doesn't even exist in typeshed/typing.py, yet. But will be + # added soon. + pass + elif name in ('no_type_check', 'no_type_check_decorator'): + # This is not necessary, as long as we are not doing type checking. + for c in self._wrapped_name.infer(): # Fuck my life Python 2 + yield c + else: + # Everything else shouldn't be relevant for type checking. + for c in self._wrapped_name.infer(): # Fuck my life Python 2 + yield c + + +class TypingModuleFilterWrapper(FilterWrapper): + name_wrapper_class = TypingModuleName + + +class _WithIndexBase(_BaseTypingContext): + def __init__(self, evaluator, parent_context, name, index_context, context_of_index): + super(_WithIndexBase, self).__init__(evaluator, parent_context, name) + self._index_context = index_context + self._context_of_index = context_of_index + + def __repr__(self): + return '<%s: %s[%s]>' % ( + self.__class__.__name__, + self._tree_name.value, + self._index_context, + ) + + +class TypingContextWithIndex(_WithIndexBase): + def execute_annotation(self): + string_name = self._tree_name.value + + if string_name == 'Union': + # This is kind of a special case, because we have Unions (in Jedi + # ContextSets). + return self.gather_annotation_classes().execute_annotation() + elif string_name == 'Optional': + # Optional is basically just saying it's either None or the actual + # type. + return self.gather_annotation_classes().execute_annotation() \ + | ContextSet([builtin_from_name(self.evaluator, u'None')]) + elif string_name == 'Type': + # The type is actually already given in the index_context + return ContextSet([self._index_context]) + elif string_name == 'ClassVar': + # For now don't do anything here, ClassVars are always used. + return self._index_context.execute_annotation() + + cls = globals()[string_name] + return ContextSet([cls( + self.evaluator, + self.parent_context, + self._tree_name, + self._index_context, + self._context_of_index + )]) + + def gather_annotation_classes(self): + return ContextSet.from_sets( + _iter_over_arguments(self._index_context, self._context_of_index) + ) + + +class TypingContext(_BaseTypingContext): + index_class = TypingContextWithIndex + py__simple_getitem__ = None + + def py__getitem__(self, index_context_set, contextualized_node): + return ContextSet( + self.index_class.create_cached( + self.evaluator, + self.parent_context, + self._tree_name, + index_context, + context_of_index=contextualized_node.context) + for index_context in index_context_set + ) + + +class _TypingClassMixin(object): + def py__bases__(self): + return [LazyKnownContexts( + self.evaluator.builtins_module.py__getattribute__('object') + )] + + def get_metaclasses(self): + return [] + + +class TypingClassContextWithIndex(_TypingClassMixin, TypingContextWithIndex, ClassMixin): + pass + + +class TypingClassContext(_TypingClassMixin, TypingContext, ClassMixin): + index_class = TypingClassContextWithIndex + + +def _iter_over_arguments(maybe_tuple_context, defining_context): + def iterate(): + if isinstance(maybe_tuple_context, SequenceLiteralContext): + for lazy_context in maybe_tuple_context.py__iter__(contextualized_node=None): + yield lazy_context.infer() + else: + yield ContextSet([maybe_tuple_context]) + + def resolve_forward_references(context_set): + for context in context_set: + if is_string(context): + from jedi.evaluate.gradual.annotation import _get_forward_reference_node + node = _get_forward_reference_node(defining_context, context.get_safe_value()) + if node is not None: + for c in defining_context.eval_node(node): + yield c + else: + yield context + + for context_set in iterate(): + yield ContextSet(resolve_forward_references(context_set)) + + +class TypeAlias(LazyContextWrapper): + def __init__(self, parent_context, origin_tree_name, actual): + self.evaluator = parent_context.evaluator + self.parent_context = parent_context + self._origin_tree_name = origin_tree_name + self._actual = actual # e.g. builtins.list + + @property + def name(self): + return ContextName(self, self._origin_tree_name) + + def py__name__(self): + return self.name.string_name + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._actual) + + def _get_wrapped_context(self): + module_name, class_name = self._actual.split('.') + if self.evaluator.environment.version_info.major == 2 and module_name == 'builtins': + module_name = '__builtin__' + + # TODO use evaluator.import_module? + from jedi.evaluate.imports import Importer + module, = Importer( + self.evaluator, [module_name], self.evaluator.builtins_module + ).follow() + classes = module.py__getattribute__(class_name) + # There should only be one, because it's code that we control. + assert len(classes) == 1, classes + cls = next(iter(classes)) + return cls + + +class _ContainerBase(_WithIndexBase): + def _get_getitem_contexts(self, index): + args = _iter_over_arguments(self._index_context, self._context_of_index) + for i, contexts in enumerate(args): + if i == index: + return contexts + + debug.warning('No param #%s found for annotation %s', index, self._index_context) + return NO_CONTEXTS + + +class Callable(_ContainerBase): + def py__call__(self, arguments): + # The 0th index are the arguments. + return self._get_getitem_contexts(1).execute_annotation() + + +class Tuple(_ContainerBase): + def _is_homogenous(self): + # To specify a variable-length tuple of homogeneous type, Tuple[T, ...] + # is used. + if isinstance(self._index_context, SequenceLiteralContext): + entries = self._index_context.get_tree_entries() + if len(entries) == 2 and entries[1] == '...': + return True + return False + + def py__simple_getitem__(self, index): + if self._is_homogenous(): + return self._get_getitem_contexts(0).execute_annotation() + else: + if isinstance(index, int): + return self._get_getitem_contexts(index).execute_annotation() + + debug.dbg('The getitem type on Tuple was %s' % index) + return NO_CONTEXTS + + def py__iter__(self, contextualized_node=None): + if self._is_homogenous(): + yield LazyKnownContexts(self._get_getitem_contexts(0).execute_annotation()) + else: + if isinstance(self._index_context, SequenceLiteralContext): + for i in range(self._index_context.py__len__()): + yield LazyKnownContexts(self._get_getitem_contexts(i).execute_annotation()) + + def py__getitem__(self, index_context_set, contextualized_node): + if self._is_homogenous(): + return self._get_getitem_contexts(0).execute_annotation() + + return ContextSet.from_sets( + _iter_over_arguments(self._index_context, self._context_of_index) + ).execute_annotation() + + +class Generic(_ContainerBase): + pass + + +class Protocol(_ContainerBase): + pass + + +class Any(_BaseTypingContext): + def execute_annotation(self): + debug.warning('Used Any - returned no results') + return NO_CONTEXTS + + +class TypeVarClass(_BaseTypingContext): + def py__call__(self, arguments): + unpacked = arguments.unpack() + + key, lazy_context = next(unpacked, (None, None)) + var_name = self._find_string_name(lazy_context) + # The name must be given, otherwise it's useless. + if var_name is None or key is not None: + debug.warning('Found a variable without a name %s', arguments) + return NO_CONTEXTS + + return ContextSet([TypeVar.create_cached( + self.evaluator, + self.parent_context, + self._tree_name, + var_name, + unpacked + )]) + + def _find_string_name(self, lazy_context): + if lazy_context is None: + return None + + context_set = lazy_context.infer() + if not context_set: + return None + if len(context_set) > 1: + debug.warning('Found multiple contexts for a type variable: %s', context_set) + + name_context = next(iter(context_set)) + try: + method = name_context.get_safe_value + except AttributeError: + return None + else: + safe_value = method(default=None) + if self.evaluator.environment.version_info.major == 2: + if isinstance(safe_value, bytes): + return force_unicode(safe_value) + if isinstance(safe_value, (str, unicode)): + return safe_value + return None + + +class TypeVar(_BaseTypingContext): + def __init__(self, evaluator, parent_context, tree_name, var_name, unpacked_args): + super(TypeVar, self).__init__(evaluator, parent_context, tree_name) + self._var_name = var_name + + self._constraints_lazy_contexts = [] + self._bound_lazy_context = None + self._covariant_lazy_context = None + self._contravariant_lazy_context = None + for key, lazy_context in unpacked_args: + if key is None: + self._constraints_lazy_contexts.append(lazy_context) + else: + if key == 'bound': + self._bound_lazy_context = lazy_context + elif key == 'covariant': + self._covariant_lazy_context = lazy_context + elif key == 'contravariant': + self._contra_variant_lazy_context = lazy_context + else: + debug.warning('Invalid TypeVar param name %s', key) + + def py__name__(self): + return self._var_name + + def get_filters(self, *args, **kwargs): + return iter([]) + + def _get_classes(self): + if self._bound_lazy_context is not None: + return self._bound_lazy_context.infer() + if self._constraints_lazy_contexts: + return self.constraints + debug.warning('Tried to infer the TypeVar %s without a given type', self._var_name) + return NO_CONTEXTS + + def is_same_class(self, other): + # Everything can match an undefined type var. + return True + + @property + def constraints(self): + return ContextSet.from_sets( + lazy.infer() for lazy in self._constraints_lazy_contexts + ) + + def define_generics(self, type_var_dict): + try: + found = type_var_dict[self.py__name__()] + except KeyError: + pass + else: + if found: + return found + return self._get_classes() or ContextSet({self}) + + def execute_annotation(self): + return self._get_classes().execute_annotation() + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.py__name__()) + + +class OverloadFunction(_BaseTypingContext): + @repack_with_argument_clinic('func, /') + def py__call__(self, func_context_set): + # Just pass arguments through. + return func_context_set + + +class NewTypeFunction(_BaseTypingContext): + def py__call__(self, arguments): + ordered_args = arguments.unpack() + next(ordered_args, (None, None)) + _, second_arg = next(ordered_args, (None, None)) + if second_arg is None: + return NO_CONTEXTS + return ContextSet( + NewType( + self.evaluator, + contextualized_node.context, + contextualized_node.node, + second_arg.infer(), + ) for contextualized_node in arguments.get_calling_nodes()) + + +class NewType(Context): + def __init__(self, evaluator, parent_context, tree_node, type_context_set): + super(NewType, self).__init__(evaluator, parent_context) + self._type_context_set = type_context_set + self.tree_node = tree_node + + def py__call__(self, arguments): + return self._type_context_set.execute_annotation() + + +class CastFunction(_BaseTypingContext): + @repack_with_argument_clinic('type, object, /') + def py__call__(self, type_context_set, object_context_set): + return type_context_set.execute_annotation() + + +class BoundTypeVarName(AbstractNameDefinition): + """ + This type var was bound to a certain type, e.g. int. + """ + def __init__(self, type_var, context_set): + self._type_var = type_var + self.parent_context = type_var.parent_context + self._context_set = context_set + + def infer(self): + def iter_(): + for context in self._context_set: + # Replace any with the constraints if they are there. + if isinstance(context, Any): + for constraint in self._type_var.constraints: + yield constraint + else: + yield context + return ContextSet(iter_()) + + def py__name__(self): + return self._type_var.py__name__() + + def __repr__(self): + return '<%s %s -> %s>' % (self.__class__.__name__, self.py__name__(), self._context_set) + + +class TypeVarFilter(object): + """ + A filter for all given variables in a class. + + A = TypeVar('A') + B = TypeVar('B') + class Foo(Mapping[A, B]): + ... + + In this example we would have two type vars given: A and B + """ + def __init__(self, generics, type_vars): + self._generics = generics + self._type_vars = type_vars + + def get(self, name): + for i, type_var in enumerate(self._type_vars): + if type_var.py__name__() == name: + try: + return [BoundTypeVarName(type_var, self._generics[i])] + except IndexError: + return [type_var.name] + return [] + + def values(self): + # The values are not relevant. If it's not searched exactly, the type + # vars are just global and should be looked up as that. + return [] + + +class AbstractAnnotatedClass(ClassMixin, ContextWrapper): + def get_type_var_filter(self): + return TypeVarFilter(self.get_generics(), self.list_type_vars()) + + def get_filters(self, search_global=False, *args, **kwargs): + filters = super(AbstractAnnotatedClass, self).get_filters( + search_global, + *args, **kwargs + ) + for f in filters: + yield f + + if search_global: + # The type vars can only be looked up if it's a global search and + # not a direct lookup on the class. + yield self.get_type_var_filter() + + def is_same_class(self, other): + if not isinstance(other, AbstractAnnotatedClass): + return False + + if self.tree_node != other.tree_node: + # TODO not sure if this is nice. + return False + given_params1 = self.get_generics() + given_params2 = other.get_generics() + + if len(given_params1) != len(given_params2): + # If the amount of type vars doesn't match, the class doesn't + # match. + return False + + # Now compare generics + return all( + any( + # TODO why is this ordering the correct one? + cls2.is_same_class(cls1) + for cls1 in class_set1 + for cls2 in class_set2 + ) for class_set1, class_set2 in zip(given_params1, given_params2) + ) + + def py__call__(self, arguments): + instance, = super(AbstractAnnotatedClass, self).py__call__(arguments) + return ContextSet([InstanceWrapper(instance)]) + + def get_generics(self): + raise NotImplementedError + + def define_generics(self, type_var_dict): + changed = False + new_generics = [] + for generic_set in self.get_generics(): + contexts = NO_CONTEXTS + for generic in generic_set: + if isinstance(generic, (AbstractAnnotatedClass, TypeVar)): + result = generic.define_generics(type_var_dict) + contexts |= result + if result != ContextSet({generic}): + changed = True + else: + contexts |= ContextSet([generic]) + new_generics.append(contexts) + + if not changed: + # There might not be any type vars that change. In that case just + # return itself, because it does not make sense to potentially lose + # cached results. + return ContextSet([self]) + + return ContextSet([GenericClass( + self._wrapped_context, + generics=tuple(new_generics) + )]) + + def __repr__(self): + return '<%s: %s%s>' % ( + self.__class__.__name__, + self._wrapped_context, + list(self.get_generics()), + ) + + @to_list + def py__bases__(self): + for base in self._wrapped_context.py__bases__(): + yield LazyAnnotatedBaseClass(self, base) + + +class LazyGenericClass(AbstractAnnotatedClass): + def __init__(self, class_context, index_context, context_of_index): + super(LazyGenericClass, self).__init__(class_context) + self._index_context = index_context + self._context_of_index = context_of_index + + @evaluator_method_cache() + def get_generics(self): + return list(_iter_over_arguments(self._index_context, self._context_of_index)) + + +class GenericClass(AbstractAnnotatedClass): + def __init__(self, class_context, generics): + super(GenericClass, self).__init__(class_context) + self._generics = generics + + def get_generics(self): + return self._generics + + +class LazyAnnotatedBaseClass(object): + def __init__(self, class_context, lazy_base_class): + self._class_context = class_context + self._lazy_base_class = lazy_base_class + + @iterator_to_context_set + def infer(self): + for base in self._lazy_base_class.infer(): + if isinstance(base, AbstractAnnotatedClass): + # Here we have to recalculate the given types. + yield GenericClass.create_cached( + base.evaluator, + base._wrapped_context, + tuple(self._remap_type_vars(base)), + ) + else: + yield base + + def _remap_type_vars(self, base): + filter = self._class_context.get_type_var_filter() + for type_var_set in base.get_generics(): + new = NO_CONTEXTS + for type_var in type_var_set: + if isinstance(type_var, TypeVar): + names = filter.get(type_var.py__name__()) + new |= ContextSet.from_sets( + name.infer() for name in names + ) + else: + # Mostly will be type vars, except if in some cases + # a concrete type will already be there. In that + # case just add it to the context set. + new |= ContextSet([type_var]) + yield new + + +class InstanceWrapper(ContextWrapper): + def py__stop_iteration_returns(self): + for cls in self._wrapped_context.class_context.py__mro__(): + if cls.py__name__() == 'Generator': + generics = cls.get_generics() + try: + return generics[2].execute_annotation() + except IndexError: + pass + elif cls.py__name__() == 'Iterator': + return ContextSet([builtin_from_name(self.evaluator, u'None')]) + return self._wrapped_context.py__stop_iteration_returns() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/utils.py new file mode 100644 index 0000000..6bc60e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/gradual/utils.py @@ -0,0 +1,32 @@ +import os + +from jedi.evaluate.gradual.typeshed import TYPESHED_PATH, create_stub_module + + +def load_proper_stub_module(evaluator, file_io, import_names, module_node): + """ + This function is given a random .pyi file and should return the proper + module. + """ + path = file_io.path + assert path.endswith('.pyi') + if path.startswith(TYPESHED_PATH): + # /foo/stdlib/3/os/__init__.pyi -> stdlib/3/os/__init__ + rest = path[len(TYPESHED_PATH) + 1: -4] + split_paths = tuple(rest.split(os.path.sep)) + # Remove the stdlib/3 or third_party/3.5 part + import_names = split_paths[2:] + if import_names[-1] == '__init__': + import_names = import_names[:-1] + + if import_names is not None: + actual_context_set = evaluator.import_module(import_names, prefer_stubs=False) + if not actual_context_set: + return None + + stub = create_stub_module( + evaluator, actual_context_set, module_node, file_io, import_names + ) + evaluator.stub_module_cache[import_names] = stub + return stub + return None diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/helpers.py new file mode 100644 index 0000000..78d2a7f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/helpers.py @@ -0,0 +1,269 @@ +import copy +import sys +import re +import os +from itertools import chain +from contextlib import contextmanager + +from parso.python import tree + +from jedi._compatibility import unicode +from jedi.parser_utils import get_parent_scope + + +def is_stdlib_path(path): + # Python standard library paths look like this: + # /usr/lib/python3.5/... + # TODO The implementation below is probably incorrect and not complete. + if 'dist-packages' in path or 'site-packages' in path: + return False + + base_path = os.path.join(sys.prefix, 'lib', 'python') + return bool(re.match(re.escape(base_path) + r'\d.\d', path)) + + +def deep_ast_copy(obj): + """ + Much, much faster than copy.deepcopy, but just for parser tree nodes. + """ + # If it's already in the cache, just return it. + new_obj = copy.copy(obj) + + # Copy children + new_children = [] + for child in obj.children: + if isinstance(child, tree.Leaf): + new_child = copy.copy(child) + new_child.parent = new_obj + else: + new_child = deep_ast_copy(child) + new_child.parent = new_obj + new_children.append(new_child) + new_obj.children = new_children + + return new_obj + + +def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False): + """ + Creates a "call" node that consist of all ``trailer`` and ``power`` + objects. E.g. if you call it with ``append``:: + + list([]).append(3) or None + + You would get a node with the content ``list([]).append`` back. + + This generates a copy of the original ast node. + + If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. + + We use this function for two purposes. Given an expression ``bar.foo``, + we may want to + - infer the type of ``foo`` to offer completions after foo + - infer the type of ``bar`` to be able to jump to the definition of foo + The option ``cut_own_trailer`` must be set to true for the second purpose. + """ + trailer = leaf.parent + if trailer.type == 'fstring': + from jedi.evaluate import compiled + return compiled.get_string_context_set(context.evaluator) + + # The leaf may not be the last or first child, because there exist three + # different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples + # we should not match anything more than x. + if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]): + if trailer.type == 'atom': + return context.eval_node(trailer) + return context.eval_node(leaf) + + power = trailer.parent + index = power.children.index(trailer) + if cut_own_trailer: + cut = index + else: + cut = index + 1 + + if power.type == 'error_node': + start = index + while True: + start -= 1 + base = power.children[start] + if base.type != 'trailer': + break + trailers = power.children[start + 1: index + 1] + else: + base = power.children[0] + trailers = power.children[1:cut] + + if base == 'await': + base = trailers[0] + trailers = trailers[1:] + + values = context.eval_node(base) + from jedi.evaluate.syntax_tree import eval_trailer + for trailer in trailers: + values = eval_trailer(context, values, trailer) + return values + + +def call_of_leaf(leaf): + """ + Creates a "call" node that consist of all ``trailer`` and ``power`` + objects. E.g. if you call it with ``append``:: + + list([]).append(3) or None + + You would get a node with the content ``list([]).append`` back. + + This generates a copy of the original ast node. + + If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. + """ + # TODO this is the old version of this call. Try to remove it. + trailer = leaf.parent + # The leaf may not be the last or first child, because there exist three + # different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples + # we should not match anything more than x. + if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]): + if trailer.type == 'atom': + return trailer + return leaf + + power = trailer.parent + index = power.children.index(trailer) + + new_power = copy.copy(power) + new_power.children = list(new_power.children) + new_power.children[index + 1:] = [] + + if power.type == 'error_node': + start = index + while True: + start -= 1 + if power.children[start].type != 'trailer': + break + transformed = tree.Node('power', power.children[start:]) + transformed.parent = power.parent + return transformed + + return power + + +def get_names_of_node(node): + try: + children = node.children + except AttributeError: + if node.type == 'name': + return [node] + else: + return [] + else: + return list(chain.from_iterable(get_names_of_node(c) for c in children)) + + +def get_module_names(module, all_scopes): + """ + Returns a dictionary with name parts as keys and their call paths as + values. + """ + names = list(chain.from_iterable(module.get_used_names().values())) + if not all_scopes: + # We have to filter all the names that don't have the module as a + # parent_scope. There's None as a parent, because nodes in the module + # node have the parent module and not suite as all the others. + # Therefore it's important to catch that case. + + def is_module_scope_name(name): + parent_scope = get_parent_scope(name) + # async functions have an extra wrapper. Strip it. + if parent_scope and parent_scope.type == 'async_stmt': + parent_scope = parent_scope.parent + return parent_scope in (module, None) + + names = [n for n in names if is_module_scope_name(n)] + return names + + +@contextmanager +def predefine_names(context, flow_scope, dct): + predefined = context.predefined_names + predefined[flow_scope] = dct + try: + yield + finally: + del predefined[flow_scope] + + +def is_string(context): + if context.evaluator.environment.version_info.major == 2: + str_classes = (unicode, bytes) + else: + str_classes = (unicode,) + return context.is_compiled() and isinstance(context.get_safe_value(default=None), str_classes) + + +def is_literal(context): + return is_number(context) or is_string(context) + + +def _get_safe_value_or_none(context, accept): + value = context.get_safe_value(default=None) + if isinstance(value, accept): + return value + + +def get_int_or_none(context): + return _get_safe_value_or_none(context, int) + + +def get_str_or_none(context): + return _get_safe_value_or_none(context, (bytes, unicode)) + + +def is_number(context): + return _get_safe_value_or_none(context, (int, float)) is not None + + +class SimpleGetItemNotFound(Exception): + pass + + +@contextmanager +def reraise_getitem_errors(*exception_classes): + try: + yield + except exception_classes as e: + raise SimpleGetItemNotFound(e) + + +def parse_dotted_names(nodes, is_import_from, until_node=None): + level = 0 + names = [] + for node in nodes[1:]: + if node in ('.', '...'): + if not names: + level += len(node.value) + elif node.type == 'dotted_name': + for n in node.children[::2]: + names.append(n) + if n is until_node: + break + else: + continue + break + elif node.type == 'name': + names.append(node) + if node is until_node: + break + elif node == ',': + if not is_import_from: + names = [] + else: + # Here if the keyword `import` comes along it stops checking + # for names. + break + return level, names + + +def contexts_from_qualified_names(evaluator, *names): + return evaluator.import_module(names[:-1]).py__getattribute__(names[-1]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/imports.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/imports.py new file mode 100644 index 0000000..f7ec8c3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/imports.py @@ -0,0 +1,568 @@ +""" +:mod:`jedi.evaluate.imports` is here to resolve import statements and return +the modules/classes/functions/whatever, which they stand for. However there's +not any actual importing done. This module is about finding modules in the +filesystem. This can be quite tricky sometimes, because Python imports are not +always that simple. + +This module uses imp for python up to 3.2 and importlib for python 3.3 on; the +correct implementation is delegated to _compatibility. + +This module also supports import autocompletion, which means to complete +statements like ``from datetim`` (cursor at the end would return ``datetime``). +""" +import os + +from parso.python import tree +from parso.tree import search_ancestor +from parso import python_bytes_to_unicode + +from jedi._compatibility import (FileNotFoundError, ImplicitNSInfo, + force_unicode, unicode) +from jedi import debug +from jedi import settings +from jedi.file_io import KnownContentFileIO, FileIO +from jedi.parser_utils import get_cached_code_lines +from jedi.evaluate import sys_path +from jedi.evaluate import helpers +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate.utils import unite +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.names import ImportName, SubModuleName +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.typeshed import import_module_decorator +from jedi.evaluate.context.module import iter_module_names +from jedi.plugins import plugin_manager + + +class ModuleCache(object): + def __init__(self): + self._path_cache = {} + self._name_cache = {} + + def add(self, string_names, context_set): + #path = module.py__file__() + #self._path_cache[path] = context_set + if string_names is not None: + self._name_cache[string_names] = context_set + + def get(self, string_names): + return self._name_cache[string_names] + + def get_from_path(self, path): + return self._path_cache[path] + + +# This memoization is needed, because otherwise we will infinitely loop on +# certain imports. +@evaluator_method_cache(default=NO_CONTEXTS) +def infer_import(context, tree_name, is_goto=False): + module_context = context.get_root_context() + import_node = search_ancestor(tree_name, 'import_name', 'import_from') + import_path = import_node.get_path_for_name(tree_name) + from_import_name = None + evaluator = context.evaluator + try: + from_names = import_node.get_from_names() + except AttributeError: + # Is an import_name + pass + else: + if len(from_names) + 1 == len(import_path): + # We have to fetch the from_names part first and then check + # if from_names exists in the modules. + from_import_name = import_path[-1] + import_path = from_names + + importer = Importer(evaluator, tuple(import_path), + module_context, import_node.level) + + types = importer.follow() + + #if import_node.is_nested() and not self.nested_resolve: + # scopes = [NestedImportModule(module, import_node)] + + if not types: + return NO_CONTEXTS + + if from_import_name is not None: + types = unite( + t.py__getattribute__( + from_import_name, + name_context=context, + is_goto=is_goto, + analysis_errors=False + ) + for t in types + ) + if not is_goto: + types = ContextSet(types) + + if not types: + path = import_path + [from_import_name] + importer = Importer(evaluator, tuple(path), + module_context, import_node.level) + types = importer.follow() + # goto only accepts `Name` + if is_goto: + types = set(s.name for s in types) + else: + # goto only accepts `Name` + if is_goto: + types = set(s.name for s in types) + + debug.dbg('after import: %s', types) + return types + + +class NestedImportModule(tree.Module): + """ + TODO while there's no use case for nested import module right now, we might + be able to use them for static analysis checks later on. + """ + def __init__(self, module, nested_import): + self._module = module + self._nested_import = nested_import + + def _get_nested_import_name(self): + """ + Generates an Import statement, that can be used to fake nested imports. + """ + i = self._nested_import + # This is not an existing Import statement. Therefore, set position to + # 0 (0 is not a valid line number). + zero = (0, 0) + names = [unicode(name) for name in i.namespace_names[1:]] + name = helpers.FakeName(names, self._nested_import) + new = tree.Import(i._sub_module, zero, zero, name) + new.parent = self._module + debug.dbg('Generated a nested import: %s', new) + return helpers.FakeName(str(i.namespace_names[1]), new) + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s of %s>" % (self.__class__.__name__, self._module, + self._nested_import) + + +def _add_error(context, name, message): + if hasattr(name, 'parent') and context is not None: + analysis.add(context, 'import-error', name, message) + else: + debug.warning('ImportError without origin: ' + message) + + +def _level_to_base_import_path(project_path, directory, level): + """ + In case the level is outside of the currently known package (something like + import .....foo), we can still try our best to help the user for + completions. + """ + for i in range(level - 1): + old = directory + directory = os.path.dirname(directory) + if old == directory: + return None, None + + d = directory + level_import_paths = [] + # Now that we are on the level that the user wants to be, calculate the + # import path for it. + while True: + if d == project_path: + return level_import_paths, d + dir_name = os.path.basename(d) + if dir_name: + level_import_paths.insert(0, dir_name) + d = os.path.dirname(d) + else: + return None, directory + + +class Importer(object): + def __init__(self, evaluator, import_path, module_context, level=0): + """ + An implementation similar to ``__import__``. Use `follow` + to actually follow the imports. + + *level* specifies whether to use absolute or relative imports. 0 (the + default) means only perform absolute imports. Positive values for level + indicate the number of parent directories to search relative to the + directory of the module calling ``__import__()`` (see PEP 328 for the + details). + + :param import_path: List of namespaces (strings or Names). + """ + debug.speed('import %s %s' % (import_path, module_context)) + self._evaluator = evaluator + self.level = level + self.module_context = module_context + + self._fixed_sys_path = None + self._inference_possible = True + if level: + base = module_context.py__package__() + # We need to care for two cases, the first one is if it's a valid + # Python import. This import has a properly defined module name + # chain like `foo.bar.baz` and an import in baz is made for + # `..lala.` It can then resolve to `foo.bar.lala`. + # The else here is a heuristic for all other cases, if for example + # in `foo` you search for `...bar`, it's obviously out of scope. + # However since Jedi tries to just do it's best, we help the user + # here, because he might have specified something wrong in his + # project. + if level <= len(base): + # Here we basically rewrite the level to 0. + base = tuple(base) + if level > 1: + base = base[:-level + 1] + import_path = base + tuple(import_path) + else: + path = module_context.py__file__() + import_path = list(import_path) + if path is None: + # If no path is defined, our best guess is that the current + # file is edited by a user on the current working + # directory. We need to add an initial path, because it + # will get removed as the name of the current file. + directory = os.getcwd() + else: + directory = os.path.dirname(path) + + base_import_path, base_directory = _level_to_base_import_path( + self._evaluator.project._path, directory, level, + ) + if base_directory is None: + # Everything is lost, the relative import does point + # somewhere out of the filesystem. + self._inference_possible = False + else: + self._fixed_sys_path = [force_unicode(base_directory)] + + if base_import_path is None: + if import_path: + _add_error( + module_context, import_path[0], + message='Attempted relative import beyond top-level package.' + ) + else: + import_path = base_import_path + import_path + self.import_path = import_path + + @property + def _str_import_path(self): + """Returns the import path as pure strings instead of `Name`.""" + return tuple( + name.value if isinstance(name, tree.Name) else name + for name in self.import_path + ) + + def _sys_path_with_modifications(self): + if self._fixed_sys_path is not None: + return self._fixed_sys_path + + sys_path_mod = ( + self._evaluator.get_sys_path() + + sys_path.check_sys_path_modifications(self.module_context) + ) + + if self._evaluator.environment.version_info.major == 2: + file_path = self.module_context.py__file__() + if file_path is not None: + # Python2 uses an old strange way of importing relative imports. + sys_path_mod.append(force_unicode(os.path.dirname(file_path))) + + return sys_path_mod + + def follow(self): + if not self.import_path or not self._inference_possible: + return NO_CONTEXTS + + import_names = tuple( + force_unicode(i.value if isinstance(i, tree.Name) else i) + for i in self.import_path + ) + sys_path = self._sys_path_with_modifications() + + context_set = [None] + for i, name in enumerate(self.import_path): + context_set = ContextSet.from_sets([ + self._evaluator.import_module( + import_names[:i+1], + parent_module_context, + sys_path + ) for parent_module_context in context_set + ]) + if not context_set: + message = 'No module named ' + '.'.join(import_names) + _add_error(self.module_context, name, message) + return NO_CONTEXTS + return context_set + + def _get_module_names(self, search_path=None, in_module=None): + """ + Get the names of all modules in the search_path. This means file names + and not names defined in the files. + """ + names = [] + # add builtin module names + if search_path is None and in_module is None: + names += [ImportName(self.module_context, name) + for name in self._evaluator.compiled_subprocess.get_builtin_module_names()] + + if search_path is None: + search_path = self._sys_path_with_modifications() + + for name in iter_module_names(self._evaluator, search_path): + if in_module is None: + n = ImportName(self.module_context, name) + else: + n = SubModuleName(in_module, name) + names.append(n) + return names + + def completion_names(self, evaluator, only_modules=False): + """ + :param only_modules: Indicates wheter it's possible to import a + definition that is not defined in a module. + """ + if not self._inference_possible: + return [] + + names = [] + if self.import_path: + # flask + if self._str_import_path == ('flask', 'ext'): + # List Flask extensions like ``flask_foo`` + for mod in self._get_module_names(): + modname = mod.string_name + if modname.startswith('flask_'): + extname = modname[len('flask_'):] + names.append(ImportName(self.module_context, extname)) + # Now the old style: ``flaskext.foo`` + for dir in self._sys_path_with_modifications(): + flaskext = os.path.join(dir, 'flaskext') + if os.path.isdir(flaskext): + names += self._get_module_names([flaskext]) + + contexts = self.follow() + for context in contexts: + # Non-modules are not completable. + if context.api_type != 'module': # not a module + continue + names += context.sub_modules_dict().values() + + if not only_modules: + from jedi.evaluate.gradual.conversion import convert_contexts + + both_contexts = contexts | convert_contexts(contexts) + for c in both_contexts: + for filter in c.get_filters(search_global=False): + names += filter.values() + else: + if self.level: + # We only get here if the level cannot be properly calculated. + names += self._get_module_names(self._fixed_sys_path) + else: + # This is just the list of global imports. + names += self._get_module_names() + return names + + +@plugin_manager.decorate() +@import_module_decorator +def import_module(evaluator, import_names, parent_module_context, sys_path): + """ + This method is very similar to importlib's `_gcd_import`. + """ + if import_names[0] in settings.auto_import_modules: + module = _load_builtin_module(evaluator, import_names, sys_path) + if module is None: + return NO_CONTEXTS + return ContextSet([module]) + + module_name = '.'.join(import_names) + if parent_module_context is None: + # Override the sys.path. It works only good that way. + # Injecting the path directly into `find_module` did not work. + file_io_or_ns, is_pkg = evaluator.compiled_subprocess.get_module_info( + string=import_names[-1], + full_name=module_name, + sys_path=sys_path, + is_global_search=True, + ) + if is_pkg is None: + return NO_CONTEXTS + else: + try: + method = parent_module_context.py__path__ + except AttributeError: + # The module is not a package. + return NO_CONTEXTS + else: + paths = method() + for path in paths: + # At the moment we are only using one path. So this is + # not important to be correct. + if not isinstance(path, list): + path = [path] + file_io_or_ns, is_pkg = evaluator.compiled_subprocess.get_module_info( + string=import_names[-1], + path=path, + full_name=module_name, + is_global_search=False, + ) + if is_pkg is not None: + break + else: + return NO_CONTEXTS + + if isinstance(file_io_or_ns, ImplicitNSInfo): + from jedi.evaluate.context.namespace import ImplicitNamespaceContext + module = ImplicitNamespaceContext( + evaluator, + fullname=file_io_or_ns.name, + paths=file_io_or_ns.paths, + ) + elif file_io_or_ns is None: + module = _load_builtin_module(evaluator, import_names, sys_path) + if module is None: + return NO_CONTEXTS + else: + module = _load_python_module( + evaluator, file_io_or_ns, sys_path, + import_names=import_names, + is_package=is_pkg, + ) + + if parent_module_context is None: + debug.dbg('global search_module %s: %s', import_names[-1], module) + else: + debug.dbg('search_module %s in paths %s: %s', module_name, paths, module) + return ContextSet([module]) + + +def _load_python_module(evaluator, file_io, sys_path=None, + import_names=None, is_package=False): + try: + return evaluator.module_cache.get_from_path(file_io.path) + except KeyError: + pass + + module_node = evaluator.parse( + file_io=file_io, + cache=True, + diff_cache=settings.fast_parser, + cache_path=settings.cache_directory + ) + + from jedi.evaluate.context import ModuleContext + return ModuleContext( + evaluator, module_node, + file_io=file_io, + string_names=import_names, + code_lines=get_cached_code_lines(evaluator.grammar, file_io.path), + is_package=is_package, + ) + + +def _load_builtin_module(evaluator, import_names=None, sys_path=None): + if sys_path is None: + sys_path = evaluator.get_sys_path() + + dotted_name = '.'.join(import_names) + assert dotted_name is not None + module = compiled.load_module(evaluator, dotted_name=dotted_name, sys_path=sys_path) + if module is None: + # The file might raise an ImportError e.g. and therefore not be + # importable. + return None + return module + + +def _load_module_from_path(evaluator, file_io, base_names): + """ + This should pretty much only be used for get_modules_containing_name. It's + here to ensure that a random path is still properly loaded into the Jedi + module structure. + """ + e_sys_path = evaluator.get_sys_path() + path = file_io.path + if base_names: + module_name = os.path.basename(path) + module_name = sys_path.remove_python_path_suffix(module_name) + is_package = module_name == '__init__' + if is_package: + import_names = base_names + else: + import_names = base_names + (module_name,) + else: + import_names, is_package = sys_path.transform_path_to_dotted(e_sys_path, path) + + module = _load_python_module( + evaluator, file_io, + sys_path=e_sys_path, + import_names=import_names, + is_package=is_package, + ) + evaluator.module_cache.add(import_names, ContextSet([module])) + return module + + +def get_modules_containing_name(evaluator, modules, name): + """ + Search a name in the directories of modules. + """ + def check_directory(folder_io): + for file_name in folder_io.list(): + if file_name.endswith('.py'): + yield folder_io.get_file_io(file_name) + + def check_fs(file_io, base_names): + try: + code = file_io.read() + except FileNotFoundError: + return None + code = python_bytes_to_unicode(code, errors='replace') + if name not in code: + return None + new_file_io = KnownContentFileIO(file_io.path, code) + m = _load_module_from_path(evaluator, new_file_io, base_names) + if isinstance(m, compiled.CompiledObject): + return None + return m + + # skip non python modules + used_mod_paths = set() + folders_with_names_to_be_checked = [] + for m in modules: + if m.file_io is not None: + path = m.file_io.path + if path not in used_mod_paths: + used_mod_paths.add(path) + folders_with_names_to_be_checked.append(( + m.file_io.get_parent_folder(), + m.py__package__() + )) + yield m + + if not settings.dynamic_params_for_other_modules: + return + + def get_file_ios_to_check(): + for folder_io, base_names in folders_with_names_to_be_checked: + for file_io in check_directory(folder_io): + yield file_io, base_names + + for p in settings.additional_dynamic_modules: + p = os.path.abspath(p) + if p not in used_mod_paths: + yield FileIO(p), None + + for file_io, base_names in get_file_ios_to_check(): + m = check_fs(file_io, base_names) + if m is not None: + yield m diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/lazy_context.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/lazy_context.py new file mode 100644 index 0000000..0501d3b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/lazy_context.py @@ -0,0 +1,59 @@ +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.common.utils import monkeypatch + + +class AbstractLazyContext(object): + def __init__(self, data): + self.data = data + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.data) + + def infer(self): + raise NotImplementedError + + +class LazyKnownContext(AbstractLazyContext): + """data is a context.""" + def infer(self): + return ContextSet([self.data]) + + +class LazyKnownContexts(AbstractLazyContext): + """data is a ContextSet.""" + def infer(self): + return self.data + + +class LazyUnknownContext(AbstractLazyContext): + def __init__(self): + super(LazyUnknownContext, self).__init__(None) + + def infer(self): + return NO_CONTEXTS + + +class LazyTreeContext(AbstractLazyContext): + def __init__(self, context, node): + super(LazyTreeContext, self).__init__(node) + self.context = context + # We need to save the predefined names. It's an unfortunate side effect + # that needs to be tracked otherwise results will be wrong. + self._predefined_names = dict(context.predefined_names) + + def infer(self): + with monkeypatch(self.context, 'predefined_names', self._predefined_names): + return self.context.eval_node(self.data) + + +def get_merged_lazy_context(lazy_contexts): + if len(lazy_contexts) > 1: + return MergedLazyContexts(lazy_contexts) + else: + return lazy_contexts[0] + + +class MergedLazyContexts(AbstractLazyContext): + """data is a list of lazy contexts.""" + def infer(self): + return ContextSet.from_sets(l.infer() for l in self.data) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/names.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/names.py new file mode 100644 index 0000000..b1c2d40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/names.py @@ -0,0 +1,375 @@ +from abc import abstractmethod + +from parso.tree import search_ancestor + +from jedi._compatibility import Parameter +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.cache import memoize_method + + +class AbstractNameDefinition(object): + start_pos = None + string_name = None + parent_context = None + tree_name = None + is_context_name = True + """ + Used for the Jedi API to know if it's a keyword or an actual name. + """ + + @abstractmethod + def infer(self): + raise NotImplementedError + + @abstractmethod + def goto(self): + # Typically names are already definitions and therefore a goto on that + # name will always result on itself. + return {self} + + def get_qualified_names(self, include_module_names=False): + qualified_names = self._get_qualified_names() + if qualified_names is None or not include_module_names: + return qualified_names + + module_names = self.get_root_context().string_names + if module_names is None: + return None + return module_names + qualified_names + + def _get_qualified_names(self): + # By default, a name has no qualified names. + return None + + def get_root_context(self): + return self.parent_context.get_root_context() + + def __repr__(self): + if self.start_pos is None: + return '<%s: string_name=%s>' % (self.__class__.__name__, self.string_name) + return '<%s: string_name=%s start_pos=%s>' % (self.__class__.__name__, + self.string_name, self.start_pos) + + def is_import(self): + return False + + @property + def api_type(self): + return self.parent_context.api_type + + +class AbstractArbitraryName(AbstractNameDefinition): + """ + When you e.g. want to complete dicts keys, you probably want to complete + string literals, which is not really a name, but for Jedi we use this + concept of Name for completions as well. + """ + is_context_name = False + + def __init__(self, evaluator, string): + self.evaluator = evaluator + self.string_name = string + self.parent_context = evaluator.builtins_module + + def infer(self): + return NO_CONTEXTS + + +class AbstractTreeName(AbstractNameDefinition): + def __init__(self, parent_context, tree_name): + self.parent_context = parent_context + self.tree_name = tree_name + + def get_qualified_names(self, include_module_names=False): + import_node = search_ancestor(self.tree_name, 'import_name', 'import_from') + # For import nodes we cannot just have names, because it's very unclear + # how they would look like. For now we just ignore them in most cases. + # In case of level == 1, it works always, because it's like a submodule + # lookup. + if import_node is not None and not (import_node.level == 1 + and self.get_root_context().is_package): + # TODO improve the situation for when level is present. + if include_module_names and not import_node.level: + return tuple(n.value for n in import_node.get_path_for_name(self.tree_name)) + else: + return None + + return super(AbstractTreeName, self).get_qualified_names(include_module_names) + + def _get_qualified_names(self): + parent_names = self.parent_context.get_qualified_names() + if parent_names is None: + return None + return parent_names + (self.tree_name.value,) + + def goto(self, **kwargs): + return self.parent_context.evaluator.goto(self.parent_context, self.tree_name, **kwargs) + + def is_import(self): + imp = search_ancestor(self.tree_name, 'import_from', 'import_name') + return imp is not None + + @property + def string_name(self): + return self.tree_name.value + + @property + def start_pos(self): + return self.tree_name.start_pos + + +class ContextNameMixin(object): + def infer(self): + return ContextSet([self._context]) + + def _get_qualified_names(self): + return self._context.get_qualified_names() + + def get_root_context(self): + if self.parent_context is None: # A module + return self._context + return super(ContextNameMixin, self).get_root_context() + + @property + def api_type(self): + return self._context.api_type + + +class ContextName(ContextNameMixin, AbstractTreeName): + def __init__(self, context, tree_name): + super(ContextName, self).__init__(context.parent_context, tree_name) + self._context = context + + def goto(self): + return ContextSet([self._context.name]) + + +class TreeNameDefinition(AbstractTreeName): + _API_TYPES = dict( + import_name='module', + import_from='module', + funcdef='function', + param='param', + classdef='class', + ) + + def infer(self): + # Refactor this, should probably be here. + from jedi.evaluate.syntax_tree import tree_name_to_contexts + parent = self.parent_context + return tree_name_to_contexts(parent.evaluator, parent, self.tree_name) + + @property + def api_type(self): + definition = self.tree_name.get_definition(import_name_always=True) + if definition is None: + return 'statement' + return self._API_TYPES.get(definition.type, 'statement') + + +class _ParamMixin(object): + def maybe_positional_argument(self, include_star=True): + options = [Parameter.POSITIONAL_ONLY, Parameter.POSITIONAL_OR_KEYWORD] + if include_star: + options.append(Parameter.VAR_POSITIONAL) + return self.get_kind() in options + + def maybe_keyword_argument(self, include_stars=True): + options = [Parameter.KEYWORD_ONLY, Parameter.POSITIONAL_OR_KEYWORD] + if include_stars: + options.append(Parameter.VAR_KEYWORD) + return self.get_kind() in options + + def _kind_string(self): + kind = self.get_kind() + if kind == Parameter.VAR_POSITIONAL: # *args + return '*' + if kind == Parameter.VAR_KEYWORD: # **kwargs + return '**' + return '' + + +class ParamNameInterface(_ParamMixin): + api_type = u'param' + + def get_kind(self): + raise NotImplementedError + + def to_string(self): + raise NotImplementedError + + def get_param(self): + # TODO document better where this is used and when. Currently it has + # very limited use, but is still in use. It's currently not even + # clear what values would be allowed. + return None + + @property + def star_count(self): + kind = self.get_kind() + if kind == Parameter.VAR_POSITIONAL: + return 1 + if kind == Parameter.VAR_KEYWORD: + return 2 + return 0 + + +class BaseTreeParamName(ParamNameInterface, AbstractTreeName): + annotation_node = None + default_node = None + + def to_string(self): + output = self._kind_string() + self.string_name + annotation = self.annotation_node + default = self.default_node + if annotation is not None: + output += ': ' + annotation.get_code(include_prefix=False) + if default is not None: + output += '=' + default.get_code(include_prefix=False) + return output + + +class ParamName(BaseTreeParamName): + def _get_param_node(self): + return search_ancestor(self.tree_name, 'param') + + @property + def annotation_node(self): + return self._get_param_node().annotation + + def infer_annotation(self, execute_annotation=True): + node = self.annotation_node + if node is None: + return NO_CONTEXTS + contexts = self.parent_context.parent_context.eval_node(node) + if execute_annotation: + contexts = contexts.execute_annotation() + return contexts + + def infer_default(self): + node = self.default_node + if node is None: + return NO_CONTEXTS + return self.parent_context.parent_context.eval_node(node) + + @property + def default_node(self): + return self._get_param_node().default + + @property + def string_name(self): + name = self.tree_name.value + if name.startswith('__'): + # Params starting with __ are an equivalent to positional only + # variables in typeshed. + name = name[2:] + return name + + def get_kind(self): + tree_param = self._get_param_node() + if tree_param.star_count == 1: # *args + return Parameter.VAR_POSITIONAL + if tree_param.star_count == 2: # **kwargs + return Parameter.VAR_KEYWORD + + # Params starting with __ are an equivalent to positional only + # variables in typeshed. + if tree_param.name.value.startswith('__'): + return Parameter.POSITIONAL_ONLY + + parent = tree_param.parent + param_appeared = False + for p in parent.children: + if param_appeared: + if p == '/': + return Parameter.POSITIONAL_ONLY + else: + if p == '*': + return Parameter.KEYWORD_ONLY + if p.type == 'param': + if p.star_count: + return Parameter.KEYWORD_ONLY + if p == tree_param: + param_appeared = True + return Parameter.POSITIONAL_OR_KEYWORD + + def infer(self): + return self.get_param().infer() + + def get_param(self): + params, _ = self.parent_context.get_executed_params_and_issues() + param_node = search_ancestor(self.tree_name, 'param') + return params[param_node.position_index] + + +class ParamNameWrapper(_ParamMixin): + def __init__(self, param_name): + self._wrapped_param_name = param_name + + def __getattr__(self, name): + return getattr(self._wrapped_param_name, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_param_name) + + +class ImportName(AbstractNameDefinition): + start_pos = (1, 0) + _level = 0 + + def __init__(self, parent_context, string_name): + self._from_module_context = parent_context + self.string_name = string_name + + def get_qualified_names(self, include_module_names=False): + if include_module_names: + if self._level: + assert self._level == 1, "Everything else is not supported for now" + module_names = self._from_module_context.string_names + if module_names is None: + return module_names + return module_names + (self.string_name,) + return (self.string_name,) + return () + + @property + def parent_context(self): + m = self._from_module_context + import_contexts = self.infer() + if not import_contexts: + return m + # It's almost always possible to find the import or to not find it. The + # importing returns only one context, pretty much always. + return next(iter(import_contexts)) + + @memoize_method + def infer(self): + from jedi.evaluate.imports import Importer + m = self._from_module_context + return Importer(m.evaluator, [self.string_name], m, level=self._level).follow() + + def goto(self): + return [m.name for m in self.infer()] + + @property + def api_type(self): + return 'module' + + +class SubModuleName(ImportName): + _level = 1 + + +class NameWrapper(object): + def __init__(self, wrapped_name): + self._wrapped_name = wrapped_name + + @abstractmethod + def infer(self): + raise NotImplementedError + + def __getattr__(self, name): + return getattr(self._wrapped_name, name) + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._wrapped_name) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/param.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/param.py new file mode 100644 index 0000000..ffec77e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/param.py @@ -0,0 +1,253 @@ +from collections import defaultdict + +from jedi import debug +from jedi.evaluate.utils import PushBackIterator +from jedi.evaluate import analysis +from jedi.evaluate.lazy_context import LazyKnownContext, \ + LazyTreeContext, LazyUnknownContext +from jedi.evaluate import docstrings +from jedi.evaluate.context import iterable + + +def _add_argument_issue(error_name, lazy_context, message): + if isinstance(lazy_context, LazyTreeContext): + node = lazy_context.data + if node.parent.type == 'argument': + node = node.parent + return analysis.add(lazy_context.context, error_name, node, message) + + +class ExecutedParam(object): + """Fake a param and give it values.""" + def __init__(self, execution_context, param_node, lazy_context, is_default=False): + self._execution_context = execution_context + self._param_node = param_node + self._lazy_context = lazy_context + self.string_name = param_node.name.value + self._is_default = is_default + + def infer_annotations(self): + from jedi.evaluate.gradual.annotation import infer_param + return infer_param(self._execution_context, self._param_node) + + def infer(self, use_hints=True): + if use_hints: + doc_params = docstrings.infer_param(self._execution_context, self._param_node) + ann = self.infer_annotations().execute_annotation() + if ann or doc_params: + return ann | doc_params + + return self._lazy_context.infer() + + def matches_signature(self): + if self._is_default: + return True + argument_contexts = self.infer(use_hints=False).py__class__() + if self._param_node.star_count: + return True + annotations = self.infer_annotations() + if not annotations: + # If we cannot infer annotations - or there aren't any - pretend + # that the signature matches. + return True + matches = any(c1.is_sub_class_of(c2) + for c1 in argument_contexts + for c2 in annotations.gather_annotation_classes()) + debug.dbg("signature compare %s: %s <=> %s", + matches, argument_contexts, annotations, color='BLUE') + return matches + + @property + def var_args(self): + return self._execution_context.var_args + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.string_name) + + +def get_executed_params_and_issues(execution_context, arguments): + def too_many_args(argument): + m = _error_argument_count(funcdef, len(unpacked_va)) + # Just report an error for the first param that is not needed (like + # cPython). + if arguments.get_calling_nodes(): + # There might not be a valid calling node so check for that first. + issues.append( + _add_argument_issue( + 'type-error-too-many-arguments', + argument, + message=m + ) + ) + else: + issues.append(None) + + issues = [] # List[Optional[analysis issue]] + result_params = [] + param_dict = {} + funcdef = execution_context.tree_node + # Default params are part of the context where the function was defined. + # This means that they might have access on class variables that the + # function itself doesn't have. + default_param_context = execution_context.function_context.get_default_param_context() + + for param in funcdef.get_params(): + param_dict[param.name.value] = param + unpacked_va = list(arguments.unpack(funcdef)) + var_arg_iterator = PushBackIterator(iter(unpacked_va)) + + non_matching_keys = defaultdict(lambda: []) + keys_used = {} + keys_only = False + had_multiple_value_error = False + for param in funcdef.get_params(): + # The value and key can both be null. There, the defaults apply. + # args / kwargs will just be empty arrays / dicts, respectively. + # Wrong value count is just ignored. If you try to test cases that are + # not allowed in Python, Jedi will maybe not show any completions. + is_default = False + key, argument = next(var_arg_iterator, (None, None)) + while key is not None: + keys_only = True + try: + key_param = param_dict[key] + except KeyError: + non_matching_keys[key] = argument + else: + if key in keys_used: + had_multiple_value_error = True + m = ("TypeError: %s() got multiple values for keyword argument '%s'." + % (funcdef.name, key)) + for contextualized_node in arguments.get_calling_nodes(): + issues.append( + analysis.add(contextualized_node.context, + 'type-error-multiple-values', + contextualized_node.node, message=m) + ) + else: + keys_used[key] = ExecutedParam(execution_context, key_param, argument) + key, argument = next(var_arg_iterator, (None, None)) + + try: + result_params.append(keys_used[param.name.value]) + continue + except KeyError: + pass + + if param.star_count == 1: + # *args param + lazy_context_list = [] + if argument is not None: + lazy_context_list.append(argument) + for key, argument in var_arg_iterator: + # Iterate until a key argument is found. + if key: + var_arg_iterator.push_back((key, argument)) + break + lazy_context_list.append(argument) + seq = iterable.FakeSequence(execution_context.evaluator, u'tuple', lazy_context_list) + result_arg = LazyKnownContext(seq) + elif param.star_count == 2: + if argument is not None: + too_many_args(argument) + # **kwargs param + dct = iterable.FakeDict(execution_context.evaluator, dict(non_matching_keys)) + result_arg = LazyKnownContext(dct) + non_matching_keys = {} + else: + # normal param + if argument is None: + # No value: Return an empty container + if param.default is None: + result_arg = LazyUnknownContext() + if not keys_only: + for contextualized_node in arguments.get_calling_nodes(): + m = _error_argument_count(funcdef, len(unpacked_va)) + issues.append( + analysis.add( + contextualized_node.context, + 'type-error-too-few-arguments', + contextualized_node.node, + message=m, + ) + ) + else: + result_arg = LazyTreeContext(default_param_context, param.default) + is_default = True + else: + result_arg = argument + + result_params.append(ExecutedParam( + execution_context, param, result_arg, + is_default=is_default + )) + if not isinstance(result_arg, LazyUnknownContext): + keys_used[param.name.value] = result_params[-1] + + if keys_only: + # All arguments should be handed over to the next function. It's not + # about the values inside, it's about the names. Jedi needs to now that + # there's nothing to find for certain names. + for k in set(param_dict) - set(keys_used): + param = param_dict[k] + + if not (non_matching_keys or had_multiple_value_error or + param.star_count or param.default): + # add a warning only if there's not another one. + for contextualized_node in arguments.get_calling_nodes(): + m = _error_argument_count(funcdef, len(unpacked_va)) + issues.append( + analysis.add(contextualized_node.context, + 'type-error-too-few-arguments', + contextualized_node.node, message=m) + ) + + for key, lazy_context in non_matching_keys.items(): + m = "TypeError: %s() got an unexpected keyword argument '%s'." \ + % (funcdef.name, key) + issues.append( + _add_argument_issue( + 'type-error-keyword-argument', + lazy_context, + message=m + ) + ) + + remaining_arguments = list(var_arg_iterator) + if remaining_arguments: + first_key, lazy_context = remaining_arguments[0] + too_many_args(lazy_context) + return result_params, issues + + +def _error_argument_count(funcdef, actual_count): + params = funcdef.get_params() + default_arguments = sum(1 for p in params if p.default or p.star_count) + + if default_arguments == 0: + before = 'exactly ' + else: + before = 'from %s to ' % (len(params) - default_arguments) + return ('TypeError: %s() takes %s%s arguments (%s given).' + % (funcdef.name, before, len(params), actual_count)) + + +def _create_default_param(execution_context, param): + if param.star_count == 1: + result_arg = LazyKnownContext( + iterable.FakeSequence(execution_context.evaluator, u'tuple', []) + ) + elif param.star_count == 2: + result_arg = LazyKnownContext( + iterable.FakeDict(execution_context.evaluator, {}) + ) + elif param.default is None: + result_arg = LazyUnknownContext() + else: + result_arg = LazyTreeContext(execution_context.parent_context, param.default) + return ExecutedParam(execution_context, param, result_arg) + + +def create_default_params(execution_context, funcdef): + return [_create_default_param(execution_context, p) + for p in funcdef.get_params()] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/parser_cache.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/parser_cache.py new file mode 100644 index 0000000..84fe52d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/parser_cache.py @@ -0,0 +1,6 @@ +from jedi.evaluate.cache import evaluator_function_cache + + +@evaluator_function_cache() +def get_yield_exprs(evaluator, funcdef): + return list(funcdef.iter_yield_exprs()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/recursion.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/recursion.py new file mode 100644 index 0000000..f86deda --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/recursion.py @@ -0,0 +1,153 @@ +""" +Recursions are the recipe of |jedi| to conquer Python code. However, someone +must stop recursions going mad. Some settings are here to make |jedi| stop at +the right time. You can read more about them :ref:`here `. + +Next to :mod:`jedi.evaluate.cache` this module also makes |jedi| not +thread-safe. Why? ``execution_recursion_decorator`` uses class variables to +count the function calls. + +.. _settings-recursion: + +Settings +~~~~~~~~~~ + +Recursion settings are important if you don't want extremly +recursive python code to go absolutely crazy. + +The default values are based on experiments while completing the |jedi| library +itself (inception!). But I don't think there's any other Python library that +uses recursion in a similarly extreme way. Completion should also be fast and +therefore the quality might not always be maximal. + +.. autodata:: recursion_limit +.. autodata:: total_function_execution_limit +.. autodata:: per_function_execution_limit +.. autodata:: per_function_recursion_limit +""" + +from contextlib import contextmanager + +from jedi import debug +from jedi.evaluate.base_context import NO_CONTEXTS + + +recursion_limit = 15 +""" +Like ``sys.getrecursionlimit()``, just for |jedi|. +""" +total_function_execution_limit = 200 +""" +This is a hard limit of how many non-builtin functions can be executed. +""" +per_function_execution_limit = 6 +""" +The maximal amount of times a specific function may be executed. +""" +per_function_recursion_limit = 2 +""" +A function may not be executed more than this number of times recursively. +""" + + +class RecursionDetector(object): + def __init__(self): + self.pushed_nodes = [] + + +@contextmanager +def execution_allowed(evaluator, node): + """ + A decorator to detect recursions in statements. In a recursion a statement + at the same place, in the same module may not be executed two times. + """ + pushed_nodes = evaluator.recursion_detector.pushed_nodes + + if node in pushed_nodes: + debug.warning('catched stmt recursion: %s @%s', node, + getattr(node, 'start_pos', None)) + yield False + else: + try: + pushed_nodes.append(node) + yield True + finally: + pushed_nodes.pop() + + +def execution_recursion_decorator(default=NO_CONTEXTS): + def decorator(func): + def wrapper(self, **kwargs): + detector = self.evaluator.execution_recursion_detector + limit_reached = detector.push_execution(self) + try: + if limit_reached: + result = default + else: + result = func(self, **kwargs) + finally: + detector.pop_execution() + return result + return wrapper + return decorator + + +class ExecutionRecursionDetector(object): + """ + Catches recursions of executions. + """ + def __init__(self, evaluator): + self._evaluator = evaluator + + self._recursion_level = 0 + self._parent_execution_funcs = [] + self._funcdef_execution_counts = {} + self._execution_count = 0 + + def pop_execution(self): + self._parent_execution_funcs.pop() + self._recursion_level -= 1 + + def push_execution(self, execution): + funcdef = execution.tree_node + + # These two will be undone in pop_execution. + self._recursion_level += 1 + self._parent_execution_funcs.append(funcdef) + + module = execution.get_root_context() + + if module == self._evaluator.builtins_module: + # We have control over builtins so we know they are not recursing + # like crazy. Therefore we just let them execute always, because + # they usually just help a lot with getting good results. + return False + + if self._recursion_level > recursion_limit: + debug.warning('Recursion limit (%s) reached', recursion_limit) + return True + + if self._execution_count >= total_function_execution_limit: + debug.warning('Function execution limit (%s) reached', total_function_execution_limit) + return True + self._execution_count += 1 + + if self._funcdef_execution_counts.setdefault(funcdef, 0) >= per_function_execution_limit: + if module.py__name__() in ('builtins', 'typing'): + return False + debug.warning( + 'Per function execution limit (%s) reached: %s', + per_function_execution_limit, + funcdef + ) + return True + self._funcdef_execution_counts[funcdef] += 1 + + if self._parent_execution_funcs.count(funcdef) > per_function_recursion_limit: + debug.warning( + 'Per function recursion limit (%s) reached: %s', + per_function_recursion_limit, + funcdef + ) + return True + return False diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/signature.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/signature.py new file mode 100644 index 0000000..43d3d5d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/signature.py @@ -0,0 +1,116 @@ +from jedi._compatibility import Parameter +from jedi.cache import memoize_method + + +class _SignatureMixin(object): + def to_string(self): + def param_strings(): + is_positional = False + is_kw_only = False + for n in self.get_param_names(resolve_stars=True): + kind = n.get_kind() + is_positional |= kind == Parameter.POSITIONAL_ONLY + if is_positional and kind != Parameter.POSITIONAL_ONLY: + yield '/' + is_positional = False + + if kind == Parameter.VAR_POSITIONAL: + is_kw_only = True + elif kind == Parameter.KEYWORD_ONLY and not is_kw_only: + yield '*' + is_kw_only = True + + yield n.to_string() + + if is_positional: + yield '/' + + s = self.name.string_name + '(' + ', '.join(param_strings()) + ')' + annotation = self.annotation_string + if annotation: + s += ' -> ' + annotation + return s + + +class AbstractSignature(_SignatureMixin): + def __init__(self, context, is_bound=False): + self.context = context + self.is_bound = is_bound + + @property + def name(self): + return self.context.name + + @property + def annotation_string(self): + return '' + + def get_param_names(self, resolve_stars=False): + param_names = self._function_context.get_param_names() + if self.is_bound: + return param_names[1:] + return param_names + + def bind(self, context): + raise NotImplementedError + + def __repr__(self): + return '<%s: %s, %s>' % (self.__class__.__name__, self.context, self._function_context) + + +class TreeSignature(AbstractSignature): + def __init__(self, context, function_context=None, is_bound=False): + super(TreeSignature, self).__init__(context, is_bound) + self._function_context = function_context or context + + def bind(self, context): + return TreeSignature(context, self._function_context, is_bound=True) + + @property + def _annotation(self): + # Classes don't need annotations, even if __init__ has one. They always + # return themselves. + if self.context.is_class(): + return None + return self._function_context.tree_node.annotation + + @property + def annotation_string(self): + a = self._annotation + if a is None: + return '' + return a.get_code(include_prefix=False) + + @memoize_method + def get_param_names(self, resolve_stars=False): + params = super(TreeSignature, self).get_param_names(resolve_stars=False) + if resolve_stars: + from jedi.evaluate.star_args import process_params + params = process_params(params) + return params + + +class BuiltinSignature(AbstractSignature): + def __init__(self, context, return_string, is_bound=False): + super(BuiltinSignature, self).__init__(context, is_bound) + self._return_string = return_string + + @property + def annotation_string(self): + return self._return_string + + @property + def _function_context(self): + return self.context + + def bind(self, context): + assert not self.is_bound + return BuiltinSignature(context, self._return_string, is_bound=True) + + +class SignatureWrapper(_SignatureMixin): + def __init__(self, wrapped_signature): + self._wrapped_signature = wrapped_signature + + def __getattr__(self, name): + return getattr(self._wrapped_signature, name) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/star_args.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/star_args.py new file mode 100644 index 0000000..2008a85 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/star_args.py @@ -0,0 +1,206 @@ +""" +This module is responsible for evaluating *args and **kwargs for signatures. + +This means for example in this case:: + + def foo(a, b, c): ... + + def bar(*args): + return foo(1, *args) + +The signature here for bar should be `bar(b, c)` instead of bar(*args). +""" + +from jedi._compatibility import Parameter +from jedi.evaluate.utils import to_list +from jedi.evaluate.names import ParamNameWrapper + + +def _iter_nodes_for_param(param_name): + from parso.python.tree import search_ancestor + from jedi.evaluate.arguments import TreeArguments + + execution_context = param_name.parent_context + function_node = execution_context.tree_node + module_node = function_node.get_root_node() + start = function_node.children[-1].start_pos + end = function_node.children[-1].end_pos + for name in module_node.get_used_names().get(param_name.string_name): + if start <= name.start_pos < end: + # Is used in the function + argument = name.parent + if argument.type == 'argument' \ + and argument.children[0] == '*' * param_name.star_count: + # No support for Python <= 3.4 here, but they are end-of-life + # anyway + trailer = search_ancestor(argument, 'trailer') + if trailer is not None: # Make sure we're in a function + context = execution_context.create_context(trailer) + if _goes_to_param_name(param_name, context, name): + contexts = _to_callables(context, trailer) + + args = TreeArguments.create_cached( + execution_context.evaluator, + context=context, + argument_node=trailer.children[1], + trailer=trailer, + ) + for c in contexts: + yield c, args + else: + assert False + + +def _goes_to_param_name(param_name, context, potential_name): + if potential_name.type != 'name': + return False + from jedi.evaluate.names import TreeNameDefinition + found = TreeNameDefinition(context, potential_name).goto() + return any(param_name.parent_context == p.parent_context + and param_name.start_pos == p.start_pos + for p in found) + + +def _to_callables(context, trailer): + from jedi.evaluate.syntax_tree import eval_trailer + + atom_expr = trailer.parent + index = atom_expr.children[0] == 'await' + # Eval atom first + contexts = context.eval_node(atom_expr.children[index]) + for trailer2 in atom_expr.children[index + 1:]: + if trailer == trailer2: + break + contexts = eval_trailer(context, contexts, trailer2) + return contexts + + +def _remove_given_params(arguments, param_names): + count = 0 + used_keys = set() + for key, _ in arguments.unpack(): + if key is None: + count += 1 + else: + used_keys.add(key) + + for p in param_names: + if count and p.maybe_positional_argument(): + count -= 1 + continue + if p.string_name in used_keys and p.maybe_keyword_argument(): + continue + yield p + + +@to_list +def process_params(param_names, star_count=3): # default means both * and ** + used_names = set() + arg_callables = [] + kwarg_callables = [] + + kw_only_names = [] + kwarg_names = [] + arg_names = [] + original_arg_name = None + original_kwarg_name = None + for p in param_names: + kind = p.get_kind() + if kind == Parameter.VAR_POSITIONAL: + if star_count & 1: + arg_callables = _iter_nodes_for_param(p) + original_arg_name = p + elif p.get_kind() == Parameter.VAR_KEYWORD: + if star_count & 2: + kwarg_callables = list(_iter_nodes_for_param(p)) + original_kwarg_name = p + elif kind == Parameter.KEYWORD_ONLY: + if star_count & 2: + kw_only_names.append(p) + elif kind == Parameter.POSITIONAL_ONLY: + if star_count & 1: + yield p + else: + if star_count == 1: + yield ParamNameFixedKind(p, Parameter.POSITIONAL_ONLY) + elif star_count == 2: + kw_only_names.append(ParamNameFixedKind(p, Parameter.KEYWORD_ONLY)) + else: + used_names.add(p.string_name) + yield p + + longest_param_names = () + found_arg_signature = False + found_kwarg_signature = False + for func_and_argument in arg_callables: + func, arguments = func_and_argument + new_star_count = star_count + if func_and_argument in kwarg_callables: + kwarg_callables.remove(func_and_argument) + else: + new_star_count = 1 + + for signature in func.get_signatures(): + found_arg_signature = True + if new_star_count == 3: + found_kwarg_signature = True + args_for_this_func = [] + for p in process_params( + list(_remove_given_params( + arguments, + signature.get_param_names(resolve_stars=False) + )), new_star_count): + if p.get_kind() == Parameter.VAR_KEYWORD: + kwarg_names.append(p) + elif p.get_kind() == Parameter.VAR_POSITIONAL: + arg_names.append(p) + elif p.get_kind() == Parameter.KEYWORD_ONLY: + kw_only_names.append(p) + else: + args_for_this_func.append(p) + if len(args_for_this_func) > len(longest_param_names): + longest_param_names = args_for_this_func + + for p in longest_param_names: + if star_count == 1 and p.get_kind() != Parameter.VAR_POSITIONAL: + yield ParamNameFixedKind(p, Parameter.POSITIONAL_ONLY) + else: + if p.get_kind() == Parameter.POSITIONAL_OR_KEYWORD: + used_names.add(p.string_name) + yield p + + if not found_arg_signature and original_arg_name is not None: + yield original_arg_name + elif arg_names: + yield arg_names[0] + + for p in kw_only_names: + if p.string_name in used_names: + continue + yield p + used_names.add(p.string_name) + + for func, arguments in kwarg_callables: + for signature in func.get_signatures(): + found_kwarg_signature = True + for p in process_params( + list(_remove_given_params( + arguments, + signature.get_param_names(resolve_stars=False) + )), star_count=2): + if p.get_kind() != Parameter.KEYWORD_ONLY or not kwarg_names: + yield p + + if not found_kwarg_signature and original_kwarg_name is not None: + yield original_kwarg_name + elif kwarg_names: + yield kwarg_names[0] + + +class ParamNameFixedKind(ParamNameWrapper): + def __init__(self, param_name, new_kind): + super(ParamNameFixedKind, self).__init__(param_name) + self._new_kind = new_kind + + def get_kind(self): + return self._new_kind diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/syntax_tree.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/syntax_tree.py new file mode 100644 index 0000000..89c51d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/syntax_tree.py @@ -0,0 +1,730 @@ +""" +Functions evaluating the syntax tree. +""" +import copy + +from parso.python import tree + +from jedi._compatibility import force_unicode, unicode +from jedi import debug +from jedi import parser_utils +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, ContextualizedNode, \ + ContextualizedName, iterator_to_context_set, iterate_contexts +from jedi.evaluate.lazy_context import LazyTreeContext +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import helpers +from jedi.evaluate import analysis +from jedi.evaluate import imports +from jedi.evaluate import arguments +from jedi.evaluate.context import ClassContext, FunctionContext +from jedi.evaluate.context import iterable +from jedi.evaluate.context import TreeInstance +from jedi.evaluate.finder import NameFinder +from jedi.evaluate.helpers import is_string, is_literal, is_number +from jedi.evaluate.compiled.access import COMPARISON_OPERATORS +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.gradual.stub_context import VersionInfo +from jedi.evaluate.gradual import annotation +from jedi.evaluate.context.decorator import Decoratee +from jedi.plugins import plugin_manager + + +def _limit_context_infers(func): + """ + This is for now the way how we limit type inference going wild. There are + other ways to ensure recursion limits as well. This is mostly necessary + because of instance (self) access that can be quite tricky to limit. + + I'm still not sure this is the way to go, but it looks okay for now and we + can still go anther way in the future. Tests are there. ~ dave + """ + def wrapper(context, *args, **kwargs): + n = context.tree_node + evaluator = context.evaluator + try: + evaluator.inferred_element_counts[n] += 1 + if evaluator.inferred_element_counts[n] > 300: + debug.warning('In context %s there were too many inferences.', n) + return NO_CONTEXTS + except KeyError: + evaluator.inferred_element_counts[n] = 1 + return func(context, *args, **kwargs) + + return wrapper + + +def _py__stop_iteration_returns(generators): + results = NO_CONTEXTS + for generator in generators: + try: + method = generator.py__stop_iteration_returns + except AttributeError: + debug.warning('%s is not actually a generator', generator) + else: + results |= method() + return results + + +@debug.increase_indent +@_limit_context_infers +def eval_node(context, element): + debug.dbg('eval_node %s@%s in %s', element, element.start_pos, context) + evaluator = context.evaluator + typ = element.type + if typ in ('name', 'number', 'string', 'atom', 'strings', 'keyword', 'fstring'): + return eval_atom(context, element) + elif typ == 'lambdef': + return ContextSet([FunctionContext.from_context(context, element)]) + elif typ == 'expr_stmt': + return eval_expr_stmt(context, element) + elif typ in ('power', 'atom_expr'): + first_child = element.children[0] + children = element.children[1:] + had_await = False + if first_child.type == 'keyword' and first_child.value == 'await': + had_await = True + first_child = children.pop(0) + + context_set = context.eval_node(first_child) + for (i, trailer) in enumerate(children): + if trailer == '**': # has a power operation. + right = context.eval_node(children[i + 1]) + context_set = _eval_comparison( + evaluator, + context, + context_set, + trailer, + right + ) + break + context_set = eval_trailer(context, context_set, trailer) + + if had_await: + return context_set.py__await__().py__stop_iteration_returns() + return context_set + elif typ in ('testlist_star_expr', 'testlist',): + # The implicit tuple in statements. + return ContextSet([iterable.SequenceLiteralContext(evaluator, context, element)]) + elif typ in ('not_test', 'factor'): + context_set = context.eval_node(element.children[-1]) + for operator in element.children[:-1]: + context_set = eval_factor(context_set, operator) + return context_set + elif typ == 'test': + # `x if foo else y` case. + return (context.eval_node(element.children[0]) | + context.eval_node(element.children[-1])) + elif typ == 'operator': + # Must be an ellipsis, other operators are not evaluated. + # In Python 2 ellipsis is coded as three single dot tokens, not + # as one token 3 dot token. + if element.value not in ('.', '...'): + origin = element.parent + raise AssertionError("unhandled operator %s in %s " % (repr(element.value), origin)) + return ContextSet([compiled.builtin_from_name(evaluator, u'Ellipsis')]) + elif typ == 'dotted_name': + context_set = eval_atom(context, element.children[0]) + for next_name in element.children[2::2]: + # TODO add search_global=True? + context_set = context_set.py__getattribute__(next_name, name_context=context) + return context_set + elif typ == 'eval_input': + return eval_node(context, element.children[0]) + elif typ == 'annassign': + return annotation.eval_annotation(context, element.children[1]) \ + .execute_annotation() + elif typ == 'yield_expr': + if len(element.children) and element.children[1].type == 'yield_arg': + # Implies that it's a yield from. + element = element.children[1].children[1] + generators = context.eval_node(element) \ + .py__getattribute__('__iter__').execute_evaluated() + return generators.py__stop_iteration_returns() + + # Generator.send() is not implemented. + return NO_CONTEXTS + elif typ == 'namedexpr_test': + return eval_node(context, element.children[2]) + else: + return eval_or_test(context, element) + + +def eval_trailer(context, atom_contexts, trailer): + trailer_op, node = trailer.children[:2] + if node == ')': # `arglist` is optional. + node = None + + if trailer_op == '[': + trailer_op, node, _ = trailer.children + return atom_contexts.get_item( + eval_subscript_list(context.evaluator, context, node), + ContextualizedNode(context, trailer) + ) + else: + debug.dbg('eval_trailer: %s in %s', trailer, atom_contexts) + if trailer_op == '.': + return atom_contexts.py__getattribute__( + name_context=context, + name_or_str=node + ) + else: + assert trailer_op == '(', 'trailer_op is actually %s' % trailer_op + args = arguments.TreeArguments(context.evaluator, context, node, trailer) + return atom_contexts.execute(args) + + +def eval_atom(context, atom): + """ + Basically to process ``atom`` nodes. The parser sometimes doesn't + generate the node (because it has just one child). In that case an atom + might be a name or a literal as well. + """ + if atom.type == 'name': + if atom.value in ('True', 'False', 'None'): + # Python 2... + return ContextSet([compiled.builtin_from_name(context.evaluator, atom.value)]) + + # This is the first global lookup. + stmt = tree.search_ancestor( + atom, 'expr_stmt', 'lambdef' + ) or atom + if stmt.type == 'lambdef': + stmt = atom + position = stmt.start_pos + if _is_annotation_name(atom): + # Since Python 3.7 (with from __future__ import annotations), + # annotations are essentially strings and can reference objects + # that are defined further down in code. Therefore just set the + # position to None, so the finder will not try to stop at a certain + # position in the module. + position = None + return context.py__getattribute__( + name_or_str=atom, + position=position, + search_global=True + ) + elif atom.type == 'keyword': + # For False/True/None + if atom.value in ('False', 'True', 'None'): + return ContextSet([compiled.builtin_from_name(context.evaluator, atom.value)]) + elif atom.value == 'print': + # print e.g. could be evaluated like this in Python 2.7 + return NO_CONTEXTS + elif atom.value == 'yield': + # Contrary to yield from, yield can just appear alone to return a + # value when used with `.send()`. + return NO_CONTEXTS + assert False, 'Cannot evaluate the keyword %s' % atom + + elif isinstance(atom, tree.Literal): + string = context.evaluator.compiled_subprocess.safe_literal_eval(atom.value) + return ContextSet([compiled.create_simple_object(context.evaluator, string)]) + elif atom.type == 'strings': + # Will be multiple string. + context_set = eval_atom(context, atom.children[0]) + for string in atom.children[1:]: + right = eval_atom(context, string) + context_set = _eval_comparison(context.evaluator, context, context_set, u'+', right) + return context_set + elif atom.type == 'fstring': + return compiled.get_string_context_set(context.evaluator) + else: + c = atom.children + # Parentheses without commas are not tuples. + if c[0] == '(' and not len(c) == 2 \ + and not(c[1].type == 'testlist_comp' and + len(c[1].children) > 1): + return context.eval_node(c[1]) + + try: + comp_for = c[1].children[1] + except (IndexError, AttributeError): + pass + else: + if comp_for == ':': + # Dict comprehensions have a colon at the 3rd index. + try: + comp_for = c[1].children[3] + except IndexError: + pass + + if comp_for.type in ('comp_for', 'sync_comp_for'): + return ContextSet([iterable.comprehension_from_atom( + context.evaluator, context, atom + )]) + + # It's a dict/list/tuple literal. + array_node = c[1] + try: + array_node_c = array_node.children + except AttributeError: + array_node_c = [] + if c[0] == '{' and (array_node == '}' or ':' in array_node_c or + '**' in array_node_c): + context = iterable.DictLiteralContext(context.evaluator, context, atom) + else: + context = iterable.SequenceLiteralContext(context.evaluator, context, atom) + return ContextSet([context]) + + +@_limit_context_infers +def eval_expr_stmt(context, stmt, seek_name=None): + with recursion.execution_allowed(context.evaluator, stmt) as allowed: + # Here we allow list/set to recurse under certain conditions. To make + # it possible to resolve stuff like list(set(list(x))), this is + # necessary. + if not allowed and context.get_root_context() == context.evaluator.builtins_module: + try: + instance = context.var_args.instance + except AttributeError: + pass + else: + if instance.name.string_name in ('list', 'set'): + c = instance.get_first_non_keyword_argument_contexts() + if instance not in c: + allowed = True + + if allowed: + return _eval_expr_stmt(context, stmt, seek_name) + return NO_CONTEXTS + + +@debug.increase_indent +def _eval_expr_stmt(context, stmt, seek_name=None): + """ + The starting point of the completion. A statement always owns a call + list, which are the calls, that a statement does. In case multiple + names are defined in the statement, `seek_name` returns the result for + this name. + + :param stmt: A `tree.ExprStmt`. + """ + debug.dbg('eval_expr_stmt %s (%s)', stmt, seek_name) + rhs = stmt.get_rhs() + context_set = context.eval_node(rhs) + + if seek_name: + c_node = ContextualizedName(context, seek_name) + context_set = check_tuple_assignments(context.evaluator, c_node, context_set) + + first_operator = next(stmt.yield_operators(), None) + if first_operator not in ('=', None) and first_operator.type == 'operator': + # `=` is always the last character in aug assignments -> -1 + operator = copy.copy(first_operator) + operator.value = operator.value[:-1] + name = stmt.get_defined_names()[0].value + left = context.py__getattribute__( + name, position=stmt.start_pos, search_global=True) + + for_stmt = tree.search_ancestor(stmt, 'for_stmt') + if for_stmt is not None and for_stmt.type == 'for_stmt' and context_set \ + and parser_utils.for_stmt_defines_one_name(for_stmt): + # Iterate through result and add the values, that's possible + # only in for loops without clutter, because they are + # predictable. Also only do it, if the variable is not a tuple. + node = for_stmt.get_testlist() + cn = ContextualizedNode(context, node) + ordered = list(cn.infer().iterate(cn)) + + for lazy_context in ordered: + dct = {for_stmt.children[1].value: lazy_context.infer()} + with helpers.predefine_names(context, for_stmt, dct): + t = context.eval_node(rhs) + left = _eval_comparison(context.evaluator, context, left, operator, t) + context_set = left + else: + context_set = _eval_comparison(context.evaluator, context, left, operator, context_set) + debug.dbg('eval_expr_stmt result %s', context_set) + return context_set + + +def eval_or_test(context, or_test): + iterator = iter(or_test.children) + types = context.eval_node(next(iterator)) + for operator in iterator: + right = next(iterator) + if operator.type == 'comp_op': # not in / is not + operator = ' '.join(c.value for c in operator.children) + + # handle lazy evaluation of and/or here. + if operator in ('and', 'or'): + left_bools = set(left.py__bool__() for left in types) + if left_bools == {True}: + if operator == 'and': + types = context.eval_node(right) + elif left_bools == {False}: + if operator != 'and': + types = context.eval_node(right) + # Otherwise continue, because of uncertainty. + else: + types = _eval_comparison(context.evaluator, context, types, operator, + context.eval_node(right)) + debug.dbg('eval_or_test types %s', types) + return types + + +@iterator_to_context_set +def eval_factor(context_set, operator): + """ + Calculates `+`, `-`, `~` and `not` prefixes. + """ + for context in context_set: + if operator == '-': + if is_number(context): + yield context.negate() + elif operator == 'not': + value = context.py__bool__() + if value is None: # Uncertainty. + return + yield compiled.create_simple_object(context.evaluator, not value) + else: + yield context + + +def _literals_to_types(evaluator, result): + # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), + # int(), float(), etc). + new_result = NO_CONTEXTS + for typ in result: + if is_literal(typ): + # Literals are only valid as long as the operations are + # correct. Otherwise add a value-free instance. + cls = compiled.builtin_from_name(evaluator, typ.name.string_name) + new_result |= cls.execute_evaluated() + else: + new_result |= ContextSet([typ]) + return new_result + + +def _eval_comparison(evaluator, context, left_contexts, operator, right_contexts): + if not left_contexts or not right_contexts: + # illegal slices e.g. cause left/right_result to be None + result = (left_contexts or NO_CONTEXTS) | (right_contexts or NO_CONTEXTS) + return _literals_to_types(evaluator, result) + else: + # I don't think there's a reasonable chance that a string + # operation is still correct, once we pass something like six + # objects. + if len(left_contexts) * len(right_contexts) > 6: + return _literals_to_types(evaluator, left_contexts | right_contexts) + else: + return ContextSet.from_sets( + _eval_comparison_part(evaluator, context, left, operator, right) + for left in left_contexts + for right in right_contexts + ) + + +def _is_annotation_name(name): + ancestor = tree.search_ancestor(name, 'param', 'funcdef', 'expr_stmt') + if ancestor is None: + return False + + if ancestor.type in ('param', 'funcdef'): + ann = ancestor.annotation + if ann is not None: + return ann.start_pos <= name.start_pos < ann.end_pos + elif ancestor.type == 'expr_stmt': + c = ancestor.children + if len(c) > 1 and c[1].type == 'annassign': + return c[1].start_pos <= name.start_pos < c[1].end_pos + return False + + +def _is_tuple(context): + return isinstance(context, iterable.Sequence) and context.array_type == 'tuple' + + +def _is_list(context): + return isinstance(context, iterable.Sequence) and context.array_type == 'list' + + +def _bool_to_context(evaluator, bool_): + return compiled.builtin_from_name(evaluator, force_unicode(str(bool_))) + + +def _get_tuple_ints(context): + if not isinstance(context, iterable.SequenceLiteralContext): + return None + numbers = [] + for lazy_context in context.py__iter__(): + if not isinstance(lazy_context, LazyTreeContext): + return None + node = lazy_context.data + if node.type != 'number': + return None + try: + numbers.append(int(node.value)) + except ValueError: + return None + return numbers + + +def _eval_comparison_part(evaluator, context, left, operator, right): + l_is_num = is_number(left) + r_is_num = is_number(right) + if isinstance(operator, unicode): + str_operator = operator + else: + str_operator = force_unicode(str(operator.value)) + + if str_operator == '*': + # for iterables, ignore * operations + if isinstance(left, iterable.Sequence) or is_string(left): + return ContextSet([left]) + elif isinstance(right, iterable.Sequence) or is_string(right): + return ContextSet([right]) + elif str_operator == '+': + if l_is_num and r_is_num or is_string(left) and is_string(right): + return ContextSet([left.execute_operation(right, str_operator)]) + elif _is_tuple(left) and _is_tuple(right) or _is_list(left) and _is_list(right): + return ContextSet([iterable.MergedArray(evaluator, (left, right))]) + elif str_operator == '-': + if l_is_num and r_is_num: + return ContextSet([left.execute_operation(right, str_operator)]) + elif str_operator == '%': + # With strings and numbers the left type typically remains. Except for + # `int() % float()`. + return ContextSet([left]) + elif str_operator in COMPARISON_OPERATORS: + if left.is_compiled() and right.is_compiled(): + # Possible, because the return is not an option. Just compare. + try: + return ContextSet([left.execute_operation(right, str_operator)]) + except TypeError: + # Could be True or False. + pass + else: + if str_operator in ('is', '!=', '==', 'is not'): + operation = COMPARISON_OPERATORS[str_operator] + bool_ = operation(left, right) + return ContextSet([_bool_to_context(evaluator, bool_)]) + + if isinstance(left, VersionInfo): + version_info = _get_tuple_ints(right) + if version_info is not None: + bool_result = compiled.access.COMPARISON_OPERATORS[operator]( + evaluator.environment.version_info, + tuple(version_info) + ) + return ContextSet([_bool_to_context(evaluator, bool_result)]) + + return ContextSet([_bool_to_context(evaluator, True), _bool_to_context(evaluator, False)]) + elif str_operator == 'in': + return NO_CONTEXTS + + def check(obj): + """Checks if a Jedi object is either a float or an int.""" + return isinstance(obj, TreeInstance) and \ + obj.name.string_name in ('int', 'float') + + # Static analysis, one is a number, the other one is not. + if str_operator in ('+', '-') and l_is_num != r_is_num \ + and not (check(left) or check(right)): + message = "TypeError: unsupported operand type(s) for +: %s and %s" + analysis.add(context, 'type-error-operation', operator, + message % (left, right)) + + result = ContextSet([left, right]) + debug.dbg('Used operator %s resulting in %s', operator, result) + return result + + +def _remove_statements(evaluator, context, stmt, name): + """ + This is the part where statements are being stripped. + + Due to lazy evaluation, statements like a = func; b = a; b() have to be + evaluated. + """ + pep0484_contexts = \ + annotation.find_type_from_comment_hint_assign(context, stmt, name) + if pep0484_contexts: + return pep0484_contexts + + return eval_expr_stmt(context, stmt, seek_name=name) + + +@plugin_manager.decorate() +def tree_name_to_contexts(evaluator, context, tree_name): + context_set = NO_CONTEXTS + module_node = context.get_root_context().tree_node + # First check for annotations, like: `foo: int = 3` + if module_node is not None: + names = module_node.get_used_names().get(tree_name.value, []) + for name in names: + expr_stmt = name.parent + + if expr_stmt.type == "expr_stmt" and expr_stmt.children[1].type == "annassign": + correct_scope = parser_utils.get_parent_scope(name) == context.tree_node + if correct_scope: + context_set |= annotation.eval_annotation( + context, expr_stmt.children[1].children[1] + ).execute_annotation() + if context_set: + return context_set + + types = [] + node = tree_name.get_definition(import_name_always=True) + if node is None: + node = tree_name.parent + if node.type == 'global_stmt': + context = evaluator.create_context(context, tree_name) + finder = NameFinder(evaluator, context, context, tree_name.value) + filters = finder.get_filters(search_global=True) + # For global_stmt lookups, we only need the first possible scope, + # which means the function itself. + filters = [next(filters)] + return finder.find(filters, attribute_lookup=False) + elif node.type not in ('import_from', 'import_name'): + context = evaluator.create_context(context, tree_name) + return eval_atom(context, tree_name) + + typ = node.type + if typ == 'for_stmt': + types = annotation.find_type_from_comment_hint_for(context, node, tree_name) + if types: + return types + if typ == 'with_stmt': + types = annotation.find_type_from_comment_hint_with(context, node, tree_name) + if types: + return types + + if typ in ('for_stmt', 'comp_for', 'sync_comp_for'): + try: + types = context.predefined_names[node][tree_name.value] + except KeyError: + cn = ContextualizedNode(context, node.children[3]) + for_types = iterate_contexts( + cn.infer(), + contextualized_node=cn, + is_async=node.parent.type == 'async_stmt', + ) + c_node = ContextualizedName(context, tree_name) + types = check_tuple_assignments(evaluator, c_node, for_types) + elif typ == 'expr_stmt': + types = _remove_statements(evaluator, context, node, tree_name) + elif typ == 'with_stmt': + context_managers = context.eval_node(node.get_test_node_from_name(tree_name)) + enter_methods = context_managers.py__getattribute__(u'__enter__') + return enter_methods.execute_evaluated() + elif typ in ('import_from', 'import_name'): + types = imports.infer_import(context, tree_name) + elif typ in ('funcdef', 'classdef'): + types = _apply_decorators(context, node) + elif typ == 'try_stmt': + # TODO an exception can also be a tuple. Check for those. + # TODO check for types that are not classes and add it to + # the static analysis report. + exceptions = context.eval_node(tree_name.get_previous_sibling().get_previous_sibling()) + types = exceptions.execute_evaluated() + elif node.type == 'param': + types = NO_CONTEXTS + else: + raise ValueError("Should not happen. type: %s" % typ) + return types + + +# We don't want to have functions/classes that are created by the same +# tree_node. +@evaluator_method_cache() +def _apply_decorators(context, node): + """ + Returns the function, that should to be executed in the end. + This is also the places where the decorators are processed. + """ + if node.type == 'classdef': + decoratee_context = ClassContext( + context.evaluator, + parent_context=context, + tree_node=node + ) + else: + decoratee_context = FunctionContext.from_context(context, node) + initial = values = ContextSet([decoratee_context]) + for dec in reversed(node.get_decorators()): + debug.dbg('decorator: %s %s', dec, values, color="MAGENTA") + with debug.increase_indent_cm(): + dec_values = context.eval_node(dec.children[1]) + trailer_nodes = dec.children[2:-1] + if trailer_nodes: + # Create a trailer and evaluate it. + trailer = tree.PythonNode('trailer', trailer_nodes) + trailer.parent = dec + dec_values = eval_trailer(context, dec_values, trailer) + + if not len(dec_values): + code = dec.get_code(include_prefix=False) + # For the short future, we don't want to hear about the runtime + # decorator in typing that was intentionally omitted. This is not + # "correct", but helps with debugging. + if code != '@runtime\n': + debug.warning('decorator not found: %s on %s', dec, node) + return initial + + values = dec_values.execute(arguments.ValuesArguments([values])) + if not len(values): + debug.warning('not possible to resolve wrappers found %s', node) + return initial + + debug.dbg('decorator end %s', values, color="MAGENTA") + if values != initial: + return ContextSet([Decoratee(c, decoratee_context) for c in values]) + return values + + +def check_tuple_assignments(evaluator, contextualized_name, context_set): + """ + Checks if tuples are assigned. + """ + lazy_context = None + for index, node in contextualized_name.assignment_indexes(): + cn = ContextualizedNode(contextualized_name.context, node) + iterated = context_set.iterate(cn) + if isinstance(index, slice): + # For no star unpacking is not possible. + return NO_CONTEXTS + for _ in range(index + 1): + try: + lazy_context = next(iterated) + except StopIteration: + # We could do this with the default param in next. But this + # would allow this loop to run for a very long time if the + # index number is high. Therefore break if the loop is + # finished. + return NO_CONTEXTS + context_set = lazy_context.infer() + return context_set + + +def eval_subscript_list(evaluator, context, index): + """ + Handles slices in subscript nodes. + """ + if index == ':': + # Like array[:] + return ContextSet([iterable.Slice(context, None, None, None)]) + + elif index.type == 'subscript' and not index.children[0] == '.': + # subscript basically implies a slice operation, except for Python 2's + # Ellipsis. + # e.g. array[:3] + result = [] + for el in index.children: + if el == ':': + if not result: + result.append(None) + elif el.type == 'sliceop': + if len(el.children) == 2: + result.append(el.children[1]) + else: + result.append(el) + result += [None] * (3 - len(result)) + + return ContextSet([iterable.Slice(context, *result)]) + elif index.type == 'subscriptlist': + return ContextSet([iterable.SequenceLiteralContext(evaluator, context, index)]) + + # No slices + return context.eval_node(index) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/sys_path.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/sys_path.py new file mode 100644 index 0000000..8dea434 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/sys_path.py @@ -0,0 +1,261 @@ +import os + +from jedi._compatibility import unicode, force_unicode, all_suffixes +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import ContextualizedNode +from jedi.evaluate.helpers import is_string +from jedi.common.utils import traverse_parents +from jedi.parser_utils import get_cached_code_lines +from jedi.file_io import FileIO +from jedi import settings +from jedi import debug + + +def _abs_path(module_context, path): + if os.path.isabs(path): + return path + + module_path = module_context.py__file__() + if module_path is None: + # In this case we have no idea where we actually are in the file + # system. + return None + + base_dir = os.path.dirname(module_path) + path = force_unicode(path) + return os.path.abspath(os.path.join(base_dir, path)) + + +def _paths_from_assignment(module_context, expr_stmt): + """ + Extracts the assigned strings from an assignment that looks as follows:: + + sys.path[0:0] = ['module/path', 'another/module/path'] + + This function is in general pretty tolerant (and therefore 'buggy'). + However, it's not a big issue usually to add more paths to Jedi's sys_path, + because it will only affect Jedi in very random situations and by adding + more paths than necessary, it usually benefits the general user. + """ + for assignee, operator in zip(expr_stmt.children[::2], expr_stmt.children[1::2]): + try: + assert operator in ['=', '+='] + assert assignee.type in ('power', 'atom_expr') and \ + len(assignee.children) > 1 + c = assignee.children + assert c[0].type == 'name' and c[0].value == 'sys' + trailer = c[1] + assert trailer.children[0] == '.' and trailer.children[1].value == 'path' + # TODO Essentially we're not checking details on sys.path + # manipulation. Both assigment of the sys.path and changing/adding + # parts of the sys.path are the same: They get added to the end of + # the current sys.path. + """ + execution = c[2] + assert execution.children[0] == '[' + subscript = execution.children[1] + assert subscript.type == 'subscript' + assert ':' in subscript.children + """ + except AssertionError: + continue + + cn = ContextualizedNode(module_context.create_context(expr_stmt), expr_stmt) + for lazy_context in cn.infer().iterate(cn): + for context in lazy_context.infer(): + if is_string(context): + abs_path = _abs_path(module_context, context.get_safe_value()) + if abs_path is not None: + yield abs_path + + +def _paths_from_list_modifications(module_context, trailer1, trailer2): + """ extract the path from either "sys.path.append" or "sys.path.insert" """ + # Guarantee that both are trailers, the first one a name and the second one + # a function execution with at least one param. + if not (trailer1.type == 'trailer' and trailer1.children[0] == '.' + and trailer2.type == 'trailer' and trailer2.children[0] == '(' + and len(trailer2.children) == 3): + return + + name = trailer1.children[1].value + if name not in ['insert', 'append']: + return + arg = trailer2.children[1] + if name == 'insert' and len(arg.children) in (3, 4): # Possible trailing comma. + arg = arg.children[2] + + for context in module_context.create_context(arg).eval_node(arg): + if is_string(context): + abs_path = _abs_path(module_context, context.get_safe_value()) + if abs_path is not None: + yield abs_path + + +@evaluator_method_cache(default=[]) +def check_sys_path_modifications(module_context): + """ + Detect sys.path modifications within module. + """ + def get_sys_path_powers(names): + for name in names: + power = name.parent.parent + if power is not None and power.type in ('power', 'atom_expr'): + c = power.children + if c[0].type == 'name' and c[0].value == 'sys' \ + and c[1].type == 'trailer': + n = c[1].children[1] + if n.type == 'name' and n.value == 'path': + yield name, power + + if module_context.tree_node is None: + return [] + + added = [] + try: + possible_names = module_context.tree_node.get_used_names()['path'] + except KeyError: + pass + else: + for name, power in get_sys_path_powers(possible_names): + expr_stmt = power.parent + if len(power.children) >= 4: + added.extend( + _paths_from_list_modifications( + module_context, *power.children[2:4] + ) + ) + elif expr_stmt is not None and expr_stmt.type == 'expr_stmt': + added.extend(_paths_from_assignment(module_context, expr_stmt)) + return added + + +def discover_buildout_paths(evaluator, script_path): + buildout_script_paths = set() + + for buildout_script_path in _get_buildout_script_paths(script_path): + for path in _get_paths_from_buildout_script(evaluator, buildout_script_path): + buildout_script_paths.add(path) + + return buildout_script_paths + + +def _get_paths_from_buildout_script(evaluator, buildout_script_path): + file_io = FileIO(buildout_script_path) + try: + module_node = evaluator.parse( + file_io=file_io, + cache=True, + cache_path=settings.cache_directory + ) + except IOError: + debug.warning('Error trying to read buildout_script: %s', buildout_script_path) + return + + from jedi.evaluate.context import ModuleContext + module = ModuleContext( + evaluator, module_node, file_io, + string_names=None, + code_lines=get_cached_code_lines(evaluator.grammar, buildout_script_path), + ) + for path in check_sys_path_modifications(module): + yield path + + +def _get_parent_dir_with_file(path, filename): + for parent in traverse_parents(path): + if os.path.isfile(os.path.join(parent, filename)): + return parent + return None + + +def _get_buildout_script_paths(search_path): + """ + if there is a 'buildout.cfg' file in one of the parent directories of the + given module it will return a list of all files in the buildout bin + directory that look like python files. + + :param search_path: absolute path to the module. + :type search_path: str + """ + project_root = _get_parent_dir_with_file(search_path, 'buildout.cfg') + if not project_root: + return + bin_path = os.path.join(project_root, 'bin') + if not os.path.exists(bin_path): + return + + for filename in os.listdir(bin_path): + try: + filepath = os.path.join(bin_path, filename) + with open(filepath, 'r') as f: + firstline = f.readline() + if firstline.startswith('#!') and 'python' in firstline: + yield filepath + except (UnicodeDecodeError, IOError) as e: + # Probably a binary file; permission error or race cond. because + # file got deleted. Ignore it. + debug.warning(unicode(e)) + continue + + +def remove_python_path_suffix(path): + for suffix in all_suffixes(): + if path.endswith(suffix): + path = path[:-len(suffix)] + break + return path + + +def transform_path_to_dotted(sys_path, module_path): + """ + Returns the dotted path inside a sys.path as a list of names. e.g. + + >>> from os.path import abspath + >>> transform_path_to_dotted([abspath("/foo")], abspath('/foo/bar/baz.py')) + (('bar', 'baz'), False) + + Returns (None, False) if the path doesn't really resolve to anything. + The second return part is if it is a package. + """ + # First remove the suffix. + module_path = remove_python_path_suffix(module_path) + + # Once the suffix was removed we are using the files as we know them. This + # means that if someone uses an ending like .vim for a Python file, .vim + # will be part of the returned dotted part. + + is_package = module_path.endswith(os.path.sep + '__init__') + if is_package: + # -1 to remove the separator + module_path = module_path[:-len('__init__') - 1] + + def iter_potential_solutions(): + for p in sys_path: + if module_path.startswith(p): + # Strip the trailing slash/backslash + rest = module_path[len(p):] + # On Windows a path can also use a slash. + if rest.startswith(os.path.sep) or rest.startswith('/'): + # Remove a slash in cases it's still there. + rest = rest[1:] + + if rest: + split = rest.split(os.path.sep) + if not all(split): + # This means that part of the file path was empty, this + # is very strange and is probably a file that is called + # `.py`. + return + yield tuple(split) + + potential_solutions = tuple(iter_potential_solutions()) + if not potential_solutions: + return None, False + # Try to find the shortest path, this makes more sense usually, because the + # user usually has venvs somewhere. This means that a path like + # .tox/py37/lib/python3.7/os.py can be normal for a file. However in that + # case we definitely want to return ['os'] as a path and not a crazy + # ['.tox', 'py37', 'lib', 'python3.7', 'os']. Keep in mind that this is a + # heuristic and there's now ay to "always" do it right. + return sorted(potential_solutions, key=lambda p: len(p))[0], is_package diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/usages.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/usages.py new file mode 100644 index 0000000..9c8d265 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/usages.py @@ -0,0 +1,61 @@ +from jedi.evaluate import imports +from jedi.evaluate.names import TreeNameDefinition + + +def _resolve_names(definition_names, avoid_names=()): + for name in definition_names: + if name in avoid_names: + # Avoiding recursions here, because goto on a module name lands + # on the same module. + continue + + if not isinstance(name, imports.SubModuleName): + # SubModuleNames are not actually existing names but created + # names when importing something like `import foo.bar.baz`. + yield name + + if name.api_type == 'module': + for name in _resolve_names(name.goto(), definition_names): + yield name + + +def _dictionarize(names): + return dict( + (n if n.tree_name is None else n.tree_name, n) + for n in names + ) + + +def _find_names(module_context, tree_name): + context = module_context.create_context(tree_name) + name = TreeNameDefinition(context, tree_name) + found_names = set(name.goto()) + found_names.add(name) + return _dictionarize(_resolve_names(found_names)) + + +def usages(module_context, tree_name): + search_name = tree_name.value + found_names = _find_names(module_context, tree_name) + modules = set(d.get_root_context() for d in found_names.values()) + modules = set(m for m in modules if m.is_module() and not m.is_compiled()) + + non_matching_usage_maps = {} + for m in imports.get_modules_containing_name(module_context.evaluator, modules, search_name): + for name_leaf in m.tree_node.get_used_names().get(search_name, []): + new = _find_names(m, name_leaf) + if any(tree_name in found_names for tree_name in new): + found_names.update(new) + for tree_name in new: + for dct in non_matching_usage_maps.get(tree_name, []): + # A usage that was previously searched for matches with + # a now found name. Merge. + found_names.update(dct) + try: + del non_matching_usage_maps[tree_name] + except KeyError: + pass + else: + for name in new: + non_matching_usage_maps.setdefault(name, []).append(new) + return found_names.values() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/utils.py new file mode 100644 index 0000000..990a995 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/evaluate/utils.py @@ -0,0 +1,119 @@ +""" A universal module with functions / classes without dependencies. """ +import sys +import contextlib +import functools +import re +import os + +from jedi._compatibility import reraise + + +_sep = os.path.sep +if os.path.altsep is not None: + _sep += os.path.altsep +_path_re = re.compile(r'(?:\.[^{0}]+|[{0}]__init__\.py)$'.format(re.escape(_sep))) +del _sep + + +def to_list(func): + def wrapper(*args, **kwargs): + return list(func(*args, **kwargs)) + return wrapper + + +def unite(iterable): + """Turns a two dimensional array into a one dimensional.""" + return set(typ for types in iterable for typ in types) + + +class UncaughtAttributeError(Exception): + """ + Important, because `__getattr__` and `hasattr` catch AttributeErrors + implicitly. This is really evil (mainly because of `__getattr__`). + `hasattr` in Python 2 is even more evil, because it catches ALL exceptions. + Therefore this class originally had to be derived from `BaseException` + instead of `Exception`. But because I removed relevant `hasattr` from + the code base, we can now switch back to `Exception`. + + :param base: return values of sys.exc_info(). + """ + + +def safe_property(func): + return property(reraise_uncaught(func)) + + +def reraise_uncaught(func): + """ + Re-throw uncaught `AttributeError`. + + Usage: Put ``@rethrow_uncaught`` in front of the function + which does **not** suppose to raise `AttributeError`. + + AttributeError is easily get caught by `hasattr` and another + ``except AttributeError`` clause. This becomes problem when you use + a lot of "dynamic" attributes (e.g., using ``@property``) because you + can't distinguish if the property does not exist for real or some code + inside of the "dynamic" attribute through that error. In a well + written code, such error should not exist but getting there is very + difficult. This decorator is to help us getting there by changing + `AttributeError` to `UncaughtAttributeError` to avoid unexpected catch. + This helps us noticing bugs earlier and facilitates debugging. + + .. note:: Treating StopIteration here is easy. + Add that feature when needed. + """ + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except AttributeError: + exc_info = sys.exc_info() + reraise(UncaughtAttributeError(exc_info[1]), exc_info[2]) + return wrapper + + +class PushBackIterator(object): + def __init__(self, iterator): + self.pushes = [] + self.iterator = iterator + self.current = None + + def push_back(self, value): + self.pushes.append(value) + + def __iter__(self): + return self + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self.pushes: + self.current = self.pushes.pop() + else: + self.current = next(self.iterator) + return self.current + + +@contextlib.contextmanager +def ignored(*exceptions): + """ + Context manager that ignores all of the specified exceptions. This will + be in the standard library starting with Python 3.4. + """ + try: + yield + except exceptions: + pass + + +def indent_block(text, indention=' '): + """This function indents a text block with a default of four spaces.""" + temp = '' + while text and text[-1] == '\n': + temp += text[-1] + text = text[:-1] + lines = text.split('\n') + return '\n'.join(map(lambda s: indention + s, lines)) + temp diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/file_io.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/file_io.py new file mode 100644 index 0000000..37d958e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/file_io.py @@ -0,0 +1,48 @@ +import os + +from parso import file_io + + +class AbstractFolderIO(object): + def __init__(self, path): + self.path = path + + def list(self): + raise NotImplementedError + + def get_file_io(self, name): + raise NotImplementedError + + +class FolderIO(AbstractFolderIO): + def list(self): + return os.listdir(self.path) + + def get_file_io(self, name): + return FileIO(os.path.join(self.path, name)) + + +class FileIOFolderMixin(object): + def get_parent_folder(self): + return FolderIO(os.path.dirname(self.path)) + + +class ZipFileIO(file_io.KnownContentFileIO, FileIOFolderMixin): + """For .zip and .egg archives""" + def __init__(self, path, code, zip_path): + super(ZipFileIO, self).__init__(path, code) + self._zip_path = zip_path + + def get_last_modified(self): + try: + return os.path.getmtime(self._zip_path) + except OSError: # Python 3 would probably only need FileNotFoundError + return None + + +class FileIO(file_io.FileIO, FileIOFolderMixin): + pass + + +class KnownContentFileIO(file_io.KnownContentFileIO, FileIOFolderMixin): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/parser_utils.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/parser_utils.py new file mode 100644 index 0000000..99d7a96 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/parser_utils.py @@ -0,0 +1,297 @@ +import re +import textwrap +from inspect import cleandoc +from weakref import WeakKeyDictionary + +from parso.python import tree +from parso.cache import parser_cache +from parso import split_lines + +from jedi._compatibility import literal_eval, force_unicode + +_EXECUTE_NODES = {'funcdef', 'classdef', 'import_from', 'import_name', 'test', + 'or_test', 'and_test', 'not_test', 'comparison', 'expr', + 'xor_expr', 'and_expr', 'shift_expr', 'arith_expr', + 'atom_expr', 'term', 'factor', 'power', 'atom'} + +_FLOW_KEYWORDS = ( + 'try', 'except', 'finally', 'else', 'if', 'elif', 'with', 'for', 'while' +) + + +def get_executable_nodes(node, last_added=False): + """ + For static analysis. + """ + result = [] + typ = node.type + if typ == 'name': + next_leaf = node.get_next_leaf() + if last_added is False and node.parent.type != 'param' and next_leaf != '=': + result.append(node) + elif typ == 'expr_stmt': + # I think evaluating the statement (and possibly returned arrays), + # should be enough for static analysis. + result.append(node) + for child in node.children: + result += get_executable_nodes(child, last_added=True) + elif typ == 'decorator': + # decorator + if node.children[-2] == ')': + node = node.children[-3] + if node != '(': + result += get_executable_nodes(node) + else: + try: + children = node.children + except AttributeError: + pass + else: + if node.type in _EXECUTE_NODES and not last_added: + result.append(node) + + for child in children: + result += get_executable_nodes(child, last_added) + + return result + + +def get_sync_comp_fors(comp_for): + yield comp_for + last = comp_for.children[-1] + while True: + if last.type == 'comp_for': + yield last.children[1] # Ignore the async. + elif last.type == 'sync_comp_for': + yield last + elif not last.type == 'comp_if': + break + last = last.children[-1] + + +def for_stmt_defines_one_name(for_stmt): + """ + Returns True if only one name is returned: ``for x in y``. + Returns False if the for loop is more complicated: ``for x, z in y``. + + :returns: bool + """ + return for_stmt.children[1].type == 'name' + + +def get_flow_branch_keyword(flow_node, node): + start_pos = node.start_pos + if not (flow_node.start_pos < start_pos <= flow_node.end_pos): + raise ValueError('The node is not part of the flow.') + + keyword = None + for i, child in enumerate(flow_node.children): + if start_pos < child.start_pos: + return keyword + first_leaf = child.get_first_leaf() + if first_leaf in _FLOW_KEYWORDS: + keyword = first_leaf + return 0 + + +def get_statement_of_position(node, pos): + for c in node.children: + if c.start_pos <= pos <= c.end_pos: + if c.type not in ('decorated', 'simple_stmt', 'suite', + 'async_stmt', 'async_funcdef') \ + and not isinstance(c, (tree.Flow, tree.ClassOrFunc)): + return c + else: + try: + return get_statement_of_position(c, pos) + except AttributeError: + pass # Must be a non-scope + return None + + +def clean_scope_docstring(scope_node): + """ Returns a cleaned version of the docstring token. """ + node = scope_node.get_doc_node() + if node is not None: + # TODO We have to check next leaves until there are no new + # leaves anymore that might be part of the docstring. A + # docstring can also look like this: ``'foo' 'bar' + # Returns a literal cleaned version of the ``Token``. + cleaned = cleandoc(safe_literal_eval(node.value)) + # Since we want the docstr output to be always unicode, just + # force it. + return force_unicode(cleaned) + return '' + + +def safe_literal_eval(value): + first_two = value[:2].lower() + if first_two[0] == 'f' or first_two in ('fr', 'rf'): + # literal_eval is not able to resovle f literals. We have to do that + # manually, but that's right now not implemented. + return '' + + try: + return literal_eval(value) + except SyntaxError: + # It's possible to create syntax errors with literals like rb'' in + # Python 2. This should not be possible and in that case just return an + # empty string. + # Before Python 3.3 there was a more strict definition in which order + # you could define literals. + return '' + + +def get_call_signature(funcdef, width=72, call_string=None, + omit_first_param=False, omit_return_annotation=False): + """ + Generate call signature of this function. + + :param width: Fold lines if a line is longer than this value. + :type width: int + :arg func_name: Override function name when given. + :type func_name: str + + :rtype: str + """ + # Lambdas have no name. + if call_string is None: + if funcdef.type == 'lambdef': + call_string = '' + else: + call_string = funcdef.name.value + params = funcdef.get_params() + if omit_first_param: + params = params[1:] + p = '(' + ''.join(param.get_code() for param in params).strip() + ')' + # TODO this is pretty bad, we should probably just normalize. + p = re.sub(r'\s+', ' ', p) + if funcdef.annotation and not omit_return_annotation: + rtype = " ->" + funcdef.annotation.get_code() + else: + rtype = "" + code = call_string + p + rtype + + return '\n'.join(textwrap.wrap(code, width)) + + +def move(node, line_offset): + """ + Move the `Node` start_pos. + """ + try: + children = node.children + except AttributeError: + node.line += line_offset + else: + for c in children: + move(c, line_offset) + + +def get_following_comment_same_line(node): + """ + returns (as string) any comment that appears on the same line, + after the node, including the # + """ + try: + if node.type == 'for_stmt': + whitespace = node.children[5].get_first_leaf().prefix + elif node.type == 'with_stmt': + whitespace = node.children[3].get_first_leaf().prefix + elif node.type == 'funcdef': + # actually on the next line + whitespace = node.children[4].get_first_leaf().get_next_leaf().prefix + else: + whitespace = node.get_last_leaf().get_next_leaf().prefix + except AttributeError: + return None + except ValueError: + # TODO in some particular cases, the tree doesn't seem to be linked + # correctly + return None + if "#" not in whitespace: + return None + comment = whitespace[whitespace.index("#"):] + if "\r" in comment: + comment = comment[:comment.index("\r")] + if "\n" in comment: + comment = comment[:comment.index("\n")] + return comment + + +def is_scope(node): + t = node.type + if t == 'comp_for': + # Starting with Python 3.8, async is outside of the statement. + return node.children[1].type != 'sync_comp_for' + + return t in ('file_input', 'classdef', 'funcdef', 'lambdef', 'sync_comp_for') + + +def _get_parent_scope_cache(func): + cache = WeakKeyDictionary() + + def wrapper(used_names, node, include_flows=False): + try: + for_module = cache[used_names] + except KeyError: + for_module = cache[used_names] = {} + + try: + return for_module[node] + except KeyError: + result = for_module[node] = func(node, include_flows) + return result + return wrapper + + +def get_parent_scope(node, include_flows=False): + """ + Returns the underlying scope. + """ + scope = node.parent + if scope is None: + return None # It's a module already. + + while True: + if is_scope(scope) or include_flows and isinstance(scope, tree.Flow): + if scope.type in ('classdef', 'funcdef', 'lambdef'): + index = scope.children.index(':') + if scope.children[index].start_pos >= node.start_pos: + if node.parent.type == 'param' and node.parent.name == node: + pass + elif node.parent.type == 'tfpdef' and node.parent.children[0] == node: + pass + else: + scope = scope.parent + continue + return scope + scope = scope.parent + return scope + + +get_cached_parent_scope = _get_parent_scope_cache(get_parent_scope) + + +def get_cached_code_lines(grammar, path): + """ + Basically access the cached code lines in parso. This is not the nicest way + to do this, but we avoid splitting all the lines again. + """ + return parser_cache[grammar._hashed][path].lines + + +def cut_value_at_position(leaf, position): + """ + Cuts of the value of the leaf at position + """ + lines = split_lines(leaf.value, keepends=True)[:position[0] - leaf.line + 1] + column = position[1] + if leaf.line == position[0]: + column -= leaf.column + lines[-1] = lines[-1][:column] + return ''.join(lines) + + +def get_string_quote(leaf): + return re.match('\w*("""|\'{3}|"|\')', leaf.value).group(1) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/__init__.py new file mode 100644 index 0000000..df106cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/__init__.py @@ -0,0 +1,47 @@ +from functools import wraps + + +class _PluginManager(object): + def __init__(self): + self._registered_plugins = [] + self._cached_base_callbacks = {} + self._built_functions = {} + + def register(self, *plugins): + """ + Makes it possible to register your plugin. + """ + self._registered_plugins.extend(plugins) + self._build_functions() + + def decorate(self): + def decorator(callback): + @wraps(callback) + def wrapper(*args, **kwargs): + return built_functions[name](*args, **kwargs) + + name = callback.__name__ + + assert name not in self._built_functions + built_functions = self._built_functions + built_functions[name] = callback + self._cached_base_callbacks[name] = callback + + return wrapper + + return decorator + + def _build_functions(self): + for name, callback in self._cached_base_callbacks.items(): + for plugin in reversed(self._registered_plugins): + # Need to reverse so the first plugin is run first. + try: + func = getattr(plugin, name) + except AttributeError: + pass + else: + callback = func(callback) + self._built_functions[name] = callback + + +plugin_manager = _PluginManager() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/flask.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/flask.py new file mode 100644 index 0000000..7cbb106 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/flask.py @@ -0,0 +1,21 @@ +def import_module(callback): + """ + Handle "magic" Flask extension imports: + ``flask.ext.foo`` is really ``flask_foo`` or ``flaskext.foo``. + """ + def wrapper(evaluator, import_names, module_context, *args, **kwargs): + if len(import_names) == 3 and import_names[:2] == ('flask', 'ext'): + # New style. + ipath = (u'flask_' + import_names[2]), + context_set = callback(evaluator, ipath, None, *args, **kwargs) + if context_set: + return context_set + context_set = callback(evaluator, (u'flaskext',), None, *args, **kwargs) + return callback( + evaluator, + (u'flaskext', import_names[2]), + next(iter(context_set)), + *args, **kwargs + ) + return callback(evaluator, import_names, module_context, *args, **kwargs) + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/registry.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/registry.py new file mode 100644 index 0000000..2391324 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/registry.py @@ -0,0 +1,10 @@ +""" +This is not a plugin, this is just the place were plugins are registered. +""" + +from jedi.plugins import stdlib +from jedi.plugins import flask +from jedi.plugins import plugin_manager + + +plugin_manager.register(stdlib, flask) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/stdlib.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/stdlib.py new file mode 100644 index 0000000..2f2608f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/plugins/stdlib.py @@ -0,0 +1,835 @@ +""" +Implementations of standard library functions, because it's not possible to +understand them with Jedi. + +To add a new implementation, create a function and add it to the +``_implemented`` dict at the bottom of this module. + +Note that this module exists only to implement very specific functionality in +the standard library. The usual way to understand the standard library is the +compiled module that returns the types for C-builtins. +""" +import parso +import os + +from jedi._compatibility import force_unicode, Parameter +from jedi import debug +from jedi.evaluate.utils import safe_property +from jedi.evaluate.helpers import get_str_or_none +from jedi.evaluate.arguments import ValuesArguments, \ + repack_with_argument_clinic, AbstractArguments, TreeArgumentsWrapper +from jedi.evaluate import analysis +from jedi.evaluate import compiled +from jedi.evaluate.context.instance import BoundMethod, InstanceArguments +from jedi.evaluate.base_context import ContextualizedNode, \ + NO_CONTEXTS, ContextSet, ContextWrapper, LazyContextWrapper +from jedi.evaluate.context import ClassContext, ModuleContext, \ + FunctionExecutionContext +from jedi.evaluate.context.klass import ClassMixin +from jedi.evaluate.context.function import FunctionMixin +from jedi.evaluate.context import iterable +from jedi.evaluate.lazy_context import LazyTreeContext, LazyKnownContext, \ + LazyKnownContexts +from jedi.evaluate.names import ContextName, BaseTreeParamName +from jedi.evaluate.syntax_tree import is_string +from jedi.evaluate.filters import AttributeOverwrite, publish_method, \ + ParserTreeFilter, DictFilter +from jedi.evaluate.signature import AbstractSignature, SignatureWrapper + + +# Copied from Python 3.6's stdlib. +_NAMEDTUPLE_CLASS_TEMPLATE = """\ +_property = property +_tuple = tuple +from operator import itemgetter as _itemgetter +from collections import OrderedDict + +class {typename}(tuple): + '{typename}({arg_list})' + + __slots__ = () + + _fields = {field_names!r} + + def __new__(_cls, {arg_list}): + 'Create new instance of {typename}({arg_list})' + return _tuple.__new__(_cls, ({arg_list})) + + @classmethod + def _make(cls, iterable, new=tuple.__new__, len=len): + 'Make a new {typename} object from a sequence or iterable' + result = new(cls, iterable) + if len(result) != {num_fields:d}: + raise TypeError('Expected {num_fields:d} arguments, got %d' % len(result)) + return result + + def _replace(_self, **kwds): + 'Return a new {typename} object replacing specified fields with new values' + result = _self._make(map(kwds.pop, {field_names!r}, _self)) + if kwds: + raise ValueError('Got unexpected field names: %r' % list(kwds)) + return result + + def __repr__(self): + 'Return a nicely formatted representation string' + return self.__class__.__name__ + '({repr_fmt})' % self + + def _asdict(self): + 'Return a new OrderedDict which maps field names to their values.' + return OrderedDict(zip(self._fields, self)) + + def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' + return tuple(self) + + # These methods were added by Jedi. + # __new__ doesn't really work with Jedi. So adding this to nametuples seems + # like the easiest way. + def __init__(_cls, {arg_list}): + 'A helper function for namedtuple.' + self.__iterable = ({arg_list}) + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + +{field_defs} +""" + +_NAMEDTUPLE_FIELD_TEMPLATE = '''\ + {name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}') +''' + + +def execute(callback): + def wrapper(context, arguments): + def call(): + return callback(context, arguments=arguments) + + try: + obj_name = context.name.string_name + except AttributeError: + pass + else: + if context.parent_context == context.evaluator.builtins_module: + module_name = 'builtins' + elif context.parent_context is not None and context.parent_context.is_module(): + module_name = context.parent_context.py__name__() + else: + return call() + + if isinstance(context, BoundMethod): + if module_name == 'builtins': + if context.py__name__() == '__get__': + if context.class_context.py__name__() == 'property': + return builtins_property( + context, + arguments=arguments, + callback=call, + ) + elif context.py__name__() in ('deleter', 'getter', 'setter'): + if context.class_context.py__name__() == 'property': + return ContextSet([context.instance]) + + return call() + + # for now we just support builtin functions. + try: + func = _implemented[module_name][obj_name] + except KeyError: + pass + else: + return func(context, arguments=arguments, callback=call) + return call() + + return wrapper + + +def _follow_param(evaluator, arguments, index): + try: + key, lazy_context = list(arguments.unpack())[index] + except IndexError: + return NO_CONTEXTS + else: + return lazy_context.infer() + + +def argument_clinic(string, want_obj=False, want_context=False, + want_arguments=False, want_evaluator=False, + want_callback=False): + """ + Works like Argument Clinic (PEP 436), to validate function params. + """ + + def f(func): + @repack_with_argument_clinic(string, keep_arguments_param=True, + keep_callback_param=True) + def wrapper(obj, *args, **kwargs): + arguments = kwargs.pop('arguments') + callback = kwargs.pop('callback') + assert not kwargs # Python 2... + debug.dbg('builtin start %s' % obj, color='MAGENTA') + result = NO_CONTEXTS + if want_context: + kwargs['context'] = arguments.context + if want_obj: + kwargs['obj'] = obj + if want_evaluator: + kwargs['evaluator'] = obj.evaluator + if want_arguments: + kwargs['arguments'] = arguments + if want_callback: + kwargs['callback'] = callback + result = func(*args, **kwargs) + debug.dbg('builtin end: %s', result, color='MAGENTA') + return result + + return wrapper + return f + + +@argument_clinic('obj, type, /', want_obj=True, want_arguments=True) +def builtins_property(objects, types, obj, arguments): + property_args = obj.instance.var_args.unpack() + key, lazy_context = next(property_args, (None, None)) + if key is not None or lazy_context is None: + debug.warning('property expected a first param, not %s', arguments) + return NO_CONTEXTS + + return lazy_context.infer().py__call__(arguments=ValuesArguments([objects])) + + +@argument_clinic('iterator[, default], /', want_evaluator=True) +def builtins_next(iterators, defaults, evaluator): + if evaluator.environment.version_info.major == 2: + name = 'next' + else: + name = '__next__' + + # TODO theoretically we have to check here if something is an iterator. + # That is probably done by checking if it's not a class. + return defaults | iterators.py__getattribute__(name).execute_evaluated() + + +@argument_clinic('iterator[, default], /') +def builtins_iter(iterators_or_callables, defaults): + # TODO implement this if it's a callable. + return iterators_or_callables.py__getattribute__('__iter__').execute_evaluated() + + +@argument_clinic('object, name[, default], /') +def builtins_getattr(objects, names, defaults=None): + # follow the first param + for obj in objects: + for name in names: + string = get_str_or_none(name) + if string is None: + debug.warning('getattr called without str') + continue + else: + return obj.py__getattribute__(force_unicode(string)) + return NO_CONTEXTS + + +@argument_clinic('object[, bases, dict], /') +def builtins_type(objects, bases, dicts): + if bases or dicts: + # It's a type creation... maybe someday... + return NO_CONTEXTS + else: + return objects.py__class__() + + +class SuperInstance(LazyContextWrapper): + """To be used like the object ``super`` returns.""" + def __init__(self, evaluator, instance): + self.evaluator = evaluator + self._instance = instance # Corresponds to super().__self__ + + def _get_bases(self): + return self._instance.py__class__().py__bases__() + + def _get_wrapped_context(self): + objs = self._get_bases()[0].infer().execute_evaluated() + if not objs: + # This is just a fallback and will only be used, if it's not + # possible to find a class + return self._instance + return next(iter(objs)) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + for b in self._get_bases(): + for obj in b.infer().execute_evaluated(): + for f in obj.get_filters(): + yield f + + +@argument_clinic('[type[, obj]], /', want_context=True) +def builtins_super(types, objects, context): + if isinstance(context, FunctionExecutionContext): + if isinstance(context.var_args, InstanceArguments): + instance = context.var_args.instance + # TODO if a class is given it doesn't have to be the direct super + # class, it can be an anecestor from long ago. + return ContextSet({SuperInstance(instance.evaluator, instance)}) + + return NO_CONTEXTS + + +class ReversedObject(AttributeOverwrite): + def __init__(self, reversed_obj, iter_list): + super(ReversedObject, self).__init__(reversed_obj) + self._iter_list = iter_list + + @publish_method('__iter__') + def py__iter__(self, contextualized_node=None): + return self._iter_list + + @publish_method('next', python_version_match=2) + @publish_method('__next__', python_version_match=3) + def py__next__(self): + return ContextSet.from_sets( + lazy_context.infer() for lazy_context in self._iter_list + ) + + +@argument_clinic('sequence, /', want_obj=True, want_arguments=True) +def builtins_reversed(sequences, obj, arguments): + # While we could do without this variable (just by using sequences), we + # want static analysis to work well. Therefore we need to generated the + # values again. + key, lazy_context = next(arguments.unpack()) + cn = None + if isinstance(lazy_context, LazyTreeContext): + # TODO access private + cn = ContextualizedNode(lazy_context.context, lazy_context.data) + ordered = list(sequences.iterate(cn)) + + # Repack iterator values and then run it the normal way. This is + # necessary, because `reversed` is a function and autocompletion + # would fail in certain cases like `reversed(x).__iter__` if we + # just returned the result directly. + seq, = obj.evaluator.typing_module.py__getattribute__('Iterator').execute_evaluated() + return ContextSet([ReversedObject(seq, list(reversed(ordered)))]) + + +@argument_clinic('obj, type, /', want_arguments=True, want_evaluator=True) +def builtins_isinstance(objects, types, arguments, evaluator): + bool_results = set() + for o in objects: + cls = o.py__class__() + try: + cls.py__bases__ + except AttributeError: + # This is temporary. Everything should have a class attribute in + # Python?! Maybe we'll leave it here, because some numpy objects or + # whatever might not. + bool_results = set([True, False]) + break + + mro = list(cls.py__mro__()) + + for cls_or_tup in types: + if cls_or_tup.is_class(): + bool_results.add(cls_or_tup in mro) + elif cls_or_tup.name.string_name == 'tuple' \ + and cls_or_tup.get_root_context() == evaluator.builtins_module: + # Check for tuples. + classes = ContextSet.from_sets( + lazy_context.infer() + for lazy_context in cls_or_tup.iterate() + ) + bool_results.add(any(cls in mro for cls in classes)) + else: + _, lazy_context = list(arguments.unpack())[1] + if isinstance(lazy_context, LazyTreeContext): + node = lazy_context.data + message = 'TypeError: isinstance() arg 2 must be a ' \ + 'class, type, or tuple of classes and types, ' \ + 'not %s.' % cls_or_tup + analysis.add(lazy_context.context, 'type-error-isinstance', node, message) + + return ContextSet( + compiled.builtin_from_name(evaluator, force_unicode(str(b))) + for b in bool_results + ) + + +class StaticMethodObject(AttributeOverwrite, ContextWrapper): + def get_object(self): + return self._wrapped_context + + def py__get__(self, instance, klass): + return ContextSet([self._wrapped_context]) + + +@argument_clinic('sequence, /') +def builtins_staticmethod(functions): + return ContextSet(StaticMethodObject(f) for f in functions) + + +class ClassMethodObject(AttributeOverwrite, ContextWrapper): + def __init__(self, class_method_obj, function): + super(ClassMethodObject, self).__init__(class_method_obj) + self._function = function + + def get_object(self): + return self._wrapped_context + + def py__get__(self, obj, class_context): + return ContextSet([ + ClassMethodGet(__get__, class_context, self._function) + for __get__ in self._wrapped_context.py__getattribute__('__get__') + ]) + + +class ClassMethodGet(AttributeOverwrite, ContextWrapper): + def __init__(self, get_method, klass, function): + super(ClassMethodGet, self).__init__(get_method) + self._class = klass + self._function = function + + def get_signatures(self): + return self._function.get_signatures() + + def get_object(self): + return self._wrapped_context + + def py__call__(self, arguments): + return self._function.execute(ClassMethodArguments(self._class, arguments)) + + +class ClassMethodArguments(TreeArgumentsWrapper): + def __init__(self, klass, arguments): + super(ClassMethodArguments, self).__init__(arguments) + self._class = klass + + def unpack(self, func=None): + yield None, LazyKnownContext(self._class) + for values in self._wrapped_arguments.unpack(func): + yield values + + +@argument_clinic('sequence, /', want_obj=True, want_arguments=True) +def builtins_classmethod(functions, obj, arguments): + return ContextSet( + ClassMethodObject(class_method_object, function) + for class_method_object in obj.py__call__(arguments=arguments) + for function in functions + ) + + +def collections_namedtuple(obj, arguments, callback): + """ + Implementation of the namedtuple function. + + This has to be done by processing the namedtuple class template and + evaluating the result. + + """ + evaluator = obj.evaluator + + # Process arguments + name = u'jedi_unknown_namedtuple' + for c in _follow_param(evaluator, arguments, 0): + x = get_str_or_none(c) + if x is not None: + name = force_unicode(x) + break + + # TODO here we only use one of the types, we should use all. + param_contexts = _follow_param(evaluator, arguments, 1) + if not param_contexts: + return NO_CONTEXTS + _fields = list(param_contexts)[0] + string = get_str_or_none(_fields) + if string is not None: + fields = force_unicode(string).replace(',', ' ').split() + elif isinstance(_fields, iterable.Sequence): + fields = [ + force_unicode(get_str_or_none(v)) + for lazy_context in _fields.py__iter__() + for v in lazy_context.infer() + ] + fields = [f for f in fields if f is not None] + else: + return NO_CONTEXTS + + # Build source code + code = _NAMEDTUPLE_CLASS_TEMPLATE.format( + typename=name, + field_names=tuple(fields), + num_fields=len(fields), + arg_list=repr(tuple(fields)).replace("u'", "").replace("'", "")[1:-1], + repr_fmt='', + field_defs='\n'.join(_NAMEDTUPLE_FIELD_TEMPLATE.format(index=index, name=name) + for index, name in enumerate(fields)) + ) + + # Parse source code + module = evaluator.grammar.parse(code) + generated_class = next(module.iter_classdefs()) + parent_context = ModuleContext( + evaluator, module, + file_io=None, + string_names=None, + code_lines=parso.split_lines(code, keepends=True), + ) + + return ContextSet([ClassContext(evaluator, parent_context, generated_class)]) + + +class PartialObject(object): + def __init__(self, actual_context, arguments): + self._actual_context = actual_context + self._arguments = arguments + + def __getattr__(self, name): + return getattr(self._actual_context, name) + + def _get_function(self, unpacked_arguments): + key, lazy_context = next(unpacked_arguments, (None, None)) + if key is not None or lazy_context is None: + debug.warning("Partial should have a proper function %s", self._arguments) + return None + return lazy_context.infer() + + def get_signatures(self): + unpacked_arguments = self._arguments.unpack() + func = self._get_function(unpacked_arguments) + if func is None: + return [] + + arg_count = 0 + keys = set() + for key, _ in unpacked_arguments: + if key is None: + arg_count += 1 + else: + keys.add(key) + return [PartialSignature(s, arg_count, keys) for s in func.get_signatures()] + + def py__call__(self, arguments): + func = self._get_function(self._arguments.unpack()) + if func is None: + return NO_CONTEXTS + + return func.execute( + MergedPartialArguments(self._arguments, arguments) + ) + + +class PartialSignature(SignatureWrapper): + def __init__(self, wrapped_signature, skipped_arg_count, skipped_arg_set): + super(PartialSignature, self).__init__(wrapped_signature) + self._skipped_arg_count = skipped_arg_count + self._skipped_arg_set = skipped_arg_set + + def get_param_names(self, resolve_stars=False): + names = self._wrapped_signature.get_param_names()[self._skipped_arg_count:] + return [n for n in names if n.string_name not in self._skipped_arg_set] + + +class MergedPartialArguments(AbstractArguments): + def __init__(self, partial_arguments, call_arguments): + self._partial_arguments = partial_arguments + self._call_arguments = call_arguments + + def unpack(self, funcdef=None): + unpacked = self._partial_arguments.unpack(funcdef) + # Ignore this one, it's the function. It was checked before that it's + # there. + next(unpacked) + for key_lazy_context in unpacked: + yield key_lazy_context + for key_lazy_context in self._call_arguments.unpack(funcdef): + yield key_lazy_context + + +def functools_partial(obj, arguments, callback): + return ContextSet( + PartialObject(instance, arguments) + for instance in obj.py__call__(arguments) + ) + + +@argument_clinic('first, /') +def _return_first_param(firsts): + return firsts + + +@argument_clinic('seq') +def _random_choice(sequences): + return ContextSet.from_sets( + lazy_context.infer() + for sequence in sequences + for lazy_context in sequence.py__iter__() + ) + + +def _dataclass(obj, arguments, callback): + for c in _follow_param(obj.evaluator, arguments, 0): + if c.is_class(): + return ContextSet([DataclassWrapper(c)]) + else: + return ContextSet([obj]) + return NO_CONTEXTS + + +class DataclassWrapper(ContextWrapper, ClassMixin): + def get_signatures(self): + param_names = [] + for cls in reversed(list(self.py__mro__())): + if isinstance(cls, DataclassWrapper): + filter_ = cls.get_global_filter() + # .values ordering is not guaranteed, at least not in + # Python < 3.6, when dicts where not ordered, which is an + # implementation detail anyway. + for name in sorted(filter_.values(), key=lambda name: name.start_pos): + d = name.tree_name.get_definition() + annassign = d.children[1] + if d.type == 'expr_stmt' and annassign.type == 'annassign': + if len(annassign.children) < 4: + default = None + else: + default = annassign.children[3] + param_names.append(DataclassParamName( + parent_context=cls.parent_context, + tree_name=name.tree_name, + annotation_node=annassign.children[1], + default_node=default, + )) + return [DataclassSignature(cls, param_names)] + + +class DataclassSignature(AbstractSignature): + def __init__(self, context, param_names): + super(DataclassSignature, self).__init__(context) + self._param_names = param_names + + def get_param_names(self, resolve_stars=False): + return self._param_names + + +class DataclassParamName(BaseTreeParamName): + def __init__(self, parent_context, tree_name, annotation_node, default_node): + super(DataclassParamName, self).__init__(parent_context, tree_name) + self.annotation_node = annotation_node + self.default_node = default_node + + def get_kind(self): + return Parameter.POSITIONAL_OR_KEYWORD + + def infer(self): + if self.annotation_node is None: + return NO_CONTEXTS + else: + return self.parent_context.eval_node(self.annotation_node) + + +class ItemGetterCallable(ContextWrapper): + def __init__(self, instance, args_context_set): + super(ItemGetterCallable, self).__init__(instance) + self._args_context_set = args_context_set + + @repack_with_argument_clinic('item, /') + def py__call__(self, item_context_set): + context_set = NO_CONTEXTS + for args_context in self._args_context_set: + lazy_contexts = list(args_context.py__iter__()) + if len(lazy_contexts) == 1: + # TODO we need to add the contextualized context. + context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None) + else: + context_set |= ContextSet([iterable.FakeSequence( + self._wrapped_context.evaluator, + 'list', + [ + LazyKnownContexts(item_context_set.get_item(lazy_context.infer(), None)) + for lazy_context in lazy_contexts + ], + )]) + return context_set + + +@argument_clinic('func, /') +def _functools_wraps(funcs): + return ContextSet(WrapsCallable(func) for func in funcs) + + +class WrapsCallable(ContextWrapper): + # XXX this is not the correct wrapped context, it should be a weird + # partials object, but it doesn't matter, because it's always used as a + # decorator anyway. + @repack_with_argument_clinic('func, /') + def py__call__(self, funcs): + return ContextSet({Wrapped(func, self._wrapped_context) for func in funcs}) + + +class Wrapped(ContextWrapper, FunctionMixin): + def __init__(self, func, original_function): + super(Wrapped, self).__init__(func) + self._original_function = original_function + + @property + def name(self): + return self._original_function.name + + def get_signature_functions(self): + return [self] + + +@argument_clinic('*args, /', want_obj=True, want_arguments=True) +def _operator_itemgetter(args_context_set, obj, arguments): + return ContextSet([ + ItemGetterCallable(instance, args_context_set) + for instance in obj.py__call__(arguments) + ]) + + +def _create_string_input_function(func): + @argument_clinic('string, /', want_obj=True, want_arguments=True) + def wrapper(strings, obj, arguments): + def iterate(): + for context in strings: + s = get_str_or_none(context) + if s is not None: + s = func(s) + yield compiled.create_simple_object(context.evaluator, s) + contexts = ContextSet(iterate()) + if contexts: + return contexts + return obj.py__call__(arguments) + return wrapper + + +@argument_clinic('*args, /', want_callback=True) +def _os_path_join(args_set, callback): + if len(args_set) == 1: + string = u'' + sequence, = args_set + is_first = True + for lazy_context in sequence.py__iter__(): + string_contexts = lazy_context.infer() + if len(string_contexts) != 1: + break + s = get_str_or_none(next(iter(string_contexts))) + if s is None: + break + if not is_first: + string += os.path.sep + string += force_unicode(s) + is_first = False + else: + return ContextSet([compiled.create_simple_object(sequence.evaluator, string)]) + return callback() + + +_implemented = { + 'builtins': { + 'getattr': builtins_getattr, + 'type': builtins_type, + 'super': builtins_super, + 'reversed': builtins_reversed, + 'isinstance': builtins_isinstance, + 'next': builtins_next, + 'iter': builtins_iter, + 'staticmethod': builtins_staticmethod, + 'classmethod': builtins_classmethod, + }, + 'copy': { + 'copy': _return_first_param, + 'deepcopy': _return_first_param, + }, + 'json': { + 'load': lambda obj, arguments, callback: NO_CONTEXTS, + 'loads': lambda obj, arguments, callback: NO_CONTEXTS, + }, + 'collections': { + 'namedtuple': collections_namedtuple, + }, + 'functools': { + 'partial': functools_partial, + 'wraps': _functools_wraps, + }, + '_weakref': { + 'proxy': _return_first_param, + }, + 'random': { + 'choice': _random_choice, + }, + 'operator': { + 'itemgetter': _operator_itemgetter, + }, + 'abc': { + # Not sure if this is necessary, but it's used a lot in typeshed and + # it's for now easier to just pass the function. + 'abstractmethod': _return_first_param, + }, + 'typing': { + # The _alias function just leads to some annoying type inference. + # Therefore, just make it return nothing, which leads to the stubs + # being used instead. This only matters for 3.7+. + '_alias': lambda obj, arguments, callback: NO_CONTEXTS, + }, + 'dataclasses': { + # For now this works at least better than Jedi trying to understand it. + 'dataclass': _dataclass + }, + 'os.path': { + 'dirname': _create_string_input_function(os.path.dirname), + 'abspath': _create_string_input_function(os.path.abspath), + 'relpath': _create_string_input_function(os.path.relpath), + 'join': _os_path_join, + } +} + + +def get_metaclass_filters(func): + def wrapper(cls, metaclasses): + for metaclass in metaclasses: + if metaclass.py__name__() == 'EnumMeta' \ + and metaclass.get_root_context().py__name__() == 'enum': + filter_ = ParserTreeFilter(cls.evaluator, context=cls) + return [DictFilter({ + name.string_name: EnumInstance(cls, name).name for name in filter_.values() + })] + return func(cls, metaclasses) + return wrapper + + +class EnumInstance(LazyContextWrapper): + def __init__(self, cls, name): + self.evaluator = cls.evaluator + self._cls = cls # Corresponds to super().__self__ + self._name = name + self.tree_node = self._name.tree_name + + @safe_property + def name(self): + return ContextName(self, self._name.tree_name) + + def _get_wrapped_context(self): + obj, = self._cls.execute_evaluated() + return obj + + def get_filters(self, search_global=False, position=None, origin_scope=None): + yield DictFilter(dict( + name=compiled.create_simple_object(self.evaluator, self._name.string_name).name, + value=self._name, + )) + for f in self._get_wrapped_context().get_filters(): + yield f + + +def tree_name_to_contexts(func): + def wrapper(evaluator, context, tree_name): + if tree_name.value == 'sep' and context.is_module() and context.py__name__() == 'os.path': + return ContextSet({ + compiled.create_simple_object(evaluator, os.path.sep), + }) + return func(evaluator, context, tree_name) + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/refactoring.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/refactoring.py new file mode 100644 index 0000000..6c1d74d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/refactoring.py @@ -0,0 +1,203 @@ +""" +THIS is not in active development, please check +https://github.com/davidhalter/jedi/issues/667 first before editing. + +Introduce some basic refactoring functions to |jedi|. This module is still in a +very early development stage and needs much testing and improvement. + +.. warning:: I won't do too much here, but if anyone wants to step in, please + do. Refactoring is none of my priorities + +It uses the |jedi| `API `_ and supports currently the +following functions (sometimes bug-prone): + +- rename +- extract variable +- inline variable +""" +import difflib + +from parso import python_bytes_to_unicode, split_lines +from jedi.evaluate import helpers + + +class Refactoring(object): + def __init__(self, change_dct): + """ + :param change_dct: dict(old_path=(new_path, old_lines, new_lines)) + """ + self.change_dct = change_dct + + def old_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[old_path] = '\n'.join(old_l) + return dct + + def new_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def diff(self): + texts = [] + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + if old_path: + udiff = difflib.unified_diff(old_l, new_l) + else: + udiff = difflib.unified_diff(old_l, new_l, old_path, new_path) + texts.append('\n'.join(udiff)) + return '\n'.join(texts) + + +def rename(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param new_name: The new name of the script. + :param script: The source Script object. + :return: list of changed lines/changed files + """ + return Refactoring(_rename(script.usages(), new_name)) + + +def _rename(names, replace_str): + """ For both rename and inline. """ + order = sorted(names, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + + def process(path, old_lines, new_lines): + if new_lines is not None: # goto next file, save last + dct[path] = path, old_lines, new_lines + + dct = {} + current_path = object() + new_lines = old_lines = None + for name in order: + if name.in_builtin_module(): + continue + if current_path != name.module_path: + current_path = name.module_path + + process(current_path, old_lines, new_lines) + if current_path is not None: + # None means take the source that is a normal param. + with open(current_path) as f: + source = f.read() + + new_lines = split_lines(python_bytes_to_unicode(source)) + old_lines = new_lines[:] + + nr, indent = name.line, name.column + line = new_lines[nr - 1] + new_lines[nr - 1] = line[:indent] + replace_str + \ + line[indent + len(name.name):] + process(current_path, old_lines, new_lines) + return dct + + +def extract(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + new_lines = split_lines(python_bytes_to_unicode(script.source)) + old_lines = new_lines[:] + + user_stmt = script._parser.user_stmt() + + # TODO care for multi-line extracts + dct = {} + if user_stmt: + pos = script._pos + line_index = pos[0] - 1 + # Be careful here. 'array_for_pos' does not exist in 'helpers'. + arr, index = helpers.array_for_pos(user_stmt, pos) + if arr is not None: + start_pos = arr[index].start_pos + end_pos = arr[index].end_pos + + # take full line if the start line is different from end line + e = end_pos[1] if end_pos[0] == start_pos[0] else None + start_line = new_lines[start_pos[0] - 1] + text = start_line[start_pos[1]:e] + for l in range(start_pos[0], end_pos[0] - 1): + text += '\n' + str(l) + if e is None: + end_line = new_lines[end_pos[0] - 1] + text += '\n' + end_line[:end_pos[1]] + + # remove code from new lines + t = text.lstrip() + del_start = start_pos[1] + len(text) - len(t) + + text = t.rstrip() + del_end = len(t) - len(text) + if e is None: + new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:] + e = len(start_line) + else: + e = e - del_end + start_line = start_line[:del_start] + new_name + start_line[e:] + new_lines[start_pos[0] - 1] = start_line + new_lines[start_pos[0]:end_pos[0] - 1] = [] + + # add parentheses in multi-line case + open_brackets = ['(', '[', '{'] + close_brackets = [')', ']', '}'] + if '\n' in text and not (text[0] in open_brackets and text[-1] == + close_brackets[open_brackets.index(text[0])]): + text = '(%s)' % text + + # add new line before statement + indent = user_stmt.start_pos[1] + new = "%s%s = %s" % (' ' * indent, new_name, text) + new_lines.insert(line_index, new) + dct[script.path] = script.path, old_lines, new_lines + return Refactoring(dct) + + +def inline(script): + """ + :type script: api.Script + """ + new_lines = split_lines(python_bytes_to_unicode(script.source)) + + dct = {} + + definitions = script.goto_assignments() + assert len(definitions) == 1 + stmt = definitions[0]._definition + usages = script.usages() + inlines = [r for r in usages + if not stmt.start_pos <= (r.line, r.column) <= stmt.end_pos] + inlines = sorted(inlines, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + expression_list = stmt.expression_list() + # don't allow multi-line refactorings for now. + assert stmt.start_pos[0] == stmt.end_pos[0] + index = stmt.start_pos[0] - 1 + + line = new_lines[index] + replace_str = line[expression_list[0].start_pos[1]:stmt.end_pos[1] + 1] + replace_str = replace_str.strip() + # tuples need parentheses + if expression_list and isinstance(expression_list[0], pr.Array): + arr = expression_list[0] + if replace_str[0] not in ['(', '[', '{'] and len(arr) > 1: + replace_str = '(%s)' % replace_str + + # if it's the only assignment, remove the statement + if len(stmt.get_defined_names()) == 1: + line = line[:stmt.start_pos[1]] + line[stmt.end_pos[1]:] + + dct = _rename(inlines, replace_str) + # remove the empty line + new_lines = dct[script.path][2] + if line.strip(): + new_lines[index] = line + else: + new_lines.pop(index) + + return Refactoring(dct) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/settings.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/settings.py new file mode 100644 index 0000000..7b7de1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/settings.py @@ -0,0 +1,163 @@ +""" +This module contains variables with global |jedi| settings. To change the +behavior of |jedi|, change the variables defined in :mod:`jedi.settings`. + +Plugins should expose an interface so that the user can adjust the +configuration. + + +Example usage:: + + from jedi import settings + settings.case_insensitive_completion = True + + +Completion output +~~~~~~~~~~~~~~~~~ + +.. autodata:: case_insensitive_completion +.. autodata:: add_bracket_after_function +.. autodata:: no_completion_duplicates + + +Filesystem cache +~~~~~~~~~~~~~~~~ + +.. autodata:: cache_directory +.. autodata:: use_filesystem_cache + + +Parser +~~~~~~ + +.. autodata:: fast_parser + + +Dynamic stuff +~~~~~~~~~~~~~ + +.. autodata:: dynamic_array_additions +.. autodata:: dynamic_params +.. autodata:: dynamic_params_for_other_modules +.. autodata:: additional_dynamic_modules +.. autodata:: auto_import_modules + + +Caching +~~~~~~~ + +.. autodata:: call_signatures_validity + + +""" +import os +import platform + +# ---------------- +# completion output settings +# ---------------- + +case_insensitive_completion = True +""" +The completion is by default case insensitive. +""" + +add_bracket_after_function = False +""" +Adds an opening bracket after a function, because that's normal behaviour. +Removed it again, because in VIM that is not very practical. +""" + +no_completion_duplicates = True +""" +If set, completions with the same name don't appear in the output anymore, +but are in the `same_name_completions` attribute. +""" + +# ---------------- +# Filesystem cache +# ---------------- + +use_filesystem_cache = True +""" +Use filesystem cache to save once parsed files with pickle. +""" + +if platform.system().lower() == 'windows': + _cache_directory = os.path.join(os.getenv('APPDATA') or '~', 'Jedi', + 'Jedi') +elif platform.system().lower() == 'darwin': + _cache_directory = os.path.join('~', 'Library', 'Caches', 'Jedi') +else: + _cache_directory = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', + 'jedi') +cache_directory = os.path.expanduser(_cache_directory) +""" +The path where the cache is stored. + +On Linux, this defaults to ``~/.cache/jedi/``, on OS X to +``~/Library/Caches/Jedi/`` and on Windows to ``%APPDATA%\\Jedi\\Jedi\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/jedi`` is used instead of the default one. +""" + +# ---------------- +# parser +# ---------------- + +fast_parser = True +""" +Use the fast parser. This means that reparsing is only being done if +something has been changed e.g. to a function. If this happens, only the +function is being reparsed. +""" + +# ---------------- +# dynamic stuff +# ---------------- + +dynamic_array_additions = True +""" +check for `append`, etc. on arrays: [], {}, () as well as list/set calls. +""" + +dynamic_params = True +""" +A dynamic param completion, finds the callees of the function, which define +the params of a function. +""" + +dynamic_params_for_other_modules = True +""" +Do the same for other modules. +""" + +additional_dynamic_modules = [] +""" +Additional modules in which |jedi| checks if statements are to be found. This +is practical for IDEs, that want to administrate their modules themselves. +""" + +dynamic_flow_information = True +""" +Check for `isinstance` and other information to infer a type. +""" + +auto_import_modules = [ + 'gi', # This third-party repository (GTK stuff) doesn't really work with jedi +] +""" +Modules that are not analyzed but imported, although they contain Python code. +This improves autocompletion for libraries that use ``setattr`` or +``globals()`` modifications a lot. +""" + +# ---------------- +# caching validity (time) +# ---------------- + +call_signatures_validity = 3.0 +""" +Finding function calls might be slow (0.1-0.5s). This is not acceptible for +normal writing. Therefore cache it for a short time. +""" diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/LICENSE b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/LICENSE new file mode 100644 index 0000000..e5833ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/LICENSE @@ -0,0 +1,238 @@ +The "typeshed" project is licensed under the terms of the Apache license, as +reproduced below. + += = = = = + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += = = = = + +Parts of typeshed are licensed under different licenses (like the MIT +license), reproduced below. + += = = = = + +The MIT License + +Copyright (c) 2015 Jukka Lehtosalo and contributors + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + += = = = = + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi new file mode 100644 index 0000000..1f9d2ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi @@ -0,0 +1,47 @@ +# Stubs for BaseHTTPServer (Python 2.7) + +from typing import Any, BinaryIO, Mapping, Optional, Tuple, Union +import SocketServer +import mimetools + +class HTTPServer(SocketServer.TCPServer): + server_name: str + server_port: int + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + +class BaseHTTPRequestHandler: + client_address: Tuple[str, int] + server: SocketServer.BaseServer + close_connection: bool + command: str + path: str + request_version: str + headers: mimetools.Message + rfile: BinaryIO + wfile: BinaryIO + server_version: str + sys_version: str + error_message_format: str + error_content_type: str + protocol_version: str + MessageClass: type + responses: Mapping[int, Tuple[str, str]] + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: SocketServer.BaseServer) -> None: ... + def handle(self) -> None: ... + def handle_one_request(self) -> None: ... + def send_error(self, code: int, message: Optional[str] = ...) -> None: ... + def send_response(self, code: int, + message: Optional[str] = ...) -> None: ... + def send_header(self, keyword: str, value: str) -> None: ... + def end_headers(self) -> None: ... + def flush_headers(self) -> None: ... + def log_request(self, code: Union[int, str] = ..., + size: Union[int, str] = ...) -> None: ... + def log_error(self, format: str, *args: Any) -> None: ... + def log_message(self, format: str, *args: Any) -> None: ... + def version_string(self) -> str: ... + def date_time_string(self, timestamp: Optional[int] = ...) -> str: ... + def log_date_time_string(self) -> str: ... + def address_string(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi new file mode 100644 index 0000000..5d86811 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi @@ -0,0 +1,97 @@ +from typing import Any, IO, Sequence, Tuple, Union, List, Dict, Protocol, Optional + +DEFAULTSECT: str +MAX_INTERPOLATION_DEPTH: int + +class Error(Exception): + message: Any + def __init__(self, msg: str = ...) -> None: ... + def _get_message(self) -> None: ... + def _set_message(self, value: str) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + +class NoSectionError(Error): + section: str + def __init__(self, section: str) -> None: ... + +class DuplicateSectionError(Error): + section: str + def __init__(self, section: str) -> None: ... + +class NoOptionError(Error): + section: str + option: str + def __init__(self, option: str, section: str) -> None: ... + +class InterpolationError(Error): + section: str + option: str + msg: str + def __init__(self, option: str, section: str, msg: str) -> None: ... + +class InterpolationMissingOptionError(InterpolationError): + reference: str + def __init__(self, option: str, section: str, rawval: str, reference: str) -> None: ... + +class InterpolationSyntaxError(InterpolationError): ... + +class InterpolationDepthError(InterpolationError): + def __init__(self, option: str, section: str, rawval: str) -> None: ... + +class ParsingError(Error): + filename: str + errors: List[Tuple[Any, Any]] + def __init__(self, filename: str) -> None: ... + def append(self, lineno: Any, line: Any) -> None: ... + +class MissingSectionHeaderError(ParsingError): + lineno: Any + line: Any + def __init__(self, filename: str, lineno: Any, line: Any) -> None: ... + +class _Readable(Protocol): + def readline(self) -> str: ... + +class RawConfigParser: + _dict: Any + _sections: dict + _defaults: dict + _optcre: Any + SECTCRE: Any + OPTCRE: Any + OPTCRE_NV: Any + def __init__(self, defaults: Dict[Any, Any] = ..., dict_type: Any = ..., allow_no_value: bool = ...) -> None: ... + def defaults(self) -> Dict[Any, Any]: ... + def sections(self) -> List[str]: ... + def add_section(self, section: str) -> None: ... + def has_section(self, section: str) -> bool: ... + def options(self, section: str) -> List[str]: ... + def read(self, filenames: Union[str, Sequence[str]]) -> List[str]: ... + def readfp(self, fp: _Readable, filename: str = ...) -> None: ... + def get(self, section: str, option: str) -> str: ... + def items(self, section: str) -> List[Tuple[Any, Any]]: ... + def _get(self, section: str, conv: type, option: str) -> Any: ... + def getint(self, section: str, option: str) -> int: ... + def getfloat(self, section: str, option: str) -> float: ... + _boolean_states: Dict[str, bool] + def getboolean(self, section: str, option: str) -> bool: ... + def optionxform(self, optionstr: str) -> str: ... + def has_option(self, section: str, option: str) -> bool: ... + def set(self, section: str, option: str, value: Any = ...) -> None: ... + def write(self, fp: IO[str]) -> None: ... + def remove_option(self, section: str, option: Any) -> bool: ... + def remove_section(self, section: str) -> bool: ... + def _read(self, fp: IO[str], fpname: str) -> None: ... + +class ConfigParser(RawConfigParser): + _KEYCRE: Any + def get(self, section: str, option: str, raw: bool = ..., vars: Optional[dict] = ...) -> Any: ... + def items(self, section: str, raw: bool = ..., vars: Optional[dict] = ...) -> List[Tuple[str, Any]]: ... + def _interpolate(self, section: str, option: str, rawval: Any, vars: Any) -> str: ... + def _interpolation_replace(self, match: Any) -> str: ... + +class SafeConfigParser(ConfigParser): + _interpvar_re: Any + def _interpolate(self, section: str, option: str, rawval: Any, vars: Any) -> str: ... + def _interpolate_some(self, option: str, accum: list, rest: str, section: str, map: dict, depth: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Cookie.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Cookie.pyi new file mode 100644 index 0000000..79a7a81 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Cookie.pyi @@ -0,0 +1,40 @@ +from typing import Any, Optional + +class CookieError(Exception): ... + +class Morsel(dict): + key: Any + def __init__(self): ... + def __setitem__(self, K, V): ... + def isReservedKey(self, K): ... + value: Any + coded_value: Any + def set(self, key, val, coded_val, LegalChars=..., idmap=..., translate=...): ... + def output(self, attrs: Optional[Any] = ..., header=...): ... + def js_output(self, attrs: Optional[Any] = ...): ... + def OutputString(self, attrs: Optional[Any] = ...): ... + +class BaseCookie(dict): + def value_decode(self, val): ... + def value_encode(self, val): ... + def __init__(self, input: Optional[Any] = ...): ... + def __setitem__(self, key, value): ... + def output(self, attrs: Optional[Any] = ..., header=..., sep=...): ... + def js_output(self, attrs: Optional[Any] = ...): ... + def load(self, rawdata): ... + +class SimpleCookie(BaseCookie): + def value_decode(self, val): ... + def value_encode(self, val): ... + +class SerialCookie(BaseCookie): + def __init__(self, input: Optional[Any] = ...): ... + def value_decode(self, val): ... + def value_encode(self, val): ... + +class SmartCookie(BaseCookie): + def __init__(self, input: Optional[Any] = ...): ... + def value_decode(self, val): ... + def value_encode(self, val): ... + +Cookie: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi new file mode 100644 index 0000000..0f6c7e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi @@ -0,0 +1,31 @@ +from typing import List, Tuple, AnyStr +from markupbase import ParserBase + +class HTMLParser(ParserBase): + def __init__(self) -> None: ... + def feed(self, feed: AnyStr) -> None: ... + def close(self) -> None: ... + def reset(self) -> None: ... + + def get_starttag_text(self) -> AnyStr: ... + def set_cdata_mode(self, AnyStr) -> None: ... + def clear_cdata_mode(self) -> None: ... + + def handle_startendtag(self, tag: AnyStr, attrs: List[Tuple[AnyStr, AnyStr]]): ... + def handle_starttag(self, tag: AnyStr, attrs: List[Tuple[AnyStr, AnyStr]]): ... + def handle_endtag(self, tag: AnyStr): ... + def handle_charref(self, name: AnyStr): ... + def handle_entityref(self, name: AnyStr): ... + def handle_data(self, data: AnyStr): ... + def handle_comment(self, data: AnyStr): ... + def handle_decl(self, decl: AnyStr): ... + def handle_pi(self, data: AnyStr): ... + + def unknown_decl(self, data: AnyStr): ... + + def unescape(self, s: AnyStr) -> AnyStr: ... + +class HTMLParseError(Exception): + msg: str + lineno: int + offset: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Queue.pyi new file mode 100644 index 0000000..11b01ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/Queue.pyi @@ -0,0 +1,31 @@ +# Stubs for Queue (Python 2) + +from collections import deque +from typing import Any, TypeVar, Generic, Optional + +_T = TypeVar('_T') + +class Empty(Exception): ... +class Full(Exception): ... + +class Queue(Generic[_T]): + maxsize: Any + mutex: Any + not_empty: Any + not_full: Any + all_tasks_done: Any + unfinished_tasks: Any + queue: deque # undocumented + def __init__(self, maxsize: int = ...) -> None: ... + def task_done(self) -> None: ... + def join(self) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def put_nowait(self, item: _T) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def get_nowait(self) -> _T: ... + +class PriorityQueue(Queue): ... +class LifoQueue(Queue): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi new file mode 100644 index 0000000..be22b88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi @@ -0,0 +1,16 @@ +# Stubs for SimpleHTTPServer (Python 2) + +from typing import Any, AnyStr, IO, Mapping, Optional, Union +import BaseHTTPServer +from StringIO import StringIO + +class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + server_version: str + def do_GET(self) -> None: ... + def do_HEAD(self) -> None: ... + def send_head(self) -> Optional[IO[str]]: ... + def list_directory(self, path: Union[str, unicode]) -> Optional[StringIO]: ... + def translate_path(self, path: AnyStr) -> AnyStr: ... + def copyfile(self, source: IO[AnyStr], outputfile: IO[AnyStr]): ... + def guess_type(self, path: Union[str, unicode]) -> str: ... + extensions_map: Mapping[str, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi new file mode 100644 index 0000000..d485b8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi @@ -0,0 +1,99 @@ +# NB: SocketServer.pyi and socketserver.pyi must remain consistent! +# Stubs for socketserver + +from typing import Any, BinaryIO, Optional, Tuple, Type +from socket import SocketType +import sys +import types + +class BaseServer: + address_family: int + RequestHandlerClass: type + server_address: Tuple[str, int] + socket: SocketType + allow_reuse_address: bool + request_queue_size: int + socket_type: int + timeout: Optional[float] + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + def fileno(self) -> int: ... + def handle_request(self) -> None: ... + def serve_forever(self, poll_interval: float = ...) -> None: ... + def shutdown(self) -> None: ... + def server_close(self) -> None: ... + def finish_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def get_request(self) -> None: ... + def handle_error(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def handle_timeout(self) -> None: ... + def process_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def server_activate(self) -> None: ... + def server_bind(self) -> None: ... + def verify_request(self, request: bytes, + client_address: Tuple[str, int]) -> bool: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> BaseServer: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + if sys.version_info >= (3, 3): + def service_actions(self) -> None: ... + +class TCPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class UDPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +if sys.platform != 'win32': + class UnixStreamServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + + class UnixDatagramServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class ForkingMixIn: ... +class ThreadingMixIn: ... + +class ForkingTCPServer(ForkingMixIn, TCPServer): ... +class ForkingUDPServer(ForkingMixIn, UDPServer): ... +class ThreadingTCPServer(ThreadingMixIn, TCPServer): ... +class ThreadingUDPServer(ThreadingMixIn, UDPServer): ... +if sys.platform != 'win32': + class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): ... + class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): ... + + +class BaseRequestHandler: + # Those are technically of types, respectively: + # * Union[SocketType, Tuple[bytes, SocketType]] + # * Union[Tuple[str, int], str] + # But there are some concerns that having unions here would cause + # too much inconvenience to people using it (see + # https://github.com/python/typeshed/pull/384#issuecomment-234649696) + request: Any + client_address: Any + + server: BaseServer + def setup(self) -> None: ... + def handle(self) -> None: ... + def finish(self) -> None: ... + +class StreamRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO + +class DatagramRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/StringIO.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/StringIO.pyi new file mode 100644 index 0000000..de17f6a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/StringIO.pyi @@ -0,0 +1,30 @@ +# Stubs for StringIO (Python 2) + +from typing import Any, IO, AnyStr, Iterator, Iterable, Generic, List, Optional + +class StringIO(IO[AnyStr], Generic[AnyStr]): + closed: bool + softspace: int + len: int + name: str + def __init__(self, buf: AnyStr = ...) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def next(self) -> AnyStr: ... + def close(self) -> None: ... + def isatty(self) -> bool: ... + def seek(self, pos: int, mode: int = ...) -> int: ... + def tell(self) -> int: ... + def read(self, n: int = ...) -> AnyStr: ... + def readline(self, length: int = ...) -> AnyStr: ... + def readlines(self, sizehint: int = ...) -> List[AnyStr]: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def write(self, s: AnyStr) -> int: ... + def writelines(self, iterable: Iterable[AnyStr]) -> None: ... + def flush(self) -> None: ... + def getvalue(self) -> AnyStr: ... + def __enter__(self) -> Any: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> Any: ... + def fileno(self) -> int: ... + def readable(self) -> bool: ... + def seekable(self) -> bool: ... + def writable(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserDict.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserDict.pyi new file mode 100644 index 0000000..965e88e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserDict.pyi @@ -0,0 +1,44 @@ +from typing import (Any, Container, Dict, Generic, Iterable, Iterator, List, + Mapping, Optional, Sized, Tuple, TypeVar, Union, overload) + +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_T = TypeVar('_T') + +class UserDict(Dict[_KT, _VT], Generic[_KT, _VT]): + data: Mapping[_KT, _VT] + + def __init__(self, initialdata: Mapping[_KT, _VT] = ...) -> None: ... + + # TODO: __iter__ is not available for UserDict + +class IterableUserDict(UserDict[_KT, _VT], Generic[_KT, _VT]): + ... + +class DictMixin(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT]): + def has_key(self, key: _KT) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_KT]: ... + + # From typing.Mapping[_KT, _VT] + # (can't inherit because of keys()) + @overload + def get(self, k: _KT) -> Optional[_VT]: ... + @overload + def get(self, k: _KT, default: Union[_VT, _T]) -> Union[_VT, _T]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def __contains__(self, o: Any) -> bool: ... + + # From typing.MutableMapping[_KT, _VT] + def clear(self) -> None: ... + def pop(self, k: _KT, default: _VT = ...) -> _VT: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserList.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserList.pyi new file mode 100644 index 0000000..b8466ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserList.pyi @@ -0,0 +1,18 @@ +from typing import Iterable, MutableSequence, TypeVar, Union, overload + +_T = TypeVar("_T") +_ULT = TypeVar("_ULT", bound=UserList) + +class UserList(MutableSequence[_T]): + def insert(self, index: int, object: _T) -> None: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self: _ULT, s: slice) -> _ULT: ... + def sort(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserString.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserString.pyi new file mode 100644 index 0000000..8cbbfc1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/UserString.pyi @@ -0,0 +1,75 @@ +import collections +from typing import Any, Iterable, List, MutableSequence, Sequence, Optional, overload, Text, TypeVar, Tuple, Union + +_UST = TypeVar("_UST", bound=UserString) +_MST = TypeVar("_MST", bound=MutableString) + +class UserString(Sequence[UserString]): + data: unicode + def __init__(self, seq: object) -> None: ... + def __int__(self) -> int: ... + def __long__(self) -> long: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __hash__(self) -> int: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self: _UST, i: int) -> _UST: ... + @overload + def __getitem__(self: _UST, s: slice) -> _UST: ... + def __add__(self: _UST, other: Any) -> _UST: ... + def __radd__(self: _UST, other: Any) -> _UST: ... + def __mul__(self: _UST, other: int) -> _UST: ... + def __rmul__(self: _UST, other: int) -> _UST: ... + def __mod__(self: _UST, args: Any) -> _UST: ... + def capitalize(self: _UST) -> _UST: ... + def center(self: _UST, width: int, *args: Any) -> _UST: ... + def count(self, sub: int, start: int = ..., end: int = ...) -> int: ... + def decode(self: _UST, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UST: ... + def encode(self: _UST, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UST: ... + def endswith(self, suffix: Text, start: int = ..., end: int = ...) -> bool: ... + def expandtabs(self: _UST, tabsize: int = ...) -> _UST: ... + def find(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def isalpha(self) -> bool: ... + def isalnum(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, seq: Iterable[Text]) -> Text: ... + def ljust(self: _UST, width: int, *args: Any) -> _UST: ... + def lower(self: _UST) -> _UST: ... + def lstrip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def partition(self, sep: Text) -> Tuple[Text, Text, Text]: ... + def replace(self: _UST, old: Text, new: Text, maxsplit: int = ...) -> _UST: ... + def rfind(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def rjust(self: _UST, width: int, *args: Any) -> _UST: ... + def rpartition(self, sep: Text) -> Tuple[Text, Text, Text]: ... + def rstrip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def split(self, sep: Optional[Text] = ..., maxsplit: int = ...) -> List[Text]: ... + def rsplit(self, sep: Optional[Text] = ..., maxsplit: int = ...) -> List[Text]: ... + def splitlines(self, keepends: int = ...) -> List[Text]: ... + def startswith(self, suffix: Text, start: int = ..., end: int = ...) -> bool: ... + def strip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def swapcase(self: _UST) -> _UST: ... + def title(self: _UST) -> _UST: ... + def translate(self: _UST, *args: Any) -> _UST: ... + def upper(self: _UST) -> _UST: ... + def zfill(self: _UST, width: int) -> _UST: ... + +class MutableString(UserString, MutableSequence[MutableString]): # type: ignore + @overload + def __getitem__(self: _MST, i: int) -> _MST: ... + @overload + def __getitem__(self: _MST, s: slice) -> _MST: ... + def __setitem__(self, index: Union[int, slice], sub: Any) -> None: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def immutable(self) -> UserString: ... + def __iadd__(self: _MST, other: Any) -> _MST: ... + def __imul__(self, n: int) -> _MST: ... + def insert(self, index: int, value: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi new file mode 100644 index 0000000..cca0e4f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi @@ -0,0 +1,1622 @@ +# True and False are deliberately omitted because they are keywords in +# Python 3, and stub files conform to Python 3 syntax. + +from typing import ( + TypeVar, Iterator, Iterable, NoReturn, overload, Container, + Sequence, MutableSequence, Mapping, MutableMapping, Tuple, List, Any, Dict, Callable, Generic, + Set, AbstractSet, FrozenSet, MutableSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsAbs, + SupportsComplex, IO, BinaryIO, Union, + ItemsView, KeysView, ValuesView, ByteString, Optional, AnyStr, Type, Text, + Protocol, +) +from abc import abstractmethod, ABCMeta +from ast import mod, AST +from types import TracebackType, CodeType +import sys + +if sys.version_info >= (3,): + from typing import SupportsBytes, SupportsRound + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_S = TypeVar('_S') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_TT = TypeVar('_TT', bound='type') + +class object: + __doc__: Optional[str] + __dict__: Dict[str, Any] + __slots__: Union[Text, Iterable[Text]] + __module__: str + if sys.version_info >= (3, 6): + __annotations__: Dict[str, Any] + + @property + def __class__(self: _T) -> Type[_T]: ... + @__class__.setter + def __class__(self, __type: Type[object]) -> None: ... + def __init__(self) -> None: ... + def __new__(cls) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __eq__(self, o: object) -> bool: ... + def __ne__(self, o: object) -> bool: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + def __format__(self, format_spec: str) -> str: ... + def __getattribute__(self, name: str) -> Any: ... + def __delattr__(self, name: str) -> None: ... + def __sizeof__(self) -> int: ... + def __reduce__(self) -> tuple: ... + def __reduce_ex__(self, protocol: int) -> tuple: ... + if sys.version_info >= (3,): + def __dir__(self) -> Iterable[str]: ... + if sys.version_info >= (3, 6): + def __init_subclass__(cls) -> None: ... + +class staticmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class classmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class type(object): + __base__: type + __bases__: Tuple[type, ...] + __basicsize__: int + __dict__: Dict[str, Any] + __dictoffset__: int + __flags__: int + __itemsize__: int + __module__: str + __mro__: Tuple[type, ...] + __name__: str + if sys.version_info >= (3,): + __qualname__: str + __text_signature__: Optional[str] + __weakrefoffset__: int + + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, name: str, bases: Tuple[type, ...], dict: Dict[str, Any]) -> None: ... + @overload + def __new__(cls, o: object) -> type: ... + @overload + def __new__(cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]) -> type: ... + def __call__(self, *args: Any, **kwds: Any) -> Any: ... + def __subclasses__(self: _TT) -> List[_TT]: ... + # Note: the documentation doesnt specify what the return type is, the standard + # implementation seems to be returning a list. + def mro(self) -> List[type]: ... + def __instancecheck__(self, instance: Any) -> bool: ... + def __subclasscheck__(self, subclass: type) -> bool: ... + if sys.version_info >= (3,): + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Mapping[str, Any]: ... + +class super(object): + if sys.version_info >= (3,): + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + @overload + def __init__(self) -> None: ... + else: + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + +class int: + @overload + def __init__(self, x: Union[Text, bytes, SupportsInt] = ...) -> None: ... + @overload + def __init__(self, x: Union[Text, bytes, bytearray], base: int) -> None: ... + + @property + def real(self) -> int: ... + @property + def imag(self) -> int: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + def conjugate(self) -> int: ... + + def bit_length(self) -> int: ... + if sys.version_info >= (3,): + def to_bytes(self, length: int, byteorder: str, *, signed: bool = ...) -> bytes: ... + @classmethod + def from_bytes(cls, bytes: Sequence[int], byteorder: str, *, + signed: bool = ...) -> int: ... # TODO buffer object argument + + def __add__(self, x: int) -> int: ... + def __sub__(self, x: int) -> int: ... + def __mul__(self, x: int) -> int: ... + def __floordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __div__(self, x: int) -> int: ... + def __truediv__(self, x: int) -> float: ... + def __mod__(self, x: int) -> int: ... + def __divmod__(self, x: int) -> Tuple[int, int]: ... + def __radd__(self, x: int) -> int: ... + def __rsub__(self, x: int) -> int: ... + def __rmul__(self, x: int) -> int: ... + def __rfloordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __rdiv__(self, x: int) -> int: ... + def __rtruediv__(self, x: int) -> float: ... + def __rmod__(self, x: int) -> int: ... + def __rdivmod__(self, x: int) -> Tuple[int, int]: ... + def __pow__(self, x: int) -> Any: ... # Return type can be int or float, depending on x. + def __rpow__(self, x: int) -> Any: ... + def __and__(self, n: int) -> int: ... + def __or__(self, n: int) -> int: ... + def __xor__(self, n: int) -> int: ... + def __lshift__(self, n: int) -> int: ... + def __rshift__(self, n: int) -> int: ... + def __rand__(self, n: int) -> int: ... + def __ror__(self, n: int) -> int: ... + def __rxor__(self, n: int) -> int: ... + def __rlshift__(self, n: int) -> int: ... + def __rrshift__(self, n: int) -> int: ... + def __neg__(self) -> int: ... + def __pos__(self) -> int: ... + def __invert__(self) -> int: ... + if sys.version_info >= (3,): + def __round__(self, ndigits: Optional[int] = ...) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: int) -> bool: ... + def __le__(self, x: int) -> bool: ... + def __gt__(self, x: int) -> bool: ... + def __ge__(self, x: int) -> bool: ... + + def __str__(self) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __abs__(self) -> int: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __index__(self) -> int: ... + +class float: + def __init__(self, x: Union[SupportsFloat, Text, bytes, bytearray] = ...) -> None: ... + def as_integer_ratio(self) -> Tuple[int, int]: ... + def hex(self) -> str: ... + def is_integer(self) -> bool: ... + @classmethod + def fromhex(cls, s: str) -> float: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + def conjugate(self) -> float: ... + + def __add__(self, x: float) -> float: ... + def __sub__(self, x: float) -> float: ... + def __mul__(self, x: float) -> float: ... + def __floordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __div__(self, x: float) -> float: ... + def __truediv__(self, x: float) -> float: ... + def __mod__(self, x: float) -> float: ... + def __divmod__(self, x: float) -> Tuple[float, float]: ... + def __pow__(self, x: float) -> float: ... # In Python 3, returns complex if self is negative and x is not whole + def __radd__(self, x: float) -> float: ... + def __rsub__(self, x: float) -> float: ... + def __rmul__(self, x: float) -> float: ... + def __rfloordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __rdiv__(self, x: float) -> float: ... + def __rtruediv__(self, x: float) -> float: ... + def __rmod__(self, x: float) -> float: ... + def __rdivmod__(self, x: float) -> Tuple[float, float]: ... + def __rpow__(self, x: float) -> float: ... + def __getnewargs__(self) -> Tuple[float]: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: None) -> int: ... + @overload + def __round__(self, ndigits: int) -> float: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: float) -> bool: ... + def __le__(self, x: float) -> bool: ... + def __gt__(self, x: float) -> bool: ... + def __ge__(self, x: float) -> bool: ... + def __neg__(self) -> float: ... + def __pos__(self) -> float: ... + + def __str__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +class complex: + @overload + def __init__(self, re: float = ..., im: float = ...) -> None: ... + @overload + def __init__(self, s: str) -> None: ... + @overload + def __init__(self, s: SupportsComplex) -> None: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + + def conjugate(self) -> complex: ... + + def __add__(self, x: complex) -> complex: ... + def __sub__(self, x: complex) -> complex: ... + def __mul__(self, x: complex) -> complex: ... + def __pow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __div__(self, x: complex) -> complex: ... + def __truediv__(self, x: complex) -> complex: ... + def __radd__(self, x: complex) -> complex: ... + def __rsub__(self, x: complex) -> complex: ... + def __rmul__(self, x: complex) -> complex: ... + def __rpow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __rdiv__(self, x: complex) -> complex: ... + def __rtruediv__(self, x: complex) -> complex: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __neg__(self) -> complex: ... + def __pos__(self) -> complex: ... + + def __str__(self) -> str: ... + def __complex__(self) -> complex: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +if sys.version_info >= (3,): + _str_base = object +else: + class basestring(metaclass=ABCMeta): ... + + class unicode(basestring, Sequence[unicode]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, o: str, encoding: unicode = ..., errors: unicode = ...) -> None: ... + def capitalize(self) -> unicode: ... + def center(self, width: int, fillchar: unicode = ...) -> unicode: ... + def count(self, x: unicode) -> int: ... + def decode(self, encoding: unicode = ..., errors: unicode = ...) -> unicode: ... + def encode(self, encoding: unicode = ..., errors: unicode = ...) -> str: ... + def endswith(self, suffix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> unicode: ... + def find(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> unicode: ... + def index(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[unicode]) -> unicode: ... + def ljust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def lower(self) -> unicode: ... + def lstrip(self, chars: unicode = ...) -> unicode: ... + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: unicode, new: unicode, count: int = ...) -> unicode: ... + def rfind(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def rsplit(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def rstrip(self, chars: unicode = ...) -> unicode: ... + def split(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[unicode]: ... + def startswith(self, prefix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def strip(self, chars: unicode = ...) -> unicode: ... + def swapcase(self) -> unicode: ... + def title(self) -> unicode: ... + def translate(self, table: Union[Dict[int, Any], unicode]) -> unicode: ... + def upper(self) -> unicode: ... + def zfill(self, width: int) -> unicode: ... + + @overload + def __getitem__(self, i: int) -> unicode: ... + @overload + def __getitem__(self, s: slice) -> unicode: ... + def __getslice__(self, start: int, stop: int) -> unicode: ... + def __add__(self, s: unicode) -> unicode: ... + def __mul__(self, n: int) -> unicode: ... + def __rmul__(self, n: int) -> unicode: ... + def __mod__(self, x: Any) -> unicode: ... + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: unicode) -> bool: ... + def __le__(self, x: unicode) -> bool: ... + def __gt__(self, x: unicode) -> bool: ... + def __ge__(self, x: unicode) -> bool: ... + + def __len__(self) -> int: ... + # The argument type is incompatible with Sequence + def __contains__(self, s: Union[unicode, bytes]) -> bool: ... # type: ignore + def __iter__(self) -> Iterator[unicode]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + def __getnewargs__(self) -> Tuple[unicode]: ... + + _str_base = basestring + +class str(Sequence[str], _str_base): + if sys.version_info >= (3,): + @overload + def __init__(self, o: object = ...) -> None: ... + @overload + def __init__(self, o: bytes, encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, o: object = ...) -> None: ... + + def capitalize(self) -> str: ... + if sys.version_info >= (3, 3): + def casefold(self) -> str: ... + def center(self, width: int, fillchar: str = ...) -> str: ... + def count(self, x: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + if sys.version_info < (3,): + def decode(self, encoding: Text = ..., errors: Text = ...) -> unicode: ... + def encode(self, encoding: Text = ..., errors: Text = ...) -> bytes: ... + if sys.version_info >= (3,): + def endswith(self, suffix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + else: + def endswith(self, suffix: Union[Text, Tuple[Text, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> str: ... + def find(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> str: ... + if sys.version_info >= (3,): + def format_map(self, map: Mapping[str, Any]) -> str: ... + def index(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + if sys.version_info >= (3,): + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + if sys.version_info >= (3,): + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + if sys.version_info >= (3,): + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[str]) -> str: ... + else: + def join(self, iterable: Iterable[AnyStr]) -> AnyStr: ... + def ljust(self, width: int, fillchar: str = ...) -> str: ... + def lower(self) -> str: ... + if sys.version_info >= (3,): + def lstrip(self, chars: Optional[str] = ...) -> str: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self, old: str, new: str, count: int = ...) -> str: ... + else: + @overload + def lstrip(self, chars: str = ...) -> str: ... + @overload + def lstrip(self, chars: unicode) -> unicode: ... + @overload + def partition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def partition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: AnyStr, new: AnyStr, count: int = ...) -> AnyStr: ... + def rfind(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: str = ...) -> str: ... + if sys.version_info >= (3,): + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rstrip(self, chars: Optional[str] = ...) -> str: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + else: + @overload + def rpartition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + @overload + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def rsplit(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + @overload + def rstrip(self, chars: str = ...) -> str: ... + @overload + def rstrip(self, chars: unicode) -> unicode: ... + @overload + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def split(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + if sys.version_info >= (3,): + def startswith(self, prefix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + def strip(self, chars: Optional[str] = ...) -> str: ... + else: + def startswith(self, prefix: Union[Text, Tuple[Text, ...]]) -> bool: ... + @overload + def strip(self, chars: str = ...) -> str: ... + @overload + def strip(self, chars: unicode) -> unicode: ... + def swapcase(self) -> str: ... + def title(self) -> str: ... + if sys.version_info >= (3,): + def translate(self, table: Union[Mapping[int, Union[int, str, None]], Sequence[Union[int, str, None]]]) -> str: ... + else: + def translate(self, table: Optional[AnyStr], deletechars: AnyStr = ...) -> AnyStr: ... + def upper(self) -> str: ... + def zfill(self, width: int) -> str: ... + if sys.version_info >= (3,): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + + if sys.version_info >= (3,): + def __add__(self, s: str) -> str: ... + else: + def __add__(self, s: AnyStr) -> AnyStr: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[str, Text]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ge__(self, x: Text) -> bool: ... + def __getitem__(self, i: Union[int, slice]) -> str: ... + def __gt__(self, x: Text) -> bool: ... + def __hash__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + def __le__(self, x: Text) -> bool: ... + def __len__(self) -> int: ... + def __lt__(self, x: Text) -> bool: ... + def __mod__(self, x: Any) -> str: ... + def __mul__(self, n: int) -> str: ... + def __ne__(self, x: object) -> bool: ... + def __repr__(self) -> str: ... + def __rmul__(self, n: int) -> str: ... + def __str__(self) -> str: ... + def __getnewargs__(self) -> Tuple[str]: ... + + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + +if sys.version_info >= (3,): + class bytes(ByteString): + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str, encoding: str, + errors: str = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: SupportsBytes) -> None: ... + def capitalize(self) -> bytes: ... + def center(self, width: int, fillchar: bytes = ...) -> bytes: ... + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def decode(self, encoding: str = ..., errors: str = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytes: ... + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytes: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def lower(self) -> bytes: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def partition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytes: ... + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def rpartition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def splitlines(self, keepends: bool = ...) -> List[bytes]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytes: ... + def swapcase(self) -> bytes: ... + def title(self) -> bytes: ... + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytes: ... + def upper(self) -> bytes: ... + def zfill(self, width: int) -> bytes: ... + @classmethod + def fromhex(cls, s: str) -> bytes: ... + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytes: ... + def __add__(self, s: bytes) -> bytes: ... + def __mul__(self, n: int) -> bytes: ... + def __rmul__(self, n: int) -> bytes: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + def __getnewargs__(self) -> Tuple[bytes]: ... +else: + bytes = str + +class bytearray(MutableSequence[int], ByteString): + if sys.version_info >= (3,): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + else: + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + def capitalize(self) -> bytearray: ... + def center(self, width: int, fillchar: bytes = ...) -> bytearray: ... + if sys.version_info >= (3,): + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def copy(self) -> bytearray: ... + else: + def count(self, x: str) -> int: ... + def decode(self, encoding: Text = ..., errors: Text = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def find(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def insert(self, index: int, object: int) -> None: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytearray: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + else: + def join(self, iterable: Iterable[str]) -> bytearray: ... + def ljust(self, width: int, fillchar: str = ...) -> bytearray: ... + def lower(self) -> bytearray: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def partition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def rfind(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + def rpartition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def splitlines(self, keepends: bool = ...) -> List[bytearray]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def swapcase(self) -> bytearray: ... + def title(self) -> bytearray: ... + if sys.version_info >= (3,): + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytearray: ... + else: + def translate(self, table: str) -> bytearray: ... + def upper(self) -> bytearray: ... + def zfill(self, width: int) -> bytearray: ... + @staticmethod + def fromhex(s: str) -> bytearray: ... + if sys.version_info >= (3,): + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytearray: ... + @overload + def __setitem__(self, i: int, x: int) -> None: ... + @overload + def __setitem__(self, s: slice, x: Union[Iterable[int], bytes]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> bytearray: ... + def __setslice__(self, start: int, stop: int, x: Union[Sequence[int], str]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, s: bytes) -> bytearray: ... + if sys.version_info >= (3,): + def __iadd__(self, s: Iterable[int]) -> bytearray: ... + def __mul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3,): + def __rmul__(self, n: int) -> bytearray: ... + def __imul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + +if sys.version_info >= (3,): + _mv_container_type = int +else: + _mv_container_type = str + +class memoryview(Sized, Container[_mv_container_type]): + format: str + itemsize: int + shape: Optional[Tuple[int, ...]] + strides: Optional[Tuple[int, ...]] + suboffsets: Optional[Tuple[int, ...]] + readonly: bool + ndim: int + + if sys.version_info >= (3,): + c_contiguous: bool + f_contiguous: bool + contiguous: bool + def __init__(self, obj: Union[bytes, bytearray, memoryview]) -> None: ... + def __enter__(self) -> memoryview: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]) -> bool: ... + else: + def __init__(self, obj: Union[bytes, bytearray, buffer, memoryview]) -> None: ... + + @overload + def __getitem__(self, i: int) -> _mv_container_type: ... + @overload + def __getitem__(self, s: slice) -> memoryview: ... + + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_mv_container_type]: ... + def __len__(self) -> int: ... + + @overload + def __setitem__(self, i: int, o: bytes) -> None: ... + @overload + def __setitem__(self, s: slice, o: Sequence[bytes]) -> None: ... + @overload + def __setitem__(self, s: slice, o: memoryview) -> None: ... + + def tobytes(self) -> bytes: ... + def tolist(self) -> List[int]: ... + + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + +class bool(int): + def __init__(self, o: object = ...) -> None: ... + @overload + def __and__(self, x: bool) -> bool: ... + @overload + def __and__(self, x: int) -> int: ... + @overload + def __or__(self, x: bool) -> bool: ... + @overload + def __or__(self, x: int) -> int: ... + @overload + def __xor__(self, x: bool) -> bool: ... + @overload + def __xor__(self, x: int) -> int: ... + @overload + def __rand__(self, x: bool) -> bool: ... + @overload + def __rand__(self, x: int) -> int: ... + @overload + def __ror__(self, x: bool) -> bool: ... + @overload + def __ror__(self, x: int) -> int: ... + @overload + def __rxor__(self, x: bool) -> bool: ... + @overload + def __rxor__(self, x: int) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + +class slice(object): + start: Optional[int] + step: Optional[int] + stop: Optional[int] + @overload + def __init__(self, stop: Optional[int]) -> None: ... + @overload + def __init__(self, start: Optional[int], stop: Optional[int], step: Optional[int] = ...) -> None: ... + def indices(self, len: int) -> Tuple[int, int, int]: ... + +class tuple(Sequence[_T_co], Generic[_T_co]): + def __new__(cls: Type[_T], iterable: Iterable[_T_co] = ...) -> _T: ... + def __init__(self, iterable: Iterable[_T_co] = ...): ... + def __len__(self) -> int: ... + def __contains__(self, x: object) -> bool: ... + @overload + def __getitem__(self, x: int) -> _T_co: ... + @overload + def __getitem__(self, x: slice) -> Tuple[_T_co, ...]: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __lt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __le__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __gt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __ge__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __add__(self, x: Tuple[_T_co, ...]) -> Tuple[_T_co, ...]: ... + def __mul__(self, n: int) -> Tuple[_T_co, ...]: ... + def __rmul__(self, n: int) -> Tuple[_T_co, ...]: ... + def count(self, x: Any) -> int: ... + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + +class list(MutableSequence[_T], Generic[_T]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3,): + def clear(self) -> None: ... + def copy(self) -> List[_T]: ... + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def index(self, object: _T, start: int = ..., stop: int = ...) -> int: ... + def count(self, object: _T) -> int: ... + def insert(self, index: int, object: _T) -> None: ... + def remove(self, object: _T) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3,): + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + else: + def sort(self, cmp: Callable[[_T, _T], Any] = ..., key: Callable[[_T], Any] = ..., reverse: bool = ...) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> List[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, o: Sequence[_T]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, x: List[_T]) -> List[_T]: ... + def __iadd__(self: _S, x: Iterable[_T]) -> _S: ... + def __mul__(self, n: int) -> List[_T]: ... + def __rmul__(self, n: int) -> List[_T]: ... + if sys.version_info >= (3,): + def __imul__(self: _S, n: int) -> _S: ... + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __gt__(self, x: List[_T]) -> bool: ... + def __ge__(self, x: List[_T]) -> bool: ... + def __lt__(self, x: List[_T]) -> bool: ... + def __le__(self, x: List[_T]) -> bool: ... + +class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + # NOTE: Keyword arguments are special. If they are used, _KT must include + # str, but we have no way of enforcing it here. + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + + def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ... + + if sys.version_info < (3,): + def has_key(self, k: _KT) -> bool: ... + def clear(self) -> None: ... + def copy(self) -> Dict[_KT, _VT]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + if sys.version_info >= (3,): + def keys(self) -> KeysView[_KT]: ... + def values(self) -> ValuesView[_VT]: ... + def items(self) -> ItemsView[_KT, _VT]: ... + else: + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def viewkeys(self) -> KeysView[_KT]: ... + def viewvalues(self) -> ValuesView[_VT]: ... + def viewitems(self) -> ItemsView[_KT, _VT]: ... + @staticmethod + @overload + def fromkeys(seq: Iterable[_T]) -> Dict[_T, Any]: ... # TODO: Actually a class method (mypy/issues#328) + @staticmethod + @overload + def fromkeys(seq: Iterable[_T], value: _S) -> Dict[_T, _S]: ... + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + +class set(MutableSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def add(self, element: _T) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Set[_T]: ... + def difference(self, *s: Iterable[Any]) -> Set[_T]: ... + def difference_update(self, *s: Iterable[Any]) -> None: ... + def discard(self, element: _T) -> None: ... + def intersection(self, *s: Iterable[Any]) -> Set[_T]: ... + def intersection_update(self, *s: Iterable[Any]) -> None: ... + def isdisjoint(self, s: Iterable[Any]) -> bool: ... + def issubset(self, s: Iterable[Any]) -> bool: ... + def issuperset(self, s: Iterable[Any]) -> bool: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def symmetric_difference(self, s: Iterable[_T]) -> Set[_T]: ... + def symmetric_difference_update(self, s: Iterable[_T]) -> None: ... + def union(self, *s: Iterable[_T]) -> Set[_T]: ... + def update(self, *s: Iterable[_T]) -> None: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __iand__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ior__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __isub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ixor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class frozenset(AbstractSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def copy(self) -> FrozenSet[_T]: ... + def difference(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def intersection(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def isdisjoint(self, s: Iterable[_T]) -> bool: ... + def issubset(self, s: Iterable[object]) -> bool: ... + def issuperset(self, s: Iterable[object]) -> bool: ... + def symmetric_difference(self, s: Iterable[_T]) -> FrozenSet[_T]: ... + def union(self, *s: Iterable[_T]) -> FrozenSet[_T]: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class enumerate(Iterator[Tuple[int, _T]], Generic[_T]): + def __init__(self, iterable: Iterable[_T], start: int = ...) -> None: ... + def __iter__(self) -> Iterator[Tuple[int, _T]]: ... + if sys.version_info >= (3,): + def __next__(self) -> Tuple[int, _T]: ... + else: + def next(self) -> Tuple[int, _T]: ... + +if sys.version_info >= (3,): + class range(Sequence[int]): + start: int + stop: int + step: int + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def count(self, value: int) -> int: ... + def index(self, value: int, start: int = ..., stop: Optional[int] = ...) -> int: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[int]: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> range: ... + def __repr__(self) -> str: ... + def __reversed__(self) -> Iterator[int]: ... +else: + class xrange(Sized, Iterable[int], Reversible[int]): + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __getitem__(self, i: int) -> int: ... + def __reversed__(self) -> Iterator[int]: ... + +class property(object): + def __init__(self, fget: Optional[Callable[[Any], Any]] = ..., + fset: Optional[Callable[[Any, Any], None]] = ..., + fdel: Optional[Callable[[Any], None]] = ..., + doc: Optional[str] = ...) -> None: ... + def getter(self, fget: Callable[[Any], Any]) -> property: ... + def setter(self, fset: Callable[[Any, Any], None]) -> property: ... + def deleter(self, fdel: Callable[[Any], None]) -> property: ... + def __get__(self, obj: Any, type: Optional[type] = ...) -> Any: ... + def __set__(self, obj: Any, value: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + def fget(self) -> Any: ... + def fset(self, value: Any) -> None: ... + def fdel(self) -> None: ... + +if sys.version_info < (3,): + long = int + +NotImplemented: Any + +def abs(__n: SupportsAbs[_T]) -> _T: ... +def all(__i: Iterable[object]) -> bool: ... +def any(__i: Iterable[object]) -> bool: ... +if sys.version_info < (3,): + def apply(__func: Callable[..., _T], __args: Optional[Sequence[Any]] = ..., __kwds: Optional[Mapping[str, Any]] = ...) -> _T: ... +if sys.version_info >= (3,): + def ascii(__o: object) -> str: ... + +class _SupportsIndex(Protocol): + def __index__(self) -> int: ... +def bin(__number: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 7): + def breakpoint(*args: Any, **kws: Any) -> None: ... +def callable(__o: object) -> bool: ... +def chr(__code: int) -> str: ... +if sys.version_info < (3,): + def cmp(__x: Any, __y: Any) -> int: ... + _N1 = TypeVar('_N1', bool, int, float, complex) + def coerce(__x: _N1, __y: _N1) -> Tuple[_N1, _N1]: ... +if sys.version_info >= (3, 6): + # This class is to be exported as PathLike from os, + # but we define it here as _PathLike to avoid import cycle issues. + # See https://github.com/python/typeshed/pull/991#issuecomment-288160993 + class _PathLike(Generic[AnyStr]): + def __fspath__(self) -> AnyStr: ... + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes, _PathLike], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +elif sys.version_info >= (3,): + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +else: + def compile(source: Union[Text, mod], filename: Text, mode: Text, flags: int = ..., dont_inherit: int = ...) -> Any: ... +if sys.version_info >= (3,): + def copyright() -> None: ... + def credits() -> None: ... +def delattr(__o: Any, __name: Text) -> None: ... +def dir(__o: object = ...) -> List[str]: ... +_N2 = TypeVar('_N2', int, float) +def divmod(__a: _N2, __b: _N2) -> Tuple[_N2, _N2]: ... +def eval(__source: Union[Text, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +if sys.version_info >= (3,): + def exec(__object: Union[str, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +else: + def execfile(__filename: str, __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Dict[str, Any]] = ...) -> None: ... +def exit(code: object = ...) -> NoReturn: ... +if sys.version_info >= (3,): + @overload + def filter(__function: None, __iterable: Iterable[Optional[_T]]) -> Iterator[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], __iterable: Iterable[_T]) -> Iterator[_T]: ... +else: + @overload + def filter(__function: Callable[[AnyStr], Any], # type: ignore + __iterable: AnyStr) -> AnyStr: ... + @overload + def filter(__function: None, # type: ignore + __iterable: Tuple[Optional[_T], ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: Callable[[_T], Any], # type: ignore + __iterable: Tuple[_T, ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: None, + __iterable: Iterable[Optional[_T]]) -> List[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], + __iterable: Iterable[_T]) -> List[_T]: ... +def format(__o: object, __format_spec: str = ...) -> str: ... # TODO unicode +def getattr(__o: Any, name: Text, __default: Any = ...) -> Any: ... +def globals() -> Dict[str, Any]: ... +def hasattr(__o: Any, __name: Text) -> bool: ... +def hash(__o: object) -> int: ... +if sys.version_info >= (3,): + def help(*args: Any, **kwds: Any) -> None: ... +def hex(__i: Union[int, _SupportsIndex]) -> str: ... +def id(__o: object) -> int: ... +if sys.version_info >= (3,): + def input(__prompt: Any = ...) -> str: ... +else: + def input(__prompt: Any = ...) -> Any: ... + def intern(__string: str) -> str: ... +@overload +def iter(__iterable: Iterable[_T]) -> Iterator[_T]: ... +@overload +def iter(__function: Callable[[], _T], __sentinel: _T) -> Iterator[_T]: ... +def isinstance(__o: object, __t: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def issubclass(__cls: type, __classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def len(__o: Sized) -> int: ... +if sys.version_info >= (3,): + def license() -> None: ... +def locals() -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[_S]: ... +else: + @overload + def map(__func: None, __iter1: Iterable[_T1]) -> List[_T1]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def map(__func: None, + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +if sys.version_info >= (3,): + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +if sys.version_info >= (3,): + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +@overload +def next(__i: Iterator[_T]) -> _T: ... +@overload +def next(__i: Iterator[_T], default: _VT) -> Union[_T, _VT]: ... +def oct(__i: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 6): + def open(file: Union[str, bytes, int, _PathLike], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +elif sys.version_info >= (3,): + def open(file: Union[str, bytes, int], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +else: + def open(name: Union[unicode, int], mode: unicode = ..., buffering: int = ...) -> BinaryIO: ... + +def ord(__c: Union[Text, bytes]) -> int: ... +if sys.version_info >= (3,): + class _Writer(Protocol): + def write(self, __s: str) -> Any: ... + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ..., flush: bool = ...) -> None: ... +else: + class _Writer(Protocol): + def write(self, __s: Any) -> Any: ... + # This is only available after from __future__ import print_function. + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ...) -> None: ... +@overload +def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y +@overload +def pow(__x: int, __y: int, __z: int) -> Any: ... +@overload +def pow(__x: float, __y: float) -> float: ... +@overload +def pow(__x: float, __y: float, __z: float) -> float: ... +def quit(code: object = ...) -> NoReturn: ... +if sys.version_info < (3,): + def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ... + def raw_input(__prompt: Any = ...) -> str: ... + @overload + def reduce(__function: Callable[[_T, _S], _T], __iterable: Iterable[_S], __initializer: _T) -> _T: ... + @overload + def reduce(__function: Callable[[_T, _T], _T], __iterable: Iterable[_T]) -> _T: ... + def reload(__module: Any) -> Any: ... +@overload +def reversed(__object: Sequence[_T]) -> Iterator[_T]: ... +@overload +def reversed(__object: Reversible[_T]) -> Iterator[_T]: ... +def repr(__o: object) -> str: ... +if sys.version_info >= (3,): + @overload + def round(number: float) -> int: ... + @overload + def round(number: float, ndigits: None) -> int: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsRound[_T]) -> int: ... + @overload + def round(number: SupportsRound[_T], ndigits: None) -> int: ... # type: ignore + @overload + def round(number: SupportsRound[_T], ndigits: int) -> _T: ... +else: + @overload + def round(number: float) -> float: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsFloat) -> float: ... + @overload + def round(number: SupportsFloat, ndigits: int) -> float: ... +def setattr(__object: Any, __name: Text, __value: Any) -> None: ... +if sys.version_info >= (3,): + def sorted(__iterable: Iterable[_T], *, + key: Optional[Callable[[_T], Any]] = ..., + reverse: bool = ...) -> List[_T]: ... +else: + def sorted(__iterable: Iterable[_T], *, + cmp: Callable[[_T, _T], int] = ..., + key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> List[_T]: ... +@overload +def sum(__iterable: Iterable[_T]) -> Union[_T, int]: ... +@overload +def sum(__iterable: Iterable[_T], __start: _S) -> Union[_T, _S]: ... +if sys.version_info < (3,): + def unichr(__i: int) -> unicode: ... +def vars(__object: Any = ...) -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +else: + @overload + def zip(__iter1: Iterable[_T1]) -> List[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... +def __import__(name: Text, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ..., + fromlist: List[str] = ..., level: int = ...) -> Any: ... + +# Actually the type of Ellipsis is , but since it's +# not exposed anywhere under that name, we make it private here. +class ellipsis: ... +Ellipsis: ellipsis + +if sys.version_info < (3,): + # TODO: buffer support is incomplete; e.g. some_string.startswith(some_buffer) doesn't type check. + _AnyBuffer = TypeVar('_AnyBuffer', str, unicode, bytearray, buffer) + + class buffer(Sized): + def __init__(self, object: _AnyBuffer, offset: int = ..., size: int = ...) -> None: ... + def __add__(self, other: _AnyBuffer) -> str: ... + def __cmp__(self, other: _AnyBuffer) -> bool: ... + def __getitem__(self, key: Union[int, slice]) -> str: ... + def __getslice__(self, i: int, j: int) -> str: ... + def __len__(self) -> int: ... + def __mul__(self, x: int) -> str: ... + +class BaseException(object): + args: Tuple[Any, ...] + if sys.version_info < (3,): + message: Any + if sys.version_info >= (3,): + __cause__: Optional[BaseException] + __context__: Optional[BaseException] + __suppress_context__: bool + __traceback__: Optional[TracebackType] + def __init__(self, *args: object) -> None: ... + if sys.version_info < (3,): + def __getitem__(self, i: int) -> Any: ... + def __getslice__(self, start: int, stop: int) -> Tuple[Any, ...]: ... + if sys.version_info >= (3,): + def with_traceback(self, tb: Optional[TracebackType]) -> BaseException: ... + +class GeneratorExit(BaseException): ... +class KeyboardInterrupt(BaseException): ... +class SystemExit(BaseException): + code: int +class Exception(BaseException): ... +class StopIteration(Exception): + if sys.version_info >= (3,): + value: Any +if sys.version_info >= (3,): + _StandardError = Exception + class OSError(Exception): + errno: int + strerror: str + # filename, filename2 are actually Union[str, bytes, None] + filename: Any + filename2: Any + EnvironmentError = OSError + IOError = OSError +else: + class StandardError(Exception): ... + _StandardError = StandardError + class EnvironmentError(StandardError): + errno: int + strerror: str + # TODO can this be unicode? + filename: str + class OSError(EnvironmentError): ... + class IOError(EnvironmentError): ... + +class ArithmeticError(_StandardError): ... +class AssertionError(_StandardError): ... +class AttributeError(_StandardError): ... +class BufferError(_StandardError): ... +class EOFError(_StandardError): ... +class ImportError(_StandardError): + if sys.version_info >= (3,): + name: str + path: str +class LookupError(_StandardError): ... +class MemoryError(_StandardError): ... +class NameError(_StandardError): ... +class ReferenceError(_StandardError): ... +class RuntimeError(_StandardError): ... +if sys.version_info >= (3, 5): + class StopAsyncIteration(Exception): + value: Any +class SyntaxError(_StandardError): + msg: str + lineno: int + offset: Optional[int] + text: str + filename: str +class SystemError(_StandardError): ... +class TypeError(_StandardError): ... +class ValueError(_StandardError): ... + +class FloatingPointError(ArithmeticError): ... +class OverflowError(ArithmeticError): ... +class ZeroDivisionError(ArithmeticError): ... + +if sys.version_info >= (3, 6): + class ModuleNotFoundError(ImportError): ... + +class IndexError(LookupError): ... +class KeyError(LookupError): ... + +class UnboundLocalError(NameError): ... + +class WindowsError(OSError): + winerror: int +if sys.version_info >= (3,): + class BlockingIOError(OSError): + characters_written: int + class ChildProcessError(OSError): ... + class ConnectionError(OSError): ... + class BrokenPipeError(ConnectionError): ... + class ConnectionAbortedError(ConnectionError): ... + class ConnectionRefusedError(ConnectionError): ... + class ConnectionResetError(ConnectionError): ... + class FileExistsError(OSError): ... + class FileNotFoundError(OSError): ... + class InterruptedError(OSError): ... + class IsADirectoryError(OSError): ... + class NotADirectoryError(OSError): ... + class PermissionError(OSError): ... + class ProcessLookupError(OSError): ... + class TimeoutError(OSError): ... + +class NotImplementedError(RuntimeError): ... +if sys.version_info >= (3, 5): + class RecursionError(RuntimeError): ... + +class IndentationError(SyntaxError): ... +class TabError(IndentationError): ... + +class UnicodeError(ValueError): ... +class UnicodeDecodeError(UnicodeError): + encoding: str + object: bytes + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: bytes, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeEncodeError(UnicodeError): + encoding: str + object: Text + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: Text, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeTranslateError(UnicodeError): ... + +class Warning(Exception): ... +class UserWarning(Warning): ... +class DeprecationWarning(Warning): ... +class SyntaxWarning(Warning): ... +class RuntimeWarning(Warning): ... +class FutureWarning(Warning): ... +class PendingDeprecationWarning(Warning): ... +class ImportWarning(Warning): ... +class UnicodeWarning(Warning): ... +class BytesWarning(Warning): ... +if sys.version_info >= (3, 2): + class ResourceWarning(Warning): ... + +if sys.version_info < (3,): + class file(BinaryIO): + @overload + def __init__(self, file: str, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: unicode, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: int, mode: str = ..., buffering: int = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def __enter__(self) -> BinaryIO: ... + def __exit__(self, t: Optional[type] = ..., exc: Optional[BaseException] = ..., tb: Optional[Any] = ...) -> bool: ... + def flush(self) -> None: ... + def fileno(self) -> int: ... + def isatty(self) -> bool: ... + def close(self) -> None: ... + + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def write(self, data: str) -> int: ... + def writelines(self, data: Iterable[str]) -> None: ... + def truncate(self, pos: Optional[int] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_ast.pyi new file mode 100644 index 0000000..c461bb4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_ast.pyi @@ -0,0 +1,330 @@ +import typing +from typing import Optional + +__version__: str +PyCF_ONLY_AST: int +_identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class ClassDef(stmt): + name: _identifier + bases: typing.List[expr] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class Print(stmt): + dest: Optional[expr] + values: typing.List[expr] + nl: bool + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + context_expr: expr + optional_vars: Optional[expr] + body: typing.List[stmt] + +class Raise(stmt): + type: Optional[expr] + inst: Optional[expr] + tback: Optional[expr] + +class TryExcept(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + +class TryFinally(stmt): + body: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[_identifier] + names: typing.List[alias] + level: Optional[int] + +class Exec(stmt): + body: expr + globals: Optional[expr] + locals: Optional[expr] + +class Global(stmt): + names: typing.List[_identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + +class Ellipsis(slice): ... + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Yield(expr): + value: Optional[expr] + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + starargs: Optional[expr] + kwargs: Optional[expr] + +class Repr(expr): + value: expr + +class Num(expr): + n: float + +class Str(expr): + s: str + +class Attribute(expr): + value: expr + attr: _identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Name(expr): + id: _identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + + +class excepthandler(AST): + ... + + +class ExceptHandler(excepthandler): + type: Optional[expr] + name: Optional[expr] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[expr] + vararg: Optional[_identifier] + kwarg: Optional[_identifier] + defaults: typing.List[expr] + +class keyword(AST): + arg: _identifier + value: expr + +class alias(AST): + name: _identifier + asname: Optional[_identifier] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_collections.pyi new file mode 100644 index 0000000..e24d405 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_collections.pyi @@ -0,0 +1,41 @@ +"""Stub file for the '_collections' module.""" + +from typing import Any, Generic, Iterator, TypeVar, Optional, Union + +class defaultdict(dict): + default_factory: None + def __init__(self, default: Any = ..., init: Any = ...) -> None: ... + def __missing__(self, key) -> Any: + raise KeyError() + def __copy__(self) -> defaultdict: ... + def copy(self) -> defaultdict: ... + +_T = TypeVar('_T') +_T2 = TypeVar('_T2') + +class deque(Generic[_T]): + maxlen: Optional[int] + def __init__(self, iterable: Iterator[_T] = ..., maxlen: int = ...) -> None: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + def count(self, x: Any) -> int: ... + def extend(self, iterable: Iterator[_T]) -> None: ... + def extendleft(self, iterable: Iterator[_T]) -> None: ... + def pop(self) -> _T: + raise IndexError() + def popleft(self) -> _T: + raise IndexError() + def remove(self, value: _T) -> None: + raise IndexError() + def reverse(self) -> None: ... + def rotate(self, n: int = ...) -> None: ... + def __contains__(self, o: Any) -> bool: ... + def __copy__(self) -> deque[_T]: ... + def __getitem__(self, i: int) -> _T: + raise IndexError() + def __iadd__(self, other: deque[_T2]) -> deque[Union[_T, _T2]]: ... + def __iter__(self) -> Iterator[_T]: ... + def __len__(self) -> int: ... + def __reversed__(self) -> Iterator[_T]: ... + def __setitem__(self, i: int, x: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_functools.pyi new file mode 100644 index 0000000..0641885 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_functools.pyi @@ -0,0 +1,87 @@ +"""Stub file for the '_functools' module.""" + +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Tuple, overload + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") + +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi new file mode 100644 index 0000000..8a9c8d7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi @@ -0,0 +1,34 @@ +"""Stub file for the '_hotshot' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any, List, Tuple, Dict, Generic + +def coverage(a: str) -> Any: ... + +def logreader(a: str) -> LogReaderType: + raise IOError() + raise RuntimeError() + +def profiler(a: str, *args, **kwargs) -> Any: + raise IOError() + +def resolution() -> tuple: ... + + +class LogReaderType(object): + def close(self) -> None: ... + def fileno(self) -> int: + raise ValueError() + +class ProfilerType(object): + def addinfo(self, a: str, b: str) -> None: ... + def close(self) -> None: ... + def fileno(self) -> int: + raise ValueError() + def runcall(self, *args, **kwargs) -> Any: ... + def runcode(self, a, b, *args, **kwargs) -> Any: + raise TypeError() + def start(self) -> None: ... + def stop(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_io.pyi new file mode 100644 index 0000000..e4e15cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_io.pyi @@ -0,0 +1,183 @@ +from typing import Any, AnyStr, BinaryIO, IO, Text, TextIO, Iterable, Iterator, List, Optional, Type, Tuple, TypeVar, Union +from mmap import mmap +from types import TracebackType + +_bytearray_like = Union[bytearray, mmap] + +DEFAULT_BUFFER_SIZE: int + +class BlockingIOError(IOError): + characters_written: int + +class UnsupportedOperation(ValueError, IOError): ... + +_T = TypeVar("_T") + +class _IOBase(BinaryIO): + @property + def closed(self) -> bool: ... + def _checkClosed(self) -> None: ... + def _checkReadable(self) -> None: ... + def _checkSeekable(self) -> None: ... + def _checkWritable(self) -> None: ... + # All these methods are concrete here (you can instantiate this) + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[Any]) -> bool: ... + def __iter__(self: _T) -> _T: ... + # The parameter type of writelines[s]() is determined by that of write(): + def writelines(self, lines: Iterable[bytes]) -> None: ... + # The return type of readline[s]() and next() is determined by that of read(): + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def next(self) -> bytes: ... + # These don't actually exist but we need to pretend that it does + # so that this class is concrete. + def write(self, s: bytes) -> int: ... + def read(self, n: int = ...) -> bytes: ... + +class _BufferedIOBase(_IOBase): + def read1(self, n: int) -> bytes: ... + def read(self, size: int = ...) -> bytes: ... + def readinto(self, buffer: _bytearray_like) -> int: ... + def write(self, s: bytes) -> int: ... + def detach(self) -> _IOBase: ... + +class BufferedRWPair(_BufferedIOBase): + def __init__(self, reader: _RawIOBase, writer: _RawIOBase, + buffer_size: int = ..., max_buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + def __enter__(self) -> BufferedRWPair: ... + +class BufferedRandom(_BufferedIOBase): + mode: str + name: str + raw: _IOBase + def __init__(self, raw: _IOBase, + buffer_size: int = ..., + max_buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + +class BufferedReader(_BufferedIOBase): + mode: str + name: str + raw: _IOBase + def __init__(self, raw: _IOBase, buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + +class BufferedWriter(_BufferedIOBase): + name: str + raw: _IOBase + mode: str + def __init__(self, raw: _IOBase, + buffer_size: int = ..., + max_buffer_size: int = ...) -> None: ... + +class BytesIO(_BufferedIOBase): + def __init__(self, initial_bytes: bytes = ...) -> None: ... + def __setstate__(self, tuple) -> None: ... + def __getstate__(self) -> tuple: ... + # BytesIO does not contain a "name" field. This workaround is necessary + # to allow BytesIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> bytes: ... + def write(self, s: bytes) -> int: ... + def writelines(self, lines: Iterable[bytes]) -> None: ... + def read1(self, size: int) -> bytes: ... + def next(self) -> bytes: ... + +class _RawIOBase(_IOBase): + def readall(self) -> str: ... + def read(self, n: int = ...) -> str: ... + +class FileIO(_RawIOBase, BytesIO): + mode: str + closefd: bool + def __init__(self, file: Union[str, int], mode: str = ..., closefd: bool = ...) -> None: ... + def readinto(self, buffer: _bytearray_like) -> int: ... + def write(self, pbuf: str) -> int: ... + +class IncrementalNewlineDecoder(object): + newlines: Union[str, unicode] + def __init__(self, decoder, translate, z=...) -> None: ... + def decode(self, input, final) -> Any: ... + def getstate(self) -> Tuple[Any, int]: ... + def setstate(self, state: Tuple[Any, int]) -> None: ... + def reset(self) -> None: ... + + +# Note: In the actual _io.py, _TextIOBase inherits from _IOBase. +class _TextIOBase(TextIO): + errors: Optional[str] + # TODO: On _TextIOBase, this is always None. But it's unicode/bytes in subclasses. + newlines: Union[None, unicode, bytes] + encoding: str + @property + def closed(self) -> bool: ... + def _checkClosed(self) -> None: ... + def _checkReadable(self) -> None: ... + def _checkSeekable(self) -> None: ... + def _checkWritable(self) -> None: ... + def close(self) -> None: ... + def detach(self) -> IO: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def next(self) -> unicode: ... + def read(self, size: int = ...) -> unicode: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> unicode: ... + def readlines(self, hint: int = ...) -> list[unicode]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, pbuf: unicode) -> int: ... + def writelines(self, lines: Iterable[unicode]) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[Any]) -> bool: ... + def __iter__(self: _T) -> _T: ... + +class StringIO(_TextIOBase): + line_buffering: bool + def __init__(self, + initial_value: Optional[unicode] = ..., + newline: Optional[unicode] = ...) -> None: ... + def __setstate__(self, state: tuple) -> None: ... + def __getstate__(self) -> tuple: ... + # StringIO does not contain a "name" field. This workaround is necessary + # to allow StringIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> unicode: ... + +class TextIOWrapper(_TextIOBase): + name: str + line_buffering: bool + buffer: BinaryIO + _CHUNK_SIZE: int + def __init__(self, buffer: IO, + encoding: Optional[Text] = ..., + errors: Optional[Text] = ..., + newline: Optional[Text] = ..., + line_buffering: bool = ..., + write_through: bool = ...) -> None: ... + +def open(file: Union[str, unicode, int], + mode: Text = ..., + buffering: int = ..., + encoding: Optional[Text] = ..., + errors: Optional[Text] = ..., + newline: Optional[Text] = ..., + closefd: bool = ...) -> IO[Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_json.pyi new file mode 100644 index 0000000..028b7b2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_json.pyi @@ -0,0 +1,17 @@ +"""Stub file for the '_json' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any, List, Tuple, Dict, Generic + +def encode_basestring_ascii(*args, **kwargs) -> str: + raise TypeError() + +def scanstring(a, b, *args, **kwargs) -> tuple: + raise TypeError() + + +class Encoder(object): ... + +class Scanner(object): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_md5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_md5.pyi new file mode 100644 index 0000000..96111b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_md5.pyi @@ -0,0 +1,13 @@ +blocksize: int +digest_size: int + +class MD5Type(object): + name: str + block_size: int + digest_size: int + def copy(self) -> MD5Type: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +def new(arg: str = ...) -> MD5Type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha.pyi new file mode 100644 index 0000000..7c47256 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha.pyi @@ -0,0 +1,15 @@ +blocksize: int +block_size: int +digest_size: int + +class sha(object): # not actually exposed + name: str + block_size: int + digest_size: int + digestsize: int + def copy(self) -> sha: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +def new(arg: str = ...) -> sha: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha256.pyi new file mode 100644 index 0000000..b6eb47d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha256.pyi @@ -0,0 +1,23 @@ +from typing import Optional + +class sha224(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha224: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +class sha256(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha256: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha512.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha512.pyi new file mode 100644 index 0000000..b1ca9ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sha512.pyi @@ -0,0 +1,23 @@ +from typing import Optional + +class sha384(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha384: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +class sha512(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha512: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_socket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_socket.pyi new file mode 100644 index 0000000..8d02bde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_socket.pyi @@ -0,0 +1,287 @@ +from typing import Tuple, Union, IO, Any, Optional, overload + +AF_APPLETALK: int +AF_ASH: int +AF_ATMPVC: int +AF_ATMSVC: int +AF_AX25: int +AF_BLUETOOTH: int +AF_BRIDGE: int +AF_DECnet: int +AF_ECONET: int +AF_INET: int +AF_INET6: int +AF_IPX: int +AF_IRDA: int +AF_KEY: int +AF_LLC: int +AF_NETBEUI: int +AF_NETLINK: int +AF_NETROM: int +AF_PACKET: int +AF_PPPOX: int +AF_ROSE: int +AF_ROUTE: int +AF_SECURITY: int +AF_SNA: int +AF_TIPC: int +AF_UNIX: int +AF_UNSPEC: int +AF_WANPIPE: int +AF_X25: int +AI_ADDRCONFIG: int +AI_ALL: int +AI_CANONNAME: int +AI_NUMERICHOST: int +AI_NUMERICSERV: int +AI_PASSIVE: int +AI_V4MAPPED: int +BDADDR_ANY: str +BDADDR_LOCAL: str +BTPROTO_HCI: int +BTPROTO_L2CAP: int +BTPROTO_RFCOMM: int +BTPROTO_SCO: int +EAI_ADDRFAMILY: int +EAI_AGAIN: int +EAI_BADFLAGS: int +EAI_FAIL: int +EAI_FAMILY: int +EAI_MEMORY: int +EAI_NODATA: int +EAI_NONAME: int +EAI_OVERFLOW: int +EAI_SERVICE: int +EAI_SOCKTYPE: int +EAI_SYSTEM: int +EBADF: int +EINTR: int +HCI_DATA_DIR: int +HCI_FILTER: int +HCI_TIME_STAMP: int +INADDR_ALLHOSTS_GROUP: int +INADDR_ANY: int +INADDR_BROADCAST: int +INADDR_LOOPBACK: int +INADDR_MAX_LOCAL_GROUP: int +INADDR_NONE: int +INADDR_UNSPEC_GROUP: int +IPPORT_RESERVED: int +IPPORT_USERRESERVED: int +IPPROTO_AH: int +IPPROTO_DSTOPTS: int +IPPROTO_EGP: int +IPPROTO_ESP: int +IPPROTO_FRAGMENT: int +IPPROTO_GRE: int +IPPROTO_HOPOPTS: int +IPPROTO_ICMP: int +IPPROTO_ICMPV6: int +IPPROTO_IDP: int +IPPROTO_IGMP: int +IPPROTO_IP: int +IPPROTO_IPIP: int +IPPROTO_IPV6: int +IPPROTO_NONE: int +IPPROTO_PIM: int +IPPROTO_PUP: int +IPPROTO_RAW: int +IPPROTO_ROUTING: int +IPPROTO_RSVP: int +IPPROTO_TCP: int +IPPROTO_TP: int +IPPROTO_UDP: int +IPV6_CHECKSUM: int +IPV6_DSTOPTS: int +IPV6_HOPLIMIT: int +IPV6_HOPOPTS: int +IPV6_JOIN_GROUP: int +IPV6_LEAVE_GROUP: int +IPV6_MULTICAST_HOPS: int +IPV6_MULTICAST_IF: int +IPV6_MULTICAST_LOOP: int +IPV6_NEXTHOP: int +IPV6_PKTINFO: int +IPV6_RECVDSTOPTS: int +IPV6_RECVHOPLIMIT: int +IPV6_RECVHOPOPTS: int +IPV6_RECVPKTINFO: int +IPV6_RECVRTHDR: int +IPV6_RECVTCLASS: int +IPV6_RTHDR: int +IPV6_RTHDRDSTOPTS: int +IPV6_RTHDR_TYPE_0: int +IPV6_TCLASS: int +IPV6_UNICAST_HOPS: int +IPV6_V6ONLY: int +IP_ADD_MEMBERSHIP: int +IP_DEFAULT_MULTICAST_LOOP: int +IP_DEFAULT_MULTICAST_TTL: int +IP_DROP_MEMBERSHIP: int +IP_HDRINCL: int +IP_MAX_MEMBERSHIPS: int +IP_MULTICAST_IF: int +IP_MULTICAST_LOOP: int +IP_MULTICAST_TTL: int +IP_OPTIONS: int +IP_RECVOPTS: int +IP_RECVRETOPTS: int +IP_RETOPTS: int +IP_TOS: int +IP_TTL: int +MSG_CTRUNC: int +MSG_DONTROUTE: int +MSG_DONTWAIT: int +MSG_EOR: int +MSG_OOB: int +MSG_PEEK: int +MSG_TRUNC: int +MSG_WAITALL: int +MethodType: type +NETLINK_DNRTMSG: int +NETLINK_FIREWALL: int +NETLINK_IP6_FW: int +NETLINK_NFLOG: int +NETLINK_ROUTE: int +NETLINK_USERSOCK: int +NETLINK_XFRM: int +NI_DGRAM: int +NI_MAXHOST: int +NI_MAXSERV: int +NI_NAMEREQD: int +NI_NOFQDN: int +NI_NUMERICHOST: int +NI_NUMERICSERV: int +PACKET_BROADCAST: int +PACKET_FASTROUTE: int +PACKET_HOST: int +PACKET_LOOPBACK: int +PACKET_MULTICAST: int +PACKET_OTHERHOST: int +PACKET_OUTGOING: int +PF_PACKET: int +SHUT_RD: int +SHUT_RDWR: int +SHUT_WR: int +SOCK_DGRAM: int +SOCK_RAW: int +SOCK_RDM: int +SOCK_SEQPACKET: int +SOCK_STREAM: int +SOL_HCI: int +SOL_IP: int +SOL_SOCKET: int +SOL_TCP: int +SOL_TIPC: int +SOL_UDP: int +SOMAXCONN: int +SO_ACCEPTCONN: int +SO_BROADCAST: int +SO_DEBUG: int +SO_DONTROUTE: int +SO_ERROR: int +SO_KEEPALIVE: int +SO_LINGER: int +SO_OOBINLINE: int +SO_RCVBUF: int +SO_RCVLOWAT: int +SO_RCVTIMEO: int +SO_REUSEADDR: int +SO_REUSEPORT: int +SO_SNDBUF: int +SO_SNDLOWAT: int +SO_SNDTIMEO: int +SO_TYPE: int +SSL_ERROR_EOF: int +SSL_ERROR_INVALID_ERROR_CODE: int +SSL_ERROR_SSL: int +SSL_ERROR_SYSCALL: int +SSL_ERROR_WANT_CONNECT: int +SSL_ERROR_WANT_READ: int +SSL_ERROR_WANT_WRITE: int +SSL_ERROR_WANT_X509_LOOKUP: int +SSL_ERROR_ZERO_RETURN: int +TCP_CORK: int +TCP_DEFER_ACCEPT: int +TCP_INFO: int +TCP_KEEPCNT: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_LINGER2: int +TCP_MAXSEG: int +TCP_NODELAY: int +TCP_QUICKACK: int +TCP_SYNCNT: int +TCP_WINDOW_CLAMP: int +TIPC_ADDR_ID: int +TIPC_ADDR_NAME: int +TIPC_ADDR_NAMESEQ: int +TIPC_CFG_SRV: int +TIPC_CLUSTER_SCOPE: int +TIPC_CONN_TIMEOUT: int +TIPC_CRITICAL_IMPORTANCE: int +TIPC_DEST_DROPPABLE: int +TIPC_HIGH_IMPORTANCE: int +TIPC_IMPORTANCE: int +TIPC_LOW_IMPORTANCE: int +TIPC_MEDIUM_IMPORTANCE: int +TIPC_NODE_SCOPE: int +TIPC_PUBLISHED: int +TIPC_SRC_DROPPABLE: int +TIPC_SUBSCR_TIMEOUT: int +TIPC_SUB_CANCEL: int +TIPC_SUB_PORTS: int +TIPC_SUB_SERVICE: int +TIPC_TOP_SRV: int +TIPC_WAIT_FOREVER: int +TIPC_WITHDRAWN: int +TIPC_ZONE_SCOPE: int + +# PyCapsule +CAPI: Any + +has_ipv6: bool + +class error(IOError): ... +class gaierror(error): ... +class timeout(error): ... + +class SocketType(object): + family: int + type: int + proto: int + timeout: float + + def __init__(self, family: int = ..., type: int = ..., proto: int = ...) -> None: ... + def accept(self) -> Tuple[SocketType, tuple]: ... + def bind(self, address: tuple) -> None: ... + def close(self) -> None: ... + def connect(self, address: tuple) -> None: + raise gaierror + raise timeout + def connect_ex(self, address: tuple) -> int: ... + def dup(self) -> SocketType: ... + def fileno(self) -> int: ... + def getpeername(self) -> tuple: ... + def getsockname(self) -> tuple: ... + def getsockopt(self, level: int, option: int, buffersize: int = ...) -> str: ... + def gettimeout(self) -> float: ... + def listen(self, backlog: int) -> None: + raise error + def makefile(self, mode: str = ..., buffersize: int = ...) -> IO[Any]: ... + def recv(self, buffersize: int, flags: int = ...) -> str: ... + def recv_into(self, buffer: bytearray, nbytes: int = ..., flags: int = ...) -> int: ... + def recvfrom(self, buffersize: int, flags: int = ...) -> tuple: + raise error + def recvfrom_into(self, buffer: bytearray, nbytes: int = ..., + flags: int = ...) -> int: ... + def send(self, data: str, flags: int = ...) -> int: ... + def sendall(self, data: str, flags: int = ...) -> None: ... + @overload + def sendto(self, data: str, address: tuple) -> int: ... + @overload + def sendto(self, data: str, flags: int, address: tuple) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def setsockopt(self, level: int, option: int, value: Union[int, str]) -> None: ... + def settimeout(self, value: Optional[float]) -> None: ... + def shutdown(self, flag: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sre.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sre.pyi new file mode 100644 index 0000000..0692b4c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_sre.pyi @@ -0,0 +1,53 @@ +"""Stub file for the '_sre' module.""" + +from typing import Any, Union, Iterable, Optional, Mapping, Sequence, Dict, List, Tuple, overload + +CODESIZE: int +MAGIC: int +MAXREPEAT: long +copyright: str + +class SRE_Match(object): + def start(self, group: int = ...) -> int: + raise IndexError() + def end(self, group: int = ...) -> int: + raise IndexError() + def expand(self, s: str) -> Any: ... + @overload + def group(self) -> str: ... + @overload + def group(self, group: int = ...) -> Optional[str]: ... + def groupdict(self) -> Dict[int, Optional[str]]: ... + def groups(self) -> Tuple[Optional[str], ...]: ... + def span(self) -> Tuple[int, int]: + raise IndexError() + +class SRE_Scanner(object): + pattern: str + def match(self) -> SRE_Match: ... + def search(self) -> SRE_Match: ... + +class SRE_Pattern(object): + pattern: str + flags: int + groups: int + groupindex: Mapping[str, int] + indexgroup: Sequence[int] + def findall(self, source: str, pos: int = ..., endpos: int = ...) -> List[Union[tuple, str]]: ... + def finditer(self, source: str, pos: int = ..., endpos: int = ...) -> Iterable[Union[tuple, str]]: ... + def match(self, pattern, pos: int = ..., endpos: int = ...) -> SRE_Match: ... + def scanner(self, s: str, start: int = ..., end: int = ...) -> SRE_Scanner: ... + def search(self, pattern, pos: int = ..., endpos: int = ...) -> SRE_Match: ... + def split(self, source: str, maxsplit: int = ...) -> List[Optional[str]]: ... + def sub(self, repl: str, string: str, count: int = ...) -> tuple: ... + def subn(self, repl: str, string: str, count: int = ...) -> tuple: ... + +def compile(pattern: str, flags: int, code: List[int], + groups: int = ..., + groupindex: Mapping[str, int] = ..., + indexgroup: Sequence[int] = ...) -> SRE_Pattern: + raise OverflowError() + +def getcodesize() -> int: ... + +def getlower(a: int, b: int) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_struct.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_struct.pyi new file mode 100644 index 0000000..49f44f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_struct.pyi @@ -0,0 +1,22 @@ +"""Stub file for the '_struct' module.""" + +from typing import Any, AnyStr, Tuple + +class error(Exception): ... + +class Struct(object): + size: int + format: str + + def __init__(self, fmt: str) -> None: ... + def pack_into(self, buffer: bytearray, offset: int, obj: Any) -> None: ... + def pack(self, *args) -> str: ... + def unpack(self, s: str) -> Tuple[Any, ...]: ... + def unpack_from(self, buffer: bytearray, offset: int = ...) -> Tuple[Any, ...]: ... + +def _clearcache() -> None: ... +def calcsize(fmt: str) -> int: ... +def pack(fmt: AnyStr, obj: Any) -> str: ... +def pack_into(fmt: AnyStr, buffer: bytearray, offset: int, obj: Any) -> None: ... +def unpack(fmt: AnyStr, data: str) -> Tuple[Any, ...]: ... +def unpack_from(fmt: AnyStr, buffer: bytearray, offset: int = ...) -> Tuple[Any, ...]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_symtable.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_symtable.pyi new file mode 100644 index 0000000..fbf5424 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_symtable.pyi @@ -0,0 +1,39 @@ +from typing import List, Dict + +CELL: int +DEF_BOUND: int +DEF_FREE: int +DEF_FREE_CLASS: int +DEF_GLOBAL: int +DEF_IMPORT: int +DEF_LOCAL: int +DEF_PARAM: int +FREE: int +GLOBAL_EXPLICIT: int +GLOBAL_IMPLICIT: int +LOCAL: int +OPT_BARE_EXEC: int +OPT_EXEC: int +OPT_IMPORT_STAR: int +SCOPE_MASK: int +SCOPE_OFF: int +TYPE_CLASS: int +TYPE_FUNCTION: int +TYPE_MODULE: int +USE: int + +class _symtable_entry(object): + ... + +class symtable(object): + children: List[_symtable_entry] + id: int + lineno: int + name: str + nested: int + optimized: int + symbols: Dict[str, int] + type: int + varnames: List[str] + + def __init__(self, src: str, filename: str, startstr: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi new file mode 100644 index 0000000..512bf58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi @@ -0,0 +1,14 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/_threading_local.py +from typing import Any, List + +__all__: List[str] + +class _localbase(object): ... + +class local(_localbase): + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + def __del__(self) -> None: ... + +def _patch(self: local) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_warnings.pyi new file mode 100644 index 0000000..9609faa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/_warnings.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Optional, Type + +default_action: str +filters: List[tuple] +once_registry: dict + +def warn(message: Warning, category: Optional[Type[Warning]] = ..., stacklevel: int = ...) -> None: ... +def warn_explicit(message: Warning, category: Optional[Type[Warning]], + filename: str, lineno: int, + module: Any = ..., registry: dict = ..., + module_globals: dict = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/abc.pyi new file mode 100644 index 0000000..746f530 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/abc.pyi @@ -0,0 +1,29 @@ +from typing import Any, Dict, Set, Tuple, Type +import _weakrefset + +# NOTE: mypy has special processing for ABCMeta and abstractmethod. + +def abstractmethod(funcobj: Any) -> Any: ... + +class ABCMeta(type): + # TODO: FrozenSet + __abstractmethods__: Set[Any] + _abc_cache: _weakrefset.WeakSet + _abc_invalidation_counter: int + _abc_negative_cache: _weakrefset.WeakSet + _abc_negative_cache_version: int + _abc_registry: _weakrefset.WeakSet + def __init__(self, name: str, bases: Tuple[type, ...], namespace: Dict[Any, Any]) -> None: ... + def __instancecheck__(cls: ABCMeta, instance: Any) -> Any: ... + def __subclasscheck__(cls: ABCMeta, subclass: Any) -> Any: ... + def _dump_registry(cls: ABCMeta, *args: Any, **kwargs: Any) -> None: ... + def register(cls: ABCMeta, subclass: Type[Any]) -> None: ... + +# TODO: The real abc.abstractproperty inherits from "property". +class abstractproperty(object): + def __new__(cls, func: Any) -> Any: ... + __isabstractmethod__: bool + doc: Any + fdel: Any + fget: Any + fset: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ast.pyi new file mode 100644 index 0000000..c5ffd65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/ast.pyi @@ -0,0 +1,28 @@ +# Python 2.7 ast + +# Rename typing to _typing, as not to conflict with typing imported +# from _ast below when loaded in an unorthodox way by the Dropbox +# internal Bazel integration. +import typing as _typing +from typing import Any, Iterator, Optional, Union + +from _ast import * +from _ast import AST, Module + +def parse(source: Union[str, unicode], filename: Union[str, unicode] = ..., mode: Union[str, unicode] = ...) -> Module: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[_typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, unicode, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> Any: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> Optional[AST]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/atexit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/atexit.pyi new file mode 100644 index 0000000..13d2602 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/atexit.pyi @@ -0,0 +1,5 @@ +from typing import TypeVar, Any + +_FT = TypeVar('_FT') + +def register(func: _FT, *args: Any, **kargs: Any) -> _FT: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cPickle.pyi new file mode 100644 index 0000000..0421c50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cPickle.pyi @@ -0,0 +1,32 @@ +from typing import Any, IO, List + +HIGHEST_PROTOCOL: int +compatible_formats: List[str] +format_version: str + +class Pickler: + def __init__(self, file: IO[str], protocol: int = ...) -> None: ... + + def dump(self, obj: Any) -> None: ... + + def clear_memo(self) -> None: ... + + +class Unpickler: + def __init__(self, file: IO[str]) -> None: ... + + def load(self) -> Any: ... + + def noload(self) -> Any: ... + + +def dump(obj: Any, file: IO[str], protocol: int = ...) -> None: ... +def dumps(obj: Any, protocol: int = ...) -> str: ... +def load(file: IO[str]) -> Any: ... +def loads(str: str) -> Any: ... + +class PickleError(Exception): ... +class UnpicklingError(PickleError): ... +class BadPickleGet(UnpicklingError): ... +class PicklingError(PickleError): ... +class UnpickleableError(PicklingError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi new file mode 100644 index 0000000..380e3a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi @@ -0,0 +1,54 @@ +# Stubs for cStringIO (Python 2.7) +# See https://docs.python.org/2/library/stringio.html + +from abc import ABCMeta +from typing import overload, IO, List, Iterable, Iterator, Optional, Union +from types import TracebackType + +# TODO the typing.IO[] generics should be split into input and output. + +# This class isn't actually abstract, but you can't instantiate it +# directly, so we might as well treat it as abstract in the stub. +class InputType(IO[str], Iterator[str], metaclass=ABCMeta): + def getvalue(self) -> str: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, size: int = ...) -> str: ... + def readline(self, size: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def __iter__(self) -> InputType: ... + def next(self) -> str: ... + def reset(self) -> None: ... + + +class OutputType(IO[str], Iterator[str], metaclass=ABCMeta): + @property + def softspace(self) -> int: ... + def getvalue(self) -> str: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, size: int = ...) -> str: ... + def readline(self, size: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def __iter__(self) -> OutputType: ... + def next(self) -> str: ... + def reset(self) -> None: ... + def write(self, b: Union[str, unicode]) -> int: ... + def writelines(self, lines: Iterable[Union[str, unicode]]) -> None: ... + +@overload +def StringIO() -> OutputType: ... +@overload +def StringIO(s: str) -> InputType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/collections.pyi new file mode 100644 index 0000000..0daa118 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/collections.pyi @@ -0,0 +1,126 @@ +# These are not exported. +from typing import Dict, Generic, TypeVar, Tuple, overload, Type, Optional, List, Union, Reversible + +# These are exported. +from typing import ( + Callable as Callable, + Container as Container, + Hashable as Hashable, + ItemsView as ItemsView, + Iterable as Iterable, + Iterator as Iterator, + KeysView as KeysView, + Mapping as Mapping, + MappingView as MappingView, + MutableMapping as MutableMapping, + MutableSequence as MutableSequence, + MutableSet as MutableSet, + Sequence as Sequence, + AbstractSet as Set, + Sized as Sized, + ValuesView as ValuesView, +) + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +# namedtuple is special-cased in the type checker; the initializer is ignored. +def namedtuple(typename: Union[str, unicode], field_names: Union[str, unicode, Iterable[Union[str, unicode]]], + verbose: bool = ..., rename: bool = ...) -> Type[tuple]: ... + +class deque(Sized, Iterable[_T], Reversible[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ..., + maxlen: int = ...) -> None: ... + @property + def maxlen(self) -> Optional[int]: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + def count(self, x: _T) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def extendleft(self, iterable: Iterable[_T]) -> None: ... + def pop(self) -> _T: ... + def popleft(self) -> _T: ... + def remove(self, value: _T) -> None: ... + def reverse(self) -> None: ... + def rotate(self, n: int) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + def __getitem__(self, i: int) -> _T: ... + def __setitem__(self, i: int, x: _T) -> None: ... + def __contains__(self, o: _T) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __iadd__(self: _S, iterable: Iterable[_T]) -> _S: ... + +_CounterT = TypeVar('_CounterT', bound=Counter) + +class Counter(Dict[_T, int], Generic[_T]): + @overload + def __init__(self, **kwargs: int) -> None: ... + @overload + def __init__(self, mapping: Mapping[_T, int]) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + def copy(self: _CounterT) -> _CounterT: ... + def elements(self) -> Iterator[_T]: ... + def most_common(self, n: Optional[int] = ...) -> List[Tuple[_T, int]]: ... + @overload + def subtract(self, __mapping: Mapping[_T, int]) -> None: ... + @overload + def subtract(self, iterable: Iterable[_T]) -> None: ... + # The Iterable[Tuple[...]] argument type is not actually desirable + # (the tuples will be added as keys, breaking type safety) but + # it's included so that the signature is compatible with + # Dict.update. Not sure if we should use '# type: ignore' instead + # and omit the type from the union. + @overload + def update(self, __m: Mapping[_T, int], **kwargs: int) -> None: ... + @overload + def update(self, __m: Union[Iterable[_T], Iterable[Tuple[_T, int]]], **kwargs: int) -> None: ... + @overload + def update(self, **kwargs: int) -> None: ... + + def __add__(self, other: Counter[_T]) -> Counter[_T]: ... + def __sub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __and__(self, other: Counter[_T]) -> Counter[_T]: ... + def __or__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iadd__(self, other: Counter[_T]) -> Counter[_T]: ... + def __isub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iand__(self, other: Counter[_T]) -> Counter[_T]: ... + def __ior__(self, other: Counter[_T]) -> Counter[_T]: ... + +_OrderedDictT = TypeVar('_OrderedDictT', bound=OrderedDict) + +class OrderedDict(Dict[_KT, _VT], Reversible[_KT], Generic[_KT, _VT]): + def popitem(self, last: bool = ...) -> Tuple[_KT, _VT]: ... + def copy(self: _OrderedDictT) -> _OrderedDictT: ... + def __reversed__(self) -> Iterator[_KT]: ... + +_DefaultDictT = TypeVar('_DefaultDictT', bound=defaultdict) + +class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): + default_factory: Callable[[], _VT] + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + def __missing__(self, key: _KT) -> _VT: ... + def copy(self: _DefaultDictT) -> _DefaultDictT: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/commands.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/commands.pyi new file mode 100644 index 0000000..e321f08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/commands.pyi @@ -0,0 +1,12 @@ +from typing import overload, AnyStr, Text, Tuple + +def getstatus(file: Text) -> str: ... +def getoutput(cmd: Text) -> str: ... +def getstatusoutput(cmd: Text) -> Tuple[int, str]: ... + +@overload +def mk2arg(head: bytes, x: bytes) -> bytes: ... +@overload +def mk2arg(head: Text, x: Text) -> Text: ... + +def mkarg(x: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/compileall.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/compileall.pyi new file mode 100644 index 0000000..c3e861e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/compileall.pyi @@ -0,0 +1,10 @@ +# Stubs for compileall (Python 2) + +from typing import Optional, Pattern, Union + +_Path = Union[str, bytes] + +# rx can be any object with a 'search' method; once we have Protocols we can change the type +def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ...) -> int: ... +def compile_file(fullname: _Path, ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ...) -> int: ... +def compile_path(skip_curdir: bool = ..., maxlevels: int = ..., force: bool = ..., quiet: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cookielib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cookielib.pyi new file mode 100644 index 0000000..5bc4781 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/cookielib.pyi @@ -0,0 +1,110 @@ +from typing import Any, Optional + +class Cookie: + version: Any + name: Any + value: Any + port: Any + port_specified: Any + domain: Any + domain_specified: Any + domain_initial_dot: Any + path: Any + path_specified: Any + secure: Any + expires: Any + discard: Any + comment: Any + comment_url: Any + rfc2109: Any + def __init__(self, version, name, value, port, port_specified, domain, domain_specified, domain_initial_dot, path, + path_specified, secure, expires, discard, comment, comment_url, rest, rfc2109: bool = ...): ... + def has_nonstandard_attr(self, name): ... + def get_nonstandard_attr(self, name, default: Optional[Any] = ...): ... + def set_nonstandard_attr(self, name, value): ... + def is_expired(self, now: Optional[Any] = ...): ... + +class CookiePolicy: + def set_ok(self, cookie, request): ... + def return_ok(self, cookie, request): ... + def domain_return_ok(self, domain, request): ... + def path_return_ok(self, path, request): ... + +class DefaultCookiePolicy(CookiePolicy): + DomainStrictNoDots: Any + DomainStrictNonDomain: Any + DomainRFC2965Match: Any + DomainLiberal: Any + DomainStrict: Any + netscape: Any + rfc2965: Any + rfc2109_as_netscape: Any + hide_cookie2: Any + strict_domain: Any + strict_rfc2965_unverifiable: Any + strict_ns_unverifiable: Any + strict_ns_domain: Any + strict_ns_set_initial_dollar: Any + strict_ns_set_path: Any + def __init__(self, blocked_domains: Optional[Any] = ..., allowed_domains: Optional[Any] = ..., netscape: bool = ..., + rfc2965: bool = ..., rfc2109_as_netscape: Optional[Any] = ..., hide_cookie2: bool = ..., + strict_domain: bool = ..., strict_rfc2965_unverifiable: bool = ..., strict_ns_unverifiable: bool = ..., + strict_ns_domain=..., strict_ns_set_initial_dollar: bool = ..., strict_ns_set_path: bool = ...): ... + def blocked_domains(self): ... + def set_blocked_domains(self, blocked_domains): ... + def is_blocked(self, domain): ... + def allowed_domains(self): ... + def set_allowed_domains(self, allowed_domains): ... + def is_not_allowed(self, domain): ... + def set_ok(self, cookie, request): ... + def set_ok_version(self, cookie, request): ... + def set_ok_verifiability(self, cookie, request): ... + def set_ok_name(self, cookie, request): ... + def set_ok_path(self, cookie, request): ... + def set_ok_domain(self, cookie, request): ... + def set_ok_port(self, cookie, request): ... + def return_ok(self, cookie, request): ... + def return_ok_version(self, cookie, request): ... + def return_ok_verifiability(self, cookie, request): ... + def return_ok_secure(self, cookie, request): ... + def return_ok_expires(self, cookie, request): ... + def return_ok_port(self, cookie, request): ... + def return_ok_domain(self, cookie, request): ... + def domain_return_ok(self, domain, request): ... + def path_return_ok(self, path, request): ... + +class Absent: ... + +class CookieJar: + non_word_re: Any + quote_re: Any + strict_domain_re: Any + domain_re: Any + dots_re: Any + magic_re: Any + def __init__(self, policy: Optional[Any] = ...): ... + def set_policy(self, policy): ... + def add_cookie_header(self, request): ... + def make_cookies(self, response, request): ... + def set_cookie_if_ok(self, cookie, request): ... + def set_cookie(self, cookie): ... + def extract_cookies(self, response, request): ... + def clear(self, domain: Optional[Any] = ..., path: Optional[Any] = ..., name: Optional[Any] = ...): ... + def clear_session_cookies(self): ... + def clear_expired_cookies(self): ... + def __iter__(self): ... + def __len__(self): ... + +class LoadError(IOError): ... + +class FileCookieJar(CookieJar): + filename: Any + delayload: Any + def __init__(self, filename: Optional[Any] = ..., delayload: bool = ..., policy: Optional[Any] = ...): ... + def save(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + def load(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + def revert(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + +MozillaCookieJar = FileCookieJar +LWPCookieJar = FileCookieJar +def lwp_cookie_str(cookie: Cookie) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dircache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dircache.pyi new file mode 100644 index 0000000..ac6732b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dircache.pyi @@ -0,0 +1,10 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/dircache.py + +from typing import List, MutableSequence, Text, Union + +def reset() -> None: ... +def listdir(path: Text) -> List[str]: ... + +opendir = listdir + +def annotate(head: Text, list: Union[MutableSequence[str], MutableSequence[Text], MutableSequence[Union[str, Text]]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi new file mode 100644 index 0000000..97e4a29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi @@ -0,0 +1,5 @@ +# Stubs for emxccompiler + +from distutils.unixccompiler import UnixCCompiler + +class EMXCCompiler(UnixCCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi new file mode 100644 index 0000000..2804100 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple + +class error(Exception): + def __init__(self, *args: Any) -> None: ... + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> None: ... +def exit() -> NoReturn: ... +def get_ident() -> int: ... +def allocate_lock() -> LockType: ... +def stack_size(size: Optional[int] = ...) -> int: ... + +class LockType(object): + locked_status: bool + def __init__(self) -> None: ... + def acquire(self, waitflag: Optional[bool] = ...) -> bool: ... + def __enter__(self, waitflag: Optional[bool] = ...) -> bool: ... + def __exit__(self, typ: Any, val: Any, tb: Any) -> None: ... + def release(self) -> bool: ... + def locked(self) -> bool: ... + +def interrupt_main() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi new file mode 100644 index 0000000..3b05977 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi @@ -0,0 +1,4 @@ +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text, _subtype=..., _charset=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi new file mode 100644 index 0000000..384d956 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi @@ -0,0 +1,6 @@ +from typing import IO, Any, AnyStr + +def message_from_string(s: AnyStr, *args, **kwargs): ... +def message_from_bytes(s: str, *args, **kwargs): ... +def message_from_file(fp: IO[AnyStr], *args, **kwargs): ... +def message_from_binary_file(fp: IO[str], *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi new file mode 100644 index 0000000..424ade7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi @@ -0,0 +1,40 @@ +from typing import Any, Optional + +def parsedate_tz(data): ... +def parsedate(data): ... +def mktime_tz(data): ... +def quote(str): ... + +class AddrlistClass: + specials: Any + pos: Any + LWS: Any + CR: Any + FWS: Any + atomends: Any + phraseends: Any + field: Any + commentlist: Any + def __init__(self, field): ... + def gotonext(self): ... + def getaddrlist(self): ... + def getaddress(self): ... + def getrouteaddr(self): ... + def getaddrspec(self): ... + def getdomain(self): ... + def getdelimited(self, beginchar, endchars, allowcomments: bool = ...): ... + def getquote(self): ... + def getcomment(self): ... + def getdomainliteral(self): ... + def getatom(self, atomends: Optional[Any] = ...): ... + def getphraselist(self): ... + +class AddressList(AddrlistClass): + addresslist: Any + def __init__(self, field): ... + def __len__(self): ... + def __add__(self, other): ... + def __iadd__(self, other): ... + def __sub__(self, other): ... + def __isub__(self, other): ... + def __getitem__(self, index): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi new file mode 100644 index 0000000..f05003b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi @@ -0,0 +1,8 @@ +def base64_len(s: bytes) -> int: ... +def header_encode(header, charset=..., keep_eols=..., maxlinelen=..., eol=...): ... +def encode(s, binary=..., maxlinelen=..., eol=...): ... +body_encode = encode +encodestring = encode +def decode(s, convert_eols=...): ... +body_decode = decode +decodestring = decode diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/charset.pyi new file mode 100644 index 0000000..88b5f88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/charset.pyi @@ -0,0 +1,26 @@ +def add_charset(charset, header_enc=..., body_enc=..., output_charset=...) -> None: ... +def add_alias(alias, canonical) -> None: ... +def add_codec(charset, codecname) -> None: ... + +QP: int # undocumented +BASE64: int # undocumented +SHORTEST: int # undocumented + +class Charset: + input_charset = ... + header_encoding = ... + body_encoding = ... + output_charset = ... + input_codec = ... + output_codec = ... + def __init__(self, input_charset=...) -> None: ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def get_body_encoding(self): ... + def convert(self, s): ... + def to_splittable(self, s): ... + def from_splittable(self, ustr, to_output: bool = ...): ... + def get_output_charset(self): ... + def encoded_header_len(self, s): ... + def header_encode(self, s, convert: bool = ...): ... + def body_encode(self, s, convert: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi new file mode 100644 index 0000000..5670cba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi @@ -0,0 +1,4 @@ +def encode_base64(msg) -> None: ... +def encode_quopri(msg) -> None: ... +def encode_7or8bit(msg) -> None: ... +def encode_noop(msg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi new file mode 100644 index 0000000..51f8259 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi @@ -0,0 +1,18 @@ +class BufferedSubFile: + def __init__(self) -> None: ... + def push_eof_matcher(self, pred) -> None: ... + def pop_eof_matcher(self): ... + def close(self) -> None: ... + def readline(self): ... + def unreadline(self, line) -> None: ... + def push(self, data): ... + def pushlines(self, lines) -> None: ... + def is_closed(self): ... + def __iter__(self): ... + def next(self): ... + + +class FeedParser: + def __init__(self, _factory=...) -> None: ... + def feed(self, data) -> None: ... + def close(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/generator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/generator.pyi new file mode 100644 index 0000000..96cfe2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/generator.pyi @@ -0,0 +1,9 @@ +class Generator: + def __init__(self, outfp, mangle_from_: bool = ..., maxheaderlen: int = ...) -> None: ... + def write(self, s) -> None: ... + def flatten(self, msg, unixfrom: bool = ...) -> None: ... + def clone(self, fp): ... + + +class DecodedGenerator(Generator): + def __init__(self, outfp, mangle_from_: bool = ..., maxheaderlen: int = ..., fmt=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/header.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/header.pyi new file mode 100644 index 0000000..69c9363 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/header.pyi @@ -0,0 +1,11 @@ +def decode_header(header): ... +def make_header(decoded_seq, maxlinelen=..., header_name=..., continuation_ws=...): ... + +class Header: + def __init__(self, s=..., charset=..., maxlinelen=..., header_name=..., continuation_ws=..., + errors=...) -> None: ... + def __unicode__(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def append(self, s, charset=..., errors=...) -> None: ... + def encode(self, splitchars=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi new file mode 100644 index 0000000..48aaf06 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi @@ -0,0 +1,5 @@ +from typing import Generator + +def walk(self) -> Generator: ... +def body_line_iterator(msg, decode: bool = ...) -> Generator: ... +def typed_subpart_iterator(msg, maintype=..., subtype=...) -> Generator: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/message.pyi new file mode 100644 index 0000000..bd3c622 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/message.pyi @@ -0,0 +1,45 @@ +from typing import Generator + +class Message: + preamble = ... + epilogue = ... + defects = ... + def __init__(self): ... + def as_string(self, unixfrom=...): ... + def is_multipart(self) -> bool: ... + def set_unixfrom(self, unixfrom) -> None: ... + def get_unixfrom(self): ... + def attach(self, payload) -> None: ... + def get_payload(self, i=..., decode: bool = ...): ... + def set_payload(self, payload, charset=...) -> None: ... + def set_charset(self, charset): ... + def get_charset(self): ... + def __len__(self): ... + def __getitem__(self, name): ... + def __setitem__(self, name, val) -> None: ... + def __delitem__(self, name) -> None: ... + def __contains__(self, name): ... + def has_key(self, name) -> bool: ... + def keys(self): ... + def values(self): ... + def items(self): ... + def get(self, name, failobj=...): ... + def get_all(self, name, failobj=...): ... + def add_header(self, _name, _value, **_params) -> None: ... + def replace_header(self, _name, _value) -> None: ... + def get_content_type(self): ... + def get_content_maintype(self): ... + def get_content_subtype(self): ... + def get_default_type(self): ... + def set_default_type(self, ctype) -> None: ... + def get_params(self, failobj=..., header=..., unquote: bool = ...): ... + def get_param(self, param, failobj=..., header=..., unquote: bool = ...): ... + def set_param(self, param, value, header=..., requote: bool = ..., charset=..., language=...) -> None: ... + def del_param(self, param, header=..., requote: bool = ...): ... + def set_type(self, type, header=..., requote: bool = ...): ... + def get_filename(self, failobj=...): ... + def get_boundary(self, failobj=...): ... + def set_boundary(self, boundary) -> None: ... + def get_content_charset(self, failobj=...): ... + def get_charsets(self, failobj=...): ... + def walk(self) -> Generator: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi new file mode 100644 index 0000000..99da672 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.application + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEApplication(MIMENonMultipart): + def __init__(self, _data: bytes, _subtype: str = ..., + _encoder: Callable[[MIMEApplication], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi new file mode 100644 index 0000000..406ade1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEAudio(MIMENonMultipart): + def __init__(self, _audiodata, _subtype=..., _encoder=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi new file mode 100644 index 0000000..4bde4f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi @@ -0,0 +1,4 @@ +from email import message + +class MIMEBase(message.Message): + def __init__(self, _maintype, _subtype, **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi new file mode 100644 index 0000000..2dfb098 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEImage(MIMENonMultipart): + def __init__(self, _imagedata, _subtype=..., _encoder=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi new file mode 100644 index 0000000..33552fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEMessage(MIMENonMultipart): + def __init__(self, _msg, _subtype=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi new file mode 100644 index 0000000..0a7d3fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi @@ -0,0 +1,4 @@ +from email.mime.base import MIMEBase + +class MIMEMultipart(MIMEBase): + def __init__(self, _subtype=..., boundary=..., _subparts=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi new file mode 100644 index 0000000..04d130e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi @@ -0,0 +1,4 @@ +from email.mime.base import MIMEBase + +class MIMENonMultipart(MIMEBase): + def attach(self, payload): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi new file mode 100644 index 0000000..3b05977 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi @@ -0,0 +1,4 @@ +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text, _subtype=..., _charset=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/parser.pyi new file mode 100644 index 0000000..4f22828 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/parser.pyi @@ -0,0 +1,10 @@ +from .feedparser import FeedParser as FeedParser # not in __all__ but listed in documentation + +class Parser: + def __init__(self, *args, **kws) -> None: ... + def parse(self, fp, headersonly: bool = ...): ... + def parsestr(self, text, headersonly: bool = ...): ... + +class HeaderParser(Parser): + def parse(self, fp, headersonly: bool = ...): ... + def parsestr(self, text, headersonly: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi new file mode 100644 index 0000000..3f2963c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi @@ -0,0 +1,18 @@ +def header_quopri_check(c): ... +def body_quopri_check(c): ... +def header_quopri_len(s): ... +def body_quopri_len(str): ... +def unquote(s): ... +def quote(c): ... +def header_encode(header, charset: str = ..., keep_eols: bool = ..., maxlinelen: int = ..., eol=...): ... +def encode(body, binary: bool = ..., maxlinelen: int = ..., eol=...): ... + +body_encode = encode +encodestring = encode + +def decode(encoded, eol=...): ... + +body_decode = decode +decodestring = decode + +def header_decode(s): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/utils.pyi new file mode 100644 index 0000000..7b868ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/email/utils.pyi @@ -0,0 +1,19 @@ +from email._parseaddr import AddressList as _AddressList +from email._parseaddr import mktime_tz as mktime_tz +from email._parseaddr import parsedate as _parsedate +from email._parseaddr import parsedate_tz as _parsedate_tz +from quopri import decodestring as _qdecode +from typing import Optional, Any + +def formataddr(pair): ... +def getaddresses(fieldvalues): ... +def formatdate(timeval: Optional[Any] = ..., localtime: bool = ..., usegmt: bool = ...): ... +def make_msgid(idstring: Optional[Any] = ...): ... +def parsedate(data): ... +def parsedate_tz(data): ... +def parseaddr(addr): ... +def unquote(str): ... +def decode_rfc2231(s): ... +def encode_rfc2231(s, charset: Optional[Any] = ..., language: Optional[Any] = ...): ... +def decode_params(params): ... +def collapse_rfc2231_value(value, errors=..., fallback_charset=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi new file mode 100644 index 0000000..2ae6c0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi @@ -0,0 +1,6 @@ +import codecs + +import typing + +def search_function(encoding: str) -> codecs.CodecInfo: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi new file mode 100644 index 0000000..d38bd58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi @@ -0,0 +1,15 @@ +import codecs +from typing import Text, Tuple + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input: Text, final: bool = ...) -> bytes: ... + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input: bytes, errors: str, final: bool) -> Tuple[Text, int]: ... + +class StreamWriter(codecs.StreamWriter): ... +class StreamReader(codecs.StreamReader): ... + +def getregentry() -> codecs.CodecInfo: ... +def encode(input: Text, errors: Text = ...) -> bytes: ... +def decode(input: bytes, errors: Text = ...) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/exceptions.pyi new file mode 100644 index 0000000..6e4bafc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/exceptions.pyi @@ -0,0 +1,48 @@ +from __builtin__ import ArithmeticError as ArithmeticError +from __builtin__ import AssertionError as AssertionError +from __builtin__ import AttributeError as AttributeError +from __builtin__ import BaseException as BaseException +from __builtin__ import BufferError as BufferError +from __builtin__ import BytesWarning as BytesWarning +from __builtin__ import DeprecationWarning as DeprecationWarning +from __builtin__ import EOFError as EOFError +from __builtin__ import EnvironmentError as EnvironmentError +from __builtin__ import Exception as Exception +from __builtin__ import FloatingPointError as FloatingPointError +from __builtin__ import FutureWarning as FutureWarning +from __builtin__ import GeneratorExit as GeneratorExit +from __builtin__ import IOError as IOError +from __builtin__ import ImportError as ImportError +from __builtin__ import ImportWarning as ImportWarning +from __builtin__ import IndentationError as IndentationError +from __builtin__ import IndexError as IndexError +from __builtin__ import KeyError as KeyError +from __builtin__ import KeyboardInterrupt as KeyboardInterrupt +from __builtin__ import LookupError as LookupError +from __builtin__ import MemoryError as MemoryError +from __builtin__ import NameError as NameError +from __builtin__ import NotImplementedError as NotImplementedError +from __builtin__ import OSError as OSError +from __builtin__ import OverflowError as OverflowError +from __builtin__ import PendingDeprecationWarning as PendingDeprecationWarning +from __builtin__ import ReferenceError as ReferenceError +from __builtin__ import RuntimeError as RuntimeError +from __builtin__ import RuntimeWarning as RuntimeWarning +from __builtin__ import StandardError as StandardError +from __builtin__ import StopIteration as StopIteration +from __builtin__ import SyntaxError as SyntaxError +from __builtin__ import SyntaxWarning as SyntaxWarning +from __builtin__ import SystemError as SystemError +from __builtin__ import SystemExit as SystemExit +from __builtin__ import TabError as TabError +from __builtin__ import TypeError as TypeError +from __builtin__ import UnboundLocalError as UnboundLocalError +from __builtin__ import UnicodeError as UnicodeError +from __builtin__ import UnicodeDecodeError as UnicodeDecodeError +from __builtin__ import UnicodeEncodeError as UnicodeEncodeError +from __builtin__ import UnicodeTranslateError as UnicodeTranslateError +from __builtin__ import UnicodeWarning as UnicodeWarning +from __builtin__ import UserWarning as UserWarning +from __builtin__ import ValueError as ValueError +from __builtin__ import Warning as Warning +from __builtin__ import ZeroDivisionError as ZeroDivisionError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fcntl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fcntl.pyi new file mode 100644 index 0000000..5ba64ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fcntl.pyi @@ -0,0 +1,87 @@ +from typing import Any, Union, IO +import io + +FASYNC: int +FD_CLOEXEC: int + +DN_ACCESS: int +DN_ATTRIB: int +DN_CREATE: int +DN_DELETE: int +DN_MODIFY: int +DN_MULTISHOT: int +DN_RENAME: int +F_DUPFD: int +F_EXLCK: int +F_GETFD: int +F_GETFL: int +F_GETLEASE: int +F_GETLK: int +F_GETLK64: int +F_GETOWN: int +F_GETSIG: int +F_NOTIFY: int +F_RDLCK: int +F_SETFD: int +F_SETFL: int +F_SETLEASE: int +F_SETLK: int +F_SETLK64: int +F_SETLKW: int +F_SETLKW64: int +F_SETOWN: int +F_SETSIG: int +F_SHLCK: int +F_UNLCK: int +F_WRLCK: int +I_ATMARK: int +I_CANPUT: int +I_CKBAND: int +I_FDINSERT: int +I_FIND: int +I_FLUSH: int +I_FLUSHBAND: int +I_GETBAND: int +I_GETCLTIME: int +I_GETSIG: int +I_GRDOPT: int +I_GWROPT: int +I_LINK: int +I_LIST: int +I_LOOK: int +I_NREAD: int +I_PEEK: int +I_PLINK: int +I_POP: int +I_PUNLINK: int +I_PUSH: int +I_RECVFD: int +I_SENDFD: int +I_SETCLTIME: int +I_SETSIG: int +I_SRDOPT: int +I_STR: int +I_SWROPT: int +I_UNLINK: int +LOCK_EX: int +LOCK_MAND: int +LOCK_NB: int +LOCK_READ: int +LOCK_RW: int +LOCK_SH: int +LOCK_UN: int +LOCK_WRITE: int + +_ANYFILE = Union[int, IO] + +# TODO All these return either int or bytes depending on the value of +# cmd (not on the type of arg). +def fcntl(fd: _ANYFILE, op: int, arg: Union[int, bytes] = ...) -> Any: ... + +# TODO: arg: int or read-only buffer interface or read-write buffer interface +def ioctl(fd: _ANYFILE, op: int, arg: Union[int, bytes] = ..., + mutate_flag: bool = ...) -> Any: ... + +def flock(fd: _ANYFILE, op: int) -> None: ... +def lockf(fd: _ANYFILE, op: int, length: int = ..., start: int = ..., + whence: int = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi new file mode 100644 index 0000000..e933b7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi @@ -0,0 +1,8 @@ +from typing import AnyStr, Iterable, List, Union + +_EitherStr = Union[str, unicode] + +def fnmatch(filename: _EitherStr, pattern: _EitherStr) -> bool: ... +def fnmatchcase(filename: _EitherStr, pattern: _EitherStr) -> bool: ... +def filter(names: Iterable[AnyStr], pattern: _EitherStr) -> List[AnyStr]: ... +def translate(pattern: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/functools.pyi new file mode 100644 index 0000000..c12af8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/functools.pyi @@ -0,0 +1,101 @@ +# Stubs for functools (Python 2.7) + +# NOTE: These are incomplete! + +from abc import ABCMeta, abstractmethod +from typing import Any, Callable, Generic, Dict, Iterable, Optional, Sequence, Tuple, TypeVar, overload +from collections import namedtuple + +_AnyCallable = Callable[..., Any] + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... + +WRAPPER_ASSIGNMENTS: Sequence[str] +WRAPPER_UPDATES: Sequence[str] + +def update_wrapper(wrapper: _AnyCallable, wrapped: _AnyCallable, assigned: Sequence[str] = ..., + updated: Sequence[str] = ...) -> _AnyCallable: ... +def wraps(wrapped: _AnyCallable, assigned: Sequence[str] = ..., updated: Sequence[str] = ...) -> Callable[[_AnyCallable], _AnyCallable]: ... +def total_ordering(cls: type) -> type: ... +def cmp_to_key(mycmp: Callable[[_T, _T], int]) -> Callable[[_T], Any]: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi new file mode 100644 index 0000000..a9b25b2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi @@ -0,0 +1,14 @@ +from typing import Any + +from itertools import ifilter as filter +from itertools import imap as map +from itertools import izip as zip + + +def ascii(obj: Any) -> str: ... + + +def hex(x: int) -> str: ... + + +def oct(x: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gc.pyi new file mode 100644 index 0000000..cdfae74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gc.pyi @@ -0,0 +1,29 @@ +# Stubs for gc + +from typing import Any, List, Tuple + + +def enable() -> None: ... +def disable() -> None: ... +def isenabled() -> bool: ... +def collect(generation: int = ...) -> int: ... +def set_debug(flags: int) -> None: ... +def get_debug() -> int: ... +def get_objects() -> List[Any]: ... +def set_threshold(threshold0: int, threshold1: int = ..., + threshold2: int = ...) -> None: ... +def get_count() -> Tuple[int, int, int]: ... +def get_threshold() -> Tuple[int, int, int]: ... +def get_referrers(*objs: Any) -> List[Any]: ... +def get_referents(*objs: Any) -> List[Any]: ... +def is_tracked(obj: Any) -> bool: ... + +garbage: List[Any] + +DEBUG_STATS: int +DEBUG_COLLECTABLE: int +DEBUG_UNCOLLECTABLE: int +DEBUG_INSTANCES: int +DEBUG_OBJECTS: int +DEBUG_SAVEALL: int +DEBUG_LEAK: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getopt.pyi new file mode 100644 index 0000000..370d4d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getopt.pyi @@ -0,0 +1,12 @@ +from typing import List, Tuple + +class GetoptError(Exception): + opt: str + msg: str + def __init__(self, msg: str, opt: str = ...) -> None: ... + def __str__(self) -> str: ... + +error = GetoptError + +def getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... +def gnu_getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getpass.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getpass.pyi new file mode 100644 index 0000000..011fc8e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/getpass.pyi @@ -0,0 +1,8 @@ +# Stubs for getpass (Python 2) + +from typing import Any, IO + +class GetPassWarning(UserWarning): ... + +def getpass(prompt: str = ..., stream: IO[Any] = ...) -> str: ... +def getuser() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gettext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gettext.pyi new file mode 100644 index 0000000..c7bfceb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gettext.pyi @@ -0,0 +1,41 @@ +from typing import Any, Container, Dict, IO, List, Optional, Sequence, Type, Union + +def bindtextdomain(domain: str, localedir: str = ...) -> str: ... +def bind_textdomain_codeset(domain: str, codeset: str = ...) -> str: ... +def textdomain(domain: str = ...) -> str: ... +def gettext(message: str) -> str: ... +def lgettext(message: str) -> str: ... +def dgettext(domain: str, message: str) -> str: ... +def ldgettext(domain: str, message: str) -> str: ... +def ngettext(singular: str, plural: str, n: int) -> str: ... +def lngettext(singular: str, plural: str, n: int) -> str: ... +def dngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def ldngettext(domain: str, singular: str, plural: str, n: int) -> str: ... + +class NullTranslations(object): + def __init__(self, fp: IO[str] = ...) -> None: ... + def _parse(self, fp: IO[str]) -> None: ... + def add_fallback(self, fallback: NullTranslations) -> None: ... + def gettext(self, message: str) -> str: ... + def lgettext(self, message: str) -> str: ... + def ugettext(self, message: Union[str, unicode]) -> unicode: ... + def ngettext(self, singular: str, plural: str, n: int) -> str: ... + def lngettext(self, singular: str, plural: str, n: int) -> str: ... + def ungettext(self, singular: Union[str, unicode], plural: Union[str, unicode], n: int) -> unicode: ... + def info(self) -> Dict[str, str]: ... + def charset(self) -> Optional[str]: ... + def output_charset(self) -> Optional[str]: ... + def set_output_charset(self, charset: Optional[str]) -> None: ... + def install(self, unicode: bool = ..., names: Container[str] = ...) -> None: ... + +class GNUTranslations(NullTranslations): + LE_MAGIC: int + BE_MAGIC: int + +def find(domain: str, localedir: Optional[str] = ..., languages: Optional[Sequence[str]] = ..., + all: Any = ...) -> Optional[Union[str, List[str]]]: ... + +def translation(domain: str, localedir: Optional[str] = ..., languages: Optional[Sequence[str]] = ..., + class_: Optional[Type[NullTranslations]] = ..., fallback: bool = ..., codeset: Optional[str] = ...) -> NullTranslations: ... +def install(domain: str, localedir: Optional[str] = ..., unicode: bool = ..., codeset: Optional[str] = ..., + names: Container[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/glob.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/glob.pyi new file mode 100644 index 0000000..5caa166 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/glob.pyi @@ -0,0 +1,7 @@ +from typing import List, Iterator, Union, AnyStr + +def glob(pathname: AnyStr) -> List[AnyStr]: ... +def iglob(pathname: AnyStr) -> Iterator[AnyStr]: ... +def glob1(dirname: Union[str, unicode], pattern: AnyStr) -> List[AnyStr]: ... +def glob0(dirname: Union[str, unicode], basename: AnyStr) -> List[AnyStr]: ... +def has_magic(s: Union[str, unicode]) -> bool: ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gzip.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gzip.pyi new file mode 100644 index 0000000..50c38e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/gzip.pyi @@ -0,0 +1,37 @@ +from typing import Any, IO, Text +import io + +class GzipFile(io.BufferedIOBase): + myfileobj: Any + max_read_chunk: Any + mode: Any + extrabuf: Any + extrasize: Any + extrastart: Any + name: Any + min_readsize: Any + compress: Any + fileobj: Any + offset: Any + mtime: Any + def __init__(self, filename: str = ..., mode: Text = ..., compresslevel: int = ..., + fileobj: IO[str] = ..., mtime: float = ...) -> None: ... + @property + def filename(self): ... + size: Any + crc: Any + def write(self, data): ... + def read(self, size=...): ... + @property + def closed(self): ... + def close(self): ... + def flush(self, zlib_mode=...): ... + def fileno(self): ... + def rewind(self): ... + def readable(self): ... + def writable(self): ... + def seekable(self): ... + def seek(self, offset, whence=...): ... + def readline(self, size=...): ... + +def open(filename: str, mode: Text = ..., compresslevel: int = ...) -> GzipFile: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/hashlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/hashlib.pyi new file mode 100644 index 0000000..2228820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/hashlib.pyi @@ -0,0 +1,31 @@ +# Stubs for hashlib (Python 2) + +from typing import Tuple, Union + +_DataType = Union[str, unicode, bytearray, buffer, memoryview] + +class _hash(object): # This is not actually in the module namespace. + name: str + block_size = 0 + digest_size = 0 + digestsize = 0 + def __init__(self, arg: _DataType = ...) -> None: ... + def update(self, arg: _DataType) -> None: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def copy(self) -> _hash: ... + +def new(name: str, data: str = ...) -> _hash: ... + +def md5(s: _DataType = ...) -> _hash: ... +def sha1(s: _DataType = ...) -> _hash: ... +def sha224(s: _DataType = ...) -> _hash: ... +def sha256(s: _DataType = ...) -> _hash: ... +def sha384(s: _DataType = ...) -> _hash: ... +def sha512(s: _DataType = ...) -> _hash: ... + +algorithms: Tuple[str, ...] +algorithms_guaranteed: Tuple[str, ...] +algorithms_available: Tuple[str, ...] + +def pbkdf2_hmac(name: str, password: str, salt: str, rounds: int, dklen: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/heapq.pyi new file mode 100644 index 0000000..00abb31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/heapq.pyi @@ -0,0 +1,16 @@ +from typing import TypeVar, List, Iterable, Any, Callable, Optional + +_T = TypeVar('_T') + +def cmp_lt(x, y) -> bool: ... +def heappush(heap: List[_T], item: _T) -> None: ... +def heappop(heap: List[_T]) -> _T: + raise IndexError() # if heap is empty +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapify(x: List[_T]) -> None: ... +def heapreplace(heap: List[_T], item: _T) -> _T: + raise IndexError() # if heap is empty +def merge(*iterables: Iterable[_T]) -> Iterable[_T]: ... +def nlargest(n: int, iterable: Iterable[_T], + key: Optional[Callable[[_T], Any]] = ...) -> List[_T]: ... +def nsmallest(n: int, iterable: Iterable[_T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi new file mode 100644 index 0000000..6ae88e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi @@ -0,0 +1,5 @@ +from typing import Any, Mapping + +name2codepoint: Mapping[str, int] +codepoint2name: Mapping[int, str] +entitydefs: Mapping[str, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/httplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/httplib.pyi new file mode 100644 index 0000000..4e3843c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/httplib.pyi @@ -0,0 +1,205 @@ +# Stubs for httplib (Python 2) +# +# Generated by stubgen and manually massaged a bit. +# Needs lots more work! + +from typing import Any, Dict, Optional, Protocol +import mimetools +import ssl + +class HTTPMessage(mimetools.Message): + def addcontinue(self, key: str, more: str) -> None: ... + dict: Dict[str, str] + def addheader(self, key: str, value: str) -> None: ... + unixfrom: str + headers: Any + status: str + seekable: bool + def readheaders(self) -> None: ... + +class HTTPResponse: + fp: Any + debuglevel: Any + strict: Any + msg: Any + version: Any + status: Any + reason: Any + chunked: Any + chunk_left: Any + length: Any + will_close: Any + def __init__(self, sock, debuglevel: int = ..., strict: int = ..., method: Optional[Any] = ..., + buffering: bool = ...) -> None: ... + def begin(self): ... + def close(self): ... + def isclosed(self): ... + def read(self, amt: Optional[Any] = ...): ... + def fileno(self): ... + def getheader(self, name, default: Optional[Any] = ...): ... + def getheaders(self): ... + +# This is an API stub only for HTTPConnection and HTTPSConnection, as used in +# urllib2.AbstractHTTPHandler.do_open, which takes either the class +# HTTPConnection or the class HTTPSConnection, *not* an instance of either +# class. do_open does not use all of the parameters of HTTPConnection.__init__ +# or HTTPSConnection.__init__, so HTTPConnectionProtocol only implements the +# parameters that do_open does use. +class HTTPConnectionProtocol(Protocol): + def __call__(self, host: str, timeout: int = ..., **http_con_args: Any) -> HTTPConnection: ... + +class HTTPConnection: + response_class: Any + default_port: Any + auto_open: Any + debuglevel: Any + strict: Any + timeout: Any + source_address: Any + sock: Any + host: str = ... + port: int = ... + def __init__(self, host, port: Optional[Any] = ..., strict: Optional[Any] = ..., timeout=..., + source_address: Optional[Any] = ...) -> None: ... + def set_tunnel(self, host, port: Optional[Any] = ..., headers: Optional[Any] = ...): ... + def set_debuglevel(self, level): ... + def connect(self): ... + def close(self): ... + def send(self, data): ... + def putrequest(self, method, url, skip_host: int = ..., skip_accept_encoding: int = ...): ... + def putheader(self, header, *values): ... + def endheaders(self, message_body: Optional[Any] = ...): ... + def request(self, method, url, body: Optional[Any] = ..., headers=...): ... + def getresponse(self, buffering: bool = ...): ... + +class HTTP: + debuglevel: Any + def __init__(self, host: str = ..., port: Optional[Any] = ..., strict: Optional[Any] = ...) -> None: ... + def connect(self, host: Optional[Any] = ..., port: Optional[Any] = ...): ... + def getfile(self): ... + file: Any + headers: Any + def getreply(self, buffering: bool = ...): ... + def close(self): ... + +class HTTPSConnection(HTTPConnection): + default_port: Any + key_file: Any + cert_file: Any + def __init__(self, host, port: Optional[Any] = ..., key_file: Optional[Any] = ..., cert_file: Optional[Any] = ..., + strict: Optional[Any] = ..., timeout=..., source_address: Optional[Any] = ..., + context: Optional[Any] = ...) -> None: ... + sock: Any + def connect(self): ... + +class HTTPS(HTTP): + key_file: Any + cert_file: Any + def __init__(self, host: str = ..., port: Optional[Any] = ..., key_file: Optional[Any] = ..., cert_file: Optional[Any] = ..., strict: Optional[Any] = ..., context: Optional[Any] = ...) -> None: ... + +class HTTPException(Exception): ... +class NotConnected(HTTPException): ... +class InvalidURL(HTTPException): ... + +class UnknownProtocol(HTTPException): + args: Any + version: Any + def __init__(self, version) -> None: ... + +class UnknownTransferEncoding(HTTPException): ... +class UnimplementedFileMode(HTTPException): ... + +class IncompleteRead(HTTPException): + args: Any + partial: Any + expected: Any + def __init__(self, partial, expected: Optional[Any] = ...) -> None: ... + +class ImproperConnectionState(HTTPException): ... +class CannotSendRequest(ImproperConnectionState): ... +class CannotSendHeader(ImproperConnectionState): ... +class ResponseNotReady(ImproperConnectionState): ... + +class BadStatusLine(HTTPException): + args: Any + line: Any + def __init__(self, line) -> None: ... + +class LineTooLong(HTTPException): + def __init__(self, line_type) -> None: ... + +error: Any + +class LineAndFileWrapper: + def __init__(self, line, file) -> None: ... + def __getattr__(self, attr): ... + def read(self, amt: Optional[Any] = ...): ... + def readline(self): ... + def readlines(self, size: Optional[Any] = ...): ... + +# Constants + +responses: Dict[int, str] + +HTTP_PORT: int +HTTPS_PORT: int + +# status codes +# informational +CONTINUE: int +SWITCHING_PROTOCOLS: int +PROCESSING: int + +# successful +OK: int +CREATED: int +ACCEPTED: int +NON_AUTHORITATIVE_INFORMATION: int +NO_CONTENT: int +RESET_CONTENT: int +PARTIAL_CONTENT: int +MULTI_STATUS: int +IM_USED: int + +# redirection +MULTIPLE_CHOICES: int +MOVED_PERMANENTLY: int +FOUND: int +SEE_OTHER: int +NOT_MODIFIED: int +USE_PROXY: int +TEMPORARY_REDIRECT: int + +# client error +BAD_REQUEST: int +UNAUTHORIZED: int +PAYMENT_REQUIRED: int +FORBIDDEN: int +NOT_FOUND: int +METHOD_NOT_ALLOWED: int +NOT_ACCEPTABLE: int +PROXY_AUTHENTICATION_REQUIRED: int +REQUEST_TIMEOUT: int +CONFLICT: int +GONE: int +LENGTH_REQUIRED: int +PRECONDITION_FAILED: int +REQUEST_ENTITY_TOO_LARGE: int +REQUEST_URI_TOO_LONG: int +UNSUPPORTED_MEDIA_TYPE: int +REQUESTED_RANGE_NOT_SATISFIABLE: int +EXPECTATION_FAILED: int +UNPROCESSABLE_ENTITY: int +LOCKED: int +FAILED_DEPENDENCY: int +UPGRADE_REQUIRED: int + +# server error +INTERNAL_SERVER_ERROR: int +NOT_IMPLEMENTED: int +BAD_GATEWAY: int +SERVICE_UNAVAILABLE: int +GATEWAY_TIMEOUT: int +HTTP_VERSION_NOT_SUPPORTED: int +INSUFFICIENT_STORAGE: int +NOT_EXTENDED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/imp.pyi new file mode 100644 index 0000000..409fecb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/imp.pyi @@ -0,0 +1,35 @@ +"""Stubs for the 'imp' module.""" + +from typing import List, Optional, Tuple, Iterable, IO, Any +import types + +C_BUILTIN: int +C_EXTENSION: int +IMP_HOOK: int +PKG_DIRECTORY: int +PY_CODERESOURCE: int +PY_COMPILED: int +PY_FROZEN: int +PY_RESOURCE: int +PY_SOURCE: int +SEARCH_ERROR: int + +def acquire_lock() -> None: ... +def find_module(name: str, path: Iterable[str] = ...) -> Optional[Tuple[str, str, Tuple[str, str, int]]]: ... +def get_magic() -> str: ... +def get_suffixes() -> List[Tuple[str, str, int]]: ... +def init_builtin(name: str) -> types.ModuleType: ... +def init_frozen(name: str) -> types.ModuleType: ... +def is_builtin(name: str) -> int: ... +def is_frozen(name: str) -> bool: ... +def load_compiled(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def load_dynamic(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def load_module(name: str, file: str, pathname: str, description: Tuple[str, str, int]) -> types.ModuleType: ... +def load_source(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def lock_held() -> bool: ... +def new_module(name: str) -> types.ModuleType: ... +def release_lock() -> None: ... + +class NullImporter: + def __init__(self, path_string: str) -> None: ... + def find_module(self, fullname: str, path: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/importlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/importlib.pyi new file mode 100644 index 0000000..8bb179a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/importlib.pyi @@ -0,0 +1,4 @@ +import types +from typing import Optional, Text + +def import_module(name: Text, package: Optional[Text] = ...) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/inspect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/inspect.pyi new file mode 100644 index 0000000..8bc2eac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/inspect.pyi @@ -0,0 +1,135 @@ +from types import CodeType, TracebackType, FrameType, ModuleType +from typing import Any, Dict, Callable, List, NamedTuple, Optional, Sequence, Tuple, Type, Union + +# Types and members +class EndOfBlock(Exception): ... + +class BlockFinder: + indent: int + islambda: bool + started: bool + passline: bool + last: int + def tokeneater(self, type: int, token: str, srow_scol: Tuple[int, int], + erow_ecol: Tuple[int, int], line: str) -> None: ... + +CO_GENERATOR: int +CO_NESTED: int +CO_NEWLOCALS: int +CO_NOFREE: int +CO_OPTIMIZED: int +CO_VARARGS: int +CO_VARKEYWORDS: int +TPFLAGS_IS_ABSTRACT: int + +ModuleInfo = NamedTuple('ModuleInfo', [('name', str), + ('suffix', str), + ('mode', str), + ('module_type', int), + ]) +def getmembers( + object: object, + predicate: Optional[Callable[[Any], bool]] = ... +) -> List[Tuple[str, Any]]: ... +def getmoduleinfo(path: str) -> Optional[ModuleInfo]: ... +def getmodulename(path: str) -> Optional[str]: ... + +def ismodule(object: object) -> bool: ... +def isclass(object: object) -> bool: ... +def ismethod(object: object) -> bool: ... +def isfunction(object: object) -> bool: ... +def isgeneratorfunction(object: object) -> bool: ... +def isgenerator(object: object) -> bool: ... +def istraceback(object: object) -> bool: ... +def isframe(object: object) -> bool: ... +def iscode(object: object) -> bool: ... +def isbuiltin(object: object) -> bool: ... +def isroutine(object: object) -> bool: ... +def isabstract(object: object) -> bool: ... +def ismethoddescriptor(object: object) -> bool: ... +def isdatadescriptor(object: object) -> bool: ... +def isgetsetdescriptor(object: object) -> bool: ... +def ismemberdescriptor(object: object) -> bool: ... + +# Retrieving source code +def findsource(object: object) -> Tuple[List[str], int]: ... +def getabsfile(object: object) -> str: ... +def getblock(lines: Sequence[str]) -> Sequence[str]: ... +def getdoc(object: object) -> str: ... +def getcomments(object: object) -> str: ... +def getfile(object: object) -> str: ... +def getmodule(object: object) -> ModuleType: ... +def getsourcefile(object: object) -> str: ... +# TODO restrict to "module, class, method, function, traceback, frame, +# or code object" +def getsourcelines(object: object) -> Tuple[List[str], int]: ... +# TODO restrict to "a module, class, method, function, traceback, frame, +# or code object" +def getsource(object: object) -> str: ... +def cleandoc(doc: str) -> str: ... +def indentsize(line: str) -> int: ... + +# Classes and functions +def getclasstree(classes: List[type], unique: bool = ...) -> List[ + Union[Tuple[type, Tuple[type, ...]], list]]: ... + +ArgSpec = NamedTuple('ArgSpec', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('defaults', tuple), + ]) + +ArgInfo = NamedTuple('ArgInfo', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('locals', Dict[str, Any]), + ]) + +Arguments = NamedTuple('Arguments', [('args', List[Union[str, List[Any]]]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ]) + +def getargs(co: CodeType) -> Arguments: ... +def getargspec(func: object) -> ArgSpec: ... +def getargvalues(frame: FrameType) -> ArgInfo: ... +def formatargspec(args, varargs=..., varkw=..., defaults=..., + formatarg=..., formatvarargs=..., formatvarkw=..., formatvalue=..., + join=...) -> str: ... +def formatargvalues(args, varargs=..., varkw=..., defaults=..., + formatarg=..., formatvarargs=..., formatvarkw=..., formatvalue=..., + join=...) -> str: ... +def getmro(cls: type) -> Tuple[type, ...]: ... +def getcallargs(func, *args, **kwds) -> Dict[str, Any]: ... + +# The interpreter stack + +Traceback = NamedTuple( + 'Traceback', + [ + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ] +) + +_FrameInfo = Tuple[FrameType, str, int, str, List[str], int] + +def getouterframes(frame: FrameType, context: int = ...) -> List[_FrameInfo]: ... +def getframeinfo(frame: Union[FrameType, TracebackType], context: int = ...) -> Traceback: ... +def getinnerframes(traceback: TracebackType, context: int = ...) -> List[_FrameInfo]: ... +def getlineno(frame: FrameType) -> int: ... + +def currentframe(depth: int = ...) -> FrameType: ... +def stack(context: int = ...) -> List[_FrameInfo]: ... +def trace(context: int = ...) -> List[_FrameInfo]: ... + +Attribute = NamedTuple('Attribute', [('name', str), + ('kind', str), + ('defining_class', type), + ('object', object), + ]) + +def classify_class_attrs(cls: type) -> List[Attribute]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/io.pyi new file mode 100644 index 0000000..1ab6b90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/io.pyi @@ -0,0 +1,42 @@ +# Stubs for io + +# Based on https://docs.python.org/2/library/io.html + +# Only a subset of functionality is included. + +from typing import List, BinaryIO, TextIO, IO, overload, Iterator, Iterable, Any, Union, Optional +import _io + +from _io import BlockingIOError as BlockingIOError +from _io import BufferedRWPair as BufferedRWPair +from _io import BufferedRandom as BufferedRandom +from _io import BufferedReader as BufferedReader +from _io import BufferedWriter as BufferedWriter +from _io import BytesIO as BytesIO +from _io import DEFAULT_BUFFER_SIZE as DEFAULT_BUFFER_SIZE +from _io import FileIO as FileIO +from _io import IncrementalNewlineDecoder as IncrementalNewlineDecoder +from _io import StringIO as StringIO +from _io import TextIOWrapper as TextIOWrapper +from _io import UnsupportedOperation as UnsupportedOperation +from _io import open as open + +def _OpenWrapper(file: Union[str, unicode, int], + mode: unicode = ..., buffering: int = ..., encoding: unicode = ..., + errors: unicode = ..., newline: unicode = ..., + closefd: bool = ...) -> IO[Any]: ... + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + + +class IOBase(_io._IOBase): ... + +class RawIOBase(_io._RawIOBase, IOBase): ... + +class BufferedIOBase(_io._BufferedIOBase, IOBase): ... + +# Note: In the actual io.py, TextIOBase subclasses IOBase. +# (Which we don't do here because we don't want to subclass both TextIO and BinaryIO.) +class TextIOBase(_io._TextIOBase): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/itertools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/itertools.pyi new file mode 100644 index 0000000..1c8522c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/itertools.pyi @@ -0,0 +1,165 @@ +# Stubs for itertools + +# Based on https://docs.python.org/2/library/itertools.html + +from typing import (Iterator, TypeVar, Iterable, overload, Any, Callable, Tuple, + Union, Sequence, Generic, Optional) + +_T = TypeVar('_T') +_S = TypeVar('_S') + +def count(start: int = ..., + step: int = ...) -> Iterator[int]: ... # more general types? +def cycle(iterable: Iterable[_T]) -> Iterator[_T]: ... + +def repeat(object: _T, times: int = ...) -> Iterator[_T]: ... + +def accumulate(iterable: Iterable[_T]) -> Iterator[_T]: ... + +class chain(Iterator[_T], Generic[_T]): + def __init__(self, *iterables: Iterable[_T]) -> None: ... + def next(self) -> _T: ... + def __iter__(self) -> Iterator[_T]: ... + @staticmethod + def from_iterable(iterable: Iterable[Iterable[_S]]) -> Iterator[_S]: ... + +def compress(data: Iterable[_T], selectors: Iterable[Any]) -> Iterator[_T]: ... +def dropwhile(predicate: Callable[[_T], Any], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def ifilter(predicate: Optional[Callable[[_T], Any]], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def ifilterfalse(predicate: Optional[Callable[[_T], Any]], + iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def groupby(iterable: Iterable[_T], key: None = ...) -> Iterator[Tuple[_T, Iterator[_T]]]: ... +@overload +def groupby(iterable: Iterable[_T], key: Callable[[_T], _S]) -> Iterator[Tuple[_S, Iterator[_T]]]: ... + +@overload +def islice(iterable: Iterable[_T], stop: Optional[int]) -> Iterator[_T]: ... +@overload +def islice(iterable: Iterable[_T], start: Optional[int], stop: Optional[int], + step: Optional[int] = ...) -> Iterator[_T]: ... + +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_T6 = TypeVar('_T6') + +@overload +def imap(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> Iterator[_S]: ... +@overload +def imap(func: Callable[[_T1, _T2], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[_S]: ... +@overload +def imap(func: Callable[[_T1, _T2, _T3], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4], iter5: Iterable[_T5]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4, _T5, _T6], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4], iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[..., _S], + iter1: Iterable[Any], iter2: Iterable[Any], iter3: Iterable[Any], + iter4: Iterable[Any], iter5: Iterable[Any], iter6: Iterable[Any], + iter7: Iterable[Any], *iterables: Iterable[Any]) -> Iterator[_S]: ... + +def starmap(func: Any, iterable: Iterable[Any]) -> Iterator[Any]: ... +def takewhile(predicate: Callable[[_T], Any], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def tee(iterable: Iterable[_T], n: int = ...) -> Tuple[Iterator[_T], ...]: ... + +@overload +def izip(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def izip(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4, _T5]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, + _T4, _T5, _T6]]: ... +@overload +def izip(iter1: Iterable[Any], iter2: Iterable[Any], + iter3: Iterable[Any], iter4: Iterable[Any], + iter5: Iterable[Any], iter6: Iterable[Any], + iter7: Iterable[Any], *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... + +def izip_longest(*p: Iterable[Any], + fillvalue: Any = ...) -> Iterator[Any]: ... + +@overload +def product(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... +@overload +def product(iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + iter7: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +@overload +def product(*iterables: Iterable[Any], repeat: int) -> Iterator[Tuple[Any, ...]]: ... + +def permutations(iterable: Iterable[_T], + r: int = ...) -> Iterator[Sequence[_T]]: ... +def combinations(iterable: Iterable[_T], + r: int) -> Iterator[Sequence[_T]]: ... +def combinations_with_replacement(iterable: Iterable[_T], + r: int) -> Iterator[Sequence[_T]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/json.pyi new file mode 100644 index 0000000..9cc151b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/json.pyi @@ -0,0 +1,96 @@ +from typing import Any, IO, Optional, Tuple, Callable, Dict, List, Union, Text, Protocol + +class JSONDecodeError(ValueError): + def dumps(self, obj: Any) -> str: ... + def dump(self, obj: Any, fp: IO[str], *args: Any, **kwds: Any) -> None: ... + def loads(self, s: str) -> Any: ... + def load(self, fp: IO[str]) -> Any: ... + +def dumps(obj: Any, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Optional[int] = ..., + separators: Optional[Tuple[str, str]] = ..., + encoding: str = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> str: ... + +def dump(obj: Any, + fp: Union[IO[str], IO[Text]], + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Optional[int] = ..., + separators: Optional[Tuple[str, str]] = ..., + encoding: str = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> None: ... + +def loads(s: Union[Text, bytes], + encoding: Any = ..., + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class _Reader(Protocol): + def read(self) -> Union[Text, bytes]: ... + +def load(fp: _Reader, + encoding: Optional[str] = ..., + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class JSONDecoder(object): + def __init__(self, + encoding: Union[Text, bytes] = ..., + object_hook: Callable[..., Any] = ..., + parse_float: Callable[[str], float] = ..., + parse_int: Callable[[str], int] = ..., + parse_constant: Callable[[str], Any] = ..., + strict: bool = ..., + object_pairs_hook: Callable[..., Any] = ...) -> None: ... + def decode(self, s: Union[Text, bytes], _w: Any = ...) -> Any: ... + def raw_decode(self, s: Union[Text, bytes], idx: int = ...) -> Tuple[Any, Any]: ... + +class JSONEncoder(object): + item_separator: str + key_separator: str + skipkeys: bool + ensure_ascii: bool + check_circular: bool + allow_nan: bool + sort_keys: bool + indent: Optional[int] + + def __init__(self, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + sort_keys: bool = ..., + indent: Optional[int] = ..., + separators: Tuple[Union[Text, bytes], Union[Text, bytes]] = ..., + encoding: Union[Text, bytes] = ..., + default: Callable[..., Any] = ...) -> None: ... + + def default(self, o: Any) -> Any: ... + + def encode(self, o: Any) -> str: ... + + def iterencode(self, o: Any, _one_shot: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/markupbase.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/markupbase.pyi new file mode 100644 index 0000000..358ba16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/markupbase.pyi @@ -0,0 +1,9 @@ +from typing import Tuple + +class ParserBase(object): + def __init__(self) -> None: ... + def error(self, message: str) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + + def unknown_decl(self, data: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/md5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/md5.pyi new file mode 100644 index 0000000..fe6ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/md5.pyi @@ -0,0 +1,6 @@ +# Stubs for Python 2.7 md5 stdlib module + +from hashlib import md5 as md5, md5 as new + +blocksize = 0 +digest_size = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mimetools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mimetools.pyi new file mode 100644 index 0000000..f565202 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mimetools.pyi @@ -0,0 +1,27 @@ +from typing import Any +import rfc822 + +class Message(rfc822.Message): + encodingheader: Any + typeheader: Any + def __init__(self, fp, seekable: int = ...): ... + plisttext: Any + type: Any + maintype: Any + subtype: Any + def parsetype(self): ... + plist: Any + def parseplist(self): ... + def getplist(self): ... + def getparam(self, name): ... + def getparamnames(self): ... + def getencoding(self): ... + def gettype(self): ... + def getmaintype(self): ... + def getsubtype(self): ... + +def choose_boundary(): ... +def decode(input, output, encoding): ... +def encode(input, output, encoding): ... +def copyliteral(input, output): ... +def copybinary(input, output): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi new file mode 100644 index 0000000..fb00b24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi @@ -0,0 +1,50 @@ +from typing import Any, Callable, Optional, TypeVar, Iterable + +from multiprocessing import pool +from multiprocessing.process import Process as Process, current_process as current_process, active_children as active_children +from multiprocessing.util import SUBDEBUG as SUBDEBUG, SUBWARNING as SUBWARNING +from Queue import Queue as _BaseQueue + +class ProcessError(Exception): ... +class BufferTooShort(ProcessError): ... +class TimeoutError(ProcessError): ... +class AuthenticationError(ProcessError): ... + +_T = TypeVar('_T') + +class Queue(_BaseQueue[_T]): + def __init__(self, maxsize: int = ...) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put_nowait(self, item: _T) -> None: ... + def get_nowait(self) -> _T: ... + def close(self) -> None: ... + def join_thread(self) -> None: ... + def cancel_join_thread(self) -> None: ... + +def Manager(): ... +def Pipe(duplex: bool = ...): ... +def cpu_count() -> int: ... +def freeze_support(): ... +def get_logger(): ... +def log_to_stderr(level: Optional[Any] = ...): ... +def allow_connection_pickling(): ... +def Lock(): ... +def RLock(): ... +def Condition(lock: Optional[Any] = ...): ... +def Semaphore(value: int = ...): ... +def BoundedSemaphore(value: int = ...): ... +def Event(): ... +def JoinableQueue(maxsize: int = ...): ... +def RawValue(typecode_or_type, *args): ... +def RawArray(typecode_or_type, size_or_initializer): ... +def Value(typecode_or_type, *args, **kwds): ... +def Array(typecode_or_type, size_or_initializer, **kwds): ... + +def Pool(processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> pool.Pool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi new file mode 100644 index 0000000..e8e02eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi @@ -0,0 +1,51 @@ +from typing import Any, Optional, List, Type + +import threading +import sys +import weakref +import array +import itertools + +from multiprocessing import TimeoutError, cpu_count +from multiprocessing.dummy.connection import Pipe +from threading import Lock, RLock, Semaphore, BoundedSemaphore +from threading import Event +from Queue import Queue + + +class DummyProcess(threading.Thread): + _children: weakref.WeakKeyDictionary + _parent: threading.Thread + _pid: None + _start_called: bool + def __init__(self, group=..., target=..., name=..., args=..., kwargs=...) -> None: ... + @property + def exitcode(self) -> Optional[int]: ... + + +Process = DummyProcess + +# This should be threading._Condition but threading.pyi exports it as Condition +class Condition(threading.Condition): + notify_all: Any + +class Namespace(object): + def __init__(self, **kwds) -> None: ... + +class Value(object): + _typecode: Any + _value: Any + value: Any + def __init__(self, typecode, value, lock=...) -> None: ... + def _get(self) -> Any: ... + def _set(self, value) -> None: ... + +JoinableQueue = Queue + +def Array(typecode, sequence, lock=...) -> array.array: ... +def Manager() -> Any: ... +def Pool(processes=..., initializer=..., initargs=...) -> Any: ... +def active_children() -> List: ... +def current_process() -> threading.Thread: ... +def freeze_support() -> None: ... +def shutdown() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi new file mode 100644 index 0000000..a7a4f99 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi @@ -0,0 +1,26 @@ +from Queue import Queue +from typing import Any, List, Optional, Tuple, Type + +families: List[None] + +class Connection(object): + _in: Any + _out: Any + recv: Any + recv_bytes: Any + send: Any + send_bytes: Any + def __init__(self, _in, _out) -> None: ... + def close(self) -> None: ... + def poll(self, timeout=...) -> Any: ... + +class Listener(object): + _backlog_queue: Optional[Queue] + address: Any + def __init__(self, address=..., family=..., backlog=...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + + +def Client(address) -> Connection: ... +def Pipe(duplex=...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi new file mode 100644 index 0000000..4001a5a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi @@ -0,0 +1,59 @@ +from typing import ( + Any, Callable, ContextManager, Iterable, Optional, Dict, List, + TypeVar, Iterator, +) + +_T = TypeVar('_T', bound=Pool) + +class AsyncResult(): + def get(self, timeout: Optional[float] = ...) -> Any: ... + def wait(self, timeout: Optional[float] = ...) -> None: ... + def ready(self) -> bool: ... + def successful(self) -> bool: ... + +class IMapIterator(Iterator[Any]): + def __iter__(self) -> Iterator[Any]: ... + def next(self, timeout: Optional[float] = ...) -> Any: ... + +class IMapUnorderedIterator(IMapIterator): ... + +class Pool(ContextManager[Pool]): + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> None: ... + def apply(self, + func: Callable[..., Any], + args: Iterable[Any] = ..., + kwds: Dict[str, Any] = ...) -> Any: ... + def apply_async(self, + func: Callable[..., Any], + args: Iterable[Any] = ..., + kwds: Dict[str, Any] = ..., + callback: Optional[Callable[..., None]] = ...) -> AsyncResult: ... + def map(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> List[Any]: ... + def map_async(self, func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[..., None]] = ...) -> AsyncResult: ... + def imap(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> IMapIterator: ... + def imap_unordered(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> IMapIterator: ... + def close(self) -> None: ... + def terminate(self) -> None: ... + def join(self) -> None: ... + def __enter__(self: _T) -> _T: ... + +class ThreadPool(Pool, ContextManager[ThreadPool]): + + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi new file mode 100644 index 0000000..476b403 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi @@ -0,0 +1,36 @@ +from typing import Any, Optional + +def current_process(): ... +def active_children(): ... + +class Process: + def __init__(self, group: Optional[Any] = ..., target: Optional[Any] = ..., name: Optional[Any] = ..., args=..., + kwargs=...): ... + def run(self): ... + def start(self): ... + def terminate(self): ... + def join(self, timeout: Optional[Any] = ...): ... + def is_alive(self): ... + @property + def name(self): ... + @name.setter + def name(self, name): ... + @property + def daemon(self): ... + @daemon.setter + def daemon(self, daemonic): ... + @property + def authkey(self): ... + @authkey.setter + def authkey(self, authkey): ... + @property + def exitcode(self): ... + @property + def ident(self): ... + pid: Any + +class AuthenticationString(bytes): + def __reduce__(self): ... + +class _MainProcess(Process): + def __init__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi new file mode 100644 index 0000000..14d44f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi @@ -0,0 +1,29 @@ +from typing import Any, Optional +import threading + +SUBDEBUG: Any +SUBWARNING: Any + +def sub_debug(msg, *args): ... +def debug(msg, *args): ... +def info(msg, *args): ... +def sub_warning(msg, *args): ... +def get_logger(): ... +def log_to_stderr(level: Optional[Any] = ...): ... +def get_temp_dir(): ... +def register_after_fork(obj, func): ... + +class Finalize: + def __init__(self, obj, callback, args=..., kwargs: Optional[Any] = ..., exitpriority: Optional[Any] = ...): ... + def __call__(self, wr: Optional[Any] = ...): ... + def cancel(self): ... + def still_active(self): ... + +def is_exiting(): ... + +class ForkAwareThreadLock: + def __init__(self): ... + +class ForkAwareLocal(threading.local): + def __init__(self): ... + def __reduce__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mutex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mutex.pyi new file mode 100644 index 0000000..8da8bfb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/mutex.pyi @@ -0,0 +1,15 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/mutex.py + +from collections import deque +from typing import Any, Callable, TypeVar + +_ArgType = TypeVar('_ArgType') + +class mutex: + locked: bool + queue: deque + def __init__(self) -> None: ... + def test(self) -> bool: ... + def testandset(self) -> bool: ... + def lock(self, function: Callable[[_ArgType], Any], argument: _ArgType) -> None: ... + def unlock(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi new file mode 100644 index 0000000..b87b008 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi @@ -0,0 +1,4 @@ +from typing import AnyStr + +def url2pathname(url: AnyStr) -> AnyStr: ... +def pathname2url(p: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi new file mode 100644 index 0000000..2c66dc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi @@ -0,0 +1,369 @@ +# Stubs for os +# Ron Murawski + +from builtins import OSError as error +from io import TextIOWrapper as _TextIOWrapper +from posix import stat_result as stat_result # TODO: use this, see https://github.com/python/mypy/issues/3078 +import sys +from typing import ( + Mapping, MutableMapping, Dict, List, Any, Tuple, Iterator, overload, Union, AnyStr, + Optional, Generic, Set, Callable, Text, Sequence, IO, NamedTuple, NoReturn, TypeVar +) +from . import path as path + +_T = TypeVar('_T') + +# ----- os variables ----- + +if sys.version_info >= (3, 2): + supports_bytes_environ: bool + +if sys.version_info >= (3, 3): + supports_dir_fd: Set[Callable[..., Any]] + supports_fd: Set[Callable[..., Any]] + supports_effective_ids: Set[Callable[..., Any]] + supports_follow_symlinks: Set[Callable[..., Any]] + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + +O_RDONLY: int +O_WRONLY: int +O_RDWR: int +O_APPEND: int +O_CREAT: int +O_EXCL: int +O_TRUNC: int +# We don't use sys.platform for O_* flags to denote platform-dependent APIs because some codes, +# including tests for mypy, use a more finer way than sys.platform before using these APIs +# See https://github.com/python/typeshed/pull/2286 for discussions +O_DSYNC: int # Unix only +O_RSYNC: int # Unix only +O_SYNC: int # Unix only +O_NDELAY: int # Unix only +O_NONBLOCK: int # Unix only +O_NOCTTY: int # Unix only +O_SHLOCK: int # Unix only +O_EXLOCK: int # Unix only +O_BINARY: int # Windows only +O_NOINHERIT: int # Windows only +O_SHORT_LIVED: int # Windows only +O_TEMPORARY: int # Windows only +O_RANDOM: int # Windows only +O_SEQUENTIAL: int # Windows only +O_TEXT: int # Windows only +O_ASYNC: int # Gnu extension if in C library +O_DIRECT: int # Gnu extension if in C library +O_DIRECTORY: int # Gnu extension if in C library +O_NOFOLLOW: int # Gnu extension if in C library +O_NOATIME: int # Gnu extension if in C library +O_LARGEFILE: int # Gnu extension if in C library + +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +linesep: str +devnull: str +name: str + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +class _Environ(MutableMapping[AnyStr, AnyStr], Generic[AnyStr]): + def copy(self) -> Dict[AnyStr, AnyStr]: ... + def __delitem__(self, key: AnyStr) -> None: ... + def __getitem__(self, key: AnyStr) -> AnyStr: ... + def __setitem__(self, key: AnyStr, value: AnyStr) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __len__(self) -> int: ... + +environ: _Environ[str] +if sys.version_info >= (3, 2): + environb: _Environ[bytes] + +if sys.platform != 'win32': + # Unix only + confstr_names: Dict[str, int] + pathconf_names: Dict[str, int] + sysconf_names: Dict[str, int] + + EX_OK: int + EX_USAGE: int + EX_DATAERR: int + EX_NOINPUT: int + EX_NOUSER: int + EX_NOHOST: int + EX_UNAVAILABLE: int + EX_SOFTWARE: int + EX_OSERR: int + EX_OSFILE: int + EX_CANTCREAT: int + EX_IOERR: int + EX_TEMPFAIL: int + EX_PROTOCOL: int + EX_NOPERM: int + EX_CONFIG: int + EX_NOTFOUND: int + +P_NOWAIT: int +P_NOWAITO: int +P_WAIT: int +if sys.platform == 'win32': + P_DETACH: int + P_OVERLAY: int + +# wait()/waitpid() options +if sys.platform != 'win32': + WNOHANG: int # Unix only + WCONTINUED: int # some Unix systems + WUNTRACED: int # Unix only + +TMP_MAX: int # Undocumented, but used by tempfile + +# ----- os classes (structures) ----- +if sys.version_info >= (3, 6): + from builtins import _PathLike as PathLike # See comment in builtins + +_PathType = path._PathType + +_StatVFS = NamedTuple('_StatVFS', [('f_bsize', int), ('f_frsize', int), ('f_blocks', int), + ('f_bfree', int), ('f_bavail', int), ('f_files', int), + ('f_ffree', int), ('f_favail', int), ('f_flag', int), + ('f_namemax', int)]) + +def getlogin() -> str: ... +def getpid() -> int: ... +def getppid() -> int: ... +def strerror(code: int) -> str: ... +def umask(mask: int) -> int: ... + +if sys.platform != 'win32': + def ctermid() -> str: ... + def getegid() -> int: ... + def geteuid() -> int: ... + def getgid() -> int: ... + def getgroups() -> List[int]: ... # Unix only, behaves differently on Mac + def initgroups(username: str, gid: int) -> None: ... + def getpgid(pid: int) -> int: ... + def getpgrp() -> int: ... + def getresuid() -> Tuple[int, int, int]: ... + def getresgid() -> Tuple[int, int, int]: ... + def getuid() -> int: ... + def setegid(egid: int) -> None: ... + def seteuid(euid: int) -> None: ... + def setgid(gid: int) -> None: ... + def setgroups(groups: Sequence[int]) -> None: ... + def setpgrp() -> None: ... + def setpgid(pid: int, pgrp: int) -> None: ... + def setregid(rgid: int, egid: int) -> None: ... + def setresgid(rgid: int, egid: int, sgid: int) -> None: ... + def setresuid(ruid: int, euid: int, suid: int) -> None: ... + def setreuid(ruid: int, euid: int) -> None: ... + def getsid(pid: int) -> int: ... + def setsid() -> None: ... + def setuid(uid: int) -> None: ... + def uname() -> Tuple[str, str, str, str, str]: ... + +@overload +def getenv(key: Text) -> Optional[str]: ... +@overload +def getenv(key: Text, default: _T) -> Union[str, _T]: ... +def putenv(key: Union[bytes, Text], value: Union[bytes, Text]) -> None: ... +def unsetenv(key: Union[bytes, Text]) -> None: ... + +def fdopen(fd: int, *args, **kwargs) -> IO[Any]: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def dup(fd: int) -> int: ... +def dup2(fd: int, fd2: int) -> None: ... +def fstat(fd: int) -> Any: ... +def fsync(fd: int) -> None: ... +def lseek(fd: int, pos: int, how: int) -> int: ... +def open(file: _PathType, flags: int, mode: int = ...) -> int: ... +def pipe() -> Tuple[int, int]: ... +def read(fd: int, n: int) -> bytes: ... +def write(fd: int, string: bytes) -> int: ... +def access(path: _PathType, mode: int) -> bool: ... +def chdir(path: _PathType) -> None: ... +def fchdir(fd: int) -> None: ... +def getcwd() -> str: ... +def getcwdu() -> unicode: ... +def chmod(path: _PathType, mode: int) -> None: ... +def link(src: _PathType, link_name: _PathType) -> None: ... +def listdir(path: AnyStr) -> List[AnyStr]: ... +def lstat(path: _PathType) -> Any: ... +def mknod(filename: _PathType, mode: int = ..., device: int = ...) -> None: ... +def major(device: int) -> int: ... +def minor(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +def mkdir(path: _PathType, mode: int = ...) -> None: ... +def makedirs(path: _PathType, mode: int = ...) -> None: ... +def readlink(path: AnyStr) -> AnyStr: ... +def remove(path: _PathType) -> None: ... +def removedirs(path: _PathType) -> None: ... +def rename(src: _PathType, dst: _PathType) -> None: ... +def renames(old: _PathType, new: _PathType) -> None: ... +def rmdir(path: _PathType) -> None: ... +def stat(path: _PathType) -> Any: ... +@overload +def stat_float_times() -> bool: ... +@overload +def stat_float_times(newvalue: bool) -> None: ... +def symlink(source: _PathType, link_name: _PathType) -> None: ... +def unlink(path: _PathType) -> None: ... +# TODO: add ns, dir_fd, follow_symlinks argument +if sys.version_info >= (3, 0): + def utime(path: _PathType, times: Optional[Tuple[float, float]] = ...) -> None: ... +else: + def utime(path: _PathType, times: Optional[Tuple[float, float]]) -> None: ... + +if sys.platform != 'win32': + # Unix only + def fchmod(fd: int, mode: int) -> None: ... + def fchown(fd: int, uid: int, gid: int) -> None: ... + if sys.platform != 'darwin': + def fdatasync(fd: int) -> None: ... # Unix only, not Mac + def fpathconf(fd: int, name: Union[str, int]) -> int: ... + def fstatvfs(fd: int) -> _StatVFS: ... + def ftruncate(fd: int, length: int) -> None: ... + def isatty(fd: int) -> bool: ... + def openpty() -> Tuple[int, int]: ... # some flavors of Unix + def tcgetpgrp(fd: int) -> int: ... + def tcsetpgrp(fd: int, pg: int) -> None: ... + def ttyname(fd: int) -> str: ... + def chflags(path: _PathType, flags: int) -> None: ... + def chroot(path: _PathType) -> None: ... + def chown(path: _PathType, uid: int, gid: int) -> None: ... + def lchflags(path: _PathType, flags: int) -> None: ... + def lchmod(path: _PathType, mode: int) -> None: ... + def lchown(path: _PathType, uid: int, gid: int) -> None: ... + def mkfifo(path: _PathType, mode: int = ...) -> None: ... + def pathconf(path: _PathType, name: Union[str, int]) -> int: ... + def statvfs(path: _PathType) -> _StatVFS: ... + +if sys.version_info >= (3, 6): + def walk(top: Union[AnyStr, PathLike[AnyStr]], topdown: bool = ..., + onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +else: + def walk(top: AnyStr, topdown: bool = ..., onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... + +def abort() -> NoReturn: ... +# These are defined as execl(file, *args) but the first *arg is mandatory. +def execl(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... +def execlp(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... + +# These are: execle(file, *args, env) but env is pulled from the last element of the args. +def execle(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... +def execlpe(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... + +# The docs say `args: tuple or list of strings` +# The implementation enforces tuple or list so we can't use Sequence. +_ExecVArgs = Union[Tuple[Union[bytes, Text], ...], List[bytes], List[Text], List[Union[bytes, Text]]] +def execv(path: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execve(path: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... +def execvp(file: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execvpe(file: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... + +def _exit(n: int) -> NoReturn: ... +def kill(pid: int, sig: int) -> None: ... + +if sys.platform != 'win32': + # Unix only + def fork() -> int: ... + def forkpty() -> Tuple[int, int]: ... # some flavors of Unix + def killpg(pgid: int, sig: int) -> None: ... + def nice(increment: int) -> int: ... + def plock(op: int) -> None: ... # ???op is int? + +if sys.version_info >= (3, 0): + class popen(_TextIOWrapper): + # TODO 'b' modes or bytes command not accepted? + def __init__(self, command: str, mode: str = ..., + bufsize: int = ...) -> None: ... + def close(self) -> Any: ... # may return int +else: + def popen(command: str, *args, **kwargs) -> IO[Any]: ... + def popen2(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any]]: ... + def popen3(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any], IO[Any]]: ... + def popen4(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any]]: ... + +def spawnl(mode: int, path: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... +def spawnle(mode: int, path: _PathType, arg0: Union[bytes, Text], + *args: Any) -> int: ... # Imprecise sig +def spawnv(mode: int, path: _PathType, args: List[Union[bytes, Text]]) -> int: ... +def spawnve(mode: int, path: _PathType, args: List[Union[bytes, Text]], + env: Mapping[str, str]) -> int: ... +def system(command: _PathType) -> int: ... +def times() -> Tuple[float, float, float, float, float]: ... +def waitpid(pid: int, options: int) -> Tuple[int, int]: ... +def urandom(n: int) -> bytes: ... + +if sys.platform == 'win32': + def startfile(path: _PathType, operation: Optional[str] = ...) -> None: ... +else: + # Unix only + def spawnlp(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... + def spawnlpe(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Any) -> int: ... # Imprecise signature + def spawnvp(mode: int, file: _PathType, args: List[Union[bytes, Text]]) -> int: ... + def spawnvpe(mode: int, file: _PathType, args: List[Union[bytes, Text]], env: Mapping[str, str]) -> int: ... + def wait() -> Tuple[int, int]: ... + def wait3(options: int) -> Tuple[int, int, Any]: ... + def wait4(pid: int, options: int) -> Tuple[int, int, Any]: ... + def WCOREDUMP(status: int) -> bool: ... + def WIFCONTINUED(status: int) -> bool: ... + def WIFSTOPPED(status: int) -> bool: ... + def WIFSIGNALED(status: int) -> bool: ... + def WIFEXITED(status: int) -> bool: ... + def WEXITSTATUS(status: int) -> int: ... + def WSTOPSIG(status: int) -> int: ... + def WTERMSIG(status: int) -> int: ... + def confstr(name: Union[str, int]) -> Optional[str]: ... + def getloadavg() -> Tuple[float, float, float]: ... + def sysconf(name: Union[str, int]) -> int: ... + +if sys.version_info >= (3, 0): + def sched_getaffinity(id: int) -> Set[int]: ... +if sys.version_info >= (3, 3): + class waitresult: + si_pid: int + def waitid(idtype: int, id: int, options: int) -> waitresult: ... + +if sys.version_info < (3, 0): + def tmpfile() -> IO[Any]: ... + def tmpnam() -> str: ... + def tempnam(dir: str = ..., prefix: str = ...) -> str: ... + +P_ALL: int +WEXITED: int +WNOWAIT: int + +if sys.version_info >= (3, 3): + if sys.platform != 'win32': + # Unix only + def sync() -> None: ... + + def truncate(path: Union[_PathType, int], length: int) -> None: ... # Unix only up to version 3.4 + + def fwalk(top: AnyStr = ..., topdown: bool = ..., + onerror: Callable = ..., *, follow_symlinks: bool = ..., + dir_fd: int = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], List[AnyStr], int]]: ... + + terminal_size = NamedTuple('terminal_size', [('columns', int), ('lines', int)]) + def get_terminal_size(fd: int = ...) -> terminal_size: ... + +if sys.version_info >= (3, 4): + def cpu_count() -> Optional[int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/path.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os/path.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/pipes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/pipes.pyi new file mode 100644 index 0000000..d5f5291 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/pipes.pyi @@ -0,0 +1,13 @@ +from typing import Any, IO + +class Template: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def clone(self) -> Template: ... + def debug(self, flag: bool) -> None: ... + def append(self, cmd: str, kind: str) -> None: ... + def prepend(self, cmd: str, kind: str) -> None: ... + def open(self, file: str, mode: str) -> IO[Any]: ... + def copy(self, infile: str, outfile: str) -> None: ... + +def quote(s: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/platform.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/platform.pyi new file mode 100644 index 0000000..e6e0378 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/platform.pyi @@ -0,0 +1,45 @@ +# Stubs for platform (Python 2) +# +# Based on stub generated by stubgen. + +from typing import Any, Optional, Tuple + +__copyright__: Any +DEV_NULL: Any + +def libc_ver(executable=..., lib=..., version=..., chunksize: int = ...): ... +def linux_distribution(distname=..., version=..., id=..., supported_dists=..., full_distribution_name: int = ...): ... +def dist(distname=..., version=..., id=..., supported_dists=...): ... + +class _popen: + tmpfile: Any + pipe: Any + bufsize: Any + mode: Any + def __init__(self, cmd, mode=..., bufsize: Optional[Any] = ...): ... + def read(self): ... + def readlines(self): ... + def close(self, remove=..., error=...): ... + __del__: Any + +def popen(cmd, mode=..., bufsize: Optional[Any] = ...): ... +def win32_ver(release=..., version=..., csd=..., ptype=...): ... +def mac_ver(release=..., versioninfo=..., machine=...): ... +def java_ver(release=..., vendor=..., vminfo=..., osinfo=...): ... +def system_alias(system, release, version): ... +def architecture(executable=..., bits=..., linkage=...) -> Tuple[str, str]: ... +def uname() -> Tuple[str, str, str, str, str, str]: ... +def system() -> str: ... +def node() -> str: ... +def release() -> str: ... +def version() -> str: ... +def machine() -> str: ... +def processor() -> str: ... +def python_implementation() -> str: ... +def python_version() -> str: ... +def python_version_tuple() -> Tuple[str, str, str]: ... +def python_branch() -> str: ... +def python_revision() -> str: ... +def python_build() -> Tuple[str, str]: ... +def python_compiler() -> str: ... +def platform(aliased: int = ..., terse: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/popen2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/popen2.pyi new file mode 100644 index 0000000..23435b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/popen2.pyi @@ -0,0 +1,28 @@ +from typing import Any, Iterable, List, Optional, Union, TextIO, Tuple, TypeVar + +_T = TypeVar('_T') + + +class Popen3: + sts: int + cmd: Iterable + pid: int + tochild: TextIO + fromchild: TextIO + childerr: Optional[TextIO] + def __init__(self, cmd: Iterable = ..., capturestderr: bool = ..., bufsize: int = ...) -> None: ... + def __del__(self) -> None: ... + def poll(self, _deadstate: _T = ...) -> Union[int, _T]: ... + def wait(self) -> int: ... + +class Popen4(Popen3): + childerr: None + cmd: Iterable + pid: int + tochild: TextIO + fromchild: TextIO + def __init__(self, cmd: Iterable = ..., bufsize: int = ...) -> None: ... + +def popen2(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO]: ... +def popen3(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO, TextIO]: ... +def popen4(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/posix.pyi new file mode 100644 index 0000000..fcd4a66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/posix.pyi @@ -0,0 +1,205 @@ +from typing import Dict, List, Mapping, Tuple, Union, Sequence, IO, Optional, TypeVar + +error = OSError + +confstr_names: Dict[str, int] +environ: Dict[str, str] +pathconf_names: Dict[str, int] +sysconf_names: Dict[str, int] + +EX_CANTCREAT: int +EX_CONFIG: int +EX_DATAERR: int +EX_IOERR: int +EX_NOHOST: int +EX_NOINPUT: int +EX_NOPERM: int +EX_NOUSER: int +EX_OK: int +EX_OSERR: int +EX_OSFILE: int +EX_PROTOCOL: int +EX_SOFTWARE: int +EX_TEMPFAIL: int +EX_UNAVAILABLE: int +EX_USAGE: int +F_OK: int +NGROUPS_MAX: int +O_APPEND: int +O_ASYNC: int +O_CREAT: int +O_DIRECT: int +O_DIRECTORY: int +O_DSYNC: int +O_EXCL: int +O_LARGEFILE: int +O_NDELAY: int +O_NOATIME: int +O_NOCTTY: int +O_NOFOLLOW: int +O_NONBLOCK: int +O_RDONLY: int +O_RDWR: int +O_RSYNC: int +O_SYNC: int +O_TRUNC: int +O_WRONLY: int +R_OK: int +TMP_MAX: int +WCONTINUED: int +WNOHANG: int +WUNTRACED: int +W_OK: int +X_OK: int + +def WCOREDUMP(status: int) -> bool: ... +def WEXITSTATUS(status: int) -> bool: ... +def WIFCONTINUED(status: int) -> bool: ... +def WIFEXITED(status: int) -> bool: ... +def WIFSIGNALED(status: int) -> bool: ... +def WIFSTOPPED(status: int) -> bool: ... +def WSTOPSIG(status: int) -> bool: ... +def WTERMSIG(status: int) -> bool: ... + +class stat_result(object): + n_fields: int + n_sequence_fields: int + n_unnamed_fields: int + st_mode: int + st_ino: int + st_dev: int + st_nlink: int + st_uid: int + st_gid: int + st_size: int + st_atime: int + st_mtime: int + st_ctime: int + +class statvfs_result(object): + n_fields: int + n_sequence_fields: int + n_unnamed_fields: int + f_bsize: int + f_frsize: int + f_blocks: int + f_bfree: int + f_bavail: int + f_files: int + f_ffree: int + f_favail: int + f_flag: int + f_namemax: int + +def _exit(status: int) -> None: ... +def abort() -> None: ... +def access(path: unicode, mode: int) -> bool: ... +def chdir(path: unicode) -> None: ... +def chmod(path: unicode, mode: int) -> None: ... +def chown(path: unicode, uid: int, gid: int) -> None: ... +def chroot(path: unicode) -> None: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def confstr(name: Union[str, int]) -> str: ... +def ctermid() -> str: ... +def dup(fd: int) -> int: ... +def dup2(fd: int, fd2: int) -> None: ... +def execv(path: str, args: Sequence[str], env: Mapping[str, str]) -> None: ... +def execve(path: str, args: Sequence[str], env: Mapping[str, str]) -> None: ... +def fchdir(fd: int) -> None: ... +def fchmod(fd: int, mode: int) -> None: ... +def fchown(fd: int, uid: int, gid: int) -> None: ... +def fdatasync(fd: int) -> None: ... +def fdopen(fd: int, mode: str = ..., bufsize: int = ...) -> IO[str]: ... +def fork() -> int: + raise OSError() +def forkpty() -> Tuple[int, int]: + raise OSError() +def fpathconf(fd: int, name: str) -> None: ... +def fstat(fd: int) -> stat_result: ... +def fstatvfs(fd: int) -> statvfs_result: ... +def fsync(fd: int) -> None: ... +def ftruncate(fd: int, length: int) -> None: ... +def getcwd() -> str: ... +def getcwdu() -> unicode: ... +def getegid() -> int: ... +def geteuid() -> int: ... +def getgid() -> int: ... +def getgroups() -> List[int]: ... +def getloadavg() -> Tuple[float, float, float]: + raise OSError() +def getlogin() -> str: ... +def getpgid(pid: int) -> int: ... +def getpgrp() -> int: ... +def getpid() -> int: ... +def getppid() -> int: ... +def getresgid() -> Tuple[int, int, int]: ... +def getresuid() -> Tuple[int, int, int]: ... +def getsid(pid: int) -> int: ... +def getuid() -> int: ... +def initgroups(username: str, gid: int) -> None: ... +def isatty(fd: int) -> bool: ... +def kill(pid: int, sig: int) -> None: ... +def killpg(pgid: int, sig: int) -> None: ... +def lchown(path: unicode, uid: int, gid: int) -> None: ... +def link(source: unicode, link_name: str) -> None: ... +_T = TypeVar("_T") +def listdir(path: _T) -> List[_T]: ... +def lseek(fd: int, pos: int, how: int) -> None: ... +def lstat(path: unicode) -> stat_result: ... +def major(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +def minor(device: int) -> int: ... +def mkdir(path: unicode, mode: int = ...) -> None: ... +def mkfifo(path: unicode, mode: int = ...) -> None: ... +def mknod(filename: unicode, mode: int = ..., device: int = ...) -> None: ... +def nice(increment: int) -> int: ... +def open(file: unicode, flags: int, mode: int = ...) -> int: ... +def openpty() -> Tuple[int, int]: ... +def pathconf(path: unicode, name: str) -> str: ... +def pipe() -> Tuple[int, int]: ... +def popen(command: str, mode: str = ..., bufsize: int = ...) -> IO[str]: ... +def putenv(varname: str, value: str) -> None: ... +def read(fd: int, n: int) -> str: ... +def readlink(path: _T) -> _T: ... +def remove(path: unicode) -> None: ... +def rename(src: unicode, dst: unicode) -> None: ... +def rmdir(path: unicode) -> None: ... +def setegid(egid: int) -> None: ... +def seteuid(euid: int) -> None: ... +def setgid(gid: int) -> None: ... +def setgroups(groups: Sequence[int]) -> None: ... +def setpgid(pid: int, pgrp: int) -> None: ... +def setpgrp() -> None: ... +def setregid(rgid: int, egid: int) -> None: ... +def setresgid(rgid: int, egid: int, sgid: int) -> None: ... +def setresuid(ruid: int, euid: int, suid: int) -> None: ... +def setreuid(ruid: int, euid: int) -> None: ... +def setsid() -> None: ... +def setuid(pid: int) -> None: ... +def stat(path: unicode) -> stat_result: ... +def statvfs(path: unicode) -> statvfs_result: ... +def stat_float_times(fd: int) -> None: ... +def strerror(code: int) -> str: ... +def symlink(source: unicode, link_name: unicode) -> None: ... +def sysconf(name: Union[str, int]) -> int: ... +def system(command: unicode) -> int: ... +def tcgetpgrp(fd: int) -> int: ... +def tcsetpgrp(fd: int, pg: int) -> None: ... +def times() -> Tuple[float, float, float, float, float]: ... +def tmpfile() -> IO[str]: ... +def ttyname(fd: int) -> str: ... +def umask(mask: int) -> int: ... +def uname() -> Tuple[str, str, str, str, str]: ... +def unlink(path: unicode) -> None: ... +def unsetenv(varname: str) -> None: ... +def urandom(n: int) -> str: ... +def utime(path: unicode, times: Optional[Tuple[int, int]]) -> None: + raise OSError +def wait() -> int: ... +_r = Tuple[float, float, int, int, int, int, int, int, int, int, int, int, int, int, int, int] +def wait3(options: int) -> Tuple[int, int, _r]: ... +def wait4(pid: int, options: int) -> Tuple[int, int, _r]: ... +def waitpid(pid: int, options: int) -> int: + raise OSError() +def write(fd: int, str: str) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/random.pyi new file mode 100644 index 0000000..3292db8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/random.pyi @@ -0,0 +1,75 @@ +# Stubs for random +# Ron Murawski +# Updated by Jukka Lehtosalo + +# based on https://docs.python.org/2/library/random.html + +# ----- random classes ----- + +import _random +from typing import ( + Any, TypeVar, Sequence, List, Callable, AbstractSet, Union, + overload +) + +_T = TypeVar('_T') + +class Random(_random.Random): + def __init__(self, x: object = ...) -> None: ... + def seed(self, x: object = ...) -> None: ... + def getstate(self) -> _random._State: ... + def setstate(self, state: _random._State) -> None: ... + def jumpahead(self, n: int) -> None: ... + def getrandbits(self, k: int) -> int: ... + @overload + def randrange(self, stop: int) -> int: ... + @overload + def randrange(self, start: int, stop: int, step: int = ...) -> int: ... + def randint(self, a: int, b: int) -> int: ... + def choice(self, seq: Sequence[_T]) -> _T: ... + def shuffle(self, x: List[Any], random: Callable[[], None] = ...) -> None: ... + def sample(self, population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... + def random(self) -> float: ... + def uniform(self, a: float, b: float) -> float: ... + def triangular(self, low: float = ..., high: float = ..., mode: float = ...) -> float: ... + def betavariate(self, alpha: float, beta: float) -> float: ... + def expovariate(self, lambd: float) -> float: ... + def gammavariate(self, alpha: float, beta: float) -> float: ... + def gauss(self, mu: float, sigma: float) -> float: ... + def lognormvariate(self, mu: float, sigma: float) -> float: ... + def normalvariate(self, mu: float, sigma: float) -> float: ... + def vonmisesvariate(self, mu: float, kappa: float) -> float: ... + def paretovariate(self, alpha: float) -> float: ... + def weibullvariate(self, alpha: float, beta: float) -> float: ... + +# SystemRandom is not implemented for all OS's; good on Windows & Linux +class SystemRandom(Random): + ... + +# ----- random function stubs ----- +def seed(x: object = ...) -> None: ... +def getstate() -> object: ... +def setstate(state: object) -> None: ... +def jumpahead(n: int) -> None: ... +def getrandbits(k: int) -> int: ... +@overload +def randrange(stop: int) -> int: ... +@overload +def randrange(start: int, stop: int, step: int = ...) -> int: ... +def randint(a: int, b: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +def shuffle(x: List[Any], random: Callable[[], float] = ...) -> None: ... +def sample(population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... +def random() -> float: ... +def uniform(a: float, b: float) -> float: ... +def triangular(low: float = ..., high: float = ..., + mode: float = ...) -> float: ... +def betavariate(alpha: float, beta: float) -> float: ... +def expovariate(lambd: float) -> float: ... +def gammavariate(alpha: float, beta: float) -> float: ... +def gauss(mu: float, sigma: float) -> float: ... +def lognormvariate(mu: float, sigma: float) -> float: ... +def normalvariate(mu: float, sigma: float) -> float: ... +def vonmisesvariate(mu: float, kappa: float) -> float: ... +def paretovariate(alpha: float) -> float: ... +def weibullvariate(alpha: float, beta: float) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/re.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/re.pyi new file mode 100644 index 0000000..2a2c2cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/re.pyi @@ -0,0 +1,100 @@ +# Stubs for re +# Ron Murawski +# 'bytes' support added by Jukka Lehtosalo + +# based on: http: //docs.python.org/2.7/library/re.html + +from typing import ( + List, Iterator, overload, Callable, Tuple, Sequence, Dict, + Generic, AnyStr, Match, Pattern, Any, Optional, Union +) + +# ----- re variables and constants ----- +DEBUG = 0 +I = 0 +IGNORECASE = 0 +L = 0 +LOCALE = 0 +M = 0 +MULTILINE = 0 +S = 0 +DOTALL = 0 +X = 0 +VERBOSE = 0 +U = 0 +UNICODE = 0 +T = 0 +TEMPLATE = 0 + +class error(Exception): ... + +@overload +def compile(pattern: AnyStr, flags: int = ...) -> Pattern[AnyStr]: ... +@overload +def compile(pattern: Pattern[AnyStr], flags: int = ...) -> Pattern[AnyStr]: ... + +@overload +def search(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... +@overload +def search(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def match(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... +@overload +def match(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def split(pattern: Union[str, unicode], string: AnyStr, + maxsplit: int = ..., flags: int = ...) -> List[AnyStr]: ... +@overload +def split(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, + maxsplit: int = ..., flags: int = ...) -> List[AnyStr]: ... + +@overload +def findall(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> List[Any]: ... +@overload +def findall(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> List[Any]: ... + +# Return an iterator yielding match objects over all non-overlapping matches +# for the RE pattern in string. The string is scanned left-to-right, and +# matches are returned in the order found. Empty matches are included in the +# result unless they touch the beginning of another match. +@overload +def finditer(pattern: Union[str, unicode], string: AnyStr, + flags: int = ...) -> Iterator[Match[AnyStr]]: ... +@overload +def finditer(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, + flags: int = ...) -> Iterator[Match[AnyStr]]: ... + +@overload +def sub(pattern: Union[str, unicode], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[str, unicode], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[Pattern[str], Pattern[unicode]], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[Pattern[str], Pattern[unicode]], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: int = ...) -> AnyStr: ... + +@overload +def subn(pattern: Union[str, unicode], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[str, unicode], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[Pattern[str], Pattern[unicode]], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[Pattern[str], Pattern[unicode]], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... + +def escape(string: AnyStr) -> AnyStr: ... + +def purge() -> None: ... +def template(pattern: Union[AnyStr, Pattern[AnyStr]], flags: int = ...) -> Pattern[AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/repr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/repr.pyi new file mode 100644 index 0000000..ad89789 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/repr.pyi @@ -0,0 +1,31 @@ +class Repr: + maxarray: int + maxdeque: int + maxdict: int + maxfrozenset: int + maxlevel: int + maxlist: int + maxlong: int + maxother: int + maxset: int + maxstring: int + maxtuple: int + def __init__(self) -> None: ... + def _repr_iterable(self, x, level: complex, left, right, maxiter, trail=...) -> str: ... + def repr(self, x) -> str: ... + def repr1(self, x, level: complex) -> str: ... + def repr_array(self, x, level: complex) -> str: ... + def repr_deque(self, x, level: complex) -> str: ... + def repr_dict(self, x, level: complex) -> str: ... + def repr_frozenset(self, x, level: complex) -> str: ... + def repr_instance(self, x, level: complex) -> str: ... + def repr_list(self, x, level: complex) -> str: ... + def repr_long(self, x, level: complex) -> str: ... + def repr_set(self, x, level: complex) -> str: ... + def repr_str(self, x, level: complex) -> str: ... + def repr_tuple(self, x, level: complex) -> str: ... + +def _possibly_sorted(x) -> list: ... + +aRepr: Repr +def repr(x) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/resource.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/resource.pyi new file mode 100644 index 0000000..2a6c694 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/resource.pyi @@ -0,0 +1,33 @@ +from typing import Tuple, NamedTuple + +class error(Exception): ... + +RLIM_INFINITY: int +def getrlimit(resource: int) -> Tuple[int, int]: ... +def setrlimit(resource: int, limits: Tuple[int, int]) -> None: ... + +RLIMIT_CORE: int +RLIMIT_CPU: int +RLIMIT_FSIZE: int +RLIMIT_DATA: int +RLIMIT_STACK: int +RLIMIT_RSS: int +RLIMIT_NPROC: int +RLIMIT_NOFILE: int +RLIMIT_OFILE: int +RLIMIT_MEMLOCK: int +RLIMIT_VMEM: int +RLIMIT_AS: int + +_RUsage = NamedTuple('_RUsage', [('ru_utime', float), ('ru_stime', float), ('ru_maxrss', int), + ('ru_ixrss', int), ('ru_idrss', int), ('ru_isrss', int), + ('ru_minflt', int), ('ru_majflt', int), ('ru_nswap', int), + ('ru_inblock', int), ('ru_oublock', int), ('ru_msgsnd', int), + ('ru_msgrcv', int), ('ru_nsignals', int), ('ru_nvcsw', int), + ('ru_nivcsw', int)]) +def getrusage(who: int) -> _RUsage: ... +def getpagesize() -> int: ... + +RUSAGE_SELF: int +RUSAGE_CHILDREN: int +RUSAGE_BOTH: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/rfc822.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/rfc822.pyi new file mode 100644 index 0000000..20cd1d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/rfc822.pyi @@ -0,0 +1,79 @@ +# Stubs for rfc822 (Python 2) +# +# Based on stub generated by stubgen. + +from typing import Any, Optional + +class Message: + fp: Any + seekable: Any + startofheaders: Any + startofbody: Any + def __init__(self, fp, seekable: int = ...): ... + def rewindbody(self): ... + dict: Any + unixfrom: Any + headers: Any + status: Any + def readheaders(self): ... + def isheader(self, line): ... + def islast(self, line): ... + def iscomment(self, line): ... + def getallmatchingheaders(self, name): ... + def getfirstmatchingheader(self, name): ... + def getrawheader(self, name): ... + def getheader(self, name, default: Optional[Any] = ...): ... + get: Any + def getheaders(self, name): ... + def getaddr(self, name): ... + def getaddrlist(self, name): ... + def getdate(self, name): ... + def getdate_tz(self, name): ... + def __len__(self): ... + def __getitem__(self, name): ... + def __setitem__(self, name, value): ... + def __delitem__(self, name): ... + def setdefault(self, name, default=...): ... + def has_key(self, name): ... + def __contains__(self, name): ... + def __iter__(self): ... + def keys(self): ... + def values(self): ... + def items(self): ... + +class AddrlistClass: + specials: Any + pos: Any + LWS: Any + CR: Any + atomends: Any + phraseends: Any + field: Any + commentlist: Any + def __init__(self, field): ... + def gotonext(self): ... + def getaddrlist(self): ... + def getaddress(self): ... + def getrouteaddr(self): ... + def getaddrspec(self): ... + def getdomain(self): ... + def getdelimited(self, beginchar, endchars, allowcomments: int = ...): ... + def getquote(self): ... + def getcomment(self): ... + def getdomainliteral(self): ... + def getatom(self, atomends: Optional[Any] = ...): ... + def getphraselist(self): ... + +class AddressList(AddrlistClass): + addresslist: Any + def __init__(self, field): ... + def __len__(self): ... + def __add__(self, other): ... + def __iadd__(self, other): ... + def __sub__(self, other): ... + def __isub__(self, other): ... + def __getitem__(self, index): ... + +def parsedate_tz(data): ... +def parsedate(data): ... +def mktime_tz(data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/robotparser.pyi new file mode 100644 index 0000000..403039a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/robotparser.pyi @@ -0,0 +1,7 @@ +class RobotFileParser: + def set_url(self, url: str): ... + def read(self): ... + def parse(self, lines: str): ... + def can_fetch(self, user_agent: str, url: str): ... + def mtime(self): ... + def modified(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/runpy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/runpy.pyi new file mode 100644 index 0000000..6674af0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/runpy.pyi @@ -0,0 +1,17 @@ +from typing import Any, Optional + +class _TempModule: + mod_name: Any + module: Any + def __init__(self, mod_name): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +class _ModifiedArgv0: + value: Any + def __init__(self, value): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +def run_module(mod_name, init_globals: Optional[Any] = ..., run_name: Optional[Any] = ..., alter_sys: bool = ...): ... +def run_path(path_name, init_globals: Optional[Any] = ..., run_name: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sets.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sets.pyi new file mode 100644 index 0000000..a68994f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sets.pyi @@ -0,0 +1,61 @@ +# Stubs for sets (Python 2) +from typing import Any, Callable, Hashable, Iterable, Iterator, MutableMapping, Optional, TypeVar, Union + +_T = TypeVar('_T') +_Setlike = Union[BaseSet[_T], Iterable[_T]] +_SelfT = TypeVar('_SelfT', bound=BaseSet) + +class BaseSet(Iterable[_T]): + def __init__(self) -> None: ... + def __len__(self) -> int: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __iter__(self) -> Iterator[_T]: ... + def __cmp__(self, other: Any) -> int: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + def copy(self: _SelfT) -> _SelfT: ... + def __copy__(self: _SelfT) -> _SelfT: ... + def __deepcopy__(self: _SelfT, memo: MutableMapping[int, BaseSet[_T]]) -> _SelfT: ... + def __or__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def union(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __and__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def intersection(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __xor__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def symmetric_difference(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __sub__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def difference(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __contains__(self, element: Any) -> bool: ... + def issubset(self, other: BaseSet[_T]) -> bool: ... + def issuperset(self, other: BaseSet[_T]) -> bool: ... + def __le__(self, other: BaseSet[_T]) -> bool: ... + def __ge__(self, other: BaseSet[_T]) -> bool: ... + def __lt__(self, other: BaseSet[_T]) -> bool: ... + def __gt__(self, other: BaseSet[_T]) -> bool: ... + +class ImmutableSet(BaseSet[_T], Hashable): + def __init__(self, iterable: Optional[_Setlike] = ...) -> None: ... + def __hash__(self) -> int: ... + +class Set(BaseSet[_T]): + def __init__(self, iterable: Optional[_Setlike] = ...) -> None: ... + def __ior__(self, other: BaseSet[_T]) -> Set: ... + def union_update(self, other: _Setlike) -> None: ... + def __iand__(self, other: BaseSet[_T]) -> Set: ... + def intersection_update(self, other: _Setlike) -> None: ... + def __ixor__(self, other: BaseSet[_T]) -> Set: ... + def symmetric_difference_update(self, other: _Setlike) -> None: ... + def __isub__(self, other: BaseSet[_T]) -> Set: ... + def difference_update(self, other: _Setlike) -> None: ... + def update(self, iterable: _Setlike) -> None: ... + def clear(self) -> None: ... + def add(self, element: _T) -> None: ... + def remove(self, element: _T) -> None: ... + def discard(self, element: _T) -> None: ... + def pop(self) -> _T: ... + def __as_immutable__(self) -> ImmutableSet[_T]: ... + def __as_temporarily_immutable__(self) -> _TemporarilyImmutableSet[_T]: ... + +class _TemporarilyImmutableSet(BaseSet[_T]): + def __init__(self, set: BaseSet[_T]) -> None: ... + def __hash__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sha.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sha.pyi new file mode 100644 index 0000000..f1606fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sha.pyi @@ -0,0 +1,11 @@ +# Stubs for Python 2.7 sha stdlib module + +class sha(object): + def update(self, arg: str) -> None: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def copy(self) -> sha: ... + +def new(string: str = ...) -> sha: ... +blocksize = 0 +digest_size = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shelve.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shelve.pyi new file mode 100644 index 0000000..d7d9b8c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shelve.pyi @@ -0,0 +1,33 @@ +from typing import Any, Dict, Iterator, List, Optional, Tuple +import collections + + +class Shelf(collections.MutableMapping): + def __init__(self, dict: Dict[Any, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def keys(self) -> List[Any]: ... + def __len__(self) -> int: ... + def has_key(self, key: Any) -> bool: ... + def __contains__(self, key: Any) -> bool: ... + def get(self, key: Any, default: Any = ...) -> Any: ... + def __getitem__(self, key: Any) -> Any: ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __enter__(self) -> Shelf: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def close(self) -> None: ... + def __del__(self) -> None: ... + def sync(self) -> None: ... + +class BsdDbShelf(Shelf): + def __init__(self, dict: Dict[Any, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def set_location(self, key: Any) -> Tuple[str, Any]: ... + def next(self) -> Tuple[str, Any]: ... + def previous(self) -> Tuple[str, Any]: ... + def first(self) -> Tuple[str, Any]: ... + def last(self) -> Tuple[str, Any]: ... + +class DbfilenameShelf(Shelf): + def __init__(self, filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> None: ... + +def open(filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> DbfilenameShelf: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shlex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shlex.pyi new file mode 100644 index 0000000..5bf6fcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/shlex.pyi @@ -0,0 +1,30 @@ +from typing import Any, IO, List, Optional, TypeVar + +def split(s: Optional[str], comments: bool = ..., posix: bool = ...) -> List[str]: ... + +_SLT = TypeVar('_SLT', bound=shlex) + +class shlex: + def __init__(self, instream: IO[Any] = ..., infile: IO[Any] = ..., posix: bool = ...) -> None: ... + def __iter__(self: _SLT) -> _SLT: ... + def get_token(self) -> Optional[str]: ... + def push_token(self, _str: str) -> None: ... + def read_token(self) -> str: ... + def sourcehook(self, filename: str) -> None: ... + def push_source(self, stream: IO[Any], filename: str = ...) -> None: ... + def pop_source(self) -> IO[Any]: ... + def error_leader(self, file: str = ..., line: int = ...) -> str: ... + + commenters: str + wordchars: str + whitespace: str + escape: str + quotes: str + escapedquotes: str + whitespace_split: bool + infile: IO[Any] + source: Optional[str] + debug: int + lineno: int + token: Any + eof: Optional[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/signal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/signal.pyi new file mode 100644 index 0000000..cda4c65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/signal.pyi @@ -0,0 +1,71 @@ +from typing import Callable, Any, Tuple, Union +from types import FrameType + +SIG_DFL: int = ... +SIG_IGN: int = ... + +ITIMER_REAL: int = ... +ITIMER_VIRTUAL: int = ... +ITIMER_PROF: int = ... + +NSIG: int = ... + +SIGABRT: int = ... +SIGALRM: int = ... +SIGBREAK: int = ... # Windows +SIGBUS: int = ... +SIGCHLD: int = ... +SIGCLD: int = ... +SIGCONT: int = ... +SIGEMT: int = ... +SIGFPE: int = ... +SIGHUP: int = ... +SIGILL: int = ... +SIGINFO: int = ... +SIGINT: int = ... +SIGIO: int = ... +SIGIOT: int = ... +SIGKILL: int = ... +SIGPIPE: int = ... +SIGPOLL: int = ... +SIGPROF: int = ... +SIGPWR: int = ... +SIGQUIT: int = ... +SIGRTMAX: int = ... +SIGRTMIN: int = ... +SIGSEGV: int = ... +SIGSTOP: int = ... +SIGSYS: int = ... +SIGTERM: int = ... +SIGTRAP: int = ... +SIGTSTP: int = ... +SIGTTIN: int = ... +SIGTTOU: int = ... +SIGURG: int = ... +SIGUSR1: int = ... +SIGUSR2: int = ... +SIGVTALRM: int = ... +SIGWINCH: int = ... +SIGXCPU: int = ... +SIGXFSZ: int = ... + +# Windows +CTRL_C_EVENT: int = ... +CTRL_BREAK_EVENT: int = ... + +class ItimerError(IOError): ... + +_HANDLER = Union[Callable[[int, FrameType], None], int, None] + +def alarm(time: int) -> int: ... +def getsignal(signalnum: int) -> _HANDLER: ... +def pause() -> None: ... +def setitimer(which: int, seconds: float, interval: float = ...) -> Tuple[float, float]: ... +def getitimer(which: int) -> Tuple[float, float]: ... +def set_wakeup_fd(fd: int) -> int: ... +def siginterrupt(signalnum: int, flag: bool) -> None: + raise RuntimeError() +def signal(signalnum: int, handler: _HANDLER) -> _HANDLER: + raise RuntimeError() +def default_int_handler(signum: int, frame: FrameType) -> None: + raise KeyboardInterrupt() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/smtplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/smtplib.pyi new file mode 100644 index 0000000..438221a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/smtplib.pyi @@ -0,0 +1,86 @@ +from typing import Any + +class SMTPException(Exception): ... +class SMTPServerDisconnected(SMTPException): ... + +class SMTPResponseException(SMTPException): + smtp_code: Any + smtp_error: Any + args: Any + def __init__(self, code, msg) -> None: ... + +class SMTPSenderRefused(SMTPResponseException): + smtp_code: Any + smtp_error: Any + sender: Any + args: Any + def __init__(self, code, msg, sender) -> None: ... + +class SMTPRecipientsRefused(SMTPException): + recipients: Any + args: Any + def __init__(self, recipients) -> None: ... + +class SMTPDataError(SMTPResponseException): ... +class SMTPConnectError(SMTPResponseException): ... +class SMTPHeloError(SMTPResponseException): ... +class SMTPAuthenticationError(SMTPResponseException): ... + +def quoteaddr(addr): ... +def quotedata(data): ... + +class SSLFakeFile: + sslobj: Any + def __init__(self, sslobj) -> None: ... + def readline(self, size=...): ... + def close(self): ... + +class SMTP: + debuglevel: Any + file: Any + helo_resp: Any + ehlo_msg: Any + ehlo_resp: Any + does_esmtp: Any + default_port: Any + timeout: Any + esmtp_features: Any + local_hostname: Any + def __init__(self, host: str = ..., port: int = ..., local_hostname=..., timeout=...) -> None: ... + def set_debuglevel(self, debuglevel): ... + sock: Any + def connect(self, host=..., port=...): ... + def send(self, str): ... + def putcmd(self, cmd, args=...): ... + def getreply(self): ... + def docmd(self, cmd, args=...): ... + def helo(self, name=...): ... + def ehlo(self, name=...): ... + def has_extn(self, opt): ... + def help(self, args=...): ... + def rset(self): ... + def noop(self): ... + def mail(self, sender, options=...): ... + def rcpt(self, recip, options=...): ... + def data(self, msg): ... + def verify(self, address): ... + vrfy: Any + def expn(self, address): ... + def ehlo_or_helo_if_needed(self): ... + def login(self, user, password): ... + def starttls(self, keyfile=..., certfile=...): ... + def sendmail(self, from_addr, to_addrs, msg, mail_options=..., rcpt_options=...): ... + def close(self): ... + def quit(self): ... + +class SMTP_SSL(SMTP): + default_port: Any + keyfile: Any + certfile: Any + def __init__(self, host=..., port=..., local_hostname=..., keyfile=..., certfile=..., timeout=...) -> None: ... + +class LMTP(SMTP): + ehlo_msg: Any + def __init__(self, host=..., port=..., local_hostname=...) -> None: ... + sock: Any + def connect(self, host=..., port=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/spwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/spwd.pyi new file mode 100644 index 0000000..1d58990 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/spwd.pyi @@ -0,0 +1,14 @@ +from typing import List, NamedTuple + +struct_spwd = NamedTuple("struct_spwd", [("sp_nam", str), + ("sp_pwd", str), + ("sp_lstchg", int), + ("sp_min", int), + ("sp_max", int), + ("sp_warn", int), + ("sp_inact", int), + ("sp_expire", int), + ("sp_flag", int)]) + +def getspall() -> List[struct_spwd]: ... +def getspnam(name: str) -> struct_spwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi new file mode 100644 index 0000000..89d453e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi @@ -0,0 +1,94 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_constants.py + +from typing import Dict, List, TypeVar + +MAGIC: int +MAXREPEAT: int + +class error(Exception): ... + +FAILURE: str +SUCCESS: str +ANY: str +ANY_ALL: str +ASSERT: str +ASSERT_NOT: str +AT: str +BIGCHARSET: str +BRANCH: str +CALL: str +CATEGORY: str +CHARSET: str +GROUPREF: str +GROUPREF_IGNORE: str +GROUPREF_EXISTS: str +IN: str +IN_IGNORE: str +INFO: str +JUMP: str +LITERAL: str +LITERAL_IGNORE: str +MARK: str +MAX_REPEAT: str +MAX_UNTIL: str +MIN_REPEAT: str +MIN_UNTIL: str +NEGATE: str +NOT_LITERAL: str +NOT_LITERAL_IGNORE: str +RANGE: str +REPEAT: str +REPEAT_ONE: str +SUBPATTERN: str +MIN_REPEAT_ONE: str +AT_BEGINNING: str +AT_BEGINNING_LINE: str +AT_BEGINNING_STRING: str +AT_BOUNDARY: str +AT_NON_BOUNDARY: str +AT_END: str +AT_END_LINE: str +AT_END_STRING: str +AT_LOC_BOUNDARY: str +AT_LOC_NON_BOUNDARY: str +AT_UNI_BOUNDARY: str +AT_UNI_NON_BOUNDARY: str +CATEGORY_DIGIT: str +CATEGORY_NOT_DIGIT: str +CATEGORY_SPACE: str +CATEGORY_NOT_SPACE: str +CATEGORY_WORD: str +CATEGORY_NOT_WORD: str +CATEGORY_LINEBREAK: str +CATEGORY_NOT_LINEBREAK: str +CATEGORY_LOC_WORD: str +CATEGORY_LOC_NOT_WORD: str +CATEGORY_UNI_DIGIT: str +CATEGORY_UNI_NOT_DIGIT: str +CATEGORY_UNI_SPACE: str +CATEGORY_UNI_NOT_SPACE: str +CATEGORY_UNI_WORD: str +CATEGORY_UNI_NOT_WORD: str +CATEGORY_UNI_LINEBREAK: str +CATEGORY_UNI_NOT_LINEBREAK: str + +_T = TypeVar('_T') +def makedict(list: List[_T]) -> Dict[_T, int]: ... + +OP_IGNORE: Dict[str, str] +AT_MULTILINE: Dict[str, str] +AT_LOCALE: Dict[str, str] +AT_UNICODE: Dict[str, str] +CH_LOCALE: Dict[str, str] +CH_UNICODE: Dict[str, str] +SRE_FLAG_TEMPLATE: int +SRE_FLAG_IGNORECASE: int +SRE_FLAG_LOCALE: int +SRE_FLAG_MULTILINE: int +SRE_FLAG_DOTALL: int +SRE_FLAG_UNICODE: int +SRE_FLAG_VERBOSE: int +SRE_FLAG_DEBUG: int +SRE_INFO_PREFIX: int +SRE_INFO_LITERAL: int +SRE_INFO_CHARSET: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi new file mode 100644 index 0000000..beabb40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi @@ -0,0 +1,63 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_parse.py + +from typing import Any, Dict, Iterable, List, Match, Optional, Pattern as _Pattern, Set, Tuple, Union + +SPECIAL_CHARS: str +REPEAT_CHARS: str +DIGITS: Set +OCTDIGITS: Set +HEXDIGITS: Set +WHITESPACE: Set +ESCAPES: Dict[str, Tuple[str, int]] +CATEGORIES: Dict[str, Union[Tuple[str, str], Tuple[str, List[Tuple[str, str]]]]] +FLAGS: Dict[str, int] + +class Pattern: + flags: int + open: List[int] + groups: int + groupdict: Dict[str, int] + lookbehind: int + def __init__(self) -> None: ... + def opengroup(self, name: str = ...) -> int: ... + def closegroup(self, gid: int) -> None: ... + def checkgroup(self, gid: int) -> bool: ... + + +_OpSubpatternType = Tuple[Optional[int], int, int, SubPattern] +_OpGroupRefExistsType = Tuple[int, SubPattern, SubPattern] +_OpInType = List[Tuple[str, int]] +_OpBranchType = Tuple[None, List[SubPattern]] +_AvType = Union[_OpInType, _OpBranchType, Iterable[SubPattern], _OpGroupRefExistsType, _OpSubpatternType] +_CodeType = Union[str, _AvType] + +class SubPattern: + pattern: str + data: List[_CodeType] + width: Optional[int] + def __init__(self, pattern, data: List[_CodeType] = ...) -> None: ... + def dump(self, level: int = ...) -> None: ... + def __len__(self) -> int: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __getitem__(self, index: Union[int, slice]) -> Union[SubPattern, _CodeType]: ... + def __setitem__(self, index: Union[int, slice], code: _CodeType): ... + def insert(self, index, code: _CodeType) -> None: ... + def append(self, code: _CodeType) -> None: ... + def getwidth(self) -> int: ... + +class Tokenizer: + string: str + index: int + def __init__(self, string: str) -> None: ... + def match(self, char: str, skip: int = ...) -> int: ... + def get(self) -> Optional[str]: ... + def tell(self) -> Tuple[int, Optional[str]]: ... + def seek(self, index: int) -> None: ... + +def isident(char: str) -> bool: ... +def isdigit(char: str) -> bool: ... +def isname(name: str) -> bool: ... +def parse(str: str, flags: int = ..., pattern: Pattern = ...) -> SubPattern: ... +_Template = Tuple[List[Tuple[int, int]], List[Optional[int]]] +def parse_template(source: str, pattern: _Pattern) -> _Template: ... +def expand_template(template: _Template, match: Match) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stat.pyi new file mode 100644 index 0000000..dd3418d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stat.pyi @@ -0,0 +1,59 @@ +def S_ISDIR(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISBLK(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +ST_MODE = 0 +ST_INO = 0 +ST_DEV = 0 +ST_NLINK = 0 +ST_UID = 0 +ST_GID = 0 +ST_SIZE = 0 +ST_ATIME = 0 +ST_MTIME = 0 +ST_CTIME = 0 +S_IFSOCK = 0 +S_IFLNK = 0 +S_IFREG = 0 +S_IFBLK = 0 +S_IFDIR = 0 +S_IFCHR = 0 +S_IFIFO = 0 +S_ISUID = 0 +S_ISGID = 0 +S_ISVTX = 0 +S_IRWXU = 0 +S_IRUSR = 0 +S_IWUSR = 0 +S_IXUSR = 0 +S_IRWXG = 0 +S_IRGRP = 0 +S_IWGRP = 0 +S_IXGRP = 0 +S_IRWXO = 0 +S_IROTH = 0 +S_IWOTH = 0 +S_IXOTH = 0 +S_ENFMT = 0 +S_IREAD = 0 +S_IWRITE = 0 +S_IEXEC = 0 +UF_NODUMP = 0 +UF_IMMUTABLE = 0 +UF_APPEND = 0 +UF_OPAQUE = 0 +UF_NOUNLINK = 0 +UF_COMPRESSED = 0 +UF_HIDDEN = 0 +SF_ARCHIVED = 0 +SF_IMMUTABLE = 0 +SF_APPEND = 0 +SF_NOUNLINK = 0 +SF_SNAPSHOT = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/string.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/string.pyi new file mode 100644 index 0000000..624f092 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/string.pyi @@ -0,0 +1,78 @@ +# Stubs for string + +# Based on http://docs.python.org/3.2/library/string.html + +from typing import Any, AnyStr, Iterable, List, Mapping, Optional, overload, Sequence, Text, Tuple, Union + +ascii_letters: str +ascii_lowercase: str +ascii_uppercase: str +digits: str +hexdigits: str +letters: str +lowercase: str +octdigits: str +punctuation: str +printable: str +uppercase: str +whitespace: str + +def capwords(s: AnyStr, sep: AnyStr = ...) -> AnyStr: ... +# TODO: originally named 'from' +def maketrans(_from: str, to: str) -> str: ... +def atof(s: unicode) -> float: ... +def atoi(s: unicode, base: int = ...) -> int: ... +def atol(s: unicode, base: int = ...) -> int: ... +def capitalize(word: AnyStr) -> AnyStr: ... +def find(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rfind(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def index(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rindex(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def count(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def lower(s: AnyStr) -> AnyStr: ... +def split(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def rsplit(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def splitfields(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def join(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def joinfields(word: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def lstrip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def rstrip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def strip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def swapcase(s: AnyStr) -> AnyStr: ... +def translate(s: str, table: str, deletechars: str = ...) -> str: ... +def upper(s: AnyStr) -> AnyStr: ... +def ljust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def rjust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def center(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def zfill(s: AnyStr, width: int) -> AnyStr: ... +def replace(s: AnyStr, old: AnyStr, new: AnyStr, maxreplace: int = ...) -> AnyStr: ... + +class Template: + template: Text + + def __init__(self, template: Text) -> None: ... + @overload + def substitute(self, mapping: Union[Mapping[str, str], Mapping[unicode, str]] = ..., **kwds: str) -> str: ... + @overload + def substitute(self, mapping: Union[Mapping[str, Text], Mapping[unicode, Text]] = ..., **kwds: Text) -> Text: ... + @overload + def safe_substitute(self, mapping: Union[Mapping[str, str], Mapping[unicode, str]] = ..., **kwds: str) -> str: ... + @overload + def safe_substitute(self, mapping: Union[Mapping[str, Text], Mapping[unicode, Text]], **kwds: Text) -> Text: ... + +# TODO(MichalPokorny): This is probably badly and/or loosely typed. +class Formatter(object): + def format(self, format_string: str, *args, **kwargs) -> str: ... + def vformat(self, format_string: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> str: ... + def parse(self, format_string: str) -> Iterable[Tuple[str, str, str, str]]: ... + def get_field(self, field_name: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: ... + def get_value(self, key: Union[int, str], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: + raise IndexError() + raise KeyError() + def check_unused_args(self, used_args: Sequence[Union[int, str]], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> None: ... + def format_field(self, value: Any, format_spec: str) -> Any: ... + def convert_field(self, value: Any, conversion: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stringold.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stringold.pyi new file mode 100644 index 0000000..ab3e764 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/stringold.pyi @@ -0,0 +1,46 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/stringold.py +from typing import AnyStr, Iterable, List, Optional, Type + +whitespace: str +lowercase: str +uppercase: str +letters: str +digits: str +hexdigits: str +octdigits: str +_idmap: str +_idmapL: Optional[List[str]] +index_error = ValueError +atoi_error = ValueError +atof_error = ValueError +atol_error = ValueError + + +def lower(s: AnyStr) -> AnyStr: ... +def upper(s: AnyStr) -> AnyStr: ... +def swapcase(s: AnyStr) -> AnyStr: ... +def strip(s: AnyStr) -> AnyStr: ... +def lstrip(s: AnyStr) -> AnyStr: ... +def rstrip(s: AnyStr) -> AnyStr: ... +def split(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def splitfields(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def join(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def joinfields(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def index(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rindex(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def count(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def find(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rfind(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def atof(s: unicode) -> float: ... +def atoi(s: unicode, base: int = ...) -> int: ... +def atol(s: unicode, base: int = ...) -> long: ... +def ljust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def rjust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def center(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def zfill(s: AnyStr, width: int) -> AnyStr: ... +def expandtabs(s: AnyStr, tabsize: int = ...) -> AnyStr: ... +def translate(s: str, table: str, deletions: str = ...) -> str: ... +def capitalize(s: AnyStr) -> AnyStr: ... +def capwords(s: AnyStr, sep: AnyStr = ...) -> AnyStr: ... +def maketrans(fromstr: str, tostr: str) -> str: ... +def replace(s: AnyStr, old: AnyStr, new: AnyStr, maxreplace: int = ...) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/strop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/strop.pyi new file mode 100644 index 0000000..e1a098f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/strop.pyi @@ -0,0 +1,72 @@ +"""Stub file for the 'strop' module.""" + +from typing import List, Sequence + +lowercase: str +uppercase: str +whitespace: str + +def atof(a: str) -> float: + raise DeprecationWarning() + +def atoi(a: str, base: int = ...) -> int: + raise DeprecationWarning() + +def atol(a: str, base: int = ...) -> long: + raise DeprecationWarning() + +def capitalize(s: str) -> str: + raise DeprecationWarning() + +def count(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def expandtabs(string: str, tabsize: int = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def find(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def join(list: Sequence[str], sep: str = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def joinfields(list: Sequence[str], sep: str = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def lower(s: str) -> str: + raise DeprecationWarning() + +def lstrip(s: str) -> str: + raise DeprecationWarning() + +def maketrans(frm: str, to: str) -> str: ... + +def replace(s: str, old: str, new: str, maxsplit: int = ...) -> str: + raise DeprecationWarning() + +def rfind(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def rstrip(s: str) -> str: + raise DeprecationWarning() + +def split(s: str, sep: str, maxsplit: int = ...) -> List[str]: + raise DeprecationWarning() + +def splitfields(s: str, sep: str, maxsplit: int = ...) -> List[str]: + raise DeprecationWarning() + +def strip(s: str) -> str: + raise DeprecationWarning() + +def swapcase(s: str) -> str: + raise DeprecationWarning() + +def translate(s: str, table: str, deletechars: str = ...) -> str: + raise DeprecationWarning() + +def upper(s: str) -> str: + raise DeprecationWarning() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/subprocess.pyi new file mode 100644 index 0000000..b60e89e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/subprocess.pyi @@ -0,0 +1,117 @@ +# Stubs for subprocess + +# Based on http://docs.python.org/2/library/subprocess.html and Python 3 stub + +from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Union, Optional, List, Text + +_FILE = Union[None, int, IO[Any]] +_TXT = Union[bytes, Text] +_CMD = Union[_TXT, Sequence[_TXT]] +_ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] + +# Same args as Popen.__init__ +def call(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> int: ... + +def check_call(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> int: ... + +# Same args as Popen.__init__ except for stdout +def check_output(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> bytes: ... + +PIPE: int +STDOUT: int + +class CalledProcessError(Exception): + returncode = 0 + # morally: _CMD + cmd: Any + # morally: Optional[bytes] + output: Any + + def __init__(self, + returncode: int, + cmd: _CMD, + output: Optional[bytes] = ...) -> None: ... + +class Popen: + stdin: Optional[IO[Any]] + stdout: Optional[IO[Any]] + stderr: Optional[IO[Any]] + pid = 0 + returncode = 0 + + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_TXT] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_TXT] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ...) -> None: ... + + def poll(self) -> int: ... + def wait(self) -> int: ... + # morally: -> Tuple[Optional[bytes], Optional[bytes]] + def communicate(self, input: Optional[_TXT] = ...) -> Tuple[Any, Any]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + def __enter__(self) -> Popen: ... + def __exit__(self, type, value, traceback) -> bool: ... + +def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented + +# Windows-only: STARTUPINFO etc. + +STD_INPUT_HANDLE: Any +STD_OUTPUT_HANDLE: Any +STD_ERROR_HANDLE: Any +SW_HIDE: Any +STARTF_USESTDHANDLES: Any +STARTF_USESHOWWINDOW: Any +CREATE_NEW_CONSOLE: Any +CREATE_NEW_PROCESS_GROUP: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/symbol.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/symbol.pyi new file mode 100644 index 0000000..55d25a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/symbol.pyi @@ -0,0 +1,91 @@ +# Stubs for symbol (Python 2) + +from typing import Dict + +single_input: int +file_input: int +eval_input: int +decorator: int +decorators: int +decorated: int +funcdef: int +parameters: int +varargslist: int +fpdef: int +fplist: int +stmt: int +simple_stmt: int +small_stmt: int +expr_stmt: int +augassign: int +print_stmt: int +del_stmt: int +pass_stmt: int +flow_stmt: int +break_stmt: int +continue_stmt: int +return_stmt: int +yield_stmt: int +raise_stmt: int +import_stmt: int +import_name: int +import_from: int +import_as_name: int +dotted_as_name: int +import_as_names: int +dotted_as_names: int +dotted_name: int +global_stmt: int +exec_stmt: int +assert_stmt: int +compound_stmt: int +if_stmt: int +while_stmt: int +for_stmt: int +try_stmt: int +with_stmt: int +with_item: int +except_clause: int +suite: int +testlist_safe: int +old_test: int +old_lambdef: int +test: int +or_test: int +and_test: int +not_test: int +comparison: int +comp_op: int +expr: int +xor_expr: int +and_expr: int +shift_expr: int +arith_expr: int +term: int +factor: int +power: int +atom: int +listmaker: int +testlist_comp: int +lambdef: int +trailer: int +subscriptlist: int +subscript: int +sliceop: int +exprlist: int +testlist: int +dictorsetmaker: int +classdef: int +arglist: int +argument: int +list_iter: int +list_for: int +list_if: int +comp_iter: int +comp_for: int +comp_if: int +testlist1: int +encoding_decl: int +yield_expr: int + +sym_name: Dict[int, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sys.pyi new file mode 100644 index 0000000..e67b263 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/sys.pyi @@ -0,0 +1,138 @@ +"""Stubs for the 'sys' module.""" + +from typing import ( + IO, NoReturn, Union, List, Sequence, Any, Dict, Tuple, BinaryIO, Optional, + Callable, overload, Text, Type, +) +from types import FrameType, ModuleType, TracebackType, ClassType + +# The following type alias are stub-only and do not exist during runtime +_ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +_OptExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +class _flags: + bytes_warning: int + debug: int + division_new: int + division_warning: int + dont_write_bytecode: int + hash_randomization: int + ignore_environment: int + inspect: int + interactive: int + no_site: int + no_user_site: int + optimize: int + py3k_warning: int + tabcheck: int + unicode: int + verbose: int + +class _float_info: + max: float + max_exp: int + max_10_exp: int + min: float + min_exp: int + min_10_exp: int + dig: int + mant_dig: int + epsilon: float + radix: int + rounds: int + +class _version_info(Tuple[int, int, int, str, int]): + major = 0 + minor = 0 + micro = 0 + releaselevel: str + serial = 0 + +_mercurial: Tuple[str, str, str] +api_version: int +argv: List[str] +builtin_module_names: Tuple[str, ...] +byteorder: str +copyright: str +dont_write_bytecode: bool +exec_prefix: str +executable: str +flags: _flags +float_repr_style: str +hexversion: int +long_info: object +maxint: int +maxsize: int +maxunicode: int +modules: Dict[str, Any] +path: List[str] +platform: str +prefix: str +py3kwarning: bool +__stderr__: IO[str] +__stdin__: IO[str] +__stdout__: IO[str] +stderr: IO[str] +stdin: IO[str] +stdout: IO[str] +subversion: Tuple[str, str, str] +version: str +warnoptions: object +float_info: _float_info +version_info: _version_info +ps1: str +ps2: str +last_type: type +last_value: BaseException +last_traceback: TracebackType +# TODO precise types +meta_path: List[Any] +path_hooks: List[Any] +path_importer_cache: Dict[str, Any] +displayhook: Optional[Callable[[int], None]] +excepthook: Optional[Callable[[type, BaseException, TracebackType], None]] +exc_type: Optional[type] +exc_value: Union[BaseException, ClassType] +exc_traceback: TracebackType + +class _WindowsVersionType: + major: Any + minor: Any + build: Any + platform: Any + service_pack: Any + service_pack_major: Any + service_pack_minor: Any + suite_mask: Any + product_type: Any + +def getwindowsversion() -> _WindowsVersionType: ... + +def _clear_type_cache() -> None: ... +def _current_frames() -> Dict[int, FrameType]: ... +def _getframe(depth: int = ...) -> FrameType: ... +def call_tracing(fn: Any, args: Any) -> Any: ... +def __displayhook__(value: int) -> None: ... +def __excepthook__(type_: type, value: BaseException, traceback: TracebackType) -> None: ... +def exc_clear() -> None: + raise DeprecationWarning() +def exc_info() -> _OptExcInfo: ... + +# sys.exit() accepts an optional argument of anything printable +def exit(arg: Any = ...) -> NoReturn: + raise SystemExit() +def getcheckinterval() -> int: ... # deprecated +def getdefaultencoding() -> str: ... +def getdlopenflags() -> int: ... +def getfilesystemencoding() -> str: ... # In practice, never returns None +def getrefcount(arg: Any) -> int: ... +def getrecursionlimit() -> int: ... +def getsizeof(obj: object, default: int = ...) -> int: ... +def getprofile() -> Optional[Any]: ... +def gettrace() -> Optional[Any]: ... +def setcheckinterval(interval: int) -> None: ... # deprecated +def setdlopenflags(n: int) -> None: ... +def setdefaultencoding(encoding: Text) -> None: ... # only exists after reload(sys) +def setprofile(profilefunc: Any) -> None: ... # TODO type +def setrecursionlimit(limit: int) -> None: ... +def settrace(tracefunc: Any) -> None: ... # TODO type diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tempfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tempfile.pyi new file mode 100644 index 0000000..2dcc1a9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tempfile.pyi @@ -0,0 +1,111 @@ +from typing import Any, AnyStr, IO, Iterable, Iterator, List, Optional, overload, Text, Tuple, Union +from thread import LockType +from random import Random + +TMP_MAX: int +tempdir: str +template: str +_name_sequence: Optional[_RandomNameSequence] + +class _RandomNameSequence: + characters: str = ... + mutex: LockType + @property + def rng(self) -> Random: ... + def __iter__(self) -> _RandomNameSequence: ... + def next(self) -> str: ... + # from os.path: + def normcase(self, path: AnyStr) -> AnyStr: ... + +class _TemporaryFileWrapper(IO[str]): + delete: bool + file: IO + name: Any + def __init__(self, file: IO, name: Any, delete: bool = ...) -> None: ... + def __del__(self) -> None: ... + def __enter__(self) -> _TemporaryFileWrapper: ... + def __exit__(self, exc, value, tb) -> bool: ... + def __getattr__(self, name: unicode) -> Any: ... + def close(self) -> None: ... + def unlink(self, path: unicode) -> None: ... + # These methods don't exist directly on this object, but + # are delegated to the underlying IO object through __getattr__. + # We need to add them here so that this class is concrete. + def __iter__(self) -> Iterator[str]: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: Text) -> int: ... + def writelines(self, lines: Iterable[str]) -> None: ... + + +# TODO text files + +def TemporaryFile( + mode: Union[bytes, unicode] = ..., + bufsize: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ... +) -> _TemporaryFileWrapper: + ... + +def NamedTemporaryFile( + mode: Union[bytes, unicode] = ..., + bufsize: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ..., + delete: bool = ... +) -> _TemporaryFileWrapper: + ... + +def SpooledTemporaryFile( + max_size: int = ..., + mode: Union[bytes, unicode] = ..., + buffering: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ... +) -> _TemporaryFileWrapper: + ... + +class TemporaryDirectory: + name: Any + def __init__(self, + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> Any: ... # Can be str or unicode + def __exit__(self, type, value, traceback) -> bool: ... + +@overload +def mkstemp() -> Tuple[int, str]: ... +@overload +def mkstemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ..., + text: bool = ...) -> Tuple[int, AnyStr]: ... +@overload +def mkdtemp() -> str: ... +@overload +def mkdtemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... +@overload +def mktemp() -> str: ... +@overload +def mktemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... +def gettempdir() -> str: ... +def gettempprefix() -> str: ... + +def _candidate_tempdir_list() -> List[str]: ... +def _get_candidate_names() -> Optional[_RandomNameSequence]: ... +def _get_default_tempdir() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/textwrap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/textwrap.pyi new file mode 100644 index 0000000..60498a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/textwrap.pyi @@ -0,0 +1,61 @@ +from typing import AnyStr, List, Dict, Pattern + +class TextWrapper(object): + width: int = ... + initial_indent: str = ... + subsequent_indent: str = ... + expand_tabs: bool = ... + replace_whitespace: bool = ... + fix_sentence_endings: bool = ... + drop_whitespace: bool = ... + break_long_words: bool = ... + break_on_hyphens: bool = ... + + # Attributes not present in documentation + sentence_end_re: Pattern[str] = ... + wordsep_re: Pattern[str] = ... + wordsep_simple_re: Pattern[str] = ... + whitespace_trans: str = ... + unicode_whitespace_trans: Dict[int, int] = ... + uspace: int = ... + x: int = ... + + def __init__( + self, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> None: + ... + + def wrap(self, text: AnyStr) -> List[AnyStr]: ... + def fill(self, text: AnyStr) -> AnyStr: ... + +def wrap(text: AnyStr, + width: int = ..., + initial_indent: AnyStr = ..., + subsequent_indent: AnyStr = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> List[AnyStr]: ... + +def fill(text: AnyStr, + width: int = ..., + initial_indent: AnyStr = ..., + subsequent_indent: AnyStr = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> AnyStr: ... + +def dedent(text: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/thread.pyi new file mode 100644 index 0000000..eb4e6d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/thread.pyi @@ -0,0 +1,30 @@ +"""Stubs for the "thread" module.""" +from typing import Callable, Any + +def _count() -> int: ... + +class error(Exception): ... + +class LockType: + def acquire(self, waitflag: int = ...) -> bool: ... + def acquire_lock(self, waitflag: int = ...) -> bool: ... + def release(self) -> None: ... + def release_lock(self) -> None: ... + def locked(self) -> bool: ... + def locked_lock(self) -> bool: ... + def __enter__(self) -> LockType: ... + def __exit__(self, typ: Any, value: Any, traceback: Any) -> None: ... + +class _local(object): ... +class _localdummy(object): ... + +def start_new(function: Callable[..., Any], args: Any, kwargs: Any = ...) -> int: ... +def start_new_thread(function: Callable[..., Any], args: Any, kwargs: Any = ...) -> int: ... +def interrupt_main() -> None: ... +def exit() -> None: + raise SystemExit() +def exit_thread() -> Any: + raise SystemExit() +def allocate_lock() -> LockType: ... +def get_ident() -> int: ... +def stack_size(size: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/toaiff.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/toaiff.pyi new file mode 100644 index 0000000..77334c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/toaiff.pyi @@ -0,0 +1,16 @@ +# Stubs for toaiff (Python 2) + +# Source: https://hg.python.org/cpython/file/2.7/Lib/toaiff.py +from pipes import Template +from typing import Dict, List + + +__all__: List[str] +table: Dict[str, Template] +t: Template +uncompress: Template + +class error(Exception): ... + +def toaiff(filename: str) -> str: ... +def _toaiff(filename: str, temps: List[str]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tokenize.pyi new file mode 100644 index 0000000..43457b6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/tokenize.pyi @@ -0,0 +1,136 @@ +# Automatically generated by pytype, manually fixed up. May still contain errors. + +from typing import Any, Callable, Dict, Generator, Iterator, List, Tuple, Union, Iterable + +__author__: str +__credits__: str + +AMPER: int +AMPEREQUAL: int +AT: int +BACKQUOTE: int +Binnumber: str +Bracket: str +CIRCUMFLEX: int +CIRCUMFLEXEQUAL: int +COLON: int +COMMA: int +COMMENT: int +Comment: str +ContStr: str +DEDENT: int +DOT: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +DOUBLESTAR: int +DOUBLESTAREQUAL: int +Decnumber: str +Double: str +Double3: str +ENDMARKER: int +EQEQUAL: int +EQUAL: int +ERRORTOKEN: int +Expfloat: str +Exponent: str +Floatnumber: str +Funny: str +GREATER: int +GREATEREQUAL: int +Hexnumber: str +INDENT: int + +def ISEOF(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISTERMINAL(x: int) -> bool: ... + +Ignore: str +Imagnumber: str +Intnumber: str +LBRACE: int +LEFTSHIFT: int +LEFTSHIFTEQUAL: int +LESS: int +LESSEQUAL: int +LPAR: int +LSQB: int +MINEQUAL: int +MINUS: int +NAME: int +NEWLINE: int +NL: int +NOTEQUAL: int +NT_OFFSET: int +NUMBER: int +N_TOKENS: int +Name: str +Number: str +OP: int +Octnumber: str +Operator: str +PERCENT: int +PERCENTEQUAL: int +PLUS: int +PLUSEQUAL: int +PlainToken: str +Pointfloat: str +PseudoExtras: str +PseudoToken: str +RBRACE: int +RIGHTSHIFT: int +RIGHTSHIFTEQUAL: int +RPAR: int +RSQB: int +SEMI: int +SLASH: int +SLASHEQUAL: int +STAR: int +STAREQUAL: int +STRING: int +Single: str +Single3: str +Special: str +String: str +TILDE: int +Token: str +Triple: str +VBAR: int +VBAREQUAL: int +Whitespace: str +chain: type +double3prog: type +endprogs: Dict[str, Any] +pseudoprog: type +single3prog: type +single_quoted: Dict[str, str] +t: str +tabsize: int +tok_name: Dict[int, str] +tokenprog: type +triple_quoted: Dict[str, str] +x: str + +_Pos = Tuple[int, int] +_TokenType = Tuple[int, str, _Pos, _Pos, str] + +def any(*args, **kwargs) -> str: ... +def generate_tokens(readline: Callable[[], str]) -> Generator[_TokenType, None, None]: ... +def group(*args: str) -> str: ... +def maybe(*args: str) -> str: ... +def printtoken(type: int, token: str, srow_scol: _Pos, erow_ecol: _Pos, line: str) -> None: ... +def tokenize(readline: Callable[[], str], tokeneater: Callable[[Tuple[int, str, _Pos, _Pos, str]], None]) -> None: ... +def tokenize_loop(readline: Callable[[], str], tokeneater: Callable[[Tuple[int, str, _Pos, _Pos, str]], None]) -> None: ... +def untokenize(iterable: Iterable[_TokenType]) -> str: ... + +class StopTokenizing(Exception): ... + +class TokenError(Exception): ... + +class Untokenizer: + prev_col: int + prev_row: int + tokens: List[str] + def __init__(self) -> None: ... + def add_whitespace(self, _Pos) -> None: ... + def compat(self, token: Tuple[int, Any], iterable: Iterator[_TokenType]) -> None: ... + def untokenize(self, iterable: Iterable[_TokenType]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/types.pyi new file mode 100644 index 0000000..5984706 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/types.pyi @@ -0,0 +1,168 @@ +# Stubs for types +# Note, all classes "defined" here require special handling. + +from typing import ( + Any, Callable, Dict, Iterable, Iterator, List, Optional, + Tuple, Type, TypeVar, Union, overload, +) + +_T = TypeVar('_T') + +class NoneType: ... +TypeType = type +ObjectType = object + +IntType = int +LongType = int # Really long, but can't reference that due to a mypy import cycle +FloatType = float +BooleanType = bool +ComplexType = complex +StringType = str +UnicodeType = unicode +StringTypes: Tuple[Type[StringType], Type[UnicodeType]] +BufferType = buffer +TupleType = tuple +ListType = list +DictType = dict +DictionaryType = dict + +class _Cell: + cell_contents: Any + +class FunctionType: + func_closure: Optional[Tuple[_Cell, ...]] = ... + func_code: CodeType = ... + func_defaults: Optional[Tuple[Any, ...]] = ... + func_dict: Dict[str, Any] = ... + func_doc: Optional[str] = ... + func_globals: Dict[str, Any] = ... + func_name: str = ... + __closure__ = func_closure + __code__ = func_code + __defaults__ = func_defaults + __dict__ = func_dict + __globals__ = func_globals + __name__ = func_name + def __init__(self, code: CodeType, globals: Dict[str, Any], name: Optional[str] = ..., argdefs: Optional[Tuple[object, ...]] = ..., closure: Optional[Tuple[_Cell, ...]] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __get__(self, obj: Optional[object], type: Optional[type]) -> UnboundMethodType: ... + +LambdaType = FunctionType + +class CodeType: + co_argcount: int + co_cellvars: Tuple[str, ...] + co_code: str + co_consts: Tuple[Any, ...] + co_filename: str + co_firstlineno: int + co_flags: int + co_freevars: Tuple[str, ...] + co_lnotab: str + co_name: str + co_names: Tuple[str, ...] + co_nlocals: int + co_stacksize: int + co_varnames: Tuple[str, ...] + +class GeneratorType: + gi_code: CodeType + gi_frame: FrameType + gi_running: int + def __iter__(self) -> GeneratorType: ... + def close(self) -> None: ... + def next(self) -> Any: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +class ClassType: ... +class UnboundMethodType: + im_class: type = ... + im_func: FunctionType = ... + im_self: object = ... + __name__: str + __func__ = im_func + __self__ = im_self + def __init__(self, func: Callable, obj: object) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + +class InstanceType(object): ... + +MethodType = UnboundMethodType + +class BuiltinFunctionType: + __self__: Optional[object] + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +BuiltinMethodType = BuiltinFunctionType + +class ModuleType: + __doc__: Optional[str] + __file__: Optional[str] + __name__: str + __package__: Optional[str] + __path__: Optional[Iterable[str]] + __dict__: Dict[str, Any] + def __init__(self, name: str, doc: Optional[str] = ...) -> None: ... +FileType = file +XRangeType = xrange + +class TracebackType: + tb_frame: FrameType + tb_lasti: int + tb_lineno: int + tb_next: TracebackType + +class FrameType: + f_back: FrameType + f_builtins: Dict[str, Any] + f_code: CodeType + f_exc_type: None + f_exc_value: None + f_exc_traceback: None + f_globals: Dict[str, Any] + f_lasti: int + f_lineno: int + f_locals: Dict[str, Any] + f_restricted: bool + f_trace: Callable[[], None] + + def clear(self) -> None: ... + +SliceType = slice +class EllipsisType: ... + +class DictProxyType: + # TODO is it possible to have non-string keys? + # no __init__ + def copy(self) -> dict: ... + def get(self, key: str, default: _T = ...) -> Union[Any, _T]: ... + def has_key(self, key: str) -> bool: ... + def items(self) -> List[Tuple[str, Any]]: ... + def iteritems(self) -> Iterator[Tuple[str, Any]]: ... + def iterkeys(self) -> Iterator[str]: ... + def itervalues(self) -> Iterator[Any]: ... + def keys(self) -> List[str]: ... + def values(self) -> List[Any]: ... + def __contains__(self, key: str) -> bool: ... + def __getitem__(self, key: str) -> Any: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + +class NotImplementedType: ... + +class GetSetDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... +# Same type on Jython, different on CPython and PyPy, unknown on IronPython. +class MemberDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/typing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/typing.pyi new file mode 100644 index 0000000..6c159b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/typing.pyi @@ -0,0 +1,468 @@ +# Stubs for typing (Python 2.7) + +from abc import abstractmethod, ABCMeta +from types import CodeType, FrameType, TracebackType +import collections # Needed by aliases like DefaultDict, see mypy issue 2986 + +# Definitions of special type checking related constructs. Their definitions +# are not used, so their value does not matter. + +overload = object() +Any = object() +TypeVar = object() +_promote = object() +no_type_check = object() + +class _SpecialForm(object): + def __getitem__(self, typeargs: Any) -> object: ... + +Tuple: _SpecialForm = ... +Generic: _SpecialForm = ... +Protocol: _SpecialForm = ... +Callable: _SpecialForm = ... +Type: _SpecialForm = ... +ClassVar: _SpecialForm = ... + +class GenericMeta(type): ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] + +# Type aliases and type constructors + +class TypeAlias: + # Class for defining generic aliases for library types. + def __init__(self, target_type: type) -> None: ... + def __getitem__(self, typeargs: Any) -> Any: ... + +Union = TypeAlias(object) +Optional = TypeAlias(object) +List = TypeAlias(object) +Dict = TypeAlias(object) +DefaultDict = TypeAlias(object) +Set = TypeAlias(object) +FrozenSet = TypeAlias(object) +Counter = TypeAlias(object) +Deque = TypeAlias(object) + +# Predefined type variables. +AnyStr = TypeVar('AnyStr', str, unicode) + +# Abstract base classes. + +# These type variables are used by the container types. +_T = TypeVar('_T') +_S = TypeVar('_S') +_KT = TypeVar('_KT') # Key type. +_VT = TypeVar('_VT') # Value type. +_T_co = TypeVar('_T_co', covariant=True) # Any type covariant containers. +_V_co = TypeVar('_V_co', covariant=True) # Any type covariant containers. +_KT_co = TypeVar('_KT_co', covariant=True) # Key type covariant containers. +_VT_co = TypeVar('_VT_co', covariant=True) # Value type covariant containers. +_T_contra = TypeVar('_T_contra', contravariant=True) # Ditto contravariant. +_TC = TypeVar('_TC', bound=Type[object]) +_C = TypeVar("_C", bound=Callable) + +def runtime(cls: _TC) -> _TC: ... + +@runtime +class SupportsInt(Protocol, metaclass=ABCMeta): + @abstractmethod + def __int__(self) -> int: ... + +@runtime +class SupportsFloat(Protocol, metaclass=ABCMeta): + @abstractmethod + def __float__(self) -> float: ... + +@runtime +class SupportsComplex(Protocol, metaclass=ABCMeta): + @abstractmethod + def __complex__(self) -> complex: ... + +@runtime +class SupportsAbs(Protocol[_T_co]): + @abstractmethod + def __abs__(self) -> _T_co: ... + +@runtime +class Reversible(Protocol[_T_co]): + @abstractmethod + def __reversed__(self) -> Iterator[_T_co]: ... + +@runtime +class Sized(Protocol, metaclass=ABCMeta): + @abstractmethod + def __len__(self) -> int: ... + +@runtime +class Hashable(Protocol, metaclass=ABCMeta): + # TODO: This is special, in that a subclass of a hashable class may not be hashable + # (for example, list vs. object). It's not obvious how to represent this. This class + # is currently mostly useless for static checking. + @abstractmethod + def __hash__(self) -> int: ... + +@runtime +class Iterable(Protocol[_T_co]): + @abstractmethod + def __iter__(self) -> Iterator[_T_co]: ... + +@runtime +class Iterator(Iterable[_T_co], Protocol[_T_co]): + @abstractmethod + def next(self) -> _T_co: ... + def __iter__(self) -> Iterator[_T_co]: ... + +class Generator(Iterator[_T_co], Generic[_T_co, _T_contra, _V_co]): + @abstractmethod + def next(self) -> _T_co: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: TracebackType = ...) -> _T_co: ... + @abstractmethod + def close(self) -> None: ... + @property + def gi_code(self) -> CodeType: ... + @property + def gi_frame(self) -> FrameType: ... + @property + def gi_running(self) -> bool: ... + +@runtime +class Container(Protocol[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + +class Sequence(Iterable[_T_co], Container[_T_co], Reversible[_T_co], Generic[_T_co]): + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T_co: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> Sequence[_T_co]: ... + # Mixin methods + def index(self, x: Any) -> int: ... + def count(self, x: Any) -> int: ... + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __reversed__(self) -> Iterator[_T_co]: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class MutableSequence(Sequence[_T], Generic[_T]): + @abstractmethod + def insert(self, index: int, object: _T) -> None: ... + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> MutableSequence[_T]: ... + @overload + @abstractmethod + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + @abstractmethod + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: int) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: slice) -> None: ... + # Mixin methods + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def reverse(self) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def remove(self, object: _T) -> None: ... + def __iadd__(self, x: Iterable[_T]) -> MutableSequence[_T]: ... + +class AbstractSet(Iterable[_T_co], Container[_T_co], Generic[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + # Mixin methods + def __le__(self, s: AbstractSet[Any]) -> bool: ... + def __lt__(self, s: AbstractSet[Any]) -> bool: ... + def __gt__(self, s: AbstractSet[Any]) -> bool: ... + def __ge__(self, s: AbstractSet[Any]) -> bool: ... + def __and__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __or__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + def __sub__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __xor__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + # TODO: argument can be any container? + def isdisjoint(self, s: AbstractSet[Any]) -> bool: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + + +class MutableSet(AbstractSet[_T], Generic[_T]): + @abstractmethod + def add(self, x: _T) -> None: ... + @abstractmethod + def discard(self, x: _T) -> None: ... + # Mixin methods + def clear(self) -> None: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def __ior__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __iand__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + def __ixor__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __isub__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + +class MappingView(object): + def __len__(self) -> int: ... + +class ItemsView(MappingView, AbstractSet[Tuple[_KT_co, _VT_co]], Generic[_KT_co, _VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[Tuple[_KT_co, _VT_co]]: ... + +class KeysView(MappingView, AbstractSet[_KT_co], Generic[_KT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT_co]: ... + +class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_VT_co]: ... + +@runtime +class ContextManager(Protocol[_T_co]): + def __enter__(self) -> _T_co: ... + def __exit__(self, __exc_type: Optional[Type[BaseException]], + __exc_value: Optional[BaseException], + __traceback: Optional[TracebackType]) -> Optional[bool]: ... + +class Mapping(Iterable[_KT], Container[_KT], Generic[_KT, _VT_co]): + # TODO: We wish the key type could also be covariant, but that doesn't work, + # see discussion in https: //github.com/python/typing/pull/273. + @abstractmethod + def __getitem__(self, k: _KT) -> _VT_co: + ... + # Mixin methods + @overload + def get(self, k: _KT) -> Optional[_VT_co]: ... + @overload + def get(self, k: _KT, default: Union[_VT_co, _T]) -> Union[_VT_co, _T]: ... + def keys(self) -> list[_KT]: ... + def values(self) -> list[_VT_co]: ... + def items(self) -> list[Tuple[_KT, _VT_co]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT_co]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT_co]]: ... + def __contains__(self, o: object) -> bool: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]): + @abstractmethod + def __setitem__(self, k: _KT, v: _VT) -> None: ... + @abstractmethod + def __delitem__(self, v: _KT) -> None: ... + + def clear(self) -> None: ... + @overload + def pop(self, k: _KT) -> _VT: ... + @overload + def pop(self, k: _KT, default: Union[_VT, _T] = ...) -> Union[_VT, _T]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + +Text = unicode + +TYPE_CHECKING = True + +class IO(Iterator[AnyStr], Generic[AnyStr]): + # TODO detach + # TODO use abstract properties + @property + def mode(self) -> str: ... + @property + def name(self) -> str: ... + @abstractmethod + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + @abstractmethod + def fileno(self) -> int: ... + @abstractmethod + def flush(self) -> None: ... + @abstractmethod + def isatty(self) -> bool: ... + # TODO what if n is None? + @abstractmethod + def read(self, n: int = ...) -> AnyStr: ... + @abstractmethod + def readable(self) -> bool: ... + @abstractmethod + def readline(self, limit: int = ...) -> AnyStr: ... + @abstractmethod + def readlines(self, hint: int = ...) -> list[AnyStr]: ... + @abstractmethod + def seek(self, offset: int, whence: int = ...) -> int: ... + @abstractmethod + def seekable(self) -> bool: ... + @abstractmethod + def tell(self) -> int: ... + @abstractmethod + def truncate(self, size: Optional[int] = ...) -> int: ... + @abstractmethod + def writable(self) -> bool: ... + # TODO buffer objects + @abstractmethod + def write(self, s: AnyStr) -> int: ... + @abstractmethod + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + + @abstractmethod + def next(self) -> AnyStr: ... + @abstractmethod + def __iter__(self) -> Iterator[AnyStr]: ... + @abstractmethod + def __enter__(self) -> IO[AnyStr]: ... + @abstractmethod + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], + traceback: Optional[TracebackType]) -> bool: ... + +class BinaryIO(IO[str]): + # TODO readinto + # TODO read1? + # TODO peek? + @abstractmethod + def __enter__(self) -> BinaryIO: ... + +class TextIO(IO[unicode]): + # TODO use abstractproperty + @property + def buffer(self) -> BinaryIO: ... + @property + def encoding(self) -> str: ... + @property + def errors(self) -> Optional[str]: ... + @property + def line_buffering(self) -> bool: ... + @property + def newlines(self) -> Any: ... # None, str or tuple + @abstractmethod + def __enter__(self) -> TextIO: ... + +class ByteString(Sequence[int], metaclass=ABCMeta): ... + +class Match(Generic[AnyStr]): + pos: int + endpos: int + lastindex: Optional[int] + string: AnyStr + + # The regular expression object whose match() or search() method produced + # this match instance. This should not be Pattern[AnyStr] because the type + # of the pattern is independent of the type of the matched string in + # Python 2. Strictly speaking Match should be generic over AnyStr twice: + # once for the type of the pattern and once for the type of the matched + # string. + re: Pattern[Any] + # Can be None if there are no groups or if the last group was unnamed; + # otherwise matches the type of the pattern. + lastgroup: Optional[Any] + + def expand(self, template: Union[str, Text]) -> Any: ... + + @overload + def group(self, group1: int = ...) -> AnyStr: ... + @overload + def group(self, group1: str) -> AnyStr: ... + @overload + def group(self, group1: int, group2: int, + *groups: int) -> Tuple[AnyStr, ...]: ... + @overload + def group(self, group1: str, group2: str, + *groups: str) -> Tuple[AnyStr, ...]: ... + + def groups(self, default: AnyStr = ...) -> Tuple[AnyStr, ...]: ... + def groupdict(self, default: AnyStr = ...) -> Dict[str, AnyStr]: ... + def start(self, group: Union[int, str] = ...) -> int: ... + def end(self, group: Union[int, str] = ...) -> int: ... + def span(self, group: Union[int, str] = ...) -> Tuple[int, int]: ... + +# We need a second TypeVar with the same definition as AnyStr, because +# Pattern is generic over AnyStr (determining the type of its .pattern +# attribute), but at the same time its methods take either bytes or +# Text and return the same type, regardless of the type of the pattern. +_AnyStr2 = TypeVar('_AnyStr2', bytes, Text) + +class Pattern(Generic[AnyStr]): + flags: int + groupindex: Dict[AnyStr, int] + groups: int + pattern: AnyStr + + def search(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Optional[Match[_AnyStr2]]: ... + def match(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Optional[Match[_AnyStr2]]: ... + def split(self, string: _AnyStr2, maxsplit: int = ...) -> List[_AnyStr2]: ... + # Returns either a list of _AnyStr2 or a list of tuples, depending on + # whether there are groups in the pattern. + def findall(self, string: Union[bytes, Text], pos: int = ..., + endpos: int = ...) -> List[Any]: ... + def finditer(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Iterator[Match[_AnyStr2]]: ... + + @overload + def sub(self, repl: _AnyStr2, string: _AnyStr2, + count: int = ...) -> _AnyStr2: ... + @overload + def sub(self, repl: Callable[[Match[_AnyStr2]], _AnyStr2], string: _AnyStr2, + count: int = ...) -> _AnyStr2: ... + + @overload + def subn(self, repl: _AnyStr2, string: _AnyStr2, + count: int = ...) -> Tuple[_AnyStr2, int]: ... + @overload + def subn(self, repl: Callable[[Match[_AnyStr2]], _AnyStr2], string: _AnyStr2, + count: int = ...) -> Tuple[_AnyStr2, int]: ... + +# Functions + +def get_type_hints(obj: Callable, globalns: Optional[dict[Text, Any]] = ..., + localns: Optional[dict[Text, Any]] = ...) -> None: ... + +@overload +def cast(tp: Type[_T], obj: Any) -> _T: ... +@overload +def cast(tp: str, obj: Any) -> Any: ... + +# Type constructors + +# NamedTuple is special-cased in the type checker +class NamedTuple(tuple): + _fields: Tuple[str, ...] + + def __init__(self, typename: Text, fields: Iterable[Tuple[Text, Any]] = ..., *, + verbose: bool = ..., rename: bool = ..., **kwargs: Any) -> None: ... + + @classmethod + def _make(cls: Type[_T], iterable: Iterable[Any]) -> _T: ... + + def _asdict(self) -> dict: ... + def _replace(self: _T, **kwargs: Any) -> _T: ... + +def NewType(name: str, tp: Type[_T]) -> Type[_T]: ... + +# This itself is only available during type checking +def type_check_only(func_or_cls: _C) -> _C: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/unittest.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/unittest.pyi new file mode 100644 index 0000000..d8d499a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/unittest.pyi @@ -0,0 +1,262 @@ +# Stubs for unittest + +# Based on http://docs.python.org/2.7/library/unittest.html + +from typing import (Any, Callable, Dict, FrozenSet, Iterable, Iterator, + List, NoReturn, Optional, overload, Pattern, Sequence, Set, + Text, TextIO, Tuple, Type, TypeVar, Union) +from abc import abstractmethod, ABCMeta +import types + +_T = TypeVar('_T') +_FT = TypeVar('_FT') + +_ExceptionType = Union[Type[BaseException], Tuple[Type[BaseException], ...]] +_Regexp = Union[Text, Pattern[Text]] + +class Testable(metaclass=ABCMeta): + @abstractmethod + def run(self, result: TestResult) -> None: ... + @abstractmethod + def debug(self) -> None: ... + @abstractmethod + def countTestCases(self) -> int: ... + +# TODO ABC for test runners? + +class TestResult: + errors: List[Tuple[Testable, str]] + failures: List[Tuple[Testable, str]] + skipped: List[Tuple[Testable, str]] + expectedFailures: List[Tuple[Testable, str]] + unexpectedSuccesses: List[Testable] + shouldStop: bool + testsRun: int + buffer: bool + failfast: bool + + def wasSuccessful(self) -> bool: ... + def stop(self) -> None: ... + def startTest(self, test: Testable) -> None: ... + def stopTest(self, test: Testable) -> None: ... + def startTestRun(self) -> None: ... + def stopTestRun(self) -> None: ... + def addError(self, test: Testable, err: Tuple[type, Any, Any]) -> None: ... # TODO + def addFailure(self, test: Testable, err: Tuple[type, Any, Any]) -> None: ... # TODO + def addSuccess(self, test: Testable) -> None: ... + def addSkip(self, test: Testable, reason: str) -> None: ... + def addExpectedFailure(self, test: Testable, err: str) -> None: ... + def addUnexpectedSuccess(self, test: Testable) -> None: ... + +class _AssertRaisesBaseContext: + expected: Any + failureException: Type[BaseException] + obj_name: str + expected_regex: Pattern[str] + +class _AssertRaisesContext(_AssertRaisesBaseContext): + exception: Any + def __enter__(self) -> _AssertRaisesContext: ... + def __exit__(self, exc_type, exc_value, tb) -> bool: ... + +class TestCase(Testable): + failureException: Type[BaseException] + longMessage: bool + maxDiff: Optional[int] + # undocumented + _testMethodName: str + def __init__(self, methodName: str = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + @classmethod + def setUpClass(cls) -> None: ... + @classmethod + def tearDownClass(cls) -> None: ... + def run(self, result: TestResult = ...) -> None: ... + def debug(self) -> None: ... + def assert_(self, expr: Any, msg: object = ...) -> None: ... + def failUnless(self, expr: Any, msg: object = ...) -> None: ... + def assertTrue(self, expr: Any, msg: object = ...) -> None: ... + def assertEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertEquals(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def failUnlessEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertNotEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertNotEquals(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def failIfEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + @overload + def assertAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertAlmostEquals(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def failUnlessAlmostEqual(self, first: float, second: float, places: int = ..., + msg: object = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEquals(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def failIfAlmostEqual(self, first: float, second: float, places: int = ..., + msg: object = ..., + delta: float = ...) -> None: ... + def assertGreater(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertGreaterEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertMultiLineEqual(self, first: str, second: str, + msg: object = ...) -> None: ... + def assertSequenceEqual(self, first: Sequence[Any], second: Sequence[Any], + msg: object = ..., seq_type: type = ...) -> None: ... + def assertListEqual(self, first: List[Any], second: List[Any], + msg: object = ...) -> None: ... + def assertTupleEqual(self, first: Tuple[Any, ...], second: Tuple[Any, ...], + msg: object = ...) -> None: ... + def assertSetEqual(self, first: Union[Set[Any], FrozenSet[Any]], + second: Union[Set[Any], FrozenSet[Any]], msg: object = ...) -> None: ... + def assertDictEqual(self, first: Dict[Any, Any], second: Dict[Any, Any], + msg: object = ...) -> None: ... + def assertLess(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertLessEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + @overload + def assertRaises(self, exception: _ExceptionType, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaises(self, exception: _ExceptionType) -> _AssertRaisesContext: ... + @overload + def assertRaisesRegexp(self, exception: _ExceptionType, regexp: _Regexp, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegexp(self, exception: _ExceptionType, regexp: _Regexp) -> _AssertRaisesContext: ... + def assertRegexpMatches(self, text: Text, regexp: _Regexp, msg: object = ...) -> None: ... + def assertNotRegexpMatches(self, text: Text, regexp: _Regexp, msg: object = ...) -> None: ... + def assertItemsEqual(self, first: Iterable[Any], second: Iterable[Any], msg: object = ...) -> None: ... + def assertDictContainsSubset(self, expected: Dict[Any, Any], actual: Dict[Any, Any], msg: object = ...) -> None: ... + def addTypeEqualityFunc(self, typeobj: type, function: Callable[..., None]) -> None: ... + @overload + def failUnlessRaises(self, exception: _ExceptionType, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def failUnlessRaises(self, exception: _ExceptionType) -> _AssertRaisesContext: ... + def failIf(self, expr: Any, msg: object = ...) -> None: ... + def assertFalse(self, expr: Any, msg: object = ...) -> None: ... + def assertIs(self, first: object, second: object, + msg: object = ...) -> None: ... + def assertIsNot(self, first: object, second: object, + msg: object = ...) -> None: ... + def assertIsNone(self, expr: Any, msg: object = ...) -> None: ... + def assertIsNotNone(self, expr: Any, msg: object = ...) -> None: ... + def assertIn(self, first: _T, second: Iterable[_T], + msg: object = ...) -> None: ... + def assertNotIn(self, first: _T, second: Iterable[_T], + msg: object = ...) -> None: ... + def assertIsInstance(self, obj: Any, cls: Union[type, Tuple[type, ...]], + msg: object = ...) -> None: ... + def assertNotIsInstance(self, obj: Any, cls: Union[type, Tuple[type, ...]], + msg: object = ...) -> None: ... + def fail(self, msg: object = ...) -> NoReturn: ... + def countTestCases(self) -> int: ... + def defaultTestResult(self) -> TestResult: ... + def id(self) -> str: ... + def shortDescription(self) -> str: ... # May return None + def addCleanup(self, function: Any, *args: Any, **kwargs: Any) -> None: ... + def doCleanups(self) -> bool: ... + def skipTest(self, reason: Any) -> None: ... + def _formatMessage(self, msg: Optional[Text], standardMsg: Text) -> str: ... # undocumented + def _getAssertEqualityFunc(self, first: Any, second: Any) -> Callable[..., None]: ... # undocumented + +class FunctionTestCase(Testable): + def __init__(self, testFunc: Callable[[], None], + setUp: Optional[Callable[[], None]] = ..., + tearDown: Optional[Callable[[], None]] = ..., + description: Optional[str] = ...) -> None: ... + def run(self, result: TestResult) -> None: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + +class TestSuite(Testable): + def __init__(self, tests: Iterable[Testable] = ...) -> None: ... + def addTest(self, test: Testable) -> None: ... + def addTests(self, tests: Iterable[Testable]) -> None: ... + def run(self, result: TestResult) -> None: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + def __iter__(self) -> Iterator[Testable]: ... + +class TestLoader: + testMethodPrefix: str + sortTestMethodsUsing: Optional[Callable[[str, str], int]] + suiteClass: Callable[[List[TestCase]], TestSuite] + def loadTestsFromTestCase(self, + testCaseClass: Type[TestCase]) -> TestSuite: ... + def loadTestsFromModule(self, module: types.ModuleType = ..., + use_load_tests: bool = ...) -> TestSuite: ... + def loadTestsFromName(self, name: str = ..., + module: Optional[types.ModuleType] = ...) -> TestSuite: ... + def loadTestsFromNames(self, names: List[str] = ..., + module: Optional[types.ModuleType] = ...) -> TestSuite: ... + def discover(self, start_dir: str, pattern: str = ..., + top_level_dir: Optional[str] = ...) -> TestSuite: ... + def getTestCaseNames(self, testCaseClass: Type[TestCase] = ...) -> List[str]: ... + +defaultTestLoader: TestLoader + +class TextTestResult(TestResult): + def __init__(self, stream: TextIO, descriptions: bool, verbosity: int) -> None: ... + +class TextTestRunner: + def __init__(self, stream: Optional[TextIO] = ..., descriptions: bool = ..., + verbosity: int = ..., failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[Type[TestResult]] = ...) -> None: ... + def _makeResult(self) -> TestResult: ... + +class SkipTest(Exception): + ... + +# TODO precise types +def skipUnless(condition: Any, reason: Union[str, unicode]) -> Any: ... +def skipIf(condition: Any, reason: Union[str, unicode]) -> Any: ... +def expectedFailure(func: _FT) -> _FT: ... +def skip(reason: Union[str, unicode]) -> Any: ... + +# not really documented +class TestProgram: + result: TestResult + def runTests(self) -> None: ... # undocumented + +def main(module: Union[None, Text, types.ModuleType] = ..., defaultTest: Optional[str] = ..., + argv: Optional[Sequence[str]] = ..., + testRunner: Union[Type[TextTestRunner], TextTestRunner, None] = ..., + testLoader: TestLoader = ..., exit: bool = ..., verbosity: int = ..., + failfast: Optional[bool] = ..., catchbreak: Optional[bool] = ..., + buffer: Optional[bool] = ...) -> TestProgram: ... + +def load_tests(loader: TestLoader, tests: TestSuite, pattern: Optional[Text]) -> TestSuite: ... + +def installHandler() -> None: ... +def registerResult(result: TestResult) -> None: ... +def removeResult(result: TestResult) -> bool: ... +@overload +def removeHandler() -> None: ... +@overload +def removeHandler(function: Callable[..., Any]) -> Callable[..., Any]: ... + +# private but occasionally used +util: types.ModuleType diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib.pyi new file mode 100644 index 0000000..8b44a06 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib.pyi @@ -0,0 +1,134 @@ +from typing import Any, AnyStr, IO, List, Mapping, Sequence, Text, Tuple, TypeVar, Union + +def url2pathname(pathname: AnyStr) -> AnyStr: ... +def pathname2url(pathname: AnyStr) -> AnyStr: ... +def urlopen(url: str, data=..., proxies: Mapping[str, str] = ..., context=...) -> IO[Any]: ... +def urlretrieve(url, filename=..., reporthook=..., data=..., context=...): ... +def urlcleanup() -> None: ... + +class ContentTooShortError(IOError): + content: Any + def __init__(self, message, content) -> None: ... + +class URLopener: + version: Any + proxies: Any + key_file: Any + cert_file: Any + context: Any + addheaders: Any + tempcache: Any + ftpcache: Any + def __init__(self, proxies: Mapping[str, str] = ..., context=..., **x509) -> None: ... + def __del__(self): ... + def close(self): ... + def cleanup(self): ... + def addheader(self, *args): ... + type: Any + def open(self, fullurl: str, data=...): ... + def open_unknown(self, fullurl, data=...): ... + def open_unknown_proxy(self, proxy, fullurl, data=...): ... + def retrieve(self, url, filename=..., reporthook=..., data=...): ... + def open_http(self, url, data=...): ... + def http_error(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_default(self, url, fp, errcode, errmsg, headers): ... + def open_https(self, url, data=...): ... + def open_file(self, url): ... + def open_local_file(self, url): ... + def open_ftp(self, url): ... + def open_data(self, url, data=...): ... + +class FancyURLopener(URLopener): + auth_cache: Any + tries: Any + maxtries: Any + def __init__(self, *args, **kwargs) -> None: ... + def http_error_default(self, url, fp, errcode, errmsg, headers): ... + def http_error_302(self, url, fp, errcode, errmsg, headers, data=...): ... + def redirect_internal(self, url, fp, errcode, errmsg, headers, data): ... + def http_error_301(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_303(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_307(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_401(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_407(self, url, fp, errcode, errmsg, headers, data=...): ... + def retry_proxy_http_basic_auth(self, url, realm, data=...): ... + def retry_proxy_https_basic_auth(self, url, realm, data=...): ... + def retry_http_basic_auth(self, url, realm, data=...): ... + def retry_https_basic_auth(self, url, realm, data=...): ... + def get_user_passwd(self, host, realm, clear_cache=...): ... + def prompt_user_passwd(self, host, realm): ... + +class ftpwrapper: + user: Any + passwd: Any + host: Any + port: Any + dirs: Any + timeout: Any + refcount: Any + keepalive: Any + def __init__(self, user, passwd, host, port, dirs, timeout=..., persistent=...) -> None: ... + busy: Any + ftp: Any + def init(self): ... + def retrfile(self, file, type): ... + def endtransfer(self): ... + def close(self): ... + def file_close(self): ... + def real_close(self): ... + +_AIUT = TypeVar("_AIUT", bound=addbase) + +class addbase: + fp: Any + def read(self, n: int = ...) -> bytes: ... + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def fileno(self) -> int: ... # Optional[int], but that is rare + def __iter__(self: _AIUT) -> _AIUT: ... + def next(self) -> bytes: ... + def __init__(self, fp) -> None: ... + def close(self) -> None: ... + +class addclosehook(addbase): + closehook: Any + hookargs: Any + def __init__(self, fp, closehook, *hookargs) -> None: ... + def close(self): ... + +class addinfo(addbase): + headers: Any + def __init__(self, fp, headers) -> None: ... + def info(self): ... + +class addinfourl(addbase): + headers: Any + url: Any + code: Any + def __init__(self, fp, headers, url, code=...) -> None: ... + def info(self): ... + def getcode(self): ... + def geturl(self): ... + +def unwrap(url): ... +def splittype(url): ... +def splithost(url): ... +def splituser(host): ... +def splitpasswd(user): ... +def splitport(host): ... +def splitnport(host, defport=...): ... +def splitquery(url): ... +def splittag(url): ... +def splitattr(url): ... +def splitvalue(attr): ... +def unquote(s: AnyStr) -> AnyStr: ... +def unquote_plus(s: AnyStr) -> AnyStr: ... +def quote(s: AnyStr, safe: Text = ...) -> AnyStr: ... +def quote_plus(s: AnyStr, safe: Text = ...) -> AnyStr: ... +def urlencode(query: Union[Sequence[Tuple[Any, Any]], Mapping[Any, Any]], doseq=...) -> str: ... + +def getproxies() -> Mapping[str, str]: ... +def proxy_bypass(host): ... + +# Names in __all__ with no definition: +# basejoin diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib2.pyi new file mode 100644 index 0000000..6611ad2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urllib2.pyi @@ -0,0 +1,182 @@ + +import ssl +from typing import Any, AnyStr, Dict, List, Union, Optional, Mapping, Callable, Sequence, Text, Tuple, Type +from urllib import addinfourl +from httplib import HTTPConnectionProtocol, HTTPResponse + +_string = Union[str, unicode] + +class URLError(IOError): + reason: Union[str, BaseException] + +class HTTPError(URLError, addinfourl): + code: int + headers: Mapping[str, str] + def __init__(self, url, code: int, msg: str, hdrs: Mapping[str, str], fp: addinfourl) -> None: ... + +class Request(object): + host: str + port: str + data: str + headers: Dict[str, str] + unverifiable: bool + type: Optional[str] + origin_req_host = ... + unredirected_hdrs: Dict[str, str] + + def __init__(self, url: str, data: Optional[str] = ..., headers: Dict[str, str] = ..., + origin_req_host: Optional[str] = ..., unverifiable: bool = ...) -> None: ... + def __getattr__(self, attr): ... + def get_method(self) -> str: ... + def add_data(self, data) -> None: ... + def has_data(self) -> bool: ... + def get_data(self) -> str: ... + def get_full_url(self) -> str: ... + def get_type(self): ... + def get_host(self) -> str: ... + def get_selector(self): ... + def set_proxy(self, host, type) -> None: ... + def has_proxy(self) -> bool: ... + def get_origin_req_host(self) -> str: ... + def is_unverifiable(self) -> bool: ... + def add_header(self, key: str, val: str) -> None: ... + def add_unredirected_header(self, key: str, val: str) -> None: ... + def has_header(self, header_name: str) -> bool: ... + def get_header(self, header_name: str, default: Optional[str] = ...) -> str: ... + def header_items(self): ... + +class OpenerDirector(object): + addheaders: List[Tuple[str, str]] + + def add_handler(self, handler: BaseHandler) -> None: ... + def open(self, fullurl: Union[Request, _string], data: Optional[_string] = ..., timeout: Optional[float] = ...) -> Optional[addinfourl]: ... + def error(self, proto: _string, *args: Any): ... + +# Note that this type is somewhat a lie. The return *can* be None if +# a custom opener has been installed that fails to handle the request. +def urlopen(url: Union[Request, _string], data: Optional[_string] = ..., timeout: Optional[float] = ..., + cafile: Optional[_string] = ..., capath: Optional[_string] = ..., cadefault: bool = ..., + context: Optional[ssl.SSLContext] = ...) -> addinfourl: ... +def install_opener(opener: OpenerDirector) -> None: ... +def build_opener(*handlers: Union[BaseHandler, Type[BaseHandler]]) -> OpenerDirector: ... + +class BaseHandler: + handler_order: int + parent: OpenerDirector + + def add_parent(self, parent: OpenerDirector) -> None: ... + def close(self) -> None: ... + def __lt__(self, other: Any) -> bool: ... + +class HTTPErrorProcessor(BaseHandler): + def http_response(self, request, response): ... + +class HTTPDefaultErrorHandler(BaseHandler): + def http_error_default(self, req: Request, fp: addinfourl, code: int, msg: str, hdrs: Mapping[str, str]): ... + +class HTTPRedirectHandler(BaseHandler): + max_repeats: int + max_redirections: int + def redirect_request(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str], newurl): ... + def http_error_301(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_302(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_303(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_307(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + inf_msg: str + + +class ProxyHandler(BaseHandler): + proxies: Mapping[str, str] + + def __init__(self, proxies: Optional[Mapping[str, str]] = ...): ... + def proxy_open(self, req: Request, proxy, type): ... + +class HTTPPasswordMgr: + def __init__(self) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def find_user_password(self, realm: Optional[Text], authuri: Text) -> Tuple[Any, Any]: ... + def reduce_uri(self, uri: _string, default_port: bool = ...) -> Tuple[Any, Any]: ... + def is_suburi(self, base: _string, test: _string) -> bool: ... + +class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): ... + +class AbstractBasicAuthHandler: + def __init__(self, password_mgr: Optional[HTTPPasswordMgr] = ...) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def http_error_auth_reqed(self, authreq, host, req: Request, headers: Mapping[str, str]): ... + def retry_http_basic_auth(self, host, req: Request, realm): ... + +class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + auth_header: str + def http_error_401(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + auth_header: str + def http_error_407(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class AbstractDigestAuthHandler: + def __init__(self, passwd: Optional[HTTPPasswordMgr] = ...) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def reset_retry_count(self) -> None: ... + def http_error_auth_reqed(self, auth_header: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + def retry_http_digest_auth(self, req: Request, auth: str) -> Optional[HTTPResponse]: ... + def get_cnonce(self, nonce: str) -> str: ... + def get_authorization(self, req: Request, chal: Mapping[str, str]) -> str: ... + def get_algorithm_impls(self, algorithm: str) -> Tuple[Callable[[str], str], Callable[[str, str], str]]: ... + def get_entity_digest(self, data: Optional[bytes], chal: Mapping[str, str]) -> Optional[str]: ... + +class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + auth_header: str + handler_order: int + def http_error_401(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + auth_header: str + handler_order: int + def http_error_407(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class AbstractHTTPHandler(BaseHandler): # undocumented + def __init__(self, debuglevel: int = ...) -> None: ... + def set_http_debuglevel(self, level: int) -> None: ... + def do_request_(self, request: Request) -> Request: ... + def do_open(self, + http_class: HTTPConnectionProtocol, + req: Request, + **http_conn_args: Optional[Any]) -> addinfourl: ... + +class HTTPHandler(AbstractHTTPHandler): + def http_open(self, req: Request) -> addinfourl: ... + def http_request(self, request: Request) -> Request: ... # undocumented + +class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel: int = ..., context: Optional[ssl.SSLContext] = ...) -> None: ... + def https_open(self, req: Request) -> addinfourl: ... + def https_request(self, request: Request) -> Request: ... # undocumented + +class HTTPCookieProcessor(BaseHandler): + def __init__(self, cookiejar: Optional[Any] = ...): ... + def http_request(self, request: Request): ... + def http_response(self, request: Request, response): ... + +class UnknownHandler(BaseHandler): + def unknown_open(self, req: Request): ... + +class FileHandler(BaseHandler): + def file_open(self, req: Request): ... + def get_names(self): ... + def open_local_file(self, req: Request): ... + +class FTPHandler(BaseHandler): + def ftp_open(self, req: Request): ... + def connect_ftp(self, user, passwd, host, port, dirs, timeout): ... + +class CacheFTPHandler(FTPHandler): + def __init__(self) -> None: ... + def setTimeout(self, t: Optional[float]): ... + def setMaxConns(self, m: int): ... + def check_cache(self): ... + def clear_cache(self): ... + +def parse_http_list(s: AnyStr) -> List[AnyStr]: ... +def parse_keqv_list(l: List[AnyStr]) -> Dict[AnyStr, AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urlparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urlparse.pyi new file mode 100644 index 0000000..fb59095 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/urlparse.pyi @@ -0,0 +1,70 @@ +# Stubs for urlparse (Python 2) + +from typing import AnyStr, Dict, List, NamedTuple, Tuple, Sequence, Union, overload + +_String = Union[str, unicode] + +uses_relative: List[str] +uses_netloc: List[str] +uses_params: List[str] +non_hierarchical: List[str] +uses_query: List[str] +uses_fragment: List[str] +scheme_chars: str +MAX_CACHE_SIZE = 0 + +def clear_cache() -> None: ... + +class ResultMixin(object): + @property + def username(self) -> str: ... + @property + def password(self) -> str: ... + @property + def hostname(self) -> str: ... + @property + def port(self) -> int: ... + +class SplitResult( + NamedTuple( + 'SplitResult', + [ + ('scheme', str), ('netloc', str), ('path', str), ('query', str), ('fragment', str) + ] + ), + ResultMixin +): + def geturl(self) -> str: ... + +class ParseResult( + NamedTuple( + 'ParseResult', + [ + ('scheme', str), ('netloc', str), ('path', str), ('params', str), ('query', str), + ('fragment', str) + ] + ), + ResultMixin +): + def geturl(self) -> str: ... + +def urlparse(url: _String, scheme: _String = ..., + allow_fragments: bool = ...) -> ParseResult: ... +def urlsplit(url: _String, scheme: _String = ..., + allow_fragments: bool = ...) -> SplitResult: ... +@overload +def urlunparse(data: Tuple[_String, _String, _String, _String, _String, _String]) -> str: ... +@overload +def urlunparse(data: Sequence[_String]) -> str: ... +@overload +def urlunsplit(data: Tuple[_String, _String, _String, _String, _String]) -> str: ... +@overload +def urlunsplit(data: Sequence[_String]) -> str: ... +def urljoin(base: _String, url: _String, + allow_fragments: bool = ...) -> str: ... +def urldefrag(url: AnyStr) -> Tuple[AnyStr, str]: ... +def unquote(s: AnyStr) -> AnyStr: ... +def parse_qs(qs: AnyStr, keep_blank_values: bool = ..., + strict_parsing: bool = ...) -> Dict[AnyStr, List[AnyStr]]: ... +def parse_qsl(qs: AnyStr, keep_blank_values: int = ..., + strict_parsing: bool = ...) -> List[Tuple[AnyStr, AnyStr]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/user.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/user.pyi new file mode 100644 index 0000000..e857a3a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/user.pyi @@ -0,0 +1,9 @@ +# Stubs for user (Python 2) + +# Docs: https://docs.python.org/2/library/user.html +# Source: https://hg.python.org/cpython/file/2.7/Lib/user.py +from typing import Any + +def __getattr__(name) -> Any: ... +home: str +pythonrc: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/whichdb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/whichdb.pyi new file mode 100644 index 0000000..b1a69f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/whichdb.pyi @@ -0,0 +1,5 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/whichdb.py + +from typing import Optional, Text + +def whichdb(filename: Text) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi new file mode 100644 index 0000000..abf4098 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi @@ -0,0 +1,199 @@ +# Stubs for xmlrpclib (Python 2) + +from typing import Any, AnyStr, Callable, IO, Iterable, List, Mapping, MutableMapping, Optional, Tuple, Type, TypeVar, Union +from types import InstanceType +from datetime import datetime +from time import struct_time +from httplib import HTTPConnection, HTTPResponse, HTTPSConnection +from ssl import SSLContext +from StringIO import StringIO +from gzip import GzipFile + +_Unmarshaller = Any +_timeTuple = Tuple[int, int, int, int, int, int, int, int, int] +# Represents types that can be compared against a DateTime object +_dateTimeComp = Union[AnyStr, DateTime, datetime, _timeTuple] +# A "host description" used by Transport factories +_hostDesc = Union[str, Tuple[str, Mapping[Any, Any]]] + +def escape(s: AnyStr, replace: Callable[[AnyStr, AnyStr, AnyStr], AnyStr] = ...) -> AnyStr: ... + +MAXINT: int +MININT: int +PARSE_ERROR: int +SERVER_ERROR: int +APPLICATION_ERROR: int +SYSTEM_ERROR: int +TRANSPORT_ERROR: int +NOT_WELLFORMED_ERROR: int +UNSUPPORTED_ENCODING: int +INVALID_ENCODING_CHAR: int +INVALID_XMLRPC: int +METHOD_NOT_FOUND: int +INVALID_METHOD_PARAMS: int +INTERNAL_ERROR: int + +class Error(Exception): ... + +class ProtocolError(Error): + url: str + errcode: int + errmsg: str + headers: Any + def __init__(self, url: str, errcode: int, errmsg: str, headers: Any) -> None: ... + +class ResponseError(Error): ... + +class Fault(Error): + faultCode: Any + faultString: str + def __init__(self, faultCode: Any, faultString: str, **extra: Any) -> None: ... + +boolean: Type[bool] +Boolean: Type[bool] + +class DateTime: + value: str + def __init__(self, value: Union[str, unicode, datetime, float, int, _timeTuple, struct_time] = ...) -> None: ... + def make_comparable(self, other: _dateTimeComp) -> Tuple[_dateTimeComp, _dateTimeComp]: ... + def __lt__(self, other: _dateTimeComp) -> bool: ... + def __le__(self, other: _dateTimeComp) -> bool: ... + def __gt__(self, other: _dateTimeComp) -> bool: ... + def __ge__(self, other: _dateTimeComp) -> bool: ... + def __eq__(self, other: _dateTimeComp) -> bool: ... + def __ne__(self, other: _dateTimeComp) -> bool: ... + def timetuple(self) -> struct_time: ... + def __cmp__(self, other: _dateTimeComp) -> int: ... + def decode(self, data: Any) -> None: ... + def encode(self, out: IO) -> None: ... + +class Binary: + data: str + def __init__(self, data: Optional[str] = ...) -> None: ... + def __cmp__(self, other: Any) -> int: ... + def decode(self, data: str) -> None: ... + def encode(self, out: IO) -> None: ... + +WRAPPERS: tuple + +# Still part of the public API, but see http://bugs.python.org/issue1773632 +FastParser: None +FastUnmarshaller: None +FastMarshaller: None + +# xmlrpclib.py will leave ExpatParser undefined if it can't import expat from +# xml.parsers. Because this is Python 2.7, the import will succeed. +class ExpatParser: + def __init__(self, target: _Unmarshaller) -> None: ... + def feed(self, data: str): ... + def close(self): ... + +# TODO: Add xmllib.XMLParser as base class +class SlowParser: + handle_xml: Callable[[str, bool], None] + unknown_starttag: Callable[[str, Any], None] + handle_data: Callable[[str], None] + handle_cdata: Callable[[str], None] + unknown_endtag: Callable[[str, Callable[[Iterable[str], str], str]], None] + def __init__(self, target: _Unmarshaller) -> None: ... + +class Marshaller: + memo: MutableMapping[int, Any] + data: Optional[str] + encoding: Optional[str] + allow_none: bool + def __init__(self, encoding: Optional[str] = ..., allow_none: bool = ...) -> None: ... + dispatch: Mapping[type, Callable[[Marshaller, str, Callable[[str], None]], None]] + def dumps(self, values: Union[Iterable[Union[None, int, bool, long, float, str, unicode, List, Tuple, Mapping, datetime, InstanceType]], Fault]) -> str: ... + def dump_nil(self, value: None, write: Callable[[str], None]) -> None: ... + def dump_int(self, value: int, write: Callable[[str], None]) -> None: ... + def dump_bool(self, value: bool, write: Callable[[str], None]) -> None: ... + def dump_long(self, value: long, write: Callable[[str], None]) -> None: ... + def dump_double(self, value: float, write: Callable[[str], None]) -> None: ... + def dump_string(self, value: str, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_unicode(self, value: unicode, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_array(self, value: Union[List, Tuple], write: Callable[[str], None]) -> None: ... + def dump_struct(self, value: Mapping, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_datetime(self, value: datetime, write: Callable[[str], None]) -> None: ... + def dump_instance(self, value: InstanceType, write: Callable[[str], None]) -> None: ... + +class Unmarshaller: + def append(self, object: Any) -> None: ... + def __init__(self, use_datetime: bool = ...) -> None: ... + def close(self) -> tuple: ... + def getmethodname(self) -> Optional[str]: ... + def xml(self, encoding: str, standalone: bool) -> None: ... + def start(self, tag: str, attrs: Any) -> None: ... + def data(self, text: str) -> None: ... + def end(self, tag: str, join: Callable[[Iterable[str], str], str] = ...) -> None: ... + def end_dispatch(self, tag: str, data: str) -> None: ... + dispatch: Mapping[str, Callable[[Unmarshaller, str], None]] + def end_nil(self, data: str): ... + def end_boolean(self, data: str) -> None: ... + def end_int(self, data: str) -> None: ... + def end_double(self, data: str) -> None: ... + def end_string(self, data: str) -> None: ... + def end_array(self, data: str) -> None: ... + def end_struct(self, data: str) -> None: ... + def end_base64(self, data: str) -> None: ... + def end_dateTime(self, data: str) -> None: ... + def end_value(self, data: str) -> None: ... + def end_params(self, data: str) -> None: ... + def end_fault(self, data: str) -> None: ... + def end_methodName(self, data: str) -> None: ... + +class _MultiCallMethod: + def __init__(self, call_list: List[Tuple[str, tuple]], name: str) -> None: ... +class MultiCallIterator: + def __init__(self, results: List) -> None: ... + +class MultiCall: + def __init__(self, server: ServerProxy) -> None: ... + def __getattr__(self, name: str) -> _MultiCallMethod: ... + def __call__(self) -> MultiCallIterator: ... + +def getparser(use_datetime: bool = ...) -> Tuple[Union[ExpatParser, SlowParser], Unmarshaller]: ... +def dumps(params: Union[tuple, Fault], methodname: Optional[str] = ..., methodresponse: Optional[bool] = ..., encoding: Optional[str] = ..., allow_none: bool = ...) -> str: ... +def loads(data: str, use_datetime: bool = ...) -> Tuple[tuple, Optional[str]]: ... + +def gzip_encode(data: str) -> str: ... +def gzip_decode(data: str, max_decode: int = ...) -> str: ... + +class GzipDecodedResponse(GzipFile): + stringio: StringIO + def __init__(self, response: HTTPResponse) -> None: ... + def close(self): ... + +class _Method: + def __init__(self, send: Callable[[str, tuple], Any], name: str) -> None: ... + def __getattr__(self, name: str) -> _Method: ... + def __call__(self, *args: Any) -> Any: ... + +class Transport: + user_agent: str + accept_gzip_encoding: bool + encode_threshold: Optional[int] + def __init__(self, use_datetime: bool = ...) -> None: ... + def request(self, host: _hostDesc, handler: str, request_body: str, verbose: bool = ...) -> tuple: ... + verbose: bool + def single_request(self, host: _hostDesc, handler: str, request_body: str, verbose: bool = ...) -> tuple: ... + def getparser(self) -> Tuple[Union[ExpatParser, SlowParser], Unmarshaller]: ... + def get_host_info(self, host: _hostDesc) -> Tuple[str, Optional[List[Tuple[str, str]]], Optional[Mapping[Any, Any]]]: ... + def make_connection(self, host: _hostDesc) -> HTTPConnection: ... + def close(self) -> None: ... + def send_request(self, connection: HTTPConnection, handler: str, request_body: str) -> None: ... + def send_host(self, connection: HTTPConnection, host: str) -> None: ... + def send_user_agent(self, connection: HTTPConnection) -> None: ... + def send_content(self, connection: HTTPConnection, request_body: str) -> None: ... + def parse_response(self, response: HTTPResponse) -> tuple: ... + +class SafeTransport(Transport): + def __init__(self, use_datetime: bool = ..., context: Optional[SSLContext] = ...) -> None: ... + def make_connection(self, host: _hostDesc) -> HTTPSConnection: ... + +class ServerProxy: + def __init__(self, uri: str, transport: Optional[Transport] = ..., encoding: Optional[str] = ..., verbose: bool = ..., allow_none: bool = ..., use_datetime: bool = ..., context: Optional[SSLContext] = ...) -> None: ... + def __getattr__(self, name: str) -> _Method: ... + def __call__(self, attr: str) -> Optional[Transport]: ... + +Server = ServerProxy diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi new file mode 100644 index 0000000..13db2dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi @@ -0,0 +1,24 @@ +import sys +from typing import List + +class _Feature: + def getOptionalRelease(self) -> sys._version_info: ... + def getMandatoryRelease(self) -> sys._version_info: ... + +absolute_import: _Feature +division: _Feature +generators: _Feature +nested_scopes: _Feature +print_function: _Feature +unicode_literals: _Feature +with_statement: _Feature +if sys.version_info >= (3, 0): + barry_as_FLUFL: _Feature + +if sys.version_info >= (3, 5): + generator_stop: _Feature + +if sys.version_info >= (3, 7): + annotations: _Feature + +all_feature_names: List[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi new file mode 100644 index 0000000..6233547 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi @@ -0,0 +1,11 @@ +"""Stub file for the '_bisect' module.""" + +from typing import Sequence, TypeVar + +_T = TypeVar('_T') +def bisect(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def bisect_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def bisect_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def insort(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... +def insort_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... +def insort_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi new file mode 100644 index 0000000..32163eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi @@ -0,0 +1,74 @@ +"""Stub file for the '_codecs' module.""" + +import sys +from typing import Any, Callable, Tuple, Optional, Dict, Text, Union + +import codecs + +# For convenience: +_Handler = Callable[[Exception], Tuple[Text, int]] +_String = Union[bytes, str] +_Errors = Union[str, Text, None] +if sys.version_info < (3, 0): + _Decodable = Union[bytes, Text] + _Encodable = Union[bytes, Text] +else: + _Decodable = bytes + _Encodable = str + +# This type is not exposed; it is defined in unicodeobject.c +class _EncodingMap(object): + def size(self) -> int: ... +_MapT = Union[Dict[int, int], _EncodingMap] + +def register(search_function: Callable[[str], Any]) -> None: ... +def register_error(errors: Union[str, Text], handler: _Handler) -> None: ... +def lookup(encoding: Union[str, Text]) -> codecs.CodecInfo: ... +def lookup_error(name: Union[str, Text]) -> _Handler: ... +def decode(obj: Any, encoding: Union[str, Text] = ..., errors: _Errors = ...) -> Any: ... +def encode(obj: Any, encoding: Union[str, Text] = ..., errors: _Errors = ...) -> Any: ... +def charmap_build(map: Text) -> _MapT: ... + +def ascii_decode(data: _Decodable, errors: _Errors = ...) -> Tuple[Text, int]: ... +def ascii_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def charbuffer_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def charmap_decode(data: _Decodable, errors: _Errors = ..., mapping: Optional[_MapT] = ...) -> Tuple[Text, int]: ... +def charmap_encode(data: _Encodable, errors: _Errors, mapping: Optional[_MapT] = ...) -> Tuple[bytes, int]: ... +def escape_decode(data: _String, errors: _Errors = ...) -> Tuple[str, int]: ... +def escape_encode(data: bytes, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def latin_1_decode(data: _Decodable, errors: _Errors = ...) -> Tuple[Text, int]: ... +def latin_1_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def raw_unicode_escape_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def raw_unicode_escape_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def readbuffer_encode(data: _String, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def unicode_escape_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def unicode_escape_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def unicode_internal_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def unicode_internal_encode(data: _String, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_16_be_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_be_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_16_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_encode(data: _Encodable, errors: _Errors = ..., byteorder: int = ...) -> Tuple[bytes, int]: ... +def utf_16_ex_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int, int]: ... +def utf_16_le_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_le_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_32_be_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_be_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_32_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_encode(data: _Encodable, errors: _Errors = ..., byteorder: int = ...) -> Tuple[bytes, int]: ... +def utf_32_ex_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int, int]: ... +def utf_32_le_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_le_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_7_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_7_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_8_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_8_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... + +if sys.platform == 'win32': + def mbcs_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def mbcs_encode(str: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... + if sys.version_info >= (3, 0): + def oem_decode(data: bytes, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def code_page_decode(codepage: int, data: bytes, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def oem_encode(str: Text, errors: _Errors = ...) -> Tuple[bytes, int]: ... + def code_page_encode(code_page: int, str: Text, errors: _Errors = ...) -> Tuple[bytes, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi new file mode 100644 index 0000000..1c4c26e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi @@ -0,0 +1,49 @@ +import sys + +from typing import Any, Iterable, Iterator, List, Optional, Sequence, Text + +QUOTE_ALL: int +QUOTE_MINIMAL: int +QUOTE_NONE: int +QUOTE_NONNUMERIC: int + +class Error(Exception): ... + +class Dialect: + delimiter: str + quotechar: Optional[str] + escapechar: Optional[str] + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + strict: int + def __init__(self) -> None: ... + +class _reader(Iterator[List[str]]): + dialect: Dialect + line_num: int + if sys.version_info >= (3, 0): + def __next__(self) -> List[str]: ... + else: + def next(self) -> List[str]: ... + +class _writer: + dialect: Dialect + + if sys.version_info >= (3, 5): + def writerow(self, row: Iterable[Any]) -> None: ... + def writerows(self, rows: Iterable[Iterable[Any]]) -> None: ... + else: + def writerow(self, row: Sequence[Any]) -> None: ... + def writerows(self, rows: Iterable[Sequence[Any]]) -> None: ... + + +# TODO: precise type +def writer(csvfile: Any, dialect: Any = ..., **fmtparams: Any) -> _writer: ... +def reader(csvfile: Iterable[Text], dialect: Any = ..., **fmtparams: Any) -> _reader: ... +def register_dialect(name: str, dialect: Any = ..., **fmtparams: Any) -> None: ... +def unregister_dialect(name: str) -> None: ... +def get_dialect(name: str) -> Dialect: ... +def list_dialects() -> List[str]: ... +def field_size_limit(new_limit: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi new file mode 100644 index 0000000..8b7f6ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi @@ -0,0 +1,15 @@ +"""Stub file for the '_heapq' module.""" + +from typing import TypeVar, List + +_T = TypeVar("_T") + +def heapify(heap: List[_T]) -> None: ... +def heappop(heap: List[_T]) -> _T: + raise IndexError() # if list is empty +def heappush(heap: List[_T], item: _T) -> None: ... +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapreplace(heap: List[_T], item: _T) -> _T: + raise IndexError() # if list is empty +def nlargest(a: int, b: List[_T]) -> List[_T]: ... +def nsmallest(a: int, b: List[_T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_random.pyi new file mode 100644 index 0000000..a37149d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_random.pyi @@ -0,0 +1,17 @@ +# Stubs for _random + +import sys +from typing import Tuple + +# Actually Tuple[(int,) * 625] +_State = Tuple[int, ...] + +class Random(object): + def __init__(self, seed: object = ...) -> None: ... + def seed(self, x: object = ...) -> None: ... + def getstate(self) -> _State: ... + def setstate(self, state: _State) -> None: ... + def random(self) -> float: ... + def getrandbits(self, k: int) -> int: ... + if sys.version_info < (3,): + def jumpahead(self, i: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi new file mode 100644 index 0000000..6a527c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, Callable, Generic, Optional, TypeVar, overload + +_C = TypeVar('_C', bound=Callable[..., Any]) +_T = TypeVar('_T') + +class CallableProxyType(object): # "weakcallableproxy" + def __getattr__(self, attr: str) -> Any: ... + +class ProxyType(object): # "weakproxy" + def __getattr__(self, attr: str) -> Any: ... + +class ReferenceType(Generic[_T]): + if sys.version_info >= (3, 4): + __callback__: Callable[[ReferenceType[_T]], Any] + def __init__(self, o: _T, callback: Optional[Callable[[ReferenceType[_T]], Any]] = ...) -> None: ... + def __call__(self) -> Optional[_T]: ... + def __hash__(self) -> int: ... + +ref = ReferenceType + +def getweakrefcount(object: Any) -> int: ... +def getweakrefs(object: Any) -> int: ... +@overload +def proxy(object: _C, callback: Optional[Callable[[_C], Any]] = ...) -> CallableProxyType: ... +# Return CallableProxyType if object is callable, ProxyType otherwise +@overload +def proxy(object: _T, callback: Optional[Callable[[_T], Any]] = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi new file mode 100644 index 0000000..950d3fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi @@ -0,0 +1,43 @@ +from typing import Iterator, Any, Iterable, MutableSet, Optional, TypeVar, Generic, Union + +_S = TypeVar('_S') +_T = TypeVar('_T') +_SelfT = TypeVar('_SelfT', bound=WeakSet) + +class WeakSet(MutableSet[_T], Generic[_T]): + def __init__(self, data: Optional[Iterable[_T]] = ...) -> None: ... + + def add(self, item: _T) -> None: ... + def clear(self) -> None: ... + def discard(self, item: _T) -> None: ... + def copy(self: _SelfT) -> _SelfT: ... + def pop(self) -> _T: ... + def remove(self, item: _T) -> None: ... + def update(self, other: Iterable[_T]) -> None: ... + def __contains__(self, item: object) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + + def __ior__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def difference(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def __sub__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def difference_update(self: _SelfT, other: Iterable[_T]) -> None: ... + def __isub__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def intersection(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def __and__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def intersection_update(self, other: Iterable[_T]) -> None: ... + def __iand__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def issubset(self, other: Iterable[_T]) -> bool: ... + def __le__(self, other: Iterable[_T]) -> bool: ... + def __lt__(self, other: Iterable[_T]) -> bool: ... + def issuperset(self, other: Iterable[_T]) -> bool: ... + def __ge__(self, other: Iterable[_T]) -> bool: ... + def __gt__(self, other: Iterable[_T]) -> bool: ... + def __eq__(self, other: object) -> bool: ... + def symmetric_difference(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def __xor__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def symmetric_difference_update(self, other: Iterable[_S]) -> None: ... + def __ixor__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def union(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def __or__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def isdisjoint(self, other: Iterable[_T]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi new file mode 100644 index 0000000..d4dd5b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi @@ -0,0 +1,408 @@ +# Stubs for argparse (Python 2.7 and 3.4) + +from typing import ( + Any, Callable, Dict, Generator, Iterable, List, IO, NoReturn, Optional, + Pattern, Sequence, Tuple, Type, Union, TypeVar, overload +) +import sys + +_T = TypeVar('_T') +_ActionT = TypeVar('_ActionT', bound='Action') +_N = TypeVar('_N') + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +ONE_OR_MORE: str +OPTIONAL: str +PARSER: str +REMAINDER: str +SUPPRESS: str +ZERO_OR_MORE: str +_UNRECOGNIZED_ARGS_ATTR: str # undocumented + +class ArgumentError(Exception): ... + +# undocumented +class _AttributeHolder: + def _get_kwargs(self) -> List[Tuple[str, Any]]: ... + def _get_args(self) -> List[Any]: ... + +# undocumented +class _ActionsContainer: + description: Optional[_Text] + prefix_chars: _Text + argument_default: Optional[_Text] + conflict_handler: _Text + + _registries: Dict[_Text, Dict[Any, Any]] + _actions: List[Action] + _option_string_actions: Dict[_Text, Action] + _action_groups: List[_ArgumentGroup] + _mutually_exclusive_groups: List[_MutuallyExclusiveGroup] + _defaults: Dict[str, Any] + _negative_number_matcher: Pattern[str] + _has_negative_number_optionals: List[bool] + + def __init__(self, description: Optional[_Text], prefix_chars: _Text, + argument_default: Optional[_Text], conflict_handler: _Text) -> None: ... + def register(self, registry_name: _Text, value: Any, object: Any) -> None: ... + def _registry_get(self, registry_name: _Text, value: Any, default: Any = ...) -> Any: ... + def set_defaults(self, **kwargs: Any) -> None: ... + def get_default(self, dest: _Text) -> Any: ... + def add_argument(self, + *name_or_flags: _Text, + action: Union[_Text, Type[Action]] = ..., + nargs: Union[int, _Text] = ..., + const: Any = ..., + default: Any = ..., + type: Union[Callable[[str], _T], FileType] = ..., + choices: Iterable[_T] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ..., + dest: Optional[_Text] = ..., + version: _Text = ..., + **kwargs: Any) -> Action: ... + def add_argument_group(self, *args: Any, **kwargs: Any) -> _ArgumentGroup: ... + def add_mutually_exclusive_group(self, **kwargs: Any) -> _MutuallyExclusiveGroup: ... + def _add_action(self, action: _ActionT) -> _ActionT: ... + def _remove_action(self, action: Action) -> None: ... + def _add_container_actions(self, container: _ActionsContainer) -> None: ... + def _get_positional_kwargs(self, dest: _Text, **kwargs: Any) -> Dict[str, Any]: ... + def _get_optional_kwargs(self, *args: Any, **kwargs: Any) -> Dict[str, Any]: ... + def _pop_action_class(self, kwargs: Any, default: Optional[Type[Action]] = ...) -> Type[Action]: ... + def _get_handler(self) -> Callable[[Action, Iterable[Tuple[_Text, Action]]], Any]: ... + def _check_conflict(self, action: Action) -> None: ... + def _handle_conflict_error(self, action: Action, conflicting_actions: Iterable[Tuple[_Text, Action]]) -> NoReturn: ... + def _handle_conflict_resolve(self, action: Action, conflicting_actions: Iterable[Tuple[_Text, Action]]) -> None: ... + +class ArgumentParser(_AttributeHolder, _ActionsContainer): + prog: _Text + usage: Optional[_Text] + epilog: Optional[_Text] + formatter_class: Type[HelpFormatter] + fromfile_prefix_chars: Optional[_Text] + add_help: bool + + if sys.version_info >= (3, 5): + allow_abbrev: bool + + # undocumented + _positionals: _ArgumentGroup + _optionals: _ArgumentGroup + _subparsers: Optional[_ArgumentGroup] + + if sys.version_info >= (3, 5): + def __init__(self, + prog: Optional[str] = ..., + usage: Optional[str] = ..., + description: Optional[str] = ..., + epilog: Optional[str] = ..., + parents: Sequence[ArgumentParser] = ..., + formatter_class: Type[HelpFormatter] = ..., + prefix_chars: _Text = ..., + fromfile_prefix_chars: Optional[str] = ..., + argument_default: Optional[str] = ..., + conflict_handler: _Text = ..., + add_help: bool = ..., + allow_abbrev: bool = ...) -> None: ... + else: + def __init__(self, + prog: Optional[_Text] = ..., + usage: Optional[_Text] = ..., + description: Optional[_Text] = ..., + epilog: Optional[_Text] = ..., + parents: Sequence[ArgumentParser] = ..., + formatter_class: Type[HelpFormatter] = ..., + prefix_chars: _Text = ..., + fromfile_prefix_chars: Optional[_Text] = ..., + argument_default: Optional[_Text] = ..., + conflict_handler: _Text = ..., + add_help: bool = ...) -> None: ... + + # The type-ignores in these overloads should be temporary. See: + # https://github.com/python/typeshed/pull/2643#issuecomment-442280277 + @overload + def parse_args(self, args: Optional[Sequence[_Text]] = ...) -> Namespace: ... + @overload + def parse_args(self, args: Optional[Sequence[_Text]], namespace: None) -> Namespace: ... # type: ignore + @overload + def parse_args(self, args: Optional[Sequence[_Text]], namespace: _N) -> _N: ... + @overload + def parse_args(self, *, namespace: None) -> Namespace: ... # type: ignore + @overload + def parse_args(self, *, namespace: _N) -> _N: ... + + if sys.version_info >= (3, 7): + def add_subparsers(self, title: _Text = ..., + description: Optional[_Text] = ..., + prog: _Text = ..., + parser_class: Type[ArgumentParser] = ..., + action: Type[Action] = ..., + option_string: _Text = ..., + dest: Optional[_Text] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[_Text] = ...) -> _SubParsersAction: ... + else: + def add_subparsers(self, title: _Text = ..., + description: Optional[_Text] = ..., + prog: _Text = ..., + parser_class: Type[ArgumentParser] = ..., + action: Type[Action] = ..., + option_string: _Text = ..., + dest: Optional[_Text] = ..., + help: Optional[_Text] = ..., + metavar: Optional[_Text] = ...) -> _SubParsersAction: ... + + def print_usage(self, file: Optional[IO[str]] = ...) -> None: ... + def print_help(self, file: Optional[IO[str]] = ...) -> None: ... + def format_usage(self) -> str: ... + def format_help(self) -> str: ... + def parse_known_args(self, args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Tuple[Namespace, List[str]]: ... + def convert_arg_line_to_args(self, arg_line: _Text) -> List[str]: ... + def exit(self, status: int = ..., message: Optional[_Text] = ...) -> NoReturn: ... + def error(self, message: _Text) -> NoReturn: ... + if sys.version_info >= (3, 7): + def parse_intermixed_args(self, args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Namespace: ... + def parse_known_intermixed_args(self, + args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Tuple[Namespace, List[str]]: ... + # undocumented + def _get_optional_actions(self) -> List[Action]: ... + def _get_positional_actions(self) -> List[Action]: ... + def _parse_known_args(self, arg_strings: List[_Text], namespace: Namespace) -> Tuple[Namespace, List[str]]: ... + def _read_args_from_files(self, arg_strings: List[_Text]) -> List[_Text]: ... + def _match_argument(self, action: Action, arg_strings_pattern: _Text) -> int: ... + def _match_arguments_partial(self, actions: Sequence[Action], arg_strings_pattern: _Text) -> List[int]: ... + def _parse_optional(self, arg_string: _Text) -> Optional[Tuple[Optional[Action], _Text, Optional[_Text]]]: ... + def _get_option_tuples(self, option_string: _Text) -> List[Tuple[Action, _Text, Optional[_Text]]]: ... + def _get_nargs_pattern(self, action: Action) -> _Text: ... + def _get_values(self, action: Action, arg_strings: List[_Text]) -> Any: ... + def _get_value(self, action: Action, arg_string: _Text) -> Any: ... + def _check_value(self, action: Action, value: Any) -> None: ... + def _get_formatter(self) -> HelpFormatter: ... + def _print_message(self, message: str, file: Optional[IO[str]] = ...) -> None: ... + +class HelpFormatter: + # undocumented + _prog: _Text + _indent_increment: int + _max_help_position: int + _width: int + _current_indent: int + _level: int + _action_max_length: int + _root_section: Any + _current_section: Any + _whitespace_matcher: Pattern[str] + _long_break_matcher: Pattern[str] + _Section: Type[Any] # Nested class + def __init__(self, prog: _Text, indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ...) -> None: ... + def _indent(self) -> None: ... + def _dedent(self) -> None: ... + def _add_item(self, func: Callable[..., _Text], args: Iterable[Any]) -> None: ... + def start_section(self, heading: Optional[_Text]) -> None: ... + def end_section(self) -> None: ... + def add_text(self, text: Optional[_Text]) -> None: ... + def add_usage(self, usage: _Text, actions: Iterable[Action], groups: Iterable[_ArgumentGroup], prefix: Optional[_Text] = ...) -> None: ... + def add_argument(self, action: Action) -> None: ... + def add_arguments(self, actions: Iterable[Action]) -> None: ... + def format_help(self) -> _Text: ... + def _join_parts(self, part_strings: Iterable[_Text]) -> _Text: ... + def _format_usage(self, usage: _Text, actions: Iterable[Action], groups: Iterable[_ArgumentGroup], prefix: Optional[_Text]) -> _Text: ... + def _format_actions_usage(self, actions: Iterable[Action], groups: Iterable[_ArgumentGroup]) -> _Text: ... + def _format_text(self, text: _Text) -> _Text: ... + def _format_action(self, action: Action) -> _Text: ... + def _format_action_invocation(self, action: Action) -> _Text: ... + def _metavar_formatter(self, action: Action, default_metavar: _Text) -> Callable[[int], Tuple[_Text, ...]]: ... + def _format_args(self, action: Action, default_metavar: _Text) -> _Text: ... + def _expand_help(self, action: Action) -> _Text: ... + def _iter_indented_subactions(self, action: Action) -> Generator[Action, None, None]: ... + def _split_lines(self, text: _Text, width: int) -> List[_Text]: ... + def _fill_text(self, text: _Text, width: int, indent: int) -> _Text: ... + def _get_help_string(self, action: Action) -> Optional[_Text]: ... + def _get_default_metavar_for_optional(self, action: Action) -> _Text: ... + def _get_default_metavar_for_positional(self, action: Action) -> _Text: ... + +class RawDescriptionHelpFormatter(HelpFormatter): ... +class RawTextHelpFormatter(HelpFormatter): ... +class ArgumentDefaultsHelpFormatter(HelpFormatter): ... +if sys.version_info >= (3,): + class MetavarTypeHelpFormatter(HelpFormatter): ... + +class Action(_AttributeHolder): + option_strings: Sequence[_Text] + dest: _Text + nargs: Optional[Union[int, _Text]] + const: Any + default: Any + type: Union[Callable[[str], Any], FileType, None] + choices: Optional[Iterable[Any]] + required: bool + help: Optional[_Text] + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] + + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + nargs: Optional[Union[int, _Text]] = ..., + const: Any = ..., + default: Any = ..., + type: Optional[Union[Callable[[str], _T], FileType]] = ..., + choices: Optional[Iterable[_T]] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + def __call__(self, parser: ArgumentParser, namespace: Namespace, + values: Union[_Text, Sequence[Any], None], + option_string: Optional[_Text] = ...) -> None: ... + +class Namespace(_AttributeHolder): + def __init__(self, **kwargs: Any) -> None: ... + def __getattr__(self, name: _Text) -> Any: ... + def __setattr__(self, name: _Text, value: Any) -> None: ... + def __contains__(self, key: str) -> bool: ... + +class FileType: + # undocumented + _mode: _Text + _bufsize: int + if sys.version_info >= (3, 4): + _encoding: Optional[_Text] + _errors: Optional[_Text] + if sys.version_info >= (3, 4): + def __init__(self, mode: _Text = ..., bufsize: int = ..., + encoding: Optional[_Text] = ..., + errors: Optional[_Text] = ...) -> None: ... + elif sys.version_info >= (3,): + def __init__(self, + mode: _Text = ..., bufsize: int = ...) -> None: ... + else: + def __init__(self, + mode: _Text = ..., bufsize: Optional[int] = ...) -> None: ... + def __call__(self, string: _Text) -> IO[Any]: ... + +# undocumented +class _ArgumentGroup(_ActionsContainer): + title: Optional[_Text] + _group_actions: List[Action] + def __init__(self, container: _ActionsContainer, + title: Optional[_Text] = ..., + description: Optional[_Text] = ..., **kwargs: Any) -> None: ... + +# undocumented +class _MutuallyExclusiveGroup(_ArgumentGroup): + required: bool + _container: _ActionsContainer + def __init__(self, container: _ActionsContainer, required: bool = ...) -> None: ... + +# undocumented +class _StoreAction(Action): ... + +# undocumented +class _StoreConstAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + const: Any, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + +# undocumented +class _StoreTrueAction(_StoreConstAction): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: bool = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _StoreFalseAction(_StoreConstAction): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: bool = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _AppendAction(Action): ... + +# undocumented +class _AppendConstAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + const: Any, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + +# undocumented +class _CountAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _HelpAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text = ..., + default: _Text = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _VersionAction(Action): + version: Optional[_Text] + def __init__(self, + option_strings: Sequence[_Text], + version: Optional[_Text] = ..., + dest: _Text = ..., + default: _Text = ..., + help: _Text = ...) -> None: ... + +# undocumented +class _SubParsersAction(Action): + _ChoicesPseudoAction: Type[Any] # nested class + _prog_prefix: _Text + _parser_class: Type[ArgumentParser] + _name_parser_map: Dict[_Text, ArgumentParser] + choices: Dict[_Text, ArgumentParser] + _choices_actions: List[Action] + def __init__(self, + option_strings: Sequence[_Text], + prog: _Text, + parser_class: Type[ArgumentParser], + dest: _Text = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + # TODO: Type keyword args properly. + def add_parser(self, name: _Text, **kwargs: Any) -> ArgumentParser: ... + def _get_subactions(self) -> List[Action]: ... + +# undocumented +class ArgumentTypeError(Exception): ... + +if sys.version_info < (3, 7): + # undocumented + def _ensure_value(namespace: Namespace, name: _Text, value: Any) -> Any: ... + +# undocumented +def _get_action_name(argument: Optional[Action]) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/array.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/array.pyi new file mode 100644 index 0000000..01c6f99 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/array.pyi @@ -0,0 +1,73 @@ +# Stubs for array + +# Based on http://docs.python.org/3.6/library/array.html + +import sys +from typing import (Any, BinaryIO, Generic, Iterable, Iterator, List, MutableSequence, + overload, Text, Tuple, TypeVar, Union) + +_T = TypeVar('_T', int, float, Text) + +if sys.version_info >= (3,): + typecodes: str + +class array(MutableSequence[_T], Generic[_T]): + typecode: str + itemsize: int + def __init__(self, typecode: str, + __initializer: Union[bytes, Iterable[_T]] = ...) -> None: ... + def append(self, x: _T) -> None: ... + def buffer_info(self) -> Tuple[int, int]: ... + def byteswap(self) -> None: ... + def count(self, x: Any) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3, 2): + def frombytes(self, s: bytes) -> None: ... + def fromfile(self, f: BinaryIO, n: int) -> None: ... + def fromlist(self, list: List[_T]) -> None: ... + def fromstring(self, s: bytes) -> None: ... + def fromunicode(self, s: str) -> None: ... + def index(self, x: _T) -> int: ... # type: ignore # Overrides Sequence + def insert(self, i: int, x: _T) -> None: ... + def pop(self, i: int = ...) -> _T: ... + if sys.version_info < (3,): + def read(self, f: BinaryIO, n: int) -> None: ... + def remove(self, x: Any) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3, 2): + def tobytes(self) -> bytes: ... + def tofile(self, f: BinaryIO) -> None: ... + def tolist(self) -> List[_T]: ... + def tostring(self) -> bytes: ... + def tounicode(self) -> str: ... + if sys.version_info < (3,): + def write(self, f: BinaryIO) -> None: ... + + def __len__(self) -> int: ... + + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> array[_T]: ... + + @overload # type: ignore # Overrides MutableSequence + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: array[_T]) -> None: ... + + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __add__(self, x: array[_T]) -> array[_T]: ... + def __ge__(self, other: array[_T]) -> bool: ... + def __gt__(self, other: array[_T]) -> bool: ... + def __iadd__(self, x: array[_T]) -> array[_T]: ... # type: ignore # Overrides MutableSequence + def __imul__(self, n: int) -> array[_T]: ... + def __le__(self, other: array[_T]) -> bool: ... + def __lt__(self, other: array[_T]) -> bool: ... + def __mul__(self, n: int) -> array[_T]: ... + def __rmul__(self, n: int) -> array[_T]: ... + if sys.version_info < (3,): + def __delslice__(self, i: int, j: int) -> None: ... + def __getslice__(self, i: int, j: int) -> array[_T]: ... + def __setslice__(self, i: int, j: int, y: array[_T]) -> None: ... + +ArrayType = array diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi new file mode 100644 index 0000000..a359ae7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi @@ -0,0 +1,41 @@ +from abc import abstractmethod +import asyncore +import socket +import sys +from typing import Optional, Sequence, Tuple, Union + + +class simple_producer: + def __init__(self, data: bytes, buffer_size: int = ...) -> None: ... + def more(self) -> bytes: ... + +class async_chat(asyncore.dispatcher): + ac_in_buffer_size: int + ac_out_buffer_size: int + def __init__(self, sock: Optional[socket.socket] = ..., map: Optional[asyncore._maptype] = ...) -> None: ... + + @abstractmethod + def collect_incoming_data(self, data: bytes) -> None: ... + @abstractmethod + def found_terminator(self) -> None: ... + def set_terminator(self, term: Union[bytes, int, None]) -> None: ... + def get_terminator(self) -> Union[bytes, int, None]: ... + def handle_read(self) -> None: ... + def handle_write(self) -> None: ... + def handle_close(self) -> None: ... + def push(self, data: bytes) -> None: ... + def push_with_producer(self, producer: simple_producer) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def close_when_done(self) -> None: ... + def initiate_send(self) -> None: ... + def discard_buffers(self) -> None: ... + +if sys.version_info < (3, 0): + class fifo: + def __init__(self, list: Sequence[Union[bytes, simple_producer]] = ...) -> None: ... + def __len__(self) -> int: ... + def is_empty(self) -> bool: ... + def first(self) -> bytes: ... + def push(self, data: Union[bytes, simple_producer]) -> None: ... + def pop(self) -> Tuple[int, bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi new file mode 100644 index 0000000..8dc8f47 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi @@ -0,0 +1,144 @@ +from typing import Tuple, Union, Optional, Any, Dict, overload + +import os +import select +import sys +import time +import warnings +from socket import SocketType +from typing import Optional + +from errno import (EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, EINVAL, + ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, + EPIPE, EAGAIN, errorcode) + +# cyclic dependence with asynchat +_maptype = Dict[str, Any] + + +class ExitNow(Exception): ... + +def read(obj: Any) -> None: ... +def write(obj: Any) -> None: ... +def readwrite(obj: Any, flags: int) -> None: ... +def poll(timeout: float = ..., map: _maptype = ...) -> None: ... +def poll2(timeout: float = ..., map: _maptype = ...) -> None: ... + +poll3 = poll2 + +def loop(timeout: float = ..., use_poll: bool = ..., map: _maptype = ..., count: Optional[int] = ...) -> None: ... + + +# Not really subclass of socket.socket; it's only delegation. +# It is not covariant to it. +class dispatcher: + + debug: bool + connected: bool + accepting: bool + connecting: bool + closing: bool + ignore_log_types: frozenset[str] + socket: Optional[SocketType] + + def __init__(self, sock: Optional[SocketType] = ..., map: _maptype = ...) -> None: ... + def add_channel(self, map: _maptype = ...) -> None: ... + def del_channel(self, map: _maptype = ...) -> None: ... + def create_socket(self, family: int, type: int) -> None: ... + def set_socket(self, sock: SocketType, map: _maptype = ...) -> None: ... + def set_reuse_addr(self) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def listen(self, backlog: int) -> None: ... + def bind(self, address: Union[tuple, str]) -> None: ... + def connect(self, address: Union[tuple, str]) -> None: ... + def accept(self) -> Optional[Tuple[SocketType, Any]]: ... + def send(self, data: bytes) -> int: ... + def recv(self, buffer_size: int) -> bytes: ... + def close(self) -> None: ... + + def log(self, message: Any) -> None: ... + def log_info(self, message: Any, type: str = ...) -> None: ... + def handle_read_event(self) -> None: ... + def handle_connect_event(self) -> None: ... + def handle_write_event(self) -> None: ... + def handle_expt_event(self) -> None: ... + def handle_error(self) -> None: ... + def handle_expt(self) -> None: ... + def handle_read(self) -> None: ... + def handle_write(self) -> None: ... + def handle_connect(self) -> None: ... + def handle_accept(self) -> None: ... + def handle_close(self) -> None: ... + + if sys.version_info < (3, 5): + # Historically, some methods were "imported" from `self.socket` by + # means of `__getattr__`. This was long deprecated, and as of Python + # 3.5 has been removed; simply call the relevant methods directly on + # self.socket if necessary. + + def detach(self) -> int: ... + def fileno(self) -> int: ... + + # return value is an address + def getpeername(self) -> Any: ... + def getsockname(self) -> Any: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def gettimeout(self) -> float: ... + def ioctl(self, control: object, + option: Tuple[int, int, int]) -> None: ... + # TODO the return value may be BinaryIO or TextIO, depending on mode + def makefile(self, mode: str = ..., buffering: int = ..., + encoding: str = ..., errors: str = ..., + newline: str = ...) -> Any: + ... + + # return type is an address + def recvfrom(self, bufsize: int, flags: int = ...) -> Any: ... + def recvfrom_into(self, buffer: bytes, nbytes: int, flags: int = ...) -> Any: ... + def recv_into(self, buffer: bytes, nbytes: int, flags: int = ...) -> Any: ... + def sendall(self, data: bytes, flags: int = ...) -> None: ... + def sendto(self, data: bytes, address: Union[tuple, str], flags: int = ...) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def settimeout(self, value: Union[float, None]) -> None: ... + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + def shutdown(self, how: int) -> None: ... + +class dispatcher_with_send(dispatcher): + def __init__(self, sock: SocketType = ..., map: _maptype = ...) -> None: ... + def initiate_send(self) -> None: ... + def handle_write(self) -> None: ... + # incompatible signature: + # def send(self, data: bytes) -> Optional[int]: ... + +def compact_traceback() -> Tuple[Tuple[str, str, str], type, type, str]: ... +def close_all(map: _maptype = ..., ignore_all: bool = ...) -> None: ... + +# if os.name == 'posix': +# import fcntl +class file_wrapper: + fd: int + + def __init__(self, fd: int) -> None: ... + def recv(self, bufsize: int, flags: int = ...) -> bytes: ... + def send(self, data: bytes, flags: int = ...) -> int: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def read(self, bufsize: int, flags: int = ...) -> bytes: ... + def write(self, data: bytes, flags: int = ...) -> int: ... + + def close(self) -> None: ... + def fileno(self) -> int: ... + +class file_dispatcher(dispatcher): + def __init__(self, fd: int, map: _maptype = ...) -> None: ... + def set_file(self, fd: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/base64.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/base64.pyi new file mode 100644 index 0000000..7c648c8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/base64.pyi @@ -0,0 +1,38 @@ +# Stubs for base64 + +from typing import IO, Union, Text +import sys + +if sys.version_info < (3,): + _encodable = Union[bytes, unicode] + _decodable = Union[bytes, unicode] +else: + _encodable = bytes + _decodable = Union[bytes, str] + +def b64encode(s: _encodable, altchars: bytes = ...) -> bytes: ... +def b64decode(s: _decodable, altchars: bytes = ..., + validate: bool = ...) -> bytes: ... +def standard_b64encode(s: _encodable) -> bytes: ... +def standard_b64decode(s: _decodable) -> bytes: ... +def urlsafe_b64encode(s: _encodable) -> bytes: ... +def urlsafe_b64decode(s: _decodable) -> bytes: ... +def b32encode(s: _encodable) -> bytes: ... +def b32decode(s: _decodable, casefold: bool = ..., + map01: bytes = ...) -> bytes: ... +def b16encode(s: _encodable) -> bytes: ... +def b16decode(s: _decodable, casefold: bool = ...) -> bytes: ... +if sys.version_info >= (3, 4): + def a85encode(b: _encodable, *, foldspaces: bool = ..., wrapcol: int = ..., + pad: bool = ..., adobe: bool = ...) -> bytes: ... + def a85decode(b: _decodable, *, foldspaces: bool = ..., + adobe: bool = ..., ignorechars: Union[str, bytes] = ...) -> bytes: ... + def b85encode(b: _encodable, pad: bool = ...) -> bytes: ... + def b85decode(b: _decodable) -> bytes: ... + +def decode(input: IO[bytes], output: IO[bytes]) -> None: ... +def decodebytes(s: bytes) -> bytes: ... +def decodestring(s: bytes) -> bytes: ... +def encode(input: IO[bytes], output: IO[bytes]) -> None: ... +def encodebytes(s: bytes) -> bytes: ... +def encodestring(s: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi new file mode 100644 index 0000000..9689b71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi @@ -0,0 +1,47 @@ +# Stubs for binascii + +# Based on http://docs.python.org/3.2/library/binascii.html + +import sys +from typing import Union, Text + + +if sys.version_info < (3,): + # Python 2 accepts unicode ascii pretty much everywhere. + _Bytes = Union[bytes, Text] + _Ascii = Union[bytes, Text] +elif sys.version_info < (3, 3): + # Python 3.2 and below only accepts bytes. + _Bytes = bytes + _Ascii = bytes +else: + # But since Python 3.3 ASCII-only unicode strings are accepted by the + # a2b_* functions. + _Bytes = bytes + _Ascii = Union[bytes, Text] + +def a2b_uu(string: _Ascii) -> bytes: ... +if sys.version_info >= (3, 7): + def b2a_uu(data: _Bytes, *, backtick: bool = ...) -> bytes: ... +else: + def b2a_uu(data: _Bytes) -> bytes: ... +def a2b_base64(string: _Ascii) -> bytes: ... +if sys.version_info >= (3, 6): + def b2a_base64(data: _Bytes, *, newline: bool = ...) -> bytes: ... +else: + def b2a_base64(data: _Bytes) -> bytes: ... +def a2b_qp(string: _Ascii, header: bool = ...) -> bytes: ... +def b2a_qp(data: _Bytes, quotetabs: bool = ..., istext: bool = ..., header: bool = ...) -> bytes: ... +def a2b_hqx(string: _Ascii) -> bytes: ... +def rledecode_hqx(data: _Bytes) -> bytes: ... +def rlecode_hqx(data: _Bytes) -> bytes: ... +def b2a_hqx(data: _Bytes) -> bytes: ... +def crc_hqx(data: _Bytes, crc: int) -> int: ... +def crc32(data: _Bytes, crc: int = ...) -> int: ... +def b2a_hex(data: _Bytes) -> bytes: ... +def hexlify(data: _Bytes) -> bytes: ... +def a2b_hex(hexstr: _Ascii) -> bytes: ... +def unhexlify(hexlify: _Ascii) -> bytes: ... + +class Error(Exception): ... +class Incomplete(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi new file mode 100644 index 0000000..c759ba0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi @@ -0,0 +1,48 @@ +from typing import ( + Any, + IO, + Tuple, + Union, +) + + +class Error(Exception): ... + +REASONABLY_LARGE: int +LINELEN: int +RUNCHAR: bytes + +class FInfo: + def __init__(self) -> None: ... + Type: str + Creator: str + Flags: int + +_FileInfoTuple = Tuple[str, FInfo, int, int] +_FileHandleUnion = Union[str, IO[bytes]] + +def getfileinfo(name: str) -> _FileInfoTuple: ... + +class openrsrc: + def __init__(self, *args: Any) -> None: ... + def read(self, *args: Any) -> bytes: ... + def write(self, *args: Any) -> None: ... + def close(self) -> None: ... + +class BinHex: + def __init__(self, name_finfo_dlen_rlen: _FileInfoTuple, ofp: _FileHandleUnion) -> None: ... + def write(self, data: bytes) -> None: ... + def close_data(self) -> None: ... + def write_rsrc(self, data: bytes) -> None: ... + def close(self) -> None: ... + +def binhex(inp: str, out: str) -> None: ... + +class HexBin: + def __init__(self, ifp: _FileHandleUnion) -> None: ... + def read(self, *n: int) -> bytes: ... + def close_data(self) -> None: ... + def read_rsrc(self, *n: int) -> bytes: ... + def close(self) -> None: ... + +def hexbin(inp: str, out: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi new file mode 100644 index 0000000..5c54112 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi @@ -0,0 +1,22 @@ +# Stubs for bisect + +from typing import Any, Sequence, TypeVar + +_T = TypeVar('_T') + +# TODO uncomment when mypy# 2035 is fixed +# def bisect_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def bisect_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def bisect(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# +# def insort_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def insort_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def insort(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... + +def bisect_left(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def bisect_right(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def bisect(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... + +def insort_left(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def insort_right(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def insort(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi new file mode 100644 index 0000000..cca0e4f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi @@ -0,0 +1,1622 @@ +# True and False are deliberately omitted because they are keywords in +# Python 3, and stub files conform to Python 3 syntax. + +from typing import ( + TypeVar, Iterator, Iterable, NoReturn, overload, Container, + Sequence, MutableSequence, Mapping, MutableMapping, Tuple, List, Any, Dict, Callable, Generic, + Set, AbstractSet, FrozenSet, MutableSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsAbs, + SupportsComplex, IO, BinaryIO, Union, + ItemsView, KeysView, ValuesView, ByteString, Optional, AnyStr, Type, Text, + Protocol, +) +from abc import abstractmethod, ABCMeta +from ast import mod, AST +from types import TracebackType, CodeType +import sys + +if sys.version_info >= (3,): + from typing import SupportsBytes, SupportsRound + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_S = TypeVar('_S') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_TT = TypeVar('_TT', bound='type') + +class object: + __doc__: Optional[str] + __dict__: Dict[str, Any] + __slots__: Union[Text, Iterable[Text]] + __module__: str + if sys.version_info >= (3, 6): + __annotations__: Dict[str, Any] + + @property + def __class__(self: _T) -> Type[_T]: ... + @__class__.setter + def __class__(self, __type: Type[object]) -> None: ... + def __init__(self) -> None: ... + def __new__(cls) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __eq__(self, o: object) -> bool: ... + def __ne__(self, o: object) -> bool: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + def __format__(self, format_spec: str) -> str: ... + def __getattribute__(self, name: str) -> Any: ... + def __delattr__(self, name: str) -> None: ... + def __sizeof__(self) -> int: ... + def __reduce__(self) -> tuple: ... + def __reduce_ex__(self, protocol: int) -> tuple: ... + if sys.version_info >= (3,): + def __dir__(self) -> Iterable[str]: ... + if sys.version_info >= (3, 6): + def __init_subclass__(cls) -> None: ... + +class staticmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class classmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class type(object): + __base__: type + __bases__: Tuple[type, ...] + __basicsize__: int + __dict__: Dict[str, Any] + __dictoffset__: int + __flags__: int + __itemsize__: int + __module__: str + __mro__: Tuple[type, ...] + __name__: str + if sys.version_info >= (3,): + __qualname__: str + __text_signature__: Optional[str] + __weakrefoffset__: int + + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, name: str, bases: Tuple[type, ...], dict: Dict[str, Any]) -> None: ... + @overload + def __new__(cls, o: object) -> type: ... + @overload + def __new__(cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]) -> type: ... + def __call__(self, *args: Any, **kwds: Any) -> Any: ... + def __subclasses__(self: _TT) -> List[_TT]: ... + # Note: the documentation doesnt specify what the return type is, the standard + # implementation seems to be returning a list. + def mro(self) -> List[type]: ... + def __instancecheck__(self, instance: Any) -> bool: ... + def __subclasscheck__(self, subclass: type) -> bool: ... + if sys.version_info >= (3,): + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Mapping[str, Any]: ... + +class super(object): + if sys.version_info >= (3,): + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + @overload + def __init__(self) -> None: ... + else: + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + +class int: + @overload + def __init__(self, x: Union[Text, bytes, SupportsInt] = ...) -> None: ... + @overload + def __init__(self, x: Union[Text, bytes, bytearray], base: int) -> None: ... + + @property + def real(self) -> int: ... + @property + def imag(self) -> int: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + def conjugate(self) -> int: ... + + def bit_length(self) -> int: ... + if sys.version_info >= (3,): + def to_bytes(self, length: int, byteorder: str, *, signed: bool = ...) -> bytes: ... + @classmethod + def from_bytes(cls, bytes: Sequence[int], byteorder: str, *, + signed: bool = ...) -> int: ... # TODO buffer object argument + + def __add__(self, x: int) -> int: ... + def __sub__(self, x: int) -> int: ... + def __mul__(self, x: int) -> int: ... + def __floordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __div__(self, x: int) -> int: ... + def __truediv__(self, x: int) -> float: ... + def __mod__(self, x: int) -> int: ... + def __divmod__(self, x: int) -> Tuple[int, int]: ... + def __radd__(self, x: int) -> int: ... + def __rsub__(self, x: int) -> int: ... + def __rmul__(self, x: int) -> int: ... + def __rfloordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __rdiv__(self, x: int) -> int: ... + def __rtruediv__(self, x: int) -> float: ... + def __rmod__(self, x: int) -> int: ... + def __rdivmod__(self, x: int) -> Tuple[int, int]: ... + def __pow__(self, x: int) -> Any: ... # Return type can be int or float, depending on x. + def __rpow__(self, x: int) -> Any: ... + def __and__(self, n: int) -> int: ... + def __or__(self, n: int) -> int: ... + def __xor__(self, n: int) -> int: ... + def __lshift__(self, n: int) -> int: ... + def __rshift__(self, n: int) -> int: ... + def __rand__(self, n: int) -> int: ... + def __ror__(self, n: int) -> int: ... + def __rxor__(self, n: int) -> int: ... + def __rlshift__(self, n: int) -> int: ... + def __rrshift__(self, n: int) -> int: ... + def __neg__(self) -> int: ... + def __pos__(self) -> int: ... + def __invert__(self) -> int: ... + if sys.version_info >= (3,): + def __round__(self, ndigits: Optional[int] = ...) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: int) -> bool: ... + def __le__(self, x: int) -> bool: ... + def __gt__(self, x: int) -> bool: ... + def __ge__(self, x: int) -> bool: ... + + def __str__(self) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __abs__(self) -> int: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __index__(self) -> int: ... + +class float: + def __init__(self, x: Union[SupportsFloat, Text, bytes, bytearray] = ...) -> None: ... + def as_integer_ratio(self) -> Tuple[int, int]: ... + def hex(self) -> str: ... + def is_integer(self) -> bool: ... + @classmethod + def fromhex(cls, s: str) -> float: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + def conjugate(self) -> float: ... + + def __add__(self, x: float) -> float: ... + def __sub__(self, x: float) -> float: ... + def __mul__(self, x: float) -> float: ... + def __floordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __div__(self, x: float) -> float: ... + def __truediv__(self, x: float) -> float: ... + def __mod__(self, x: float) -> float: ... + def __divmod__(self, x: float) -> Tuple[float, float]: ... + def __pow__(self, x: float) -> float: ... # In Python 3, returns complex if self is negative and x is not whole + def __radd__(self, x: float) -> float: ... + def __rsub__(self, x: float) -> float: ... + def __rmul__(self, x: float) -> float: ... + def __rfloordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __rdiv__(self, x: float) -> float: ... + def __rtruediv__(self, x: float) -> float: ... + def __rmod__(self, x: float) -> float: ... + def __rdivmod__(self, x: float) -> Tuple[float, float]: ... + def __rpow__(self, x: float) -> float: ... + def __getnewargs__(self) -> Tuple[float]: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: None) -> int: ... + @overload + def __round__(self, ndigits: int) -> float: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: float) -> bool: ... + def __le__(self, x: float) -> bool: ... + def __gt__(self, x: float) -> bool: ... + def __ge__(self, x: float) -> bool: ... + def __neg__(self) -> float: ... + def __pos__(self) -> float: ... + + def __str__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +class complex: + @overload + def __init__(self, re: float = ..., im: float = ...) -> None: ... + @overload + def __init__(self, s: str) -> None: ... + @overload + def __init__(self, s: SupportsComplex) -> None: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + + def conjugate(self) -> complex: ... + + def __add__(self, x: complex) -> complex: ... + def __sub__(self, x: complex) -> complex: ... + def __mul__(self, x: complex) -> complex: ... + def __pow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __div__(self, x: complex) -> complex: ... + def __truediv__(self, x: complex) -> complex: ... + def __radd__(self, x: complex) -> complex: ... + def __rsub__(self, x: complex) -> complex: ... + def __rmul__(self, x: complex) -> complex: ... + def __rpow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __rdiv__(self, x: complex) -> complex: ... + def __rtruediv__(self, x: complex) -> complex: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __neg__(self) -> complex: ... + def __pos__(self) -> complex: ... + + def __str__(self) -> str: ... + def __complex__(self) -> complex: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +if sys.version_info >= (3,): + _str_base = object +else: + class basestring(metaclass=ABCMeta): ... + + class unicode(basestring, Sequence[unicode]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, o: str, encoding: unicode = ..., errors: unicode = ...) -> None: ... + def capitalize(self) -> unicode: ... + def center(self, width: int, fillchar: unicode = ...) -> unicode: ... + def count(self, x: unicode) -> int: ... + def decode(self, encoding: unicode = ..., errors: unicode = ...) -> unicode: ... + def encode(self, encoding: unicode = ..., errors: unicode = ...) -> str: ... + def endswith(self, suffix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> unicode: ... + def find(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> unicode: ... + def index(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[unicode]) -> unicode: ... + def ljust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def lower(self) -> unicode: ... + def lstrip(self, chars: unicode = ...) -> unicode: ... + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: unicode, new: unicode, count: int = ...) -> unicode: ... + def rfind(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def rsplit(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def rstrip(self, chars: unicode = ...) -> unicode: ... + def split(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[unicode]: ... + def startswith(self, prefix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def strip(self, chars: unicode = ...) -> unicode: ... + def swapcase(self) -> unicode: ... + def title(self) -> unicode: ... + def translate(self, table: Union[Dict[int, Any], unicode]) -> unicode: ... + def upper(self) -> unicode: ... + def zfill(self, width: int) -> unicode: ... + + @overload + def __getitem__(self, i: int) -> unicode: ... + @overload + def __getitem__(self, s: slice) -> unicode: ... + def __getslice__(self, start: int, stop: int) -> unicode: ... + def __add__(self, s: unicode) -> unicode: ... + def __mul__(self, n: int) -> unicode: ... + def __rmul__(self, n: int) -> unicode: ... + def __mod__(self, x: Any) -> unicode: ... + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: unicode) -> bool: ... + def __le__(self, x: unicode) -> bool: ... + def __gt__(self, x: unicode) -> bool: ... + def __ge__(self, x: unicode) -> bool: ... + + def __len__(self) -> int: ... + # The argument type is incompatible with Sequence + def __contains__(self, s: Union[unicode, bytes]) -> bool: ... # type: ignore + def __iter__(self) -> Iterator[unicode]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + def __getnewargs__(self) -> Tuple[unicode]: ... + + _str_base = basestring + +class str(Sequence[str], _str_base): + if sys.version_info >= (3,): + @overload + def __init__(self, o: object = ...) -> None: ... + @overload + def __init__(self, o: bytes, encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, o: object = ...) -> None: ... + + def capitalize(self) -> str: ... + if sys.version_info >= (3, 3): + def casefold(self) -> str: ... + def center(self, width: int, fillchar: str = ...) -> str: ... + def count(self, x: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + if sys.version_info < (3,): + def decode(self, encoding: Text = ..., errors: Text = ...) -> unicode: ... + def encode(self, encoding: Text = ..., errors: Text = ...) -> bytes: ... + if sys.version_info >= (3,): + def endswith(self, suffix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + else: + def endswith(self, suffix: Union[Text, Tuple[Text, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> str: ... + def find(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> str: ... + if sys.version_info >= (3,): + def format_map(self, map: Mapping[str, Any]) -> str: ... + def index(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + if sys.version_info >= (3,): + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + if sys.version_info >= (3,): + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + if sys.version_info >= (3,): + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[str]) -> str: ... + else: + def join(self, iterable: Iterable[AnyStr]) -> AnyStr: ... + def ljust(self, width: int, fillchar: str = ...) -> str: ... + def lower(self) -> str: ... + if sys.version_info >= (3,): + def lstrip(self, chars: Optional[str] = ...) -> str: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self, old: str, new: str, count: int = ...) -> str: ... + else: + @overload + def lstrip(self, chars: str = ...) -> str: ... + @overload + def lstrip(self, chars: unicode) -> unicode: ... + @overload + def partition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def partition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: AnyStr, new: AnyStr, count: int = ...) -> AnyStr: ... + def rfind(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: str = ...) -> str: ... + if sys.version_info >= (3,): + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rstrip(self, chars: Optional[str] = ...) -> str: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + else: + @overload + def rpartition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + @overload + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def rsplit(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + @overload + def rstrip(self, chars: str = ...) -> str: ... + @overload + def rstrip(self, chars: unicode) -> unicode: ... + @overload + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def split(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + if sys.version_info >= (3,): + def startswith(self, prefix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + def strip(self, chars: Optional[str] = ...) -> str: ... + else: + def startswith(self, prefix: Union[Text, Tuple[Text, ...]]) -> bool: ... + @overload + def strip(self, chars: str = ...) -> str: ... + @overload + def strip(self, chars: unicode) -> unicode: ... + def swapcase(self) -> str: ... + def title(self) -> str: ... + if sys.version_info >= (3,): + def translate(self, table: Union[Mapping[int, Union[int, str, None]], Sequence[Union[int, str, None]]]) -> str: ... + else: + def translate(self, table: Optional[AnyStr], deletechars: AnyStr = ...) -> AnyStr: ... + def upper(self) -> str: ... + def zfill(self, width: int) -> str: ... + if sys.version_info >= (3,): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + + if sys.version_info >= (3,): + def __add__(self, s: str) -> str: ... + else: + def __add__(self, s: AnyStr) -> AnyStr: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[str, Text]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ge__(self, x: Text) -> bool: ... + def __getitem__(self, i: Union[int, slice]) -> str: ... + def __gt__(self, x: Text) -> bool: ... + def __hash__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + def __le__(self, x: Text) -> bool: ... + def __len__(self) -> int: ... + def __lt__(self, x: Text) -> bool: ... + def __mod__(self, x: Any) -> str: ... + def __mul__(self, n: int) -> str: ... + def __ne__(self, x: object) -> bool: ... + def __repr__(self) -> str: ... + def __rmul__(self, n: int) -> str: ... + def __str__(self) -> str: ... + def __getnewargs__(self) -> Tuple[str]: ... + + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + +if sys.version_info >= (3,): + class bytes(ByteString): + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str, encoding: str, + errors: str = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: SupportsBytes) -> None: ... + def capitalize(self) -> bytes: ... + def center(self, width: int, fillchar: bytes = ...) -> bytes: ... + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def decode(self, encoding: str = ..., errors: str = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytes: ... + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytes: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def lower(self) -> bytes: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def partition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytes: ... + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def rpartition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def splitlines(self, keepends: bool = ...) -> List[bytes]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytes: ... + def swapcase(self) -> bytes: ... + def title(self) -> bytes: ... + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytes: ... + def upper(self) -> bytes: ... + def zfill(self, width: int) -> bytes: ... + @classmethod + def fromhex(cls, s: str) -> bytes: ... + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytes: ... + def __add__(self, s: bytes) -> bytes: ... + def __mul__(self, n: int) -> bytes: ... + def __rmul__(self, n: int) -> bytes: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + def __getnewargs__(self) -> Tuple[bytes]: ... +else: + bytes = str + +class bytearray(MutableSequence[int], ByteString): + if sys.version_info >= (3,): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + else: + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + def capitalize(self) -> bytearray: ... + def center(self, width: int, fillchar: bytes = ...) -> bytearray: ... + if sys.version_info >= (3,): + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def copy(self) -> bytearray: ... + else: + def count(self, x: str) -> int: ... + def decode(self, encoding: Text = ..., errors: Text = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def find(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def insert(self, index: int, object: int) -> None: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytearray: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + else: + def join(self, iterable: Iterable[str]) -> bytearray: ... + def ljust(self, width: int, fillchar: str = ...) -> bytearray: ... + def lower(self) -> bytearray: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def partition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def rfind(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + def rpartition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def splitlines(self, keepends: bool = ...) -> List[bytearray]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def swapcase(self) -> bytearray: ... + def title(self) -> bytearray: ... + if sys.version_info >= (3,): + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytearray: ... + else: + def translate(self, table: str) -> bytearray: ... + def upper(self) -> bytearray: ... + def zfill(self, width: int) -> bytearray: ... + @staticmethod + def fromhex(s: str) -> bytearray: ... + if sys.version_info >= (3,): + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytearray: ... + @overload + def __setitem__(self, i: int, x: int) -> None: ... + @overload + def __setitem__(self, s: slice, x: Union[Iterable[int], bytes]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> bytearray: ... + def __setslice__(self, start: int, stop: int, x: Union[Sequence[int], str]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, s: bytes) -> bytearray: ... + if sys.version_info >= (3,): + def __iadd__(self, s: Iterable[int]) -> bytearray: ... + def __mul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3,): + def __rmul__(self, n: int) -> bytearray: ... + def __imul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + +if sys.version_info >= (3,): + _mv_container_type = int +else: + _mv_container_type = str + +class memoryview(Sized, Container[_mv_container_type]): + format: str + itemsize: int + shape: Optional[Tuple[int, ...]] + strides: Optional[Tuple[int, ...]] + suboffsets: Optional[Tuple[int, ...]] + readonly: bool + ndim: int + + if sys.version_info >= (3,): + c_contiguous: bool + f_contiguous: bool + contiguous: bool + def __init__(self, obj: Union[bytes, bytearray, memoryview]) -> None: ... + def __enter__(self) -> memoryview: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]) -> bool: ... + else: + def __init__(self, obj: Union[bytes, bytearray, buffer, memoryview]) -> None: ... + + @overload + def __getitem__(self, i: int) -> _mv_container_type: ... + @overload + def __getitem__(self, s: slice) -> memoryview: ... + + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_mv_container_type]: ... + def __len__(self) -> int: ... + + @overload + def __setitem__(self, i: int, o: bytes) -> None: ... + @overload + def __setitem__(self, s: slice, o: Sequence[bytes]) -> None: ... + @overload + def __setitem__(self, s: slice, o: memoryview) -> None: ... + + def tobytes(self) -> bytes: ... + def tolist(self) -> List[int]: ... + + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + +class bool(int): + def __init__(self, o: object = ...) -> None: ... + @overload + def __and__(self, x: bool) -> bool: ... + @overload + def __and__(self, x: int) -> int: ... + @overload + def __or__(self, x: bool) -> bool: ... + @overload + def __or__(self, x: int) -> int: ... + @overload + def __xor__(self, x: bool) -> bool: ... + @overload + def __xor__(self, x: int) -> int: ... + @overload + def __rand__(self, x: bool) -> bool: ... + @overload + def __rand__(self, x: int) -> int: ... + @overload + def __ror__(self, x: bool) -> bool: ... + @overload + def __ror__(self, x: int) -> int: ... + @overload + def __rxor__(self, x: bool) -> bool: ... + @overload + def __rxor__(self, x: int) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + +class slice(object): + start: Optional[int] + step: Optional[int] + stop: Optional[int] + @overload + def __init__(self, stop: Optional[int]) -> None: ... + @overload + def __init__(self, start: Optional[int], stop: Optional[int], step: Optional[int] = ...) -> None: ... + def indices(self, len: int) -> Tuple[int, int, int]: ... + +class tuple(Sequence[_T_co], Generic[_T_co]): + def __new__(cls: Type[_T], iterable: Iterable[_T_co] = ...) -> _T: ... + def __init__(self, iterable: Iterable[_T_co] = ...): ... + def __len__(self) -> int: ... + def __contains__(self, x: object) -> bool: ... + @overload + def __getitem__(self, x: int) -> _T_co: ... + @overload + def __getitem__(self, x: slice) -> Tuple[_T_co, ...]: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __lt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __le__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __gt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __ge__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __add__(self, x: Tuple[_T_co, ...]) -> Tuple[_T_co, ...]: ... + def __mul__(self, n: int) -> Tuple[_T_co, ...]: ... + def __rmul__(self, n: int) -> Tuple[_T_co, ...]: ... + def count(self, x: Any) -> int: ... + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + +class list(MutableSequence[_T], Generic[_T]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3,): + def clear(self) -> None: ... + def copy(self) -> List[_T]: ... + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def index(self, object: _T, start: int = ..., stop: int = ...) -> int: ... + def count(self, object: _T) -> int: ... + def insert(self, index: int, object: _T) -> None: ... + def remove(self, object: _T) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3,): + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + else: + def sort(self, cmp: Callable[[_T, _T], Any] = ..., key: Callable[[_T], Any] = ..., reverse: bool = ...) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> List[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, o: Sequence[_T]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, x: List[_T]) -> List[_T]: ... + def __iadd__(self: _S, x: Iterable[_T]) -> _S: ... + def __mul__(self, n: int) -> List[_T]: ... + def __rmul__(self, n: int) -> List[_T]: ... + if sys.version_info >= (3,): + def __imul__(self: _S, n: int) -> _S: ... + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __gt__(self, x: List[_T]) -> bool: ... + def __ge__(self, x: List[_T]) -> bool: ... + def __lt__(self, x: List[_T]) -> bool: ... + def __le__(self, x: List[_T]) -> bool: ... + +class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + # NOTE: Keyword arguments are special. If they are used, _KT must include + # str, but we have no way of enforcing it here. + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + + def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ... + + if sys.version_info < (3,): + def has_key(self, k: _KT) -> bool: ... + def clear(self) -> None: ... + def copy(self) -> Dict[_KT, _VT]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + if sys.version_info >= (3,): + def keys(self) -> KeysView[_KT]: ... + def values(self) -> ValuesView[_VT]: ... + def items(self) -> ItemsView[_KT, _VT]: ... + else: + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def viewkeys(self) -> KeysView[_KT]: ... + def viewvalues(self) -> ValuesView[_VT]: ... + def viewitems(self) -> ItemsView[_KT, _VT]: ... + @staticmethod + @overload + def fromkeys(seq: Iterable[_T]) -> Dict[_T, Any]: ... # TODO: Actually a class method (mypy/issues#328) + @staticmethod + @overload + def fromkeys(seq: Iterable[_T], value: _S) -> Dict[_T, _S]: ... + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + +class set(MutableSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def add(self, element: _T) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Set[_T]: ... + def difference(self, *s: Iterable[Any]) -> Set[_T]: ... + def difference_update(self, *s: Iterable[Any]) -> None: ... + def discard(self, element: _T) -> None: ... + def intersection(self, *s: Iterable[Any]) -> Set[_T]: ... + def intersection_update(self, *s: Iterable[Any]) -> None: ... + def isdisjoint(self, s: Iterable[Any]) -> bool: ... + def issubset(self, s: Iterable[Any]) -> bool: ... + def issuperset(self, s: Iterable[Any]) -> bool: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def symmetric_difference(self, s: Iterable[_T]) -> Set[_T]: ... + def symmetric_difference_update(self, s: Iterable[_T]) -> None: ... + def union(self, *s: Iterable[_T]) -> Set[_T]: ... + def update(self, *s: Iterable[_T]) -> None: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __iand__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ior__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __isub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ixor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class frozenset(AbstractSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def copy(self) -> FrozenSet[_T]: ... + def difference(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def intersection(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def isdisjoint(self, s: Iterable[_T]) -> bool: ... + def issubset(self, s: Iterable[object]) -> bool: ... + def issuperset(self, s: Iterable[object]) -> bool: ... + def symmetric_difference(self, s: Iterable[_T]) -> FrozenSet[_T]: ... + def union(self, *s: Iterable[_T]) -> FrozenSet[_T]: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class enumerate(Iterator[Tuple[int, _T]], Generic[_T]): + def __init__(self, iterable: Iterable[_T], start: int = ...) -> None: ... + def __iter__(self) -> Iterator[Tuple[int, _T]]: ... + if sys.version_info >= (3,): + def __next__(self) -> Tuple[int, _T]: ... + else: + def next(self) -> Tuple[int, _T]: ... + +if sys.version_info >= (3,): + class range(Sequence[int]): + start: int + stop: int + step: int + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def count(self, value: int) -> int: ... + def index(self, value: int, start: int = ..., stop: Optional[int] = ...) -> int: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[int]: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> range: ... + def __repr__(self) -> str: ... + def __reversed__(self) -> Iterator[int]: ... +else: + class xrange(Sized, Iterable[int], Reversible[int]): + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __getitem__(self, i: int) -> int: ... + def __reversed__(self) -> Iterator[int]: ... + +class property(object): + def __init__(self, fget: Optional[Callable[[Any], Any]] = ..., + fset: Optional[Callable[[Any, Any], None]] = ..., + fdel: Optional[Callable[[Any], None]] = ..., + doc: Optional[str] = ...) -> None: ... + def getter(self, fget: Callable[[Any], Any]) -> property: ... + def setter(self, fset: Callable[[Any, Any], None]) -> property: ... + def deleter(self, fdel: Callable[[Any], None]) -> property: ... + def __get__(self, obj: Any, type: Optional[type] = ...) -> Any: ... + def __set__(self, obj: Any, value: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + def fget(self) -> Any: ... + def fset(self, value: Any) -> None: ... + def fdel(self) -> None: ... + +if sys.version_info < (3,): + long = int + +NotImplemented: Any + +def abs(__n: SupportsAbs[_T]) -> _T: ... +def all(__i: Iterable[object]) -> bool: ... +def any(__i: Iterable[object]) -> bool: ... +if sys.version_info < (3,): + def apply(__func: Callable[..., _T], __args: Optional[Sequence[Any]] = ..., __kwds: Optional[Mapping[str, Any]] = ...) -> _T: ... +if sys.version_info >= (3,): + def ascii(__o: object) -> str: ... + +class _SupportsIndex(Protocol): + def __index__(self) -> int: ... +def bin(__number: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 7): + def breakpoint(*args: Any, **kws: Any) -> None: ... +def callable(__o: object) -> bool: ... +def chr(__code: int) -> str: ... +if sys.version_info < (3,): + def cmp(__x: Any, __y: Any) -> int: ... + _N1 = TypeVar('_N1', bool, int, float, complex) + def coerce(__x: _N1, __y: _N1) -> Tuple[_N1, _N1]: ... +if sys.version_info >= (3, 6): + # This class is to be exported as PathLike from os, + # but we define it here as _PathLike to avoid import cycle issues. + # See https://github.com/python/typeshed/pull/991#issuecomment-288160993 + class _PathLike(Generic[AnyStr]): + def __fspath__(self) -> AnyStr: ... + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes, _PathLike], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +elif sys.version_info >= (3,): + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +else: + def compile(source: Union[Text, mod], filename: Text, mode: Text, flags: int = ..., dont_inherit: int = ...) -> Any: ... +if sys.version_info >= (3,): + def copyright() -> None: ... + def credits() -> None: ... +def delattr(__o: Any, __name: Text) -> None: ... +def dir(__o: object = ...) -> List[str]: ... +_N2 = TypeVar('_N2', int, float) +def divmod(__a: _N2, __b: _N2) -> Tuple[_N2, _N2]: ... +def eval(__source: Union[Text, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +if sys.version_info >= (3,): + def exec(__object: Union[str, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +else: + def execfile(__filename: str, __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Dict[str, Any]] = ...) -> None: ... +def exit(code: object = ...) -> NoReturn: ... +if sys.version_info >= (3,): + @overload + def filter(__function: None, __iterable: Iterable[Optional[_T]]) -> Iterator[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], __iterable: Iterable[_T]) -> Iterator[_T]: ... +else: + @overload + def filter(__function: Callable[[AnyStr], Any], # type: ignore + __iterable: AnyStr) -> AnyStr: ... + @overload + def filter(__function: None, # type: ignore + __iterable: Tuple[Optional[_T], ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: Callable[[_T], Any], # type: ignore + __iterable: Tuple[_T, ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: None, + __iterable: Iterable[Optional[_T]]) -> List[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], + __iterable: Iterable[_T]) -> List[_T]: ... +def format(__o: object, __format_spec: str = ...) -> str: ... # TODO unicode +def getattr(__o: Any, name: Text, __default: Any = ...) -> Any: ... +def globals() -> Dict[str, Any]: ... +def hasattr(__o: Any, __name: Text) -> bool: ... +def hash(__o: object) -> int: ... +if sys.version_info >= (3,): + def help(*args: Any, **kwds: Any) -> None: ... +def hex(__i: Union[int, _SupportsIndex]) -> str: ... +def id(__o: object) -> int: ... +if sys.version_info >= (3,): + def input(__prompt: Any = ...) -> str: ... +else: + def input(__prompt: Any = ...) -> Any: ... + def intern(__string: str) -> str: ... +@overload +def iter(__iterable: Iterable[_T]) -> Iterator[_T]: ... +@overload +def iter(__function: Callable[[], _T], __sentinel: _T) -> Iterator[_T]: ... +def isinstance(__o: object, __t: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def issubclass(__cls: type, __classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def len(__o: Sized) -> int: ... +if sys.version_info >= (3,): + def license() -> None: ... +def locals() -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[_S]: ... +else: + @overload + def map(__func: None, __iter1: Iterable[_T1]) -> List[_T1]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def map(__func: None, + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +if sys.version_info >= (3,): + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +if sys.version_info >= (3,): + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +@overload +def next(__i: Iterator[_T]) -> _T: ... +@overload +def next(__i: Iterator[_T], default: _VT) -> Union[_T, _VT]: ... +def oct(__i: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 6): + def open(file: Union[str, bytes, int, _PathLike], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +elif sys.version_info >= (3,): + def open(file: Union[str, bytes, int], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +else: + def open(name: Union[unicode, int], mode: unicode = ..., buffering: int = ...) -> BinaryIO: ... + +def ord(__c: Union[Text, bytes]) -> int: ... +if sys.version_info >= (3,): + class _Writer(Protocol): + def write(self, __s: str) -> Any: ... + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ..., flush: bool = ...) -> None: ... +else: + class _Writer(Protocol): + def write(self, __s: Any) -> Any: ... + # This is only available after from __future__ import print_function. + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ...) -> None: ... +@overload +def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y +@overload +def pow(__x: int, __y: int, __z: int) -> Any: ... +@overload +def pow(__x: float, __y: float) -> float: ... +@overload +def pow(__x: float, __y: float, __z: float) -> float: ... +def quit(code: object = ...) -> NoReturn: ... +if sys.version_info < (3,): + def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ... + def raw_input(__prompt: Any = ...) -> str: ... + @overload + def reduce(__function: Callable[[_T, _S], _T], __iterable: Iterable[_S], __initializer: _T) -> _T: ... + @overload + def reduce(__function: Callable[[_T, _T], _T], __iterable: Iterable[_T]) -> _T: ... + def reload(__module: Any) -> Any: ... +@overload +def reversed(__object: Sequence[_T]) -> Iterator[_T]: ... +@overload +def reversed(__object: Reversible[_T]) -> Iterator[_T]: ... +def repr(__o: object) -> str: ... +if sys.version_info >= (3,): + @overload + def round(number: float) -> int: ... + @overload + def round(number: float, ndigits: None) -> int: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsRound[_T]) -> int: ... + @overload + def round(number: SupportsRound[_T], ndigits: None) -> int: ... # type: ignore + @overload + def round(number: SupportsRound[_T], ndigits: int) -> _T: ... +else: + @overload + def round(number: float) -> float: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsFloat) -> float: ... + @overload + def round(number: SupportsFloat, ndigits: int) -> float: ... +def setattr(__object: Any, __name: Text, __value: Any) -> None: ... +if sys.version_info >= (3,): + def sorted(__iterable: Iterable[_T], *, + key: Optional[Callable[[_T], Any]] = ..., + reverse: bool = ...) -> List[_T]: ... +else: + def sorted(__iterable: Iterable[_T], *, + cmp: Callable[[_T, _T], int] = ..., + key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> List[_T]: ... +@overload +def sum(__iterable: Iterable[_T]) -> Union[_T, int]: ... +@overload +def sum(__iterable: Iterable[_T], __start: _S) -> Union[_T, _S]: ... +if sys.version_info < (3,): + def unichr(__i: int) -> unicode: ... +def vars(__object: Any = ...) -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +else: + @overload + def zip(__iter1: Iterable[_T1]) -> List[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... +def __import__(name: Text, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ..., + fromlist: List[str] = ..., level: int = ...) -> Any: ... + +# Actually the type of Ellipsis is , but since it's +# not exposed anywhere under that name, we make it private here. +class ellipsis: ... +Ellipsis: ellipsis + +if sys.version_info < (3,): + # TODO: buffer support is incomplete; e.g. some_string.startswith(some_buffer) doesn't type check. + _AnyBuffer = TypeVar('_AnyBuffer', str, unicode, bytearray, buffer) + + class buffer(Sized): + def __init__(self, object: _AnyBuffer, offset: int = ..., size: int = ...) -> None: ... + def __add__(self, other: _AnyBuffer) -> str: ... + def __cmp__(self, other: _AnyBuffer) -> bool: ... + def __getitem__(self, key: Union[int, slice]) -> str: ... + def __getslice__(self, i: int, j: int) -> str: ... + def __len__(self) -> int: ... + def __mul__(self, x: int) -> str: ... + +class BaseException(object): + args: Tuple[Any, ...] + if sys.version_info < (3,): + message: Any + if sys.version_info >= (3,): + __cause__: Optional[BaseException] + __context__: Optional[BaseException] + __suppress_context__: bool + __traceback__: Optional[TracebackType] + def __init__(self, *args: object) -> None: ... + if sys.version_info < (3,): + def __getitem__(self, i: int) -> Any: ... + def __getslice__(self, start: int, stop: int) -> Tuple[Any, ...]: ... + if sys.version_info >= (3,): + def with_traceback(self, tb: Optional[TracebackType]) -> BaseException: ... + +class GeneratorExit(BaseException): ... +class KeyboardInterrupt(BaseException): ... +class SystemExit(BaseException): + code: int +class Exception(BaseException): ... +class StopIteration(Exception): + if sys.version_info >= (3,): + value: Any +if sys.version_info >= (3,): + _StandardError = Exception + class OSError(Exception): + errno: int + strerror: str + # filename, filename2 are actually Union[str, bytes, None] + filename: Any + filename2: Any + EnvironmentError = OSError + IOError = OSError +else: + class StandardError(Exception): ... + _StandardError = StandardError + class EnvironmentError(StandardError): + errno: int + strerror: str + # TODO can this be unicode? + filename: str + class OSError(EnvironmentError): ... + class IOError(EnvironmentError): ... + +class ArithmeticError(_StandardError): ... +class AssertionError(_StandardError): ... +class AttributeError(_StandardError): ... +class BufferError(_StandardError): ... +class EOFError(_StandardError): ... +class ImportError(_StandardError): + if sys.version_info >= (3,): + name: str + path: str +class LookupError(_StandardError): ... +class MemoryError(_StandardError): ... +class NameError(_StandardError): ... +class ReferenceError(_StandardError): ... +class RuntimeError(_StandardError): ... +if sys.version_info >= (3, 5): + class StopAsyncIteration(Exception): + value: Any +class SyntaxError(_StandardError): + msg: str + lineno: int + offset: Optional[int] + text: str + filename: str +class SystemError(_StandardError): ... +class TypeError(_StandardError): ... +class ValueError(_StandardError): ... + +class FloatingPointError(ArithmeticError): ... +class OverflowError(ArithmeticError): ... +class ZeroDivisionError(ArithmeticError): ... + +if sys.version_info >= (3, 6): + class ModuleNotFoundError(ImportError): ... + +class IndexError(LookupError): ... +class KeyError(LookupError): ... + +class UnboundLocalError(NameError): ... + +class WindowsError(OSError): + winerror: int +if sys.version_info >= (3,): + class BlockingIOError(OSError): + characters_written: int + class ChildProcessError(OSError): ... + class ConnectionError(OSError): ... + class BrokenPipeError(ConnectionError): ... + class ConnectionAbortedError(ConnectionError): ... + class ConnectionRefusedError(ConnectionError): ... + class ConnectionResetError(ConnectionError): ... + class FileExistsError(OSError): ... + class FileNotFoundError(OSError): ... + class InterruptedError(OSError): ... + class IsADirectoryError(OSError): ... + class NotADirectoryError(OSError): ... + class PermissionError(OSError): ... + class ProcessLookupError(OSError): ... + class TimeoutError(OSError): ... + +class NotImplementedError(RuntimeError): ... +if sys.version_info >= (3, 5): + class RecursionError(RuntimeError): ... + +class IndentationError(SyntaxError): ... +class TabError(IndentationError): ... + +class UnicodeError(ValueError): ... +class UnicodeDecodeError(UnicodeError): + encoding: str + object: bytes + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: bytes, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeEncodeError(UnicodeError): + encoding: str + object: Text + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: Text, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeTranslateError(UnicodeError): ... + +class Warning(Exception): ... +class UserWarning(Warning): ... +class DeprecationWarning(Warning): ... +class SyntaxWarning(Warning): ... +class RuntimeWarning(Warning): ... +class FutureWarning(Warning): ... +class PendingDeprecationWarning(Warning): ... +class ImportWarning(Warning): ... +class UnicodeWarning(Warning): ... +class BytesWarning(Warning): ... +if sys.version_info >= (3, 2): + class ResourceWarning(Warning): ... + +if sys.version_info < (3,): + class file(BinaryIO): + @overload + def __init__(self, file: str, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: unicode, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: int, mode: str = ..., buffering: int = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def __enter__(self) -> BinaryIO: ... + def __exit__(self, t: Optional[type] = ..., exc: Optional[BaseException] = ..., tb: Optional[Any] = ...) -> bool: ... + def flush(self) -> None: ... + def fileno(self) -> int: ... + def isatty(self) -> bool: ... + def close(self) -> None: ... + + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def write(self, data: str) -> int: ... + def writelines(self, data: Iterable[str]) -> None: ... + def truncate(self, pos: Optional[int] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi new file mode 100644 index 0000000..2cb329c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi @@ -0,0 +1,48 @@ +import io +import sys +from typing import Any, IO, Optional, Union + +if sys.version_info >= (3, 6): + from os import PathLike + _PathOrFile = Union[str, bytes, IO[Any], PathLike[Any]] +elif sys.version_info >= (3, 3): + _PathOrFile = Union[str, bytes, IO[Any]] +else: + _PathOrFile = str + +def compress(data: bytes, compresslevel: int = ...) -> bytes: ... +def decompress(data: bytes) -> bytes: ... + +if sys.version_info >= (3, 3): + def open(filename: _PathOrFile, + mode: str = ..., + compresslevel: int = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + +class BZ2File(io.BufferedIOBase, IO[bytes]): # type: ignore # python/mypy#5027 + def __init__(self, + filename: _PathOrFile, + mode: str = ..., + buffering: Optional[Any] = ..., + compresslevel: int = ...) -> None: ... + +class BZ2Compressor(object): + def __init__(self, compresslevel: int = ...) -> None: ... + def compress(self, data: bytes) -> bytes: ... + def flush(self) -> bytes: ... + +class BZ2Decompressor(object): + if sys.version_info >= (3, 5): + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + else: + def decompress(self, data: bytes) -> bytes: ... + if sys.version_info >= (3, 3): + @property + def eof(self) -> bool: ... + if sys.version_info >= (3, 5): + @property + def needs_input(self) -> bool: ... + @property + def unused_data(self) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi new file mode 100644 index 0000000..71e25ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi @@ -0,0 +1,24 @@ +import os +import sys +from typing import Any, Callable, Dict, Optional, Text, TypeVar, Union + +def run(statement: str, filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any], filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... + +_SelfT = TypeVar('_SelfT', bound='Profile') +_T = TypeVar('_T') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Profile: + def __init__(self, custom_timer: Callable[[], float] = ..., time_unit: float = ..., subcalls: bool = ..., builtins: bool = ...) -> None: ... + def enable(self) -> None: ... + def disable(self) -> None: ... + def print_stats(self, sort: Union[str, int] = ...) -> None: ... + def dump_stats(self, file: _Path) -> None: ... + def create_stats(self) -> None: ... + def run(self: _SelfT, cmd: str) -> _SelfT: ... + def runctx(self: _SelfT, cmd: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> _SelfT: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi new file mode 100644 index 0000000..4b452cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi @@ -0,0 +1,122 @@ +import datetime +import sys +from time import struct_time +from typing import Any, Iterable, List, Optional, Sequence, Tuple, Union + + +_LocaleType = Tuple[Optional[str], Optional[str]] + +class IllegalMonthError(ValueError): + def __init__(self, month: int) -> None: ... + def __str__(self) -> str: ... + +class IllegalWeekdayError(ValueError): + def __init__(self, weekday: int) -> None: ... + def __str__(self) -> str: ... + +def isleap(year: int) -> bool: ... +def leapdays(y1: int, y2: int) -> int: ... +def weekday(year: int, month: int, day: int) -> int: ... +def monthrange(year: int, month: int) -> Tuple[int, int]: ... + +class Calendar: + def __init__(self, firstweekday: int = ...) -> None: ... + def getfirstweekday(self) -> int: ... + def setfirstweekday(self, firstweekday: int) -> None: ... + def iterweekdays(self) -> Iterable[int]: ... + def itermonthdates(self, year: int, month: int) -> Iterable[datetime.date]: ... + def itermonthdays2(self, year: int, month: int) -> Iterable[Tuple[int, int]]: ... + def itermonthdays(self, year: int, month: int) -> Iterable[int]: ... + def monthdatescalendar(self, year: int, month: int) -> List[List[datetime.date]]: ... + def monthdays2calendar(self, year: int, month: int) -> List[List[Tuple[int, int]]]: ... + def monthdayscalendar(self, year: int, month: int) -> List[List[int]]: ... + def yeardatescalendar(self, year: int, width: int = ...) -> List[List[int]]: ... + def yeardays2calendar(self, year: int, width: int = ...) -> List[List[Tuple[int, int]]]: ... + def yeardayscalendar(self, year: int, width: int = ...) -> List[List[int]]: ... + if sys.version_info >= (3, 7): + def itermonthdays3(self, year: int, month: int) -> Iterable[Tuple[int, int, int]]: ... + def itermonthdays4(self, year: int, month: int) -> Iterable[Tuple[int, int, int, int]]: ... + +class TextCalendar(Calendar): + def prweek(self, theweek: int, width: int) -> None: ... + def formatday(self, day: int, weekday: int, width: int) -> str: ... + def formatweek(self, theweek: int, width: int) -> str: ... + def formatweekday(self, day: int, width: int) -> str: ... + def formatweekheader(self, width: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = ...) -> str: ... + def prmonth(self, theyear: int, themonth: int, w: int = ..., l: int = ...) -> None: ... + def formatmonth(self, theyear: int, themonth: int, w: int = ..., l: int = ...) -> str: ... + def formatyear(self, theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> str: ... + def pryear(self, theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> None: ... + +def firstweekday() -> int: ... +def monthcalendar(year: int, month: int) -> List[List[int]]: ... +def prweek(theweek: int, width: int) -> None: ... +def week(theweek: int, width: int) -> str: ... +def weekheader(width: int) -> str: ... +def prmonth(theyear: int, themonth: int, w: int = ..., l: int = ...) -> None: ... +def month(theyear: int, themonth: int, w: int = ..., l: int = ...) -> str: ... +def calendar(theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> str: ... +def prcal(theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> None: ... + +class HTMLCalendar(Calendar): + def formatday(self, day: int, weekday: int) -> str: ... + def formatweek(self, theweek: int) -> str: ... + def formatweekday(self, day: int) -> str: ... + def formatweekheader(self) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + def formatmonth(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + def formatyear(self, theyear: int, width: int = ...) -> str: ... + def formatyearpage(self, theyear: int, width: int = ..., css: Optional[str] = ..., encoding: Optional[str] = ...) -> str: ... + if sys.version_info >= (3, 7): + cssclasses: List[str] + cssclass_noday: str + cssclasses_weekday_head: List[str] + cssclass_month_head: str + cssclass_month: str + cssclass_year: str + cssclass_year_head: str + +if sys.version_info < (3, 0): + class TimeEncoding: + def __init__(self, locale: _LocaleType) -> None: ... + def __enter__(self) -> _LocaleType: ... + def __exit__(self, *args: Any) -> None: ... +else: + class different_locale: + def __init__(self, locale: _LocaleType) -> None: ... + def __enter__(self) -> _LocaleType: ... + def __exit__(self, *args: Any) -> None: ... + +class LocaleTextCalendar(TextCalendar): + def __init__(self, firstweekday: int = ..., locale: Optional[_LocaleType] = ...) -> None: ... + def formatweekday(self, day: int, width: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = ...) -> str: ... + +class LocaleHTMLCalendar(HTMLCalendar): + def __init__(self, firstweekday: int = ..., locale: Optional[_LocaleType] = ...) -> None: ... + def formatweekday(self, day: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + +c: TextCalendar +def setfirstweekday(firstweekday: int) -> None: ... +def format(cols: int, colwidth: int = ..., spacing: int = ...) -> str: ... +def formatstring(cols: int, colwidth: int = ..., spacing: int = ...) -> str: ... +def timegm(tuple: Union[Tuple[int, ...], struct_time]) -> int: ... + +# Data attributes +day_name: Sequence[str] +day_abbr: Sequence[str] +month_name: Sequence[str] +month_abbr: Sequence[str] + +# Below constants are not in docs or __all__, but enough people have used them +# they are now effectively public. + +MONDAY: int +TUESDAY: int +WEDNESDAY: int +THURSDAY: int +FRIDAY: int +SATURDAY: int +SUNDAY: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi new file mode 100644 index 0000000..02979c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi @@ -0,0 +1,122 @@ +import sys +from typing import Any, AnyStr, Dict, IO, Iterable, List, Mapping, Optional, Tuple, TypeVar, Union + +_T = TypeVar('_T', bound=FieldStorage) + +def parse(fp: IO[Any] = ..., environ: Mapping[str, str] = ..., + keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +def parse_qs(qs: str, keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +def parse_qsl(qs: str, keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +if sys.version_info >= (3, 7): + def parse_multipart(fp: IO[Any], pdict: Mapping[str, bytes], encoding: str = ..., errors: str = ...) -> Dict[str, List[Any]]: ... +else: + def parse_multipart(fp: IO[Any], pdict: Mapping[str, bytes]) -> Dict[str, List[bytes]]: ... +def parse_header(s: str) -> Tuple[str, Dict[str, str]]: ... +def test(environ: Mapping[str, str] = ...) -> None: ... +def print_environ(environ: Mapping[str, str] = ...) -> None: ... +def print_form(form: Dict[str, Any]) -> None: ... +def print_directory() -> None: ... +def print_environ_usage() -> None: ... +if sys.version_info >= (3, 0): + def escape(s: str, quote: bool = ...) -> str: ... +else: + def escape(s: AnyStr, quote: bool = ...) -> AnyStr: ... + + +class MiniFieldStorage: + # The first five "Any" attributes here are always None, but mypy doesn't support that + filename: Any + list: Any + type: Any + file: Optional[IO[bytes]] + type_options: Dict[Any, Any] + disposition: Any + disposition_options: Dict[Any, Any] + headers: Dict[Any, Any] + name: Any + value: Any + + def __init__(self, name: Any, value: Any) -> None: ... + def __repr__(self) -> str: ... + + +class FieldStorage(object): + FieldStorageClass: Optional[type] + keep_blank_values: int + strict_parsing: int + qs_on_post: Optional[str] + headers: Mapping[str, str] + fp: IO[bytes] + encoding: str + errors: str + outerboundary: bytes + bytes_read: int + limit: Optional[int] + disposition: str + disposition_options: Dict[str, str] + filename: Optional[str] + file: Optional[IO[bytes]] + type: str + type_options: Dict[str, str] + innerboundary: bytes + length: int + done: int + list: Optional[List[Any]] + value: Union[None, bytes, List[Any]] + + if sys.version_info >= (3, 0): + def __init__(self, fp: IO[Any] = ..., headers: Mapping[str, str] = ..., outerboundary: bytes = ..., + environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ..., + limit: int = ..., encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, fp: IO[Any] = ..., headers: Mapping[str, str] = ..., outerboundary: bytes = ..., + environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ...) -> None: ... + + if sys.version_info >= (3, 0): + def __enter__(self: _T) -> _T: ... + def __exit__(self, *args: Any) -> None: ... + def __repr__(self) -> str: ... + def __iter__(self) -> Iterable[str]: ... + def __getitem__(self, key: str) -> Any: ... + def getvalue(self, key: str, default: Any = ...) -> Any: ... + def getfirst(self, key: str, default: Any = ...) -> Any: ... + def getlist(self, key: str) -> List[Any]: ... + def keys(self) -> List[str]: ... + if sys.version_info < (3, 0): + def has_key(self, key: str) -> bool: ... + def __contains__(self, key: str) -> bool: ... + def __len__(self) -> int: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + if sys.version_info >= (3, 0): + # In Python 3 it returns bytes or str IO depending on an internal flag + def make_file(self) -> IO[Any]: ... + else: + # In Python 2 it always returns bytes and ignores the "binary" flag + def make_file(self, binary: Any = ...) -> IO[bytes]: ... + + +if sys.version_info < (3, 0): + from UserDict import UserDict + + class FormContentDict(UserDict): + query_string: str + def __init__(self, environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ...) -> None: ... + + class SvFormContentDict(FormContentDict): + def getlist(self, key: Any) -> Any: ... + + class InterpFormContentDict(SvFormContentDict): ... + + class FormContent(FormContentDict): + # TODO this should have + # def values(self, key: Any) -> Any: ... + # but this is incompatible with the supertype, and adding '# type: ignore' triggers + # a parse error in pytype (https://github.com/google/pytype/issues/53) + def indexed_value(self, key: Any, location: int) -> Any: ... + def value(self, key: Any) -> Any: ... + def length(self, key: Any) -> int: ... + def stripped(self, key: Any) -> Any: ... + def pars(self) -> Dict[Any, Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi new file mode 100644 index 0000000..2337f00 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi @@ -0,0 +1,23 @@ +# Source(py2): https://hg.python.org/cpython/file/2.7/Lib/chunk.py +# Source(py3): https://github.com/python/cpython/blob/master/Lib/chunk.py + +from typing import IO + +class Chunk: + closed: bool + align: bool + file: IO[bytes] + chunkname: bytes + chunksize: int + size_read: int + offset: int + seekable: bool + def __init__(self, file: IO[bytes], align: bool = ..., bigendian: bool = ..., inclheader: bool = ...) -> None: ... + def getname(self) -> bytes: ... + def getsize(self) -> int: ... + def close(self) -> None: ... + def isatty(self) -> bool: ... + def seek(self, pos: int, whence: int = ...) -> None: ... + def tell(self) -> int: ... + def read(self, size: int = ...) -> bytes: ... + def skip(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi new file mode 100644 index 0000000..4b15f0b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi @@ -0,0 +1,42 @@ +"""Stub file for the 'cmath' module.""" + +import sys +from typing import SupportsComplex, SupportsFloat, Tuple, Union + +e: float +pi: float +if sys.version_info >= (3, 6): + inf: float + infj: complex + nan: float + nanj: complex + tau: float + +_C = Union[SupportsFloat, SupportsComplex] + +def acos(x: _C) -> complex: ... +def acosh(x: _C) -> complex: ... +def asin(x: _C) -> complex: ... +def asinh(x: _C) -> complex: ... +def atan(x: _C) -> complex: ... +def atanh(x: _C) -> complex: ... +def cos(x: _C) -> complex: ... +def cosh(x: _C) -> complex: ... +def exp(x: _C) -> complex: ... +if sys.version_info >= (3, 5): + def isclose(a: _C, b: _C, *, rel_tol: SupportsFloat = ..., abs_tol: SupportsFloat = ...) -> bool: ... +def isinf(z: _C) -> bool: ... +def isnan(z: _C) -> bool: ... +def log(x: _C, base: _C = ...) -> complex: ... +def log10(x: _C) -> complex: ... +def phase(z: _C) -> float: ... +def polar(z: _C) -> Tuple[float, float]: ... +def rect(r: float, phi: float) -> complex: ... +def sin(x: _C) -> complex: ... +def sinh(x: _C) -> complex: ... +def sqrt(x: _C) -> complex: ... +def tan(x: _C) -> complex: ... +def tanh(x: _C) -> complex: ... + +if sys.version_info >= (3,): + def isfinite(z: _C) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi new file mode 100644 index 0000000..c2aeb75 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi @@ -0,0 +1,41 @@ +# Stubs for cmd (Python 2/3) + +from typing import Any, Optional, Text, IO, List, Callable, Tuple + +class Cmd: + prompt: str + identchars: str + ruler: str + lastcmd: str + intro: Optional[Any] + doc_leader: str + doc_header: str + misc_header: str + undoc_header: str + nohelp: str + use_rawinput: bool + stdin: IO[str] + stdout: IO[str] + cmdqueue: List[str] + completekey: str + def __init__(self, completekey: str = ..., stdin: Optional[IO[str]] = ..., stdout: Optional[IO[str]] = ...) -> None: ... + old_completer: Optional[Callable[[str, int], Optional[str]]] + def cmdloop(self, intro: Optional[Any] = ...) -> None: ... + def precmd(self, line: str) -> str: ... + def postcmd(self, stop: bool, line: str) -> bool: ... + def preloop(self) -> None: ... + def postloop(self) -> None: ... + def parseline(self, line: str) -> Tuple[Optional[str], Optional[str], str]: ... + def onecmd(self, line: str) -> bool: ... + def emptyline(self) -> bool: ... + def default(self, line: str) -> bool: ... + def completedefault(self, *ignored: Any) -> List[str]: ... + def completenames(self, text: str, *ignored: Any) -> List[str]: ... + completion_matches: Optional[List[str]] + def complete(self, text: str, state: int) -> Optional[List[str]]: ... + def get_names(self) -> List[str]: ... + # Only the first element of args matters. + def complete_help(self, *args: Any) -> List[str]: ... + def do_help(self, arg: Optional[str]) -> None: ... + def print_topics(self, header: str, cmds: Optional[List[str]], cmdlen: Any, maxcol: int) -> None: ... + def columnize(self, list: Optional[List[str]], displaywidth: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/code.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/code.pyi new file mode 100644 index 0000000..293ab9b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/code.pyi @@ -0,0 +1,38 @@ +# Stubs for code + +import sys +from typing import Any, Callable, Mapping, Optional +from types import CodeType + +class InteractiveInterpreter: + def __init__(self, locals: Optional[Mapping[str, Any]] = ...) -> None: ... + def runsource(self, source: str, filename: str = ..., + symbol: str = ...) -> bool: ... + def runcode(self, code: CodeType) -> None: ... + def showsyntaxerror(self, filename: Optional[str] = ...) -> None: ... + def showtraceback(self) -> None: ... + def write(self, data: str) -> None: ... + +class InteractiveConsole(InteractiveInterpreter): + def __init__(self, locals: Optional[Mapping[str, Any]] = ..., + filename: str = ...) -> None: ... + if sys.version_info >= (3, 6): + def interact(self, banner: Optional[str] = ..., + exitmsg: Optional[str] = ...) -> None: ... + else: + def interact(self, banner: Optional[str] = ...) -> None: ... + def push(self, line: str) -> bool: ... + def resetbuffer(self) -> None: ... + def raw_input(self, prompt: str = ...) -> str: ... + +if sys.version_info >= (3, 6): + def interact(banner: Optional[str] = ..., + readfunc: Optional[Callable[[str], str]] = ..., + local: Optional[Mapping[str, Any]] = ..., + exitmsg: Optional[str] = ...) -> None: ... +else: + def interact(banner: Optional[str] = ..., + readfunc: Optional[Callable[[str], str]] = ..., + local: Optional[Mapping[str, Any]] = ...) -> None: ... +def compile_command(source: str, filename: str = ..., + symbol: str = ...) -> Optional[CodeType]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi new file mode 100644 index 0000000..b99ce91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi @@ -0,0 +1,242 @@ +import sys +from typing import Any, BinaryIO, Callable, Generator, IO, Iterable, Iterator, List, Optional, Protocol, Text, TextIO, Tuple, Type, TypeVar, Union + +from abc import abstractmethod +import types + +# TODO: this only satisfies the most common interface, where +# bytes (py2 str) is the raw form and str (py2 unicode) is the cooked form. +# In the long run, both should become template parameters maybe? +# There *are* bytes->bytes and str->str encodings in the standard library. +# They are much more common in Python 2 than in Python 3. + +_Decoded = Text +_Encoded = bytes + +class _Encoder(Protocol): + def __call__(self, input: _Decoded, errors: str = ...) -> Tuple[_Encoded, int]: ... # signature of Codec().encode +class _Decoder(Protocol): + def __call__(self, input: _Encoded, errors: str = ...) -> Tuple[_Decoded, int]: ... # signature of Codec().decode + +class _StreamReader(Protocol): + def __call__(self, stream: IO[_Encoded], errors: str = ...) -> StreamReader: ... +class _StreamWriter(Protocol): + def __call__(self, stream: IO[_Encoded], errors: str = ...) -> StreamWriter: ... + +class _IncrementalEncoder(Protocol): + def __call__(self, errors: str = ...) -> IncrementalEncoder: ... +class _IncrementalDecoder(Protocol): + def __call__(self, errors: str = ...) -> IncrementalDecoder: ... + +def encode(obj: _Decoded, encoding: str = ..., errors: str = ...) -> _Encoded: ... +def decode(obj: _Encoded, encoding: str = ..., errors: str = ...) -> _Decoded: ... +def lookup(encoding: str) -> CodecInfo: ... + +class CodecInfo(Tuple[_Encoder, _Decoder, _StreamReader, _StreamWriter]): + @property + def encode(self) -> _Encoder: ... + @property + def decode(self) -> _Decoder: ... + @property + def streamreader(self) -> _StreamReader: ... + @property + def streamwriter(self) -> _StreamWriter: ... + @property + def incrementalencoder(self) -> _IncrementalEncoder: ... + @property + def incrementaldecoder(self) -> _IncrementalDecoder: ... + name: str + def __init__( + self, + encode: _Encoder, + decode: _Decoder, + streamreader: _StreamReader = ..., + streamwriter: _StreamWriter = ..., + incrementalencoder: _IncrementalEncoder = ..., + incrementaldecoder: _IncrementalDecoder = ..., + name: str = ..., + ) -> None: ... + +def getencoder(encoding: str) -> _Encoder: ... +def getdecoder(encoding: str) -> _Decoder: ... +def getincrementalencoder(encoding: str) -> _IncrementalEncoder: ... +def getincrementaldecoder(encoding: str) -> _IncrementalDecoder: ... +def getreader(encoding: str) -> _StreamReader: ... +def getwriter(encoding: str) -> _StreamWriter: ... +def register(search_function: Callable[[str], CodecInfo]) -> None: ... +def open(filename: str, mode: str = ..., encoding: str = ..., errors: str = ..., buffering: int = ...) -> StreamReaderWriter: ... +def EncodedFile(file: IO[_Encoded], data_encoding: str, file_encoding: str = ..., errors: str = ...) -> StreamRecoder: ... +def iterencode(iterator: Iterable[_Decoded], encoding: str, errors: str = ...) -> Generator[_Encoded, None, None]: ... +def iterdecode(iterator: Iterable[_Encoded], encoding: str, errors: str = ...) -> Generator[_Decoded, None, None]: ... + +BOM: bytes +BOM_BE: bytes +BOM_LE: bytes +BOM_UTF8: bytes +BOM_UTF16: bytes +BOM_UTF16_BE: bytes +BOM_UTF16_LE: bytes +BOM_UTF32: bytes +BOM_UTF32_BE: bytes +BOM_UTF32_LE: bytes + +# It is expected that different actions be taken depending on which of the +# three subclasses of `UnicodeError` is actually ...ed. However, the Union +# is still needed for at least one of the cases. +def register_error(name: str, error_handler: Callable[[UnicodeError], Tuple[Union[str, bytes], int]]) -> None: ... +def lookup_error(name: str) -> Callable[[UnicodeError], Tuple[Union[str, bytes], int]]: ... +def strict_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def replace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def ignore_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def xmlcharrefreplace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def backslashreplace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... + +class Codec: + # These are sort of @abstractmethod but sort of not. + # The StreamReader and StreamWriter subclasses only implement one. + def encode(self, input: _Decoded, errors: str = ...) -> Tuple[_Encoded, int]: ... + def decode(self, input: _Encoded, errors: str = ...) -> Tuple[_Decoded, int]: ... + +class IncrementalEncoder: + errors: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def encode(self, object: _Decoded, final: bool = ...) -> _Encoded: ... + def reset(self) -> None: ... + # documentation says int but str is needed for the subclass. + def getstate(self) -> Union[int, _Decoded]: ... + def setstate(self, state: Union[int, _Decoded]) -> None: ... + +class IncrementalDecoder: + errors: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def decode(self, object: _Encoded, final: bool = ...) -> _Decoded: ... + def reset(self) -> None: ... + def getstate(self) -> Tuple[_Encoded, int]: ... + def setstate(self, state: Tuple[_Encoded, int]) -> None: ... + +# These are not documented but used in encodings/*.py implementations. +class BufferedIncrementalEncoder(IncrementalEncoder): + buffer: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def _buffer_encode(self, input: _Decoded, errors: str, final: bool) -> _Encoded: ... + def encode(self, input: _Decoded, final: bool = ...) -> _Encoded: ... + +class BufferedIncrementalDecoder(IncrementalDecoder): + buffer: bytes + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def _buffer_decode(self, input: _Encoded, errors: str, final: bool) -> Tuple[_Decoded, int]: ... + def decode(self, object: _Encoded, final: bool = ...) -> _Decoded: ... + +_SW = TypeVar("_SW", bound=StreamWriter) + +# TODO: it is not possible to specify the requirement that all other +# attributes and methods are passed-through from the stream. +class StreamWriter(Codec): + errors: str + def __init__(self, stream: IO[_Encoded], errors: str = ...) -> None: ... + def write(self, obj: _Decoded) -> None: ... + def writelines(self, list: Iterable[_Decoded]) -> None: ... + def reset(self) -> None: ... + def __enter__(self: _SW) -> _SW: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +_SR = TypeVar("_SR", bound=StreamReader) + +class StreamReader(Codec): + errors: str + def __init__(self, stream: IO[_Encoded], errors: str = ...) -> None: ... + def read(self, size: int = ..., chars: int = ..., firstline: bool = ...) -> _Decoded: ... + def readline(self, size: int = ..., keepends: bool = ...) -> _Decoded: ... + def readlines(self, sizehint: int = ..., keepends: bool = ...) -> List[_Decoded]: ... + def reset(self) -> None: ... + def __enter__(self: _SR) -> _SR: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> None: ... + def __iter__(self) -> Iterator[_Decoded]: ... + def __getattr__(self, name: str) -> Any: ... + +_T = TypeVar("_T", bound=StreamReaderWriter) + +# Doesn't actually inherit from TextIO, but wraps a BinaryIO to provide text reading and writing +# and delegates attributes to the underlying binary stream with __getattr__. +class StreamReaderWriter(TextIO): + def __init__(self, stream: IO[_Encoded], Reader: _StreamReader, Writer: _StreamWriter, errors: str = ...) -> None: ... + def read(self, size: int = ...) -> _Decoded: ... + def readline(self, size: Optional[int] = ...) -> _Decoded: ... + def readlines(self, sizehint: Optional[int] = ...) -> List[_Decoded]: ... + if sys.version_info >= (3,): + def __next__(self) -> Text: ... + else: + def next(self) -> Text: ... + def __iter__(self: _T) -> _T: ... + # This actually returns None, but that's incompatible with the supertype + def write(self, data: _Decoded) -> int: ... + def writelines(self, list: Iterable[_Decoded]) -> None: ... + def reset(self) -> None: ... + # Same as write() + def seek(self, offset: int, whence: int = ...) -> int: ... + def __enter__(self: _T) -> _T: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> bool: ... + def __getattr__(self, name: str) -> Any: ... + # These methods don't actually exist directly, but they are needed to satisfy the TextIO + # interface. At runtime, they are delegated through __getattr__. + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def writable(self) -> bool: ... + +_SRT = TypeVar("_SRT", bound=StreamRecoder) + +class StreamRecoder(BinaryIO): + def __init__( + self, + stream: IO[_Encoded], + encode: _Encoder, + decode: _Decoder, + Reader: _StreamReader, + Writer: _StreamWriter, + errors: str = ..., + ) -> None: ... + def read(self, size: int = ...) -> bytes: ... + def readline(self, size: Optional[int] = ...) -> bytes: ... + def readlines(self, sizehint: Optional[int] = ...) -> List[bytes]: ... + if sys.version_info >= (3,): + def __next__(self) -> bytes: ... + else: + def next(self) -> bytes: ... + def __iter__(self: _SRT) -> _SRT: ... + def write(self, data: bytes) -> int: ... + def writelines(self, list: Iterable[bytes]) -> int: ... # type: ignore # it's supposed to return None + def reset(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __enter__(self: _SRT) -> _SRT: ... + def __exit__( + self, type: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> bool: ... + # These methods don't actually exist directly, but they are needed to satisfy the BinaryIO + # interface. At runtime, they are delegated through __getattr__. + def seek(self, offset: int, whence: int = ...) -> int: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def writable(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi new file mode 100644 index 0000000..0e1129e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi @@ -0,0 +1,17 @@ +# Source(py2): https://hg.python.org/cpython/file/2.7/Lib/codeop.py +# Source(py3): https://github.com/python/cpython/blob/master/Lib/codeop.py + +from types import CodeType +from typing import Optional + +def compile_command(source: str, filename: str = ..., symbol: str = ...) -> Optional[CodeType]: ... + +class Compile: + flags: int + def __init__(self) -> None: ... + def __call__(self, source: str, filename: str, symbol: str) -> CodeType: ... + +class CommandCompiler: + compiler: Compile + def __init__(self) -> None: ... + def __call__(self, source: str, filename: str = ..., symbol: str = ...) -> Optional[CodeType]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi new file mode 100644 index 0000000..c8b5591 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi @@ -0,0 +1,15 @@ +# Stubs for colorsys + +from typing import Tuple + +def rgb_to_yiq(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def yiq_to_rgb(y: float, i: float, q: float) -> Tuple[float, float, float]: ... +def rgb_to_hls(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def hls_to_rgb(h: float, l: float, s: float) -> Tuple[float, float, float]: ... +def rgb_to_hsv(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def hsv_to_rgb(h: float, s: float, v: float) -> Tuple[float, float, float]: ... + +# TODO undocumented +ONE_SIXTH: float +ONE_THIRD: float +TWO_THIRD: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi new file mode 100644 index 0000000..dec1b41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi @@ -0,0 +1,99 @@ +# Stubs for contextlib + +from typing import ( + Any, Callable, Generator, IO, Iterable, Iterator, Optional, Type, + Generic, TypeVar, overload +) +from types import TracebackType +import sys +# Aliased here for backwards compatibility; TODO eventually remove this +from typing import ContextManager as ContextManager + +if sys.version_info >= (3, 5): + from typing import AsyncContextManager, AsyncIterator + +if sys.version_info >= (3, 6): + from typing import ContextManager as AbstractContextManager +if sys.version_info >= (3, 7): + from typing import AsyncContextManager as AbstractAsyncContextManager + +_T = TypeVar('_T') + +_ExitFunc = Callable[[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]], bool] +_CM_EF = TypeVar('_CM_EF', ContextManager, _ExitFunc) + +if sys.version_info >= (3, 2): + class GeneratorContextManager(ContextManager[_T], Generic[_T]): + def __call__(self, func: Callable[..., _T]) -> Callable[..., _T]: ... + def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., GeneratorContextManager[_T]]: ... +else: + def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., ContextManager[_T]]: ... + +if sys.version_info >= (3, 7): + def asynccontextmanager(func: Callable[..., AsyncIterator[_T]]) -> Callable[..., AsyncContextManager[_T]]: ... + +if sys.version_info < (3,): + def nested(*mgr: ContextManager[Any]) -> ContextManager[Iterable[Any]]: ... + +class closing(ContextManager[_T], Generic[_T]): + def __init__(self, thing: _T) -> None: ... + +if sys.version_info >= (3, 4): + class suppress(ContextManager[None]): + def __init__(self, *exceptions: Type[BaseException]) -> None: ... + + class redirect_stdout(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3, 5): + class redirect_stderr(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3,): + class ContextDecorator: + def __call__(self, func: Callable[..., None]) -> Callable[..., ContextManager[None]]: ... + + _U = TypeVar('_U', bound='ExitStack') + + class ExitStack(ContextManager[ExitStack]): + def __init__(self) -> None: ... + def enter_context(self, cm: ContextManager[_T]) -> _T: ... + def push(self, exit: _CM_EF) -> _CM_EF: ... + def callback(self, callback: Callable[..., Any], + *args: Any, **kwds: Any) -> Callable[..., Any]: ... + def pop_all(self: _U) -> _U: ... + def close(self) -> None: ... + def __enter__(self: _U) -> _U: ... + +if sys.version_info >= (3, 7): + from typing import Awaitable + + _S = TypeVar('_S', bound='AsyncExitStack') + + _ExitCoroFunc = Callable[[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]], Awaitable[bool]] + _CallbackCoroFunc = Callable[..., Awaitable[Any]] + _ACM_EF = TypeVar('_ACM_EF', AsyncContextManager, _ExitCoroFunc) + + class AsyncExitStack(AsyncContextManager[AsyncExitStack]): + def __init__(self) -> None: ... + def enter_context(self, cm: ContextManager[_T]) -> _T: ... + def enter_async_context(self, cm: AsyncContextManager[_T]) -> Awaitable[_T]: ... + def push(self, exit: _CM_EF) -> _CM_EF: ... + def push_async_exit(self, exit: _ACM_EF) -> _ACM_EF: ... + def callback(self, callback: Callable[..., Any], + *args: Any, **kwds: Any) -> Callable[..., Any]: ... + def push_async_callback(self, callback: _CallbackCoroFunc, + *args: Any, **kwds: Any) -> _CallbackCoroFunc: ... + def pop_all(self: _S) -> _S: ... + def aclose(self) -> Awaitable[None]: ... + def __aenter__(self: _S) -> Awaitable[_S]: ... + +if sys.version_info >= (3, 7): + @overload + def nullcontext(enter_result: _T) -> ContextManager[_T]: ... + @overload + def nullcontext() -> ContextManager[None]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/copy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/copy.pyi new file mode 100644 index 0000000..523802a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/copy.pyi @@ -0,0 +1,14 @@ +# Stubs for copy + +from typing import TypeVar, Optional, Dict, Any + +_T = TypeVar('_T') + +# None in CPython but non-None in Jython +PyStringMap: Any + +# Note: memo and _nil are internal kwargs. +def deepcopy(x: _T, memo: Optional[Dict[int, _T]] = ..., _nil: Any = ...) -> _T: ... +def copy(x: _T) -> _T: ... +class Error(Exception): ... +error = Error diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi new file mode 100644 index 0000000..d55fc26 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi @@ -0,0 +1,23 @@ +import sys +from typing import List, NamedTuple, Optional, Union + + +if sys.version_info >= (3, 3): + class _Method: ... + + METHOD_CRYPT: _Method + METHOD_MD5: _Method + METHOD_SHA256: _Method + METHOD_SHA512: _Method + if sys.version_info >= (3, 7): + METHOD_BLOWFISH: _Method + + methods: List[_Method] + + if sys.version_info >= (3, 7): + def mksalt(method: Optional[_Method] = ..., *, rounds: Optional[int] = ...) -> str: ... + else: + def mksalt(method: Optional[_Method] = ...) -> str: ... + def crypt(word: str, salt: Optional[Union[str, _Method]] = ...) -> str: ... +else: + def crypt(word: str, salt: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/csv.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/csv.pyi new file mode 100644 index 0000000..0a04951 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/csv.pyi @@ -0,0 +1,93 @@ +from collections import OrderedDict +import sys +from typing import Any, Dict, Iterable, Iterator, List, Mapping, Optional, Sequence, Union + +from _csv import (_reader, + _writer, + reader as reader, + writer as writer, + register_dialect as register_dialect, + unregister_dialect as unregister_dialect, + get_dialect as get_dialect, + list_dialects as list_dialects, + field_size_limit as field_size_limit, + QUOTE_ALL as QUOTE_ALL, + QUOTE_MINIMAL as QUOTE_MINIMAL, + QUOTE_NONE as QUOTE_NONE, + QUOTE_NONNUMERIC as QUOTE_NONNUMERIC, + Error as Error, + ) + +_Dialect = Union[str, Dialect] +_DictRow = Mapping[str, Any] + +class Dialect(object): + delimiter: str + quotechar: Optional[str] + escapechar: Optional[str] + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + def __init__(self) -> None: ... + +class excel(Dialect): + delimiter: str + quotechar: str + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + +class excel_tab(excel): + delimiter: str + +if sys.version_info >= (3,): + class unix_dialect(Dialect): + delimiter: str + quotechar: str + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + +if sys.version_info >= (3, 6): + _DRMapping = OrderedDict[str, str] +else: + _DRMapping = Dict[str, str] + + +class DictReader(Iterator[_DRMapping]): + restkey: Optional[str] + restval: Optional[str] + reader: _reader + dialect: _Dialect + line_num: int + fieldnames: Sequence[str] + def __init__(self, f: Iterable[str], fieldnames: Sequence[str] = ..., + restkey: Optional[str] = ..., restval: Optional[str] = ..., dialect: _Dialect = ..., + *args: Any, **kwds: Any) -> None: ... + def __iter__(self) -> DictReader: ... + if sys.version_info >= (3,): + def __next__(self) -> _DRMapping: ... + else: + def next(self) -> _DRMapping: ... + + +class DictWriter(object): + fieldnames: Sequence[str] + restval: Optional[Any] + extrasaction: str + writer: _writer + def __init__(self, f: Any, fieldnames: Sequence[str], + restval: Optional[Any] = ..., extrasaction: str = ..., dialect: _Dialect = ..., + *args: Any, **kwds: Any) -> None: ... + def writeheader(self) -> None: ... + def writerow(self, rowdict: _DictRow) -> None: ... + def writerows(self, rowdicts: Iterable[_DictRow]) -> None: ... + +class Sniffer(object): + preferred: List[str] + def __init__(self) -> None: ... + def sniff(self, sample: str, delimiters: Optional[str] = ...) -> Dialect: ... + def has_header(self, sample: str) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi new file mode 100644 index 0000000..e4cd6b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi @@ -0,0 +1,285 @@ +# Stubs for ctypes + +from array import array +from typing import ( + Any, Callable, ClassVar, Iterator, Iterable, List, Mapping, Optional, Sequence, Sized, Text, + Tuple, Type, Generic, TypeVar, overload, +) +from typing import Union as _UnionT +import sys + +_T = TypeVar('_T') +_DLLT = TypeVar('_DLLT', bound=CDLL) +_CT = TypeVar('_CT', bound=_CData) + + +RTLD_GLOBAL: int = ... +RTLD_LOCAL: int = ... +DEFAULT_MODE: int = ... + + +class CDLL(object): + _func_flags_: ClassVar[int] = ... + _func_restype_: ClassVar[_CData] = ... + _name: str = ... + _handle: int = ... + _FuncPtr: Type[_FuncPointer] = ... + def __init__(self, name: str, mode: int = ..., handle: Optional[int] = ..., + use_errno: bool = ..., use_last_error: bool = ...) -> None: ... + def __getattr__(self, name: str) -> _FuncPointer: ... + def __getitem__(self, name: str) -> _FuncPointer: ... +if sys.platform == 'win32': + class OleDLL(CDLL): ... + class WinDLL(CDLL): ... +class PyDLL(CDLL): ... + +class LibraryLoader(Generic[_DLLT]): + def __init__(self, dlltype: Type[_DLLT]) -> None: ... + def __getattr__(self, name: str) -> _DLLT: ... + def __getitem__(self, name: str) -> _DLLT: ... + def LoadLibrary(self, name: str) -> _DLLT: ... + +cdll: LibraryLoader[CDLL] = ... +if sys.platform == 'win32': + windll: LibraryLoader[WinDLL] = ... + oledll: LibraryLoader[OleDLL] = ... +pydll: LibraryLoader[PyDLL] = ... +pythonapi: PyDLL = ... + +# Anything that implements the read-write buffer interface. +# The buffer interface is defined purely on the C level, so we cannot define a normal Protocol +# for it. Instead we have to list the most common stdlib buffer classes in a Union. +_WritableBuffer = _UnionT[bytearray, memoryview, array, _CData] +# Same as _WritableBuffer, but also includes read-only buffer types (like bytes). +_ReadOnlyBuffer = _UnionT[_WritableBuffer, bytes] + +class _CDataMeta(type): + # By default mypy complains about the following two methods, because strictly speaking cls + # might not be a Type[_CT]. However this can never actually happen, because the only class that + # uses _CDataMeta as its metaclass is _CData. So it's safe to ignore the errors here. + def __mul__(cls: Type[_CT], other: int) -> Type[Array[_CT]]: ... # type: ignore + def __rmul__(cls: Type[_CT], other: int) -> Type[Array[_CT]]: ... # type: ignore +class _CData(metaclass=_CDataMeta): + _b_base: int = ... + _b_needsfree_: bool = ... + _objects: Optional[Mapping[Any, int]] = ... + @classmethod + def from_buffer(cls: Type[_CT], source: _WritableBuffer, offset: int = ...) -> _CT: ... + @classmethod + def from_buffer_copy(cls: Type[_CT], source: _ReadOnlyBuffer, offset: int = ...) -> _CT: ... + @classmethod + def from_address(cls: Type[_CT], address: int) -> _CT: ... + @classmethod + def from_param(cls: Type[_CT], obj: Any) -> _UnionT[_CT, _CArgObject]: ... + @classmethod + def in_dll(cls: Type[_CT], library: CDLL, name: str) -> _CT: ... + +class _PointerLike(_CData): ... + +_ECT = Callable[[Optional[Type[_CData]], + _FuncPointer, + Tuple[_CData, ...]], + _CData] +_PF = _UnionT[ + Tuple[int], + Tuple[int, str], + Tuple[int, str, Any] +] +class _FuncPointer(_PointerLike, _CData): + restype: _UnionT[Type[_CData], Callable[[int], None], None] = ... + argtypes: Sequence[Type[_CData]] = ... + errcheck: _ECT = ... + @overload + def __init__(self, address: int) -> None: ... + @overload + def __init__(self, callable: Callable[..., Any]) -> None: ... + @overload + def __init__(self, func_spec: Tuple[_UnionT[str, int], CDLL], + paramflags: Tuple[_PF, ...] = ...) -> None: ... + @overload + def __init__(self, vtlb_index: int, name: str, + paramflags: Tuple[_PF, ...] = ..., + iid: pointer[c_int] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + +class ArgumentError(Exception): ... + + +def CFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData], + use_errno: bool = ..., + use_last_error: bool = ...) -> Type[_FuncPointer]: ... +if sys.platform == 'win32': + def WINFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData], + use_errno: bool = ..., + use_last_error: bool = ...) -> Type[_FuncPointer]: ... +def PYFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData]) -> Type[_FuncPointer]: ... + +class _CArgObject: ... + +# Any type that can be implicitly converted to c_void_p when passed as a C function argument. +# (bytes is not included here, see below.) +_CVoidPLike = _UnionT[_PointerLike, Array[Any], _CArgObject, int] +# Same as above, but including types known to be read-only (i. e. bytes). +# This distinction is not strictly necessary (ctypes doesn't differentiate between const +# and non-const pointers), but it catches errors like memmove(b'foo', buf, 4) +# when memmove(buf, b'foo', 4) was intended. +_CVoidConstPLike = _UnionT[_CVoidPLike, bytes] + +def addressof(obj: _CData) -> int: ... +def alignment(obj_or_type: _UnionT[_CData, Type[_CData]]) -> int: ... +def byref(obj: _CData, offset: int = ...) -> _CArgObject: ... +_PT = TypeVar('_PT', bound=_PointerLike) +def cast(obj: _UnionT[_CData, _CArgObject], type: Type[_PT]) -> _PT: ... +def create_string_buffer(init_or_size: _UnionT[int, bytes], + size: Optional[int] = ...) -> Array[c_char]: ... +c_buffer = create_string_buffer +def create_unicode_buffer(init_or_size: _UnionT[int, Text], + size: Optional[int] = ...) -> Array[c_wchar]: ... +if sys.platform == 'win32': + def DllCanUnloadNow() -> int: ... + def DllGetClassObject(rclsid: Any, riid: Any, ppv: Any) -> int: ... # TODO not documented + def FormatError(code: int) -> str: ... + def GetLastError() -> int: ... +def get_errno() -> int: ... +if sys.platform == 'win32': + def get_last_error() -> int: ... +def memmove(dst: _CVoidPLike, src: _CVoidConstPLike, count: int) -> None: ... +def memset(dst: _CVoidPLike, c: int, count: int) -> None: ... +def POINTER(type: Type[_CT]) -> Type[pointer[_CT]]: ... + +# The real ctypes.pointer is a function, not a class. The stub version of pointer behaves like +# ctypes._Pointer in that it is the base class for all pointer types. Unlike the real _Pointer, +# it can be instantiated directly (to mimic the behavior of the real pointer function). +class pointer(Generic[_CT], _PointerLike, _CData): + _type_: ClassVar[Type[_CT]] = ... + contents: _CT = ... + def __init__(self, arg: _CT = ...) -> None: ... + @overload + def __getitem__(self, i: int) -> _CT: ... + @overload + def __getitem__(self, s: slice) -> List[_CT]: ... + @overload + def __setitem__(self, i: int, o: _CT) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_CT]) -> None: ... + +def resize(obj: _CData, size: int) -> None: ... +if sys.version_info < (3,): + def set_conversion_mode(encoding: str, errors: str) -> Tuple[str, str]: ... +def set_errno(value: int) -> int: ... +if sys.platform == 'win32': + def set_last_error(value: int) -> int: ... +def sizeof(obj_or_type: _UnionT[_CData, Type[_CData]]) -> int: ... +def string_at(address: _CVoidConstPLike, size: int = ...) -> bytes: ... +if sys.platform == 'win32': + def WinError(code: Optional[int] = ..., + desc: Optional[str] = ...) -> WindowsError: ... +def wstring_at(address: _CVoidConstPLike, size: int = ...) -> str: ... + +class _SimpleCData(Generic[_T], _CData): + value: _T = ... + def __init__(self, value: _T = ...) -> None: ... + +class c_byte(_SimpleCData[int]): ... + +class c_char(_SimpleCData[bytes]): + def __init__(self, value: _UnionT[int, bytes] = ...) -> None: ... +class c_char_p(_PointerLike, _SimpleCData[Optional[bytes]]): + def __init__(self, value: Optional[_UnionT[int, bytes]] = ...) -> None: ... + +class c_double(_SimpleCData[float]): ... +class c_longdouble(_SimpleCData[float]): ... +class c_float(_SimpleCData[float]): ... + +class c_int(_SimpleCData[int]): ... +class c_int8(_SimpleCData[int]): ... +class c_int16(_SimpleCData[int]): ... +class c_int32(_SimpleCData[int]): ... +class c_int64(_SimpleCData[int]): ... + +class c_long(_SimpleCData[int]): ... +class c_longlong(_SimpleCData[int]): ... + +class c_short(_SimpleCData[int]): ... + +class c_size_t(_SimpleCData[int]): ... +class c_ssize_t(_SimpleCData[int]): ... + +class c_ubyte(_SimpleCData[int]): ... + +class c_uint(_SimpleCData[int]): ... +class c_uint8(_SimpleCData[int]): ... +class c_uint16(_SimpleCData[int]): ... +class c_uint32(_SimpleCData[int]): ... +class c_uint64(_SimpleCData[int]): ... + +class c_ulong(_SimpleCData[int]): ... +class c_ulonglong(_SimpleCData[int]): ... + +class c_ushort(_SimpleCData[int]): ... + +class c_void_p(_PointerLike, _SimpleCData[Optional[int]]): ... + +class c_wchar(_SimpleCData[Text]): ... +class c_wchar_p(_PointerLike, _SimpleCData[Optional[Text]]): + def __init__(self, value: Optional[_UnionT[int, Text]] = ...) -> None: ... + +class c_bool(_SimpleCData[bool]): + def __init__(self, value: bool) -> None: ... + +if sys.platform == 'win32': + class HRESULT(_SimpleCData[int]): ... # TODO undocumented + +class py_object(_SimpleCData[_T]): ... + +class _CField: + offset: int = ... + size: int = ... +class _StructUnionMeta(_CDataMeta): + _fields_: Sequence[_UnionT[Tuple[str, Type[_CData]], Tuple[str, Type[_CData], int]]] = ... + _pack_: int = ... + _anonymous_: Sequence[str] = ... + def __getattr__(self, name: str) -> _CField: ... +class _StructUnionBase(_CData, metaclass=_StructUnionMeta): + def __init__(self, *args: Any, **kw: Any) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + +class Union(_StructUnionBase): ... +class Structure(_StructUnionBase): ... +class BigEndianStructure(Structure): ... +class LittleEndianStructure(Structure): ... + +class Array(Generic[_CT], _CData): + _length_: ClassVar[int] = ... + _type_: ClassVar[Type[_CT]] = ... + raw: bytes = ... # Note: only available if _CT == c_char + value: Any = ... # Note: bytes if _CT == c_char, Text if _CT == c_wchar, unavailable otherwise + # TODO These methods cannot be annotated correctly at the moment. + # All of these "Any"s stand for the array's element type, but it's not possible to use _CT + # here, because of a special feature of ctypes. + # By default, when accessing an element of an Array[_CT], the returned object has type _CT. + # However, when _CT is a "simple type" like c_int, ctypes automatically "unboxes" the object + # and converts it to the corresponding Python primitive. For example, when accessing an element + # of an Array[c_int], a Python int object is returned, not a c_int. + # This behavior does *not* apply to subclasses of "simple types". + # If MyInt is a subclass of c_int, then accessing an element of an Array[MyInt] returns + # a MyInt, not an int. + # This special behavior is not easy to model in a stub, so for now all places where + # the array element type would belong are annotated with Any instead. + def __init__(self, *args: Any) -> None: ... + @overload + def __getitem__(self, i: int) -> Any: ... + @overload + def __getitem__(self, s: slice) -> List[Any]: ... + @overload + def __setitem__(self, i: int, o: Any) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[Any]) -> None: ... + def __iter__(self) -> Iterator[Any]: ... + # Can't inherit from Sized because the metaclass conflict between + # Sized and _CData prevents using _CDataMeta. + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi new file mode 100644 index 0000000..7077d9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi @@ -0,0 +1,8 @@ +# Stubs for ctypes.util + +from typing import Optional +import sys + +def find_library(name: str) -> Optional[str]: ... +if sys.platform == 'win32': + def find_msvcrt() -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi new file mode 100644 index 0000000..c5a6226 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi @@ -0,0 +1,209 @@ +from ctypes import ( + _SimpleCData, Array, Structure, c_byte, c_char, c_char_p, c_double, c_float, c_int, c_long, + c_longlong, c_short, c_uint, c_ulong, c_ulonglong, c_ushort, c_void_p, c_wchar, c_wchar_p, + pointer, +) + +BYTE = c_byte +WORD = c_ushort +DWORD = c_ulong +CHAR = c_char +WCHAR = c_wchar +UINT = c_uint +INT = c_int +DOUBLE = c_double +FLOAT = c_float +BOOLEAN = BYTE +BOOL = c_long +class VARIANT_BOOL(_SimpleCData[bool]): ... +ULONG = c_ulong +LONG = c_long +USHORT = c_ushort +SHORT = c_short +LARGE_INTEGER = c_longlong +_LARGE_INTEGER = c_longlong +ULARGE_INTEGER = c_ulonglong +_ULARGE_INTEGER = c_ulonglong + +OLESTR = c_wchar_p +LPOLESTR = c_wchar_p +LPCOLESTR = c_wchar_p +LPWSTR = c_wchar_p +LPCWSTR = c_wchar_p +LPSTR = c_char_p +LPCSTR = c_char_p +LPVOID = c_void_p +LPCVOID = c_void_p + +# These two types are pointer-sized unsigned and signed ints, respectively. +# At runtime, they are either c_[u]long or c_[u]longlong, depending on the host's pointer size +# (they are not really separate classes). +class WPARAM(_SimpleCData[int]): ... +class LPARAM(_SimpleCData[int]): ... + +ATOM = WORD +LANGID = WORD +COLORREF = DWORD +LGRPID = DWORD +LCTYPE = DWORD +LCID = DWORD + +HANDLE = c_void_p +HACCEL = HANDLE +HBITMAP = HANDLE +HBRUSH = HANDLE +HCOLORSPACE = HANDLE +HDC = HANDLE +HDESK = HANDLE +HDWP = HANDLE +HENHMETAFILE = HANDLE +HFONT = HANDLE +HGDIOBJ = HANDLE +HGLOBAL = HANDLE +HHOOK = HANDLE +HICON = HANDLE +HINSTANCE = HANDLE +HKEY = HANDLE +HKL = HANDLE +HLOCAL = HANDLE +HMENU = HANDLE +HMETAFILE = HANDLE +HMODULE = HANDLE +HMONITOR = HANDLE +HPALETTE = HANDLE +HPEN = HANDLE +HRGN = HANDLE +HRSRC = HANDLE +HSTR = HANDLE +HTASK = HANDLE +HWINSTA = HANDLE +HWND = HANDLE +SC_HANDLE = HANDLE +SERVICE_STATUS_HANDLE = HANDLE + +class RECT(Structure): + left: LONG + top: LONG + right: LONG + bottom: LONG +RECTL = RECT +_RECTL = RECT +tagRECT = RECT + +class _SMALL_RECT(Structure): + Left: SHORT + Top: SHORT + Right: SHORT + Bottom: SHORT +SMALL_RECT = _SMALL_RECT + +class _COORD(Structure): + X: SHORT + Y: SHORT + +class POINT(Structure): + x: LONG + y: LONG +POINTL = POINT +_POINTL = POINT +tagPOINT = POINT + +class SIZE(Structure): + cx: LONG + cy: LONG +SIZEL = SIZE +tagSIZE = SIZE + +def RGB(red: int, green: int, blue: int) -> int: ... + +class FILETIME(Structure): + dwLowDateTime: DWORD + dwHighDateTime: DWORD +_FILETIME = FILETIME + +class MSG(Structure): + hWnd: HWND + message: UINT + wParam: WPARAM + lParam: LPARAM + time: DWORD + pt: POINT +tagMSG = MSG +MAX_PATH: int + +class WIN32_FIND_DATAA(Structure): + dwFileAttributes: DWORD + ftCreationTime: FILETIME + ftLastAccessTime: FILETIME + ftLastWriteTime: FILETIME + nFileSizeHigh: DWORD + nFileSizeLow: DWORD + dwReserved0: DWORD + dwReserved1: DWORD + cFileName: Array[CHAR] + cAlternateFileName: Array[CHAR] + +class WIN32_FIND_DATAW(Structure): + dwFileAttributes: DWORD + ftCreationTime: FILETIME + ftLastAccessTime: FILETIME + ftLastWriteTime: FILETIME + nFileSizeHigh: DWORD + nFileSizeLow: DWORD + dwReserved0: DWORD + dwReserved1: DWORD + cFileName: Array[WCHAR] + cAlternateFileName: Array[WCHAR] + +# These pointer type definitions use pointer[...] instead of POINTER(...), to allow them +# to be used in type annotations. +PBOOL = pointer[BOOL] +LPBOOL = pointer[BOOL] +PBOOLEAN = pointer[BOOLEAN] +PBYTE = pointer[BYTE] +LPBYTE = pointer[BYTE] +PCHAR = pointer[CHAR] +LPCOLORREF = pointer[COLORREF] +PDWORD = pointer[DWORD] +LPDWORD = pointer[DWORD] +PFILETIME = pointer[FILETIME] +LPFILETIME = pointer[FILETIME] +PFLOAT = pointer[FLOAT] +PHANDLE = pointer[HANDLE] +LPHANDLE = pointer[HANDLE] +PHKEY = pointer[HKEY] +LPHKL = pointer[HKL] +PINT = pointer[INT] +LPINT = pointer[INT] +PLARGE_INTEGER = pointer[LARGE_INTEGER] +PLCID = pointer[LCID] +PLONG = pointer[LONG] +LPLONG = pointer[LONG] +PMSG = pointer[MSG] +LPMSG = pointer[MSG] +PPOINT = pointer[POINT] +LPPOINT = pointer[POINT] +PPOINTL = pointer[POINTL] +PRECT = pointer[RECT] +LPRECT = pointer[RECT] +PRECTL = pointer[RECTL] +LPRECTL = pointer[RECTL] +LPSC_HANDLE = pointer[SC_HANDLE] +PSHORT = pointer[SHORT] +PSIZE = pointer[SIZE] +LPSIZE = pointer[SIZE] +PSIZEL = pointer[SIZEL] +LPSIZEL = pointer[SIZEL] +PSMALL_RECT = pointer[SMALL_RECT] +PUINT = pointer[UINT] +LPUINT = pointer[UINT] +PULARGE_INTEGER = pointer[ULARGE_INTEGER] +PULONG = pointer[ULONG] +PUSHORT = pointer[USHORT] +PWCHAR = pointer[WCHAR] +PWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA] +LPWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA] +PWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW] +LPWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW] +PWORD = pointer[WORD] +LPWORD = pointer[WORD] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi new file mode 100644 index 0000000..ccc92ba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi @@ -0,0 +1,290 @@ +import sys +from time import struct_time +from typing import ( + AnyStr, Optional, SupportsAbs, Tuple, Union, overload, + ClassVar, +) + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +MINYEAR: int +MAXYEAR: int + +class tzinfo: + def tzname(self, dt: Optional[datetime]) -> Optional[str]: ... + def utcoffset(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def fromutc(self, dt: datetime) -> datetime: ... + +if sys.version_info >= (3, 2): + class timezone(tzinfo): + utc: ClassVar[timezone] + min: ClassVar[timezone] + max: ClassVar[timezone] + + def __init__(self, offset: timedelta, name: str = ...) -> None: ... + def __hash__(self) -> int: ... + +_tzinfo = tzinfo + +class date: + min: ClassVar[date] + max: ClassVar[date] + resolution: ClassVar[timedelta] + + def __init__(self, year: int, month: int, day: int) -> None: ... + + @classmethod + def fromtimestamp(cls, t: float) -> date: ... + @classmethod + def today(cls) -> date: ... + @classmethod + def fromordinal(cls, n: int) -> date: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, date_string: str) -> date: ... + + @property + def year(self) -> int: ... + @property + def month(self) -> int: ... + @property + def day(self) -> int: ... + + def ctime(self) -> str: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def isoformat(self) -> str: ... + def timetuple(self) -> struct_time: ... + def toordinal(self) -> int: ... + def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ... + def __le__(self, other: date) -> bool: ... + def __lt__(self, other: date) -> bool: ... + def __ge__(self, other: date) -> bool: ... + def __gt__(self, other: date) -> bool: ... + def __add__(self, other: timedelta) -> date: ... + @overload + def __sub__(self, other: timedelta) -> date: ... + @overload + def __sub__(self, other: date) -> timedelta: ... + def __hash__(self) -> int: ... + def weekday(self) -> int: ... + def isoweekday(self) -> int: ... + def isocalendar(self) -> Tuple[int, int, int]: ... + +class time: + min: ClassVar[time] + max: ClassVar[time] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ...) -> None: ... + + @property + def hour(self) -> int: ... + @property + def minute(self) -> int: ... + @property + def second(self) -> int: ... + @property + def microsecond(self) -> int: ... + @property + def tzinfo(self) -> Optional[_tzinfo]: ... + if sys.version_info >= (3, 6): + @property + def fold(self) -> int: ... + + def __le__(self, other: time) -> bool: ... + def __lt__(self, other: time) -> bool: ... + def __ge__(self, other: time) -> bool: ... + def __gt__(self, other: time) -> bool: ... + def __hash__(self) -> int: ... + def isoformat(self) -> str: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, time_string: str) -> time: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def utcoffset(self) -> Optional[timedelta]: ... + def tzname(self) -> Optional[str]: ... + def dst(self) -> Optional[int]: ... + if sys.version_info >= (3, 6): + def replace(self, hour: int = ..., minute: int = ..., second: int = ..., + microsecond: int = ..., tzinfo: Optional[_tzinfo] = ..., + *, fold: int = ...) -> time: ... + else: + def replace(self, hour: int = ..., minute: int = ..., second: int = ..., + microsecond: int = ..., tzinfo: Optional[_tzinfo] = ...) -> time: ... + +_date = date +_time = time + +class timedelta(SupportsAbs[timedelta]): + min: ClassVar[timedelta] + max: ClassVar[timedelta] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., + milliseconds: float = ..., minutes: float = ..., hours: float = ..., + weeks: float = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., + milliseconds: float = ..., minutes: float = ..., hours: float = ..., + weeks: float = ...) -> None: ... + + @property + def days(self) -> int: ... + @property + def seconds(self) -> int: ... + @property + def microseconds(self) -> int: ... + + def total_seconds(self) -> float: ... + def __add__(self, other: timedelta) -> timedelta: ... + def __radd__(self, other: timedelta) -> timedelta: ... + def __sub__(self, other: timedelta) -> timedelta: ... + def __rsub__(self, other: timedelta) -> timedelta: ... + def __neg__(self) -> timedelta: ... + def __pos__(self) -> timedelta: ... + def __abs__(self) -> timedelta: ... + def __mul__(self, other: float) -> timedelta: ... + def __rmul__(self, other: float) -> timedelta: ... + @overload + def __floordiv__(self, other: timedelta) -> int: ... + @overload + def __floordiv__(self, other: int) -> timedelta: ... + if sys.version_info >= (3,): + @overload + def __truediv__(self, other: timedelta) -> float: ... + @overload + def __truediv__(self, other: float) -> timedelta: ... + def __mod__(self, other: timedelta) -> timedelta: ... + def __divmod__(self, other: timedelta) -> Tuple[int, timedelta]: ... + else: + @overload + def __div__(self, other: timedelta) -> float: ... + @overload + def __div__(self, other: float) -> timedelta: ... + def __le__(self, other: timedelta) -> bool: ... + def __lt__(self, other: timedelta) -> bool: ... + def __ge__(self, other: timedelta) -> bool: ... + def __gt__(self, other: timedelta) -> bool: ... + def __hash__(self) -> int: ... + +class datetime(date): + min: ClassVar[datetime] + max: ClassVar[datetime] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, year: int, month: int, day: int, hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, year: int, month: int, day: int, hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ...) -> None: ... + + @property + def year(self) -> int: ... + @property + def month(self) -> int: ... + @property + def day(self) -> int: ... + @property + def hour(self) -> int: ... + @property + def minute(self) -> int: ... + @property + def second(self) -> int: ... + @property + def microsecond(self) -> int: ... + @property + def tzinfo(self) -> Optional[_tzinfo]: ... + if sys.version_info >= (3, 6): + @property + def fold(self) -> int: ... + + @classmethod + def fromtimestamp(cls, t: float, tz: Optional[_tzinfo] = ...) -> datetime: ... + @classmethod + def utcfromtimestamp(cls, t: float) -> datetime: ... + @classmethod + def today(cls) -> datetime: ... + @classmethod + def fromordinal(cls, n: int) -> datetime: ... + @classmethod + def now(cls, tz: Optional[_tzinfo] = ...) -> datetime: ... + @classmethod + def utcnow(cls) -> datetime: ... + if sys.version_info >= (3, 6): + @classmethod + def combine(cls, date: date, time: time, tzinfo: Optional[_tzinfo] = ...) -> datetime: ... + else: + @classmethod + def combine(cls, date: date, time: time) -> datetime: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, date_string: str) -> datetime: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def toordinal(self) -> int: ... + def timetuple(self) -> struct_time: ... + if sys.version_info >= (3, 3): + def timestamp(self) -> float: ... + def utctimetuple(self) -> struct_time: ... + def date(self) -> _date: ... + def time(self) -> _time: ... + def timetz(self) -> _time: ... + if sys.version_info >= (3, 6): + def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: + Optional[_tzinfo] = ..., *, fold: int = ...) -> datetime: ... + else: + def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: + Optional[_tzinfo] = ...) -> datetime: ... + if sys.version_info >= (3, 3): + def astimezone(self, tz: Optional[_tzinfo] = ...) -> datetime: ... + else: + def astimezone(self, tz: _tzinfo) -> datetime: ... + def ctime(self) -> str: ... + if sys.version_info >= (3, 6): + def isoformat(self, sep: str = ..., timespec: str = ...) -> str: ... + else: + def isoformat(self, sep: str = ...) -> str: ... + @classmethod + def strptime(cls, date_string: _Text, format: _Text) -> datetime: ... + def utcoffset(self) -> Optional[timedelta]: ... + def tzname(self) -> Optional[str]: ... + def dst(self) -> Optional[timedelta]: ... + def __le__(self, other: datetime) -> bool: ... # type: ignore + def __lt__(self, other: datetime) -> bool: ... # type: ignore + def __ge__(self, other: datetime) -> bool: ... # type: ignore + def __gt__(self, other: datetime) -> bool: ... # type: ignore + def __add__(self, other: timedelta) -> datetime: ... + @overload # type: ignore + def __sub__(self, other: datetime) -> timedelta: ... + @overload + def __sub__(self, other: timedelta) -> datetime: ... + def __hash__(self) -> int: ... + def weekday(self) -> int: ... + def isoweekday(self) -> int: ... + def isocalendar(self) -> Tuple[int, int, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi new file mode 100644 index 0000000..2018ed8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi @@ -0,0 +1,315 @@ +import numbers +import sys +from types import TracebackType +from typing import ( + Any, Container, Dict, List, NamedTuple, Optional, overload, Sequence, Text, Tuple, Type, TypeVar, Union, +) + +_Decimal = Union[Decimal, int] +_DecimalNew = Union[Decimal, float, Text, Tuple[int, Sequence[int], int]] +if sys.version_info >= (3,): + _ComparableNum = Union[Decimal, float, numbers.Rational] +else: + _ComparableNum = Union[Decimal, float] +_DecimalT = TypeVar('_DecimalT', bound=Decimal) + +DecimalTuple = NamedTuple('DecimalTuple', + [('sign', int), + ('digits', Tuple[int, ...]), + ('exponent', int)]) + +ROUND_DOWN: str +ROUND_HALF_UP: str +ROUND_HALF_EVEN: str +ROUND_CEILING: str +ROUND_FLOOR: str +ROUND_UP: str +ROUND_HALF_DOWN: str +ROUND_05UP: str + +if sys.version_info >= (3,): + HAVE_THREADS: bool + MAX_EMAX: int + MAX_PREC: int + MIN_EMIN: int + MIN_ETINY: int + +class DecimalException(ArithmeticError): + def handle(self, context: Context, *args: Any) -> Optional[Decimal]: ... + +class Clamped(DecimalException): ... + +class InvalidOperation(DecimalException): ... + +class ConversionSyntax(InvalidOperation): ... + +class DivisionByZero(DecimalException, ZeroDivisionError): ... + +class DivisionImpossible(InvalidOperation): ... + +class DivisionUndefined(InvalidOperation, ZeroDivisionError): ... + +class Inexact(DecimalException): ... + +class InvalidContext(InvalidOperation): ... + +class Rounded(DecimalException): ... + +class Subnormal(DecimalException): ... + +class Overflow(Inexact, Rounded): ... + +class Underflow(Inexact, Rounded, Subnormal): ... + +if sys.version_info >= (3,): + class FloatOperation(DecimalException, TypeError): ... + +def setcontext(context: Context) -> None: ... +def getcontext() -> Context: ... +def localcontext(ctx: Optional[Context] = ...) -> _ContextManager: ... + +class Decimal(object): + def __new__(cls: Type[_DecimalT], value: _DecimalNew = ..., context: Optional[Context] = ...) -> _DecimalT: ... + @classmethod + def from_float(cls, f: float) -> Decimal: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __eq__(self, other: object, context: Optional[Context] = ...) -> bool: ... + if sys.version_info < (3,): + def __ne__(self, other: object, context: Optional[Context] = ...) -> bool: ... + def __lt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __le__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __gt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __ge__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def compare(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __hash__(self) -> int: ... + def as_tuple(self) -> DecimalTuple: ... + if sys.version_info >= (3,): + def as_integer_ratio(self) -> Tuple[int, int]: ... + def __str__(self, eng: bool = ..., context: Optional[Context] = ...) -> str: ... + def to_eng_string(self, context: Optional[Context] = ...) -> str: ... + def __neg__(self, context: Optional[Context] = ...) -> Decimal: ... + def __pos__(self, context: Optional[Context] = ...) -> Decimal: ... + def __abs__(self, round: bool = ..., context: Optional[Context] = ...) -> Decimal: ... + def __add__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __radd__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __sub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rsub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __mul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rmul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __truediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rtruediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info < (3,): + def __div__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rdiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __divmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ... + def __rdivmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ... + def __mod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def remainder_near(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __floordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rfloordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __trunc__(self) -> int: ... + @property + def real(self) -> Decimal: ... + @property + def imag(self) -> Decimal: ... + def conjugate(self) -> Decimal: ... + def __complex__(self) -> complex: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: int) -> Decimal: ... + def __floor__(self) -> int: ... + def __ceil__(self) -> int: ... + else: + def __long__(self) -> long: ... + def fma(self, other: _Decimal, third: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __pow__(self, other: _Decimal, modulo: Optional[_Decimal] = ..., context: Optional[Context] = ...) -> Decimal: ... + def __rpow__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def normalize(self, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info >= (3,): + def quantize(self, exp: _Decimal, rounding: Optional[str] = ..., + context: Optional[Context] = ...) -> Decimal: ... + def same_quantum(self, other: _Decimal, context: Optional[Context] = ...) -> bool: ... + else: + def quantize(self, exp: _Decimal, rounding: Optional[str] = ..., + context: Optional[Context] = ..., watchexp: bool = ...) -> Decimal: ... + def same_quantum(self, other: _Decimal) -> bool: ... + def to_integral_exact(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def to_integral_value(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def to_integral(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def sqrt(self, context: Optional[Context] = ...) -> Decimal: ... + def max(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def min(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def adjusted(self) -> int: ... + if sys.version_info >= (3,): + def canonical(self) -> Decimal: ... + else: + def canonical(self, context: Optional[Context] = ...) -> Decimal: ... + def compare_signal(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info >= (3,): + def compare_total(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def compare_total_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + else: + def compare_total(self, other: _Decimal) -> Decimal: ... + def compare_total_mag(self, other: _Decimal) -> Decimal: ... + def copy_abs(self) -> Decimal: ... + def copy_negate(self) -> Decimal: ... + if sys.version_info >= (3,): + def copy_sign(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + else: + def copy_sign(self, other: _Decimal) -> Decimal: ... + def exp(self, context: Optional[Context] = ...) -> Decimal: ... + def is_canonical(self) -> bool: ... + def is_finite(self) -> bool: ... + def is_infinite(self) -> bool: ... + def is_nan(self) -> bool: ... + def is_normal(self, context: Optional[Context] = ...) -> bool: ... + def is_qnan(self) -> bool: ... + def is_signed(self) -> bool: ... + def is_snan(self) -> bool: ... + def is_subnormal(self, context: Optional[Context] = ...) -> bool: ... + def is_zero(self) -> bool: ... + def ln(self, context: Optional[Context] = ...) -> Decimal: ... + def log10(self, context: Optional[Context] = ...) -> Decimal: ... + def logb(self, context: Optional[Context] = ...) -> Decimal: ... + def logical_and(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def logical_invert(self, context: Optional[Context] = ...) -> Decimal: ... + def logical_or(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def logical_xor(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def max_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def min_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def next_minus(self, context: Optional[Context] = ...) -> Decimal: ... + def next_plus(self, context: Optional[Context] = ...) -> Decimal: ... + def next_toward(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def number_class(self, context: Optional[Context] = ...) -> str: ... + def radix(self) -> Decimal: ... + def rotate(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def scaleb(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def shift(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __reduce__(self) -> Tuple[Type[Decimal], Tuple[str]]: ... + def __copy__(self) -> Decimal: ... + def __deepcopy__(self, memo: Any) -> Decimal: ... + def __format__(self, specifier: str, context: Optional[Context] = ...) -> str: ... + +class _ContextManager(object): + new_context: Context + saved_context: Context + def __init__(self, new_context: Context) -> None: ... + def __enter__(self) -> Context: ... + def __exit__(self, t: Optional[Type[BaseException]], v: Optional[BaseException], tb: Optional[TracebackType]) -> None: ... + +_TrapType = Type[DecimalException] + +class Context(object): + prec: int + rounding: str + Emin: int + Emax: int + capitals: int + if sys.version_info >= (3,): + clamp: int + else: + _clamp: int + traps: Dict[_TrapType, bool] + flags: Dict[_TrapType, bool] + if sys.version_info >= (3,): + def __init__(self, prec: Optional[int] = ..., rounding: Optional[str] = ..., + Emin: Optional[int] = ..., Emax: Optional[int] = ..., + capitals: Optional[int] = ..., clamp: Optional[int] = ..., + flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + _ignored_flags: Optional[List[_TrapType]] = ...) -> None: ... + else: + def __init__(self, prec: Optional[int] = ..., rounding: Optional[str] = ..., + traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + Emin: Optional[int] = ..., Emax: Optional[int] = ..., + capitals: Optional[int] = ..., _clamp: Optional[int] = ..., + _ignored_flags: Optional[List[_TrapType]] = ...) -> None: ... + if sys.version_info >= (3,): + # __setattr__() only allows to set a specific set of attributes, + # already defined above. + def __delattr__(self, name: str) -> None: ... + def __reduce__(self) -> Tuple[Type[Context], Tuple[Any, ...]]: ... + def clear_flags(self) -> None: ... + if sys.version_info >= (3,): + def clear_traps(self) -> None: ... + def copy(self) -> Context: ... + def __copy__(self) -> Context: ... + __hash__: Any = ... + def Etiny(self) -> int: ... + def Etop(self) -> int: ... + def create_decimal(self, num: _DecimalNew = ...) -> Decimal: ... + def create_decimal_from_float(self, f: float) -> Decimal: ... + def abs(self, a: _Decimal) -> Decimal: ... + def add(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def canonical(self, a: Decimal) -> Decimal: ... + def compare(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_signal(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_total(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_total_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def copy_abs(self, a: _Decimal) -> Decimal: ... + def copy_decimal(self, a: _Decimal) -> Decimal: ... + def copy_negate(self, a: _Decimal) -> Decimal: ... + def copy_sign(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divide(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divide_int(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divmod(self, a: _Decimal, b: _Decimal) -> Tuple[Decimal, Decimal]: ... + def exp(self, a: _Decimal) -> Decimal: ... + def fma(self, a: _Decimal, b: _Decimal, c: _Decimal) -> Decimal: ... + def is_canonical(self, a: _Decimal) -> bool: ... + def is_finite(self, a: _Decimal) -> bool: ... + def is_infinite(self, a: _Decimal) -> bool: ... + def is_nan(self, a: _Decimal) -> bool: ... + def is_normal(self, a: _Decimal) -> bool: ... + def is_qnan(self, a: _Decimal) -> bool: ... + def is_signed(self, a: _Decimal) -> bool: ... + def is_snan(self, a: _Decimal) -> bool: ... + def is_subnormal(self, a: _Decimal) -> bool: ... + def is_zero(self, a: _Decimal) -> bool: ... + def ln(self, a: _Decimal) -> Decimal: ... + def log10(self, a: _Decimal) -> Decimal: ... + def logb(self, a: _Decimal) -> Decimal: ... + def logical_and(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def logical_invert(self, a: _Decimal) -> Decimal: ... + def logical_or(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def logical_xor(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def max(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def max_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def min(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def min_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def minus(self, a: _Decimal) -> Decimal: ... + def multiply(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def next_minus(self, a: _Decimal) -> Decimal: ... + def next_plus(self, a: _Decimal) -> Decimal: ... + def next_toward(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def normalize(self, a: _Decimal) -> Decimal: ... + def number_class(self, a: _Decimal) -> str: ... + def plus(self, a: _Decimal) -> Decimal: ... + def power(self, a: _Decimal, b: _Decimal, modulo: Optional[_Decimal] = ...) -> Decimal: ... + def quantize(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def radix(self) -> Decimal: ... + def remainder(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def remainder_near(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def rotate(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def same_quantum(self, a: _Decimal, b: _Decimal) -> bool: ... + def scaleb(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def shift(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def sqrt(self, a: _Decimal) -> Decimal: ... + def subtract(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def to_eng_string(self, a: _Decimal) -> str: ... + def to_sci_string(self, a: _Decimal) -> str: ... + def to_integral_exact(self, a: _Decimal) -> Decimal: ... + def to_integral_value(self, a: _Decimal) -> Decimal: ... + def to_integral(self, a: _Decimal) -> Decimal: ... + +DefaultContext: Context +BasicContext: Context +ExtendedContext: Context diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi new file mode 100644 index 0000000..ddcec11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi @@ -0,0 +1,87 @@ +# Based on https://docs.python.org/2.7/library/difflib.html and https://docs.python.org/3.2/library/difflib.html + +import sys +from typing import ( + TypeVar, Callable, Iterable, Iterator, List, NamedTuple, Sequence, Tuple, + Generic, Optional, Text, Union, AnyStr +) + +_T = TypeVar('_T') + +if sys.version_info >= (3,): + _StrType = Text +else: + # Aliases can't point to type vars, so we need to redeclare AnyStr + _StrType = TypeVar('_StrType', Text, bytes) + +_JunkCallback = Union[Callable[[Text], bool], Callable[[str], bool]] + +Match = NamedTuple('Match', [ + ('a', int), + ('b', int), + ('size', int), +]) + +class SequenceMatcher(Generic[_T]): + def __init__(self, isjunk: Optional[Callable[[_T], bool]] = ..., + a: Sequence[_T] = ..., b: Sequence[_T] = ..., + autojunk: bool = ...) -> None: ... + def set_seqs(self, a: Sequence[_T], b: Sequence[_T]) -> None: ... + def set_seq1(self, a: Sequence[_T]) -> None: ... + def set_seq2(self, b: Sequence[_T]) -> None: ... + def find_longest_match(self, alo: int, ahi: int, blo: int, + bhi: int) -> Match: ... + def get_matching_blocks(self) -> List[Match]: ... + def get_opcodes(self) -> List[Tuple[str, int, int, int, int]]: ... + def get_grouped_opcodes(self, n: int = ... + ) -> Iterable[List[Tuple[str, int, int, int, int]]]: ... + def ratio(self) -> float: ... + def quick_ratio(self) -> float: ... + def real_quick_ratio(self) -> float: ... + +def get_close_matches(word: Sequence[_T], possibilities: Iterable[Sequence[_T]], + n: int = ..., cutoff: float = ...) -> List[Sequence[_T]]: ... + +class Differ: + def __init__(self, linejunk: _JunkCallback = ..., charjunk: _JunkCallback = ...) -> None: ... + def compare(self, a: Sequence[_StrType], b: Sequence[_StrType]) -> Iterator[_StrType]: ... + +def IS_LINE_JUNK(line: _StrType) -> bool: ... +def IS_CHARACTER_JUNK(line: _StrType) -> bool: ... +def unified_diff(a: Sequence[_StrType], b: Sequence[_StrType], fromfile: _StrType = ..., + tofile: _StrType = ..., fromfiledate: _StrType = ..., tofiledate: _StrType = ..., + n: int = ..., lineterm: _StrType = ...) -> Iterator[_StrType]: ... +def context_diff(a: Sequence[_StrType], b: Sequence[_StrType], fromfile: _StrType = ..., + tofile: _StrType = ..., fromfiledate: _StrType = ..., tofiledate: _StrType = ..., + n: int = ..., lineterm: _StrType = ...) -> Iterator[_StrType]: ... +def ndiff(a: Sequence[_StrType], b: Sequence[_StrType], + linejunk: _JunkCallback = ..., + charjunk: _JunkCallback = ... + ) -> Iterator[_StrType]: ... + +class HtmlDiff(object): + def __init__(self, tabsize: int = ..., wrapcolumn: int = ..., + linejunk: _JunkCallback = ..., + charjunk: _JunkCallback = ... + ) -> None: ... + def make_file(self, fromlines: Sequence[_StrType], tolines: Sequence[_StrType], + fromdesc: _StrType = ..., todesc: _StrType = ..., context: bool = ..., + numlines: int = ...) -> _StrType: ... + def make_table(self, fromlines: Sequence[_StrType], tolines: Sequence[_StrType], + fromdesc: _StrType = ..., todesc: _StrType = ..., context: bool = ..., + numlines: int = ...) -> _StrType: ... + +def restore(delta: Iterable[_StrType], which: int) -> Iterator[_StrType]: ... + +if sys.version_info >= (3, 5): + def diff_bytes( + dfunc: Callable[[Sequence[str], Sequence[str], str, str, str, str, int, str], Iterator[str]], + a: Sequence[bytes], + b: Sequence[bytes], + fromfile: bytes = ..., + tofile: bytes = ..., + fromfiledate: bytes = ..., + tofiledate: bytes = ..., + n: int = ..., + lineterm: bytes = ... + ) -> Iterator[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/dis.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/dis.pyi new file mode 100644 index 0000000..0ef27f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/dis.pyi @@ -0,0 +1,77 @@ +from typing import Callable, List, Union, Iterator, Tuple, Optional, Any, IO, NamedTuple, Dict + +import sys +import types + +from opcode import (hasconst as hasconst, hasname as hasname, hasjrel as hasjrel, + hasjabs as hasjabs, haslocal as haslocal, hascompare as hascompare, + hasfree as hasfree, cmp_op as cmp_op, opname as opname, opmap as opmap, + HAVE_ARGUMENT as HAVE_ARGUMENT, EXTENDED_ARG as EXTENDED_ARG) + +if sys.version_info >= (3, 4): + from opcode import stack_effect as stack_effect + +if sys.version_info >= (3, 6): + from opcode import hasnargs as hasnargs + +# Strictly this should not have to include Callable, but mypy doesn't use FunctionType +# for functions (python/mypy#3171) +_have_code = Union[types.MethodType, types.FunctionType, types.CodeType, type, Callable[..., Any]] +_have_code_or_string = Union[_have_code, str, bytes] + + +if sys.version_info >= (3, 4): + Instruction = NamedTuple( + "Instruction", + [ + ('opname', str), + ('opcode', int), + ('arg', Optional[int]), + ('argval', Any), + ('argrepr', str), + ('offset', int), + ('starts_line', Optional[int]), + ('is_jump_target', bool) + ] + ) + + class Bytecode: + codeobj: types.CodeType + first_line: int + def __init__(self, x: _have_code_or_string, *, first_line: Optional[int] = ..., + current_offset: Optional[int] = ...) -> None: ... + def __iter__(self) -> Iterator[Instruction]: ... + def __repr__(self) -> str: ... + def info(self) -> str: ... + def dis(self) -> str: ... + + @classmethod + def from_traceback(cls, tb: types.TracebackType) -> Bytecode: ... + + +COMPILER_FLAG_NAMES: Dict[int, str] + + +def findlabels(code: _have_code) -> List[int]: ... +def findlinestarts(code: _have_code) -> Iterator[Tuple[int, int]]: ... + +if sys.version_info >= (3, 0): + def pretty_flags(flags: int) -> str: ... + def code_info(x: _have_code_or_string) -> str: ... + +if sys.version_info >= (3, 4): + def dis(x: _have_code_or_string = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def distb(tb: Optional[types.TracebackType] = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def disassemble(co: _have_code, lasti: int = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def disco(co: _have_code, lasti: int = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def show_code(co: _have_code, *, file: Optional[IO[str]] = ...) -> None: ... + + def get_instructions(x: _have_code, *, first_line: Optional[int] = ...) -> Iterator[Instruction]: ... +else: + def dis(x: _have_code_or_string = ...) -> None: ... + def distb(tb: types.TracebackType = ...) -> None: ... + def disassemble(co: _have_code, lasti: int = ...) -> None: ... + def disco(co: _have_code, lasti: int = ...) -> None: ... + + if sys.version_info >= (3, 0): + def show_code(co: _have_code) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi new file mode 100644 index 0000000..12172f3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi @@ -0,0 +1,12 @@ +# Stubs for distutils.archive_util + +from typing import Optional + + +def make_archive(base_name: str, format: str, root_dir: Optional[str] = ..., + base_dir: Optional[str] = ..., verbose: int = ..., + dry_run: int = ...) -> str: ... +def make_tarball(base_name: str, base_dir: str, compress: Optional[str] = ..., + verbose: int = ..., dry_run: int = ...) -> str: ... +def make_zipfile(base_name: str, base_dir: str, verbose: int = ..., + dry_run: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi new file mode 100644 index 0000000..9f27a0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.bcppcompiler + +from distutils.ccompiler import CCompiler + + +class BCPPCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi new file mode 100644 index 0000000..94fad8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi @@ -0,0 +1,119 @@ +# Stubs for distutils.ccompiler + +from typing import Any, Callable, List, Optional, Tuple, Union + + +_Macro = Union[Tuple[str], Tuple[str, str]] + + +def gen_lib_options(compiler: CCompiler, library_dirs: List[str], + runtime_library_dirs: List[str], + libraries: List[str]) -> List[str]: ... +def gen_preprocess_options(macros: List[_Macro], + include_dirs: List[str]) -> List[str]: ... +def get_default_compiler(osname: Optional[str] = ..., + platform: Optional[str] = ...) -> str: ... +def new_compiler(plat: Optional[str] = ..., compiler: Optional[str] = ..., + verbose: int = ..., dry_run: int = ..., + force: int = ...) -> CCompiler: ... +def show_compilers() -> None: ... + +class CCompiler: + def __init__(self, verbose: int = ..., dry_run: int = ..., + force: int = ...) -> None: ... + def add_include_dir(self, dir: str) -> None: ... + def set_include_dirs(self, dirs: List[str]) -> None: ... + def add_library(self, libname: str) -> None: ... + def set_libraries(self, libnames: List[str]) -> None: ... + def add_library_dir(self, dir: str) -> None: ... + def set_library_dirs(self, dirs: List[str]) -> None: ... + def add_runtime_library_dir(self, dir: str) -> None: ... + def set_runtime_library_dirs(self, dirs: List[str]) -> None: ... + def define_macro(self, name: str, value: Optional[str] = ...) -> None: ... + def undefine_macro(self, name: str) -> None: ... + def add_link_object(self, object: str) -> None: ... + def set_link_objects(self, objects: List[str]) -> None: ... + def detect_language(self, sources: Union[str, List[str]]) -> Optional[str]: ... + def find_library_file(self, dirs: List[str], lib: str, + debug: bool = ...) -> Optional[str]: ... + def has_function(self, funcname: str, includes: Optional[List[str]] = ..., + include_dirs: Optional[List[str]] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ...) -> bool: ... + def library_dir_option(self, dir: str) -> str: ... + def library_option(self, lib: str) -> str: ... + def runtime_library_dir_option(self, dir: str) -> str: ... + def set_executables(self, **args: str) -> None: ... + def compile(self, sources: List[str], output_dir: Optional[str] = ..., + macros: Optional[_Macro] = ..., + include_dirs: Optional[List[str]] = ..., debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + depends: Optional[List[str]] = ...) -> List[str]: ... + def create_static_lib(self, objects: List[str], output_libname: str, + output_dir: Optional[str] = ..., debug: bool = ..., + target_lang: Optional[str] = ...) -> None: ... + def link(self, target_desc: str, objects: List[str], output_filename: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_executable(self, objects: List[str], output_progname: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_shared_lib(self, objects: List[str], output_libname: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_shared_object(self, objects: List[str], output_filename: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def preprocess(self, source: str, output_file: Optional[str] = ..., + macros: Optional[List[_Macro]] = ..., + include_dirs: Optional[List[str]] = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ...) -> None: ... + def executable_filename(self, basename: str, strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def library_filename(self, libname: str, lib_type: str = ..., + strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def object_filenames(self, source_filenames: List[str], + strip_dir: int = ..., + output_dir: str = ...) -> List[str]: ... + def shared_object_filename(self, basename: str, strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def execute(self, func: Callable[..., None], args: Tuple[Any, ...], + msg: Optional[str] = ..., level: int = ...) -> None: ... + def spawn(self, cmd: List[str]) -> None: ... + def mkpath(self, name: str, mode: int = ...) -> None: ... + def move_file(self, src: str, dst: str) -> str: ... + def announce(self, msg: str, level: int = ...) -> None: ... + def warn(self, msg: str) -> None: ... + def debug_print(self, msg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi new file mode 100644 index 0000000..2ec5a50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi @@ -0,0 +1,40 @@ +# Stubs for distutils.cmd + +from typing import Callable, List, Tuple, Union, Optional, Iterable, Any, Text +from abc import abstractmethod +from distutils.dist import Distribution + +class Command: + sub_commands: List[Tuple[str, Union[Callable[[], bool], str, None]]] + def __init__(self, dist: Distribution) -> None: ... + @abstractmethod + def initialize_options(self) -> None: ... + @abstractmethod + def finalize_options(self) -> None: ... + @abstractmethod + def run(self) -> None: ... + + def announce(self, msg: Text, level: int = ...) -> None: ... + def debug_print(self, msg: Text) -> None: ... + + def ensure_string(self, option: str, default: Optional[str] = ...) -> None: ... + def ensure_string_list(self, option: Union[str, List[str]]) -> None: ... + def ensure_filename(self, option: str) -> None: ... + def ensure_dirname(self, option: str) -> None: ... + + def get_command_name(self) -> str: ... + def set_undefined_options(self, src_cmd: Text, *option_pairs: Tuple[str, str]) -> None: ... + def get_finalized_command(self, command: Text, create: int = ...) -> Command: ... + def reinitialize_command(self, command: Union[Command, Text], reinit_subcommands: int = ...) -> Command: ... + def run_command(self, command: Text) -> None: ... + def get_sub_commands(self) -> List[str]: ... + + def warn(self, msg: Text) -> None: ... + def execute(self, func: Callable[..., Any], args: Iterable[Any], msg: Optional[Text] = ..., level: int = ...) -> None: ... + def mkpath(self, name: str, mode: int = ...) -> None: ... + def copy_file(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., link: Optional[str] = ..., level: Any = ...) -> Tuple[str, bool]: ... # level is not used + def copy_tree(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., preserve_symlinks: int = ..., level: Any = ...) -> List[str]: ... # level is not used + def move_file(self, src: str, dest: str, level: Any = ...) -> str: ... # level is not used + def spawn(self, cmd: Iterable[str], search_path: int = ..., level: Any = ...) -> None: ... # level is not used + def make_archive(self, base_name: str, format: str, root_dir: Optional[str] = ..., base_dir: Optional[str] = ..., owner: Optional[str] = ..., group: Optional[str] = ...) -> str: ... + def make_file(self, infiles: Union[str, List[str], Tuple[str]], outfile: str, func: Callable[..., Any], args: List[Any], exec_msg: Optional[str] = ..., skip_msg: Optional[str] = ..., level: Any = ...) -> None: ... # level is not used diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi new file mode 100644 index 0000000..a761792 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi @@ -0,0 +1,6 @@ +from distutils.cmd import Command + +class bdist_msi(Command): + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi new file mode 100644 index 0000000..34753e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi @@ -0,0 +1,10 @@ +from distutils.cmd import Command +import sys + +if sys.version_info >= (3,): + class build_py(Command): + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... + + class build_py_2to3(build_py): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi new file mode 100644 index 0000000..94a9008 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi @@ -0,0 +1,14 @@ +from distutils.cmd import Command +from typing import Optional, Text + + +class install(Command): + user: bool + prefix: Optional[Text] + home: Optional[Text] + root: Optional[Text] + install_lib: Optional[Text] + + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi new file mode 100644 index 0000000..125b799 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi @@ -0,0 +1,50 @@ +# Stubs for distutils.core + +from typing import Any, List, Mapping, Optional, Tuple, Type, Union +from distutils.cmd import Command as Command +from distutils.dist import Distribution as Distribution +from distutils.extension import Extension as Extension + +def setup(name: str = ..., + version: str = ..., + description: str = ..., + long_description: str = ..., + author: str = ..., + author_email: str = ..., + maintainer: str = ..., + maintainer_email: str = ..., + url: str = ..., + download_url: str = ..., + packages: List[str] = ..., + py_modules: List[str] = ..., + scripts: List[str] = ..., + ext_modules: List[Extension] = ..., + classifiers: List[str] = ..., + distclass: Type[Distribution] = ..., + script_name: str = ..., + script_args: List[str] = ..., + options: Mapping[str, Any] = ..., + license: str = ..., + keywords: Union[List[str], str] = ..., + platforms: Union[List[str], str] = ..., + cmdclass: Mapping[str, Type[Command]] = ..., + data_files: List[Tuple[str, List[str]]] = ..., + package_dir: Mapping[str, str] = ..., + obsoletes: List[str] = ..., + provides: List[str] = ..., + requires: List[str] = ..., + command_packages: List[str] = ..., + command_options: Mapping[str, Mapping[str, Tuple[Any, Any]]] = ..., + package_data: Mapping[str, List[str]] = ..., + include_package_data: bool = ..., + libraries: List[str] = ..., + headers: List[str] = ..., + ext_package: str = ..., + include_dirs: List[str] = ..., + password: str = ..., + fullname: str = ..., + **attrs: Any) -> None: ... + +def run_setup(script_name: str, + script_args: Optional[List[str]] = ..., + stop_after: str = ...) -> Distribution: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi new file mode 100644 index 0000000..1bfab90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi @@ -0,0 +1,7 @@ +# Stubs for distutils.cygwinccompiler + +from distutils.unixccompiler import UnixCCompiler + + +class CygwinCCompiler(UnixCCompiler): ... +class Mingw32CCompiler(CygwinCCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi new file mode 100644 index 0000000..76de447 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi @@ -0,0 +1,3 @@ +# Stubs for distutils.debug + +DEBUG: bool diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi new file mode 100644 index 0000000..7df5847 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi @@ -0,0 +1,8 @@ +# Stubs for distutils.dep_util + +from typing import List, Tuple + +def newer(source: str, target: str) -> bool: ... +def newer_pairwise(sources: List[str], + targets: List[str]) -> List[Tuple[str, str]]: ... +def newer_group(sources: List[str], target: str, missing: str = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi new file mode 100644 index 0000000..667ac2f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi @@ -0,0 +1,15 @@ +# Stubs for distutils.dir_util + +from typing import List + + +def mkpath(name: str, mode: int = ..., verbose: int = ..., + dry_run: int = ...) -> List[str]: ... +def create_tree(base_dir: str, files: List[str], mode: int = ..., + verbose: int = ..., dry_run: int = ...) -> None: ... +def copy_tree(src: str, dst: str, preserve_mode: int = ..., + preserve_times: int = ..., preserve_symlinks: int = ..., + update: int = ..., verbose: int = ..., + dry_run: int = ...) -> List[str]: ... +def remove_tree(directory: str, verbose: int = ..., + dry_run: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi new file mode 100644 index 0000000..65e766d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi @@ -0,0 +1,11 @@ +# Stubs for distutils.dist +from distutils.cmd import Command + +from typing import Any, Mapping, Optional, Dict, Tuple, Iterable, Text + + +class Distribution: + def __init__(self, attrs: Optional[Mapping[str, Any]] = ...) -> None: ... + def get_option_dict(self, command: str) -> Dict[str, Tuple[str, Text]]: ... + def parse_config_files(self, filenames: Optional[Iterable[Text]] = ...) -> None: ... + def get_command_obj(self, command: str, create: bool = ...) -> Optional[Command]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi new file mode 100644 index 0000000..e483362 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi @@ -0,0 +1,19 @@ +class DistutilsError(Exception): ... +class DistutilsModuleError(DistutilsError): ... +class DistutilsClassError(DistutilsError): ... +class DistutilsGetoptError(DistutilsError): ... +class DistutilsArgError(DistutilsError): ... +class DistutilsFileError(DistutilsError): ... +class DistutilsOptionError(DistutilsError): ... +class DistutilsSetupError(DistutilsError): ... +class DistutilsPlatformError(DistutilsError): ... +class DistutilsExecError(DistutilsError): ... +class DistutilsInternalError(DistutilsError): ... +class DistutilsTemplateError(DistutilsError): ... +class DistutilsByteCompileError(DistutilsError): ... +class CCompilerError(Exception): ... +class PreprocessError(CCompilerError): ... +class CompileError(CCompilerError): ... +class LibError(CCompilerError): ... +class LinkError(CCompilerError): ... +class UnknownFileError(CCompilerError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi new file mode 100644 index 0000000..5aa070e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi @@ -0,0 +1,39 @@ +# Stubs for distutils.extension + +from typing import List, Optional, Tuple +import sys + +class Extension: + if sys.version_info >= (3,): + def __init__(self, + name: str, + sources: List[str], + include_dirs: List[str] = ..., + define_macros: List[Tuple[str, Optional[str]]] = ..., + undef_macros: List[str] = ..., + library_dirs: List[str] = ..., + libraries: List[str] = ..., + runtime_library_dirs: List[str] = ..., + extra_objects: List[str] = ..., + extra_compile_args: List[str] = ..., + extra_link_args: List[str] = ..., + export_symbols: List[str] = ..., + depends: List[str] = ..., + language: str = ..., + optional: bool = ...) -> None: ... + else: + def __init__(self, + name: str, + sources: List[str], + include_dirs: List[str] = ..., + define_macros: List[Tuple[str, Optional[str]]] = ..., + undef_macros: List[str] = ..., + library_dirs: List[str] = ..., + libraries: List[str] = ..., + runtime_library_dirs: List[str] = ..., + extra_objects: List[str] = ..., + extra_compile_args: List[str] = ..., + extra_link_args: List[str] = ..., + export_symbols: List[str] = ..., + depends: List[str] = ..., + language: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi new file mode 100644 index 0000000..aa7e964 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi @@ -0,0 +1,27 @@ +# Stubs for distutils.fancy_getopt + +from typing import ( + Any, List, Mapping, Optional, Tuple, Union, + TypeVar, overload, +) + +_Option = Tuple[str, str, str] +_GR = Tuple[List[str], OptionDummy] + +def fancy_getopt(options: List[_Option], + negative_opt: Mapping[_Option, _Option], + object: Any, + args: Optional[List[str]]) -> Union[List[str], _GR]: ... +def wrap_text(text: str, width: int) -> List[str]: ... + +class FancyGetopt: + def __init__(self, option_table: Optional[List[_Option]] = ...) -> None: ... + # TODO kinda wrong, `getopt(object=object())` is invalid + @overload + def getopt(self, args: Optional[List[str]] = ...) -> _GR: ... + @overload + def getopt(self, args: Optional[List[str]], object: Any) -> List[str]: ... + def get_option_order(self) -> List[Tuple[str, str]]: ... + def generate_help(self, header: Optional[str] = ...) -> List[str]: ... + +class OptionDummy: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi new file mode 100644 index 0000000..6324d63 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi @@ -0,0 +1,12 @@ +# Stubs for distutils.file_util + +from typing import Optional, Sequence, Tuple + + +def copy_file(src: str, dst: str, preserve_mode: bool = ..., + preserve_times: bool = ..., update: bool = ..., + link: Optional[str] = ..., verbose: bool = ..., + dry_run: bool = ...) -> Tuple[str, str]: ... +def move_file(src: str, dst: str, verbose: bool = ..., + dry_run: bool = ...) -> str: ... +def write_file(filename: str, contents: Sequence[str]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi new file mode 100644 index 0000000..4ecaeba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi @@ -0,0 +1,3 @@ +# Stubs for distutils.filelist + +class FileList: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi new file mode 100644 index 0000000..6c37cc5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi @@ -0,0 +1,28 @@ +from typing import Any, Callable, Iterable, Text + +DEBUG: int +INFO: int +WARN: int +ERROR: int +FATAL: int + +class Log: + def __init__(self, threshold: int = ...) -> None: ... + def log(self, level: int, msg: Text, *args: Any) -> None: ... + def debug(self, msg: Text, *args: Any) -> None: ... + def info(self, msg: Text, *args: Any) -> None: ... + def warn(self, msg: Text, *args: Any) -> None: ... + def error(self, msg: Text, *args: Any) -> None: ... + def fatal(self, msg: Text, *args: Any) -> None: ... + +_LogFunc = Callable[[Text, Iterable[Any]], None] + +log: Callable[[int, Text, Iterable[Any]], None] +debug: _LogFunc +info: _LogFunc +warn: _LogFunc +error: _LogFunc +fatal: _LogFunc + +def set_threshold(level: int) -> int: ... +def set_verbosity(v: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi new file mode 100644 index 0000000..ffc9e44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.msvccompiler + +from distutils.ccompiler import CCompiler + + +class MSVCCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi new file mode 100644 index 0000000..8df9eba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi @@ -0,0 +1,8 @@ +# Stubs for distutils.spawn + +from typing import List, Optional + +def spawn(cmd: List[str], search_path: bool = ..., + verbose: bool = ..., dry_run: bool = ...) -> None: ... +def find_executable(executable: str, + path: Optional[str] = ...) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi new file mode 100644 index 0000000..62fa9af --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi @@ -0,0 +1,19 @@ +# Stubs for distutils.sysconfig + +from typing import Mapping, Optional, Union +from distutils.ccompiler import CCompiler + +PREFIX: str +EXEC_PREFIX: str + +def get_config_var(name: str) -> Union[int, str, None]: ... +def get_config_vars(*args: str) -> Mapping[str, Union[int, str]]: ... +def get_config_h_filename() -> str: ... +def get_makefile_filename() -> str: ... +def get_python_inc(plat_specific: bool = ..., + prefix: Optional[str] = ...) -> str: ... +def get_python_lib(plat_specific: bool = ..., standard_lib: bool = ..., + prefix: Optional[str] = ...) -> str: ... + +def customize_compiler(compiler: CCompiler) -> None: ... +def set_python_build() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi new file mode 100644 index 0000000..8f90d41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi @@ -0,0 +1,18 @@ +# Stubs for distutils.text_file + +from typing import IO, List, Optional, Tuple, Union + +class TextFile: + def __init__(self, filename: Optional[str] = ..., + file: Optional[IO[str]] = ..., + *, strip_comments: bool = ..., + lstrip_ws: bool = ..., rstrip_ws: bool = ..., + skip_blanks: bool = ..., join_lines: bool = ..., + collapse_join: bool = ...) -> None: ... + def open(self, filename: str) -> None: ... + def close(self) -> None: ... + def warn(self, msg: str, + line: Union[List[int], Tuple[int, int], int] = ...) -> None: ... + def readline(self) -> Optional[str]: ... + def readlines(self) -> List[str]: ... + def unreadline(self, line: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi new file mode 100644 index 0000000..7ab7298 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.unixccompiler + +from distutils.ccompiler import CCompiler + + +class UnixCCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi new file mode 100644 index 0000000..942886d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi @@ -0,0 +1,20 @@ +# Stubs for distutils.util + +from typing import Any, Callable, List, Mapping, Optional, Tuple + + +def get_platform() -> str: ... +def convert_path(pathname: str) -> str: ... +def change_root(new_root: str, pathname: str) -> str: ... +def check_environ() -> None: ... +def subst_vars(s: str, local_vars: Mapping[str, str]) -> None: ... +def split_quoted(s: str) -> List[str]: ... +def execute(func: Callable[..., None], args: Tuple[Any, ...], + msg: Optional[str] = ..., verbose: bool = ..., + dry_run: bool = ...) -> None: ... +def strtobool(val: str) -> bool: ... +def byte_compile(py_files: List[str], optimize: int = ..., force: bool = ..., + prefix: Optional[str] = ..., base_dir: Optional[str] = ..., + verbose: bool = ..., dry_run: bool = ..., + direct: Optional[bool] = ...) -> None: ... +def rfc822_escape(header: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi new file mode 100644 index 0000000..cb636b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi @@ -0,0 +1,54 @@ +import sys +from abc import abstractmethod +from typing import Any, Optional, TypeVar, Union, Pattern, Text, Tuple + +_T = TypeVar('_T', bound='Version') + +class Version: + def __repr__(self) -> str: ... + + if sys.version_info >= (3,): + def __eq__(self, other: object) -> bool: ... + def __lt__(self: _T, other: Union[_T, str]) -> bool: ... + def __le__(self: _T, other: Union[_T, str]) -> bool: ... + def __gt__(self: _T, other: Union[_T, str]) -> bool: ... + def __ge__(self: _T, other: Union[_T, str]) -> bool: ... + + @abstractmethod + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + @abstractmethod + def parse(self: _T, vstring: Text) -> _T: ... + @abstractmethod + def __str__(self) -> str: ... + if sys.version_info >= (3,): + @abstractmethod + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + @abstractmethod + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... + +class StrictVersion(Version): + version_re: Pattern[str] + version: Tuple[int, int, int] + prerelease: Optional[Tuple[Text, int]] + + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + def parse(self: _T, vstring: Text) -> _T: ... + def __str__(self) -> str: ... + if sys.version_info >= (3,): + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... + +class LooseVersion(Version): + component_re: Pattern[str] + vstring: Text + version: Tuple[Union[Text, int], ...] + + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + def parse(self: _T, vstring: Text) -> _T: ... + def __str__(self) -> str: ... + if sys.version_info >= (3,): + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi new file mode 100644 index 0000000..8151fb5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi @@ -0,0 +1,161 @@ +from typing import Any, Callable, Dict, List, NamedTuple, Optional, Tuple, Type, Union + +import sys +import types +import unittest + +TestResults = NamedTuple('TestResults', [ + ('failed', int), + ('attempted', int), +]) + +OPTIONFLAGS_BY_NAME: Dict[str, int] +def register_optionflag(name: str) -> int: ... +DONT_ACCEPT_TRUE_FOR_1: int +DONT_ACCEPT_BLANKLINE: int +NORMALIZE_WHITESPACE: int +ELLIPSIS: int +SKIP: int +IGNORE_EXCEPTION_DETAIL: int + +COMPARISON_FLAGS: int + +REPORT_UDIFF: int +REPORT_CDIFF: int +REPORT_NDIFF: int +REPORT_ONLY_FIRST_FAILURE: int +if sys.version_info >= (3, 4): + FAIL_FAST: int + +REPORTING_FLAGS: int + +BLANKLINE_MARKER: str +ELLIPSIS_MARKER: str + +class Example: + source: str + want: str + exc_msg: Optional[str] + lineno: int + indent: int + options: Dict[int, bool] + def __init__(self, source: str, want: str, exc_msg: Optional[str] = ..., lineno: int = ..., indent: int = ..., + options: Optional[Dict[int, bool]] = ...) -> None: ... + def __hash__(self) -> int: ... + +class DocTest: + examples: List[Example] + globs: Dict[str, Any] + name: str + filename: Optional[str] + lineno: Optional[int] + docstring: Optional[str] + def __init__(self, examples: List[Example], globs: Dict[str, Any], name: str, filename: Optional[str], lineno: Optional[int], docstring: Optional[str]) -> None: ... + def __hash__(self) -> int: ... + def __lt__(self, other: DocTest) -> bool: ... + +class DocTestParser: + def parse(self, string: str, name: str = ...) -> List[Union[str, Example]]: ... + def get_doctest(self, string: str, globs: Dict[str, Any], name: str, filename: Optional[str], lineno: Optional[str]) -> DocTest: ... + def get_examples(self, strin: str, name: str = ...) -> List[Example]: ... + +class DocTestFinder: + def __init__(self, verbose: bool = ..., parser: DocTestParser = ..., + recurse: bool = ..., exclude_empty: bool = ...) -> None: ... + def find(self, obj: object, name: Optional[str] = ..., module: Union[None, bool, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., extraglobs: Optional[Dict[str, Any]] = ...) -> List[DocTest]: ... + +_Out = Callable[[str], Any] +_ExcInfo = Tuple[Type[BaseException], BaseException, types.TracebackType] + +class DocTestRunner: + DIVIDER: str + optionflags: int + original_optionflags: int + tries: int + failures: int + test: DocTest + + def __init__(self, checker: Optional[OutputChecker] = ..., verbose: Optional[bool] = ..., optionflags: int = ...) -> None: ... + def report_start(self, out: _Out, test: DocTest, example: Example) -> None: ... + def report_success(self, out: _Out, test: DocTest, example: Example, got: str) -> None: ... + def report_failure(self, out: _Out, test: DocTest, example: Example, got: str) -> None: ... + def report_unexpected_exception(self, out: _Out, test: DocTest, example: Example, exc_info: _ExcInfo) -> None: ... + def run(self, test: DocTest, compileflags: Optional[int] = ..., out: Optional[_Out] = ..., clear_globs: bool = ...) -> TestResults: ... + def summarize(self, verbose: Optional[bool] = ...) -> TestResults: ... + def merge(self, other: DocTestRunner) -> None: ... + +class OutputChecker: + def check_output(self, want: str, got: str, optionflags: int) -> bool: ... + def output_difference(self, example: Example, got: str, optionflags: int) -> str: ... + +class DocTestFailure(Exception): + test: DocTest + example: Example + got: str + + def __init__(self, test: DocTest, example: Example, got: str) -> None: ... + +class UnexpectedException(Exception): + test: DocTest + example: Example + exc_info: _ExcInfo + + def __init__(self, test: DocTest, example: Example, exc_info: _ExcInfo) -> None: ... + +class DebugRunner(DocTestRunner): ... + +master: Optional[DocTestRunner] + +def testmod(m: Optional[types.ModuleType] = ..., name: Optional[str] = ..., globs: Dict[str, Any] = ..., verbose: Optional[bool] = ..., + report: bool = ..., optionflags: int = ..., extraglobs: Dict[str, Any] = ..., + raise_on_error: bool = ..., exclude_empty: bool = ...) -> TestResults: ... +def testfile(filename: str, module_relative: bool = ..., name: Optional[str] = ..., package: Union[None, str, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., verbose: Optional[bool] = ..., report: bool = ..., optionflags: int = ..., + extraglobs: Optional[Dict[str, Any]] = ..., raise_on_error: bool = ..., parser: DocTestParser = ..., + encoding: Optional[str] = ...) -> TestResults: ... +def run_docstring_examples(f: object, globs: Dict[str, Any], verbose: bool = ..., name: str = ..., + compileflags: Optional[int] = ..., optionflags: int = ...) -> None: ... +def set_unittest_reportflags(flags: int) -> int: ... + +class DocTestCase(unittest.TestCase): + def __init__(self, test: DocTest, optionflags: int = ..., setUp: Optional[Callable[[DocTest], Any]] = ..., + tearDown: Optional[Callable[[DocTest], Any]] = ..., + checker: Optional[OutputChecker] = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + def runTest(self) -> None: ... + def format_failure(self, err: str) -> str: ... + def debug(self) -> None: ... + def id(self) -> str: ... + def __hash__(self) -> int: ... + def shortDescription(self) -> str: ... + +class SkipDocTestCase(DocTestCase): + def __init__(self, module: types.ModuleType) -> None: ... + def setUp(self) -> None: ... + def test_skip(self) -> None: ... + def shortDescription(self) -> str: ... + +if sys.version_info >= (3, 4): + class _DocTestSuite(unittest.TestSuite): ... +else: + _DocTestSuite = unittest.TestSuite + +def DocTestSuite(module: Union[None, str, types.ModuleType] = ..., globs: Optional[Dict[str, Any]] = ..., + extraglobs: Optional[Dict[str, Any]] = ..., test_finder: Optional[DocTestFinder] = ..., + **options: Any) -> _DocTestSuite: ... + +class DocFileCase(DocTestCase): + def id(self) -> str: ... + def format_failure(self, err: str) -> str: ... + +def DocFileTest(path: str, module_relative: bool = ..., package: Union[None, str, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., parser: DocTestParser = ..., + encoding: Optional[str] = ..., **options: Any) -> DocFileCase: ... +def DocFileSuite(*paths: str, **kw: Any) -> _DocTestSuite: ... +def script_from_examples(s: str) -> str: ... +def testsource(module: Union[None, str, types.ModuleType], name: str) -> str: ... +def debug_src(src: str, pm: bool = ..., globs: Optional[Dict[str, Any]] = ...) -> None: ... +def debug_script(src: str, pm: bool = ..., globs: Optional[Dict[str, Any]] = ...) -> None: ... +def debug(module: Union[None, str, types.ModuleType], name: str, pm: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/errno.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/errno.pyi new file mode 100644 index 0000000..14987bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/errno.pyi @@ -0,0 +1,130 @@ +# Stubs for errno + +from typing import Mapping +import sys + +errorcode: Mapping[int, str] + +EPERM: int +ENOENT: int +ESRCH: int +EINTR: int +EIO: int +ENXIO: int +E2BIG: int +ENOEXEC: int +EBADF: int +ECHILD: int +EAGAIN: int +ENOMEM: int +EACCES: int +EFAULT: int +ENOTBLK: int +EBUSY: int +EEXIST: int +EXDEV: int +ENODEV: int +ENOTDIR: int +EISDIR: int +EINVAL: int +ENFILE: int +EMFILE: int +ENOTTY: int +ETXTBSY: int +EFBIG: int +ENOSPC: int +ESPIPE: int +EROFS: int +EMLINK: int +EPIPE: int +EDOM: int +ERANGE: int +EDEADLCK: int +ENAMETOOLONG: int +ENOLCK: int +ENOSYS: int +ENOTEMPTY: int +ELOOP: int +EWOULDBLOCK: int +ENOMSG: int +EIDRM: int +ECHRNG: int +EL2NSYNC: int +EL3HLT: int +EL3RST: int +ELNRNG: int +EUNATCH: int +ENOCSI: int +EL2HLT: int +EBADE: int +EBADR: int +EXFULL: int +ENOANO: int +EBADRQC: int +EBADSLT: int +EDEADLOCK: int +EBFONT: int +ENOSTR: int +ENODATA: int +ETIME: int +ENOSR: int +ENONET: int +ENOPKG: int +EREMOTE: int +ENOLINK: int +EADV: int +ESRMNT: int +ECOMM: int +EPROTO: int +EMULTIHOP: int +EDOTDOT: int +EBADMSG: int +EOVERFLOW: int +ENOTUNIQ: int +EBADFD: int +EREMCHG: int +ELIBACC: int +ELIBBAD: int +ELIBSCN: int +ELIBMAX: int +ELIBEXEC: int +EILSEQ: int +ERESTART: int +ESTRPIPE: int +EUSERS: int +ENOTSOCK: int +EDESTADDRREQ: int +EMSGSIZE: int +EPROTOTYPE: int +ENOPROTOOPT: int +EPROTONOSUPPORT: int +ESOCKTNOSUPPORT: int +ENOTSUP: int +EOPNOTSUPP: int +EPFNOSUPPORT: int +EAFNOSUPPORT: int +EADDRINUSE: int +EADDRNOTAVAIL: int +ENETDOWN: int +ENETUNREACH: int +ENETRESET: int +ECONNABORTED: int +ECONNRESET: int +ENOBUFS: int +EISCONN: int +ENOTCONN: int +ESHUTDOWN: int +ETOOMANYREFS: int +ETIMEDOUT: int +ECONNREFUSED: int +EHOSTDOWN: int +EHOSTUNREACH: int +EALREADY: int +EINPROGRESS: int +ESTALE: int +EUCLEAN: int +ENOTNAM: int +ENAVAIL: int +EISNAM: int +EREMOTEIO: int +EDQUOT: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi new file mode 100644 index 0000000..57a8846 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi @@ -0,0 +1,48 @@ +# Stubs for filecmp (Python 2/3) +import sys +from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Sequence, Tuple, Union, Text + +DEFAULT_IGNORES: List[str] + +def cmp(f1: Union[bytes, Text], f2: Union[bytes, Text], shallow: Union[int, bool] = ...) -> bool: ... +def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], + shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... + +class dircmp(Generic[AnyStr]): + def __init__(self, a: AnyStr, b: AnyStr, + ignore: Optional[Sequence[AnyStr]] = ..., + hide: Optional[Sequence[AnyStr]] = ...) -> None: ... + + left: AnyStr + right: AnyStr + hide: Sequence[AnyStr] + ignore: Sequence[AnyStr] + + # These properties are created at runtime by __getattr__ + subdirs: Dict[AnyStr, dircmp[AnyStr]] + same_files: List[AnyStr] + diff_files: List[AnyStr] + funny_files: List[AnyStr] + common_dirs: List[AnyStr] + common_files: List[AnyStr] + common_funny: List[AnyStr] + common: List[AnyStr] + left_only: List[AnyStr] + right_only: List[AnyStr] + left_list: List[AnyStr] + right_list: List[AnyStr] + + def report(self) -> None: ... + def report_partial_closure(self) -> None: ... + def report_full_closure(self) -> None: ... + + methodmap: Dict[str, Callable[[], None]] + def phase0(self) -> None: ... + def phase1(self) -> None: ... + def phase2(self) -> None: ... + def phase3(self) -> None: ... + def phase4(self) -> None: ... + def phase4_closure(self) -> None: ... + +if sys.version_info >= (3,): + def clear_cache() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi new file mode 100644 index 0000000..0eb8ca9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi @@ -0,0 +1,62 @@ +from typing import Iterable, Callable, IO, AnyStr, Generic, Any, Text, Union, Iterator, Optional + +import os +import sys + +if sys.version_info >= (3, 6): + _Path = Union[Text, bytes, os.PathLike[Any]] +else: + _Path = Union[Text, bytes] + + +def input( + files: Union[_Path, Iterable[_Path], None] = ..., + inplace: bool = ..., + backup: str = ..., + bufsize: int = ..., + mode: str = ..., + openhook: Callable[[_Path, str], IO[AnyStr]] = ...) -> FileInput[AnyStr]: ... + + +def close() -> None: ... +def nextfile() -> None: ... +def filename() -> str: ... +def lineno() -> int: ... +def filelineno() -> int: ... +def fileno() -> int: ... +def isfirstline() -> bool: ... +def isstdin() -> bool: ... + +class FileInput(Iterable[AnyStr], Generic[AnyStr]): + def __init__( + self, + files: Union[None, _Path, Iterable[_Path]] = ..., + inplace: bool = ..., + backup: str = ..., + bufsize: int = ..., + mode: str = ..., + openhook: Callable[[_Path, str], IO[AnyStr]] = ... + ) -> None: ... + + def __del__(self) -> None: ... + def close(self) -> None: ... + if sys.version_info >= (3, 2): + def __enter__(self) -> FileInput[AnyStr]: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __next__(self) -> AnyStr: ... + def __getitem__(self, i: int) -> AnyStr: ... + def nextfile(self) -> None: ... + def readline(self) -> AnyStr: ... + def filename(self) -> str: ... + def lineno(self) -> int: ... + def filelineno(self) -> int: ... + def fileno(self) -> int: ... + def isfirstline(self) -> bool: ... + def isstdin(self) -> bool: ... + +def hook_compressed(filename: _Path, mode: str) -> IO[Any]: ... +if sys.version_info >= (3, 6): + def hook_encoded(encoding: str, errors: Optional[str] = ...) -> Callable[[_Path, str], IO[Any]]: ... +else: + def hook_encoded(encoding: str) -> Callable[[_Path, str], IO[Any]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi new file mode 100644 index 0000000..77a4956 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi @@ -0,0 +1,105 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/formatter.py +# and https://github.com/python/cpython/blob/master/Lib/formatter.py +from typing import Any, IO, List, Optional, Tuple + +AS_IS = None +_FontType = Tuple[str, bool, bool, bool] +_StylesType = Tuple[Any, ...] + +class NullFormatter: + writer: Optional[NullWriter] + def __init__(self, writer: Optional[NullWriter] = ...) -> None: ... + def end_paragraph(self, blankline: int) -> None: ... + def add_line_break(self) -> None: ... + def add_hor_rule(self, *args, **kw) -> None: ... + def add_label_data(self, format, counter: int, blankline: Optional[int] = ...) -> None: ... + def add_flowing_data(self, data: str) -> None: ... + def add_literal_data(self, data: str) -> None: ... + def flush_softspace(self) -> None: ... + def push_alignment(self, align: Optional[str]) -> None: ... + def pop_alignment(self) -> None: ... + def push_font(self, x: _FontType) -> None: ... + def pop_font(self) -> None: ... + def push_margin(self, margin: int) -> None: ... + def pop_margin(self) -> None: ... + def set_spacing(self, spacing: Optional[str]) -> None: ... + def push_style(self, *styles: _StylesType) -> None: ... + def pop_style(self, n: int = ...) -> None: ... + def assert_line_data(self, flag: int = ...) -> None: ... + +class AbstractFormatter: + writer: NullWriter + align: Optional[str] + align_stack: List[Optional[str]] + font_stack: List[_FontType] + margin_stack: List[int] + spacing: Optional[str] + style_stack: Any + nospace: int + softspace: int + para_end: int + parskip: int + hard_break: int + have_label: int + def __init__(self, writer: NullWriter) -> None: ... + def end_paragraph(self, blankline: int) -> None: ... + def add_line_break(self) -> None: ... + def add_hor_rule(self, *args, **kw) -> None: ... + def add_label_data(self, format, counter: int, blankline: Optional[int] = ...) -> None: ... + def format_counter(self, format, counter: int) -> str: ... + def format_letter(self, case: str, counter: int) -> str: ... + def format_roman(self, case: str, counter: int) -> str: ... + def add_flowing_data(self, data: str) -> None: ... + def add_literal_data(self, data: str) -> None: ... + def flush_softspace(self) -> None: ... + def push_alignment(self, align: Optional[str]) -> None: ... + def pop_alignment(self) -> None: ... + def push_font(self, font: _FontType) -> None: ... + def pop_font(self) -> None: ... + def push_margin(self, margin: int) -> None: ... + def pop_margin(self) -> None: ... + def set_spacing(self, spacing: Optional[str]) -> None: ... + def push_style(self, *styles: _StylesType) -> None: ... + def pop_style(self, n: int = ...) -> None: ... + def assert_line_data(self, flag: int = ...) -> None: ... + +class NullWriter: + def __init__(self) -> None: ... + def flush(self) -> None: ... + def new_alignment(self, align: Optional[str]) -> None: ... + def new_font(self, font: _FontType) -> None: ... + def new_margin(self, margin: int, level: int) -> None: ... + def new_spacing(self, spacing: Optional[str]) -> None: ... + def new_styles(self, styles) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_label_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + def send_literal_data(self, data: str) -> None: ... + +class AbstractWriter(NullWriter): + def new_alignment(self, align: Optional[str]) -> None: ... + def new_font(self, font: _FontType) -> None: ... + def new_margin(self, margin: int, level: int) -> None: ... + def new_spacing(self, spacing: Optional[str]) -> None: ... + def new_styles(self, styles) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_label_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + def send_literal_data(self, data: str) -> None: ... + +class DumbWriter(NullWriter): + file: IO + maxcol: int + def __init__(self, file: Optional[IO] = ..., maxcol: int = ...) -> None: ... + def reset(self) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_literal_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + +def test(file: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi new file mode 100644 index 0000000..8bebe5f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi @@ -0,0 +1,96 @@ +# Stubs for fractions +# See https://docs.python.org/3/library/fractions.html +# +# Note: these stubs are incomplete. The more complex type +# signatures are currently omitted. Also see numbers.pyi. + +from typing import Optional, TypeVar, Union, overload, Any +from numbers import Real, Integral, Rational +from decimal import Decimal +import sys + +_ComparableNum = Union[int, float, Decimal, Real] + + +@overload +def gcd(a: int, b: int) -> int: ... +@overload +def gcd(a: Integral, b: int) -> Integral: ... +@overload +def gcd(a: int, b: Integral) -> Integral: ... +@overload +def gcd(a: Integral, b: Integral) -> Integral: ... + + +class Fraction(Rational): + @overload + def __init__(self, + numerator: Union[int, Rational] = ..., + denominator: Optional[Union[int, Rational]] = ..., + *, + _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: float, *, _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: Decimal, *, _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: str, *, _normalize: bool = ...) -> None: ... + + @classmethod + def from_float(cls, f: float) -> Fraction: ... + @classmethod + def from_decimal(cls, dec: Decimal) -> Fraction: ... + def limit_denominator(self, max_denominator: int = ...) -> Fraction: ... + + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + + def __add__(self, other): ... + def __radd__(self, other): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __truediv__(self, other): ... + def __rtruediv__(self, other): ... + if sys.version_info < (3, 0): + def __div__(self, other): ... + def __rdiv__(self, other): ... + def __floordiv__(self, other) -> int: ... + def __rfloordiv__(self, other) -> int: ... + def __mod__(self, other): ... + def __rmod__(self, other): ... + def __divmod__(self, other): ... + def __rdivmod__(self, other): ... + def __pow__(self, other): ... + def __rpow__(self, other): ... + + def __pos__(self) -> Fraction: ... + def __neg__(self) -> Fraction: ... + def __abs__(self) -> Fraction: ... + def __trunc__(self) -> int: ... + if sys.version_info >= (3, 0): + def __floor__(self) -> int: ... + def __ceil__(self) -> int: ... + def __round__(self, ndigits: Optional[Any] = ...): ... + + def __hash__(self) -> int: ... + def __eq__(self, other: object) -> bool: ... + def __lt__(self, other: _ComparableNum) -> bool: ... + def __gt__(self, other: _ComparableNum) -> bool: ... + def __le__(self, other: _ComparableNum) -> bool: ... + def __ge__(self, other: _ComparableNum) -> bool: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + + # Not actually defined within fractions.py, but provides more useful + # overrides + @property + def real(self) -> Fraction: ... + @property + def imag(self) -> Fraction: ... + def conjugate(self) -> Fraction: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi new file mode 100644 index 0000000..dff8c47 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi @@ -0,0 +1,134 @@ +# Stubs for ftplib (Python 2.7/3) +import sys +from typing import Optional, BinaryIO, Tuple, TextIO, Iterable, Callable, List, Union, Iterator, Dict, Text, Type, TypeVar, Generic, Any +from types import TracebackType +from socket import socket +from ssl import SSLContext + +_T = TypeVar('_T') +_IntOrStr = Union[int, Text] + +MSG_OOB: int +FTP_PORT: int +MAXLINE: int +CRLF: str +if sys.version_info >= (3,): + B_CRLF: bytes + +class Error(Exception): ... +class error_reply(Error): ... +class error_temp(Error): ... +class error_perm(Error): ... +class error_proto(Error): ... + +all_errors = Tuple[Exception, ...] + +class FTP: + debugging: int + + # Note: This is technically the type that's passed in as the host argument. But to make it easier in Python 2 we + # accept Text but return str. + host: str + + port: int + maxline: int + sock: Optional[socket] + welcome: Optional[str] + passiveserver: int + timeout: int + af: int + lastresp: str + + if sys.version_info >= (3,): + file: Optional[TextIO] + encoding: str + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + else: + file: Optional[BinaryIO] + + if sys.version_info >= (3, 3): + source_address: Optional[Tuple[str, int]] + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + timeout: float = ..., source_address: Optional[Tuple[str, int]] = ...) -> None: ... + def connect(self, host: Text = ..., port: int = ..., timeout: float = ..., + source_address: Optional[Tuple[str, int]] = ...) -> str: ... + else: + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + timeout: float = ...) -> None: ... + def connect(self, host: Text = ..., port: int = ..., timeout: float = ...) -> str: ... + + def getwelcome(self) -> str: ... + def set_debuglevel(self, level: int) -> None: ... + def debug(self, level: int) -> None: ... + def set_pasv(self, val: Union[bool, int]) -> None: ... + def sanitize(self, s: Text) -> str: ... + def putline(self, line: Text) -> None: ... + def putcmd(self, line: Text) -> None: ... + def getline(self) -> str: ... + def getmultiline(self) -> str: ... + def getresp(self) -> str: ... + def voidresp(self) -> str: ... + def abort(self) -> str: ... + def sendcmd(self, cmd: Text) -> str: ... + def voidcmd(self, cmd: Text) -> str: ... + def sendport(self, host: Text, port: int) -> str: ... + def sendeprt(self, host: Text, port: int) -> str: ... + def makeport(self) -> socket: ... + def makepasv(self) -> Tuple[str, int]: ... + def login(self, user: Text = ..., passwd: Text = ..., acct: Text = ...) -> str: ... + + # In practice, `rest` rest can actually be anything whose str() is an integer sequence, so to make it simple we allow integers. + def ntransfercmd(self, cmd: Text, rest: Optional[_IntOrStr] = ...) -> Tuple[socket, int]: ... + def transfercmd(self, cmd: Text, rest: Optional[_IntOrStr] = ...) -> socket: ... + def retrbinary(self, cmd: Text, callback: Callable[[bytes], Any], blocksize: int = ..., rest: Optional[_IntOrStr] = ...) -> str: ... + def storbinary(self, cmd: Text, fp: BinaryIO, blocksize: int = ..., callback: Optional[Callable[[bytes], Any]] = ..., rest: Optional[_IntOrStr] = ...) -> str: ... + + def retrlines(self, cmd: Text, callback: Optional[Callable[[str], Any]] = ...) -> str: ... + def storlines(self, cmd: Text, fp: BinaryIO, callback: Optional[Callable[[bytes], Any]] = ...) -> str: ... + + def acct(self, password: Text) -> str: ... + def nlst(self, *args: Text) -> List[str]: ... + + # Technically only the last arg can be a Callable but ... + def dir(self, *args: Union[str, Callable[[str], None]]) -> None: ... + + if sys.version_info >= (3, 3): + def mlsd(self, path: Text = ..., facts: Iterable[str] = ...) -> Iterator[Tuple[str, Dict[str, str]]]: ... + def rename(self, fromname: Text, toname: Text) -> str: ... + def delete(self, filename: Text) -> str: ... + def cwd(self, dirname: Text) -> str: ... + def size(self, filename: Text) -> str: ... + def mkd(self, dirname: Text) -> str: ... + def rmd(self, dirname: Text) -> str: ... + def pwd(self) -> str: ... + def quit(self) -> str: ... + def close(self) -> None: ... + +class FTP_TLS(FTP): + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + context: Optional[SSLContext] = ..., timeout: float = ..., + source_address: Optional[Tuple[str, int]] = ...) -> None: ... + + ssl_version: int + keyfile: Optional[str] + certfile: Optional[str] + context: SSLContext + + def login(self, user: Text = ..., passwd: Text = ..., acct: Text = ..., secure: bool = ...) -> str: ... + def auth(self) -> str: ... + def prot_p(self) -> str: ... + def prot_c(self) -> str: ... + + if sys.version_info >= (3, 3): + def ccc(self) -> str: ... + +if sys.version_info < (3,): + class Netrc: + def __init__(self, filename: Optional[Text] = ...) -> None: ... + def get_hosts(self) -> List[str]: ... + def get_account(self, host: Text) -> Tuple[Optional[str], Optional[str], Optional[str]]: ... + def get_macros(self) -> List[str]: ... + def get_macro(self, macro: Text) -> Tuple[str, ...]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi new file mode 100644 index 0000000..e0b1c6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi @@ -0,0 +1,21 @@ +from typing import Sequence, AnyStr, Text +import sys + +if sys.version_info >= (3, 0): + def commonprefix(m: Sequence[str]) -> str: ... +else: + def commonprefix(m: Sequence[AnyStr]) -> AnyStr: ... + +def exists(path: Text) -> bool: ... +def isfile(path: Text) -> bool: ... +def isdir(s: Text) -> bool: ... +def getsize(filename: Text) -> int: ... +def getmtime(filename: Text) -> float: ... +def getatime(filename: Text) -> float: ... +def getctime(filename: Text) -> float: ... + + +if sys.version_info >= (3, 4): + def samestat(s1: str, s2: str) -> int: ... + def samefile(f1: str, f2: str) -> int: ... + def sameopenfile(fp1: str, fp2: str) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/grp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/grp.pyi new file mode 100644 index 0000000..6054727 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/grp.pyi @@ -0,0 +1,10 @@ +from typing import List, NamedTuple, Optional + +struct_group = NamedTuple("struct_group", [("gr_name", str), + ("gr_passwd", Optional[str]), + ("gr_gid", int), + ("gr_mem", List[str])]) + +def getgrall() -> List[struct_group]: ... +def getgrgid(gid: int) -> struct_group: ... +def getgrnam(name: str) -> struct_group: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi new file mode 100644 index 0000000..47bbc7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi @@ -0,0 +1,38 @@ +# Stubs for hmac + +from typing import Any, Callable, Optional, Union, overload, AnyStr +from types import ModuleType +import sys + +_B = Union[bytes, bytearray] + +# TODO more precise type for object of hashlib +_Hash = Any + +digest_size: None + +if sys.version_info >= (3, 4): + def new(key: _B, msg: Optional[_B] = ..., + digestmod: Optional[Union[str, Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ... +else: + def new(key: _B, msg: Optional[_B] = ..., + digestmod: Optional[Union[Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ... + +class HMAC: + if sys.version_info >= (3,): + digest_size: int + if sys.version_info >= (3, 4): + block_size: int + name: str + def update(self, msg: _B) -> None: ... + def digest(self) -> bytes: ... + def hexdigest(self) -> str: ... + def copy(self) -> HMAC: ... + +@overload +def compare_digest(a: bytearray, b: bytearray) -> bool: ... +@overload +def compare_digest(a: AnyStr, b: AnyStr) -> bool: ... + +if sys.version_info >= (3, 7): + def digest(key: _B, msg: _B, digest: str) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi new file mode 100644 index 0000000..ab32e7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi @@ -0,0 +1,133 @@ +# Stubs for imaplib (Python 2) + +import imaplib +import subprocess +import sys +import time +from socket import socket as _socket +from ssl import SSLSocket +from typing import Any, Callable, Dict, IO, List, Optional, Pattern, Text, Tuple, Type, Union + +CommandResults = Tuple[str, List[Any]] + + +class IMAP4: + error: Type[Exception] = ... + abort: Type[Exception] = ... + readonly: Type[Exception] = ... + mustquote: Pattern[Text] = ... + debug: int = ... + state: str = ... + literal: Optional[Text] = ... + tagged_commands: Dict[str, str] = ... + untagged_responses: Dict[str, str] = ... + continuation_response: str = ... + is_readonly: bool = ... + tagnum: int = ... + tagpre: str = ... + tagre: Pattern[Text] = ... + welcome: bytes = ... + capabilities: Tuple[str] = ... + PROTOCOL_VERSION: str = ... + def __init__(self, host: str, port: int) -> None: ... + def __getattr__(self, attr: str) -> Any: ... + host: str = ... + port: int = ... + sock: _socket = ... + file: Union[IO[Text], IO[bytes]] = ... + def open(self, host: str = ..., port: int = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + def socket(self) -> _socket: ... + def recent(self) -> CommandResults: ... + def response(self, code: str) -> CommandResults: ... + def append(self, mailbox: str, flags: str, date_time: str, message: str) -> str: ... + def authenticate(self, mechanism: str, authobject: Callable) -> Tuple[str, str]: ... + def capability(self) -> CommandResults: ... + def check(self) -> CommandResults: ... + def close(self) -> CommandResults: ... + def copy(self, message_set: str, new_mailbox: str) -> CommandResults: ... + def create(self, mailbox: str) -> CommandResults: ... + def delete(self, mailbox: str) -> CommandResults: ... + def deleteacl(self, mailbox: str, who: str) -> CommandResults: ... + def expunge(self) -> CommandResults: ... + def fetch(self, message_set: str, message_parts: str) -> CommandResults: ... + def getacl(self, mailbox: str) -> CommandResults: ... + def getannotation(self, mailbox: str, entry: str, attribute: str) -> CommandResults: ... + def getquota(self, root: str) -> CommandResults: ... + def getquotaroot(self, mailbox: str) -> CommandResults: ... + def list(self, directory: str = ..., pattern: str = ...) -> CommandResults: ... + def login(self, user: str, password: str) -> CommandResults: ... + def login_cram_md5(self, user: str, password: str) -> CommandResults: ... + def logout(self) -> CommandResults: ... + def lsub(self, directory: str = ..., pattern: str = ...) -> CommandResults: ... + def myrights(self, mailbox: str) -> CommandResults: ... + def namespace(self) -> CommandResults: ... + def noop(self) -> CommandResults: ... + def partial(self, message_num: str, message_part: str, start: str, length: str) -> CommandResults: ... + def proxyauth(self, user: str) -> CommandResults: ... + def rename(self, oldmailbox: str, newmailbox: str) -> CommandResults: ... + def search(self, charset: Optional[str], *criteria: str) -> CommandResults: ... + def select(self, mailbox: str = ..., readonly: bool = ...) -> CommandResults: ... + def setacl(self, mailbox: str, who: str, what: str) -> CommandResults: ... + def setannotation(self, *args: List[str]) -> CommandResults: ... + def setquota(self, root: str, limits: str) -> CommandResults: ... + def sort(self, sort_criteria: str, charset: str, *search_criteria: List[str]) -> CommandResults: ... + if sys.version_info >= (3,): + def starttls(self, ssl_context: Optional[Any] = ...) -> CommandResults: ... + def status(self, mailbox: str, names: str) -> CommandResults: ... + def store(self, message_set: str, command: str, flags: str) -> CommandResults: ... + def subscribe(self, mailbox: str) -> CommandResults: ... + def thread(self, threading_algorithm: str, charset: str, *search_criteria: List[str]) -> CommandResults: ... + def uid(self, command: str, *args: List[str]) -> CommandResults: ... + def unsubscribe(self, mailbox: str) -> CommandResults: ... + def xatom(self, name: str, *args: List[str]) -> CommandResults: ... + def print_log(self) -> None: ... + +class IMAP4_SSL(IMAP4): + keyfile: str = ... + certfile: str = ... + def __init__(self, host: str = ..., port: int = ..., keyfile: Optional[str] = ..., certfile: Optional[str] = ...) -> None: ... + host: str = ... + port: int = ... + sock: _socket = ... + sslobj: SSLSocket = ... + file: IO[Any] = ... + def open(self, host: str = ..., port: Optional[int] = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + def socket(self) -> _socket: ... + def ssl(self) -> SSLSocket: ... + + +class IMAP4_stream(IMAP4): + command: str = ... + def __init__(self, command: str) -> None: ... + host: str = ... + port: int = ... + sock: _socket = ... + file: IO[Any] = ... + process: subprocess.Popen = ... + writefile: IO[Any] = ... + readfile: IO[Any] = ... + def open(self, host: str = ..., port: Optional[int] = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + +class _Authenticator: + mech: Callable = ... + def __init__(self, mechinst: Callable) -> None: ... + def process(self, data: str) -> str: ... + def encode(self, inp: bytes) -> str: ... + def decode(self, inp: str) -> bytes: ... + +def Internaldate2tuple(resp: str) -> time.struct_time: ... +def Int2AP(num: int) -> str: ... +def ParseFlags(resp: str) -> Tuple[str]: ... +def Time2Internaldate(date_time: Union[float, time.struct_time, str]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi new file mode 100644 index 0000000..b9d8d17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi @@ -0,0 +1,16 @@ +from typing import overload, Union, Text, BinaryIO, Optional, Any, List, Callable +import sys +import os + + +if sys.version_info >= (3, 6): + _File = Union[Text, os.PathLike[Text], BinaryIO] +else: + _File = Union[Text, BinaryIO] + + +@overload +def what(file: _File) -> Optional[str]: ... +@overload +def what(file: Any, h: bytes) -> Optional[str]: ... +tests: List[Callable[[bytes, BinaryIO], Optional[str]]] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi new file mode 100644 index 0000000..f9e3376 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi @@ -0,0 +1,6 @@ +# Stubs for keyword + +from typing import Sequence, Text, Union + +def iskeyword(s: Union[Text, bytes]) -> bool: ... +kwlist: Sequence[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi new file mode 100644 index 0000000..145e31b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi @@ -0,0 +1 @@ +# Stubs for lib2to3 (Python 3.6) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi new file mode 100644 index 0000000..1adc82a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi @@ -0,0 +1,10 @@ +# Stubs for lib2to3.pgen2 (Python 3.6) + +import os +import sys +from typing import Text, Union + +if sys.version_info >= (3, 6): + _Path = Union[Text, os.PathLike] +else: + _Path = Text diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi new file mode 100644 index 0000000..56785f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi @@ -0,0 +1,24 @@ +# Stubs for lib2to3.pgen2.driver (Python 3.6) + +import os +import sys +from typing import Any, Callable, IO, Iterable, List, Optional, Text, Tuple, Union + +from logging import Logger +from lib2to3.pytree import _Convert, _NL +from lib2to3.pgen2 import _Path +from lib2to3.pgen2.grammar import Grammar + + +class Driver: + grammar: Grammar + logger: Logger + convert: _Convert + def __init__(self, grammar: Grammar, convert: Optional[_Convert] = ..., logger: Optional[Logger] = ...) -> None: ... + def parse_tokens(self, tokens: Iterable[Any], debug: bool = ...) -> _NL: ... + def parse_stream_raw(self, stream: IO[Text], debug: bool = ...) -> _NL: ... + def parse_stream(self, stream: IO[Text], debug: bool = ...) -> _NL: ... + def parse_file(self, filename: _Path, encoding: Optional[Text] = ..., debug: bool = ...) -> _NL: ... + def parse_string(self, text: Text, debug: bool = ...) -> _NL: ... + +def load_grammar(gt: Text = ..., gp: Optional[Text] = ..., save: bool = ..., force: bool = ..., logger: Optional[Logger] = ...) -> Grammar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi new file mode 100644 index 0000000..122d771 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi @@ -0,0 +1,29 @@ +# Stubs for lib2to3.pgen2.grammar (Python 3.6) + +from lib2to3.pgen2 import _Path + +from typing import Any, Dict, List, Optional, Text, Tuple, TypeVar + +_P = TypeVar('_P') +_Label = Tuple[int, Optional[Text]] +_DFA = List[List[Tuple[int, int]]] +_DFAS = Tuple[_DFA, Dict[int, int]] + +class Grammar: + symbol2number: Dict[Text, int] + number2symbol: Dict[int, Text] + states: List[_DFA] + dfas: Dict[int, _DFAS] + labels: List[_Label] + keywords: Dict[Text, int] + tokens: Dict[int, int] + symbol2label: Dict[Text, int] + start: int + def __init__(self) -> None: ... + def dump(self, filename: _Path) -> None: ... + def load(self, filename: _Path) -> None: ... + def copy(self: _P) -> _P: ... + def report(self) -> None: ... + +opmap_raw: Text +opmap: Dict[Text, Text] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi new file mode 100644 index 0000000..8719500 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi @@ -0,0 +1,9 @@ +# Stubs for lib2to3.pgen2.literals (Python 3.6) + +from typing import Dict, Match, Text + +simple_escapes: Dict[Text, Text] + +def escape(m: Match) -> Text: ... +def evalString(s: Text) -> Text: ... +def test() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi new file mode 100644 index 0000000..101d476 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi @@ -0,0 +1,29 @@ +# Stubs for lib2to3.pgen2.parse (Python 3.6) + +from typing import Any, Dict, List, Optional, Sequence, Set, Text, Tuple + +from lib2to3.pgen2.grammar import Grammar, _DFAS +from lib2to3.pytree import _NL, _Convert, _RawNode + +_Context = Sequence[Any] + +class ParseError(Exception): + msg: Text + type: int + value: Optional[Text] + context: _Context + def __init__(self, msg: Text, type: int, value: Optional[Text], context: _Context) -> None: ... + +class Parser: + grammar: Grammar + convert: _Convert + stack: List[Tuple[_DFAS, int, _RawNode]] + rootnode: Optional[_NL] + used_names: Set[Text] + def __init__(self, grammar: Grammar, convert: Optional[_Convert] = ...) -> None: ... + def setup(self, start: Optional[int] = ...) -> None: ... + def addtoken(self, type: int, value: Optional[Text], context: _Context) -> bool: ... + def classify(self, type: int, value: Optional[Text], context: _Context) -> int: ... + def shift(self, type: int, value: Optional[Text], newstate: int, context: _Context) -> None: ... + def push(self, type: int, newdfa: _DFAS, newstate: int, context: _Context) -> None: ... + def pop(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi new file mode 100644 index 0000000..42d503b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi @@ -0,0 +1,50 @@ +# Stubs for lib2to3.pgen2.pgen (Python 3.6) + +from typing import ( + Any, Dict, IO, Iterable, Iterator, List, NoReturn, Optional, Text, Tuple +) + +from lib2to3.pgen2 import _Path, grammar +from lib2to3.pgen2.tokenize import _TokenInfo + +class PgenGrammar(grammar.Grammar): ... + +class ParserGenerator: + filename: _Path + stream: IO[Text] + generator: Iterator[_TokenInfo] + first: Dict[Text, Dict[Text, int]] + def __init__(self, filename: _Path, stream: Optional[IO[Text]] = ...) -> None: ... + def make_grammar(self) -> PgenGrammar: ... + def make_first(self, c: PgenGrammar, name: Text) -> Dict[int, int]: ... + def make_label(self, c: PgenGrammar, label: Text) -> int: ... + def addfirstsets(self) -> None: ... + def calcfirst(self, name: Text) -> None: ... + def parse(self) -> Tuple[Dict[Text, List[DFAState]], Text]: ... + def make_dfa(self, start: NFAState, finish: NFAState) -> List[DFAState]: ... + def dump_nfa(self, name: Text, start: NFAState, finish: NFAState) -> List[DFAState]: ... + def dump_dfa(self, name: Text, dfa: Iterable[DFAState]) -> None: ... + def simplify_dfa(self, dfa: List[DFAState]) -> None: ... + def parse_rhs(self) -> Tuple[NFAState, NFAState]: ... + def parse_alt(self) -> Tuple[NFAState, NFAState]: ... + def parse_item(self) -> Tuple[NFAState, NFAState]: ... + def parse_atom(self) -> Tuple[NFAState, NFAState]: ... + def expect(self, type: int, value: Optional[Any] = ...) -> Text: ... + def gettoken(self) -> None: ... + def raise_error(self, msg: str, *args: Any) -> NoReturn: ... + +class NFAState: + arcs: List[Tuple[Optional[Text], NFAState]] + def __init__(self) -> None: ... + def addarc(self, next: NFAState, label: Optional[Text] = ...) -> None: ... + +class DFAState: + nfaset: Dict[NFAState, Any] + isfinal: bool + arcs: Dict[Text, DFAState] + def __init__(self, nfaset: Dict[NFAState, Any], final: NFAState) -> None: ... + def addarc(self, next: DFAState, label: Text) -> None: ... + def unifystate(self, old: DFAState, new: DFAState) -> None: ... + def __eq__(self, other: Any) -> bool: ... + +def generate_grammar(filename: _Path = ...) -> PgenGrammar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi new file mode 100644 index 0000000..c256af8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi @@ -0,0 +1,73 @@ +# Stubs for lib2to3.pgen2.token (Python 3.6) + +import sys +from typing import Dict, Text + +ENDMARKER: int +NAME: int +NUMBER: int +STRING: int +NEWLINE: int +INDENT: int +DEDENT: int +LPAR: int +RPAR: int +LSQB: int +RSQB: int +COLON: int +COMMA: int +SEMI: int +PLUS: int +MINUS: int +STAR: int +SLASH: int +VBAR: int +AMPER: int +LESS: int +GREATER: int +EQUAL: int +DOT: int +PERCENT: int +BACKQUOTE: int +LBRACE: int +RBRACE: int +EQEQUAL: int +NOTEQUAL: int +LESSEQUAL: int +GREATEREQUAL: int +TILDE: int +CIRCUMFLEX: int +LEFTSHIFT: int +RIGHTSHIFT: int +DOUBLESTAR: int +PLUSEQUAL: int +MINEQUAL: int +STAREQUAL: int +SLASHEQUAL: int +PERCENTEQUAL: int +AMPEREQUAL: int +VBAREQUAL: int +CIRCUMFLEXEQUAL: int +LEFTSHIFTEQUAL: int +RIGHTSHIFTEQUAL: int +DOUBLESTAREQUAL: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +OP: int +COMMENT: int +NL: int +if sys.version_info >= (3,): + RARROW: int +if sys.version_info >= (3, 5): + AT: int + ATEQUAL: int + AWAIT: int + ASYNC: int +ERRORTOKEN: int +N_TOKENS: int +NT_OFFSET: int +tok_name: Dict[int, Text] + +def ISTERMINAL(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISEOF(x: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi new file mode 100644 index 0000000..c10305f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi @@ -0,0 +1,30 @@ +# Stubs for lib2to3.pgen2.tokenize (Python 3.6) +# NOTE: Only elements from __all__ are present. + +from typing import Callable, Iterable, Iterator, List, Text, Tuple +from lib2to3.pgen2.token import * # noqa + + +_Coord = Tuple[int, int] +_TokenEater = Callable[[int, Text, _Coord, _Coord, Text], None] +_TokenInfo = Tuple[int, Text, _Coord, _Coord, Text] + + +class TokenError(Exception): ... +class StopTokenizing(Exception): ... + +def tokenize(readline: Callable[[], Text], tokeneater: _TokenEater = ...) -> None: ... + +class Untokenizer: + tokens: List[Text] + prev_row: int + prev_col: int + def __init__(self) -> None: ... + def add_whitespace(self, start: _Coord) -> None: ... + def untokenize(self, iterable: Iterable[_TokenInfo]) -> Text: ... + def compat(self, token: Tuple[int, Text], iterable: Iterable[_TokenInfo]) -> None: ... + +def untokenize(iterable: Iterable[_TokenInfo]) -> Text: ... +def generate_tokens( + readline: Callable[[], Text] +) -> Iterator[_TokenInfo]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi new file mode 100644 index 0000000..aeb7b93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi @@ -0,0 +1,116 @@ +# Stubs for lib2to3.pygram (Python 3.6) + +from typing import Any +from lib2to3.pgen2.grammar import Grammar + +class Symbols: + def __init__(self, grammar: Grammar) -> None: ... + +class python_symbols(Symbols): + and_expr: int + and_test: int + annassign: int + arglist: int + argument: int + arith_expr: int + assert_stmt: int + async_funcdef: int + async_stmt: int + atom: int + augassign: int + break_stmt: int + classdef: int + comp_for: int + comp_if: int + comp_iter: int + comp_op: int + comparison: int + compound_stmt: int + continue_stmt: int + decorated: int + decorator: int + decorators: int + del_stmt: int + dictsetmaker: int + dotted_as_name: int + dotted_as_names: int + dotted_name: int + encoding_decl: int + eval_input: int + except_clause: int + exec_stmt: int + expr: int + expr_stmt: int + exprlist: int + factor: int + file_input: int + flow_stmt: int + for_stmt: int + funcdef: int + global_stmt: int + if_stmt: int + import_as_name: int + import_as_names: int + import_from: int + import_name: int + import_stmt: int + lambdef: int + listmaker: int + not_test: int + old_lambdef: int + old_test: int + or_test: int + parameters: int + pass_stmt: int + power: int + print_stmt: int + raise_stmt: int + return_stmt: int + shift_expr: int + simple_stmt: int + single_input: int + sliceop: int + small_stmt: int + star_expr: int + stmt: int + subscript: int + subscriptlist: int + suite: int + term: int + test: int + testlist: int + testlist1: int + testlist_gexp: int + testlist_safe: int + testlist_star_expr: int + tfpdef: int + tfplist: int + tname: int + trailer: int + try_stmt: int + typedargslist: int + varargslist: int + vfpdef: int + vfplist: int + vname: int + while_stmt: int + with_item: int + with_stmt: int + with_var: int + xor_expr: int + yield_arg: int + yield_expr: int + yield_stmt: int + +class pattern_symbols(Symbols): + Alternative: int + Alternatives: int + Details: int + Matcher: int + NegatedUnit: int + Repeater: int + Unit: int + +python_grammar: Grammar +python_grammar_no_print_statement: Grammar +pattern_grammar: Grammar diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi new file mode 100644 index 0000000..06a7c12 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi @@ -0,0 +1,86 @@ +# Stubs for lib2to3.pytree (Python 3.6) + +import sys +from typing import Any, Callable, Dict, Iterator, List, Optional, Text, Tuple, TypeVar, Union + +from lib2to3.pgen2.grammar import Grammar + +_P = TypeVar('_P') +_NL = Union[Node, Leaf] +_Context = Tuple[Text, int, int] +_Results = Dict[Text, _NL] +_RawNode = Tuple[int, Text, _Context, Optional[List[_NL]]] +_Convert = Callable[[Grammar, _RawNode], Any] + +HUGE: int + +def type_repr(type_num: int) -> Text: ... + +class Base: + type: int + parent: Optional[Node] + prefix: Text + children: List[_NL] + was_changed: bool + was_checked: bool + def __eq__(self, other: Any) -> bool: ... + def _eq(self: _P, other: _P) -> bool: ... + def clone(self: _P) -> _P: ... + def post_order(self) -> Iterator[_NL]: ... + def pre_order(self) -> Iterator[_NL]: ... + def replace(self, new: Union[_NL, List[_NL]]) -> None: ... + def get_lineno(self) -> int: ... + def changed(self) -> None: ... + def remove(self) -> Optional[int]: ... + @property + def next_sibling(self) -> Optional[_NL]: ... + @property + def prev_sibling(self) -> Optional[_NL]: ... + def leaves(self) -> Iterator[Leaf]: ... + def depth(self) -> int: ... + def get_suffix(self) -> Text: ... + if sys.version_info < (3,): + def get_prefix(self) -> Text: ... + def set_prefix(self, prefix: Text) -> None: ... + +class Node(Base): + fixers_applied: List[Any] + def __init__(self, type: int, children: List[_NL], context: Optional[Any] = ..., prefix: Optional[Text] = ..., fixers_applied: Optional[List[Any]] = ...) -> None: ... + def set_child(self, i: int, child: _NL) -> None: ... + def insert_child(self, i: int, child: _NL) -> None: ... + def append_child(self, child: _NL) -> None: ... + +class Leaf(Base): + lineno: int + column: int + value: Text + fixers_applied: List[Any] + def __init__(self, type: int, value: Text, context: Optional[_Context] = ..., prefix: Optional[Text] = ..., fixers_applied: List[Any] = ...) -> None: ... + +def convert(gr: Grammar, raw_node: _RawNode) -> _NL: ... + +class BasePattern: + type: int + content: Optional[Text] + name: Optional[Text] + def optimize(self) -> BasePattern: ... # sic, subclasses are free to optimize themselves into different patterns + def match(self, node: _NL, results: Optional[_Results] = ...) -> bool: ... + def match_seq(self, nodes: List[_NL], results: Optional[_Results] = ...) -> bool: ... + def generate_matches(self, nodes: List[_NL]) -> Iterator[Tuple[int, _Results]]: ... + +class LeafPattern(BasePattern): + def __init__(self, type: Optional[int] = ..., content: Optional[Text] = ..., name: Optional[Text] = ...) -> None: ... + +class NodePattern(BasePattern): + wildcards: bool + def __init__(self, type: Optional[int] = ..., content: Optional[Text] = ..., name: Optional[Text] = ...) -> None: ... + +class WildcardPattern(BasePattern): + min: int + max: int + def __init__(self, content: Optional[Text] = ..., min: int = ..., max: int = ..., name: Optional[Text] = ...) -> None: ... + +class NegatedPattern(BasePattern): + def __init__(self, content: Optional[Text] = ...) -> None: ... + +def generate_matches(patterns: List[BasePattern], nodes: List[_NL]) -> Iterator[Tuple[int, _Results]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi new file mode 100644 index 0000000..3f35f46 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi @@ -0,0 +1,12 @@ +import sys +from typing import Any, Dict, List, Optional, Text + +_ModuleGlobals = Dict[str, Any] + +def getline(filename: Text, lineno: int, module_globals: Optional[_ModuleGlobals] = ...) -> str: ... +def clearcache() -> None: ... +def getlines(filename: Text, module_globals: Optional[_ModuleGlobals] = ...) -> List[str]: ... +def checkcache(filename: Optional[Text] = ...) -> None: ... +def updatecache(filename: Text, module_globals: Optional[_ModuleGlobals] = ...) -> List[str]: ... +if sys.version_info >= (3, 5): + def lazycache(filename: Text, module_globals: _ModuleGlobals) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/locale.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/locale.pyi new file mode 100644 index 0000000..a0d7383 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/locale.pyi @@ -0,0 +1,113 @@ +# Stubs for locale + +from decimal import Decimal +from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple, Union +import sys + +# workaround for mypy#2010 +if sys.version_info < (3,): + from __builtin__ import str as _str +else: + from builtins import str as _str + +CODESET: int +D_T_FMT: int +D_FMT: int +T_FMT: int +T_FMT_AMPM: int + +DAY_1: int +DAY_2: int +DAY_3: int +DAY_4: int +DAY_5: int +DAY_6: int +DAY_7: int +ABDAY_1: int +ABDAY_2: int +ABDAY_3: int +ABDAY_4: int +ABDAY_5: int +ABDAY_6: int +ABDAY_7: int + +MON_1: int +MON_2: int +MON_3: int +MON_4: int +MON_5: int +MON_6: int +MON_7: int +MON_8: int +MON_9: int +MON_10: int +MON_11: int +MON_12: int +ABMON_1: int +ABMON_2: int +ABMON_3: int +ABMON_4: int +ABMON_5: int +ABMON_6: int +ABMON_7: int +ABMON_8: int +ABMON_9: int +ABMON_10: int +ABMON_11: int +ABMON_12: int + +RADIXCHAR: int +THOUSEP: int +YESEXPR: int +NOEXPR: int +CRNCYSTR: int + +ERA: int +ERA_D_T_FMT: int +ERA_D_FMT: int +ERA_T_FMT: int + +ALT_DIGITS: int + +LC_CTYPE: int +LC_COLLATE: int +LC_TIME: int +LC_MONETARY: int +LC_MESSAGES: int +LC_NUMERIC: int +LC_ALL: int + +CHAR_MAX: int + +class Error(Exception): ... + +def setlocale(category: int, + locale: Union[_str, Iterable[_str], None] = ...) -> _str: ... +def localeconv() -> Mapping[_str, Union[int, _str, List[int]]]: ... +def nl_langinfo(option: int) -> _str: ... +def getdefaultlocale(envvars: Tuple[_str, ...] = ...) -> Tuple[Optional[_str], Optional[_str]]: ... +def getlocale(category: int = ...) -> Sequence[_str]: ... +def getpreferredencoding(do_setlocale: bool = ...) -> _str: ... +def normalize(localename: _str) -> _str: ... +def resetlocale(category: int = ...) -> None: ... +def strcoll(string1: _str, string2: _str) -> int: ... +def strxfrm(string: _str) -> _str: ... +def format(format: _str, val: Union[float, Decimal], grouping: bool = ..., + monetary: bool = ...) -> _str: ... +if sys.version_info >= (3, 7): + def format_string(format: _str, val: Any, + grouping: bool = ..., monetary: bool = ...) -> _str: ... +else: + def format_string(format: _str, val: Any, + grouping: bool = ...) -> _str: ... +def currency(val: Union[int, float, Decimal], symbol: bool = ..., grouping: bool = ..., + international: bool = ...) -> _str: ... +if sys.version_info >= (3, 5): + def delocalize(string: _str) -> None: ... +def atof(string: _str) -> float: ... +def atoi(string: _str) -> int: ... +def str(float: float) -> _str: ... + +locale_alias: Dict[_str, _str] # undocumented +locale_encoding_alias: Dict[_str, _str] # undocumented +windows_locale: Dict[int, _str] # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi new file mode 100644 index 0000000..d736b08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi @@ -0,0 +1,433 @@ +# Stubs for logging (Python 3.4) + +from typing import ( + Any, Callable, Dict, Iterable, List, Mapping, MutableMapping, Optional, IO, + Tuple, Text, Union, overload, +) +from string import Template +from time import struct_time +from types import TracebackType, FrameType +import sys +import threading + +_SysExcInfoType = Union[Tuple[type, BaseException, Optional[TracebackType]], + Tuple[None, None, None]] +if sys.version_info >= (3, 5): + _ExcInfoType = Union[None, bool, _SysExcInfoType, BaseException] +else: + _ExcInfoType = Union[None, bool, _SysExcInfoType] +_ArgsType = Union[Tuple[Any, ...], Mapping[str, Any]] +_FilterType = Union[Filter, Callable[[LogRecord], int]] +_Level = Union[int, Text] +if sys.version_info >= (3, 6): + from os import PathLike + _Path = Union[str, PathLike[str]] +else: + _Path = str + +raiseExceptions: bool + +def currentframe() -> FrameType: ... + +if sys.version_info >= (3,): + _levelToName: Dict[int, str] + _nameToLevel: Dict[str, int] +else: + _levelNames: dict + +class Filterer(object): + filters: List[Filter] + def __init__(self) -> None: ... + def addFilter(self, filter: Filter) -> None: ... + def removeFilter(self, filter: Filter) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + +class Logger(Filterer): + name: str + level: int + parent: Union[Logger, PlaceHolder] + propagate: bool + handlers: List[Handler] + disabled: int + def __init__(self, name: str, level: _Level = ...) -> None: ... + def setLevel(self, level: Union[int, str]) -> None: ... + def isEnabledFor(self, lvl: int) -> bool: ... + def getEffectiveLevel(self) -> int: ... + def getChild(self, suffix: str) -> Logger: ... + if sys.version_info >= (3,): + def debug(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + fatal = critical + def log(self, level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + else: + def debug(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + warn = warning + def error(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + fatal = critical + def log(self, + level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def addFilter(self, filt: _FilterType) -> None: ... + def removeFilter(self, filt: _FilterType) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + def addHandler(self, hdlr: Handler) -> None: ... + def removeHandler(self, hdlr: Handler) -> None: ... + if sys.version_info >= (3,): + def findCaller(self, stack_info: bool = ...) -> Tuple[str, int, str, Optional[str]]: ... + else: + def findCaller(self) -> Tuple[str, int, str]: ... + def handle(self, record: LogRecord) -> None: ... + if sys.version_info >= (3,): + def makeRecord(self, name: str, lvl: int, fn: str, lno: int, msg: Any, + args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + extra: Optional[Mapping[str, Any]] = ..., + sinfo: Optional[str] = ...) -> LogRecord: ... + else: + def makeRecord(self, + name: str, lvl: int, fn: str, lno: int, msg: Any, + args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + extra: Optional[Mapping[str, Any]] = ...) -> LogRecord: ... + if sys.version_info >= (3,): + def hasHandlers(self) -> bool: ... + + +CRITICAL: int +FATAL: int +ERROR: int +WARNING: int +WARN: int +INFO: int +DEBUG: int +NOTSET: int + + +class Handler(Filterer): + level: int # undocumented + formatter: Optional[Formatter] # undocumented + lock: Optional[threading.Lock] # undocumented + name: Optional[str] # undocumented + def __init__(self, level: _Level = ...) -> None: ... + def createLock(self) -> None: ... + def acquire(self) -> None: ... + def release(self) -> None: ... + def setLevel(self, lvl: Union[int, str]) -> None: ... + def setFormatter(self, form: Formatter) -> None: ... + def addFilter(self, filt: _FilterType) -> None: ... + def removeFilter(self, filt: _FilterType) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + def flush(self) -> None: ... + def close(self) -> None: ... + def handle(self, record: LogRecord) -> None: ... + def handleError(self, record: LogRecord) -> None: ... + def format(self, record: LogRecord) -> str: ... + def emit(self, record: LogRecord) -> None: ... + + +class Formatter: + converter: Callable[[Optional[float]], struct_time] + _fmt: Optional[str] + datefmt: Optional[str] + if sys.version_info >= (3,): + _style: PercentStyle + default_time_format: str + default_msec_format: str + + if sys.version_info >= (3,): + def __init__(self, fmt: Optional[str] = ..., + datefmt: Optional[str] = ..., + style: str = ...) -> None: ... + else: + def __init__(self, + fmt: Optional[str] = ..., + datefmt: Optional[str] = ...) -> None: ... + + def format(self, record: LogRecord) -> str: ... + def formatTime(self, record: LogRecord, datefmt: str = ...) -> str: ... + def formatException(self, exc_info: _SysExcInfoType) -> str: ... + if sys.version_info >= (3,): + def formatMessage(self, record: LogRecord) -> str: ... # undocumented + def formatStack(self, stack_info: str) -> str: ... + + +class Filter: + def __init__(self, name: str = ...) -> None: ... + def filter(self, record: LogRecord) -> int: ... + + +class LogRecord: + args: _ArgsType + asctime: str + created: int + exc_info: Optional[_SysExcInfoType] + exc_text: Optional[str] + filename: str + funcName: str + levelname: str + levelno: int + lineno: int + module: str + msecs: int + message: str + msg: str + name: str + pathname: str + process: int + processName: str + relativeCreated: int + if sys.version_info >= (3,): + stack_info: Optional[str] + thread: int + threadName: str + if sys.version_info >= (3,): + def __init__(self, name: str, level: int, pathname: str, lineno: int, + msg: Any, args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + sinfo: Optional[str] = ...) -> None: ... + else: + def __init__(self, + name: str, level: int, pathname: str, lineno: int, + msg: Any, args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ...) -> None: ... + def getMessage(self) -> str: ... + + +class LoggerAdapter: + logger: Logger + extra: Mapping[str, Any] + def __init__(self, logger: Logger, extra: Mapping[str, Any]) -> None: ... + def process(self, msg: Any, kwargs: MutableMapping[str, Any]) -> Tuple[Any, MutableMapping[str, Any]]: ... + if sys.version_info >= (3,): + def debug(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def log(self, level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + else: + def debug(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def error(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def log(self, + level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def isEnabledFor(self, lvl: int) -> bool: ... + if sys.version_info >= (3,): + def getEffectiveLevel(self) -> int: ... + def setLevel(self, lvl: Union[int, str]) -> None: ... + def hasHandlers(self) -> bool: ... + + +if sys.version_info >= (3,): + def getLogger(name: Optional[str] = ...) -> Logger: ... +else: + @overload + def getLogger() -> Logger: ... + @overload + def getLogger(name: Union[Text, str]) -> Logger: ... +def getLoggerClass() -> type: ... +if sys.version_info >= (3,): + def getLogRecordFactory() -> Callable[..., LogRecord]: ... + +if sys.version_info >= (3,): + def debug(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def log(level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... +else: + def debug(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + warn = warning + def error(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def log(level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... +fatal = critical + +def disable(lvl: int) -> None: ... +def addLevelName(lvl: int, levelName: str) -> None: ... +def getLevelName(lvl: Union[int, str]) -> Any: ... + +def makeLogRecord(attrdict: Mapping[str, Any]) -> LogRecord: ... + +if sys.version_info >= (3,): + def basicConfig(*, filename: _Path = ..., filemode: str = ..., + format: str = ..., datefmt: str = ..., style: str = ..., + level: _Level = ..., stream: IO[str] = ..., + handlers: Iterable[Handler] = ...) -> None: ... +else: + @overload + def basicConfig() -> None: ... + @overload + def basicConfig(*, filename: str = ..., filemode: str = ..., + format: str = ..., datefmt: str = ..., + level: _Level = ..., stream: IO[str] = ...) -> None: ... +def shutdown() -> None: ... + +def setLoggerClass(klass: type) -> None: ... + +def captureWarnings(capture: bool) -> None: ... + +if sys.version_info >= (3,): + def setLogRecordFactory(factory: Callable[..., LogRecord]) -> None: ... + + +if sys.version_info >= (3,): + lastResort: Optional[StreamHandler] + + +class StreamHandler(Handler): + stream: IO[str] + if sys.version_info >= (3,): + terminator: str + def __init__(self, stream: Optional[IO[str]] = ...) -> None: ... + + +class FileHandler(Handler): + baseFilename: str + mode: str + encoding: Optional[str] + delay: bool + def __init__(self, filename: _Path, mode: str = ..., + encoding: Optional[str] = ..., delay: bool = ...) -> None: ... + + +class NullHandler(Handler): ... + + +class PlaceHolder: + def __init__(self, alogger: Logger) -> None: ... + def append(self, alogger: Logger) -> None: ... + + +# Below aren't in module docs but still visible + +class RootLogger(Logger): ... + +root: RootLogger + + +if sys.version_info >= (3,): + class PercentStyle(object): + default_format: str + asctime_format: str + asctime_search: str + _fmt: str + + def __init__(self, fmt: str) -> None: ... + def usesTime(self) -> bool: ... + def format(self, record: Any) -> str: ... + + class StrFormatStyle(PercentStyle): + ... + + class StringTemplateStyle(PercentStyle): + _tpl: Template + + _STYLES: Dict[str, Tuple[PercentStyle, str]] + + +BASIC_FORMAT: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi new file mode 100644 index 0000000..c8dbfdf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi @@ -0,0 +1,33 @@ +# Stubs for logging.config (Python 3.4) + +from typing import Any, Callable, Dict, Optional, IO, Union +from threading import Thread +import sys +if sys.version_info >= (3,): + from configparser import RawConfigParser +else: + from ConfigParser import RawConfigParser +if sys.version_info >= (3, 6): + from os import PathLike + +if sys.version_info >= (3, 7): + _Path = Union[str, bytes, PathLike[str]] +elif sys.version_info >= (3, 6): + _Path = Union[str, PathLike[str]] +else: + _Path = str + + +def dictConfig(config: Dict[str, Any]) -> None: ... +if sys.version_info >= (3, 4): + def fileConfig(fname: Union[_Path, IO[str], RawConfigParser], + defaults: Optional[Dict[str, str]] = ..., + disable_existing_loggers: bool = ...) -> None: ... + def listen(port: int = ..., + verify: Optional[Callable[[bytes], Optional[bytes]]] = ...) -> Thread: ... +else: + def fileConfig(fname: Union[str, IO[str]], + defaults: Optional[Dict[str, str]] = ..., + disable_existing_loggers: bool = ...) -> None: ... + def listen(port: int = ...) -> Thread: ... +def stopListening() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi new file mode 100644 index 0000000..c18ddcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi @@ -0,0 +1,213 @@ +# Stubs for logging.handlers (Python 2.4) + +import datetime +from logging import Handler, FileHandler, LogRecord +from socket import SocketType +import ssl +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple, Union, overload +if sys.version_info >= (3,): + from queue import Queue +else: + from Queue import Queue + +# TODO update socket stubs to add SocketKind +_SocketKind = int +if sys.version_info >= (3, 6): + from os import PathLike + _Path = Union[str, PathLike[str]] +else: + _Path = str + +DEFAULT_TCP_LOGGING_PORT: int +DEFAULT_UDP_LOGGING_PORT: int +DEFAULT_HTTP_LOGGING_PORT: int +DEFAULT_SOAP_LOGGING_PORT: int +SYSLOG_UDP_PORT: int +SYSLOG_TCP_PORT: int + +class WatchedFileHandler(FileHandler): + @overload + def __init__(self, filename: _Path) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str, + encoding: Optional[str]) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str, encoding: Optional[str], + delay: bool) -> None: ... + + +if sys.version_info >= (3,): + class BaseRotatingHandler(FileHandler): + terminator: str + namer: Optional[Callable[[str], str]] + rotator: Optional[Callable[[str, str], None]] + def __init__(self, filename: _Path, mode: str, + encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def rotation_filename(self, default_name: str) -> None: ... + def rotate(self, source: str, dest: str) -> None: ... + + +if sys.version_info >= (3,): + class RotatingFileHandler(BaseRotatingHandler): + def __init__(self, filename: _Path, mode: str = ..., maxBytes: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def doRollover(self) -> None: ... +else: + class RotatingFileHandler(Handler): + def __init__(self, filename: str, mode: str = ..., maxBytes: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def doRollover(self) -> None: ... + + +if sys.version_info >= (3,): + class TimedRotatingFileHandler(BaseRotatingHandler): + if sys.version_info >= (3, 4): + def __init__(self, filename: _Path, when: str = ..., + interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ..., + atTime: Optional[datetime.datetime] = ...) -> None: ... + else: + def __init__(self, + filename: str, when: str = ..., interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ...) -> None: ... + def doRollover(self) -> None: ... +else: + class TimedRotatingFileHandler(Handler): + def __init__(self, + filename: str, when: str = ..., interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ...) -> None: ... + def doRollover(self) -> None: ... + + +class SocketHandler(Handler): + retryStart: float + retryFactor: float + retryMax: float + if sys.version_info >= (3, 4): + def __init__(self, host: str, port: Optional[int]) -> None: ... + else: + def __init__(self, host: str, port: int) -> None: ... + def makeSocket(self) -> SocketType: ... + def makePickle(self, record: LogRecord) -> bytes: ... + def send(self, packet: bytes) -> None: ... + def createSocket(self) -> None: ... + + +class DatagramHandler(SocketHandler): ... + + +class SysLogHandler(Handler): + LOG_ALERT: int + LOG_CRIT: int + LOG_DEBUG: int + LOG_EMERG: int + LOG_ERR: int + LOG_INFO: int + LOG_NOTICE: int + LOG_WARNING: int + LOG_AUTH: int + LOG_AUTHPRIV: int + LOG_CRON: int + LOG_DAEMON: int + LOG_FTP: int + LOG_KERN: int + LOG_LPR: int + LOG_MAIL: int + LOG_NEWS: int + LOG_SYSLOG: int + LOG_USER: int + LOG_UUCP: int + LOG_LOCAL0: int + LOG_LOCAL1: int + LOG_LOCAL2: int + LOG_LOCAL3: int + LOG_LOCAL4: int + LOG_LOCAL5: int + LOG_LOCAL6: int + LOG_LOCAL7: int + def __init__(self, address: Union[Tuple[str, int], str] = ..., + facility: int = ..., socktype: _SocketKind = ...) -> None: ... + def encodePriority(self, facility: Union[int, str], + priority: Union[int, str]) -> int: ... + def mapPriority(self, levelName: str) -> str: ... + + +class NTEventLogHandler(Handler): + def __init__(self, appname: str, dllname: str = ..., + logtype: str = ...) -> None: ... + def getEventCategory(self, record: LogRecord) -> int: ... + # TODO correct return value? + def getEventType(self, record: LogRecord) -> int: ... + def getMessageID(self, record: LogRecord) -> int: ... + + +class SMTPHandler(Handler): + # TODO `secure` can also be an empty tuple + if sys.version_info >= (3,): + def __init__(self, mailhost: Union[str, Tuple[str, int]], fromaddr: str, + toaddrs: List[str], subject: str, + credentials: Optional[Tuple[str, str]] = ..., + secure: Union[Tuple[str], Tuple[str, str], None] = ..., + timeout: float = ...) -> None: ... + else: + def __init__(self, + mailhost: Union[str, Tuple[str, int]], fromaddr: str, + toaddrs: List[str], subject: str, + credentials: Optional[Tuple[str, str]] = ..., + secure: Union[Tuple[str], Tuple[str, str], None] = ...) -> None: ... + def getSubject(self, record: LogRecord) -> str: ... + + +class BufferingHandler(Handler): + def __init__(self, capacity: int) -> None: ... + def shouldFlush(self, record: LogRecord) -> bool: ... + +class MemoryHandler(BufferingHandler): + def __init__(self, capacity: int, flushLevel: int = ..., + target: Optional[Handler] = ...) -> None: ... + def setTarget(self, target: Handler) -> None: ... + + +class HTTPHandler(Handler): + if sys.version_info >= (3, 5): + def __init__(self, host: str, url: str, method: str = ..., + secure: bool = ..., + credentials: Optional[Tuple[str, str]] = ..., + context: Optional[ssl.SSLContext] = ...) -> None: ... + elif sys.version_info >= (3,): + def __init__(self, + host: str, url: str, method: str = ..., secure: bool = ..., + credentials: Optional[Tuple[str, str]] = ...) -> None: ... + else: + def __init__(self, + host: str, url: str, method: str = ...) -> None: ... + def mapLogRecord(self, record: LogRecord) -> Dict[str, Any]: ... + + +if sys.version_info >= (3,): + class QueueHandler(Handler): + def __init__(self, queue: Queue) -> None: ... + def prepare(self, record: LogRecord) -> Any: ... + def enqueue(self, record: LogRecord) -> None: ... + + class QueueListener: + if sys.version_info >= (3, 5): + def __init__(self, queue: Queue, *handlers: Handler, + respect_handler_level: bool = ...) -> None: ... + else: + def __init__(self, + queue: Queue, *handlers: Handler) -> None: ... + def dequeue(self, block: bool) -> LogRecord: ... + def prepare(self, record: LogRecord) -> Any: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def enqueue_sentinel(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi new file mode 100644 index 0000000..6eb3f17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi @@ -0,0 +1,8 @@ +from typing import Any, IO + +version: int + +def dump(value: Any, file: IO[Any], version: int = ...) -> None: ... +def load(file: IO[Any]) -> Any: ... +def dumps(value: Any, version: int = ...) -> str: ... +def loads(string: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/math.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/math.pyi new file mode 100644 index 0000000..25eb1c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/math.pyi @@ -0,0 +1,71 @@ +# Stubs for math +# See: http://docs.python.org/2/library/math.html + +from typing import Tuple, Iterable, SupportsFloat, SupportsInt + +import sys + +e: float +pi: float +if sys.version_info >= (3, 5): + inf: float + nan: float +if sys.version_info >= (3, 6): + tau: float + +def acos(x: SupportsFloat) -> float: ... +def acosh(x: SupportsFloat) -> float: ... +def asin(x: SupportsFloat) -> float: ... +def asinh(x: SupportsFloat) -> float: ... +def atan(x: SupportsFloat) -> float: ... +def atan2(y: SupportsFloat, x: SupportsFloat) -> float: ... +def atanh(x: SupportsFloat) -> float: ... +if sys.version_info >= (3,): + def ceil(x: SupportsFloat) -> int: ... +else: + def ceil(x: SupportsFloat) -> float: ... +def copysign(x: SupportsFloat, y: SupportsFloat) -> float: ... +def cos(x: SupportsFloat) -> float: ... +def cosh(x: SupportsFloat) -> float: ... +def degrees(x: SupportsFloat) -> float: ... +def erf(x: SupportsFloat) -> float: ... +def erfc(x: SupportsFloat) -> float: ... +def exp(x: SupportsFloat) -> float: ... +def expm1(x: SupportsFloat) -> float: ... +def fabs(x: SupportsFloat) -> float: ... +def factorial(x: SupportsInt) -> int: ... +if sys.version_info >= (3,): + def floor(x: SupportsFloat) -> int: ... +else: + def floor(x: SupportsFloat) -> float: ... +def fmod(x: SupportsFloat, y: SupportsFloat) -> float: ... +def frexp(x: SupportsFloat) -> Tuple[float, int]: ... +def fsum(iterable: Iterable) -> float: ... +def gamma(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 5): + def gcd(a: int, b: int) -> int: ... +def hypot(x: SupportsFloat, y: SupportsFloat) -> float: ... +if sys.version_info >= (3, 5): + def isclose(a: SupportsFloat, b: SupportsFloat, rel_tol: SupportsFloat = ..., abs_tol: SupportsFloat = ...) -> bool: ... +def isinf(x: SupportsFloat) -> bool: ... +if sys.version_info >= (3,): + def isfinite(x: SupportsFloat) -> bool: ... +def isnan(x: SupportsFloat) -> bool: ... +def ldexp(x: SupportsFloat, i: int) -> float: ... +def lgamma(x: SupportsFloat) -> float: ... +def log(x: SupportsFloat, base: SupportsFloat = ...) -> float: ... +def log10(x: SupportsFloat) -> float: ... +def log1p(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 3): + def log2(x: SupportsFloat) -> float: ... +def modf(x: SupportsFloat) -> Tuple[float, float]: ... +def pow(x: SupportsFloat, y: SupportsFloat) -> float: ... +def radians(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 7): + def remainder(x: SupportsFloat, y: SupportsFloat) -> float: ... +def sin(x: SupportsFloat) -> float: ... +def sinh(x: SupportsFloat) -> float: ... +def sqrt(x: SupportsFloat) -> float: ... +def tan(x: SupportsFloat) -> float: ... +def tanh(x: SupportsFloat) -> float: ... +def trunc(x: SupportsFloat) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi new file mode 100644 index 0000000..eb83027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi @@ -0,0 +1,38 @@ +# Stubs for mimetypes + +from typing import Dict, IO, List, Optional, Sequence, Text, Tuple +import sys + +def guess_type(url: Text, + strict: bool = ...) -> Tuple[Optional[str], Optional[str]]: ... +def guess_all_extensions(type: str, strict: bool = ...) -> List[str]: ... +def guess_extension(type: str, strict: bool = ...) -> Optional[str]: ... + +def init(files: Optional[Sequence[str]] = ...) -> None: ... +def read_mime_types(filename: str) -> Optional[Dict[str, str]]: ... +def add_type(type: str, ext: str, strict: bool = ...) -> None: ... + +inited: bool +knownfiles: List[str] +suffix_map: Dict[str, str] +encodings_map: Dict[str, str] +types_map: Dict[str, str] +common_types: Dict[str, str] + +class MimeTypes: + suffix_map: Dict[str, str] + encodings_map: Dict[str, str] + types_map: Tuple[Dict[str, str], Dict[str, str]] + types_map_inv: Tuple[Dict[str, str], Dict[str, str]] + def __init__(self, filenames: Tuple[str, ...] = ..., + strict: bool = ...) -> None: ... + def guess_extension(self, type: str, + strict: bool = ...) -> Optional[str]: ... + def guess_type(self, url: str, + strict: bool = ...) -> Tuple[Optional[str], Optional[str]]: ... + def guess_all_extensions(self, type: str, + strict: bool = ...) -> List[str]: ... + def read(self, filename: str, strict: bool = ...) -> None: ... + def readfp(self, fp: IO[str], strict: bool = ...) -> None: ... + if sys.platform == 'win32': + def read_windows_registry(self, strict: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi new file mode 100644 index 0000000..709d5d9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi @@ -0,0 +1,73 @@ +import sys +from typing import (Optional, Sequence, Union, Generic, overload, + Iterable, Iterator, Sized, ContextManager, AnyStr) + +ACCESS_DEFAULT: int +ACCESS_READ: int +ACCESS_WRITE: int +ACCESS_COPY: int + +ALLOCATIONGRANULARITY: int + +if sys.platform != 'win32': + MAP_ANON: int + MAP_ANONYMOUS: int + MAP_DENYWRITE: int + MAP_EXECUTABLE: int + MAP_PRIVATE: int + MAP_SHARED: int + PROT_EXEC: int + PROT_READ: int + PROT_WRITE: int + + PAGESIZE: int + +class _mmap(Generic[AnyStr]): + if sys.platform == 'win32': + def __init__(self, fileno: int, length: int, + tagname: Optional[str] = ..., access: int = ..., + offset: int = ...) -> None: ... + else: + def __init__(self, + fileno: int, length: int, flags: int = ..., + prot: int = ..., access: int = ..., + offset: int = ...) -> None: ... + def close(self) -> None: ... + def find(self, sub: AnyStr, + start: int = ..., end: int = ...) -> int: ... + def flush(self, offset: int = ..., size: int = ...) -> int: ... + def move(self, dest: int, src: int, count: int) -> None: ... + def read(self, n: int = ...) -> AnyStr: ... + def read_byte(self) -> AnyStr: ... + def readline(self) -> AnyStr: ... + def resize(self, newsize: int) -> None: ... + def seek(self, pos: int, whence: int = ...) -> None: ... + def size(self) -> int: ... + def tell(self) -> int: ... + def write(self, bytes: AnyStr) -> None: ... + def write_byte(self, byte: AnyStr) -> None: ... + def __len__(self) -> int: ... + +if sys.version_info >= (3,): + class mmap(_mmap, ContextManager[mmap], Iterable[bytes], Sized): + closed: bool + def rfind(self, sub: bytes, start: int = ..., stop: int = ...) -> int: ... + @overload + def __getitem__(self, index: int) -> int: ... + @overload + def __getitem__(self, index: slice) -> bytes: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + @overload + def __setitem__(self, index: int, object: int) -> None: ... + @overload + def __setitem__(self, index: slice, object: bytes) -> None: ... + # Doesn't actually exist, but the object is actually iterable because it has __getitem__ and + # __len__, so we claim that there is also an __iter__ to help type checkers. + def __iter__(self) -> Iterator[bytes]: ... +else: + class mmap(_mmap, Sequence[bytes]): + def rfind(self, string: bytes, start: int = ..., stop: int = ...) -> int: ... + def __getitem__(self, index: Union[int, slice]) -> bytes: ... + def __getslice__(self, i: Optional[int], j: Optional[int]) -> bytes: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __setitem__(self, index: Union[int, slice], object: bytes) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi new file mode 100644 index 0000000..3ceae88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi @@ -0,0 +1,19 @@ +from typing import AnyStr, Dict, List, Optional, Tuple, overload + + +class NetrcParseError(Exception): + filename: Optional[str] + lineno: Optional[int] + msg: str + + +# (login, account, password) tuple +_NetrcTuple = Tuple[str, Optional[str], Optional[str]] + + +class netrc: + hosts: Dict[str, _NetrcTuple] + macros: Dict[str, List[str]] + + def __init__(self, file: str = ...) -> None: ... + def authenticators(self, host: str) -> Optional[_NetrcTuple]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/nis.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/nis.pyi new file mode 100644 index 0000000..87223ca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/nis.pyi @@ -0,0 +1,10 @@ +import sys +from typing import Dict, List + +if sys.platform != 'win32': + def cat(map: str, domain: str = ...) -> Dict[str, str]: ... + def get_default_domain() -> str: ... + def maps(domain: str = ...) -> List[str]: ... + def match(key: str, map: str, domain: str = ...) -> str: ... + + class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi new file mode 100644 index 0000000..50b561c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi @@ -0,0 +1,140 @@ +# Stubs for numbers (Python 3.5) +# See https://docs.python.org/2.7/library/numbers.html +# and https://docs.python.org/3/library/numbers.html +# +# Note: these stubs are incomplete. The more complex type +# signatures are currently omitted. + +from typing import Any, Optional, SupportsFloat +from abc import ABCMeta, abstractmethod +import sys + +class Number(metaclass=ABCMeta): + @abstractmethod + def __hash__(self) -> int: ... + +class Complex(Number): + @abstractmethod + def __complex__(self) -> complex: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + @property + @abstractmethod + def real(self): ... + @property + @abstractmethod + def imag(self): ... + @abstractmethod + def __add__(self, other): ... + @abstractmethod + def __radd__(self, other): ... + @abstractmethod + def __neg__(self): ... + @abstractmethod + def __pos__(self): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + @abstractmethod + def __mul__(self, other): ... + @abstractmethod + def __rmul__(self, other): ... + if sys.version_info < (3, 0): + @abstractmethod + def __div__(self, other): ... + @abstractmethod + def __rdiv__(self, other): ... + @abstractmethod + def __truediv__(self, other): ... + @abstractmethod + def __rtruediv__(self, other): ... + @abstractmethod + def __pow__(self, exponent): ... + @abstractmethod + def __rpow__(self, base): ... + def __abs__(self): ... + def conjugate(self): ... + def __eq__(self, other: object) -> bool: ... + if sys.version_info < (3, 0): + def __ne__(self, other: object) -> bool: ... + +class Real(Complex, SupportsFloat): + @abstractmethod + def __float__(self) -> float: ... + @abstractmethod + def __trunc__(self) -> int: ... + if sys.version_info >= (3, 0): + @abstractmethod + def __floor__(self) -> int: ... + @abstractmethod + def __ceil__(self) -> int: ... + @abstractmethod + def __round__(self, ndigits: Optional[int] = ...): ... + def __divmod__(self, other): ... + def __rdivmod__(self, other): ... + @abstractmethod + def __floordiv__(self, other): ... + @abstractmethod + def __rfloordiv__(self, other): ... + @abstractmethod + def __mod__(self, other): ... + @abstractmethod + def __rmod__(self, other): ... + @abstractmethod + def __lt__(self, other) -> bool: ... + @abstractmethod + def __le__(self, other) -> bool: ... + def __complex__(self) -> complex: ... + @property + def real(self): ... + @property + def imag(self): ... + def conjugate(self): ... + +class Rational(Real): + @property + @abstractmethod + def numerator(self) -> int: ... + @property + @abstractmethod + def denominator(self) -> int: ... + def __float__(self) -> float: ... + +class Integral(Rational): + if sys.version_info >= (3, 0): + @abstractmethod + def __int__(self) -> int: ... + else: + @abstractmethod + def __long__(self) -> long: ... + def __index__(self) -> int: ... + @abstractmethod + def __pow__(self, exponent, modulus: Optional[Any] = ...): ... + @abstractmethod + def __lshift__(self, other): ... + @abstractmethod + def __rlshift__(self, other): ... + @abstractmethod + def __rshift__(self, other): ... + @abstractmethod + def __rrshift__(self, other): ... + @abstractmethod + def __and__(self, other): ... + @abstractmethod + def __rand__(self, other): ... + @abstractmethod + def __xor__(self, other): ... + @abstractmethod + def __rxor__(self, other): ... + @abstractmethod + def __or__(self, other): ... + @abstractmethod + def __ror__(self, other): ... + @abstractmethod + def __invert__(self): ... + def __float__(self) -> float: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi new file mode 100644 index 0000000..34350e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi @@ -0,0 +1,23 @@ +from typing import List, Dict, Optional, Sequence + +import sys + +cmp_op: Sequence[str] +hasconst: List[int] +hasname: List[int] +hasjrel: List[int] +hasjabs: List[int] +haslocal: List[int] +hascompare: List[int] +hasfree: List[int] +opname: List[str] + +opmap: Dict[str, int] +HAVE_ARGUMENT: int +EXTENDED_ARG: int + +if sys.version_info >= (3, 4): + def stack_effect(opcode: int, oparg: Optional[int] = ...) -> int: ... + +if sys.version_info >= (3, 6): + hasnargs: List[int] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/operator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/operator.pyi new file mode 100644 index 0000000..eafc37c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/operator.pyi @@ -0,0 +1,227 @@ +# Stubs for operator + +from typing import ( + Any, Callable, Container, Mapping, MutableMapping, MutableSequence, Sequence, SupportsAbs, Tuple, + TypeVar, overload, +) +import sys + + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + + +def lt(a: Any, b: Any) -> Any: ... +def le(a: Any, b: Any) -> Any: ... +def eq(a: Any, b: Any) -> Any: ... +def ne(a: Any, b: Any) -> Any: ... +def ge(a: Any, b: Any) -> Any: ... +def gt(a: Any, b: Any) -> Any: ... +def __lt__(a: Any, b: Any) -> Any: ... +def __le__(a: Any, b: Any) -> Any: ... +def __eq__(a: Any, b: Any) -> Any: ... +def __ne__(a: Any, b: Any) -> Any: ... +def __ge__(a: Any, b: Any) -> Any: ... +def __gt__(a: Any, b: Any) -> Any: ... + +def not_(obj: Any) -> bool: ... +def __not__(obj: Any) -> bool: ... + +def truth(x: Any) -> bool: ... + +def is_(a: Any, b: Any) -> bool: ... + +def is_not(a: Any, b: Any) -> bool: ... + +def abs(x: SupportsAbs) -> Any: ... +def __abs__(a: SupportsAbs) -> Any: ... + +def add(a: Any, b: Any) -> Any: ... +def __add__(a: Any, b: Any) -> Any: ... + +def and_(a: Any, b: Any) -> Any: ... +def __and__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def div(a: Any, b: Any) -> Any: ... + def __div__(a: Any, b: Any) -> Any: ... + +def floordiv(a: Any, b: Any) -> Any: ... +def __floordiv__(a: Any, b: Any) -> Any: ... + +def index(a: Any) -> int: ... +def __index__(a: Any) -> int: ... + +def inv(obj: Any) -> Any: ... +def invert(obj: Any) -> Any: ... +def __inv__(obj: Any) -> Any: ... +def __invert__(obj: Any) -> Any: ... + +def lshift(a: Any, b: Any) -> Any: ... +def __lshift__(a: Any, b: Any) -> Any: ... + +def mod(a: Any, b: Any) -> Any: ... +def __mod__(a: Any, b: Any) -> Any: ... + +def mul(a: Any, b: Any) -> Any: ... +def __mul__(a: Any, b: Any) -> Any: ... + +if sys.version_info >= (3, 5): + def matmul(a: Any, b: Any) -> Any: ... + def __matmul__(a: Any, b: Any) -> Any: ... + +def neg(obj: Any) -> Any: ... +def __neg__(obj: Any) -> Any: ... + +def or_(a: Any, b: Any) -> Any: ... +def __or__(a: Any, b: Any) -> Any: ... + +def pos(obj: Any) -> Any: ... +def __pos__(obj: Any) -> Any: ... + +def pow(a: Any, b: Any) -> Any: ... +def __pow__(a: Any, b: Any) -> Any: ... + +def rshift(a: Any, b: Any) -> Any: ... +def __rshift__(a: Any, b: Any) -> Any: ... + +def sub(a: Any, b: Any) -> Any: ... +def __sub__(a: Any, b: Any) -> Any: ... + +def truediv(a: Any, b: Any) -> Any: ... +def __truediv__(a: Any, b: Any) -> Any: ... + +def xor(a: Any, b: Any) -> Any: ... +def __xor__(a: Any, b: Any) -> Any: ... + +def concat(a: Sequence[_T], b: Sequence[_T]) -> Sequence[_T]: ... +def __concat__(a: Sequence[_T], b: Sequence[_T]) -> Sequence[_T]: ... + +def contains(a: Container[Any], b: Any) -> bool: ... +def __contains__(a: Container[Any], b: Any) -> bool: ... + +def countOf(a: Container[Any], b: Any) -> int: ... + +@overload +def delitem(a: MutableSequence[_T], b: int) -> None: ... +@overload +def delitem(a: MutableMapping[_K, _V], b: _K) -> None: ... +@overload +def __delitem__(a: MutableSequence[_T], b: int) -> None: ... +@overload +def __delitem__(a: MutableMapping[_K, _V], b: _K) -> None: ... + +if sys.version_info < (3, ): + def delslice(a: MutableSequence[Any], b: int, c: int) -> None: ... + def __delslice__(a: MutableSequence[Any], b: int, c: int) -> None: ... + +@overload +def getitem(a: Sequence[_T], b: int) -> _T: ... +@overload +def getitem(a: Mapping[_K, _V], b: _K) -> _V: ... +@overload +def __getitem__(a: Sequence[_T], b: int) -> _T: ... +@overload +def __getitem__(a: Mapping[_K, _V], b: _K) -> _V: ... + +if sys.version_info < (3, ): + def getslice(a: Sequence[_T], b: int, c: int) -> Sequence[_T]: ... + def __getslice__(a: Sequence[_T], b: int, c: int) -> Sequence[_T]: ... + +def indexOf(a: Sequence[_T], b: _T) -> int: ... + +if sys.version_info < (3, ): + def repeat(a: Any, b: int) -> Any: ... + def __repeat__(a: Any, b: int) -> Any: ... + +if sys.version_info < (3, ): + def sequenceIncludes(a: Container[Any], b: Any) -> bool: ... + +@overload +def setitem(a: MutableSequence[_T], b: int, c: _T) -> None: ... +@overload +def setitem(a: MutableMapping[_K, _V], b: _K, c: _V) -> None: ... +@overload +def __setitem__(a: MutableSequence[_T], b: int, c: _T) -> None: ... +@overload +def __setitem__(a: MutableMapping[_K, _V], b: _K, c: _V) -> None: ... + +if sys.version_info < (3, ): + def setslice(a: MutableSequence[_T], b: int, c: int, v: Sequence[_T]) -> None: ... + def __setslice__(a: MutableSequence[_T], b: int, c: int, v: Sequence[_T]) -> None: ... + + +if sys.version_info >= (3, 4): + def length_hint(obj: Any, default: int = ...) -> int: ... + +@overload +def attrgetter(attr: str) -> Callable[[Any], Any]: ... +@overload +def attrgetter(*attrs: str) -> Callable[[Any], Tuple[Any, ...]]: ... + +@overload +def itemgetter(item: Any) -> Callable[[Any], Any]: ... +@overload +def itemgetter(*items: Any) -> Callable[[Any], Tuple[Any, ...]]: ... + +def methodcaller(name: str, *args: Any, **kwargs: Any) -> Callable[..., Any]: ... + + +def iadd(a: Any, b: Any) -> Any: ... +def __iadd__(a: Any, b: Any) -> Any: ... + +def iand(a: Any, b: Any) -> Any: ... +def __iand__(a: Any, b: Any) -> Any: ... + +def iconcat(a: Any, b: Any) -> Any: ... +def __iconcat__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def idiv(a: Any, b: Any) -> Any: ... + def __idiv__(a: Any, b: Any) -> Any: ... + +def ifloordiv(a: Any, b: Any) -> Any: ... +def __ifloordiv__(a: Any, b: Any) -> Any: ... + +def ilshift(a: Any, b: Any) -> Any: ... +def __ilshift__(a: Any, b: Any) -> Any: ... + +def imod(a: Any, b: Any) -> Any: ... +def __imod__(a: Any, b: Any) -> Any: ... + +def imul(a: Any, b: Any) -> Any: ... +def __imul__(a: Any, b: Any) -> Any: ... + +if sys.version_info >= (3, 5): + def imatmul(a: Any, b: Any) -> Any: ... + def __imatmul__(a: Any, b: Any) -> Any: ... + +def ior(a: Any, b: Any) -> Any: ... +def __ior__(a: Any, b: Any) -> Any: ... + +def ipow(a: Any, b: Any) -> Any: ... +def __ipow__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def irepeat(a: Any, b: int) -> Any: ... + def __irepeat__(a: Any, b: int) -> Any: ... + +def irshift(a: Any, b: Any) -> Any: ... +def __irshift__(a: Any, b: Any) -> Any: ... + +def isub(a: Any, b: Any) -> Any: ... +def __isub__(a: Any, b: Any) -> Any: ... + +def itruediv(a: Any, b: Any) -> Any: ... +def __itruediv__(a: Any, b: Any) -> Any: ... + +def ixor(a: Any, b: Any) -> Any: ... +def __ixor__(a: Any, b: Any) -> Any: ... + + +if sys.version_info < (3, ): + def isCallable(x: Any) -> bool: ... + def isMappingType(x: Any) -> bool: ... + def isNumberType(x: Any) -> bool: ... + def isSequenceType(x: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi new file mode 100644 index 0000000..9b8b8ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi @@ -0,0 +1,228 @@ +# Generated by pytype, with only minor tweaks. Might be incomplete. +import sys +from typing import Any, AnyStr, Callable, Dict, IO, Iterable, List, Mapping, Optional, Sequence, Tuple, Union + +# See https://groups.google.com/forum/#!topic/python-ideas/gA1gdj3RZ5g +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +NO_DEFAULT: Tuple[_Text, ...] +SUPPRESS_HELP: _Text +SUPPRESS_USAGE: _Text + +def check_builtin(option: Option, opt: Any, value: _Text) -> Any: ... +def check_choice(option: Option, opt: Any, value: _Text) -> Any: ... +if sys.version_info < (3,): + def isbasestring(x: Any) -> bool: ... + +class OptParseError(Exception): + msg: _Text + def __init__(self, msg: _Text) -> None: ... + +class BadOptionError(OptParseError): + opt_str: _Text + def __init__(self, opt_str: _Text) -> None: ... + +class AmbiguousOptionError(BadOptionError): + possibilities: Iterable[_Text] + def __init__(self, opt_str: _Text, possibilities: Sequence[_Text]) -> None: ... + +class OptionError(OptParseError): + msg: _Text + option_id: _Text + def __init__(self, msg: _Text, option: Option) -> None: ... + +class OptionConflictError(OptionError): ... + +class OptionValueError(OptParseError): ... + + +class HelpFormatter: + NO_DEFAULT_VALUE: _Text + _long_opt_fmt: _Text + _short_opt_fmt: _Text + current_indent: int + default_tag: _Text + help_position: Any + help_width: Any + indent_increment: int + level: int + max_help_position: int + option_strings: Dict[Option, _Text] + parser: OptionParser + short_first: Any + width: int + def __init__(self, indent_increment: int, max_help_position: int, width: Optional[int], short_first: int) -> None: ... + def _format__Text(self, _Text: _Text) -> _Text: ... + def dedent(self) -> None: ... + def expand_default(self, option: Option) -> _Text: ... + def format_description(self, description: _Text) -> _Text: ... + def format_epilog(self, epilog) -> _Text: ... + def format_heading(self, heading: Any) -> _Text: ... + def format_option(self, option: OptionParser) -> _Text: ... + def format_option_strings(self, option: OptionParser) -> Any: ... + def format_usage(self, usage: Any) -> _Text: ... + def indent(self) -> None: ... + def set_long_opt_delimiter(self, delim: _Text) -> None: ... + def set_parser(self, parser: OptionParser) -> None: ... + def set_short_opt_delimiter(self, delim: _Text) -> None: ... + def store_option_strings(self, parser: OptionParser) -> None: ... + +class IndentedHelpFormatter(HelpFormatter): + def __init__(self, + indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ..., + short_first: int = ...) -> None: ... + def format_heading(self, heading: _Text) -> _Text: ... + def format_usage(self, usage: _Text) -> _Text: ... + +class TitledHelpFormatter(HelpFormatter): + def __init__(self, + indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ..., + short_first: int = ...) -> None: ... + def format_heading(self, heading: _Text) -> _Text: ... + def format_usage(self, usage: _Text) -> _Text: ... + +class Option: + ACTIONS: Tuple[_Text, ...] + ALWAYS_TYPED_ACTIONS: Tuple[_Text, ...] + ATTRS: List[_Text] + CHECK_METHODS: Optional[List[Callable]] + CONST_ACTIONS: Tuple[_Text, ...] + STORE_ACTIONS: Tuple[_Text, ...] + TYPED_ACTIONS: Tuple[_Text, ...] + TYPES: Tuple[_Text, ...] + TYPE_CHECKER: Dict[_Text, Callable] + _long_opts: List[_Text] + _short_opts: List[_Text] + action: _Text + dest: Optional[_Text] + nargs: int + type: Any + def __init__(self, *opts, **attrs) -> None: ... + def _check_action(self) -> None: ... + def _check_callback(self) -> None: ... + def _check_choice(self) -> None: ... + def _check_const(self) -> None: ... + def _check_dest(self) -> None: ... + def _check_nargs(self) -> None: ... + def _check_opt_strings(self, opts: Optional[_Text]) -> Any: ... + def _check_type(self) -> None: ... + def _set_attrs(self, attrs: Dict[_Text, Any]) -> None: ... + def _set_opt_strings(self, opts: _Text) -> None: ... + def check_value(self, opt: Any, value: Any) -> Any: ... + def convert_value(self, opt: Any, value: Any) -> Any: ... + def get_opt_string(self) -> _Text: ... + def process(self, opt: Any, value: Any, values: Any, parser: OptionParser) -> int: ... + def take_action(self, action: _Text, dest: _Text, opt: Any, value: Any, values: Any, parser: OptionParser) -> int: ... + def takes_value(self) -> bool: ... + +make_option = Option + +class OptionContainer: + _long_opt: Dict[_Text, Option] + _short_opt: Dict[_Text, Option] + conflict_handler: _Text + defaults: Dict[_Text, Any] + description: Any + option_class: Any + def __init__(self, option_class: Option, conflict_handler: Any, description: Any) -> None: ... + def _check_conflict(self, option: Any) -> None: ... + def _create_option_mappings(self) -> None: ... + def _share_option_mappings(self, parser: OptionParser) -> None: ... + def add_option(self, *args, **kwargs) -> Any: ... + def add_options(self, option_list: Iterable[Option]) -> None: ... + def destroy(self) -> None: ... + def format_description(self, formatter: Optional[HelpFormatter]) -> Any: ... + def format_help(self, formatter: Optional[HelpFormatter]) -> _Text: ... + def format_option_help(self, formatter: Optional[HelpFormatter]) -> _Text: ... + def get_description(self) -> Any: ... + def get_option(self, opt_str: _Text) -> Optional[Option]: ... + def has_option(self, opt_str: _Text) -> bool: ... + def remove_option(self, opt_str: _Text) -> None: ... + def set_conflict_handler(self, handler: Any) -> None: ... + def set_description(self, description: Any) -> None: ... + +class OptionGroup(OptionContainer): + option_list: List[Option] + parser: OptionParser + title: _Text + def __init__(self, parser: OptionParser, title: _Text, description: Optional[_Text] = ...) -> None: ... + def _create_option_list(self) -> None: ... + def set_title(self, title: _Text) -> None: ... + +class Values: + def __init__(self, defaults: Optional[Mapping[str, Any]] = ...) -> None: ... + def _update(self, dict: Mapping[_Text, Any], mode: Any) -> None: ... + def _update_careful(self, dict: Mapping[_Text, Any]) -> None: ... + def _update_loose(self, dict: Mapping[_Text, Any]) -> None: ... + def ensure_value(self, attr: _Text, value: Any) -> Any: ... + def read_file(self, filename: _Text, mode: _Text) -> None: ... + def read_module(self, modname: _Text, mode: _Text) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + +class OptionParser(OptionContainer): + allow_interspersed_args: bool + epilog: Optional[_Text] + formatter: HelpFormatter + largs: Optional[List[_Text]] + option_groups: List[OptionParser] + option_list: List[Option] + process_default_values: Any + prog: Optional[_Text] + rargs: Optional[List[Any]] + standard_option_list: List[Option] + usage: Optional[_Text] + values: Optional[Values] + version: _Text + def __init__(self, + usage: Optional[_Text] = ..., + option_list: Iterable[Option] = ..., + option_class: Option = ..., + version: Optional[_Text] = ..., + conflict_handler: _Text = ..., + description: Optional[_Text] = ..., + formatter: Optional[HelpFormatter] = ..., + add_help_option: bool = ..., + prog: Optional[_Text] = ..., + epilog: Optional[_Text] = ...) -> None: ... + def _add_help_option(self) -> None: ... + def _add_version_option(self) -> None: ... + def _create_option_list(self) -> None: ... + def _get_all_options(self) -> List[Option]: ... + def _get_args(self, args: Iterable) -> List[Any]: ... + def _init_parsing_state(self) -> None: ... + def _match_long_opt(self, opt: _Text) -> _Text: ... + def _populate_option_list(self, option_list: Iterable[Option], add_help: bool = ...) -> None: ... + def _process_args(self, largs: List, rargs: List, values: Values) -> None: ... + def _process_long_opt(self, rargs: List, values: Any) -> None: ... + def _process_short_opts(self, rargs: List, values: Any) -> None: ... + def add_option_group(self, *args, **kwargs) -> OptionParser: ... + def check_values(self, values: Values, args: List[_Text]) -> Tuple[Values, List[_Text]]: ... + def disable_interspersed_args(self) -> None: ... + def enable_interspersed_args(self) -> None: ... + def error(self, msg: _Text) -> None: ... + def exit(self, status: int = ..., msg: Optional[str] = ...) -> None: ... + def expand_prog_name(self, s: Optional[_Text]) -> Any: ... + def format_epilog(self, formatter: HelpFormatter) -> Any: ... + def format_help(self, formatter: Optional[HelpFormatter] = ...) -> _Text: ... + def format_option_help(self, formatter: Optional[HelpFormatter] = ...) -> _Text: ... + def get_default_values(self) -> Values: ... + def get_option_group(self, opt_str: _Text) -> Any: ... + def get_prog_name(self) -> _Text: ... + def get_usage(self) -> _Text: ... + def get_version(self) -> _Text: ... + def parse_args(self, args: Optional[Sequence[AnyStr]] = ..., values: Optional[Values] = ...) -> Tuple[Values, List[AnyStr]]: ... + def print_usage(self, file: Optional[IO[str]] = ...) -> None: ... + def print_help(self, file: Optional[IO[str]] = ...) -> None: ... + def print_version(self, file: Optional[IO[str]] = ...) -> None: ... + def set_default(self, dest: Any, value: Any) -> None: ... + def set_defaults(self, **kwargs) -> None: ... + def set_process_default_values(self, process: Any) -> None: ... + def set_usage(self, usage: _Text) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi new file mode 100644 index 0000000..e403c36 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi @@ -0,0 +1,62 @@ +# NOTE: This stub is incomplete - only contains some global functions + +from cmd import Cmd +import sys +from types import FrameType +from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar + +_T = TypeVar('_T') + +class Restart(Exception): ... + +def run(statement: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> None: ... +def runeval(expression: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> Any: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> None: ... +def runcall(*args: Any, **kwds: Any) -> Any: ... + +if sys.version_info >= (3, 7): + def set_trace(*, header: Optional[str] = ...) -> None: ... +else: + def set_trace() -> None: ... + +def post_mortem(t: Optional[Any] = ...) -> None: ... +def pm() -> None: ... + +class Pdb(Cmd): + if sys.version_info >= (3, 6): + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + nosigint: bool = ..., + readrc: bool = ..., + ) -> None: ... + elif sys.version_info >= (3, 2): + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + nosigint: bool = ..., + ) -> None: ... + else: + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + ) -> None: ... + # TODO: The run* and set_trace() methods are actually defined on bdb.Bdb, from which Pdb inherits. + # Move these methods there once we have a bdb stub. + def run(self, statement: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> None: ... + def runeval(self, expression: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> Any: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kwds: Any) -> Optional[_T]: ... + def set_trace(self, frame: Optional[FrameType] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi new file mode 100644 index 0000000..7bfad8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi @@ -0,0 +1,140 @@ +import sys +from typing import Any, IO, Mapping, Union, Tuple, Callable, Optional, Iterator + +HIGHEST_PROTOCOL: int +if sys.version_info >= (3, 0): + DEFAULT_PROTOCOL: int + + +if sys.version_info >= (3, 0): + def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> None: ... + def dumps(obj: Any, protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> bytes: ... + def loads(bytes_object: bytes, *, fix_imports: bool = ..., + encoding: str = ..., errors: str = ...) -> Any: ... + def load(file: IO[bytes], *, fix_imports: bool = ..., encoding: str = ..., + errors: str = ...) -> Any: ... +else: + def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ...) -> None: ... + def dumps(obj: Any, protocol: Optional[int] = ...) -> bytes: ... + def load(file: IO[bytes]) -> Any: ... + def loads(string: bytes) -> Any: ... + +class PickleError(Exception): ... +class PicklingError(PickleError): ... +class UnpicklingError(PickleError): ... + +_reducedtype = Union[str, + Tuple[Callable[..., Any], Tuple], + Tuple[Callable[..., Any], Tuple, Any], + Tuple[Callable[..., Any], Tuple, Any, + Optional[Iterator]], + Tuple[Callable[..., Any], Tuple, Any, + Optional[Iterator], Optional[Iterator]]] + + +class Pickler: + fast: bool + if sys.version_info >= (3, 3): + dispatch_table: Mapping[type, Callable[[Any], _reducedtype]] + + if sys.version_info >= (3, 0): + def __init__(self, file: IO[bytes], protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> None: ... + else: + def __init__(self, file: IO[bytes], protocol: Optional[int] = ...) -> None: ... + + def dump(self, obj: Any) -> None: ... + def clear_memo(self) -> None: ... + def persistent_id(self, obj: Any) -> Any: ... + + +class Unpickler: + if sys.version_info >= (3, 0): + def __init__(self, file: IO[bytes], *, fix_imports: bool = ..., + encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, file: IO[bytes]) -> None: ... + + def load(self) -> Any: ... + def find_class(self, module: str, name: str) -> Any: ... + if sys.version_info >= (3, 0): + def persistent_load(self, pid: Any) -> Any: ... + +MARK: bytes +STOP: bytes +POP: bytes +POP_MARK: bytes +DUP: bytes +FLOAT: bytes +INT: bytes +BININT: bytes +BININT1: bytes +LONG: bytes +BININT2: bytes +NONE: bytes +PERSID: bytes +BINPERSID: bytes +REDUCE: bytes +STRING: bytes +BINSTRING: bytes +SHORT_BINSTRING: bytes +UNICODE: bytes +BINUNICODE: bytes +APPEND: bytes +BUILD: bytes +GLOBAL: bytes +DICT: bytes +EMPTY_DICT: bytes +APPENDS: bytes +GET: bytes +BINGET: bytes +INST: bytes +LONG_BINGET: bytes +LIST: bytes +EMPTY_LIST: bytes +OBJ: bytes +PUT: bytes +BINPUT: bytes +LONG_BINPUT: bytes +SETITEM: bytes +TUPLE: bytes +EMPTY_TUPLE: bytes +SETITEMS: bytes +BINFLOAT: bytes + +TRUE: bytes +FALSE: bytes + +# protocol 2 +PROTO: bytes +NEWOBJ: bytes +EXT1: bytes +EXT2: bytes +EXT4: bytes +TUPLE1: bytes +TUPLE2: bytes +TUPLE3: bytes +NEWTRUE: bytes +NEWFALSE: bytes +LONG1: bytes +LONG4: bytes + +if sys.version_info >= (3, 0): + # protocol 3 + BINBYTES: bytes + SHORT_BINBYTES: bytes + +if sys.version_info >= (3, 4): + # protocol 4 + SHORT_BINUNICODE: bytes + BINUNICODE8: bytes + BINBYTES8: bytes + EMPTY_SET: bytes + ADDITEMS: bytes + FROZENSET: bytes + NEWOBJ_EX: bytes + STACK_GLOBAL: bytes + MEMOIZE: bytes + FRAME: bytes diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi new file mode 100644 index 0000000..c036646 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi @@ -0,0 +1,145 @@ +# Stubs for pickletools (Python 2 and 3) +import sys +from typing import Any, Callable, IO, Iterator, List, MutableMapping, Optional, Text, Tuple, Type, Union + +_Reader = Callable[[IO[bytes]], Any] + +if sys.version_info >= (3, 0): + bytes_types: Tuple[Type[Any], ...] + +UP_TO_NEWLINE: int +TAKEN_FROM_ARGUMENT1: int +TAKEN_FROM_ARGUMENT4: int +if sys.version_info >= (3, 3): + TAKEN_FROM_ARGUMENT4U: int +if sys.version_info >= (3, 4): + TAKEN_FROM_ARGUMENT8U: int + +class ArgumentDescriptor(object): + name: str + n: int + reader: _Reader + doc: str + def __init__(self, name: str, n: int, reader: _Reader, doc: str) -> None: ... + +def read_uint1(f: IO[bytes]) -> int: ... +uint1: ArgumentDescriptor + +def read_uint2(f: IO[bytes]) -> int: ... +uint2: ArgumentDescriptor + +def read_int4(f: IO[bytes]) -> int: ... +int4: ArgumentDescriptor + +if sys.version_info >= (3, 3): + def read_uint4(f: IO[bytes]) -> int: ... + uint4: ArgumentDescriptor + +if sys.version_info >= (3, 5): + def read_uint8(f: IO[bytes]) -> int: ... + uint8: ArgumentDescriptor + +def read_stringnl(f: IO[bytes], decode: bool = ..., stripquotes: bool = ...) -> Union[bytes, Text]: ... +stringnl: ArgumentDescriptor + +def read_stringnl_noescape(f: IO[bytes]) -> str: ... +stringnl_noescape: ArgumentDescriptor + +def read_stringnl_noescape_pair(f: IO[bytes]) -> Text: ... +stringnl_noescape_pair: ArgumentDescriptor + +def read_string1(f: IO[bytes]) -> str: ... +string1: ArgumentDescriptor + +def read_string4(f: IO[bytes]) -> str: ... +string4: ArgumentDescriptor + +if sys.version_info >= (3, 3): + def read_bytes1(f: IO[bytes]) -> bytes: ... + bytes1: ArgumentDescriptor + + def read_bytes4(f: IO[bytes]) -> bytes: ... + bytes4: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_bytes8(f: IO[bytes]) -> bytes: ... + bytes8: ArgumentDescriptor + +def read_unicodestringnl(f: IO[bytes]) -> Text: ... +unicodestringnl: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_unicodestring1(f: IO[bytes]) -> Text: ... + unicodestring1: ArgumentDescriptor + +def read_unicodestring4(f: IO[bytes]) -> Text: ... +unicodestring4: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_unicodestring8(f: IO[bytes]) -> Text: ... + unicodestring8: ArgumentDescriptor + +def read_decimalnl_short(f: IO[bytes]) -> int: ... +def read_decimalnl_long(f: IO[bytes]) -> int: ... +decimalnl_short: ArgumentDescriptor +decimalnl_long: ArgumentDescriptor + +def read_floatnl(f: IO[bytes]) -> float: ... +floatnl: ArgumentDescriptor + +def read_float8(f: IO[bytes]) -> float: ... +float8: ArgumentDescriptor + +def read_long1(f: IO[bytes]) -> int: ... +long1: ArgumentDescriptor + +def read_long4(f: IO[bytes]) -> int: ... +long4: ArgumentDescriptor + +class StackObject(object): + name: str + obtype: Union[Type[Any], Tuple[Type[Any], ...]] + doc: str + def __init__(self, name: str, obtype: Union[Type[Any], Tuple[Type[Any], ...]], doc: str) -> None: ... + +pyint: StackObject +pylong: StackObject +pyinteger_or_bool: StackObject +pybool: StackObject +pyfloat: StackObject +if sys.version_info >= (3, 4): + pybytes_or_str: StackObject +pystring: StackObject +if sys.version_info >= (3, 0): + pybytes: StackObject +pyunicode: StackObject +pynone: StackObject +pytuple: StackObject +pylist: StackObject +pydict: StackObject +if sys.version_info >= (3, 4): + pyset: StackObject + pyfrozenset: StackObject +anyobject: StackObject +markobject: StackObject +stackslice: StackObject + +class OpcodeInfo(object): + name: str + code: str + arg: Optional[ArgumentDescriptor] + stack_before: List[StackObject] + stack_after: List[StackObject] + proto: int + doc: str + def __init__(self, name: str, code: str, arg: Optional[ArgumentDescriptor], + stack_before: List[StackObject], stack_after: List[StackObject], proto: int, doc: str) -> None: ... + +opcodes: List[OpcodeInfo] + +def genops(pickle: Union[bytes, IO[bytes]]) -> Iterator[Tuple[OpcodeInfo, Optional[Any], Optional[int]]]: ... +def optimize(p: Union[bytes, IO[bytes]]) -> bytes: ... +if sys.version_info >= (3, 2): + def dis(pickle: Union[bytes, IO[bytes]], out: Optional[IO[str]] = ..., memo: Optional[MutableMapping[int, Any]] = ..., indentlevel: int = ..., annotate: int = ...) -> None: ... +else: + def dis(pickle: Union[bytes, IO[bytes]], out: Optional[IO[str]] = ..., memo: Optional[MutableMapping[int, Any]] = ..., indentlevel: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi new file mode 100644 index 0000000..c7bad42 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi @@ -0,0 +1,35 @@ +# Stubs for pkgutil + +from typing import Any, Callable, Generator, IO, Iterable, Optional, Tuple, NamedTuple +import sys + +if sys.version_info >= (3,): + from importlib.abc import Loader +else: + Loader = Any + +if sys.version_info >= (3, 6): + ModuleInfo = NamedTuple('ModuleInfo', [('module_finder', Any), ('name', str), ('ispkg', bool)]) + _YMFNI = Generator[ModuleInfo, None, None] +else: + _YMFNI = Generator[Tuple[Any, str, bool], None, None] + + +def extend_path(path: Iterable[str], name: str) -> Iterable[str]: ... + +class ImpImporter: + def __init__(self, dirname: Optional[str] = ...) -> None: ... + +class ImpLoader: + def __init__(self, fullname: str, file: IO[str], filename: str, + etc: Tuple[str, str, int]) -> None: ... + +def find_loader(fullname: str) -> Loader: ... +def get_importer(path_item: str) -> Any: ... # TODO precise type +def get_loader(module_or_name: str) -> Loader: ... +def iter_importers(fullname: str = ...) -> Generator[Any, None, None]: ... # TODO precise type +def iter_modules(path: Optional[Iterable[str]] = ..., + prefix: str = ...) -> _YMFNI: ... # TODO precise type +def walk_packages(path: Optional[Iterable[str]] = ..., prefix: str = ..., + onerror: Optional[Callable[[str], None]] = ...) -> _YMFNI: ... +def get_data(package: str, resource: str) -> Optional[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi new file mode 100644 index 0000000..64201dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi @@ -0,0 +1,57 @@ +# Stubs for plistlib + +from typing import ( + Any, IO, Mapping, MutableMapping, Optional, Union, + Type, TypeVar, +) +from typing import Dict as DictT +import sys +if sys.version_info >= (3,): + from enum import Enum + + class PlistFormat(Enum): + FMT_XML = ... + FMT_BINARY = ... + FMT_XML = PlistFormat.FMT_XML + FMT_BINARY = PlistFormat.FMT_BINARY + +mm = MutableMapping[str, Any] +_D = TypeVar('_D', bound=mm) +if sys.version_info >= (3,): + _Path = str +else: + _Path = Union[str, unicode] + +if sys.version_info >= (3, 4): + def load(fp: IO[bytes], *, fmt: Optional[PlistFormat] = ..., + use_builtin_types: bool = ..., dict_type: Type[_D] = ...) -> _D: ... + def loads(data: bytes, *, fmt: Optional[PlistFormat] = ..., + use_builtin_types: bool = ..., dict_type: Type[_D] = ...) -> _D: ... + def dump(value: Mapping[str, Any], fp: IO[bytes], *, + fmt: PlistFormat = ..., sort_keys: bool = ..., + skipkeys: bool = ...) -> None: ... + def dumps(value: Mapping[str, Any], *, fmt: PlistFormat = ..., + skipkeys: bool = ..., sort_keys: bool = ...) -> bytes: ... + +def readPlist(pathOrFile: Union[_Path, IO[bytes]]) -> DictT[str, Any]: ... +def writePlist(value: Mapping[str, Any], pathOrFile: Union[_Path, IO[bytes]]) -> None: ... +def readPlistFromBytes(data: bytes) -> DictT[str, Any]: ... +def writePlistToBytes(value: Mapping[str, Any]) -> bytes: ... +if sys.version_info < (3,): + def readPlistFromResource(path: _Path, restype: str = ..., + resid: int = ...) -> DictT[str, Any]: ... + def writePlistToResource(rootObject: Mapping[str, Any], path: _Path, + restype: str = ..., + resid: int = ...) -> None: ... + def readPlistFromString(data: str) -> DictT[str, Any]: ... + def writePlistToString(rootObject: Mapping[str, Any]) -> str: ... + +if sys.version_info < (3, 7): + class Dict(dict): + def __getattr__(self, attr: str) -> Any: ... + def __setattr__(self, attr: str, value: Any) -> None: ... + def __delattr__(self, attr: str) -> None: ... + +class Data: + data: bytes + def __init__(self, data: bytes) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi new file mode 100644 index 0000000..d2b7dab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi @@ -0,0 +1,77 @@ +# Stubs for poplib (Python 2 and 3) + +import socket +import ssl +import sys +from typing import ( + Any, BinaryIO, Dict, List, NoReturn, Optional, overload, Pattern, Text, + Tuple, +) + +_LongResp = Tuple[bytes, List[bytes], int] + +class error_proto(Exception): ... + +POP3_PORT: int +POP3_SSL_PORT: int +CR: bytes +LF: bytes +CRLF: bytes + + +class POP3: + if sys.version_info >= (3, 0): + encoding: Text + + host: Text + port: int + sock: socket.socket + file: BinaryIO + welcome: bytes + + def __init__(self, host: Text, port: int = ..., timeout: float = ...) -> None: ... + def getwelcome(self) -> bytes: ... + def set_debuglevel(self, level: int) -> None: ... + def user(self, user: Text) -> bytes: ... + def pass_(self, pswd: Text) -> bytes: ... + def stat(self) -> Tuple[int, int]: ... + def list(self, which: Optional[Any] = ...) -> _LongResp: ... + def retr(self, which: Any) -> _LongResp: ... + def dele(self, which: Any) -> bytes: ... + def noop(self) -> bytes: ... + def rset(self) -> bytes: ... + def quit(self) -> bytes: ... + def close(self) -> None: ... + def rpop(self, user: Text) -> bytes: ... + + timestamp: Pattern[Text] + + if sys.version_info < (3, 0): + def apop(self, user: Text, secret: Text) -> bytes: ... + else: + def apop(self, user: Text, password: Text) -> bytes: ... + def top(self, which: Any, howmuch: int) -> _LongResp: ... + + @overload + def uidl(self) -> _LongResp: ... + @overload + def uidl(self, which: Any) -> bytes: ... + + if sys.version_info >= (3, 5): + def utf8(self) -> bytes: ... + if sys.version_info >= (3, 4): + def capa(self) -> Dict[Text, List[Text]]: ... + def stls(self, context: Optional[ssl.SSLContext] = ...) -> bytes: ... + + +class POP3_SSL(POP3): + if sys.version_info >= (3, 0): + def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ..., + timeout: float = ..., context: Optional[ssl.SSLContext] = ...) -> None: ... + else: + def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ..., + timeout: float = ...) -> None: ... + + if sys.version_info >= (3, 4): + # "context" is actually the last argument, but that breaks LSP and it doesn't really matter because all the arguments are ignored + def stls(self, context: Any = ..., keyfile: Any = ..., certfile: Any = ...) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi new file mode 100644 index 0000000..90a87ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi @@ -0,0 +1,40 @@ +# Stubs for pprint + +# Based on http://docs.python.org/2/library/pprint.html +# Based on http://docs.python.org/3/library/pprint.html + +import sys +from typing import Any, Dict, Tuple, IO + +if sys.version_info >= (3, 4): + def pformat(o: object, indent: int = ..., width: int = ..., + depth: int = ..., compact: bool = ...) -> str: ... +else: + def pformat(o: object, indent: int = ..., width: int = ..., + depth: int = ...) -> str: ... + +if sys.version_info >= (3, 4): + def pprint(o: object, stream: IO[str] = ..., indent: int = ..., width: int = ..., + depth: int = ..., compact: bool = ...) -> None: ... +else: + def pprint(o: object, stream: IO[str] = ..., indent: int = ..., width: int = ..., + depth: int = ...) -> None: ... + +def isreadable(o: object) -> bool: ... +def isrecursive(o: object) -> bool: ... +def saferepr(o: object) -> str: ... + +class PrettyPrinter: + if sys.version_info >= (3, 4): + def __init__(self, indent: int = ..., width: int = ..., depth: int = ..., + stream: IO[str] = ..., compact: bool = ...) -> None: ... + else: + def __init__(self, indent: int = ..., width: int = ..., depth: int = ..., + stream: IO[str] = ...) -> None: ... + + def pformat(self, o: object) -> str: ... + def pprint(self, o: object) -> None: ... + def isreadable(self, o: object) -> bool: ... + def isrecursive(self, o: object) -> bool: ... + def format(self, o: object, context: Dict[int, Any], maxlevels: int, + level: int) -> Tuple[str, bool, bool]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/profile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/profile.pyi new file mode 100644 index 0000000..31236bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/profile.pyi @@ -0,0 +1,27 @@ +import os +import sys +from typing import Any, Callable, Dict, Optional, Text, TypeVar, Union + +def run(statement: str, filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any], filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... + +_SelfT = TypeVar('_SelfT', bound='Profile') +_T = TypeVar('_T') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Profile: + def __init__(self, timer: Optional[Callable[[], float]] = ..., bias: Optional[int] = ...) -> None: ... + def set_cmd(self, cmd: str) -> None: ... + def simulate_call(self, name: str) -> None: ... + def simulate_cmd_complete(self) -> None: ... + def print_stats(self, sort: Union[str, int] = ...) -> None: ... + def dump_stats(self, file: _Path) -> None: ... + def create_stats(self) -> None: ... + def snapshot_stats(self) -> None: ... + def run(self: _SelfT, cmd: str) -> _SelfT: ... + def runctx(self: _SelfT, cmd: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> _SelfT: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... + def calibrate(self, m: int, verbose: int = ...) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi new file mode 100644 index 0000000..8bf1b0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi @@ -0,0 +1,39 @@ +from profile import Profile +from cProfile import Profile as _cProfile +import os +import sys +from typing import Any, Dict, IO, Iterable, List, Text, Tuple, TypeVar, Union, overload + +_Selector = Union[str, float, int] +_T = TypeVar('_T', bound='Stats') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Stats: + def __init__(self: _T, __arg: Union[None, str, Text, Profile, _cProfile] = ..., + *args: Union[None, str, Text, Profile, _cProfile, _T], + stream: IO[Any] = ...) -> None: ... + def init(self, arg: Union[None, str, Text, Profile, _cProfile]) -> None: ... + def load_stats(self, arg: Union[None, str, Text, Profile, _cProfile]) -> None: ... + def get_top_level_stats(self) -> None: ... + def add(self: _T, *arg_list: Union[None, str, Text, Profile, _cProfile, _T]) -> _T: ... + def dump_stats(self, filename: _Path) -> None: ... + def get_sort_arg_defs(self) -> Dict[str, Tuple[Tuple[Tuple[int, int], ...], str]]: ... + @overload + def sort_stats(self: _T, field: int) -> _T: ... + @overload + def sort_stats(self: _T, *field: str) -> _T: ... + def reverse_order(self: _T) -> _T: ... + def strip_dirs(self: _T) -> _T: ... + def calc_callees(self) -> None: ... + def eval_print_amount(self, sel: _Selector, list: List[str], msg: str) -> Tuple[List[str], str]: ... + def get_print_list(self, sel_list: Iterable[_Selector]) -> Tuple[int, List[str]]: ... + def print_stats(self: _T, *amount: _Selector) -> _T: ... + def print_callees(self: _T, *amount: _Selector) -> _T: ... + def print_callers(self: _T, *amount: _Selector) -> _T: ... + def print_call_heading(self, name_size: int, column_title: str) -> None: ... + def print_call_line(self, name_size: int, source: str, call_dict: Dict[str, Any], arrow: str = ...) -> None: ... + def print_title(self) -> None: ... + def print_line(self, func: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pty.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pty.pyi new file mode 100644 index 0000000..3931bb0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pty.pyi @@ -0,0 +1,20 @@ +# Stubs for pty (Python 2 and 3) +import sys +from typing import Callable, Iterable, Tuple, Union + +_Reader = Callable[[int], bytes] + +STDIN_FILENO: int +STDOUT_FILENO: int +STDERR_FILENO: int + +CHILD: int + +def openpty() -> Tuple[int, int]: ... +def master_open() -> Tuple[int, str]: ... +def slave_open(tty_name: str) -> int: ... +def fork() -> Tuple[int, int]: ... +if sys.version_info >= (3, 4): + def spawn(argv: Union[str, Iterable[str]], master_read: _Reader = ..., stdin_read: _Reader = ...) -> int: ... +else: + def spawn(argv: Union[str, Iterable[str]], master_read: _Reader = ..., stdin_read: _Reader = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi new file mode 100644 index 0000000..5bd0bbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi @@ -0,0 +1,13 @@ +from typing import List, NamedTuple + +struct_passwd = NamedTuple("struct_passwd", [("pw_name", str), + ("pw_passwd", str), + ("pw_uid", int), + ("pw_gid", int), + ("pw_gecos", str), + ("pw_dir", str), + ("pw_shell", str)]) + +def getpwall() -> List[struct_passwd]: ... +def getpwuid(uid: int) -> struct_passwd: ... +def getpwnam(name: str) -> struct_passwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi new file mode 100644 index 0000000..a8be113 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi @@ -0,0 +1,20 @@ +# Stubs for py_compile (Python 2 and 3) +import sys + +from typing import Optional, List, Text, AnyStr, Union + +_EitherStr = Union[bytes, Text] + +class PyCompileError(Exception): + exc_type_name: str + exc_value: BaseException + file: str + msg: str + def __init__(self, exc_type: str, exc_value: BaseException, file: str, msg: str = ...) -> None: ... + +if sys.version_info >= (3, 2): + def compile(file: AnyStr, cfile: Optional[AnyStr] = ..., dfile: Optional[AnyStr] = ..., doraise: bool = ..., optimize: int = ...) -> Optional[AnyStr]: ... +else: + def compile(file: _EitherStr, cfile: Optional[_EitherStr] = ..., dfile: Optional[_EitherStr] = ..., doraise: bool = ...) -> None: ... + +def main(args: Optional[List[Text]] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi new file mode 100644 index 0000000..efecf32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi @@ -0,0 +1,40 @@ +from typing import List, Union, Sequence, Optional, Dict + + +class Class: + module: str + name: str + super: Optional[List[Union[Class, str]]] + methods: Dict[str, int] + file: int + lineno: int + + def __init__(self, + module: str, + name: str, + super: Optional[List[Union[Class, str]]], + file: str, + lineno: int) -> None: ... + + +class Function: + module: str + name: str + file: int + lineno: int + + def __init__(self, + module: str, + name: str, + file: str, + lineno: int) -> None: ... + + +def readmodule(module: str, + path: Optional[Sequence[str]] = ... + ) -> Dict[str, Class]: ... + + +def readmodule_ex(module: str, + path: Optional[Sequence[str]] = ... + ) -> Dict[str, Union[Class, Function, List[str]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi new file mode 100644 index 0000000..1150741 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi @@ -0,0 +1,180 @@ +import sys +from typing import Any, AnyStr, Callable, Container, Dict, IO, List, Mapping, MutableMapping, NoReturn, Optional, Text, Tuple, Type, Union +from types import FunctionType, MethodType, ModuleType, TracebackType +if sys.version_info >= (3,): + from reprlib import Repr +else: + from repr import Repr + +# the return type of sys.exc_info(), used by ErrorDuringImport.__init__ +_Exc_Info = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +__author__: str +__date__: str +__version__: str +__credits__: str + +def pathdirs() -> List[str]: ... +def getdoc(object: object) -> Text: ... +def splitdoc(doc: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +def classname(object: object, modname: str) -> str: ... +def isdata(object: object) -> bool: ... +def replace(text: AnyStr, *pairs: AnyStr) -> AnyStr: ... +def cram(text: str, maxlen: int) -> str: ... +def stripid(text: str) -> str: ... +def allmethods(cl: type) -> MutableMapping[str, MethodType]: ... +def visiblename(name: str, all: Optional[Container[str]] = ..., obj: Optional[object] = ...) -> bool: ... +def classify_class_attrs(object: object) -> List[Tuple[str, str, type, str]]: ... + +def ispackage(path: str) -> bool: ... +def source_synopsis(file: IO[AnyStr]) -> Optional[AnyStr]: ... +def synopsis(filename: str, cache: MutableMapping[str, Tuple[int, str]] = ...) -> Optional[str]: ... + +class ErrorDuringImport(Exception): + filename: str + exc: Optional[Type[BaseException]] + value: Optional[BaseException] + tb: Optional[TracebackType] + def __init__(self, filename: str, exc_info: _Exc_Info) -> None: ... + +def importfile(path: str) -> ModuleType: ... +def safeimport(path: str, forceload: bool = ..., cache: MutableMapping[str, ModuleType] = ...) -> ModuleType: ... + +class Doc: + def document(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def fail(self, object: object, name: Optional[str] = ..., *args: Any) -> NoReturn: ... + def docmodule(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def getdocloc(self, object: object) -> Optional[str]: ... + +class HTMLRepr(Repr): + maxlist: int + maxtuple: int + maxdict: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def escape(self, text: str) -> str: ... + def repr(self, object: object) -> str: ... + def repr1(self, x: object, level: complex) -> str: ... + def repr_string(self, x: Text, level: complex) -> str: ... + def repr_str(self, x: Text, level: complex) -> str: ... + def repr_instance(self, x: object, level: complex) -> str: ... + def repr_unicode(self, x: AnyStr, level: complex) -> str: ... + +class HTMLDoc(Doc): + def repr(self, object: object) -> str: ... + def escape(self, test: str) -> str: ... + def page(self, title: str, contents: str) -> str: ... + def heading(self, title: str, fgcol: str, bgcol: str, extras: str = ...) -> str: ... + def section(self, title: str, fgcol: str, bgcol: str, contents: str, width: int = ..., prelude: str = ..., marginalia: Optional[str] = ..., gap: str = ...) -> str: ... + def bigsection(self, title: str, *args) -> str: ... + def preformat(self, text: str) -> str: ... + def multicolumn(self, list: List[Any], format: Callable[[Any], str], cols: int = ...) -> str: ... + def grey(self, text: str) -> str: ... + def namelink(self, name: str, *dicts: MutableMapping[str, str]) -> str: ... + def classlink(self, object: object, modname: str) -> str: ... + def modulelink(self, object: object) -> str: ... + def modpkglink(self, data: Tuple[str, str, bool, bool]) -> str: ... + def markup(self, text: str, escape: Optional[Callable[[str], str]] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., methods: Mapping[str, str] = ...) -> str: ... + def formattree(self, tree: List[Union[Tuple[type, Tuple[type, ...]], list]], modname: str, parent: Optional[type] = ...) -> str: ... + def docmodule(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., *ignored) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., *ignored) -> str: ... + def formatvalue(self, object: object) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., methods: Mapping[str, str] = ..., cl: Optional[type] = ..., *ignored) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., *ignored) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def index(self, dir: str, shadowed: Optional[MutableMapping[str, bool]] = ...) -> str: ... + +class TextRepr(Repr): + maxlist: int + maxtuple: int + maxdict: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def repr1(self, x: object, level: complex) -> str: ... + def repr_string(self, x: str, level: complex) -> str: ... + def repr_str(self, x: str, level: complex) -> str: ... + def repr_instance(self, x: object, level: complex) -> str: ... + +class TextDoc(Doc): + def repr(self, object: object) -> str: ... + def bold(self, text: str) -> str: ... + def indent(self, text: str, prefix: str = ...) -> str: ... + def section(self, title: str, contents: str) -> str: ... + def formattree(self, tree: List[Union[Tuple[type, Tuple[type, ...]], list]], modname: str, parent: Optional[type] = ..., prefix: str = ...) -> str: ... + def docmodule(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., *ignored) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., *ignored) -> str: ... + def formatvalue(self, object: object) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., parent: Optional[str] = ..., maxlen: Optional[int] = ..., doc: Optional[Any] = ..., *ignored) -> str: ... + +def pager(text: str) -> None: ... +def getpager() -> Callable[[str], None]: ... +def plain(text: str) -> str: ... +def pipepager(text: str, cmd: str) -> None: ... +def tempfilepager(text: str, cmd: str) -> None: ... +def ttypager(text: str) -> None: ... +def plainpager(text: str) -> None: ... +def describe(thing: Any) -> str: ... +def locate(path: str, forceload: bool = ...) -> object: ... + +text: TextDoc +html: HTMLDoc + +class _OldStyleClass: ... + +def resolve(thing: Union[str, object], forceload: bool = ...) -> Optional[Tuple[object, str]]: ... +def render_doc(thing: Union[str, object], title: str = ..., forceload: bool = ...) -> str: ... +def doc(thing: Union[str, object], title: str = ..., forceload: bool = ...) -> None: ... +def writedoc(thing: Union[str, object], forceload: bool = ...) -> None: ... +def writedocs(dir: str, pkgpath: str = ..., done: Optional[Any] = ...) -> None: ... + +class Helper: + keywords: Dict[str, Union[str, Tuple[str, str]]] + symbols: Dict[str, str] + topics: Dict[str, Union[str, Tuple[str, ...]]] + def __init__(self, input: Optional[IO[str]] = ..., output: Optional[IO[str]] = ...) -> None: ... + input: IO[str] + output: IO[str] + def __call__(self, request: Union[str, Helper, object] = ...) -> None: ... + def interact(self) -> None: ... + def getline(self, prompt: str) -> str: ... + def help(self, request: Any) -> None: ... + def intro(self) -> None: ... + def list(self, items: List[str], columns: int = ..., width: int = ...) -> None: ... + def listkeywords(self) -> None: ... + def listsymbols(self) -> None: ... + def listtopics(self) -> None: ... + def showtopic(self, topic: str, more_xrefs: str = ...) -> None: ... + def showsymbol(self, symbol: str) -> None: ... + def listmodules(self, key: str = ...) -> None: ... + +help: Helper + +# See Python issue #11182: "remove the unused and undocumented pydoc.Scanner class" +# class Scanner: +# roots = ... # type: Any +# state = ... # type: Any +# children = ... # type: Any +# descendp = ... # type: Any +# def __init__(self, roots, children, descendp) -> None: ... +# def next(self): ... + +class ModuleScanner: + quit: bool + def run(self, callback: Callable[[Optional[str], str, str], None], key: Optional[Any] = ..., completer: Optional[Callable[[], None]] = ..., onerror: Optional[Callable] = ...) -> None: ... + +def apropos(key: str) -> None: ... +def serve(port: int, callback: Optional[Callable[[Any], None]] = ..., completer: Optional[Callable[[], None]] = ...) -> None: ... +def gui() -> None: ... +def ispath(x: Any) -> bool: ... +def cli() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi new file mode 100644 index 0000000..670e561 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi @@ -0,0 +1,75 @@ +from typing import List, Tuple, Optional, Callable, Any, Protocol, Union, Dict, Text + +import pyexpat.errors as errors +import pyexpat.model as model + +EXPAT_VERSION: str # undocumented +version_info: Tuple[int, int, int] # undocumented +native_encoding: str # undocumented +features: List[Tuple[str, int]] # undocumented + +class ExpatError(Exception): + code: int + lineno: int + offset: int + +error = ExpatError + +class _Reader(Protocol): + def read(self, length: int) -> bytes: ... + +XML_PARAM_ENTITY_PARSING_NEVER: int +XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE: int +XML_PARAM_ENTITY_PARSING_ALWAYS: int + +_Model = Tuple[int, int, Optional[str], tuple] + +class XMLParserType(object): + def Parse(self, data: Union[Text, bytes], isfinal: bool = ...) -> int: ... + def ParseFile(self, file: _Reader) -> int: ... + def SetBase(self, base: Text) -> None: ... + def GetBase(self) -> Optional[str]: ... + def GetInputContext(self) -> Optional[bytes]: ... + def ExternalEntityParserCreate(self, context: Optional[Text], encoding: Text = ...) -> XMLParserType: ... + def SetParamEntityParsing(self, flag: int) -> int: ... + def UseForeignDTD(self, flag: bool = ...) -> None: ... + buffer_size: int + buffer_text: bool + buffer_used: int + namespace_prefixes: bool # undocumented + ordered_attributes: bool + specified_attributes: bool + ErrorByteIndex: int + ErrorCode: int + ErrorColumnNumber: int + ErrorLineNumber: int + CurrentByteIndex: int + CurrentColumnNumber: int + CurrentLineNumber: int + XmlDeclHandler: Optional[Callable[[str, Optional[str], int], Any]] + StartDoctypeDeclHandler: Optional[Callable[[str, Optional[str], Optional[str], bool], Any]] + EndDoctypeDeclHandler: Optional[Callable[[], Any]] + ElementDeclHandler: Optional[Callable[[str, _Model], Any]] + AttlistDeclHandler: Optional[Callable[[str, str, str, Optional[str], bool], Any]] + StartElementHandler: Optional[Union[ + Callable[[str, Dict[str, str]], Any], + Callable[[str, List[str]], Any], + Callable[[str, Union[Dict[str, str]], List[str]], Any]]] + EndElementHandler: Optional[Callable[[str], Any]] + ProcessingInstructionHandler: Optional[Callable[[str, str], Any]] + CharacterDataHandler: Optional[Callable[[str], Any]] + UnparsedEntityDeclHandler: Optional[Callable[[str, Optional[str], str, Optional[str], str], Any]] + EntityDeclHandler: Optional[Callable[[str, bool, Optional[str], Optional[str], str, Optional[str], Optional[str]], Any]] + NotationDeclHandler: Optional[Callable[[str, Optional[str], str, Optional[str]], Any]] + StartNamespaceDeclHandler: Optional[Callable[[str, str], Any]] + EndNamespaceDeclHandler: Optional[Callable[[str], Any]] + CommentHandler: Optional[Callable[[str], Any]] + StartCdataSectionHandler: Optional[Callable[[], Any]] + EndCdataSectionHandler: Optional[Callable[[], Any]] + DefaultHandler: Optional[Callable[[str], Any]] + DefaultHandlerExpand: Optional[Callable[[str], Any]] + NotStandaloneHandler: Optional[Callable[[], int]] + ExternalEntityRefHandler: Optional[Callable[[str, Optional[str], Optional[str], Optional[str]], int]] + +def ErrorString(errno: int) -> str: ... +def ParserCreate(encoding: Optional[Text] = ..., namespace_separator: Optional[Text] = ...) -> XMLParserType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi new file mode 100644 index 0000000..6cde43e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi @@ -0,0 +1,44 @@ +import sys +from typing import Dict + +if sys.version_info >= (3, 2): + codes: Dict[str, int] + messages: Dict[int, str] + +XML_ERROR_ABORTED: str +XML_ERROR_ASYNC_ENTITY: str +XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF: str +XML_ERROR_BAD_CHAR_REF: str +XML_ERROR_BINARY_ENTITY_REF: str +XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING: str +XML_ERROR_DUPLICATE_ATTRIBUTE: str +XML_ERROR_ENTITY_DECLARED_IN_PE: str +XML_ERROR_EXTERNAL_ENTITY_HANDLING: str +XML_ERROR_FEATURE_REQUIRES_XML_DTD: str +XML_ERROR_FINISHED: str +XML_ERROR_INCOMPLETE_PE: str +XML_ERROR_INCORRECT_ENCODING: str +XML_ERROR_INVALID_TOKEN: str +XML_ERROR_JUNK_AFTER_DOC_ELEMENT: str +XML_ERROR_MISPLACED_XML_PI: str +XML_ERROR_NOT_STANDALONE: str +XML_ERROR_NOT_SUSPENDED: str +XML_ERROR_NO_ELEMENTS: str +XML_ERROR_NO_MEMORY: str +XML_ERROR_PARAM_ENTITY_REF: str +XML_ERROR_PARTIAL_CHAR: str +XML_ERROR_PUBLICID: str +XML_ERROR_RECURSIVE_ENTITY_REF: str +XML_ERROR_SUSPENDED: str +XML_ERROR_SUSPEND_PE: str +XML_ERROR_SYNTAX: str +XML_ERROR_TAG_MISMATCH: str +XML_ERROR_TEXT_DECL: str +XML_ERROR_UNBOUND_PREFIX: str +XML_ERROR_UNCLOSED_CDATA_SECTION: str +XML_ERROR_UNCLOSED_TOKEN: str +XML_ERROR_UNDECLARING_PREFIX: str +XML_ERROR_UNDEFINED_ENTITY: str +XML_ERROR_UNEXPECTED_STATE: str +XML_ERROR_UNKNOWN_ENCODING: str +XML_ERROR_XML_DECL: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi new file mode 100644 index 0000000..f357cf6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi @@ -0,0 +1,11 @@ +XML_CTYPE_ANY: int +XML_CTYPE_CHOICE: int +XML_CTYPE_EMPTY: int +XML_CTYPE_MIXED: int +XML_CTYPE_NAME: int +XML_CTYPE_SEQ: int + +XML_CQUANT_NONE: int +XML_CQUANT_OPT: int +XML_CQUANT_PLUS: int +XML_CQUANT_REP: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi new file mode 100644 index 0000000..2823f8c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi @@ -0,0 +1,8 @@ +# Stubs for quopri (Python 2 and 3) + +from typing import BinaryIO + +def encode(input: BinaryIO, output: BinaryIO, quotetabs: int, header: int = ...) -> None: ... +def encodestring(s: bytes, quotetabs: int = ..., header: int = ...) -> bytes: ... +def decode(input: BinaryIO, output: BinaryIO, header: int = ...) -> None: ... +def decodestring(s: bytes, header: int = ...) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/readline.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/readline.pyi new file mode 100644 index 0000000..aff2deb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/readline.pyi @@ -0,0 +1,41 @@ +# Stubs for readline + +from typing import Callable, Optional, Sequence +import sys + +_CompleterT = Optional[Callable[[str, int], Optional[str]]] +_CompDispT = Optional[Callable[[str, Sequence[str], int], None]] + + +def parse_and_bind(string: str) -> None: ... +def read_init_file(filename: str = ...) -> None: ... + +def get_line_buffer() -> str: ... +def insert_text(string: str) -> None: ... +def redisplay() -> None: ... + +def read_history_file(filename: str = ...) -> None: ... +def write_history_file(filename: str = ...) -> None: ... +if sys.version_info >= (3, 5): + def append_history_file(nelements: int, filename: str = ...) -> None: ... +def get_history_length() -> int: ... +def set_history_length(length: int) -> None: ... + +def clear_history() -> None: ... +def get_current_history_length() -> int: ... +def get_history_item(index: int) -> str: ... +def remove_history_item(pos: int) -> None: ... +def replace_history_item(pos: int, line: str) -> None: ... +def add_history(string: str) -> None: ... + +def set_startup_hook(function: Optional[Callable[[], None]] = ...) -> None: ... +def set_pre_input_hook(function: Optional[Callable[[], None]] = ...) -> None: ... + +def set_completer(function: _CompleterT = ...) -> None: ... +def get_completer() -> _CompleterT: ... +def get_completion_type() -> int: ... +def get_begidx() -> int: ... +def get_endidx() -> int: ... +def set_completer_delims(string: str) -> None: ... +def get_completer_delims() -> str: ... +def set_completion_display_matches_hook(function: _CompDispT = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi new file mode 100644 index 0000000..3db9d0c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi @@ -0,0 +1,14 @@ +# Stubs for rlcompleter + +from typing import Any, Dict, Optional, Union +import sys + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + + +class Completer: + def __init__(self, namespace: Optional[Dict[str, Any]] = ...) -> None: ... + def complete(self, text: _Text, state: int) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sched.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sched.pyi new file mode 100644 index 0000000..5d5cf33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sched.pyi @@ -0,0 +1,27 @@ +import sys +from typing import Any, Callable, Dict, List, NamedTuple, Optional, Text, Tuple + +Event = NamedTuple('Event', [ + ('time', float), + ('priority', Any), + ('action', Callable[..., Any]), + ('argument', Tuple[Any, ...]), + ('kwargs', Dict[Text, Any]), +]) + +class scheduler: + if sys.version_info >= (3, 3): + def __init__(self, timefunc: Callable[[], float] = ..., delayfunc: Callable[[float], None] = ...) -> None: ... + def enterabs(self, time: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...] = ..., kwargs: Dict[str, Any] = ...) -> Event: ... + def enter(self, delay: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...] = ..., kwargs: Dict[str, Any] = ...) -> Event: ... + def run(self, blocking: bool = ...) -> Optional[float]: ... + else: + def __init__(self, timefunc: Callable[[], float], delayfunc: Callable[[float], None]) -> None: ... + def enterabs(self, time: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...]) -> Event: ... + def enter(self, delay: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...]) -> Event: ... + def run(self) -> None: ... + + def cancel(self, event: Event) -> None: ... + def empty(self) -> bool: ... + @property + def queue(self) -> List[Event]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/select.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/select.pyi new file mode 100644 index 0000000..ab9ffc6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/select.pyi @@ -0,0 +1,137 @@ +import sys +from typing import Any, Optional, Sequence, Tuple, Iterable, List, Union + +# When we have protocols, this should change to a protocol with a fileno method +# See https://docs.python.org/3/c-api/file.html#c.PyObject_AsFileDescriptor +_FileDescriptor = Union[int, Any] + +EPOLLERR: int +EPOLLET: int +EPOLLHUP: int +EPOLLIN: int +EPOLLMSG: int +EPOLLONESHOT: int +EPOLLOUT: int +EPOLLPRI: int +EPOLLRDBAND: int +EPOLLRDNORM: int +EPOLLWRBAND: int +EPOLLWRNORM: int +EPOLL_RDHUP: int +KQ_EV_ADD: int +KQ_EV_CLEAR: int +KQ_EV_DELETE: int +KQ_EV_DISABLE: int +KQ_EV_ENABLE: int +KQ_EV_EOF: int +KQ_EV_ERROR: int +KQ_EV_FLAG1: int +KQ_EV_ONESHOT: int +KQ_EV_SYSFLAGS: int +KQ_FILTER_AIO: int +KQ_FILTER_NETDEV: int +KQ_FILTER_PROC: int +KQ_FILTER_READ: int +KQ_FILTER_SIGNAL: int +KQ_FILTER_TIMER: int +KQ_FILTER_VNODE: int +KQ_FILTER_WRITE: int +KQ_NOTE_ATTRIB: int +KQ_NOTE_CHILD: int +KQ_NOTE_DELETE: int +KQ_NOTE_EXEC: int +KQ_NOTE_EXIT: int +KQ_NOTE_EXTEND: int +KQ_NOTE_FORK: int +KQ_NOTE_LINK: int +KQ_NOTE_LINKDOWN: int +KQ_NOTE_LINKINV: int +KQ_NOTE_LINKUP: int +KQ_NOTE_LOWAT: int +KQ_NOTE_PCTRLMASK: int +KQ_NOTE_PDATAMASK: int +KQ_NOTE_RENAME: int +KQ_NOTE_REVOKE: int +KQ_NOTE_TRACK: int +KQ_NOTE_TRACKERR: int +KQ_NOTE_WRITE: int +PIPE_BUF: int +POLLERR: int +POLLHUP: int +POLLIN: int +POLLMSG: int +POLLNVAL: int +POLLOUT: int +POLLPRI: int +POLLRDBAND: int +POLLRDNORM: int +POLLWRBAND: int +POLLWRNORM: int + +class poll: + def __init__(self) -> None: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: Optional[float] = ...) -> List[Tuple[int, int]]: ... + +def select(rlist: Sequence[Any], wlist: Sequence[Any], xlist: Sequence[Any], + timeout: Optional[float] = ...) -> Tuple[List[Any], + List[Any], + List[Any]]: ... + +if sys.version_info >= (3, 3): + error = OSError +else: + class error(Exception): ... + +# BSD only +class kevent(object): + data: Any + fflags: int + filter: int + flags: int + ident: int + udata: Any + def __init__(self, ident: _FileDescriptor, filter: int = ..., flags: int = ..., fflags: int = ..., data: Any = ..., udata: Any = ...) -> None: ... + +# BSD only +class kqueue(object): + closed: bool + def __init__(self) -> None: ... + def close(self) -> None: ... + def control(self, changelist: Optional[Iterable[kevent]], max_events: int, timeout: float = ...) -> List[kevent]: ... + def fileno(self) -> int: ... + @classmethod + def fromfd(cls, fd: _FileDescriptor) -> kqueue: ... + +# Linux only +class epoll(object): + if sys.version_info >= (3, 3): + def __init__(self, sizehint: int = ..., flags: int = ...) -> None: ... + else: + def __init__(self, sizehint: int = ...) -> None: ... + if sys.version_info >= (3, 4): + def __enter__(self) -> epoll: ... + def __exit__(self, *args: Any) -> None: ... + def close(self) -> None: ... + closed: bool + def fileno(self) -> int: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: float = ..., maxevents: int = ...) -> List[Tuple[int, int]]: ... + @classmethod + def fromfd(cls, fd: _FileDescriptor) -> epoll: ... + +if sys.version_info >= (3, 3): + # Solaris only + class devpoll: + if sys.version_info >= (3, 4): + def close(self) -> None: ... + closed: bool + def fileno(self) -> int: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: Optional[float] = ...) -> List[Tuple[int, int]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi new file mode 100644 index 0000000..de1f8fc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi @@ -0,0 +1,135 @@ +import os +import sys + +# 'bytes' paths are not properly supported: they don't work with all functions, +# sometimes they only work partially (broken exception messages), and the test +# cases don't use them. + +from typing import ( + List, Iterable, Callable, Any, Tuple, Sequence, NamedTuple, IO, + AnyStr, Optional, Union, Set, TypeVar, overload, Type, Protocol, Text +) + +if sys.version_info >= (3, 6): + _Path = Union[str, os.PathLike[str]] + _AnyStr = str + _AnyPath = TypeVar("_AnyPath", str, os.PathLike[str]) + # Return value of some functions that may either return a path-like object that was passed in or + # a string + _PathReturn = Any +elif sys.version_info >= (3,): + _Path = str + _AnyStr = str + _AnyPath = str + _PathReturn = str +else: + _Path = Text + _AnyStr = TypeVar("_AnyStr", str, unicode) + _AnyPath = TypeVar("_AnyPath", str, unicode) + _PathReturn = Type[None] + +if sys.version_info >= (3,): + class Error(OSError): ... + class SameFileError(Error): ... + class SpecialFileError(OSError): ... + class ExecError(OSError): ... + class ReadError(OSError): ... + class RegistryError(Exception): ... +else: + class Error(EnvironmentError): ... + class SpecialFileError(EnvironmentError): ... + class ExecError(EnvironmentError): ... + +_S_co = TypeVar("_S_co", covariant=True) +_S_contra = TypeVar("_S_contra", contravariant=True) + +class _Reader(Protocol[_S_co]): + def read(self, length: int) -> _S_co: ... + +class _Writer(Protocol[_S_contra]): + def write(self, data: _S_contra) -> Any: ... + +def copyfileobj(fsrc: _Reader[AnyStr], fdst: _Writer[AnyStr], + length: int = ...) -> None: ... + +if sys.version_info >= (3,): + def copyfile(src: _Path, dst: _AnyPath, *, + follow_symlinks: bool = ...) -> _AnyPath: ... + def copymode(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> None: ... + def copystat(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> None: ... + def copy(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> _PathReturn: ... + def copy2(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> _PathReturn: ... +else: + def copyfile(src: _Path, dst: _Path) -> None: ... + def copymode(src: _Path, dst: _Path) -> None: ... + def copystat(src: _Path, dst: _Path) -> None: ... + def copy(src: _Path, dst: _Path) -> _PathReturn: ... + def copy2(src: _Path, dst: _Path) -> _PathReturn: ... + +def ignore_patterns(*patterns: _Path) -> Callable[[Any, List[_AnyStr]], Set[_AnyStr]]: ... + +if sys.version_info >= (3,): + _IgnoreFn = Union[None, Callable[[str, List[str]], Iterable[str]], Callable[[_Path, List[str]], Iterable[str]]] + def copytree(src: _Path, dst: _Path, symlinks: bool = ..., + ignore: _IgnoreFn = ..., + copy_function: Callable[[str, str], None] = ..., + ignore_dangling_symlinks: bool = ...) -> _PathReturn: ... +else: + _IgnoreFn = Union[None, Callable[[AnyStr, List[AnyStr]], Iterable[AnyStr]]] + def copytree(src: AnyStr, dst: AnyStr, symlinks: bool = ..., + ignore: _IgnoreFn = ...) -> _PathReturn: ... + +if sys.version_info >= (3,): + @overload + def rmtree(path: bytes, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, str, Any], Any]] = ...) -> None: ... + @overload + def rmtree(path: _AnyPath, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, _AnyPath, Any], Any]] = ...) -> None: ... +else: + def rmtree(path: _AnyPath, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, _AnyPath, Any], Any]] = ...) -> None: ... + +if sys.version_info >= (3, 5): + _CopyFn = Union[Callable[[str, str], None], Callable[[_Path, _Path], None]] + def move(src: _Path, dst: _Path, + copy_function: _CopyFn = ...) -> _PathReturn: ... +else: + def move(src: _Path, dst: _Path) -> _PathReturn: ... + +if sys.version_info >= (3,): + _ntuple_diskusage = NamedTuple('usage', [('total', int), + ('used', int), + ('free', int)]) + def disk_usage(path: _Path) -> _ntuple_diskusage: ... + def chown(path: _Path, user: Optional[str] = ..., + group: Optional[str] = ...) -> None: ... + def which(cmd: _Path, mode: int = ..., + path: Optional[_Path] = ...) -> Optional[str]: ... + +def make_archive(base_name: _AnyStr, format: str, root_dir: Optional[_Path] = ..., + base_dir: Optional[_Path] = ..., verbose: bool = ..., + dry_run: bool = ..., owner: Optional[str] = ..., group: Optional[str] = ..., + logger: Optional[Any] = ...) -> _AnyStr: ... +def get_archive_formats() -> List[Tuple[str, str]]: ... + +def register_archive_format(name: str, function: Callable[..., Any], + extra_args: Optional[Sequence[Union[Tuple[str, Any], List[Any]]]] = ..., + description: str = ...) -> None: ... +def unregister_archive_format(name: str) -> None: ... + +if sys.version_info >= (3,): + # Should be _Path once http://bugs.python.org/issue30218 is fixed + def unpack_archive(filename: str, extract_dir: Optional[_Path] = ..., + format: Optional[str] = ...) -> None: ... + def register_unpack_format(name: str, extensions: List[str], function: Any, + extra_args: Sequence[Tuple[str, Any]] = ..., + description: str = ...) -> None: ... + def unregister_unpack_format(name: str) -> None: ... + def get_unpack_formats() -> List[Tuple[str, List[str], str]]: ... + + def get_terminal_size(fallback: Tuple[int, int] = ...) -> os.terminal_size: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/site.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/site.pyi new file mode 100644 index 0000000..4fdbad8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/site.pyi @@ -0,0 +1,17 @@ +# Stubs for site + +from typing import List, Iterable, Optional +import sys + +PREFIXES: List[str] +ENABLE_USER_SITE: Optional[bool] +USER_SITE: Optional[str] +USER_BASE: Optional[str] + +if sys.version_info < (3,): + def main() -> None: ... +def addsitedir(sitedir: str, + known_paths: Optional[Iterable[str]] = ...) -> None: ... +def getsitepackages(prefixes: Optional[Iterable[str]] = ...) -> List[str]: ... +def getuserbase() -> str: ... +def getusersitepackages() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi new file mode 100644 index 0000000..923b8bc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi @@ -0,0 +1,87 @@ +# Stubs for smtpd (Python 2 and 3) +import sys +import socket +import asyncore +import asynchat + +from typing import Any, DefaultDict, List, Optional, Text, Tuple, Type + +_Address = Tuple[str, int] # (host, port) + + +class SMTPChannel(asynchat.async_chat): + COMMAND: int + DATA: int + + if sys.version_info >= (3, 3): + command_size_limits: DefaultDict[str, int] + + if sys.version_info >= (3,): + smtp_server: SMTPServer + conn: socket.socket + addr: Any + received_lines: List[Text] + smtp_state: int + seen_greeting: str + mailfrom: str + rcpttos: List[str] + received_data: str + fqdn: str + peer: str + + command_size_limit: int + data_size_limit: int + + if sys.version_info >= (3, 5): + enable_SMTPUTF8: bool + + if sys.version_info >= (3, 3): + @property + def max_command_size_limit(self) -> int: ... + + if sys.version_info >= (3, 5): + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ..., + map: Optional[asyncore._maptype] = ..., enable_SMTPUTF8: bool = ..., decode_data: bool = ...) -> None: ... + elif sys.version_info >= (3, 4): + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ..., + map: Optional[asyncore._maptype] = ...) -> None: ... + else: + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ...) -> None: ... + def push(self, msg: bytes) -> None: ... + def collect_incoming_data(self, data: bytes) -> None: ... + def found_terminator(self) -> None: ... + def smtp_HELO(self, arg: str) -> None: ... + def smtp_NOOP(self, arg: str) -> None: ... + def smtp_QUIT(self, arg: str) -> None: ... + def smtp_MAIL(self, arg: str) -> None: ... + def smtp_RCPT(self, arg: str) -> None: ... + def smtp_RSET(self, arg: str) -> None: ... + def smtp_DATA(self, arg: str) -> None: ... + if sys.version_info >= (3, 3): + def smtp_EHLO(self, arg: str) -> None: ... + def smtp_HELP(self, arg: str) -> None: ... + def smtp_VRFY(self, arg: str) -> None: ... + def smtp_EXPN(self, arg: str) -> None: ... + +class SMTPServer(asyncore.dispatcher): + channel_class: Type[SMTPChannel] + + data_size_limit: int + enable_SMTPUTF8: bool + + if sys.version_info >= (3, 5): + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ..., map: Optional[asyncore._maptype] = ..., + enable_SMTPUTF8: bool = ..., decode_data: bool = ...) -> None: ... + elif sys.version_info >= (3, 4): + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ..., map: Optional[asyncore._maptype] = ...) -> None: ... + else: + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ...) -> None: ... + def handle_accepted(self, conn: socket.socket, addr: Any) -> None: ... + def process_message(self, peer: _Address, mailfrom: str, rcpttos: List[Text], data: str, **kwargs: Any) -> Optional[str]: ... + +class DebuggingServer(SMTPServer): ... +class PureProxy(SMTPServer): ... +class MailmanProxy(PureProxy): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi new file mode 100644 index 0000000..aecd70b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi @@ -0,0 +1,25 @@ +# Stubs for sndhdr (Python 2 and 3) + +import os +import sys +from typing import Any, NamedTuple, Optional, Tuple, Union + +if sys.version_info >= (3, 5): + SndHeaders = NamedTuple('SndHeaders', [ + ('filetype', str), + ('framerate', int), + ('nchannels', int), + ('nframes', int), + ('sampwidth', Union[int, str]), + ]) + _SndHeaders = SndHeaders +else: + _SndHeaders = Tuple[str, int, int, int, Union[int, str]] + +if sys.version_info >= (3, 6): + _Path = Union[str, bytes, os.PathLike[Any]] +else: + _Path = Union[str, bytes] + +def what(filename: _Path) -> Optional[_SndHeaders]: ... +def whathdr(filename: _Path) -> Optional[_SndHeaders]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/socket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/socket.pyi new file mode 100644 index 0000000..22b2f91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/socket.pyi @@ -0,0 +1,626 @@ +# Stubs for socket +# Ron Murawski + +# based on: http://docs.python.org/3.2/library/socket.html +# see: http://hg.python.org/cpython/file/3d0686d90f55/Lib/socket.py +# see: http://nullege.com/codes/search/socket +# adapted for Python 2.7 by Michal Pokorny +import sys +from typing import Any, Iterable, Tuple, List, Optional, Union, overload, TypeVar, Text + +_WriteBuffer = Union[bytearray, memoryview] + +# ----- variables and constants ----- + +AF_UNIX: AddressFamily +AF_INET: AddressFamily +AF_INET6: AddressFamily +SOCK_STREAM: SocketKind +SOCK_DGRAM: SocketKind +SOCK_RAW: SocketKind +SOCK_RDM: SocketKind +SOCK_SEQPACKET: SocketKind +SOCK_CLOEXEC: SocketKind +SOCK_NONBLOCK: SocketKind +SOMAXCONN: int +has_ipv6: bool +_GLOBAL_DEFAULT_TIMEOUT: Any +SocketType: Any +SocketIO: Any + +# These are flags that may exist on Python 3.6. Many don't exist on all platforms. +AF_AAL5: AddressFamily +AF_APPLETALK: AddressFamily +AF_ASH: AddressFamily +AF_ATMPVC: AddressFamily +AF_ATMSVC: AddressFamily +AF_AX25: AddressFamily +AF_BLUETOOTH: AddressFamily +AF_BRIDGE: AddressFamily +AF_CAN: AddressFamily +AF_DECnet: AddressFamily +AF_ECONET: AddressFamily +AF_IPX: AddressFamily +AF_IRDA: AddressFamily +AF_KEY: AddressFamily +AF_LLC: AddressFamily +AF_NETBEUI: AddressFamily +AF_NETLINK: AddressFamily +AF_NETROM: AddressFamily +AF_PACKET: AddressFamily +AF_PPPOX: AddressFamily +AF_RDS: AddressFamily +AF_ROSE: AddressFamily +AF_ROUTE: AddressFamily +AF_SECURITY: AddressFamily +AF_SNA: AddressFamily +AF_SYSTEM: AddressFamily +AF_TIPC: AddressFamily +AF_UNSPEC: AddressFamily +AF_WANPIPE: AddressFamily +AF_X25: AddressFamily +AI_ADDRCONFIG: AddressInfo +AI_ALL: AddressInfo +AI_CANONNAME: AddressInfo +AI_DEFAULT: AddressInfo +AI_MASK: AddressInfo +AI_NUMERICHOST: AddressInfo +AI_NUMERICSERV: AddressInfo +AI_PASSIVE: AddressInfo +AI_V4MAPPED: AddressInfo +AI_V4MAPPED_CFG: AddressInfo +BDADDR_ANY: str +BDADDR_LOCAL: str +BTPROTO_HCI: int +BTPROTO_L2CAP: int +BTPROTO_RFCOMM: int +BTPROTO_SCO: int +CAN_EFF_FLAG: int +CAN_EFF_MASK: int +CAN_ERR_FLAG: int +CAN_ERR_MASK: int +CAN_RAW: int +CAN_RAW_ERR_FILTER: int +CAN_RAW_FILTER: int +CAN_RAW_LOOPBACK: int +CAN_RAW_RECV_OWN_MSGS: int +CAN_RTR_FLAG: int +CAN_SFF_MASK: int +CAPI: int +EAGAIN: int +EAI_ADDRFAMILY: int +EAI_AGAIN: int +EAI_BADFLAGS: int +EAI_BADHINTS: int +EAI_FAIL: int +EAI_FAMILY: int +EAI_MAX: int +EAI_MEMORY: int +EAI_NODATA: int +EAI_NONAME: int +EAI_OVERFLOW: int +EAI_PROTOCOL: int +EAI_SERVICE: int +EAI_SOCKTYPE: int +EAI_SYSTEM: int +EBADF: int +EINTR: int +EWOULDBLOCK: int +HCI_DATA_DIR: int +HCI_FILTER: int +HCI_TIME_STAMP: int +INADDR_ALLHOSTS_GROUP: int +INADDR_ANY: int +INADDR_BROADCAST: int +INADDR_LOOPBACK: int +INADDR_MAX_LOCAL_GROUP: int +INADDR_NONE: int +INADDR_UNSPEC_GROUP: int +IPPORT_RESERVED: int +IPPORT_USERRESERVED: int +IPPROTO_AH: int +IPPROTO_BIP: int +IPPROTO_DSTOPTS: int +IPPROTO_EGP: int +IPPROTO_EON: int +IPPROTO_ESP: int +IPPROTO_FRAGMENT: int +IPPROTO_GGP: int +IPPROTO_GRE: int +IPPROTO_HELLO: int +IPPROTO_HOPOPTS: int +IPPROTO_ICMP: int +IPPROTO_ICMPV6: int +IPPROTO_IDP: int +IPPROTO_IGMP: int +IPPROTO_IP: int +IPPROTO_IPCOMP: int +IPPROTO_IPIP: int +IPPROTO_IPV4: int +IPPROTO_IPV6: int +IPPROTO_MAX: int +IPPROTO_MOBILE: int +IPPROTO_ND: int +IPPROTO_NONE: int +IPPROTO_PIM: int +IPPROTO_PUP: int +IPPROTO_RAW: int +IPPROTO_ROUTING: int +IPPROTO_RSVP: int +IPPROTO_SCTP: int +IPPROTO_TCP: int +IPPROTO_TP: int +IPPROTO_UDP: int +IPPROTO_VRRP: int +IPPROTO_XTP: int +IPV6_CHECKSUM: int +IPV6_DONTFRAG: int +IPV6_DSTOPTS: int +IPV6_HOPLIMIT: int +IPV6_HOPOPTS: int +IPV6_JOIN_GROUP: int +IPV6_LEAVE_GROUP: int +IPV6_MULTICAST_HOPS: int +IPV6_MULTICAST_IF: int +IPV6_MULTICAST_LOOP: int +IPV6_NEXTHOP: int +IPV6_PATHMTU: int +IPV6_PKTINFO: int +IPV6_RECVDSTOPTS: int +IPV6_RECVHOPLIMIT: int +IPV6_RECVHOPOPTS: int +IPV6_RECVPATHMTU: int +IPV6_RECVPKTINFO: int +IPV6_RECVRTHDR: int +IPV6_RECVTCLASS: int +IPV6_RTHDR: int +IPV6_RTHDR_TYPE_0: int +IPV6_RTHDRDSTOPTS: int +IPV6_TCLASS: int +IPV6_UNICAST_HOPS: int +IPV6_USE_MIN_MTU: int +IPV6_V6ONLY: int +IP_ADD_MEMBERSHIP: int +IP_DEFAULT_MULTICAST_LOOP: int +IP_DEFAULT_MULTICAST_TTL: int +IP_DROP_MEMBERSHIP: int +IP_HDRINCL: int +IP_MAX_MEMBERSHIPS: int +IP_MULTICAST_IF: int +IP_MULTICAST_LOOP: int +IP_MULTICAST_TTL: int +IP_OPTIONS: int +IP_RECVDSTADDR: int +IP_RECVOPTS: int +IP_RECVRETOPTS: int +IP_RETOPTS: int +IP_TOS: int +IP_TRANSPARENT: int +IP_TTL: int +IPX_TYPE: int +LOCAL_PEERCRED: int +MSG_BCAST: MsgFlag +MSG_BTAG: MsgFlag +MSG_CMSG_CLOEXEC: MsgFlag +MSG_CONFIRM: MsgFlag +MSG_CTRUNC: MsgFlag +MSG_DONTROUTE: MsgFlag +MSG_DONTWAIT: MsgFlag +MSG_EOF: MsgFlag +MSG_EOR: MsgFlag +MSG_ERRQUEUE: MsgFlag +MSG_ETAG: MsgFlag +MSG_FASTOPEN: MsgFlag +MSG_MCAST: MsgFlag +MSG_MORE: MsgFlag +MSG_NOSIGNAL: MsgFlag +MSG_NOTIFICATION: MsgFlag +MSG_OOB: MsgFlag +MSG_PEEK: MsgFlag +MSG_TRUNC: MsgFlag +MSG_WAITALL: MsgFlag +NETLINK_ARPD: int +NETLINK_CRYPTO: int +NETLINK_DNRTMSG: int +NETLINK_FIREWALL: int +NETLINK_IP6_FW: int +NETLINK_NFLOG: int +NETLINK_ROUTE6: int +NETLINK_ROUTE: int +NETLINK_SKIP: int +NETLINK_TAPBASE: int +NETLINK_TCPDIAG: int +NETLINK_USERSOCK: int +NETLINK_W1: int +NETLINK_XFRM: int +NI_DGRAM: int +NI_MAXHOST: int +NI_MAXSERV: int +NI_NAMEREQD: int +NI_NOFQDN: int +NI_NUMERICHOST: int +NI_NUMERICSERV: int +PACKET_BROADCAST: int +PACKET_FASTROUTE: int +PACKET_HOST: int +PACKET_LOOPBACK: int +PACKET_MULTICAST: int +PACKET_OTHERHOST: int +PACKET_OUTGOING: int +PF_CAN: int +PF_PACKET: int +PF_RDS: int +PF_SYSTEM: int +SCM_CREDENTIALS: int +SCM_CREDS: int +SCM_RIGHTS: int +SHUT_RD: int +SHUT_RDWR: int +SHUT_WR: int +SOL_ATALK: int +SOL_AX25: int +SOL_CAN_BASE: int +SOL_CAN_RAW: int +SOL_HCI: int +SOL_IP: int +SOL_IPX: int +SOL_NETROM: int +SOL_RDS: int +SOL_ROSE: int +SOL_SOCKET: int +SOL_TCP: int +SOL_TIPC: int +SOL_UDP: int +SO_ACCEPTCONN: int +SO_BINDTODEVICE: int +SO_BROADCAST: int +SO_DEBUG: int +SO_DONTROUTE: int +SO_ERROR: int +SO_EXCLUSIVEADDRUSE: int +SO_KEEPALIVE: int +SO_LINGER: int +SO_MARK: int +SO_OOBINLINE: int +SO_PASSCRED: int +SO_PEERCRED: int +SO_PRIORITY: int +SO_RCVBUF: int +SO_RCVLOWAT: int +SO_RCVTIMEO: int +SO_REUSEADDR: int +SO_REUSEPORT: int +SO_SETFIB: int +SO_SNDBUF: int +SO_SNDLOWAT: int +SO_SNDTIMEO: int +SO_TYPE: int +SO_USELOOPBACK: int +SYSPROTO_CONTROL: int +TCP_CORK: int +TCP_DEFER_ACCEPT: int +TCP_FASTOPEN: int +TCP_INFO: int +TCP_KEEPCNT: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_LINGER2: int +TCP_MAXSEG: int +TCP_NODELAY: int +TCP_NOTSENT_LOWAT: int +TCP_QUICKACK: int +TCP_SYNCNT: int +TCP_WINDOW_CLAMP: int +TIPC_ADDR_ID: int +TIPC_ADDR_NAME: int +TIPC_ADDR_NAMESEQ: int +TIPC_CFG_SRV: int +TIPC_CLUSTER_SCOPE: int +TIPC_CONN_TIMEOUT: int +TIPC_CRITICAL_IMPORTANCE: int +TIPC_DEST_DROPPABLE: int +TIPC_HIGH_IMPORTANCE: int +TIPC_IMPORTANCE: int +TIPC_LOW_IMPORTANCE: int +TIPC_MEDIUM_IMPORTANCE: int +TIPC_NODE_SCOPE: int +TIPC_PUBLISHED: int +TIPC_SRC_DROPPABLE: int +TIPC_SUB_CANCEL: int +TIPC_SUB_PORTS: int +TIPC_SUB_SERVICE: int +TIPC_SUBSCR_TIMEOUT: int +TIPC_TOP_SRV: int +TIPC_WAIT_FOREVER: int +TIPC_WITHDRAWN: int +TIPC_ZONE_SCOPE: int + +if sys.version_info >= (3, 3): + RDS_CANCEL_SENT_TO: int + RDS_CMSG_RDMA_ARGS: int + RDS_CMSG_RDMA_DEST: int + RDS_CMSG_RDMA_MAP: int + RDS_CMSG_RDMA_STATUS: int + RDS_CMSG_RDMA_UPDATE: int + RDS_CONG_MONITOR: int + RDS_FREE_MR: int + RDS_GET_MR: int + RDS_GET_MR_FOR_DEST: int + RDS_RDMA_DONTWAIT: int + RDS_RDMA_FENCE: int + RDS_RDMA_INVALIDATE: int + RDS_RDMA_NOTIFY_ME: int + RDS_RDMA_READWRITE: int + RDS_RDMA_SILENT: int + RDS_RDMA_USE_ONCE: int + RDS_RECVERR: int + +if sys.version_info >= (3, 4): + CAN_BCM: int + CAN_BCM_TX_SETUP: int + CAN_BCM_TX_DELETE: int + CAN_BCM_TX_READ: int + CAN_BCM_TX_SEND: int + CAN_BCM_RX_SETUP: int + CAN_BCM_RX_DELETE: int + CAN_BCM_RX_READ: int + CAN_BCM_TX_STATUS: int + CAN_BCM_TX_EXPIRED: int + CAN_BCM_RX_STATUS: int + CAN_BCM_RX_TIMEOUT: int + CAN_BCM_RX_CHANGED: int + AF_LINK: AddressFamily + +if sys.version_info >= (3, 5): + CAN_RAW_FD_FRAMES: int + +if sys.version_info >= (3, 6): + SO_DOMAIN: int + SO_PROTOCOL: int + SO_PEERSEC: int + SO_PASSSEC: int + TCP_USER_TIMEOUT: int + TCP_CONGESTION: int + AF_ALG: AddressFamily + SOL_ALG: int + ALG_SET_KEY: int + ALG_SET_IV: int + ALG_SET_OP: int + ALG_SET_AEAD_ASSOCLEN: int + ALG_SET_AEAD_AUTHSIZE: int + ALG_SET_PUBKEY: int + ALG_OP_DECRYPT: int + ALG_OP_ENCRYPT: int + ALG_OP_SIGN: int + ALG_OP_VERIFY: int + +if sys.platform == 'win32': + SIO_RCVALL: int + SIO_KEEPALIVE_VALS: int + RCVALL_IPLEVEL: int + RCVALL_MAX: int + RCVALL_OFF: int + RCVALL_ON: int + RCVALL_SOCKETLEVELONLY: int + + if sys.version_info >= (3, 6): + SIO_LOOPBACK_FAST_PATH: int + +# enum versions of above flags py 3.4+ +if sys.version_info >= (3, 4): + from enum import IntEnum + + class AddressFamily(IntEnum): + AF_UNIX = ... + AF_INET = ... + AF_INET6 = ... + AF_APPLETALK = ... + AF_ASH = ... + AF_ATMPVC = ... + AF_ATMSVC = ... + AF_AX25 = ... + AF_BLUETOOTH = ... + AF_BRIDGE = ... + AF_DECnet = ... + AF_ECONET = ... + AF_IPX = ... + AF_IRDA = ... + AF_KEY = ... + AF_LLC = ... + AF_NETBEUI = ... + AF_NETLINK = ... + AF_NETROM = ... + AF_PACKET = ... + AF_PPPOX = ... + AF_ROSE = ... + AF_ROUTE = ... + AF_SECURITY = ... + AF_SNA = ... + AF_TIPC = ... + AF_UNSPEC = ... + AF_WANPIPE = ... + AF_X25 = ... + AF_LINK = ... + + class SocketKind(IntEnum): + SOCK_STREAM = ... + SOCK_DGRAM = ... + SOCK_RAW = ... + SOCK_RDM = ... + SOCK_SEQPACKET = ... + SOCK_CLOEXEC = ... + SOCK_NONBLOCK = ... +else: + AddressFamily = int + SocketKind = int + +if sys.version_info >= (3, 6): + from enum import IntFlag + + class AddressInfo(IntFlag): + AI_ADDRCONFIG = ... + AI_ALL = ... + AI_CANONNAME = ... + AI_NUMERICHOST = ... + AI_NUMERICSERV = ... + AI_PASSIVE = ... + AI_V4MAPPED = ... + + class MsgFlag(IntFlag): + MSG_CTRUNC = ... + MSG_DONTROUTE = ... + MSG_DONTWAIT = ... + MSG_EOR = ... + MSG_OOB = ... + MSG_PEEK = ... + MSG_TRUNC = ... + MSG_WAITALL = ... +else: + AddressInfo = int + MsgFlag = int + + +# ----- exceptions ----- +class error(IOError): + ... + +class herror(error): + def __init__(self, herror: int, string: str) -> None: ... + +class gaierror(error): + def __init__(self, error: int, string: str) -> None: ... + +class timeout(error): + ... + + +# Addresses can be either tuples of varying lengths (AF_INET, AF_INET6, +# AF_NETLINK, AF_TIPC) or strings (AF_UNIX). + +_Address = Union[tuple, str] +_RetAddress = Any + +# TODO AF_PACKET and AF_BLUETOOTH address objects + +_CMSG = Tuple[int, int, bytes] +_SelfT = TypeVar('_SelfT', bound=socket) + +# ----- classes ----- +class socket: + family: int + type: int + proto: int + + if sys.version_info < (3,): + def __init__(self, family: int = ..., type: int = ..., proto: int = ...) -> None: ... + else: + def __init__(self, family: int = ..., type: int = ..., proto: int = ..., fileno: Optional[int] = ...) -> None: ... + + if sys.version_info >= (3, 2): + def __enter__(self: _SelfT) -> _SelfT: ... + def __exit__(self, *args: Any) -> None: ... + + # --- methods --- + def accept(self) -> Tuple[socket, _RetAddress]: ... + def bind(self, address: Union[_Address, bytes]) -> None: ... + def close(self) -> None: ... + def connect(self, address: Union[_Address, bytes]) -> None: ... + def connect_ex(self, address: Union[_Address, bytes]) -> int: ... + def detach(self) -> int: ... + def fileno(self) -> int: ... + + def getpeername(self) -> _RetAddress: ... + def getsockname(self) -> _RetAddress: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def gettimeout(self) -> Optional[float]: ... + def ioctl(self, control: object, + option: Tuple[int, int, int]) -> None: ... + if sys.version_info < (3, 5): + def listen(self, backlog: int) -> None: ... + else: + def listen(self, backlog: int = ...) -> None: ... + # TODO the return value may be BinaryIO or TextIO, depending on mode + def makefile(self, mode: str = ..., buffering: int = ..., + encoding: str = ..., errors: str = ..., + newline: str = ...) -> Any: + ... + def recv(self, bufsize: int, flags: int = ...) -> bytes: ... + + def recvfrom(self, bufsize: int, flags: int = ...) -> Tuple[bytes, _RetAddress]: ... + def recvfrom_into(self, buffer: _WriteBuffer, nbytes: int, + flags: int = ...) -> Tuple[int, _RetAddress]: ... + def recv_into(self, buffer: _WriteBuffer, nbytes: int, + flags: int = ...) -> int: ... + def send(self, data: bytes, flags: int = ...) -> int: ... + def sendall(self, data: bytes, flags: int = ...) -> None: + ... # return type: None on success + @overload + def sendto(self, data: bytes, address: _Address) -> int: ... + @overload + def sendto(self, data: bytes, flags: int, address: _Address) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def settimeout(self, value: Optional[float]) -> None: ... + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + def shutdown(self, how: int) -> None: ... + + if sys.version_info >= (3, 3): + def recvmsg(self, __bufsize: int, __ancbufsize: int = ..., + __flags: int = ...) -> Tuple[bytes, List[_CMSG], int, Any]: ... + def recvmsg_into(self, __buffers: Iterable[_WriteBuffer], __ancbufsize: int = ..., + __flags: int = ...) -> Tuple[int, List[_CMSG], int, Any]: ... + def sendmsg(self, __buffers: Iterable[bytes], __ancdata: Iterable[_CMSG] = ..., + __flags: int = ..., __address: _Address = ...) -> int: ... + if sys.version_info >= (3, 4): + def set_inheritable(self, inheritable: bool) -> None: ... + + +# ----- functions ----- +def create_connection(address: Tuple[Optional[str], int], + timeout: Optional[float] = ..., + source_address: Tuple[Union[bytearray, bytes, Text], int] = ...) -> socket: ... + +# the 5th tuple item is an address +# TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers +# https://github.com/python/mypy/issues/2509 +def getaddrinfo( + host: Optional[Union[bytearray, bytes, Text]], port: Union[str, int, None], family: int = ..., + socktype: int = ..., proto: int = ..., + flags: int = ...) -> List[Tuple[int, int, int, str, Tuple[Any, ...]]]: + ... + +def getfqdn(name: str = ...) -> str: ... +def gethostbyname(hostname: str) -> str: ... +def gethostbyname_ex(hostname: str) -> Tuple[str, List[str], List[str]]: ... +def gethostname() -> str: ... +def gethostbyaddr(ip_address: str) -> Tuple[str, List[str], List[str]]: ... +def getnameinfo(sockaddr: tuple, flags: int) -> Tuple[str, int]: ... +def getprotobyname(protocolname: str) -> int: ... +def getservbyname(servicename: str, protocolname: str = ...) -> int: ... +def getservbyport(port: int, protocolname: str = ...) -> str: ... +def socketpair(family: int = ..., + type: int = ..., + proto: int = ...) -> Tuple[socket, socket]: ... +def fromfd(fd: int, family: int, type: int, proto: int = ...) -> socket: ... +def ntohl(x: int) -> int: ... # param & ret val are 32-bit ints +def ntohs(x: int) -> int: ... # param & ret val are 16-bit ints +def htonl(x: int) -> int: ... # param & ret val are 32-bit ints +def htons(x: int) -> int: ... # param & ret val are 16-bit ints +def inet_aton(ip_string: str) -> bytes: ... # ret val 4 bytes in length +def inet_ntoa(packed_ip: bytes) -> str: ... +def inet_pton(address_family: int, ip_string: str) -> bytes: ... +def inet_ntop(address_family: int, packed_ip: bytes) -> str: ... +def getdefaulttimeout() -> Optional[float]: ... +def setdefaulttimeout(timeout: Optional[float]) -> None: ... + +if sys.version_info >= (3, 3): + def CMSG_LEN(length: int) -> int: ... + def CMSG_SPACE(length: int) -> int: ... + def sethostname(name: str) -> None: ... + def if_nameindex() -> List[Tuple[int, str]]: ... + def if_nametoindex(name: str) -> int: ... + def if_indextoname(index: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi new file mode 100644 index 0000000..d5d20d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi @@ -0,0 +1 @@ +from sqlite3.dbapi2 import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi new file mode 100644 index 0000000..5b3d2a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi @@ -0,0 +1,289 @@ +# Filip Hron +# based heavily on Andrey Vlasovskikh's python-skeletons https://github.com/JetBrains/python-skeletons/blob/master/sqlite3.py + +import os +import sys +from typing import Any, Callable, Iterable, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union +from datetime import date, time, datetime + +_T = TypeVar('_T') + +paramstyle: str +threadsafety: int +apilevel: str +Date = date +Time = time +Timestamp = datetime + +def DateFromTicks(ticks): ... +def TimeFromTicks(ticks): ... +def TimestampFromTicks(ticks): ... + +version_info: str +sqlite_version_info: Tuple[int, int, int] +if sys.version_info >= (3,): + Binary = memoryview +else: + Binary = buffer + +def register_adapters_and_converters(): ... + +# The remaining definitions are imported from _sqlite3. + +PARSE_COLNAMES: int +PARSE_DECLTYPES: int +SQLITE_ALTER_TABLE: int +SQLITE_ANALYZE: int +SQLITE_ATTACH: int +SQLITE_CREATE_INDEX: int +SQLITE_CREATE_TABLE: int +SQLITE_CREATE_TEMP_INDEX: int +SQLITE_CREATE_TEMP_TABLE: int +SQLITE_CREATE_TEMP_TRIGGER: int +SQLITE_CREATE_TEMP_VIEW: int +SQLITE_CREATE_TRIGGER: int +SQLITE_CREATE_VIEW: int +SQLITE_DELETE: int +SQLITE_DENY: int +SQLITE_DETACH: int +SQLITE_DROP_INDEX: int +SQLITE_DROP_TABLE: int +SQLITE_DROP_TEMP_INDEX: int +SQLITE_DROP_TEMP_TABLE: int +SQLITE_DROP_TEMP_TRIGGER: int +SQLITE_DROP_TEMP_VIEW: int +SQLITE_DROP_TRIGGER: int +SQLITE_DROP_VIEW: int +SQLITE_IGNORE: int +SQLITE_INSERT: int +SQLITE_OK: int +SQLITE_PRAGMA: int +SQLITE_READ: int +SQLITE_REINDEX: int +SQLITE_SELECT: int +SQLITE_TRANSACTION: int +SQLITE_UPDATE: int +adapters: Any +converters: Any +sqlite_version: str +version: str + +# TODO: adapt needs to get probed +def adapt(obj, protocol, alternate): ... +def complete_statement(sql: str) -> bool: ... +if sys.version_info >= (3, 7): + def connect(database: Union[bytes, Text, os.PathLike[Text]], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ..., + uri: bool = ...) -> Connection: ... +elif sys.version_info >= (3, 4): + def connect(database: Union[bytes, Text], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ..., + uri: bool = ...) -> Connection: ... +else: + def connect(database: Union[bytes, Text], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ...) -> Connection: ... +def enable_callback_tracebacks(flag: bool) -> None: ... +def enable_shared_cache(do_enable: int) -> None: ... +def register_adapter(type: Type[_T], callable: Callable[[_T], Union[int, float, str, bytes]]) -> None: ... +def register_converter(typename: str, callable: Callable[[bytes], Any]) -> None: ... + +class Cache(object): + def __init__(self, *args, **kwargs) -> None: ... + def display(self, *args, **kwargs) -> None: ... + def get(self, *args, **kwargs) -> None: ... + +class Connection(object): + DataError: Any + DatabaseError: Any + Error: Any + IntegrityError: Any + InterfaceError: Any + InternalError: Any + NotSupportedError: Any + OperationalError: Any + ProgrammingError: Any + Warning: Any + in_transaction: Any + isolation_level: Any + row_factory: Any + text_factory: Any + total_changes: Any + def __init__(self, *args, **kwargs): ... + def close(self) -> None: ... + def commit(self) -> None: ... + def create_aggregate(self, name: str, num_params: int, aggregate_class: type) -> None: ... + def create_collation(self, name: str, callable: Any) -> None: ... + def create_function(self, name: str, num_params: int, func: Any) -> None: ... + def cursor(self, cursorClass: Optional[type] = ...) -> Cursor: ... + def execute(self, sql: str, parameters: Iterable = ...) -> Cursor: ... + # TODO: please check in executemany() if seq_of_parameters type is possible like this + def executemany(self, sql: str, seq_of_parameters: Iterable[Iterable]) -> Cursor: ... + def executescript(self, sql_script: Union[bytes, Text]) -> Cursor: ... + def interrupt(self, *args, **kwargs) -> None: ... + def iterdump(self, *args, **kwargs) -> None: ... + def rollback(self, *args, **kwargs) -> None: ... + # TODO: set_authorizer(authorzer_callback) + # see https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.set_authorizer + # returns [SQLITE_OK, SQLITE_DENY, SQLITE_IGNORE] so perhaps int + def set_authorizer(self, *args, **kwargs) -> None: ... + # set_progress_handler(handler, n) -> see https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.set_progress_handler + def set_progress_handler(self, *args, **kwargs) -> None: ... + def set_trace_callback(self, *args, **kwargs): ... + # enable_load_extension and load_extension is not available on python distributions compiled + # without sqlite3 loadable extension support. see footnotes https://docs.python.org/3/library/sqlite3.html#f1 + def enable_load_extension(self, enabled: bool) -> None: ... + def load_extension(self, path: str) -> None: ... + if sys.version_info >= (3, 7): + def backup(self, target: Connection, *, pages: int = ..., + progress: Optional[Callable[[int, int, int], object]] = ..., name: str = ..., + sleep: float = ...) -> None: ... + def __call__(self, *args, **kwargs): ... + def __enter__(self, *args, **kwargs): ... + def __exit__(self, *args, **kwargs): ... + +class Cursor(Iterator[Any]): + arraysize: Any + connection: Any + description: Any + lastrowid: Any + row_factory: Any + rowcount: Any + # TODO: Cursor class accepts exactly 1 argument + # required type is sqlite3.Connection (which is imported as _Connection) + # however, the name of the __init__ variable is unknown + def __init__(self, *args, **kwargs) -> None: ... + def close(self, *args, **kwargs) -> None: ... + def execute(self, sql: str, parameters: Iterable = ...) -> Cursor: ... + def executemany(self, sql: str, seq_of_parameters: Iterable[Iterable]) -> Cursor: ... + def executescript(self, sql_script: Union[bytes, Text]) -> Cursor: ... + def fetchall(self) -> List[Any]: ... + def fetchmany(self, size: Optional[int] = ...) -> List[Any]: ... + def fetchone(self) -> Any: ... + def setinputsizes(self, *args, **kwargs) -> None: ... + def setoutputsize(self, *args, **kwargs) -> None: ... + def __iter__(self) -> Cursor: ... + if sys.version_info >= (3, 0): + def __next__(self) -> Any: ... + else: + def next(self) -> Any: ... + + +class DataError(DatabaseError): ... + +class DatabaseError(Error): ... + +class Error(Exception): ... + +class IntegrityError(DatabaseError): ... + +class InterfaceError(Error): ... + +class InternalError(DatabaseError): ... + +class NotSupportedError(DatabaseError): ... + +class OperationalError(DatabaseError): ... + +class OptimizedUnicode(object): + maketrans: Any + def __init__(self, *args, **kwargs): ... + def capitalize(self, *args, **kwargs): ... + def casefold(self, *args, **kwargs): ... + def center(self, *args, **kwargs): ... + def count(self, *args, **kwargs): ... + def encode(self, *args, **kwargs): ... + def endswith(self, *args, **kwargs): ... + def expandtabs(self, *args, **kwargs): ... + def find(self, *args, **kwargs): ... + def format(self, *args, **kwargs): ... + def format_map(self, *args, **kwargs): ... + def index(self, *args, **kwargs): ... + def isalnum(self, *args, **kwargs): ... + def isalpha(self, *args, **kwargs): ... + def isdecimal(self, *args, **kwargs): ... + def isdigit(self, *args, **kwargs): ... + def isidentifier(self, *args, **kwargs): ... + def islower(self, *args, **kwargs): ... + def isnumeric(self, *args, **kwargs): ... + def isprintable(self, *args, **kwargs): ... + def isspace(self, *args, **kwargs): ... + def istitle(self, *args, **kwargs): ... + def isupper(self, *args, **kwargs): ... + def join(self, *args, **kwargs): ... + def ljust(self, *args, **kwargs): ... + def lower(self, *args, **kwargs): ... + def lstrip(self, *args, **kwargs): ... + def partition(self, *args, **kwargs): ... + def replace(self, *args, **kwargs): ... + def rfind(self, *args, **kwargs): ... + def rindex(self, *args, **kwargs): ... + def rjust(self, *args, **kwargs): ... + def rpartition(self, *args, **kwargs): ... + def rsplit(self, *args, **kwargs): ... + def rstrip(self, *args, **kwargs): ... + def split(self, *args, **kwargs): ... + def splitlines(self, *args, **kwargs): ... + def startswith(self, *args, **kwargs): ... + def strip(self, *args, **kwargs): ... + def swapcase(self, *args, **kwargs): ... + def title(self, *args, **kwargs): ... + def translate(self, *args, **kwargs): ... + def upper(self, *args, **kwargs): ... + def zfill(self, *args, **kwargs): ... + def __add__(self, other): ... + def __contains__(self, *args, **kwargs): ... + def __eq__(self, other): ... + def __format__(self, *args, **kwargs): ... + def __ge__(self, other): ... + def __getitem__(self, index): ... + def __getnewargs__(self, *args, **kwargs): ... + def __gt__(self, other): ... + def __hash__(self): ... + def __iter__(self): ... + def __le__(self, other): ... + def __len__(self, *args, **kwargs): ... + def __lt__(self, other): ... + def __mod__(self, other): ... + def __mul__(self, other): ... + def __ne__(self, other): ... + def __rmod__(self, other): ... + def __rmul__(self, other): ... + +class PrepareProtocol(object): + def __init__(self, *args, **kwargs): ... + +class ProgrammingError(DatabaseError): ... + +class Row(object): + def __init__(self, *args, **kwargs): ... + def keys(self, *args, **kwargs): ... + def __eq__(self, other): ... + def __ge__(self, other): ... + def __getitem__(self, index): ... + def __gt__(self, other): ... + def __hash__(self): ... + def __iter__(self): ... + def __le__(self, other): ... + def __len__(self, *args, **kwargs): ... + def __lt__(self, other): ... + def __ne__(self, other): ... + +class Statement(object): + def __init__(self, *args, **kwargs): ... + +class Warning(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi new file mode 100644 index 0000000..be39a31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi @@ -0,0 +1,18 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_compile.py +# and https://github.com/python/cpython/blob/master/Lib/sre_compile.py + +import sys +from sre_parse import SubPattern +from typing import Any, List, Pattern, Tuple, Type, TypeVar, Union + +MAXCODE: int +if sys.version_info < (3, 0): + STRING_TYPES: Tuple[Type[str], Type[unicode]] + _IsStringType = int +else: + from sre_constants import _NamedIntConstant + def dis(code: List[_NamedIntConstant]) -> None: ... + _IsStringType = bool + +def isstring(obj: Any) -> _IsStringType: ... +def compile(p: Union[str, bytes, SubPattern], flags: int = ...) -> Pattern: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi new file mode 100644 index 0000000..4b51e40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi @@ -0,0 +1,313 @@ +# Stubs for ssl + +from typing import ( + Any, Dict, Callable, List, NamedTuple, Optional, Set, Tuple, Union, +) +import socket +import sys + +_PCTRTT = Tuple[Tuple[str, str], ...] +_PCTRTTT = Tuple[_PCTRTT, ...] +_PeerCertRetDictType = Dict[str, Union[str, _PCTRTTT, _PCTRTT]] +_PeerCertRetType = Union[_PeerCertRetDictType, bytes, None] +_EnumRetType = List[Tuple[bytes, str, Union[Set[str], bool]]] +_PasswordType = Union[Callable[[], Union[str, bytes]], str, bytes] + +if sys.version_info >= (3, 5): + _SC1ArgT = Union[SSLSocket, SSLObject] +else: + _SC1ArgT = SSLSocket +_SrvnmeCbType = Callable[[_SC1ArgT, Optional[str], SSLSocket], Optional[int]] + +class SSLError(OSError): + library: str + reason: str +class SSLZeroReturnError(SSLError): ... +class SSLWantReadError(SSLError): ... +class SSLWantWriteError(SSLError): ... +class SSLSyscallError(SSLError): ... +class SSLEOFError(SSLError): ... + +if sys.version_info >= (3, 7): + class SSLCertVerificationError(SSLError, ValueError): + verify_code: int + verify_message: str + + CertificateError = SSLCertVerificationError +else: + class CertificateError(ValueError): ... + + +def wrap_socket(sock: socket.socket, keyfile: Optional[str] = ..., + certfile: Optional[str] = ..., server_side: bool = ..., + cert_reqs: int = ..., ssl_version: int = ..., + ca_certs: Optional[str] = ..., + do_handshake_on_connect: bool = ..., + suppress_ragged_eofs: bool = ..., + ciphers: Optional[str] = ...) -> SSLSocket: ... + + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + def create_default_context(purpose: Any = ..., *, + cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Optional[str] = ...) -> SSLContext: ... + +if sys.version_info >= (3, 4): + def _create_unverified_context(protocol: int = ..., *, + cert_reqs: int = ..., + check_hostname: bool = ..., + purpose: Any = ..., + certfile: Optional[str] = ..., + keyfile: Optional[str] = ..., + cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Optional[str] = ...) -> SSLContext: ... + _create_default_https_context: Callable[..., SSLContext] + +if sys.version_info >= (3, 3): + def RAND_bytes(num: int) -> bytes: ... + def RAND_pseudo_bytes(num: int) -> Tuple[bytes, bool]: ... +def RAND_status() -> bool: ... +def RAND_egd(path: str) -> None: ... +def RAND_add(bytes: bytes, entropy: float) -> None: ... + + +def match_hostname(cert: _PeerCertRetType, hostname: str) -> None: ... +def cert_time_to_seconds(cert_time: str) -> int: ... +def get_server_certificate(addr: Tuple[str, int], ssl_version: int = ..., + ca_certs: Optional[str] = ...) -> str: ... +def DER_cert_to_PEM_cert(der_cert_bytes: bytes) -> str: ... +def PEM_cert_to_DER_cert(pem_cert_string: str) -> bytes: ... +if sys.version_info < (3,) or sys.version_info >= (3, 4): + DefaultVerifyPaths = NamedTuple('DefaultVerifyPaths', + [('cafile', str), ('capath', str), + ('openssl_cafile_env', str), + ('openssl_cafile', str), + ('openssl_capath_env', str), + ('openssl_capath', str)]) + def get_default_verify_paths() -> DefaultVerifyPaths: ... + +if sys.platform == 'win32': + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def enum_certificates(store_name: str) -> _EnumRetType: ... + def enum_crls(store_name: str) -> _EnumRetType: ... + + +CERT_NONE: int +CERT_OPTIONAL: int +CERT_REQUIRED: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + VERIFY_DEFAULT: int + VERIFY_CRL_CHECK_LEAF: int + VERIFY_CRL_CHECK_CHAIN: int + VERIFY_X509_STRICT: int + VERIFY_X509_TRUSTED_FIRST: int + +PROTOCOL_SSLv23: int +PROTOCOL_SSLv2: int +PROTOCOL_SSLv3: int +PROTOCOL_TLSv1: int +if sys.version_info < (3,) or sys.version_info >= (3, 4): + PROTOCOL_TLSv1_1: int + PROTOCOL_TLSv1_2: int +if sys.version_info >= (3, 5): + PROTOCOL_TLS: int +if sys.version_info >= (3, 6): + PROTOCOL_TLS_CLIENT: int + PROTOCOL_TLS_SERVER: int + +OP_ALL: int +OP_NO_SSLv2: int +OP_NO_SSLv3: int +OP_NO_TLSv1: int +if sys.version_info < (3,) or sys.version_info >= (3, 4): + OP_NO_TLSv1_1: int + OP_NO_TLSv1_2: int +OP_CIPHER_SERVER_PREFERENCE: int +OP_SINGLE_DH_USE: int +OP_SINGLE_ECDH_USE: int +OP_NO_COMPRESSION: int +if sys.version_info >= (3, 6): + OP_NO_TICKET: int + +if sys.version_info < (3,) or sys.version_info >= (3, 5): + HAS_ALPN: int +HAS_ECDH: bool +HAS_SNI: bool +HAS_NPN: bool +CHANNEL_BINDING_TYPES: List[str] + +OPENSSL_VERSION: str +OPENSSL_VERSION_INFO: Tuple[int, int, int, int, int] +OPENSSL_VERSION_NUMBER: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + ALERT_DESCRIPTION_HANDSHAKE_FAILURE: int + ALERT_DESCRIPTION_INTERNAL_ERROR: int + ALERT_DESCRIPTION_ACCESS_DENIED: int + ALERT_DESCRIPTION_BAD_CERTIFICATE: int + ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE: int + ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE: int + ALERT_DESCRIPTION_BAD_RECORD_MAC: int + ALERT_DESCRIPTION_CERTIFICATE_EXPIRED: int + ALERT_DESCRIPTION_CERTIFICATE_REVOKED: int + ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN: int + ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE: int + ALERT_DESCRIPTION_CLOSE_NOTIFY: int + ALERT_DESCRIPTION_DECODE_ERROR: int + ALERT_DESCRIPTION_DECOMPRESSION_FAILURE: int + ALERT_DESCRIPTION_DECRYPT_ERROR: int + ALERT_DESCRIPTION_ILLEGAL_PARAMETER: int + ALERT_DESCRIPTION_INSUFFICIENT_SECURITY: int + ALERT_DESCRIPTION_NO_RENEGOTIATION: int + ALERT_DESCRIPTION_PROTOCOL_VERSION: int + ALERT_DESCRIPTION_RECORD_OVERFLOW: int + ALERT_DESCRIPTION_UNEXPECTED_MESSAGE: int + ALERT_DESCRIPTION_UNKNOWN_CA: int + ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY: int + ALERT_DESCRIPTION_UNRECOGNIZED_NAME: int + ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE: int + ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION: int + ALERT_DESCRIPTION_USER_CANCELLED: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + _PurposeType = NamedTuple('_PurposeType', [('nid', int), ('shortname', str), ('longname', str), ('oid', str)]) + class Purpose: + SERVER_AUTH: _PurposeType + CLIENT_AUTH: _PurposeType + + +class SSLSocket(socket.socket): + context: SSLContext + server_side: bool + server_hostname: Optional[str] + if sys.version_info >= (3, 6): + session: Optional[SSLSession] + session_reused: Optional[bool] + + def read(self, len: int = ..., + buffer: Optional[bytearray] = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def do_handshake(self) -> None: ... + def getpeercert(self, binary_form: bool = ...) -> _PeerCertRetType: ... + def cipher(self) -> Tuple[str, int, int]: ... + if sys.version_info >= (3, 5): + def shared_cipher(self) -> Optional[List[Tuple[str, int, int]]]: ... + def compression(self) -> Optional[str]: ... + def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def selected_alpn_protocol(self) -> Optional[str]: ... + def selected_npn_protocol(self) -> Optional[str]: ... + def unwrap(self) -> socket.socket: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def version(self) -> Optional[str]: ... + def pending(self) -> int: ... + + +class SSLContext: + if sys.version_info < (3,) or sys.version_info >= (3, 4): + check_hostname: bool + options: int + @property + def protocol(self) -> int: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + verify_flags: int + verify_mode: int + if sys.version_info >= (3, 5): + def __init__(self, protocol: int = ...) -> None: ... + else: + def __init__(self, protocol: int) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def cert_store_stats(self) -> Dict[str, int]: ... + def load_cert_chain(self, certfile: str, keyfile: Optional[str] = ..., + password: _PasswordType = ...) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def load_default_certs(self, purpose: _PurposeType = ...) -> None: ... + def load_verify_locations(self, cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Union[str, bytes, None] = ...) -> None: ... + def get_ca_certs(self, + binary_form: bool = ...) -> Union[List[_PeerCertRetDictType], List[bytes]]: ... + else: + def load_verify_locations(self, + cafile: Optional[str] = ..., + capath: Optional[str] = ...) -> None: ... + def set_default_verify_paths(self) -> None: ... + def set_ciphers(self, ciphers: str) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def set_alpn_protocols(self, protocols: List[str]) -> None: ... + def set_npn_protocols(self, protocols: List[str]) -> None: ... + def set_servername_callback(self, + server_name_callback: Optional[_SrvnmeCbType]) -> None: ... + def load_dh_params(self, dhfile: str) -> None: ... + def set_ecdh_curve(self, curve_name: str) -> None: ... + def wrap_socket(self, sock: socket.socket, server_side: bool = ..., + do_handshake_on_connect: bool = ..., + suppress_ragged_eofs: bool = ..., + server_hostname: Optional[str] = ...) -> SSLSocket: ... + if sys.version_info >= (3, 5): + def wrap_bio(self, incoming: MemoryBIO, outgoing: MemoryBIO, + server_side: bool = ..., + server_hostname: Optional[str] = ...) -> SSLObject: ... + def session_stats(self) -> Dict[str, int]: ... + + +if sys.version_info >= (3, 5): + class SSLObject: + context: SSLContext + server_side: bool + server_hostname: Optional[str] + if sys.version_info >= (3, 6): + session: Optional[SSLSession] + session_reused: bool + def read(self, len: int = ..., + buffer: Optional[bytearray] = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def getpeercert(self, binary_form: bool = ...) -> _PeerCertRetType: ... + def selected_npn_protocol(self) -> Optional[str]: ... + def cipher(self) -> Tuple[str, int, int]: ... + def shared_cipher(self) -> Optional[List[Tuple[str, int, int]]]: ... + def compression(self) -> Optional[str]: ... + def pending(self) -> int: ... + def do_handshake(self) -> None: ... + def unwrap(self) -> None: ... + def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ... + + class MemoryBIO: + pending: int + eof: bool + def read(self, n: int = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def write_eof(self) -> None: ... + +if sys.version_info >= (3, 6): + class SSLSession: + id: bytes + time: int + timeout: int + ticket_lifetime_hint: int + has_ticket: bool + + +# TODO below documented in cpython but not in docs.python.org +# taken from python 3.4 +SSL_ERROR_EOF: int +SSL_ERROR_INVALID_ERROR_CODE: int +SSL_ERROR_SSL: int +SSL_ERROR_SYSCALL: int +SSL_ERROR_WANT_CONNECT: int +SSL_ERROR_WANT_READ: int +SSL_ERROR_WANT_WRITE: int +SSL_ERROR_WANT_X509_LOOKUP: int +SSL_ERROR_ZERO_RETURN: int + +def get_protocol_name(protocol_code: int) -> str: ... + +AF_INET: int +PEM_FOOTER: str +PEM_HEADER: str +SOCK_STREAM: int +SOL_SOCKET: int +SO_TYPE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi new file mode 100644 index 0000000..e3b7e9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi @@ -0,0 +1,23 @@ +# Stubs for stringprep (Python 2 and 3) + +from typing import Text + +def in_table_a1(code: Text) -> bool: ... +def in_table_b1(code: Text) -> bool: ... +def map_table_b3(code: Text) -> Text: ... +def map_table_b2(a: Text) -> Text: ... +def in_table_c11(code: Text) -> bool: ... +def in_table_c12(code: Text) -> bool: ... +def in_table_c11_c12(code: Text) -> bool: ... +def in_table_c21(code: Text) -> bool: ... +def in_table_c22(code: Text) -> bool: ... +def in_table_c21_c22(code: Text) -> bool: ... +def in_table_c3(code: Text) -> bool: ... +def in_table_c4(code: Text) -> bool: ... +def in_table_c5(code: Text) -> bool: ... +def in_table_c6(code: Text) -> bool: ... +def in_table_c7(code: Text) -> bool: ... +def in_table_c8(code: Text) -> bool: ... +def in_table_c9(code: Text) -> bool: ... +def in_table_d1(code: Text) -> bool: ... +def in_table_d2(code: Text) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/struct.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/struct.pyi new file mode 100644 index 0000000..552ee22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/struct.pyi @@ -0,0 +1,44 @@ +# Stubs for struct + +# Based on http://docs.python.org/3.2/library/struct.html +# Based on http://docs.python.org/2/library/struct.html + +import sys +from typing import Any, Tuple, Text, Union, Iterator +from array import array +from mmap import mmap + +class error(Exception): ... + +_FmtType = Union[bytes, Text] +if sys.version_info >= (3,): + _BufferType = Union[array[int], bytes, bytearray, memoryview, mmap] + _WriteBufferType = Union[array, bytearray, memoryview, mmap] +else: + _BufferType = Union[array[int], bytes, bytearray, buffer, memoryview, mmap] + _WriteBufferType = Union[array[Any], bytearray, buffer, memoryview, mmap] + +def pack(fmt: _FmtType, *v: Any) -> bytes: ... +def pack_into(fmt: _FmtType, buffer: _WriteBufferType, offset: int, *v: Any) -> None: ... +def unpack(fmt: _FmtType, buffer: _BufferType) -> Tuple[Any, ...]: ... +def unpack_from(fmt: _FmtType, buffer: _BufferType, offset: int = ...) -> Tuple[Any, ...]: ... +if sys.version_info >= (3, 4): + def iter_unpack(fmt: _FmtType, buffer: _BufferType) -> Iterator[Tuple[Any, ...]]: ... + +def calcsize(fmt: _FmtType) -> int: ... + +class Struct: + if sys.version_info >= (3, 7): + format: str + else: + format: bytes + size: int + + def __init__(self, format: _FmtType) -> None: ... + + def pack(self, *v: Any) -> bytes: ... + def pack_into(self, buffer: _WriteBufferType, offset: int, *v: Any) -> None: ... + def unpack(self, buffer: _BufferType) -> Tuple[Any, ...]: ... + def unpack_from(self, buffer: _BufferType, offset: int = ...) -> Tuple[Any, ...]: ... + if sys.version_info >= (3, 4): + def iter_unpack(self, buffer: _BufferType) -> Iterator[Tuple[Any, ...]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi new file mode 100644 index 0000000..6577c31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi @@ -0,0 +1,87 @@ +# Stubs for sunau (Python 2 and 3) + +import sys +from typing import Any, NamedTuple, NoReturn, Optional, Text, IO, Union, Tuple + +_File = Union[Text, IO[bytes]] + +class Error(Exception): ... + +AUDIO_FILE_MAGIC: int +AUDIO_FILE_ENCODING_MULAW_8: int +AUDIO_FILE_ENCODING_LINEAR_8: int +AUDIO_FILE_ENCODING_LINEAR_16: int +AUDIO_FILE_ENCODING_LINEAR_24: int +AUDIO_FILE_ENCODING_LINEAR_32: int +AUDIO_FILE_ENCODING_FLOAT: int +AUDIO_FILE_ENCODING_DOUBLE: int +AUDIO_FILE_ENCODING_ADPCM_G721: int +AUDIO_FILE_ENCODING_ADPCM_G722: int +AUDIO_FILE_ENCODING_ADPCM_G723_3: int +AUDIO_FILE_ENCODING_ADPCM_G723_5: int +AUDIO_FILE_ENCODING_ALAW_8: int +AUDIO_UNKNOWN_SIZE: int + +if sys.version_info < (3, 0): + _sunau_params = Tuple[int, int, int, int, str, str] +else: + _sunau_params = NamedTuple('_sunau_params', [ + ('nchannels', int), + ('sampwidth', int), + ('framerate', int), + ('nframes', int), + ('comptype', str), + ('compname', str), + ]) + +class Au_read: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 3): + def __enter__(self) -> Au_read: ... + def __exit__(self, *args: Any) -> None: ... + def getfp(self) -> Optional[IO[bytes]]: ... + def rewind(self) -> None: ... + def close(self) -> None: ... + def tell(self) -> int: ... + def getnchannels(self) -> int: ... + def getnframes(self) -> int: ... + def getsampwidth(self) -> int: ... + def getframerate(self) -> int: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def getparams(self) -> _sunau_params: ... + def getmarkers(self) -> None: ... + def getmark(self, id: Any) -> NoReturn: ... + def setpos(self, pos: int) -> None: ... + def readframes(self, nframes: int) -> Optional[bytes]: ... + +class Au_write: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 3): + def __enter__(self) -> Au_write: ... + def __exit__(self, *args: Any) -> None: ... + def setnchannels(self, nchannels: int) -> None: ... + def getnchannels(self) -> int: ... + def setsampwidth(self, sampwidth: int) -> None: ... + def getsampwidth(self) -> int: ... + def setframerate(self, framerate: float) -> None: ... + def getframerate(self) -> int: ... + def setnframes(self, nframes: int) -> None: ... + def getnframes(self) -> int: ... + def setcomptype(self, comptype: str, compname: str) -> None: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def setparams(self, params: _sunau_params) -> None: ... + def getparams(self) -> _sunau_params: ... + def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... + def getmark(self, id: Any) -> NoReturn: ... + def getmarkers(self) -> None: ... + def tell(self) -> int: ... + # should be any bytes-like object after 3.4, but we don't have a type for that + def writeframesraw(self, data: bytes) -> None: ... + def writeframes(self, data: bytes) -> None: ... + def close(self) -> None: ... + +# Returns a Au_read if mode is rb and Au_write if mode is wb +def open(f: _File, mode: Optional[str] = ...) -> Any: ... +openfp = open diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi new file mode 100644 index 0000000..fd8b9ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi @@ -0,0 +1,45 @@ +import sys +from typing import List, Sequence, Tuple, Text + +def symtable(code: Text, filename: Text, compile_type: Text) -> SymbolTable: ... + +class SymbolTable(object): + def get_type(self) -> str: ... + def get_id(self) -> int: ... + def get_name(self) -> str: ... + def get_lineno(self) -> int: ... + def is_optimized(self) -> bool: ... + def is_nested(self) -> bool: ... + def has_children(self) -> bool: ... + def has_exec(self) -> bool: ... + if sys.version_info < (3, 0): + def has_import_star(self) -> bool: ... + def get_identifiers(self) -> Sequence[str]: ... + def lookup(self, name: str) -> Symbol: ... + def get_symbols(self) -> List[Symbol]: ... + def get_children(self) -> List[SymbolTable]: ... + +class Function(SymbolTable): + def get_parameters(self) -> Tuple[str, ...]: ... + def get_locals(self) -> Tuple[str, ...]: ... + def get_globals(self) -> Tuple[str, ...]: ... + def get_frees(self) -> Tuple[str, ...]: ... + +class Class(SymbolTable): + def get_methods(self) -> Tuple[str, ...]: ... + +class Symbol(object): + def get_name(self) -> str: ... + def is_referenced(self) -> bool: ... + def is_parameter(self) -> bool: ... + def is_global(self) -> bool: ... + def is_declared_global(self) -> bool: ... + def is_local(self) -> bool: ... + if sys.version_info >= (3, 6): + def is_annotated(self) -> bool: ... + def is_free(self) -> bool: ... + def is_imported(self) -> bool: ... + def is_assigned(self) -> bool: ... + def is_namespace(self) -> bool: ... + def get_namespaces(self) -> Sequence[SymbolTable]: ... + def get_namespace(self) -> SymbolTable: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi new file mode 100644 index 0000000..5d6c9cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi @@ -0,0 +1,19 @@ +# Stubs for sysconfig + +from typing import overload, Any, Dict, IO, List, Optional, Tuple, Union + +@overload +def get_config_vars() -> Dict[str, Any]: ... +@overload +def get_config_vars(arg: str, *args: str) -> List[Any]: ... +def get_config_var(name: str) -> Optional[str]: ... +def get_scheme_names() -> Tuple[str, ...]: ... +def get_path_names() -> Tuple[str, ...]: ... +def get_path(name: str, scheme: str = ..., vars: Optional[Dict[str, Any]] = ..., expand: bool = ...) -> Optional[str]: ... +def get_paths(scheme: str = ..., vars: Optional[Dict[str, Any]] = ..., expand: bool = ...) -> Dict[str, str]: ... +def get_python_version() -> str: ... +def get_platform() -> str: ... +def is_python_build() -> bool: ... +def parse_config_h(fp: IO[Any], vars: Optional[Dict[str, Any]]) -> Dict[str, Any]: ... +def get_config_h_filename() -> str: ... +def get_makefile_filename() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi new file mode 100644 index 0000000..1237a6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi @@ -0,0 +1,44 @@ +from typing import overload + +LOG_ALERT: int +LOG_AUTH: int +LOG_CONS: int +LOG_CRIT: int +LOG_CRON: int +LOG_DAEMON: int +LOG_DEBUG: int +LOG_EMERG: int +LOG_ERR: int +LOG_INFO: int +LOG_KERN: int +LOG_LOCAL0: int +LOG_LOCAL1: int +LOG_LOCAL2: int +LOG_LOCAL3: int +LOG_LOCAL4: int +LOG_LOCAL5: int +LOG_LOCAL6: int +LOG_LOCAL7: int +LOG_LPR: int +LOG_MAIL: int +LOG_NDELAY: int +LOG_NEWS: int +LOG_NOTICE: int +LOG_NOWAIT: int +LOG_PERROR: int +LOG_PID: int +LOG_SYSLOG: int +LOG_USER: int +LOG_UUCP: int +LOG_WARNING: int + +def LOG_MASK(a: int) -> int: ... +def LOG_UPTO(a: int) -> int: ... +def closelog() -> None: ... +def openlog(ident: str = ..., logoption: int = ..., facility: int = ...) -> None: ... +def setlogmask(x: int) -> int: ... + +@overload +def syslog(priority: int, message: str) -> None: ... +@overload +def syslog(message: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi new file mode 100644 index 0000000..cbc8353 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi @@ -0,0 +1,22 @@ +# Stubs for tabnanny (Python 2 and 3) + +import os +import sys +from typing import Iterable, Tuple, Union + +if sys.version_info >= (3, 6): + _Path = Union[str, bytes, os.PathLike] +else: + _Path = Union[str, bytes] + +verbose: int +filename_only: int + +class NannyNag(Exception): + def __init__(self, lineno: int, msg: str, line: str) -> None: ... + def get_lineno(self) -> int: ... + def get_msg(self) -> str: ... + def get_line(self) -> str: ... + +def check(file: _Path) -> None: ... +def process_tokens(tokens: Iterable[Tuple[int, str, Tuple[int, int], Tuple[int, int], str]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi new file mode 100644 index 0000000..f598494 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi @@ -0,0 +1,189 @@ +# Stubs for tarfile + +from typing import ( + Callable, IO, Iterable, Iterator, List, Mapping, Optional, Type, + Union, +) +import os +import sys +from types import TracebackType + +if sys.version_info >= (3, 6): + _Path = Union[bytes, str, os.PathLike] +elif sys.version_info >= (3,): + _Path = Union[bytes, str] +else: + _Path = Union[str, unicode] + +ENCODING: str + +USTAR_FORMAT: int +GNU_FORMAT: int +PAX_FORMAT: int +DEFAULT_FORMAT: int + +REGTYPE: bytes +AREGTYPE: bytes +LNKTYPE: bytes +SYMTYPE: bytes +DIRTYPE: bytes +FIFOTYPE: bytes +CONTTYPE: bytes +CHRTYPE: bytes +BLKTYPE: bytes +GNUTYPE_SPARSE: bytes + +if sys.version_info < (3,): + TAR_PLAIN: int + TAR_GZIPPED: int + +def open(name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., bufsize: int = ..., + *, format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ..., + compresslevel: Optional[int] = ...) -> TarFile: ... + +class TarFile(Iterable[TarInfo]): + name: Optional[_Path] + mode: str + fileobj: Optional[IO[bytes]] + format: Optional[int] + tarinfo: Optional[TarInfo] + dereference: Optional[bool] + ignore_zeros: Optional[bool] + encoding: Optional[str] + errors: str + pax_headers: Optional[Mapping[str, str]] + debug: Optional[int] + errorlevel: Optional[int] + if sys.version_info < (3,): + posix: bool + def __init__(self, name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., + format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ..., + compresslevel: Optional[int] = ...) -> None: ... + def __enter__(self) -> TarFile: ... + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def __iter__(self) -> Iterator[TarInfo]: ... + @classmethod + def open(cls, name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., bufsize: int = ..., + *, format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ...) -> TarFile: ... + def getmember(self, name: str) -> TarInfo: ... + def getmembers(self) -> List[TarInfo]: ... + def getnames(self) -> List[str]: ... + if sys.version_info >= (3, 5): + def list(self, verbose: bool = ..., + *, members: Optional[List[TarInfo]] = ...) -> None: ... + else: + def list(self, verbose: bool = ...) -> None: ... + def next(self) -> Optional[TarInfo]: ... + if sys.version_info >= (3, 5): + def extractall(self, path: _Path = ..., + members: Optional[List[TarInfo]] = ..., + *, numeric_owner: bool = ...) -> None: ... + else: + def extractall(self, path: _Path = ..., + members: Optional[List[TarInfo]] = ...) -> None: ... + if sys.version_info >= (3, 5): + def extract(self, member: Union[str, TarInfo], path: _Path = ..., + set_attrs: bool = ..., + *, numeric_owner: bool = ...) -> None: ... + elif sys.version_info >= (3,): + def extract(self, member: Union[str, TarInfo], path: _Path = ..., + set_attrs: bool = ...) -> None: ... + else: + def extract(self, member: Union[str, TarInfo], + path: _Path = ...) -> None: ... + def extractfile(self, + member: Union[str, TarInfo]) -> Optional[IO[bytes]]: ... + if sys.version_info >= (3, 7): + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., *, + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + elif sys.version_info >= (3,): + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., + exclude: Optional[Callable[[str], bool]] = ..., *, + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + else: + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., + exclude: Optional[Callable[[str], bool]] = ..., + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + def addfile(self, tarinfo: TarInfo, + fileobj: Optional[IO[bytes]] = ...) -> None: ... + def gettarinfo(self, name: Optional[str] = ..., + arcname: Optional[str] = ..., + fileobj: Optional[IO[bytes]] = ...) -> TarInfo: ... + def close(self) -> None: ... + +def is_tarfile(name: str) -> bool: ... + +if sys.version_info < (3, 8): + def filemode(mode: int) -> str: ... # undocumented + +if sys.version_info < (3,): + class TarFileCompat: + def __init__(self, filename: str, mode: str = ..., + compression: int = ...) -> None: ... + +class TarError(Exception): ... +class ReadError(TarError): ... +class CompressionError(TarError): ... +class StreamError(TarError): ... +class ExtractError(TarError): ... +class HeaderError(TarError): ... + +class TarInfo: + name: str + size: int + mtime: int + mode: int + type: bytes + linkname: str + uid: int + gid: int + uname: str + gname: str + pax_headers: Mapping[str, str] + def __init__(self, name: str = ...) -> None: ... + if sys.version_info >= (3,): + @classmethod + def frombuf(cls, buf: bytes, encoding: str, errors: str) -> TarInfo: ... + else: + @classmethod + def frombuf(cls, buf: bytes) -> TarInfo: ... + @classmethod + def fromtarfile(cls, tarfile: TarFile) -> TarInfo: ... + def tobuf(self, format: Optional[int] = ..., + encoding: Optional[str] = ..., errors: str = ...) -> bytes: ... + def isfile(self) -> bool: ... + def isreg(self) -> bool: ... + def isdir(self) -> bool: ... + def issym(self) -> bool: ... + def islnk(self) -> bool: ... + def ischr(self) -> bool: ... + def isblk(self) -> bool: ... + def isfifo(self) -> bool: ... + def isdev(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi new file mode 100644 index 0000000..50b90b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi @@ -0,0 +1,115 @@ +# Stubs for telnetlib (Python 2 and 3) + +import socket +import sys +from typing import Any, Callable, Match, Optional, Pattern, Sequence, Tuple, Union + +DEBUGLEVEL: int +TELNET_PORT: int + +IAC: bytes +DONT: bytes +DO: bytes +WONT: bytes +WILL: bytes +theNULL: bytes + +SE: bytes +NOP: bytes +DM: bytes +BRK: bytes +IP: bytes +AO: bytes +AYT: bytes +EC: bytes +EL: bytes +GA: bytes +SB: bytes + +BINARY: bytes +ECHO: bytes +RCP: bytes +SGA: bytes +NAMS: bytes +STATUS: bytes +TM: bytes +RCTE: bytes +NAOL: bytes +NAOP: bytes +NAOCRD: bytes +NAOHTS: bytes +NAOHTD: bytes +NAOFFD: bytes +NAOVTS: bytes +NAOVTD: bytes +NAOLFD: bytes +XASCII: bytes +LOGOUT: bytes +BM: bytes +DET: bytes +SUPDUP: bytes +SUPDUPOUTPUT: bytes +SNDLOC: bytes +TTYPE: bytes +EOR: bytes +TUID: bytes +OUTMRK: bytes +TTYLOC: bytes +VT3270REGIME: bytes +X3PAD: bytes +NAWS: bytes +TSPEED: bytes +LFLOW: bytes +LINEMODE: bytes +XDISPLOC: bytes +OLD_ENVIRON: bytes +AUTHENTICATION: bytes +ENCRYPT: bytes +NEW_ENVIRON: bytes + +TN3270E: bytes +XAUTH: bytes +CHARSET: bytes +RSP: bytes +COM_PORT_OPTION: bytes +SUPPRESS_LOCAL_ECHO: bytes +TLS: bytes +KERMIT: bytes +SEND_URL: bytes +FORWARD_X: bytes +PRAGMA_LOGON: bytes +SSPI_LOGON: bytes +PRAGMA_HEARTBEAT: bytes +EXOPL: bytes +NOOPT: bytes + +class Telnet: + def __init__(self, host: Optional[str] = ..., port: int = ..., + timeout: int = ...) -> None: ... + def open(self, host: str, port: int = ..., timeout: int = ...) -> None: ... + def msg(self, msg: str, *args: Any) -> None: ... + def set_debuglevel(self, debuglevel: int) -> None: ... + def close(self) -> None: ... + def get_socket(self) -> socket.socket: ... + def fileno(self) -> int: ... + def write(self, buffer: bytes) -> None: ... + def read_until(self, match: bytes, timeout: Optional[int] = ...) -> bytes: ... + def read_all(self) -> bytes: ... + def read_some(self) -> bytes: ... + def read_very_eager(self) -> bytes: ... + def read_eager(self) -> bytes: ... + def read_lazy(self) -> bytes: ... + def read_very_lazy(self) -> bytes: ... + def read_sb_data(self) -> bytes: ... + def set_option_negotiation_callback(self, callback: Optional[Callable[[socket.socket, bytes, bytes], Any]]) -> None: ... + def process_rawq(self) -> None: ... + def rawq_getchar(self) -> bytes: ... + def fill_rawq(self) -> None: ... + def sock_avail(self) -> bool: ... + def interact(self) -> None: ... + def mt_interact(self) -> None: ... + def listener(self) -> None: ... + def expect(self, list: Sequence[Union[Pattern[bytes], bytes]], timeout: Optional[int] = ...) -> Tuple[int, Optional[Match[bytes]], bytes]: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> Telnet: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/termios.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/termios.pyi new file mode 100644 index 0000000..d788e16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/termios.pyi @@ -0,0 +1,248 @@ +# Stubs for termios + +from typing import IO, List, Union + +_FD = Union[int, IO[str]] +_Attr = List[Union[int, List[bytes]]] + +# TODO constants not really documented +B0: int +B1000000: int +B110: int +B115200: int +B1152000: int +B1200: int +B134: int +B150: int +B1500000: int +B1800: int +B19200: int +B200: int +B2000000: int +B230400: int +B2400: int +B2500000: int +B300: int +B3000000: int +B3500000: int +B38400: int +B4000000: int +B460800: int +B4800: int +B50: int +B500000: int +B57600: int +B576000: int +B600: int +B75: int +B921600: int +B9600: int +BRKINT: int +BS0: int +BS1: int +BSDLY: int +CBAUD: int +CBAUDEX: int +CDSUSP: int +CEOF: int +CEOL: int +CEOT: int +CERASE: int +CFLUSH: int +CIBAUD: int +CINTR: int +CKILL: int +CLNEXT: int +CLOCAL: int +CQUIT: int +CR0: int +CR1: int +CR2: int +CR3: int +CRDLY: int +CREAD: int +CRPRNT: int +CRTSCTS: int +CS5: int +CS6: int +CS7: int +CS8: int +CSIZE: int +CSTART: int +CSTOP: int +CSTOPB: int +CSUSP: int +CWERASE: int +ECHO: int +ECHOCTL: int +ECHOE: int +ECHOK: int +ECHOKE: int +ECHONL: int +ECHOPRT: int +EXTA: int +EXTB: int +FF0: int +FF1: int +FFDLY: int +FIOASYNC: int +FIOCLEX: int +FIONBIO: int +FIONCLEX: int +FIONREAD: int +FLUSHO: int +HUPCL: int +ICANON: int +ICRNL: int +IEXTEN: int +IGNBRK: int +IGNCR: int +IGNPAR: int +IMAXBEL: int +INLCR: int +INPCK: int +IOCSIZE_MASK: int +IOCSIZE_SHIFT: int +ISIG: int +ISTRIP: int +IUCLC: int +IXANY: int +IXOFF: int +IXON: int +NCC: int +NCCS: int +NL0: int +NL1: int +NLDLY: int +NOFLSH: int +N_MOUSE: int +N_PPP: int +N_SLIP: int +N_STRIP: int +N_TTY: int +OCRNL: int +OFDEL: int +OFILL: int +OLCUC: int +ONLCR: int +ONLRET: int +ONOCR: int +OPOST: int +PARENB: int +PARMRK: int +PARODD: int +PENDIN: int +TAB0: int +TAB1: int +TAB2: int +TAB3: int +TABDLY: int +TCFLSH: int +TCGETA: int +TCGETS: int +TCIFLUSH: int +TCIOFF: int +TCIOFLUSH: int +TCION: int +TCOFLUSH: int +TCOOFF: int +TCOON: int +TCSADRAIN: int +TCSAFLUSH: int +TCSANOW: int +TCSBRK: int +TCSBRKP: int +TCSETA: int +TCSETAF: int +TCSETAW: int +TCSETS: int +TCSETSF: int +TCSETSW: int +TCXONC: int +TIOCCONS: int +TIOCEXCL: int +TIOCGETD: int +TIOCGICOUNT: int +TIOCGLCKTRMIOS: int +TIOCGPGRP: int +TIOCGSERIAL: int +TIOCGSOFTCAR: int +TIOCGWINSZ: int +TIOCINQ: int +TIOCLINUX: int +TIOCMBIC: int +TIOCMBIS: int +TIOCMGET: int +TIOCMIWAIT: int +TIOCMSET: int +TIOCM_CAR: int +TIOCM_CD: int +TIOCM_CTS: int +TIOCM_DSR: int +TIOCM_DTR: int +TIOCM_LE: int +TIOCM_RI: int +TIOCM_RNG: int +TIOCM_RTS: int +TIOCM_SR: int +TIOCM_ST: int +TIOCNOTTY: int +TIOCNXCL: int +TIOCOUTQ: int +TIOCPKT: int +TIOCPKT_DATA: int +TIOCPKT_DOSTOP: int +TIOCPKT_FLUSHREAD: int +TIOCPKT_FLUSHWRITE: int +TIOCPKT_NOSTOP: int +TIOCPKT_START: int +TIOCPKT_STOP: int +TIOCSCTTY: int +TIOCSERCONFIG: int +TIOCSERGETLSR: int +TIOCSERGETMULTI: int +TIOCSERGSTRUCT: int +TIOCSERGWILD: int +TIOCSERSETMULTI: int +TIOCSERSWILD: int +TIOCSER_TEMT: int +TIOCSETD: int +TIOCSLCKTRMIOS: int +TIOCSPGRP: int +TIOCSSERIAL: int +TIOCSSOFTCAR: int +TIOCSTI: int +TIOCSWINSZ: int +TOSTOP: int +VDISCARD: int +VEOF: int +VEOL: int +VEOL2: int +VERASE: int +VINTR: int +VKILL: int +VLNEXT: int +VMIN: int +VQUIT: int +VREPRINT: int +VSTART: int +VSTOP: int +VSUSP: int +VSWTC: int +VSWTCH: int +VT0: int +VT1: int +VTDLY: int +VTIME: int +VWERASE: int +XCASE: int +XTABS: int + +def tcgetattr(fd: _FD) -> _Attr: ... +def tcsetattr(fd: _FD, when: int, attributes: _Attr) -> None: ... +def tcsendbreak(fd: _FD, duration: int) -> None: ... +def tcdrain(fd: _FD) -> None: ... +def tcflush(fd: _FD, queue: int) -> None: ... +def tcflow(fd: _FD, action: int) -> None: ... + +class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/threading.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/threading.pyi new file mode 100644 index 0000000..3008f7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/threading.pyi @@ -0,0 +1,187 @@ +# Stubs for threading + +from typing import ( + Any, Callable, Iterable, List, Mapping, Optional, Tuple, Type, Union, + TypeVar, +) +from types import FrameType, TracebackType +import sys + +# TODO recursive type +_TF = Callable[[FrameType, str, Any], Optional[Callable[..., Any]]] + +_PF = Callable[[FrameType, str, Any], None] +_T = TypeVar('_T') + + +def active_count() -> int: ... +if sys.version_info < (3,): + def activeCount() -> int: ... + +def current_thread() -> Thread: ... +def currentThread() -> Thread: ... + +if sys.version_info >= (3,): + def get_ident() -> int: ... + +def enumerate() -> List[Thread]: ... + +if sys.version_info >= (3, 4): + def main_thread() -> Thread: ... + +def settrace(func: _TF) -> None: ... +def setprofile(func: _PF) -> None: ... +def stack_size(size: int = ...) -> int: ... + +if sys.version_info >= (3,): + TIMEOUT_MAX: float + +class ThreadError(Exception): ... + + +class local(object): + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + + +class Thread: + name: str + ident: Optional[int] + daemon: bool + if sys.version_info >= (3,): + def __init__(self, group: None = ..., + target: Optional[Callable[..., Any]] = ..., + name: Optional[str] = ..., + args: Iterable = ..., + kwargs: Mapping[str, Any] = ..., + *, daemon: Optional[bool] = ...) -> None: ... + else: + def __init__(self, group: None = ..., + target: Optional[Callable[..., Any]] = ..., + name: Optional[str] = ..., + args: Iterable = ..., + kwargs: Mapping[str, Any] = ...) -> None: ... + def start(self) -> None: ... + def run(self) -> None: ... + def join(self, timeout: Optional[float] = ...) -> None: ... + def getName(self) -> str: ... + def setName(self, name: str) -> None: ... + def is_alive(self) -> bool: ... + def isAlive(self) -> bool: ... + def isDaemon(self) -> bool: ... + def setDaemon(self, daemonic: bool) -> None: ... + + +class _DummyThread(Thread): ... + + +class Lock: + def __init__(self) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + def locked(self) -> bool: ... + + +class _RLock: + def __init__(self) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + + +RLock = _RLock + + +class Condition: + def __init__(self, lock: Union[Lock, _RLock, None] = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + if sys.version_info >= (3,): + def wait_for(self, predicate: Callable[[], _T], + timeout: Optional[float] = ...) -> _T: ... + def notify(self, n: int = ...) -> None: ... + def notify_all(self) -> None: ... + def notifyAll(self) -> None: ... + + +class Semaphore: + def __init__(self, value: int = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + +class BoundedSemaphore: + def __init__(self, value: int = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + + +class Event: + def __init__(self) -> None: ... + def is_set(self) -> bool: ... + if sys.version_info < (3,): + def isSet(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + + +class Timer(Thread): + if sys.version_info >= (3,): + def __init__(self, interval: float, function: Callable[..., None], + args: Optional[List[Any]] = ..., + kwargs: Optional[Mapping[str, Any]] = ...) -> None: ... + else: + def __init__(self, interval: float, function: Callable[..., None], + args: List[Any] = ..., + kwargs: Mapping[str, Any] = ...) -> None: ... + def cancel(self) -> None: ... + + +if sys.version_info >= (3,): + class Barrier: + parties: int + n_waiting: int + broken: bool + def __init__(self, parties: int, action: Optional[Callable[[], None]] = ..., + timeout: Optional[float] = ...) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> int: ... + def reset(self) -> None: ... + def abort(self) -> None: ... + + class BrokenBarrierError(RuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/time.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/time.pyi new file mode 100644 index 0000000..b04e616 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/time.pyi @@ -0,0 +1,103 @@ +"""Stub file for the 'time' module.""" +# See https://docs.python.org/3/library/time.html + +import sys +from typing import Any, NamedTuple, Tuple, Union, Optional +if sys.version_info >= (3, 3): + from types import SimpleNamespace + +_TimeTuple = Tuple[int, int, int, int, int, int, int, int, int] + +if sys.version_info < (3, 3): + accept2dyear: bool +altzone: int +daylight: int +timezone: int +tzname: Tuple[str, str] + +if sys.version_info >= (3, 7) and sys.platform != 'win32': + CLOCK_BOOTTIME: int # Linux + CLOCK_PROF: int # FreeBSD, NetBSD, OpenBSD + CLOCK_UPTIME: int # FreeBSD, OpenBSD + +if sys.version_info >= (3, 3) and sys.platform != 'win32': + CLOCK_HIGHRES: int = ... # Solaris only + CLOCK_MONOTONIC: int = ... # Unix only + CLOCK_MONOTONIC_RAW: int = ... # Linux 2.6.28 or later + CLOCK_PROCESS_CPUTIME_ID: int = ... # Unix only + CLOCK_REALTIME: int = ... # Unix only + CLOCK_THREAD_CPUTIME_ID: int = ... # Unix only + + +if sys.version_info >= (3, 3): + class struct_time( + NamedTuple( + '_struct_time', + [('tm_year', int), ('tm_mon', int), ('tm_mday', int), + ('tm_hour', int), ('tm_min', int), ('tm_sec', int), + ('tm_wday', int), ('tm_yday', int), ('tm_isdst', int), + ('tm_zone', str), ('tm_gmtoff', int)] + ) + ): + def __init__( + self, + o: Union[ + Tuple[int, int, int, int, int, int, int, int, int], + Tuple[int, int, int, int, int, int, int, int, int, str], + Tuple[int, int, int, int, int, int, int, int, int, str, int] + ], + _arg: Any = ..., + ) -> None: ... + def __new__( + cls, + o: Union[ + Tuple[int, int, int, int, int, int, int, int, int], + Tuple[int, int, int, int, int, int, int, int, int, str], + Tuple[int, int, int, int, int, int, int, int, int, str, int] + ], + _arg: Any = ..., + ) -> struct_time: ... +else: + class struct_time( + NamedTuple( + '_struct_time', + [('tm_year', int), ('tm_mon', int), ('tm_mday', int), + ('tm_hour', int), ('tm_min', int), ('tm_sec', int), + ('tm_wday', int), ('tm_yday', int), ('tm_isdst', int)] + ) + ): + def __init__(self, o: _TimeTuple, _arg: Any = ...) -> None: ... + def __new__(cls, o: _TimeTuple, _arg: Any = ...) -> struct_time: ... + +def asctime(t: Union[_TimeTuple, struct_time] = ...) -> str: ... +def clock() -> float: ... +def ctime(secs: Optional[float] = ...) -> str: ... +def gmtime(secs: Optional[float] = ...) -> struct_time: ... +def localtime(secs: Optional[float] = ...) -> struct_time: ... +def mktime(t: Union[_TimeTuple, struct_time]) -> float: ... +def sleep(secs: float) -> None: ... +def strftime(format: str, t: Union[_TimeTuple, struct_time] = ...) -> str: ... +def strptime(string: str, format: str = ...) -> struct_time: ... +def time() -> float: ... +if sys.platform != 'win32': + def tzset() -> None: ... # Unix only + +if sys.version_info >= (3, 3): + def get_clock_info(name: str) -> SimpleNamespace: ... + def monotonic() -> float: ... + def perf_counter() -> float: ... + def process_time() -> float: ... + if sys.platform != 'win32': + def clock_getres(clk_id: int) -> float: ... # Unix only + def clock_gettime(clk_id: int) -> float: ... # Unix only + def clock_settime(clk_id: int, time: float) -> None: ... # Unix only + +if sys.version_info >= (3, 7): + def clock_gettime_ns(clock_id: int) -> int: ... + def clock_settime_ns(clock_id: int, time: int) -> int: ... + def monotonic_ns() -> int: ... + def perf_counter_ns() -> int: ... + def process_time_ns() -> int: ... + def time_ns() -> int: ... + def thread_time() -> float: ... + def thread_time_ns() -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi new file mode 100644 index 0000000..bc4cbba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi @@ -0,0 +1,34 @@ +# Stubs for timeit (Python 2 and 3) + +import sys +from typing import Any, Callable, Dict, IO, List, Optional, Sequence, Text, Tuple, Union + +_str = Union[str, Text] +_Timer = Callable[[], float] +_stmt = Union[_str, Callable[[], Any]] + +default_timer: _Timer + +class Timer: + if sys.version_info >= (3, 5): + def __init__(self, stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + globals: Optional[Dict[str, Any]] = ...) -> None: ... + else: + def __init__(self, stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ...) -> None: ... + def print_exc(self, file: Optional[IO[str]] = ...) -> None: ... + def timeit(self, number: int = ...) -> float: ... + def repeat(self, repeat: int = ..., number: int = ...) -> List[float]: ... + if sys.version_info >= (3, 6): + def autorange(self, callback: Optional[Callable[[int, float], Any]] = ...) -> Tuple[int, float]: ... + +if sys.version_info >= (3, 5): + def timeit(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + number: int = ..., globals: Optional[Dict[str, Any]] = ...) -> float: ... + def repeat(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + repeat: int = ..., number: int = ..., globals: Optional[Dict[str, Any]] = ...) -> List[float]: ... +else: + def timeit(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + number: int = ...) -> float: ... + def repeat(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + repeat: int = ..., number: int = ...) -> List[float]: ... +def main(args: Optional[Sequence[str]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/token.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/token.pyi new file mode 100644 index 0000000..fa50862 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/token.pyi @@ -0,0 +1,71 @@ +import sys +from typing import Dict + +ENDMARKER: int +NAME: int +NUMBER: int +STRING: int +NEWLINE: int +INDENT: int +DEDENT: int +LPAR: int +RPAR: int +LSQB: int +RSQB: int +COLON: int +COMMA: int +SEMI: int +PLUS: int +MINUS: int +STAR: int +SLASH: int +VBAR: int +AMPER: int +LESS: int +GREATER: int +EQUAL: int +DOT: int +PERCENT: int +if sys.version_info < (3,): + BACKQUOTE: int +LBRACE: int +RBRACE: int +EQEQUAL: int +NOTEQUAL: int +LESSEQUAL: int +GREATEREQUAL: int +TILDE: int +CIRCUMFLEX: int +LEFTSHIFT: int +RIGHTSHIFT: int +DOUBLESTAR: int +PLUSEQUAL: int +MINEQUAL: int +STAREQUAL: int +SLASHEQUAL: int +PERCENTEQUAL: int +AMPEREQUAL: int +VBAREQUAL: int +CIRCUMFLEXEQUAL: int +LEFTSHIFTEQUAL: int +RIGHTSHIFTEQUAL: int +DOUBLESTAREQUAL: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +AT: int +if sys.version_info >= (3,): + RARROW: int + ELLIPSIS: int +if sys.version_info >= (3, 5): + ATEQUAL: int + AWAIT: int + ASYNC: int +OP: int +ERRORTOKEN: int +N_TOKENS: int +NT_OFFSET: int +tok_name: Dict[int, str] + +def ISTERMINAL(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISEOF(x: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/trace.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/trace.pyi new file mode 100644 index 0000000..af06d39 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/trace.pyi @@ -0,0 +1,35 @@ +# Stubs for trace (Python 2 and 3) + +import os +import sys +import types +from typing import Any, Callable, Mapping, Optional, Sequence, Text, Tuple, TypeVar, Union + +_T = TypeVar('_T') +_localtrace = Callable[[types.FrameType, str, Any], Callable[..., Any]] + +if sys.version_info >= (3, 6): + _Path = Union[Text, os.PathLike] +else: + _Path = Text + +class CoverageResults: + def update(self, other: CoverageResults) -> None: ... + def write_results(self, show_missing: bool = ..., summary: bool = ..., coverdir: Optional[_Path] = ...) -> None: ... + def write_results_file(self, path: _Path, lines: Sequence[str], lnotab: Any, lines_hit: Mapping[int, int], encoding: Optional[str] = ...) -> Tuple[int, int]: ... + +class Trace: + def __init__(self, count: int = ..., trace: int = ..., countfuncs: int = ..., countcallers: int = ..., + ignoremods: Sequence[str] = ..., ignoredirs: Sequence[str] = ..., infile: Optional[_Path] = ..., + outfile: Optional[_Path] = ..., timing: bool = ...) -> None: ... + def run(self, cmd: Union[str, types.CodeType]) -> None: ... + def runctx(self, cmd: Union[str, types.CodeType], globals: Optional[Mapping[str, Any]] = ..., locals: Optional[Mapping[str, Any]] = ...) -> None: ... + def runfunc(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... + def file_module_function_of(self, frame: types.FrameType) -> Tuple[str, Optional[str], str]: ... + def globaltrace_trackcallers(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def globaltrace_countfuncs(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def globaltrace_lt(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def localtrace_trace_and_count(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def localtrace_trace(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def localtrace_count(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def results(self) -> CoverageResults: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi new file mode 100644 index 0000000..7adc5eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi @@ -0,0 +1,120 @@ +# Stubs for traceback + +from typing import Any, Dict, Generator, IO, Iterator, List, Mapping, Optional, Protocol, Tuple, Type, Iterable +from types import FrameType, TracebackType +import sys + +_PT = Tuple[str, int, str, Optional[str]] + + +def print_tb(tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... +if sys.version_info >= (3,): + def print_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... + def print_exc(limit: Optional[int] = ..., file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... + def print_last(limit: Optional[int] = ..., file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... +else: + def print_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + def print_exc(limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + def print_last(limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... +def print_stack(f: Optional[FrameType] = ..., limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + +if sys.version_info >= (3, 5): + def extract_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> StackSummary: ... + def extract_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> StackSummary: ... + def format_list(extracted_list: List[FrameSummary]) -> List[str]: ... + class _Writer(Protocol): + def write(self, s: str) -> Any: ... + # undocumented + def print_list(extracted_list: List[FrameSummary], file: Optional[_Writer] = ...) -> None: ... +else: + def extract_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> List[_PT]: ... + def extract_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> List[_PT]: ... + def format_list(extracted_list: List[_PT]) -> List[str]: ... +def format_exception_only(etype: Optional[Type[BaseException]], + value: Optional[BaseException]) -> List[str]: ... +if sys.version_info >= (3,): + def format_exception(etype: Optional[Type[BaseException]], value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + chain: bool = ...) -> List[str]: ... + def format_exc(limit: Optional[int] = ..., chain: bool = ...) -> str: ... +else: + def format_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], + limit: Optional[int] = ...) -> List[str]: ... + def format_exc(limit: Optional[int] = ...) -> str: ... +def format_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> List[str]: ... +def format_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> List[str]: ... +if sys.version_info >= (3, 4): + def clear_frames(tb: TracebackType) -> None: ... +if sys.version_info >= (3, 5): + def walk_stack(f: Optional[FrameType]) -> Iterator[Tuple[FrameType, int]]: ... + def walk_tb(tb: Optional[TracebackType]) -> Iterator[Tuple[FrameType, int]]: ... +if sys.version_info < (3,): + def tb_lineno(tb: TracebackType) -> int: ... + + +if sys.version_info >= (3, 5): + class TracebackException: + __cause__ = ... # type:TracebackException + __context__ = ... # type:TracebackException + __suppress_context__: bool + stack: StackSummary + exc_type: Type[BaseException] + filename: str + lineno: int + text: str + offset: int + msg: str + def __init__(self, exc_type: Type[BaseException], + exc_value: BaseException, exc_traceback: TracebackType, + *, limit: Optional[int] = ..., lookup_lines: bool = ..., + capture_locals: bool = ...) -> None: ... + @classmethod + def from_exception(cls, exc: BaseException, + *, limit: Optional[int] = ..., + lookup_lines: bool = ..., + capture_locals: bool = ...) -> TracebackException: ... + def format(self, *, chain: bool = ...) -> Generator[str, None, None]: ... + def format_exception_only(self) -> Generator[str, None, None]: ... + + class FrameSummary(Iterable): + filename: str + lineno: int + name: str + line: str + locals: Optional[Dict[str, str]] + def __init__(self, filename: str, lineno: int, name: str, + lookup_line: bool = ..., + locals: Optional[Mapping[str, str]] = ..., + line: Optional[str] = ...) -> None: ... + # TODO: more precise typing for __getitem__ and __iter__, + # for a namedtuple-like view on (filename, lineno, name, str). + def __getitem__(self, i: int) -> Any: ... + def __iter__(self) -> Iterator[Any]: ... + + class StackSummary(List[FrameSummary]): + @classmethod + def extract(cls, + frame_gen: Generator[Tuple[FrameType, int], None, None], + *, limit: Optional[int] = ..., lookup_lines: bool = ..., + capture_locals: bool = ...) -> StackSummary: ... + @classmethod + def from_list(cls, a_list: List[_PT]) -> StackSummary: ... + def format(self) -> List[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tty.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tty.pyi new file mode 100644 index 0000000..2bce1ec --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/tty.pyi @@ -0,0 +1,17 @@ +# Stubs for tty (Python 3.6) + +from typing import IO, Union + +_FD = Union[int, IO[str]] + +# XXX: Undocumented integer constants +IFLAG: int +OFLAG: int +CFLAG: int +LFLAG: int +ISPEED: int +OSPEED: int +CC: int + +def setraw(fd: _FD, when: int = ...) -> None: ... +def setcbreak(fd: _FD, when: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi new file mode 100644 index 0000000..c9d9d90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi @@ -0,0 +1,501 @@ +from typing import Tuple, overload, Optional, Union, Dict, Any, Sequence, TypeVar, List, Callable, Text +import sys +if sys.version_info >= (3,): + from tkinter import Canvas, PhotoImage +else: + # TODO: Replace these aliases once we have Python 2 stubs for the Tkinter module. + Canvas = Any + PhotoImage = Any + +# Note: '_Color' is the alias we use for arguments and _AnyColor is the +# alias we use for return types. Really, these two aliases should be the +# same, but as per the "no union returns" typeshed policy, we'll return +# Any instead. +_Color = Union[Text, Tuple[float, float, float]] +_AnyColor = Any + +# TODO: Replace this with a TypedDict once it becomes standardized. +_PenState = Dict[str, Any] + +_Speed = Union[str, float] +_PolygonCoords = Sequence[Tuple[float, float]] + +# TODO: Type this more accurately +# Vec2D is actually a custom subclass of 'tuple'. +Vec2D = Tuple[float, float] + +class TurtleScreenBase(object): + cv: Canvas = ... + canvwidth: int = ... + canvheight: int = ... + xscale: float = ... + yscale: float = ... + def __init__(self, cv: Canvas) -> None: ... + if sys.version_info >= (3,): + def mainloop(self) -> None: ... + def textinput(self, title: str, prompt: str) -> Optional[str]: ... + def numinput(self, title: str, prompt: str, default: Optional[float] = ..., minval: Optional[float] = ..., maxval: Optional[float] = ...) -> Optional[float]: ... + +class Terminator(Exception): ... +class TurtleGraphicsError(Exception): ... + +class Shape(object): + def __init__(self, type_: str, data: Union[_PolygonCoords, PhotoImage, None] = ...) -> None: ... + def addcomponent(self, poly: _PolygonCoords, fill: _Color, outline: Optional[_Color] = ...) -> None: ... + +class TurtleScreen(TurtleScreenBase): + def __init__(self, cv: Canvas, mode: str = ..., colormode: float = ..., delay: int = ...) -> None: ... + def clear(self) -> None: ... + @overload + def mode(self) -> str: ... + @overload + def mode(self, mode: str) -> None: ... + def setworldcoordinates(self, llx: float, lly: float, urx: float, ury: float) -> None: ... + def register_shape(self, name: str, shape: Union[_PolygonCoords, Shape, None] = ...) -> None: ... + @overload + def colormode(self) -> float: ... + @overload + def colormode(self, cmode: float) -> None: ... + def reset(self) -> None: ... + def turtles(self) -> List[Turtle]: ... + @overload + def bgcolor(self) -> _AnyColor: ... + @overload + def bgcolor(self, color: _Color) -> None: ... + @overload + def bgcolor(self, r: float, g: float, b: float) -> None: ... + @overload + def tracer(self) -> int: ... + @overload + def tracer(self, n: int, delay: Optional[int] = ...) -> None: ... + @overload + def delay(self) -> int: ... + @overload + def delay(self, delay: int) -> None: ... + def update(self) -> None: ... + def window_width(self) -> int: ... + def window_height(self) -> int: ... + def getcanvas(self) -> Canvas: ... + def getshapes(self) -> List[str]: ... + def onclick(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... + def onkey(self, fun: Callable[[], Any], key: str) -> None: ... + def listen(self, xdummy: Optional[float] = ..., ydummy: Optional[float] = ...) -> None: ... + def ontimer(self, fun: Callable[[], Any], t: int = ...) -> None: ... + @overload + def bgpic(self) -> str: ... + @overload + def bgpic(self, picname: str) -> None: ... + @overload + def screensize(self) -> Tuple[int, int]: ... + @overload + def screensize(self, canvwidth: int, canvheight: int, bg: Optional[_Color] = ...) -> None: ... + onscreenclick = onclick + resetscreen = reset + clearscreen = clear + addshape = register_shape + if sys.version_info >= (3,): + def onkeypress(self, fun: Callable[[], Any], key: Optional[str] = ...) -> None: ... + onkeyrelease = onkey + +class TNavigator(object): + START_ORIENTATION: Dict[str, Vec2D] = ... + DEFAULT_MODE: str = ... + DEFAULT_ANGLEOFFSET: int = ... + DEFAULT_ANGLEORIENT: int = ... + def __init__(self, mode: str = ...) -> None: ... + def reset(self) -> None: ... + def degrees(self, fullcircle: float = ...) -> None: ... + def radians(self) -> None: ... + def forward(self, distance: float) -> None: ... + def back(self, distance: float) -> None: ... + def right(self, angle: float) -> None: ... + def left(self, angle: float) -> None: ... + def pos(self) -> Vec2D: ... + def xcor(self) -> float: ... + def ycor(self) -> float: ... + @overload + def goto(self, x: Tuple[float, float]) -> None: ... + @overload + def goto(self, x: float, y: float) -> None: ... + def home(self) -> None: ... + def setx(self, x: float) -> None: ... + def sety(self, y: float) -> None: ... + @overload + def distance(self, x: Union[TNavigator, Tuple[float, float]]) -> float: ... + @overload + def distance(self, x: float, y: float) -> float: ... + @overload + def towards(self, x: Union[TNavigator, Tuple[float, float]]) -> float: ... + @overload + def towards(self, x: float, y: float) -> float: ... + def heading(self) -> float: ... + def setheading(self, to_angle: float) -> None: ... + def circle(self, radius: float, extent: Optional[float] = ..., steps: Optional[int] = ...) -> None: ... + fd = forward + bk = back + backward = back + rt = right + lt = left + position = pos + setpos = goto + setposition = goto + seth = setheading + + +class TPen(object): + def __init__(self, resizemode: str = ...) -> None: ... + @overload + def resizemode(self) -> str: ... + @overload + def resizemode(self, rmode: str) -> None: ... + @overload + def pensize(self) -> int: ... + @overload + def pensize(self, width: int) -> None: ... + def penup(self) -> None: ... + def pendown(self) -> None: ... + def isdown(self) -> bool: ... + @overload + def speed(self) -> int: ... + @overload + def speed(self, speed: _Speed) -> None: ... + @overload + def pencolor(self) -> _AnyColor: ... + @overload + def pencolor(self, color: _Color) -> None: ... + @overload + def pencolor(self, r: float, g: float, b: float) -> None: ... + @overload + def fillcolor(self) -> _AnyColor: ... + @overload + def fillcolor(self, color: _Color) -> None: ... + @overload + def fillcolor(self, r: float, g: float, b: float) -> None: ... + @overload + def color(self) -> Tuple[_AnyColor, _AnyColor]: ... + @overload + def color(self, color: _Color) -> None: ... + @overload + def color(self, r: float, g: float, b: float) -> None: ... + @overload + def color(self, color1: _Color, color2: _Color) -> None: ... + def showturtle(self) -> None: ... + def hideturtle(self) -> None: ... + def isvisible(self) -> bool: ... + # Note: signatures 1 and 2 overlap unsafely when no arguments are provided + @overload + def pen(self) -> _PenState: ... # type: ignore + @overload + def pen(self, pen: Optional[_PenState] = ..., *, + shown: bool = ..., pendown: bool = ..., pencolor: _Color = ..., fillcolor: _Color = ..., + pensize: int = ..., speed: int = ..., resizemode: str = ..., stretchfactor: Tuple[float, float] = ..., + outline: int = ..., tilt: float = ...) -> None: ... + width = pensize + up = penup + pu = penup + pd = pendown + down = pendown + st = showturtle + ht = hideturtle + +_T = TypeVar('_T') + +class RawTurtle(TPen, TNavigator): + def __init__(self, canvas: Union[Canvas, TurtleScreen, None] = ..., shape: str = ..., undobuffersize: int = ..., visible: bool = ...) -> None: ... + def reset(self) -> None: ... + def setundobuffer(self, size: Optional[int]) -> None: ... + def undobufferentries(self) -> int: ... + def clear(self) -> None: ... + def clone(self: _T) -> _T: ... + @overload + def shape(self) -> str: ... + @overload + def shape(self, name: str) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapesize(self) -> Tuple[float, float, float]: ... # type: ignore + @overload + def shapesize(self, stretch_wid: Optional[float] = ..., stretch_len: Optional[float] = ..., outline: Optional[float] = ...) -> None: ... + if sys.version_info >= (3,): + @overload + def shearfactor(self) -> float: ... + @overload + def shearfactor(self, shear: float) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapetransform(self) -> Tuple[float, float, float, float]: ... # type: ignore + @overload + def shapetransform(self, t11: Optional[float] = ..., t12: Optional[float] = ..., t21: Optional[float] = ..., t22: Optional[float] = ...) -> None: ... + def get_shapepoly(self) -> Optional[_PolygonCoords]: ... + def settiltangle(self, angle: float) -> None: ... + @overload + def tiltangle(self) -> float: ... + @overload + def tiltangle(self, angle: float) -> None: ... + def tilt(self, angle: float) -> None: ... + # Can return either 'int' or Tuple[int, ...] based on if the stamp is + # a compound stamp or not. So, as per the "no Union return" policy, + # we return Any. + def stamp(self) -> Any: ... + def clearstamp(self, stampid: Union[int, Tuple[int, ...]]) -> None: ... + def clearstamps(self, n: Optional[int] = ...) -> None: ... + def filling(self) -> bool: ... + def begin_fill(self) -> None: ... + def end_fill(self) -> None: ... + def dot(self, size: Optional[int] = ..., *color: _Color) -> None: ... + def write(self, arg: object, move: bool = ..., align: str = ..., font: Tuple[str, int, str] = ...) -> None: ... + def begin_poly(self) -> None: ... + def end_poly(self) -> None: ... + def get_poly(self) -> Optional[_PolygonCoords]: ... + def getscreen(self) -> TurtleScreen: ... + def getturtle(self: _T) -> _T: ... + getpen = getturtle + def onclick(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def onrelease(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def ondrag(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def undo(self) -> None: ... + turtlesize = shapesize + +class _Screen(TurtleScreen): + def __init__(self) -> None: ... + def setup(self, width: int = ..., height: int = ..., startx: int = ..., starty: int = ...) -> None: ... + def title(self, titlestring: str) -> None: ... + def bye(self) -> None: ... + def exitonclick(self) -> None: ... + +def Screen() -> _Screen: ... + +class Turtle(RawTurtle): + def __init__(self, shape: str = ..., undobuffersize: int = ..., visible: bool = ...) -> None: ... + +RawPen = RawTurtle +Pen = Turtle + +def write_docstringdict(filename: str) -> None: ... + +# Note: it's somewhat unfortunate that we have to copy the function signatures. +# It would be nice if we could partially reduce the redundancy by doing something +# like the following: +# +# _screen: Screen +# clear = _screen.clear +# +# However, it seems pytype does not support this type of syntax in pyi files. + +# Functions copied from TurtleScreenBase: + +# Note: mainloop() was always present in the global scope, but was added to +# TurtleScreenBase in Python 3.0 +def mainloop() -> None: ... +if sys.version_info >= (3,): + def textinput(title: str, prompt: str) -> Optional[str]: ... + def numinput(title: str, prompt: str, default: Optional[float] = ..., minval: Optional[float] = ..., maxval: Optional[float] = ...) -> Optional[float]: ... + +# Functions copied from TurtleScreen: + +def clear() -> None: ... +@overload +def mode() -> str: ... +@overload +def mode(mode: str) -> None: ... +def setworldcoordinates(llx: float, lly: float, urx: float, ury: float) -> None: ... +def register_shape(name: str, shape: Union[_PolygonCoords, Shape, None] = ...) -> None: ... +@overload +def colormode() -> float: ... +@overload +def colormode(cmode: float) -> None: ... +def reset() -> None: ... +def turtles() -> List[Turtle]: ... +@overload +def bgcolor() -> _AnyColor: ... +@overload +def bgcolor(color: _Color) -> None: ... +@overload +def bgcolor(r: float, g: float, b: float) -> None: ... +@overload +def tracer() -> int: ... +@overload +def tracer(n: int, delay: Optional[int] = ...) -> None: ... +@overload +def delay() -> int: ... +@overload +def delay(delay: int) -> None: ... +def update() -> None: ... +def window_width() -> int: ... +def window_height() -> int: ... +def getcanvas() -> Canvas: ... +def getshapes() -> List[str]: ... +def onclick(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def onkey(fun: Callable[[], Any], key: str) -> None: ... +def listen(xdummy: Optional[float] = ..., ydummy: Optional[float] = ...) -> None: ... +def ontimer(fun: Callable[[], Any], t: int = ...) -> None: ... +@overload +def bgpic() -> str: ... +@overload +def bgpic(picname: str) -> None: ... +@overload +def screensize() -> Tuple[int, int]: ... +@overload +def screensize(canvwidth: int, canvheight: int, bg: Optional[_Color] = ...) -> None: ... +onscreenclick = onclick +resetscreen = reset +clearscreen = clear +addshape = register_shape +if sys.version_info >= (3,): + def onkeypress(fun: Callable[[], Any], key: Optional[str] = ...) -> None: ... + onkeyrelease = onkey + +# Functions copied from TNavigator: + +def degrees(fullcircle: float = ...) -> None: ... +def radians() -> None: ... +def forward(distance: float) -> None: ... +def back(distance: float) -> None: ... +def right(angle: float) -> None: ... +def left(angle: float) -> None: ... +def pos() -> Vec2D: ... +def xcor() -> float: ... +def ycor() -> float: ... +@overload +def goto(x: Tuple[float, float]) -> None: ... +@overload +def goto(x: float, y: float) -> None: ... +def home() -> None: ... +def setx(x: float) -> None: ... +def sety(y: float) -> None: ... +@overload +def distance(x: Union[TNavigator, Tuple[float, float]]) -> float: ... +@overload +def distance(x: float, y: float) -> float: ... +@overload +def towards(x: Union[TNavigator, Tuple[float, float]]) -> float: ... +@overload +def towards(x: float, y: float) -> float: ... +def heading() -> float: ... +def setheading(to_angle: float) -> None: ... +def circle(radius: float, extent: Optional[float] = ..., steps: Optional[int] = ...) -> None: ... +fd = forward +bk = back +backward = back +rt = right +lt = left +position = pos +setpos = goto +setposition = goto +seth = setheading + +# Functions copied from TPen: + +@overload +def resizemode() -> str: ... +@overload +def resizemode(rmode: str) -> None: ... +@overload +def pensize() -> int: ... +@overload +def pensize(width: int) -> None: ... +def penup() -> None: ... +def pendown() -> None: ... +def isdown() -> bool: ... +@overload +def speed() -> int: ... +@overload +def speed(speed: _Speed) -> None: ... +@overload +def pencolor() -> _AnyColor: ... +@overload +def pencolor(color: _Color) -> None: ... +@overload +def pencolor(r: float, g: float, b: float) -> None: ... +@overload +def fillcolor() -> _AnyColor: ... +@overload +def fillcolor(color: _Color) -> None: ... +@overload +def fillcolor(r: float, g: float, b: float) -> None: ... +@overload +def color() -> Tuple[_AnyColor, _AnyColor]: ... +@overload +def color(color: _Color) -> None: ... +@overload +def color(r: float, g: float, b: float) -> None: ... +@overload +def color(color1: _Color, color2: _Color) -> None: ... +def showturtle() -> None: ... +def hideturtle() -> None: ... +def isvisible() -> bool: ... +# Note: signatures 1 and 2 overlap unsafely when no arguments are provided +@overload +def pen() -> _PenState: ... # type: ignore +@overload +def pen(pen: Optional[_PenState] = ..., *, + shown: bool = ..., pendown: bool = ..., pencolor: _Color = ..., fillcolor: _Color = ..., + pensize: int = ..., speed: int = ..., resizemode: str = ..., stretchfactor: Tuple[float, float] = ..., + outline: int = ..., tilt: float = ...) -> None: ... +width = pensize +up = penup +pu = penup +pd = pendown +down = pendown +st = showturtle +ht = hideturtle + +# Functions copied from RawTurtle: + +def setundobuffer(size: Optional[int]) -> None: ... +def undobufferentries() -> int: ... +@overload +def shape() -> str: ... +@overload +def shape(name: str) -> None: ... +# Unsafely overlaps when no arguments are provided +@overload +def shapesize() -> Tuple[float, float, float]: ... # type: ignore +@overload +def shapesize(stretch_wid: Optional[float] = ..., stretch_len: Optional[float] = ..., outline: Optional[float] = ...) -> None: ... +if sys.version_info >= (3,): + @overload + def shearfactor() -> float: ... + @overload + def shearfactor(shear: float) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapetransform() -> Tuple[float, float, float, float]: ... # type: ignore + @overload + def shapetransform(t11: Optional[float] = ..., t12: Optional[float] = ..., t21: Optional[float] = ..., t22: Optional[float] = ...) -> None: ... + def get_shapepoly() -> Optional[_PolygonCoords]: ... +def settiltangle(angle: float) -> None: ... +@overload +def tiltangle() -> float: ... +@overload +def tiltangle(angle: float) -> None: ... +def tilt(angle: float) -> None: ... +# Can return either 'int' or Tuple[int, ...] based on if the stamp is +# a compound stamp or not. So, as per the "no Union return" policy, +# we return Any. +def stamp() -> Any: ... +def clearstamp(stampid: Union[int, Tuple[int, ...]]) -> None: ... +def clearstamps(n: Optional[int] = ...) -> None: ... +def filling() -> bool: ... +def begin_fill() -> None: ... +def end_fill() -> None: ... +def dot(size: Optional[int] = ..., *color: _Color) -> None: ... +def write(arg: object, move: bool = ..., align: str = ..., font: Tuple[str, int, str] = ...) -> None: ... +def begin_poly() -> None: ... +def end_poly() -> None: ... +def get_poly() -> Optional[_PolygonCoords]: ... +def getscreen() -> TurtleScreen: ... +def getturtle() -> Turtle: ... +getpen = getturtle +def onrelease(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def ondrag(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def undo() -> None: ... +turtlesize = shapesize + +# Functions copied from RawTurtle with a few tweaks: + +def clone() -> Turtle: ... + +# Extra functions present only in the global scope: + +done = mainloop diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi new file mode 100644 index 0000000..bf4f30b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi @@ -0,0 +1,38 @@ +# Stubs for unicodedata (Python 2.7 and 3.4) +from typing import Any, Text, TypeVar, Union + +ucd_3_2_0: UCD +ucnhash_CAPI: Any +unidata_version: str + +_default = TypeVar('_default') + +def bidirectional(__chr: Text) -> Text: ... +def category(__chr: Text) -> Text: ... +def combining(__chr: Text) -> int: ... +def decimal(__chr: Text, __default: _default = ...) -> Union[int, _default]: ... +def decomposition(__chr: Text) -> Text: ... +def digit(__chr: Text, __default: _default = ...) -> Union[int, _default]: ... +def east_asian_width(__chr: Text) -> Text: ... +def lookup(__name: Union[Text, bytes]) -> Text: ... +def mirrored(__chr: Text) -> int: ... +def name(__chr: Text, __default: _default = ...) -> Union[Text, _default]: ... +def normalize(__form: Text, __unistr: Text) -> Text: ... +def numeric(__chr: Text, __default: _default = ...) -> Union[float, _default]: ... + +class UCD(object): + # The methods below are constructed from the same array in C + # (unicodedata_functions) and hence identical to the methods above. + unidata_version: str + def bidirectional(self, __chr: Text) -> str: ... + def category(self, __chr: Text) -> str: ... + def combining(self, __chr: Text) -> int: ... + def decimal(self, __chr: Text, __default: _default = ...) -> Union[int, _default]: ... + def decomposition(self, __chr: Text) -> str: ... + def digit(self, __chr: Text, __default: _default = ...) -> Union[int, _default]: ... + def east_asian_width(self, __chr: Text) -> str: ... + def lookup(self, __name: Union[Text, bytes]) -> Text: ... + def mirrored(self, __chr: Text) -> int: ... + def name(self, __chr: Text, __default: _default = ...) -> Union[Text, _default]: ... + def normalize(self, __form: Text, __unistr: Text) -> Text: ... + def numeric(self, __chr: Text, __default: _default = ...) -> Union[float, _default]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uu.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uu.pyi new file mode 100644 index 0000000..c926dbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uu.pyi @@ -0,0 +1,13 @@ +# Stubs for uu (Python 2 and 3) +import sys +from typing import BinaryIO, Union, Optional, Text + +_File = Union[Text, BinaryIO] + +class Error(Exception): ... + +if sys.version_info >= (3, 7): + def encode(in_file: _File, out_file: _File, name: Optional[str] = ..., mode: Optional[int] = ..., backtick: bool = ...) -> None: ... +else: + def encode(in_file: _File, out_file: _File, name: Optional[str] = ..., mode: Optional[int] = ...) -> None: ... +def decode(in_file: _File, out_file: Optional[_File] = ..., mode: Optional[int] = ..., quiet: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi new file mode 100644 index 0000000..9c009d9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi @@ -0,0 +1,90 @@ +# Stubs for uuid + +import sys +from typing import Tuple, Optional, Any, Text + +# Because UUID has properties called int and bytes we need to rename these temporarily. +_Int = int +_Bytes = bytes +_FieldsType = Tuple[int, int, int, int, int, int] + +class UUID: + def __init__(self, hex: Optional[Text] = ..., + bytes: Optional[_Bytes] = ..., + bytes_le: Optional[_Bytes] = ..., + fields: Optional[_FieldsType] = ..., + int: Optional[_Int] = ..., + version: Optional[_Int] = ...) -> None: ... + @property + def bytes(self) -> _Bytes: ... + @property + def bytes_le(self) -> _Bytes: ... + @property + def clock_seq(self) -> _Int: ... + @property + def clock_seq_hi_variant(self) -> _Int: ... + @property + def clock_seq_low(self) -> _Int: ... + @property + def fields(self) -> _FieldsType: ... + @property + def hex(self) -> str: ... + @property + def int(self) -> _Int: ... + @property + def node(self) -> _Int: ... + @property + def time(self) -> _Int: ... + @property + def time_hi_version(self) -> _Int: ... + @property + def time_low(self) -> _Int: ... + @property + def time_mid(self) -> _Int: ... + @property + def urn(self) -> str: ... + @property + def variant(self) -> str: ... + @property + def version(self) -> Optional[_Int]: ... + + def __int__(self) -> _Int: ... + + if sys.version_info >= (3,): + def __eq__(self, other: Any) -> bool: ... + def __lt__(self, other: Any) -> bool: ... + def __le__(self, other: Any) -> bool: ... + def __gt__(self, other: Any) -> bool: ... + def __ge__(self, other: Any) -> bool: ... + else: + def get_bytes(self) -> _Bytes: ... + def get_bytes_le(self) -> _Bytes: ... + def get_clock_seq(self) -> _Int: ... + def get_clock_seq_hi_variant(self) -> _Int: ... + def get_clock_seq_low(self) -> _Int: ... + def get_fields(self) -> _FieldsType: ... + def get_hex(self) -> str: ... + def get_node(self) -> _Int: ... + def get_time(self) -> _Int: ... + def get_time_hi_version(self) -> _Int: ... + def get_time_low(self) -> _Int: ... + def get_time_mid(self) -> _Int: ... + def get_urn(self) -> str: ... + def get_variant(self) -> str: ... + def get_version(self) -> Optional[_Int]: ... + def __cmp__(self, other: Any) -> _Int: ... + +def getnode() -> int: ... +def uuid1(node: Optional[_Int] = ..., clock_seq: Optional[_Int] = ...) -> UUID: ... +def uuid3(namespace: UUID, name: str) -> UUID: ... +def uuid4() -> UUID: ... +def uuid5(namespace: UUID, name: str) -> UUID: ... + +NAMESPACE_DNS: UUID +NAMESPACE_URL: UUID +NAMESPACE_OID: UUID +NAMESPACE_X500: UUID +RESERVED_NCS: str +RFC_4122: str +RESERVED_MICROSOFT: str +RESERVED_FUTURE: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi new file mode 100644 index 0000000..a44e43e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi @@ -0,0 +1,38 @@ +# Stubs for warnings + +from typing import Any, Dict, List, NamedTuple, Optional, TextIO, Tuple, Type, Union +from types import ModuleType, TracebackType + +def warn(message: Union[str, Warning], category: Optional[Type[Warning]] = ..., + stacklevel: int = ...) -> None: ... +def warn_explicit(message: Union[str, Warning], category: Type[Warning], + filename: str, lineno: int, module: Optional[str] = ..., + registry: Optional[Dict[Union[str, Tuple[str, Type[Warning], int]], int]] = ..., + module_globals: Optional[Dict[str, Any]] = ...) -> None: ... +def showwarning(message: str, category: Type[Warning], filename: str, + lineno: int, file: Optional[TextIO] = ..., + line: Optional[str] = ...) -> None: ... +def formatwarning(message: str, category: Type[Warning], filename: str, + lineno: int, line: Optional[str] = ...) -> str: ... +def filterwarnings(action: str, message: str = ..., + category: Type[Warning] = ..., module: str = ..., + lineno: int = ..., append: bool = ...) -> None: ... +def simplefilter(action: str, category: Type[Warning] = ..., lineno: int = ..., + append: bool = ...) -> None: ... +def resetwarnings() -> None: ... + +_Record = NamedTuple('_Record', + [('message', str), + ('category', Type[Warning]), + ('filename', str), + ('lineno', int), + ('file', Optional[TextIO]), + ('line', Optional[str])]) + +class catch_warnings: + def __init__(self, *, record: bool = ..., + module: Optional[ModuleType] = ...) -> None: ... + def __enter__(self) -> Optional[List[_Record]]: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wave.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wave.pyi new file mode 100644 index 0000000..951142a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wave.pyi @@ -0,0 +1,76 @@ +# Stubs for wave (Python 2 and 3) + +import sys +from typing import ( + Any, NamedTuple, NoReturn, Optional, Text, BinaryIO, Union, Tuple +) + +_File = Union[Text, BinaryIO] + +class Error(Exception): ... + +WAVE_FORMAT_PCM: int + +if sys.version_info < (3, 0): + _wave_params = Tuple[int, int, int, int, str, str] +else: + _wave_params = NamedTuple('_wave_params', [ + ('nchannels', int), + ('sampwidth', int), + ('framerate', int), + ('nframes', int), + ('comptype', str), + ('compname', str), + ]) + +class Wave_read: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 0): + def __enter__(self) -> Wave_read: ... + def __exit__(self, *args: Any) -> None: ... + def getfp(self) -> Optional[BinaryIO]: ... + def rewind(self) -> None: ... + def close(self) -> None: ... + def tell(self) -> int: ... + def getnchannels(self) -> int: ... + def getnframes(self) -> int: ... + def getsampwidth(self) -> int: ... + def getframerate(self) -> int: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def getparams(self) -> _wave_params: ... + def getmarkers(self) -> None: ... + def getmark(self, id: Any) -> NoReturn: ... + def setpos(self, pos: int) -> None: ... + def readframes(self, nframes: int) -> bytes: ... + +class Wave_write: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 0): + def __enter__(self) -> Wave_write: ... + def __exit__(self, *args: Any) -> None: ... + def setnchannels(self, nchannels: int) -> None: ... + def getnchannels(self) -> int: ... + def setsampwidth(self, sampwidth: int) -> None: ... + def getsampwidth(self) -> int: ... + def setframerate(self, framerate: float) -> None: ... + def getframerate(self) -> int: ... + def setnframes(self, nframes: int) -> None: ... + def getnframes(self) -> int: ... + def setcomptype(self, comptype: str, compname: str) -> None: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def setparams(self, params: _wave_params) -> None: ... + def getparams(self) -> _wave_params: ... + def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... + def getmark(self, id: Any) -> NoReturn: ... + def getmarkers(self) -> None: ... + def tell(self) -> int: ... + # should be any bytes-like object after 3.4, but we don't have a type for that + def writeframesraw(self, data: bytes) -> None: ... + def writeframes(self, data: bytes) -> None: ... + def close(self) -> None: ... + +# Returns a Wave_read if mode is rb and Wave_write if mode is wb +def open(f: _File, mode: Optional[str] = ...) -> Any: ... +openfp = open diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi new file mode 100644 index 0000000..e3ddbf2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi @@ -0,0 +1,110 @@ +import sys +import types +from typing import ( + TypeVar, Generic, Any, Callable, overload, Mapping, Iterator, Tuple, + Iterable, Optional, Type, MutableMapping, Union, List, Dict +) + +from _weakref import ( + getweakrefcount as getweakrefcount, + getweakrefs as getweakrefs, + ref as ref, + proxy as proxy, + CallableProxyType as CallableProxyType, + ProxyType as ProxyType, + ReferenceType as ReferenceType) +from _weakrefset import WeakSet as WeakSet + +if sys.version_info < (3, 0): + from exceptions import ReferenceError as ReferenceError + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +ProxyTypes: Tuple[Type[Any], ...] + +if sys.version_info >= (3, 4): + class WeakMethod(ref[types.MethodType]): + def __new__(cls, meth: types.MethodType, callback: Optional[Callable[[types.MethodType], Any]] = ...) -> WeakMethod: ... + def __call__(self) -> Optional[types.MethodType]: ... + +class WeakValueDictionary(MutableMapping[_KT, _VT]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ... + + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, key: object) -> bool: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + + def copy(self) -> WeakValueDictionary[_KT, _VT]: ... + + if sys.version_info < (3, 0): + def keys(self) -> List[_KT]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + else: + # These are incompatible with Mapping + def keys(self) -> Iterator[_KT]: ... # type: ignore + def values(self) -> Iterator[_VT]: ... # type: ignore + def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore + def itervaluerefs(self) -> Iterator[KeyedRef[_KT, _VT]]: ... + def valuerefs(self) -> List[KeyedRef[_KT, _VT]]: ... + +class KeyedRef(ref[_T], Generic[_KT, _T]): + key: _KT + def __init__(self, ob: _T, callback: Callable[[_T], Any], key: _KT) -> None: ... + +class WeakKeyDictionary(MutableMapping[_KT, _VT]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ... + + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, key: object) -> bool: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + + def copy(self) -> WeakKeyDictionary[_KT, _VT]: ... + + if sys.version_info < (3, 0): + def keys(self) -> List[_KT]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def iterkeyrefs(self) -> Iterator[ref[_KT]]: ... + else: + # These are incompatible with Mapping + def keys(self) -> Iterator[_KT]: ... # type: ignore + def values(self) -> Iterator[_VT]: ... # type: ignore + def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore + def keyrefs(self) -> List[ref[_KT]]: ... + +if sys.version_info >= (3, 4): + class finalize: + def __init__(self, obj: _S, func: Callable[..., _T], *args: Any, **kwargs: Any) -> None: ... + def __call__(self, _: Any = ...) -> Optional[_T]: ... + def detach(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ... + def peek(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ... + alive: bool + atexit: bool diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi new file mode 100644 index 0000000..7d1b4cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi @@ -0,0 +1,99 @@ +import sys +from typing import Any, Optional, Callable, List, Text, Union, Sequence + +class Error(Exception): ... + +if sys.version_info >= (3, 7): + def register(name: Text, klass: Optional[Callable[[], BaseBrowser]], instance: BaseBrowser = ..., *, preferred: bool = ...) -> None: ... +else: + def register(name: Text, klass: Optional[Callable[[], BaseBrowser]], instance: BaseBrowser = ..., update_tryorder: int = ...) -> None: ... +def get(using: Optional[Text] = ...) -> BaseBrowser: ... +def open(url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... +def open_new(url: Text) -> bool: ... +def open_new_tab(url: Text) -> bool: ... + +class BaseBrowser: + args: List[str] + name: str + basename: str + def __init__(self, name: Text = ...) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + def open_new(self, url: Text) -> bool: ... + def open_new_tab(self, url: Text) -> bool: ... + +class GenericBrowser(BaseBrowser): + args: List[str] + name: str + basename: str + def __init__(self, name: Union[Text, Sequence[Text]]) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class BackgroundBrowser(GenericBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class UnixBrowser(BaseBrowser): + raise_opts: List[str] + background: bool + redirect_stdout: bool + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class Mozilla(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Galeon(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + background: bool + +if sys.version_info[:2] == (2, 7) or sys.version_info >= (3, 3): + class Chrome(UnixBrowser): + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Opera(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Elinks(UnixBrowser): + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + redirect_stdout: bool + +class Konqueror(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class Grail(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class WindowsDefault(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class MacOSX(BaseBrowser): + name: str + def __init__(self, name: Text) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class MacOSXOSAScript(BaseBrowser): + def __init__(self, name: Text) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi new file mode 100644 index 0000000..3271c88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi @@ -0,0 +1,87 @@ +import sys +from abc import abstractmethod +from types import TracebackType +from typing import Optional, Dict, MutableMapping, Type, Text, Callable, List, Tuple, IO + +from .headers import Headers +from .types import WSGIApplication, WSGIEnvironment, StartResponse, InputStream, ErrorStream +from .util import FileWrapper, guess_scheme + +_exc_info = Tuple[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]] + +def format_date_time(timestamp: Optional[float]) -> str: ... # undocumented +if sys.version_info >= (3, 2): + def read_environ() -> Dict[str, str]: ... + +class BaseHandler: + wsgi_version: Tuple[int, int] # undocumented + wsgi_multithread: bool + wsgi_multiprocess: bool + wsgi_run_once: bool + + origin_server: bool + http_version: str + server_software: Optional[str] + + os_environ: MutableMapping[str, str] + + wsgi_file_wrapper: Optional[Type[FileWrapper]] + headers_class: Type[Headers] # undocumented + + traceback_limit: Optional[int] + error_status: str + error_headers: List[Tuple[Text, Text]] + error_body: bytes + + def run(self, application: WSGIApplication) -> None: ... + + def setup_environ(self) -> None: ... + def finish_response(self) -> None: ... + def get_scheme(self) -> str: ... + def set_content_length(self) -> None: ... + def cleanup_headers(self) -> None: ... + def start_response(self, status: Text, headers: List[Tuple[Text, Text]], exc_info: Optional[_exc_info] = ...) -> Callable[[bytes], None]: ... + def send_preamble(self) -> None: ... + def write(self, data: bytes) -> None: ... + def sendfile(self) -> bool: ... + def finish_content(self) -> None: ... + def close(self) -> None: ... + def send_headers(self) -> None: ... + def result_is_file(self) -> bool: ... + def client_is_modern(self) -> bool: ... + def log_exception(self, exc_info: _exc_info) -> None: ... + def handle_error(self) -> None: ... + def error_output(self, environ: WSGIEnvironment, start_response: StartResponse) -> List[bytes]: ... + + @abstractmethod + def _write(self, data: bytes) -> None: ... + @abstractmethod + def _flush(self) -> None: ... + @abstractmethod + def get_stdin(self) -> InputStream: ... + @abstractmethod + def get_stderr(self) -> ErrorStream: ... + @abstractmethod + def add_cgi_vars(self) -> None: ... + +class SimpleHandler(BaseHandler): + stdin: InputStream + stdout: IO[bytes] + stderr: ErrorStream + base_env: MutableMapping[str, str] + def __init__(self, stdin: InputStream, stdout: IO[bytes], stderr: ErrorStream, environ: MutableMapping[str, str], multithread: bool = ..., multiprocess: bool = ...) -> None: ... + def get_stdin(self) -> InputStream: ... + def get_stderr(self) -> ErrorStream: ... + def add_cgi_vars(self) -> None: ... + def _write(self, data: bytes) -> None: ... + def _flush(self) -> None: ... + +class BaseCGIHandler(SimpleHandler): ... + +class CGIHandler(BaseCGIHandler): + def __init__(self) -> None: ... + +class IISCGIHandler(BaseCGIHandler): + def __init__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi new file mode 100644 index 0000000..8539225 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi @@ -0,0 +1,31 @@ +import sys +from typing import overload, Pattern, Optional, List, Tuple + +_HeaderList = List[Tuple[str, str]] + +tspecials: Pattern[str] # undocumented + +class Headers: + if sys.version_info < (3, 5): + def __init__(self, headers: _HeaderList) -> None: ... + else: + def __init__(self, headers: Optional[_HeaderList] = ...) -> None: ... + def __len__(self) -> int: ... + def __setitem__(self, name: str, val: str) -> None: ... + def __delitem__(self, name: str) -> None: ... + def __getitem__(self, name: str) -> Optional[str]: ... + if sys.version_info < (3,): + def has_key(self, name: str) -> bool: ... + def __contains__(self, name: str) -> bool: ... + def get_all(self, name: str) -> List[str]: ... + @overload + def get(self, name: str, default: str) -> str: ... + @overload + def get(self, name: str, default: Optional[str] = ...) -> Optional[str]: ... + def keys(self) -> List[str]: ... + def values(self) -> List[str]: ... + def items(self) -> _HeaderList: ... + if sys.version_info >= (3,): + def __bytes__(self) -> bytes: ... + def setdefault(self, name: str, value: str) -> str: ... + def add_header(self, _name: str, _value: Optional[str], **_params: Optional[str]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi new file mode 100644 index 0000000..50b8377 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi @@ -0,0 +1,40 @@ +import sys +from typing import Optional, List, Type, TypeVar, overload + +from .handlers import SimpleHandler +from .types import WSGIApplication, WSGIEnvironment, StartResponse, ErrorStream + +if sys.version_info < (3,): + from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer +else: + from http.server import HTTPServer, BaseHTTPRequestHandler + +server_version: str # undocumented +sys_version: str # undocumented +software_version: str # undocumented + +class ServerHandler(SimpleHandler): # undocumented + server_software: str + def close(self) -> None: ... + +class WSGIServer(HTTPServer): + application: Optional[WSGIApplication] + base_environ: WSGIEnvironment # only available after call to setup_environ() + def setup_environ(self) -> None: ... + def get_app(self) -> Optional[WSGIApplication]: ... + def set_app(self, application: Optional[WSGIApplication]) -> None: ... + +class WSGIRequestHandler(BaseHTTPRequestHandler): + server_version: str + def get_environ(self) -> WSGIEnvironment: ... + def get_stderr(self) -> ErrorStream: ... + def handle(self) -> None: ... + +def demo_app(environ: WSGIEnvironment, start_response: StartResponse) -> List[bytes]: ... + +_S = TypeVar("_S", bound=WSGIServer) + +@overload +def make_server(host: str, port: int, app: WSGIApplication, *, handler_class: Type[WSGIRequestHandler] = ...) -> WSGIServer: ... +@overload +def make_server(host: str, port: int, app: WSGIApplication, server_class: Type[_S], handler_class: Type[WSGIRequestHandler] = ...) -> _S: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi new file mode 100644 index 0000000..39a913e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi @@ -0,0 +1,44 @@ +# Type declaration for a WSGI Function +# +# wsgiref/types.py doesn't exist and neither do the types defined in this +# file. They are provided for type checking purposes. +# +# This means you cannot simply import wsgiref.types in your code. Instead, +# use the `TYPE_CHECKING` flag from the typing module: +# +# from typing import TYPE_CHECKING +# +# if TYPE_CHECKING: +# from wsgiref.types import WSGIApplication +# +# This import is now only taken into account by the type checker. Consequently, +# you need to use 'WSGIApplication' and not simply WSGIApplication when type +# hinting your code. Otherwise Python will raise NameErrors. + +from sys import _OptExcInfo +from typing import Callable, Dict, Iterable, List, Any, Text, Protocol, Tuple, Optional + +class StartResponse(Protocol): + def __call__(self, status: str, headers: List[Tuple[str, str]], exc_info: Optional[_OptExcInfo] = ...) -> Callable[[bytes], Any]: ... + +WSGIEnvironment = Dict[Text, Any] +WSGIApplication = Callable[[WSGIEnvironment, StartResponse], Iterable[bytes]] + +# WSGI input streams per PEP 3333 +class InputStream(Protocol): + def read(self, size: int = ...) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def __iter__(self) -> Iterable[bytes]: ... + +# WSGI error streams per PEP 3333 +class ErrorStream(Protocol): + def flush(self) -> None: ... + def write(self, s: str) -> None: ... + def writelines(self, seq: List[str]) -> None: ... + +class _Readable(Protocol): + def read(self, size: int = ...) -> bytes: ... +# Optional file wrapper in wsgi.file_wrapper +class FileWrapper(Protocol): + def __call__(self, file: _Readable, block_size: int = ...) -> Iterable[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi new file mode 100644 index 0000000..501ddcd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi @@ -0,0 +1,23 @@ +import sys +from typing import IO, Any, Optional + +from .types import WSGIEnvironment + +class FileWrapper: + filelike: IO[bytes] + blksize: int + def __init__(self, filelike: IO[bytes], bklsize: int = ...) -> None: ... + def __getitem__(self, key: Any) -> bytes: ... + def __iter__(self) -> FileWrapper: ... + if sys.version_info < (3,): + def next(self) -> bytes: ... + else: + def __next__(self) -> bytes: ... + def close(self) -> None: ... # only exists if filelike.close exists + +def guess_scheme(environ: WSGIEnvironment) -> str: ... +def application_uri(environ: WSGIEnvironment) -> str: ... +def request_uri(environ: WSGIEnvironment, include_query: bool = ...) -> str: ... +def shift_path_info(environ: WSGIEnvironment) -> Optional[str]: ... +def setup_testing_defaults(environ: WSGIEnvironment) -> None: ... +def is_hop_by_hop(header_name: str) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi new file mode 100644 index 0000000..c7fa699 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi @@ -0,0 +1,53 @@ +import sys +from typing import Any, Iterable, Iterator, Optional, NoReturn, Callable + +from wsgiref.types import WSGIApplication, InputStream, ErrorStream + +class WSGIWarning(Warning): ... + +def validator(application: WSGIApplication) -> WSGIApplication: ... + +class InputWrapper: + input: InputStream + def __init__(self, wsgi_input: InputStream) -> None: ... + if sys.version_info < (3,): + def read(self, size: int = ...) -> bytes: ... + def readline(self) -> bytes: ... + else: + def read(self, size: int) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> bytes: ... + def __iter__(self) -> Iterable[bytes]: ... + def close(self) -> NoReturn: ... + +class ErrorWrapper: + errors: ErrorStream + def __init__(self, wsgi_errors: ErrorStream) -> None: ... + def write(self, s: str) -> None: ... + def flush(self) -> None: ... + def writelines(self, seq: Iterable[str]) -> None: ... + def close(self) -> NoReturn: ... + +class WriteWrapper: + writer: Callable[[bytes], Any] + def __init__(self, wsgi_writer: Callable[[bytes], Any]) -> None: ... + def __call__(self, s: bytes) -> None: ... + +class PartialIteratorWrapper: + iterator: Iterator[bytes] + def __init__(self, wsgi_iterator: Iterator[bytes]) -> None: ... + def __iter__(self) -> IteratorWrapper: ... + +class IteratorWrapper: + original_iterator: Iterator[bytes] + iterator: Iterator[bytes] + closed: bool + check_start_response: Optional[bool] + def __init__(self, wsgi_iterator: Iterator[bytes], check_start_response: Optional[bool]) -> None: ... + def __iter__(self) -> IteratorWrapper: ... + if sys.version_info < (3,): + def next(self) -> bytes: ... + else: + def __next__(self) -> bytes: ... + def close(self) -> None: ... + def __del__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi new file mode 100644 index 0000000..864aced --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi @@ -0,0 +1,56 @@ +# Structs for xdrlib (Python 2 and 3) +from typing import Callable, List, Sequence, TypeVar + +_T = TypeVar('_T') + +class Error(Exception): + msg: str + def __init__(self, msg: str) -> None: ... + +class ConversionError(Error): ... + +class Packer: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def get_buffer(self) -> bytes: ... + def get_buf(self) -> bytes: ... + def pack_uint(self, x: int) -> None: ... + def pack_int(self, x: int) -> None: ... + def pack_enum(self, x: int) -> None: ... + def pack_bool(self, x: bool) -> None: ... + def pack_uhyper(self, x: int) -> None: ... + def pack_hyper(self, x: int) -> None: ... + def pack_float(self, x: float) -> None: ... + def pack_double(self, x: float) -> None: ... + def pack_fstring(self, n: int, s: bytes) -> None: ... + def pack_fopaque(self, n: int, s: bytes) -> None: ... + def pack_string(self, s: bytes) -> None: ... + def pack_opaque(self, s: bytes) -> None: ... + def pack_bytes(self, s: bytes) -> None: ... + def pack_list(self, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + def pack_farray(self, n: int, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + def pack_array(self, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + +class Unpacker: + def __init__(self, data: bytes) -> None: ... + def reset(self, data: bytes) -> None: ... + def get_position(self) -> int: ... + def set_position(self, position: int) -> None: ... + def get_buffer(self) -> bytes: ... + def done(self) -> None: ... + def unpack_uint(self) -> int: ... + def unpack_int(self) -> int: ... + def unpack_enum(self) -> int: ... + def unpack_bool(self) -> bool: ... + def unpack_uhyper(self) -> int: ... + def unpack_hyper(self) -> int: ... + def unpack_float(self) -> float: ... + def unpack_double(self) -> float: ... + def unpack_fstring(self, n: int) -> bytes: ... + def unpack_fopaque(self, n: int) -> bytes: ... + def unpack_string(self) -> bytes: ... + def unpack_opaque(self) -> bytes: ... + def unpack_bytes(self) -> bytes: ... + def unpack_list(self, unpack_item: Callable[[], _T]) -> List[_T]: ... + def unpack_farray(self, n: int, unpack_item: Callable[[], _T]) -> List[_T]: ... + def unpack_array(self, unpack_item: Callable[[], _T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi new file mode 100644 index 0000000..c524ac2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi @@ -0,0 +1 @@ +import xml.parsers as parsers diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi new file mode 100644 index 0000000..e8c3cd5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi @@ -0,0 +1,17 @@ +# Stubs for xml.etree.ElementInclude (Python 3.4) + +from typing import Union, Optional, Callable +from xml.etree.ElementTree import Element + +XINCLUDE: str +XINCLUDE_INCLUDE: str +XINCLUDE_FALLBACK: str + +class FatalIncludeError(SyntaxError): ... + +def default_loader(href: Union[str, bytes, int], parse: str, encoding: Optional[str] = ...) -> Union[str, Element]: ... + +# TODO: loader is of type default_loader ie it takes a callable that has the +# same signature as default_loader. But default_loader has a keyword argument +# Which can't be represented using Callable... +def include(elem: Element, loader: Optional[Callable[..., Union[str, Element]]] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi new file mode 100644 index 0000000..1477b32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi @@ -0,0 +1,33 @@ +# Stubs for xml.etree.ElementPath (Python 3.4) + +from typing import Pattern, Dict, Generator, Tuple, List, Union, TypeVar, Callable, Optional +from xml.etree.ElementTree import Element + +xpath_tokenizer_re: Pattern + +_token = Tuple[str, str] +_next = Callable[[], _token] +_callback = Callable[[_SelectorContext, List[Element]], Generator[Element, None, None]] + +def xpath_tokenizer(pattern: str, namespaces: Optional[Dict[str, str]] = ...) -> Generator[_token, None, None]: ... +def get_parent_map(context: _SelectorContext) -> Dict[Element, Element]: ... +def prepare_child(next: _next, token: _token) -> _callback: ... +def prepare_star(next: _next, token: _token) -> _callback: ... +def prepare_self(next: _next, token: _token) -> _callback: ... +def prepare_descendant(next: _next, token: _token) -> _callback: ... +def prepare_parent(next: _next, token: _token) -> _callback: ... +def prepare_predicate(next: _next, token: _token) -> _callback: ... + +ops: Dict[str, Callable[[_next, _token], _callback]] + +class _SelectorContext: + parent_map: Dict[Element, Element] + root: Element + def __init__(self, root: Element) -> None: ... + +_T = TypeVar('_T') + +def iterfind(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> List[Element]: ... +def find(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> Optional[Element]: ... +def findall(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> List[Element]: ... +def findtext(elem: Element, path: str, default: Optional[_T] = ..., namespaces: Optional[Dict[str, str]] = ...) -> Union[_T, str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi new file mode 100644 index 0000000..d5f64b6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi @@ -0,0 +1,167 @@ +# Stubs for xml.etree.ElementTree + +from typing import Any, Callable, Dict, Generator, IO, ItemsView, Iterable, Iterator, KeysView, List, MutableSequence, Optional, overload, Sequence, Text, Tuple, TypeVar, Union +import io +import sys + +VERSION: str + +class ParseError(SyntaxError): ... + +def iselement(element: object) -> bool: ... + +_T = TypeVar('_T') + +# Type for parser inputs. Parser will accept any unicode/str/bytes and coerce, +# and this is true in py2 and py3 (even fromstringlist() in python3 can be +# called with a heterogeneous list) +_parser_input_type = Union[bytes, Text] + +# Type for individual tag/attr/ns/text values in args to most functions. +# In py2, the library accepts str or unicode everywhere and coerces +# aggressively. +# In py3, bytes is not coerced to str and so use of bytes is probably an error, +# so we exclude it. (why? the parser never produces bytes when it parses XML, +# so e.g., element.get(b'name') will always return None for parsed XML, even if +# there is a 'name' attribute.) +_str_argument_type = Union[str, Text] + +# Type for return values from individual tag/attr/text values and serialization +if sys.version_info >= (3,): + # note: in python3, everything comes out as str, yay: + _str_result_type = str + # unfortunately, tostring and tostringlist can return either bytes or str + # depending on the value of `encoding` parameter. Client code knows best: + _tostring_result_type = Any +else: + # in python2, if the tag/attribute/text wasn't decode-able as ascii, it + # comes out as a unicode string; otherwise it comes out as str. (see + # _fixtext function in the source). Client code knows best: + _str_result_type = Any + # On the bright side, tostring and tostringlist always return bytes: + _tostring_result_type = bytes + +class Element(MutableSequence[Element]): + tag: _str_result_type + attrib: Dict[_str_result_type, _str_result_type] + text: Optional[_str_result_type] + tail: Optional[_str_result_type] + def __init__(self, tag: Union[_str_argument_type, Callable[..., Element]], attrib: Dict[_str_argument_type, _str_argument_type] = ..., **extra: _str_argument_type) -> None: ... + def append(self, subelement: Element) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Element: ... + def extend(self, elements: Iterable[Element]) -> None: ... + def find(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Optional[Element]: ... + def findall(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def findtext(self, path: _str_argument_type, default: Optional[_T] = ..., namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Union[_T, _str_result_type]: ... + def get(self, key: _str_argument_type, default: Optional[_T] = ...) -> Union[_str_result_type, _T]: ... + def getchildren(self) -> List[Element]: ... + def getiterator(self, tag: Optional[_str_argument_type] = ...) -> List[Element]: ... + if sys.version_info >= (3, 2): + def insert(self, index: int, subelement: Element) -> None: ... + else: + def insert(self, index: int, element: Element) -> None: ... + def items(self) -> ItemsView[_str_result_type, _str_result_type]: ... + def iter(self, tag: Optional[_str_argument_type] = ...) -> Generator[Element, None, None]: ... + def iterfind(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def itertext(self) -> Generator[_str_result_type, None, None]: ... + def keys(self) -> KeysView[_str_result_type]: ... + def makeelement(self, tag: _str_argument_type, attrib: Dict[_str_argument_type, _str_argument_type]) -> Element: ... + def remove(self, subelement: Element) -> None: ... + def set(self, key: _str_argument_type, value: _str_argument_type) -> None: ... + def __bool__(self) -> bool: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + @overload + def __getitem__(self, i: int) -> Element: ... + @overload + def __getitem__(self, s: slice) -> MutableSequence[Element]: ... + def __len__(self) -> int: ... + @overload + def __setitem__(self, i: int, o: Element) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[Element]) -> None: ... + + +def SubElement(parent: Element, tag: _str_argument_type, attrib: Dict[_str_argument_type, _str_argument_type] = ..., **extra: _str_argument_type) -> Element: ... +def Comment(text: Optional[_str_argument_type] = ...) -> Element: ... +def ProcessingInstruction(target: _str_argument_type, text: Optional[_str_argument_type] = ...) -> Element: ... + +PI: Callable[..., Element] + +class QName: + text: str + def __init__(self, text_or_uri: _str_argument_type, tag: Optional[_str_argument_type] = ...) -> None: ... + + +_file_or_filename = Union[str, bytes, int, IO[Any]] + +class ElementTree: + def __init__(self, element: Optional[Element] = ..., file: Optional[_file_or_filename] = ...) -> None: ... + def getroot(self) -> Element: ... + def parse(self, source: _file_or_filename, parser: Optional[XMLParser] = ...) -> Element: ... + def iter(self, tag: Optional[_str_argument_type] = ...) -> Generator[Element, None, None]: ... + def getiterator(self, tag: Optional[_str_argument_type] = ...) -> List[Element]: ... + def find(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Optional[Element]: ... + def findtext(self, path: _str_argument_type, default: Optional[_T] = ..., namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Union[_T, _str_result_type]: ... + def findall(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def iterfind(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + if sys.version_info >= (3, 4): + def write(self, file_or_filename: _file_or_filename, encoding: Optional[str] = ..., xml_declaration: Optional[bool] = ..., default_namespace: Optional[_str_argument_type] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> None: ... + else: + def write(self, file_or_filename: _file_or_filename, encoding: Optional[str] = ..., xml_declaration: Optional[bool] = ..., default_namespace: Optional[_str_argument_type] = ..., method: Optional[str] = ...) -> None: ... + def write_c14n(self, file: _file_or_filename) -> None: ... + +def register_namespace(prefix: _str_argument_type, uri: _str_argument_type) -> None: ... +if sys.version_info >= (3, 4): + def tostring(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> _tostring_result_type: ... + def tostringlist(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> List[_tostring_result_type]: ... +else: + def tostring(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ...) -> _tostring_result_type: ... + def tostringlist(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ...) -> List[_tostring_result_type]: ... +def dump(elem: Element) -> None: ... +def parse(source: _file_or_filename, parser: Optional[XMLParser] = ...) -> ElementTree: ... +def iterparse(source: _file_or_filename, events: Optional[Sequence[str]] = ..., parser: Optional[XMLParser] = ...) -> Iterator[Tuple[str, Any]]: ... + +if sys.version_info >= (3, 4): + class XMLPullParser: + def __init__(self, events: Optional[Sequence[str]] = ..., *, _parser: Optional[XMLParser] = ...) -> None: ... + def feed(self, data: bytes) -> None: ... + def close(self) -> None: ... + def read_events(self) -> Iterator[Tuple[str, Element]]: ... + +def XML(text: _parser_input_type, parser: Optional[XMLParser] = ...) -> Element: ... +def XMLID(text: _parser_input_type, parser: Optional[XMLParser] = ...) -> Tuple[Element, Dict[_str_result_type, Element]]: ... + +# This is aliased to XML in the source. +fromstring = XML + +def fromstringlist(sequence: Sequence[_parser_input_type], parser: Optional[XMLParser] = ...) -> Element: ... + +# This type is both not precise enough and too precise. The TreeBuilder +# requires the elementfactory to accept tag and attrs in its args and produce +# some kind of object that has .text and .tail properties. +# I've chosen to constrain the ElementFactory to always produce an Element +# because that is how almost everyone will use it. +# Unfortunately, the type of the factory arguments is dependent on how +# TreeBuilder is called by client code (they could pass strs, bytes or whatever); +# but we don't want to use a too-broad type, or it would be too hard to write +# elementfactories. +_ElementFactory = Callable[[Any, Dict[Any, Any]], Element] + +class TreeBuilder: + def __init__(self, element_factory: Optional[_ElementFactory] = ...) -> None: ... + def close(self) -> Element: ... + def data(self, data: _parser_input_type) -> None: ... + def start(self, tag: _parser_input_type, attrs: Dict[_parser_input_type, _parser_input_type]) -> Element: ... + def end(self, tag: _parser_input_type) -> Element: ... + +class XMLParser: + parser: Any + target: TreeBuilder + # TODO-what is entity used for??? + entity: Any + version: str + def __init__(self, html: int = ..., target: Optional[TreeBuilder] = ..., encoding: Optional[str] = ...) -> None: ... + def doctype(self, name: str, pubid: str, system: str) -> None: ... + def close(self) -> Element: ... + def feed(self, data: _parser_input_type) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi new file mode 100644 index 0000000..c384968 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi @@ -0,0 +1,3 @@ +# Stubs for xml.etree.cElementTree (Python 3.4) + +from xml.etree.ElementTree import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi new file mode 100644 index 0000000..cac0862 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi @@ -0,0 +1 @@ +import xml.parsers.expat as expat diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi new file mode 100644 index 0000000..73f3758 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi @@ -0,0 +1 @@ +from pyexpat import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi new file mode 100644 index 0000000..e22d769 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi @@ -0,0 +1 @@ +from pyexpat.errors import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi new file mode 100644 index 0000000..d8f44b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi @@ -0,0 +1 @@ +from pyexpat.model import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi new file mode 100644 index 0000000..6edf12d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi @@ -0,0 +1,34 @@ +from typing import Any, List, NoReturn, Optional, Text, Union, IO + +import xml.sax +from xml.sax.xmlreader import InputSource, Locator +from xml.sax.handler import ContentHandler, ErrorHandler + +class SAXException(Exception): + def __init__(self, msg: str, exception: Optional[Exception] = ...) -> None: ... + def getMessage(self) -> str: ... + def getException(self) -> Exception: ... + def __getitem__(self, ix: Any) -> NoReturn: ... + +class SAXParseException(SAXException): + def __init__(self, msg: str, exception: Exception, locator: Locator) -> None: ... + def getColumnNumber(self) -> int: ... + def getLineNumber(self) -> int: ... + def getPublicId(self): ... + def getSystemId(self): ... + +class SAXNotRecognizedException(SAXException): ... +class SAXNotSupportedException(SAXException): ... +class SAXReaderNotAvailable(SAXNotSupportedException): ... + +default_parser_list: List[str] + +def make_parser(parser_list: List[str] = ...) -> xml.sax.xmlreader.XMLReader: ... + +def parse(source: Union[str, IO[str]], handler: xml.sax.handler.ContentHandler, + errorHandler: xml.sax.handler.ErrorHandler = ...) -> None: ... + +def parseString(string: Union[bytes, Text], handler: xml.sax.handler.ContentHandler, + errorHandler: Optional[xml.sax.handler.ErrorHandler] = ...) -> None: ... + +def _create_parser(parser_name: str) -> xml.sax.xmlreader.XMLReader: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi new file mode 100644 index 0000000..3a51933 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi @@ -0,0 +1,46 @@ +from typing import Any + +version: Any + +class ErrorHandler: + def error(self, exception): ... + def fatalError(self, exception): ... + def warning(self, exception): ... + +class ContentHandler: + def __init__(self) -> None: ... + def setDocumentLocator(self, locator): ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, whitespace): ... + def processingInstruction(self, target, data): ... + def skippedEntity(self, name): ... + +class DTDHandler: + def notationDecl(self, name, publicId, systemId): ... + def unparsedEntityDecl(self, name, publicId, systemId, ndata): ... + +class EntityResolver: + def resolveEntity(self, publicId, systemId): ... + +feature_namespaces: Any +feature_namespace_prefixes: Any +feature_string_interning: Any +feature_validation: Any +feature_external_ges: Any +feature_external_pes: Any +all_features: Any +property_lexical_handler: Any +property_declaration_handler: Any +property_dom_node: Any +property_xml_string: Any +property_encoding: Any +property_interning_dict: Any +all_properties: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi new file mode 100644 index 0000000..342d6ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi @@ -0,0 +1,58 @@ +import sys +from typing import Mapping, Text + +from xml.sax import handler +from xml.sax import xmlreader + +def escape(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... +def unescape(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... +def quoteattr(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... + +class XMLGenerator(handler.ContentHandler): + if sys.version_info >= (3, 0): + def __init__(self, out=..., encoding=..., short_empty_elements: bool = ...) -> None: ... + else: + def __init__(self, out=..., encoding=...) -> None: ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, content): ... + def processingInstruction(self, target, data): ... + +class XMLFilterBase(xmlreader.XMLReader): + def __init__(self, parent=...) -> None: ... + def error(self, exception): ... + def fatalError(self, exception): ... + def warning(self, exception): ... + def setDocumentLocator(self, locator): ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, chars): ... + def processingInstruction(self, target, data): ... + def skippedEntity(self, name): ... + def notationDecl(self, name, publicId, systemId): ... + def unparsedEntityDecl(self, name, publicId, systemId, ndata): ... + def resolveEntity(self, publicId, systemId): ... + def parse(self, source): ... + def setLocale(self, locale): ... + def getFeature(self, name): ... + def setFeature(self, name, state): ... + def getProperty(self, name): ... + def setProperty(self, name, value): ... + def getParent(self): ... + def setParent(self, parent): ... + +def prepare_input_source(source, base=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi new file mode 100644 index 0000000..fbc1ac1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi @@ -0,0 +1,71 @@ +class XMLReader: + def __init__(self) -> None: ... + def parse(self, source): ... + def getContentHandler(self): ... + def setContentHandler(self, handler): ... + def getDTDHandler(self): ... + def setDTDHandler(self, handler): ... + def getEntityResolver(self): ... + def setEntityResolver(self, resolver): ... + def getErrorHandler(self): ... + def setErrorHandler(self, handler): ... + def setLocale(self, locale): ... + def getFeature(self, name): ... + def setFeature(self, name, state): ... + def getProperty(self, name): ... + def setProperty(self, name, value): ... + +class IncrementalParser(XMLReader): + def __init__(self, bufsize=...) -> None: ... + def parse(self, source): ... + def feed(self, data): ... + def prepareParser(self, source): ... + def close(self): ... + def reset(self): ... + +class Locator: + def getColumnNumber(self): ... + def getLineNumber(self): ... + def getPublicId(self): ... + def getSystemId(self): ... + +class InputSource: + def __init__(self, system_id=...) -> None: ... + def setPublicId(self, public_id): ... + def getPublicId(self): ... + def setSystemId(self, system_id): ... + def getSystemId(self): ... + def setEncoding(self, encoding): ... + def getEncoding(self): ... + def setByteStream(self, bytefile): ... + def getByteStream(self): ... + def setCharacterStream(self, charfile): ... + def getCharacterStream(self): ... + +class AttributesImpl: + def __init__(self, attrs) -> None: ... + def getLength(self): ... + def getType(self, name): ... + def getValue(self, name): ... + def getValueByQName(self, name): ... + def getNameByQName(self, name): ... + def getQNameByName(self, name): ... + def getNames(self): ... + def getQNames(self): ... + def __len__(self): ... + def __getitem__(self, name): ... + def keys(self): ... + def has_key(self, name): ... + def __contains__(self, name): ... + def get(self, name, alternative=...): ... + def copy(self): ... + def items(self): ... + def values(self): ... + +class AttributesNSImpl(AttributesImpl): + def __init__(self, attrs, qnames) -> None: ... + def getValueByQName(self, name): ... + def getNameByQName(self, name): ... + def getQNameByName(self, name): ... + def getQNames(self): ... + def copy(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi new file mode 100644 index 0000000..a06d3fd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi @@ -0,0 +1,105 @@ +# Stubs for zipfile + +from typing import Callable, Dict, IO, Iterable, List, Optional, Text, Tuple, Type, Union +from types import TracebackType +import os +import sys + + +if sys.version_info >= (3, 6): + _Path = Union[os.PathLike[Text], Text] +else: + _Path = Text +_SZI = Union[Text, ZipInfo] +_DT = Tuple[int, int, int, int, int, int] + + +if sys.version_info >= (3,): + class BadZipFile(Exception): ... + BadZipfile = BadZipFile +else: + class BadZipfile(Exception): ... +error = BadZipfile + +class LargeZipFile(Exception): ... + +class ZipFile: + debug: int + comment: bytes + filelist: List[ZipInfo] + fp: IO[bytes] + NameToInfo: Dict[Text, ZipInfo] + def __init__(self, file: Union[_Path, IO[bytes]], mode: Text = ..., compression: int = ..., + allowZip64: bool = ...) -> None: ... + def __enter__(self) -> ZipFile: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def close(self) -> None: ... + def getinfo(self, name: Text) -> ZipInfo: ... + def infolist(self) -> List[ZipInfo]: ... + def namelist(self) -> List[Text]: ... + def open(self, name: _SZI, mode: Text = ..., + pwd: Optional[bytes] = ...) -> IO[bytes]: ... + def extract(self, member: _SZI, path: Optional[_SZI] = ..., + pwd: bytes = ...) -> str: ... + def extractall(self, path: Optional[_Path] = ..., + members: Optional[Iterable[Text]] = ..., + pwd: Optional[bytes] = ...) -> None: ... + def printdir(self) -> None: ... + def setpassword(self, pwd: bytes) -> None: ... + def read(self, name: _SZI, pwd: Optional[bytes] = ...) -> bytes: ... + def testzip(self) -> Optional[str]: ... + def write(self, filename: _Path, arcname: Optional[_Path] = ..., + compress_type: Optional[int] = ...) -> None: ... + if sys.version_info >= (3,): + def writestr(self, zinfo_or_arcname: _SZI, data: Union[bytes, str], + compress_type: Optional[int] = ...) -> None: ... + else: + def writestr(self, + zinfo_or_arcname: _SZI, bytes: bytes, + compress_type: Optional[int] = ...) -> None: ... + +class PyZipFile(ZipFile): + if sys.version_info >= (3,): + def __init__(self, file: Union[str, IO[bytes]], mode: str = ..., + compression: int = ..., allowZip64: bool = ..., + opimize: int = ...) -> None: ... + def writepy(self, pathname: str, basename: str = ..., + filterfunc: Optional[Callable[[str], bool]] = ...) -> None: ... + else: + def writepy(self, + pathname: Text, basename: Text = ...) -> None: ... + +class ZipInfo: + filename: Text + date_time: _DT + compress_type: int + comment: bytes + extra: bytes + create_system: int + create_version: int + extract_version: int + reserved: int + flag_bits: int + volume: int + internal_attr: int + external_attr: int + header_offset: int + CRC: int + compress_size: int + file_size: int + def __init__(self, filename: Optional[Text] = ..., + date_time: Optional[_DT] = ...) -> None: ... + if sys.version_info >= (3, 6): + def is_dir(self) -> bool: ... + def FileHeader(self, zip64: Optional[bool] = ...) -> bytes: ... + + +def is_zipfile(filename: Union[_Path, IO[bytes]]) -> bool: ... + +ZIP_STORED: int +ZIP_DEFLATED: int +if sys.version_info >= (3, 3): + ZIP_BZIP2: int + ZIP_LZMA: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi new file mode 100644 index 0000000..c22531a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi @@ -0,0 +1,18 @@ +"""Stub file for the 'zipimport' module.""" + +from typing import Optional +from types import CodeType, ModuleType + +class ZipImportError(ImportError): ... + +class zipimporter(object): + archive: str + prefix: str + def __init__(self, archivepath: str) -> None: ... + def find_module(self, fullname: str, path: str = ...) -> Optional[zipimporter]: ... + def get_code(self, fullname: str) -> CodeType: ... + def get_data(self, pathname: str) -> str: ... + def get_filename(self, fullname: str) -> str: ... + def get_source(self, fullname: str) -> Optional[str]: ... + def is_package(self, fullname: str) -> bool: ... + def load_module(self, fullname: str) -> ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi new file mode 100644 index 0000000..4ea5372 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi @@ -0,0 +1,55 @@ +# Stubs for zlib +import sys + +DEFLATED: int +DEF_MEM_LEVEL: int +MAX_WBITS: int +ZLIB_VERSION: str +Z_BEST_COMPRESSION: int +Z_BEST_SPEED: int +Z_DEFAULT_COMPRESSION: int +Z_DEFAULT_STRATEGY: int +Z_FILTERED: int +Z_FINISH: int +Z_FULL_FLUSH: int +Z_HUFFMAN_ONLY: int +Z_NO_FLUSH: int +Z_SYNC_FLUSH: int +if sys.version_info >= (3,): + DEF_BUF_SIZE: int + ZLIB_RUNTIME_VERSION: str + +class error(Exception): ... + + +class _Compress: + def compress(self, data: bytes) -> bytes: ... + def flush(self, mode: int = ...) -> bytes: ... + def copy(self) -> _Compress: ... + + +class _Decompress: + unused_data: bytes + unconsumed_tail: bytes + if sys.version_info >= (3,): + eof: bool + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + def flush(self, length: int = ...) -> bytes: ... + def copy(self) -> _Decompress: ... + + +def adler32(data: bytes, value: int = ...) -> int: ... +def compress(data: bytes, level: int = ...) -> bytes: ... +if sys.version_info >= (3,): + def compressobj(level: int = ..., method: int = ..., wbits: int = ..., + memLevel: int = ..., strategy: int = ..., + zdict: bytes = ...) -> _Compress: ... +else: + def compressobj(level: int = ..., method: int = ..., wbits: int = ..., + memlevel: int = ..., strategy: int = ...) -> _Compress: ... +def crc32(data: bytes, value: int = ...) -> int: ... +def decompress(data: bytes, wbits: int = ..., bufsize: int = ...) -> bytes: ... +if sys.version_info >= (3,): + def decompressobj(wbits: int = ..., zdict: bytes = ...) -> _Decompress: ... +else: + def decompressobj(wbits: int = ...) -> _Decompress: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi new file mode 100644 index 0000000..b90b755 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi @@ -0,0 +1,16 @@ +# Stubs for zipapp (Python 3.5+) + +from pathlib import Path +import sys +from typing import BinaryIO, Callable, Optional, Union + +_Path = Union[str, Path, BinaryIO] + +class ZipAppError(Exception): ... + +if sys.version_info >= (3, 7): + def create_archive(source: _Path, target: Optional[_Path] = ..., interpreter: Optional[str] = ..., main: Optional[str] = ..., + filter: Optional[Callable[[Path], bool]] = ..., compressed: bool = ...) -> None: ... +else: + def create_archive(source: _Path, target: Optional[_Path] = ..., interpreter: Optional[str] = ..., main: Optional[str] = ...) -> None: ... +def get_interpreter(archive: _Path) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi new file mode 100644 index 0000000..5069dba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi @@ -0,0 +1,14 @@ +# Stubs for secrets (Python 3.6) + +from typing import Optional, Sequence, TypeVar +from hmac import compare_digest as compare_digest +from random import SystemRandom as SystemRandom + +_T = TypeVar('_T') + +def randbelow(exclusive_upper_bound: int) -> int: ... +def randbits(k: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +def token_bytes(nbytes: Optional[int] = ...) -> bytes: ... +def token_hex(nbytes: Optional[int] = ...) -> str: ... +def token_urlsafe(nbytes: Optional[int] = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi new file mode 100644 index 0000000..ab2ae9e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi @@ -0,0 +1,30 @@ +from typing import Any, Callable, ClassVar, Generic, Iterator, Mapping, TypeVar, Union + +_T = TypeVar('_T') + +class ContextVar(Generic[_T]): + def __init__(self, name: str, *, default: _T = ...) -> None: ... + @property + def name(self) -> str: ... + def get(self, default: _T = ...) -> _T: ... + def set(self, value: _T) -> Token[_T]: ... + def reset(self, token: Token[_T]) -> None: ... + +class Token(Generic[_T]): + @property + def var(self) -> ContextVar[_T]: ... + @property + def old_value(self) -> Any: ... # returns either _T or MISSING, but that's hard to express + MISSING: ClassVar[object] + +def copy_context() -> Context: ... + +# It doesn't make sense to make this generic, because for most Contexts each ContextVar will have +# a different value. +class Context(Mapping[ContextVar[Any], Any]): + def __init__(self) -> None: ... + def run(self, callable: Callable[..., _T], *args: Any, **kwargs: Any) -> _T: ... + def copy(self) -> Context: ... + def __getitem__(self, key: ContextVar[Any]) -> Any: ... + def __iter__(self) -> Iterator[ContextVar[Any]]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi new file mode 100644 index 0000000..f8bcd52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi @@ -0,0 +1,71 @@ +from typing import overload, Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Tuple, Type, TypeVar, Union + + +_T = TypeVar('_T') + +class _MISSING_TYPE: ... +MISSING: _MISSING_TYPE + +@overload +def asdict(obj: Any) -> Dict[str, Any]: ... +@overload +def asdict(obj: Any, *, dict_factory: Callable[[List[Tuple[str, Any]]], _T]) -> _T: ... + +@overload +def astuple(obj: Any) -> Tuple[Any, ...]: ... +@overload +def astuple(obj: Any, *, tuple_factory: Callable[[List[Any]], _T]) -> _T: ... + + +@overload +def dataclass(_cls: Type[_T]) -> Type[_T]: ... + +@overload +def dataclass(*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., + unsafe_hash: bool = ..., frozen: bool = ...) -> Callable[[Type[_T]], Type[_T]]: ... + + +class Field(Generic[_T]): + name: str + type: Type[_T] + default: _T + default_factory: Callable[[], _T] + repr: bool + hash: Optional[bool] + init: bool + compare: bool + metadata: Optional[Mapping[str, Any]] + + +# NOTE: Actual return type is 'Field[_T]', but we want to help type checkers +# to understand the magic that happens at runtime. +@overload # `default` and `default_factory` are optional and mutually exclusive. +def field(*, default: _T, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, default_factory: Callable[[], _T], + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> Any: ... + + +def fields(class_or_instance: Any) -> Tuple[Field[Any], ...]: ... + +def is_dataclass(obj: Any) -> bool: ... + +class FrozenInstanceError(AttributeError): ... + +class InitVar(Generic[_T]): ... + +def make_dataclass(cls_name: str, fields: Iterable[Union[str, Tuple[str, type], Tuple[str, type, Field[Any]]]], *, + bases: Tuple[type, ...] = ..., namespace: Optional[Dict[str, Any]] = ..., + init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., hash: bool = ..., + frozen: bool = ...): ... + +def replace(obj: _T, **changes: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_ast.pyi new file mode 100644 index 0000000..9f4284e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_ast.pyi @@ -0,0 +1,409 @@ +import sys +import typing +from typing import Any, Optional, ClassVar + +PyCF_ONLY_AST: int + +_identifier = str + +class AST: + _attributes: ClassVar[typing.Tuple[str, ...]] + _fields: ClassVar[typing.Tuple[str, ...]] + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + # TODO: Not all nodes have all of the following attributes + lineno: int + col_offset: int + if sys.version_info >= (3, 8): + end_lineno: Optional[int] + end_col_offset: Optional[int] + type_comment: Optional[str] + +class mod(AST): + ... + +if sys.version_info >= (3, 8): + class type_ignore(AST): ... + + class TypeIgnore(type_ignore): ... + + class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Module(mod): + body: typing.List[stmt] + if sys.version_info >= (3, 7): + docstring: Optional[str] + if sys.version_info >= (3, 8): + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): ... + +class FunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class AsyncFunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class ClassDef(stmt): + name: _identifier + bases: typing.List[expr] + keywords: typing.List[keyword] + body: typing.List[stmt] + decorator_list: typing.List[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +if sys.version_info >= (3, 6): + class AnnAssign(stmt): + target: expr + annotation: expr + value: Optional[expr] + simple: int + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class AsyncFor(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + +class AsyncWith(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + +class Raise(stmt): + exc: Optional[expr] + cause: Optional[expr] + +class Try(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[_identifier] + names: typing.List[alias] + level: int + +class Global(stmt): + names: typing.List[_identifier] + +class Nonlocal(stmt): + names: typing.List[_identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + + +class expr(AST): ... + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Await(expr): + value: expr + +class Yield(expr): + value: Optional[expr] + +class YieldFrom(expr): + value: expr + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + +class Num(expr): # Deprecated in 3.8; use Constant + n: complex + +class Str(expr): # Deprecated in 3.8; use Constant + s: str + +if sys.version_info >= (3, 6): + class FormattedValue(expr): + value: expr + conversion: Optional[int] + format_spec: Optional[expr] + + class JoinedStr(expr): + values: typing.List[expr] + +class Bytes(expr): # Deprecated in 3.8; use Constant + s: bytes + +class NameConstant(expr): + value: Any + +if sys.version_info >= (3, 8): + class Constant(expr): + value: Any # None, str, bytes, bool, int, float, complex, Ellipsis + kind: Optional[str] + # Aliases for value, for backwards compatibility + s: Any + n: complex + + class NamedExpr(expr): + target: expr + value: expr + +class Ellipsis(expr): ... + +class Attribute(expr): + value: expr + attr: _identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Starred(expr): + value: expr + ctx: expr_context + +class Name(expr): + id: _identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class MatMult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + if sys.version_info >= (3, 6): + is_async: int + + +class excepthandler(AST): + ... + +class ExceptHandler(excepthandler): + type: Optional[expr] + name: Optional[_identifier] + body: typing.List[stmt] + + +class arguments(AST): + args: typing.List[arg] + vararg: Optional[arg] + kwonlyargs: typing.List[arg] + kw_defaults: typing.List[expr] + kwarg: Optional[arg] + defaults: typing.List[expr] + +class arg(AST): + arg: _identifier + annotation: Optional[expr] + +class keyword(AST): + arg: Optional[_identifier] + value: expr + +class alias(AST): + name: _identifier + asname: Optional[_identifier] + +class withitem(AST): + context_expr: expr + optional_vars: Optional[expr] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_compression.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_compression.pyi new file mode 100644 index 0000000..bf474e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_compression.pyi @@ -0,0 +1,16 @@ +from typing import Any +import io + +BUFFER_SIZE: Any + +class BaseStream(io.BufferedIOBase): ... + +class DecompressReader(io.RawIOBase): + def readable(self): ... + def __init__(self, fp, decomp_factory, trailing_error=..., **decomp_args): ... + def close(self): ... + def seekable(self): ... + def readinto(self, b): ... + def read(self, size: int = ...): ... + def seek(self, offset, whence=...): ... + def tell(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_curses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_curses.pyi new file mode 100644 index 0000000..16c6fd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_curses.pyi @@ -0,0 +1,447 @@ +from typing import Any, BinaryIO, IO, Optional, Tuple, Union, overload + +_chtype = Union[str, bytes, int] + +ALL_MOUSE_EVENTS: int +A_ALTCHARSET: int +A_ATTRIBUTES: int +A_BLINK: int +A_BOLD: int +A_CHARTEXT: int +A_COLOR: int +A_DIM: int +A_HORIZONTAL: int +A_INVIS: int +A_LEFT: int +A_LOW: int +A_NORMAL: int +A_PROTECT: int +A_REVERSE: int +A_RIGHT: int +A_STANDOUT: int +A_TOP: int +A_UNDERLINE: int +A_VERTICAL: int +BUTTON1_CLICKED: int +BUTTON1_DOUBLE_CLICKED: int +BUTTON1_PRESSED: int +BUTTON1_RELEASED: int +BUTTON1_TRIPLE_CLICKED: int +BUTTON2_CLICKED: int +BUTTON2_DOUBLE_CLICKED: int +BUTTON2_PRESSED: int +BUTTON2_RELEASED: int +BUTTON2_TRIPLE_CLICKED: int +BUTTON3_CLICKED: int +BUTTON3_DOUBLE_CLICKED: int +BUTTON3_PRESSED: int +BUTTON3_RELEASED: int +BUTTON3_TRIPLE_CLICKED: int +BUTTON4_CLICKED: int +BUTTON4_DOUBLE_CLICKED: int +BUTTON4_PRESSED: int +BUTTON4_RELEASED: int +BUTTON4_TRIPLE_CLICKED: int +BUTTON_ALT: int +BUTTON_CTRL: int +BUTTON_SHIFT: int +COLOR_BLACK: int +COLOR_BLUE: int +COLOR_CYAN: int +COLOR_GREEN: int +COLOR_MAGENTA: int +COLOR_RED: int +COLOR_WHITE: int +COLOR_YELLOW: int +ERR: int +KEY_A1: int +KEY_A3: int +KEY_B2: int +KEY_BACKSPACE: int +KEY_BEG: int +KEY_BREAK: int +KEY_BTAB: int +KEY_C1: int +KEY_C3: int +KEY_CANCEL: int +KEY_CATAB: int +KEY_CLEAR: int +KEY_CLOSE: int +KEY_COMMAND: int +KEY_COPY: int +KEY_CREATE: int +KEY_CTAB: int +KEY_DC: int +KEY_DL: int +KEY_DOWN: int +KEY_EIC: int +KEY_END: int +KEY_ENTER: int +KEY_EOL: int +KEY_EOS: int +KEY_EXIT: int +KEY_F0: int +KEY_F1: int +KEY_F10: int +KEY_F11: int +KEY_F12: int +KEY_F13: int +KEY_F14: int +KEY_F15: int +KEY_F16: int +KEY_F17: int +KEY_F18: int +KEY_F19: int +KEY_F2: int +KEY_F20: int +KEY_F21: int +KEY_F22: int +KEY_F23: int +KEY_F24: int +KEY_F25: int +KEY_F26: int +KEY_F27: int +KEY_F28: int +KEY_F29: int +KEY_F3: int +KEY_F30: int +KEY_F31: int +KEY_F32: int +KEY_F33: int +KEY_F34: int +KEY_F35: int +KEY_F36: int +KEY_F37: int +KEY_F38: int +KEY_F39: int +KEY_F4: int +KEY_F40: int +KEY_F41: int +KEY_F42: int +KEY_F43: int +KEY_F44: int +KEY_F45: int +KEY_F46: int +KEY_F47: int +KEY_F48: int +KEY_F49: int +KEY_F5: int +KEY_F50: int +KEY_F51: int +KEY_F52: int +KEY_F53: int +KEY_F54: int +KEY_F55: int +KEY_F56: int +KEY_F57: int +KEY_F58: int +KEY_F59: int +KEY_F6: int +KEY_F60: int +KEY_F61: int +KEY_F62: int +KEY_F63: int +KEY_F7: int +KEY_F8: int +KEY_F9: int +KEY_FIND: int +KEY_HELP: int +KEY_HOME: int +KEY_IC: int +KEY_IL: int +KEY_LEFT: int +KEY_LL: int +KEY_MARK: int +KEY_MAX: int +KEY_MESSAGE: int +KEY_MIN: int +KEY_MOUSE: int +KEY_MOVE: int +KEY_NEXT: int +KEY_NPAGE: int +KEY_OPEN: int +KEY_OPTIONS: int +KEY_PPAGE: int +KEY_PREVIOUS: int +KEY_PRINT: int +KEY_REDO: int +KEY_REFERENCE: int +KEY_REFRESH: int +KEY_REPLACE: int +KEY_RESET: int +KEY_RESIZE: int +KEY_RESTART: int +KEY_RESUME: int +KEY_RIGHT: int +KEY_SAVE: int +KEY_SBEG: int +KEY_SCANCEL: int +KEY_SCOMMAND: int +KEY_SCOPY: int +KEY_SCREATE: int +KEY_SDC: int +KEY_SDL: int +KEY_SELECT: int +KEY_SEND: int +KEY_SEOL: int +KEY_SEXIT: int +KEY_SF: int +KEY_SFIND: int +KEY_SHELP: int +KEY_SHOME: int +KEY_SIC: int +KEY_SLEFT: int +KEY_SMESSAGE: int +KEY_SMOVE: int +KEY_SNEXT: int +KEY_SOPTIONS: int +KEY_SPREVIOUS: int +KEY_SPRINT: int +KEY_SR: int +KEY_SREDO: int +KEY_SREPLACE: int +KEY_SRESET: int +KEY_SRIGHT: int +KEY_SRSUME: int +KEY_SSAVE: int +KEY_SSUSPEND: int +KEY_STAB: int +KEY_SUNDO: int +KEY_SUSPEND: int +KEY_UNDO: int +KEY_UP: int +OK: int +REPORT_MOUSE_POSITION: int +_C_API: Any +version: bytes + +def baudrate() -> int: ... +def beep() -> None: ... +def can_change_color() -> bool: ... +def cbreak(flag: bool = ...) -> None: ... +def color_content(color_number: int) -> Tuple[int, int, int]: ... +def color_pair(color_number: int) -> int: ... +def curs_set(visibility: int) -> int: ... +def def_prog_mode() -> None: ... +def def_shell_mode() -> None: ... +def delay_output(ms: int) -> None: ... +def doupdate() -> None: ... +def echo(flag: bool = ...) -> None: ... +def endwin() -> None: ... +def erasechar() -> bytes: ... +def filter() -> None: ... +def flash() -> None: ... +def flushinp() -> None: ... +def getmouse() -> Tuple[int, int, int, int, int]: ... +def getsyx() -> Tuple[int, int]: ... +def getwin(f: BinaryIO) -> _CursesWindow: ... +def halfdelay(tenths: int) -> None: ... +def has_colors() -> bool: ... +def has_ic() -> bool: ... +def has_il() -> bool: ... +def has_key(ch: int) -> bool: ... +def init_color(color_number: int, r: int, g: int, b: int) -> None: ... +def init_pair(pair_number: int, fg: int, bg: int) -> None: ... +def initscr() -> _CursesWindow: ... +def intrflush(ch: bool) -> None: ... +def is_term_resized(nlines: int, ncols: int) -> bool: ... +def isendwin() -> bool: ... +def keyname(k: int) -> bytes: ... +def killchar() -> bytes: ... +def longname() -> bytes: ... +def meta(yes: bool) -> None: ... +def mouseinterval(interval: int) -> None: ... +def mousemask(mousemask: int) -> Tuple[int, int]: ... +def napms(ms: int) -> int: ... +def newpad(nlines: int, ncols: int) -> _CursesWindow: ... +def newwin(nlines: int, ncols: int, begin_y: int = ..., begin_x: int = ...) -> _CursesWindow: ... +def nl(flag: bool = ...) -> None: ... +def nocbreak() -> None: ... +def noecho() -> None: ... +def nonl() -> None: ... +def noqiflush() -> None: ... +def noraw() -> None: ... +def pair_content(pair_number: int) -> Tuple[int, int]: ... +def pair_number(attr: int) -> int: ... +def putp(string: bytes) -> None: ... +def qiflush(flag: bool = ...) -> None: ... +def raw(flag: bool = ...) -> None: ... +def reset_prog_mode() -> None: ... +def reset_shell_mode() -> None: ... +def resetty() -> None: ... +def resize_term(nlines: int, ncols: int) -> None: ... +def resizeterm(nlines: int, ncols: int) -> None: ... +def savetty() -> None: ... +def setsyx(y: int, x: int) -> None: ... +def setupterm(termstr: str = ..., fd: int = ...) -> None: ... +def start_color() -> None: ... +def termattrs() -> int: ... +def termname() -> bytes: ... +def tigetflag(capname: str) -> int: ... +def tigetnum(capname: str) -> int: ... +def tigetstr(capname: str) -> bytes: ... +def tparm(fmt: bytes, i1: int = ..., i2: int = ..., i3: int = ..., i4: int = ..., i5: int = ..., i6: int = ..., i7: int = ..., i8: int = ..., i9: int = ...) -> bytes: ... +def typeahead(fd: int) -> None: ... +def unctrl(ch: _chtype) -> bytes: ... +def unget_wch(ch: _chtype) -> None: ... +def ungetch(ch: _chtype) -> None: ... +def ungetmouse(id: int, x: int, y: int, z: int, bstate: int) -> None: ... +def update_lines_cols() -> int: ... +def use_default_colors() -> None: ... +def use_env(flag: bool) -> None: ... + +class error(Exception): ... + +class _CursesWindow: + encoding: str + @overload + def addch(self, ch: _chtype, attr: int = ...) -> None: ... + @overload + def addch(self, y: int, x: int, ch: _chtype, attr: int = ...) -> None: ... + @overload + def addnstr(self, str: str, n: int, attr: int = ...) -> None: ... + @overload + def addnstr(self, y: int, x: int, str: str, n: int, attr: int = ...) -> None: ... + @overload + def addstr(self, str: str, attr: int = ...) -> None: ... + @overload + def addstr(self, y: int, x: int, str: str, attr: int = ...) -> None: ... + def attroff(self, attr: int) -> None: ... + def attron(self, attr: int) -> None: ... + def attrset(self, attr: int) -> None: ... + def bkgd(self, ch: _chtype, attr: int = ...) -> None: ... + def bkgset(self, ch: _chtype, attr: int = ...) -> None: ... + def border(self, ls: _chtype = ..., rs: _chtype = ..., ts: _chtype = ..., bs: _chtype = ..., tl: _chtype = ..., tr: _chtype = ..., bl: _chtype = ..., br: _chtype = ...) -> None: ... + @overload + def box(self) -> None: ... + @overload + def box(self, vertch: _chtype = ..., horch: _chtype = ...) -> None: ... + @overload + def chgat(self, attr: int) -> None: ... + @overload + def chgat(self, num: int, attr: int) -> None: ... + @overload + def chgat(self, y: int, x: int, attr: int) -> None: ... + @overload + def chgat(self, y: int, x: int, num: int, attr: int) -> None: ... + def clear(self) -> None: ... + def clearok(self, yes: int) -> None: ... + def clrtobot(self) -> None: ... + def clrtoeol(self) -> None: ... + def cursyncup(self) -> None: ... + @overload + def delch(self) -> None: ... + @overload + def delch(self, y: int, x: int) -> None: ... + def deleteln(self) -> None: ... + @overload + def derwin(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def derwin(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + def echochar(self, ch: _chtype, attr: int = ...) -> None: ... + def enclose(self, y: int, x: int) -> bool: ... + def erase(self) -> None: ... + def getbegyx(self) -> Tuple[int, int]: ... + def getbkgd(self) -> Tuple[int, int]: ... + @overload + def getch(self) -> _chtype: ... + @overload + def getch(self, y: int, x: int) -> _chtype: ... + @overload + def get_wch(self) -> _chtype: ... + @overload + def get_wch(self, y: int, x: int) -> _chtype: ... + @overload + def getkey(self) -> str: ... + @overload + def getkey(self, y: int, x: int) -> str: ... + def getmaxyx(self) -> Tuple[int, int]: ... + def getparyx(self) -> Tuple[int, int]: ... + @overload + def getstr(self) -> _chtype: ... + @overload + def getstr(self, n: int) -> _chtype: ... + @overload + def getstr(self, y: int, x: int) -> _chtype: ... + @overload + def getstr(self, y: int, x: int, n: int) -> _chtype: ... + def getyx(self) -> Tuple[int, int]: ... + @overload + def hline(self, ch: _chtype, n: int) -> None: ... + @overload + def hline(self, y: int, x: int, ch: _chtype, n: int) -> None: ... + def idcok(self, flag: bool) -> None: ... + def idlok(self, yes: bool) -> None: ... + def immedok(self, flag: bool) -> None: ... + @overload + def inch(self) -> _chtype: ... + @overload + def inch(self, y: int, x: int) -> _chtype: ... + @overload + def insch(self, ch: _chtype, attr: int = ...) -> None: ... + @overload + def insch(self, y: int, x: int, ch: _chtype, attr: int = ...) -> None: ... + def insdelln(self, nlines: int) -> None: ... + def insertln(self) -> None: ... + @overload + def insnstr(self, str: str, n: int, attr: int = ...) -> None: ... + @overload + def insnstr(self, y: int, x: int, str: str, n: int, attr: int = ...) -> None: ... + @overload + def insstr(self, str: str, attr: int = ...) -> None: ... + @overload + def insstr(self, y: int, x: int, str: str, attr: int = ...) -> None: ... + @overload + def instr(self, n: int = ...) -> _chtype: ... + @overload + def instr(self, y: int, x: int, n: int = ...) -> _chtype: ... + def is_linetouched(self, line: int) -> bool: ... + def is_wintouched(self) -> bool: ... + def keypad(self, yes: bool) -> None: ... + def leaveok(self, yes: bool) -> None: ... + def move(self, new_y: int, new_x: int) -> None: ... + def mvderwin(self, y: int, x: int) -> None: ... + def mvwin(self, new_y: int, new_x: int) -> None: ... + def nodelay(self, yes: bool) -> None: ... + def notimeout(self, yes: bool) -> None: ... + def noutrefresh(self) -> None: ... + @overload + def overlay(self, destwin: _CursesWindow) -> None: ... + @overload + def overlay(self, destwin: _CursesWindow, sminrow: int, smincol: int, dminrow: int, dmincol: int, dmaxrow: int, dmaxcol: int) -> None: ... + @overload + def overwrite(self, destwin: _CursesWindow) -> None: ... + @overload + def overwrite(self, destwin: _CursesWindow, sminrow: int, smincol: int, dminrow: int, dmincol: int, dmaxrow: int, dmaxcol: int) -> None: ... + def putwin(self, file: IO[Any]) -> None: ... + def redrawln(self, beg: int, num: int) -> None: ... + def redrawwin(self) -> None: ... + @overload + def refresh(self) -> None: ... + @overload + def refresh(self, pminrow: int, pmincol: int, sminrow: int, smincol: int, smaxrow: int, smaxcol: int) -> None: ... + def resize(self, nlines: int, ncols: int) -> None: ... + def scroll(self, lines: int = ...) -> None: ... + def scrollok(self, flag: bool) -> None: ... + def setscrreg(self, top: int, bottom: int) -> None: ... + def standend(self) -> None: ... + def standout(self) -> None: ... + @overload + def subpad(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subpad(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subwin(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subwin(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + def syncdown(self) -> None: ... + def syncok(self, flag: bool) -> None: ... + def syncup(self) -> None: ... + def timeout(self, delay: int) -> None: ... + def touchline(self, start: int, count: int, changed: bool = ...) -> None: ... + def touchwin(self) -> None: ... + def untouchwin(self) -> None: ... + @overload + def vline(self, ch: _chtype, n: int) -> None: ... + @overload + def vline(self, y: int, x: int, ch: _chtype, n: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi new file mode 100644 index 0000000..1260d42 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple + +TIMEOUT_MAX: int +error = RuntimeError + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> None: ... +def exit() -> NoReturn: ... +def get_ident() -> int: ... +def allocate_lock() -> LockType: ... +def stack_size(size: Optional[int] = ...) -> int: ... + +class LockType(object): + locked_status: bool + def __init__(self) -> None: ... + def acquire(self, waitflag: Optional[bool] = ..., timeout: int = ...) -> bool: ... + def __enter__(self, waitflag: Optional[bool] = ..., timeout: int = ...) -> bool: ... + def __exit__(self, typ: Any, val: Any, tb: Any) -> None: ... + def release(self) -> bool: ... + def locked(self) -> bool: ... + +def interrupt_main() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_imp.pyi new file mode 100644 index 0000000..7015b3b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_imp.pyi @@ -0,0 +1,22 @@ +# Stubs for _imp (Python 3.6) + +import sys +import types +from typing import Any, List + +if sys.version_info >= (3, 5): + from importlib.machinery import ModuleSpec + def create_builtin(spec: ModuleSpec) -> types.ModuleType: ... + def create_dynamic(spec: ModuleSpec, file: Any = ...) -> None: ... + +def acquire_lock() -> None: ... +def exec_builtin(mod: types.ModuleType) -> int: ... +def exec_dynamic(mod: types.ModuleType) -> int: ... +def extension_suffixes() -> List[str]: ... +def get_frozen_object(name: str) -> types.CodeType: ... +def init_frozen(name: str) -> types.ModuleType: ... +def is_builtin(name: str) -> int: ... +def is_frozen(name: str) -> bool: ... +def is_frozen_package(name: str) -> bool: ... +def lock_held() -> bool: ... +def release_lock() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi new file mode 100644 index 0000000..51cb489 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi @@ -0,0 +1,45 @@ +# ModuleSpec, ModuleType, Loader are part of a dependency cycle. +# They are officially defined/exported in other places: +# +# - ModuleType in types +# - Loader in importlib.abc +# - ModuleSpec in importlib.machinery (3.4 and later only) +# +# _Loader is the PEP-451-defined interface for a loader type/object. + +from abc import ABCMeta +import sys +from typing import Any, Dict, List, Optional, Protocol + +class _Loader(Protocol): + def load_module(self, fullname: str) -> ModuleType: ... + +class ModuleSpec: + def __init__(self, name: str, loader: Optional[Loader], *, + origin: Optional[str] = ..., loader_state: Any = ..., + is_package: Optional[bool] = ...) -> None: ... + name: str + loader: Optional[_Loader] + origin: Optional[str] + submodule_search_locations: Optional[List[str]] + loader_state: Any + cached: Optional[str] + parent: Optional[str] + has_location: bool + +class ModuleType: + __name__: str + __file__: str + __dict__: Dict[str, Any] + __loader__: Optional[_Loader] + __package__: Optional[str] + __spec__: Optional[ModuleSpec] + def __init__(self, name: str, doc: Optional[str] = ...) -> None: ... + +class Loader(metaclass=ABCMeta): + def load_module(self, fullname: str) -> ModuleType: ... + def module_repr(self, module: ModuleType) -> str: ... + def create_module(self, spec: ModuleSpec) -> Optional[ModuleType]: ... + # Not defined on the actual class for backwards-compatibility reasons, + # but expected in new code. + def exec_module(self, module: ModuleType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_json.pyi new file mode 100644 index 0000000..217fadd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_json.pyi @@ -0,0 +1,30 @@ +"""Stub file for the '_json' module.""" + +from typing import Any, Tuple + +class make_encoder: + sort_keys: Any + skipkeys: Any + key_separator: Any + indent: Any + markers: Any + default: Any + encoder: Any + item_separator: Any + def __init__(self, markers, default, encoder, indent, key_separator, + item_separator, sort_keys, skipkeys, allow_nan) -> None: ... + def __call__(self, *args, **kwargs) -> Any: ... + +class make_scanner: + object_hook: Any + object_pairs_hook: Any + parse_int: Any + parse_constant: Any + parse_float: Any + strict: bool + # TODO: 'context' needs the attrs above (ducktype), but not __call__. + def __init__(self, context: make_scanner) -> None: ... + def __call__(self, string: str, index: int) -> Tuple[Any, int]: ... + +def encode_basestring_ascii(s: str) -> str: ... +def scanstring(string: str, end: int, strict: bool = ...) -> Tuple[str, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi new file mode 100644 index 0000000..09f69c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi @@ -0,0 +1,9 @@ +from typing import Tuple + +class ParserBase: + def __init__(self) -> None: ... + def error(self, message: str) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + + def unknown_decl(self, data: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_operator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_operator.pyi new file mode 100644 index 0000000..6d08cd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_operator.pyi @@ -0,0 +1,64 @@ +# Stubs for _operator (Python 3.5) + +import sys +from typing import AnyStr + +# In reality the import is the other way around, but this way we can keep the operator stub in 2and3 +from operator import ( + truth as truth, + contains as contains, + indexOf as indexOf, + countOf as countOf, + is_ as is_, + is_not as is_not, + index as index, + add as add, + sub as sub, + mul as mul, + floordiv as floordiv, + truediv as truediv, + mod as mod, + neg as neg, + pos as pos, + abs as abs, + inv as inv, + invert as invert, + length_hint as length_hint, + lshift as lshift, + rshift as rshift, + not_ as not_, + and_ as and_, + xor as xor, + or_ as or_, + iadd as iadd, + isub as isub, + imul as imul, + ifloordiv as ifloordiv, + itruediv as itruediv, + imod as imod, + ilshift as ilshift, + irshift as irshift, + iand as iand, + ixor as ixor, + ior as ior, + concat as concat, + iconcat as iconcat, + getitem as getitem, + setitem as setitem, + delitem as delitem, + pow as pow, + ipow as ipow, + eq as eq, + ne as ne, + lt as lt, + le as le, + gt as gt, + ge as ge, + itemgetter as itemgetter, + attrgetter as attrgetter, + methodcaller as methodcaller, +) +if sys.version_info >= (3, 5): + from operator import matmul as matmul, imatmul as imatmul + +def _compare_digest(a: AnyStr, b: AnyStr) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi new file mode 100644 index 0000000..67b7d7c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi @@ -0,0 +1,14 @@ +# Stubs for _posixsubprocess + +# NOTE: These are incomplete! + +from typing import Tuple, Sequence, Callable + +def cloexec_pipe() -> Tuple[int, int]: ... +def fork_exec(args: Sequence[str], + executable_list: Sequence[bytes], close_fds: bool, fds_to_keep: Sequence[int], + cwd: str, env_list: Sequence[bytes], + p2cread: int, p2cwrite: int, c2pred: int, c2pwrite: int, + errread: int, errwrite: int, errpipe_read: int, + errpipe_write: int, restore_signals: int, start_new_session: int, + preexec_fn: Callable[[], None]) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_stat.pyi new file mode 100644 index 0000000..ffd28cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_stat.pyi @@ -0,0 +1,69 @@ +"""Stub file for the '_stat' module.""" + +SF_APPEND: int +SF_ARCHIVED: int +SF_IMMUTABLE: int +SF_NOUNLINK: int +SF_SNAPSHOT: int +ST_ATIME: int +ST_CTIME: int +ST_DEV: int +ST_GID: int +ST_INO: int +ST_MODE: int +ST_MTIME: int +ST_NLINK: int +ST_SIZE: int +ST_UID: int +S_ENFMT: int +S_IEXEC: int +S_IFBLK: int +S_IFCHR: int +S_IFDIR: int +S_IFDOOR: int +S_IFIFO: int +S_IFLNK: int +S_IFPORT: int +S_IFREG: int +S_IFSOCK: int +S_IFWHT: int +S_IREAD: int +S_IRGRP: int +S_IROTH: int +S_IRUSR: int +S_IRWXG: int +S_IRWXO: int +S_IRWXU: int +S_ISGID: int +S_ISUID: int +S_ISVTX: int +S_IWGRP: int +S_IWOTH: int +S_IWRITE: int +S_IWUSR: int +S_IXGRP: int +S_IXOTH: int +S_IXUSR: int +UF_APPEND: int +UF_COMPRESSED: int +UF_HIDDEN: int +UF_IMMUTABLE: int +UF_NODUMP: int +UF_NOUNLINK: int +UF_OPAQUE: int + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +def S_ISBLK(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISDIR(mode: int) -> bool: ... +def S_ISDOOR(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISPORT(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... +def S_ISWHT(mode: int) -> bool: ... + +def filemode(mode: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi new file mode 100644 index 0000000..76967b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi @@ -0,0 +1,38 @@ +# Stubs for _subprocess + +# NOTE: These are incomplete! + +from typing import Mapping, Any, Tuple + +CREATE_NEW_CONSOLE = 0 +CREATE_NEW_PROCESS_GROUP = 0 +STD_INPUT_HANDLE = 0 +STD_OUTPUT_HANDLE = 0 +STD_ERROR_HANDLE = 0 +SW_HIDE = 0 +STARTF_USESTDHANDLES = 0 +STARTF_USESHOWWINDOW = 0 +INFINITE = 0 +DUPLICATE_SAME_ACCESS = 0 +WAIT_OBJECT_0 = 0 + +# TODO not exported by the Python module +class Handle: + def Close(self) -> None: ... + +def GetVersion() -> int: ... +def GetExitCodeProcess(handle: Handle) -> int: ... +def WaitForSingleObject(handle: Handle, timeout: int) -> int: ... +def CreateProcess(executable: str, cmd_line: str, + proc_attrs, thread_attrs, + inherit: int, flags: int, + env_mapping: Mapping[str, str], + curdir: str, + startupinfo: Any) -> Tuple[Any, Handle, int, int]: ... +def GetModuleFileName(module: int) -> str: ... +def GetCurrentProcess() -> Handle: ... +def DuplicateHandle(source_proc: Handle, source: Handle, target_proc: Handle, + target: Any, access: int, inherit: int) -> int: ... +def CreatePipe(pipe_attrs, size: int) -> Tuple[Handle, Handle]: ... +def GetStdHandle(arg: int) -> int: ... +def TerminateProcess(handle: Handle, exit_code: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_thread.pyi new file mode 100644 index 0000000..41f02b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_thread.pyi @@ -0,0 +1,31 @@ +# Stubs for _thread + +from types import TracebackType +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple, Type + +error = RuntimeError + +def _count() -> int: ... + +_dangling: Any + +class LockType: + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + def release(self) -> None: ... + def locked(self) -> bool: ... + def __enter__(self) -> bool: ... + def __exit__( + self, + type: Optional[Type[BaseException]], + value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: ... + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> int: ... +def interrupt_main() -> None: ... +def exit() -> NoReturn: ... +def allocate_lock() -> LockType: ... +def get_ident() -> int: ... +def stack_size(size: int = ...) -> int: ... + +TIMEOUT_MAX: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi new file mode 100644 index 0000000..a286d2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi @@ -0,0 +1,18 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/_threading_local.py +from typing import Any, Dict, List, Tuple +from weakref import ReferenceType + +__all__: List[str] +localdict = Dict[Any, Any] + +class _localimpl: + key: str + dicts: Dict[int, Tuple[ReferenceType, localdict]] + def __init__(self) -> None: ... + def get_dict(self) -> localdict: ... + def create_dict(self) -> localdict: ... + +class local: + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi new file mode 100644 index 0000000..21d0033 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi @@ -0,0 +1,26 @@ +"""Stub file for the '_tracemalloc' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any + +def _get_object_traceback(*args, **kwargs) -> Any: ... + +def _get_traces() -> Any: + raise MemoryError() + +def clear_traces() -> None: ... + +def get_traceback_limit() -> int: ... + +def get_traced_memory() -> tuple: ... + +def get_tracemalloc_memory() -> Any: ... + +def is_tracing() -> bool: ... + +def start(*args, **kwargs) -> None: + raise ValueError() + +def stop() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_warnings.pyi new file mode 100644 index 0000000..6529c40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_warnings.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Optional, Type + +_defaultaction: str +_onceregistry: dict +filters: List[tuple] + +def warn(message: Warning, category: Optional[Type[Warning]] = ..., stacklevel: int = ...) -> None: ... +def warn_explicit(message: Warning, category: Optional[Type[Warning]], + filename: str, lineno: int, + module: Any = ..., registry: dict = ..., + module_globals: dict = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_winapi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_winapi.pyi new file mode 100644 index 0000000..af6c923 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/_winapi.pyi @@ -0,0 +1,96 @@ +from typing import Any, Union, Tuple, Optional, overload, Dict, NoReturn, Sequence + +CREATE_NEW_CONSOLE: int +CREATE_NEW_PROCESS_GROUP: int +DUPLICATE_CLOSE_SOURCE: int +DUPLICATE_SAME_ACCESS: int +ERROR_ALREADY_EXISTS: int +ERROR_BROKEN_PIPE: int +ERROR_IO_PENDING: int +ERROR_MORE_DATA: int +ERROR_NETNAME_DELETED: int +ERROR_NO_DATA: int +ERROR_NO_SYSTEM_RESOURCES: int +ERROR_OPERATION_ABORTED: int +ERROR_PIPE_BUSY: int +ERROR_PIPE_CONNECTED: int +ERROR_SEM_TIMEOUT: int +FILE_FLAG_FIRST_PIPE_INSTANCE: int +FILE_FLAG_OVERLAPPED: int +FILE_GENERIC_READ: int +FILE_GENERIC_WRITE: int +GENERIC_READ: int +GENERIC_WRITE: int +INFINITE: int +NMPWAIT_WAIT_FOREVER: int +NULL: int +OPEN_EXISTING: int +PIPE_ACCESS_DUPLEX: int +PIPE_ACCESS_INBOUND: int +PIPE_READMODE_MESSAGE: int +PIPE_TYPE_MESSAGE: int +PIPE_UNLIMITED_INSTANCES: int +PIPE_WAIT: int +PROCESS_ALL_ACCESS: int +PROCESS_DUP_HANDLE: int +STARTF_USESHOWWINDOW: int +STARTF_USESTDHANDLES: int +STD_ERROR_HANDLE: int +STD_INPUT_HANDLE: int +STD_OUTPUT_HANDLE: int +STILL_ACTIVE: int +SW_HIDE: int +WAIT_ABANDONED_0: int +WAIT_OBJECT_0: int +WAIT_TIMEOUT: int + +def CloseHandle(handle: int) -> None: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def ConnectNamedPipe(handle: int, overlapped: Union[int, bool]) -> Any: ... +@overload +def ConnectNamedPipe(handle: int) -> None: ... + +def CreateFile(file_name: str, desired_access: int, share_mode: int, security_attributes: int, creation_disposition: int, flags_and_attributes: int, template_file: int) -> int: ... +def CreateJunction(src_path: str, dest_path: str) -> None: ... +def CreateNamedPipe(name: str, open_mode: int, pipe_mode: int, max_instances: int, out_buffer_size: int, in_buffer_size: int, default_timeout: int, security_attributes: int) -> int: ... +def CreatePipe(pipe_attrs: Any, size: int) -> Tuple[int, int]: ... +def CreateProcess(application_name: Optional[str], command_line: Optional[str], proc_attrs: Any, thread_attrs: Any, inherit_handles: bool, creation_flags: int, env_mapping: Dict[str, str], cwd: Optional[str], startup_info: Any) -> Tuple[int, int, int, int]: ... +def DuplicateHandle(source_process_handle: int, source_handle: int, target_process_handle: int, desired_access: int, inherit_handle: bool, options: int = ...) -> int: ... +def ExitProcess(ExitCode: int) -> NoReturn: ... +def GetACP() -> int: ... +def GetFileType(handle: int) -> int: ... +def GetCurrentProcess() -> int: ... +def GetExitCodeProcess(process: int) -> int: ... +def GetLastError() -> int: ... +def GetModuleFileName(module_handle: int) -> str: ... +def GetStdHandle(std_handle: int) -> int: ... +def GetVersion() -> int: ... +def OpenProcess(desired_access: int, inherit_handle: bool, process_id: int) -> int: ... +def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[bytes, int, int]]: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def ReadFile(handle: int, size: int, overlapped: Union[int, bool]) -> Any: ... +@overload +def ReadFile(handle: int, size: int) -> Tuple[int, int]: ... + +def SetNamedPipeHandleState(named_pipe: int, mode: Optional[int], max_collection_count: Optional[int], collect_data_timeout: Optional[int]) -> None: ... +def TerminateProcess(handle: int, exit_code: int) -> None: ... +def WaitForMultipleObjects(handle_seq: Sequence[int], wait_flag: bool, milliseconds: int = ...) -> int: ... +def WaitForSingleObject(handle: int, milliseconds: int) -> int: ... +def WaitNamedPipe(name: str, timeout: int) -> None: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool]) -> Any: ... +@overload +def WriteFile(handle: int, buffer: bytes) -> Tuple[bytes, int]: ... + + +class Overlapped: + event: int = ... + def GetOverlappedResult(self, wait: bool) -> Tuple[int, int]: ... + def cancel(self) -> None: ... + def getbuffer(self) -> Optional[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/abc.pyi new file mode 100644 index 0000000..e9c530d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/abc.pyi @@ -0,0 +1,19 @@ +from typing import Any, Callable, Type, TypeVar +# Stubs for abc. + +_T = TypeVar('_T') +_FuncT = TypeVar('_FuncT', bound=Callable[..., Any]) + +# Thesee definitions have special processing in mypy +class ABCMeta(type): + def register(cls: ABCMeta, subclass: Type[_T]) -> Type[_T]: ... + +def abstractmethod(callable: _FuncT) -> _FuncT: ... +class abstractproperty(property): ... +# These two are deprecated and not supported by mypy +def abstractstaticmethod(callable: _FuncT) -> _FuncT: ... +def abstractclassmethod(callable: _FuncT) -> _FuncT: ... + +class ABC(metaclass=ABCMeta): ... + +def get_cache_token() -> object: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ast.pyi new file mode 100644 index 0000000..090d5f8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ast.pyi @@ -0,0 +1,39 @@ +# Python 3.5 ast + +import sys +# Rename typing to _typing, as not to conflict with typing imported +# from _ast below when loaded in an unorthodox way by the Dropbox +# internal Bazel integration. +import typing as _typing +from typing import Any, Iterator, Optional, Union, TypeVar + +# The same unorthodox Bazel integration causes issues with sys, which +# is imported in both modules. unfortunately we can't just rename sys, +# since mypy only supports version checks with a sys that is named +# sys. +from _ast import * # type: ignore + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> Any: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> Optional[AST]: ... + +_T = TypeVar('_T', bound=AST) + +if sys.version_info >= (3, 8): + def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ..., + type_comments: bool = ..., feature_version: int = ...) -> AST: ... +else: + def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ...) -> AST: ... + +def copy_location(new_node: _T, old_node: AST) -> _T: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: _T) -> _T: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: _T, n: int = ...) -> _T: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[_typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi new file mode 100644 index 0000000..b98c2d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi @@ -0,0 +1,125 @@ +import sys +from typing import List, Type + +from asyncio.coroutines import ( + coroutine as coroutine, + iscoroutinefunction as iscoroutinefunction, + iscoroutine as iscoroutine, +) +from asyncio.protocols import ( + BaseProtocol as BaseProtocol, + Protocol as Protocol, + DatagramProtocol as DatagramProtocol, + SubprocessProtocol as SubprocessProtocol, +) +from asyncio.streams import ( + StreamReader as StreamReader, + StreamWriter as StreamWriter, + StreamReaderProtocol as StreamReaderProtocol, + open_connection as open_connection, + start_server as start_server, + IncompleteReadError as IncompleteReadError, + LimitOverrunError as LimitOverrunError, +) +from asyncio.subprocess import ( + create_subprocess_exec as create_subprocess_exec, + create_subprocess_shell as create_subprocess_shell, +) +from asyncio.transports import ( + BaseTransport as BaseTransport, + ReadTransport as ReadTransport, + WriteTransport as WriteTransport, + Transport as Transport, + DatagramTransport as DatagramTransport, + SubprocessTransport as SubprocessTransport, +) +from asyncio.futures import ( + Future as Future, + CancelledError as CancelledError, + TimeoutError as TimeoutError, + InvalidStateError as InvalidStateError, + wrap_future as wrap_future, +) +from asyncio.tasks import ( + FIRST_COMPLETED as FIRST_COMPLETED, + FIRST_EXCEPTION as FIRST_EXCEPTION, + ALL_COMPLETED as ALL_COMPLETED, + as_completed as as_completed, + ensure_future as ensure_future, + gather as gather, + run_coroutine_threadsafe as run_coroutine_threadsafe, + shield as shield, + sleep as sleep, + wait as wait, + wait_for as wait_for, + Task as Task, +) +from asyncio.base_events import BaseEventLoop as BaseEventLoop +from asyncio.events import ( + AbstractEventLoopPolicy as AbstractEventLoopPolicy, + AbstractEventLoop as AbstractEventLoop, + AbstractServer as AbstractServer, + Handle as Handle, + TimerHandle as TimerHandle, + get_event_loop_policy as get_event_loop_policy, + set_event_loop_policy as set_event_loop_policy, + get_event_loop as get_event_loop, + set_event_loop as set_event_loop, + new_event_loop as new_event_loop, + get_child_watcher as get_child_watcher, + set_child_watcher as set_child_watcher, +) +from asyncio.queues import ( + Queue as Queue, + PriorityQueue as PriorityQueue, + LifoQueue as LifoQueue, + QueueFull as QueueFull, + QueueEmpty as QueueEmpty, +) +from asyncio.locks import ( + Lock as Lock, + Event as Event, + Condition as Condition, + Semaphore as Semaphore, + BoundedSemaphore as BoundedSemaphore, +) + +if sys.version_info < (3, 5): + from asyncio.queues import JoinableQueue as JoinableQueue +else: + from asyncio.futures import isfuture as isfuture + from asyncio.events import ( + _set_running_loop as _set_running_loop, + _get_running_loop as _get_running_loop, + ) +if sys.platform != 'win32': + from asyncio.streams import ( + open_unix_connection as open_unix_connection, + start_unix_server as start_unix_server, + ) + +if sys.version_info >= (3, 7): + from asyncio.events import ( + get_running_loop as get_running_loop, + ) + from asyncio.tasks import ( + all_tasks as all_tasks, + create_task as create_task, + current_task as current_task, + ) + from asyncio.runners import ( + run as run, + ) + + +# TODO: It should be possible to instantiate these classes, but mypy +# currently disallows this. +# See https://github.com/python/mypy/issues/1843 +SelectorEventLoop: Type[AbstractEventLoop] +if sys.platform == 'win32': + ProactorEventLoop: Type[AbstractEventLoop] +DefaultEventLoopPolicy: Type[AbstractEventLoopPolicy] + +# TODO: AbstractChildWatcher (UNIX only) + +__all__: List[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi new file mode 100644 index 0000000..2262a67 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi @@ -0,0 +1,140 @@ +import selectors +from socket import socket +import ssl +import sys +from typing import Any, Awaitable, Callable, Dict, Generator, List, Optional, Sequence, Tuple, TypeVar, Union, overload +from asyncio.futures import Future +from asyncio.coroutines import coroutine +from asyncio.events import AbstractEventLoop, AbstractServer, Handle, TimerHandle +from asyncio.protocols import BaseProtocol +from asyncio.tasks import Task +from asyncio.transports import BaseTransport + +_T = TypeVar('_T') +_Context = Dict[str, Any] +_ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any] +_ProtocolFactory = Callable[[], BaseProtocol] +_SSLContext = Union[bool, None, ssl.SSLContext] +_TransProtPair = Tuple[BaseTransport, BaseProtocol] + +class BaseEventLoop(AbstractEventLoop): + def run_forever(self) -> None: ... + + # Can't use a union, see mypy issue # 1873. + @overload + def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ... + @overload + def run_until_complete(self, future: Awaitable[_T]) -> _T: ... + + def stop(self) -> None: ... + def is_running(self) -> bool: ... + def is_closed(self) -> bool: ... + def close(self) -> None: ... + if sys.version_info >= (3, 6): + @coroutine + def shutdown_asyncgens(self) -> Generator[Any, None, None]: ... + # Methods scheduling callbacks. All these return Handles. + def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + def time(self) -> float: ... + # Future methods + if sys.version_info >= (3, 5): + def create_future(self) -> Future[Any]: ... + # Tasks methods + def create_task(self, coro: Union[Awaitable[_T], Generator[Any, None, _T]]) -> Task[_T]: ... + def set_task_factory(self, factory: Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]) -> None: ... + def get_task_factory(self) -> Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]: ... + # Methods for interacting with threads + def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @coroutine + def run_in_executor(self, executor: Any, + func: Callable[..., _T], *args: Any) -> Generator[Any, None, _T]: ... + def set_default_executor(self, executor: Any) -> None: ... + # Network I/O methods returning Futures. + @coroutine + # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers + # https://github.com/python/mypy/issues/2509 + def getaddrinfo(self, host: Optional[str], port: Union[str, int, None], *, + family: int = ..., type: int = ..., proto: int = ..., + flags: int = ...) -> Generator[Any, None, List[Tuple[int, int, int, str, Tuple[Any, ...]]]]: ... + @coroutine + def getnameinfo(self, sockaddr: tuple, flags: int = ...) -> Generator[Any, None, Tuple[str, int]]: ... + @overload + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: str = ..., port: int = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: None = ..., + local_addr: Optional[str] = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: socket, + local_addr: None = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: Optional[Union[str, Sequence[str]]] = ..., port: int = ..., *, + family: int = ..., flags: int = ..., + sock: None = ..., backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @overload + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + family: int = ..., flags: int = ..., + sock: socket, backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @coroutine + def create_unix_connection(self, protocol_factory: _ProtocolFactory, path: str, *, + ssl: _SSLContext = ..., sock: Optional[socket] = ..., + server_hostname: str = ...) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def create_unix_server(self, protocol_factory: _ProtocolFactory, path: str, *, + sock: Optional[socket] = ..., backlog: int = ..., ssl: _SSLContext = ...) -> Generator[Any, None, AbstractServer]: ... + @coroutine + def create_datagram_endpoint(self, protocol_factory: _ProtocolFactory, + local_addr: Optional[Tuple[str, int]] = ..., remote_addr: Optional[Tuple[str, int]] = ..., *, + family: int = ..., proto: int = ..., flags: int = ..., + reuse_address: Optional[bool] = ..., reuse_port: Optional[bool] = ..., + allow_broadcast: Optional[bool] = ..., + sock: Optional[socket] = ...) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def connect_accepted_socket(self, protocol_factory: _ProtocolFactory, sock: socket, *, ssl: _SSLContext = ...) -> Generator[Any, None, _TransProtPair]: ... + # Pipes and subprocesses. + @coroutine + def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def subprocess_shell(self, protocol_factory: _ProtocolFactory, cmd: Union[bytes, str], *, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def subprocess_exec(self, protocol_factory: _ProtocolFactory, *args: Any, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + def add_reader(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_reader(self, fd: selectors._FileObject) -> None: ... + def add_writer(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_writer(self, fd: selectors._FileObject) -> None: ... + # Completion based I/O methods returning Futures. + @coroutine + def sock_recv(self, sock: socket, nbytes: int) -> Generator[Any, None, bytes]: ... + @coroutine + def sock_sendall(self, sock: socket, data: bytes) -> Generator[Any, None, None]: ... + @coroutine + def sock_connect(self, sock: socket, address: str) -> Generator[Any, None, None]: ... + @coroutine + def sock_accept(self, sock: socket) -> Generator[Any, None, Tuple[socket, Any]]: ... + # Signal handling. + def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_signal_handler(self, sig: int) -> None: ... + # Error handlers. + def set_exception_handler(self, handler: Optional[_ExceptionHandler]) -> None: ... + if sys.version_info >= (3, 5): + def get_exception_handler(self) -> Optional[_ExceptionHandler]: ... + def default_exception_handler(self, context: _Context) -> None: ... + def call_exception_handler(self, context: _Context) -> None: ... + # Debug flag management. + def get_debug(self) -> bool: ... + def set_debug(self, enabled: bool) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi new file mode 100644 index 0000000..981ccd5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi @@ -0,0 +1,9 @@ +from typing import Any, Callable, Generator, List, TypeVar + +__all__: List[str] + +_F = TypeVar('_F', bound=Callable[..., Any]) + +def coroutine(func: _F) -> _F: ... +def iscoroutinefunction(func: Callable[..., Any]) -> bool: ... +def iscoroutine(obj: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi new file mode 100644 index 0000000..c81d027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi @@ -0,0 +1,246 @@ +import selectors +from socket import socket +import ssl +import sys +from typing import Any, Awaitable, Callable, Dict, Generator, List, Optional, Sequence, Tuple, TypeVar, Union, overload +from abc import ABCMeta, abstractmethod +from asyncio.futures import Future +from asyncio.coroutines import coroutine +from asyncio.protocols import BaseProtocol +from asyncio.tasks import Task +from asyncio.transports import BaseTransport + +__all__: List[str] + +_T = TypeVar('_T') +_Context = Dict[str, Any] +_ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any] +_ProtocolFactory = Callable[[], BaseProtocol] +_SSLContext = Union[bool, None, ssl.SSLContext] +_TransProtPair = Tuple[BaseTransport, BaseProtocol] + +class Handle: + _cancelled = False + _args: List[Any] + def __init__(self, callback: Callable[..., Any], args: List[Any], loop: AbstractEventLoop) -> None: ... + def __repr__(self) -> str: ... + def cancel(self) -> None: ... + def _run(self) -> None: ... + +class TimerHandle(Handle): + def __init__(self, when: float, callback: Callable[..., Any], args: List[Any], + loop: AbstractEventLoop) -> None: ... + def __hash__(self) -> int: ... + +class AbstractServer: + sockets: Optional[List[socket]] + def close(self) -> None: ... + @coroutine + def wait_closed(self) -> Generator[Any, None, None]: ... + +class AbstractEventLoop(metaclass=ABCMeta): + slow_callback_duration: float = ... + @abstractmethod + def run_forever(self) -> None: ... + + # Can't use a union, see mypy issue # 1873. + @overload + @abstractmethod + def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ... + @overload + @abstractmethod + def run_until_complete(self, future: Awaitable[_T]) -> _T: ... + + @abstractmethod + def stop(self) -> None: ... + @abstractmethod + def is_running(self) -> bool: ... + @abstractmethod + def is_closed(self) -> bool: ... + @abstractmethod + def close(self) -> None: ... + if sys.version_info >= (3, 6): + @abstractmethod + @coroutine + def shutdown_asyncgens(self) -> Generator[Any, None, None]: ... + # Methods scheduling callbacks. All these return Handles. + @abstractmethod + def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @abstractmethod + def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + @abstractmethod + def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + @abstractmethod + def time(self) -> float: ... + # Future methods + if sys.version_info >= (3, 5): + @abstractmethod + def create_future(self) -> Future[Any]: ... + # Tasks methods + @abstractmethod + def create_task(self, coro: Union[Awaitable[_T], Generator[Any, None, _T]]) -> Task[_T]: ... + @abstractmethod + def set_task_factory(self, factory: Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]) -> None: ... + @abstractmethod + def get_task_factory(self) -> Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]: ... + # Methods for interacting with threads + @abstractmethod + def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @abstractmethod + @coroutine + def run_in_executor(self, executor: Any, + func: Callable[..., _T], *args: Any) -> Generator[Any, None, _T]: ... + @abstractmethod + def set_default_executor(self, executor: Any) -> None: ... + # Network I/O methods returning Futures. + @abstractmethod + @coroutine + # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers + # https://github.com/python/mypy/issues/2509 + def getaddrinfo(self, host: Optional[str], port: Union[str, int, None], *, + family: int = ..., type: int = ..., proto: int = ..., + flags: int = ...) -> Generator[Any, None, List[Tuple[int, int, int, str, Tuple[Any, ...]]]]: ... + @abstractmethod + @coroutine + def getnameinfo(self, sockaddr: tuple, flags: int = ...) -> Generator[Any, None, Tuple[str, int]]: ... + @overload + @abstractmethod + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: str = ..., port: int = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: None = ..., + local_addr: Optional[str] = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @abstractmethod + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: socket, + local_addr: None = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @abstractmethod + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: Optional[Union[str, Sequence[str]]] = ..., port: int = ..., *, + family: int = ..., flags: int = ..., + sock: None = ..., backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @overload + @abstractmethod + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + family: int = ..., flags: int = ..., + sock: socket, backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @abstractmethod + @coroutine + def create_unix_connection(self, protocol_factory: _ProtocolFactory, path: str, *, + ssl: _SSLContext = ..., sock: Optional[socket] = ..., + server_hostname: str = ...) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def create_unix_server(self, protocol_factory: _ProtocolFactory, path: str, *, + sock: Optional[socket] = ..., backlog: int = ..., ssl: _SSLContext = ...) -> Generator[Any, None, AbstractServer]: ... + @abstractmethod + @coroutine + def create_datagram_endpoint(self, protocol_factory: _ProtocolFactory, + local_addr: Optional[Tuple[str, int]] = ..., remote_addr: Optional[Tuple[str, int]] = ..., *, + family: int = ..., proto: int = ..., flags: int = ..., + reuse_address: Optional[bool] = ..., reuse_port: Optional[bool] = ..., + allow_broadcast: Optional[bool] = ..., + sock: Optional[socket] = ...) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def connect_accepted_socket(self, protocol_factory: _ProtocolFactory, sock: socket, *, ssl: _SSLContext = ...) -> Generator[Any, None, _TransProtPair]: ... + # Pipes and subprocesses. + @abstractmethod + @coroutine + def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def subprocess_shell(self, protocol_factory: _ProtocolFactory, cmd: Union[bytes, str], *, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def subprocess_exec(self, protocol_factory: _ProtocolFactory, *args: Any, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + def add_reader(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_reader(self, fd: selectors._FileObject) -> None: ... + @abstractmethod + def add_writer(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_writer(self, fd: selectors._FileObject) -> None: ... + # Completion based I/O methods returning Futures. + @abstractmethod + @coroutine + def sock_recv(self, sock: socket, nbytes: int) -> Generator[Any, None, bytes]: ... + @abstractmethod + @coroutine + def sock_sendall(self, sock: socket, data: bytes) -> Generator[Any, None, None]: ... + @abstractmethod + @coroutine + def sock_connect(self, sock: socket, address: str) -> Generator[Any, None, None]: ... + @abstractmethod + @coroutine + def sock_accept(self, sock: socket) -> Generator[Any, None, Tuple[socket, Any]]: ... + # Signal handling. + @abstractmethod + def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_signal_handler(self, sig: int) -> None: ... + # Error handlers. + @abstractmethod + def set_exception_handler(self, handler: Optional[_ExceptionHandler]) -> None: ... + if sys.version_info >= (3, 5): + @abstractmethod + def get_exception_handler(self) -> Optional[_ExceptionHandler]: ... + @abstractmethod + def default_exception_handler(self, context: _Context) -> None: ... + @abstractmethod + def call_exception_handler(self, context: _Context) -> None: ... + # Debug flag management. + @abstractmethod + def get_debug(self) -> bool: ... + @abstractmethod + def set_debug(self, enabled: bool) -> None: ... + +class AbstractEventLoopPolicy(metaclass=ABCMeta): + @abstractmethod + def get_event_loop(self) -> AbstractEventLoop: ... + @abstractmethod + def set_event_loop(self, loop: Optional[AbstractEventLoop]) -> None: ... + @abstractmethod + def new_event_loop(self) -> AbstractEventLoop: ... + # Child processes handling (Unix only). + @abstractmethod + def get_child_watcher(self) -> Any: ... # TODO: unix_events.AbstractChildWatcher + @abstractmethod + def set_child_watcher(self, watcher: Any) -> None: ... # TODO: unix_events.AbstractChildWatcher + +class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy, metaclass=ABCMeta): + def __init__(self) -> None: ... + def get_event_loop(self) -> AbstractEventLoop: ... + def set_event_loop(self, loop: Optional[AbstractEventLoop]) -> None: ... + def new_event_loop(self) -> AbstractEventLoop: ... + +def get_event_loop_policy() -> AbstractEventLoopPolicy: ... +def set_event_loop_policy(policy: AbstractEventLoopPolicy) -> None: ... + +def get_event_loop() -> AbstractEventLoop: ... +def set_event_loop(loop: Optional[AbstractEventLoop]) -> None: ... +def new_event_loop() -> AbstractEventLoop: ... + +def get_child_watcher() -> Any: ... # TODO: unix_events.AbstractChildWatcher +def set_child_watcher(watcher: Any) -> None: ... # TODO: unix_events.AbstractChildWatcher + +def _set_running_loop(loop: Optional[AbstractEventLoop]) -> None: ... +def _get_running_loop() -> AbstractEventLoop: ... + +if sys.version_info >= (3, 7): + def get_running_loop() -> AbstractEventLoop: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi new file mode 100644 index 0000000..ed2e4a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi @@ -0,0 +1,64 @@ +import sys +from typing import Any, Union, Callable, TypeVar, Type, List, Generic, Iterable, Generator, Awaitable, Optional, Tuple +from .events import AbstractEventLoop +from concurrent.futures import ( + CancelledError as CancelledError, + TimeoutError as TimeoutError, + Future as _ConcurrentFuture, + Error, +) + +if sys.version_info >= (3, 7): + from contextvars import Context + +__all__: List[str] + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Future) + +class InvalidStateError(Error): ... + +class _TracebackLogger: + exc: BaseException + tb: List[str] + def __init__(self, exc: Any, loop: AbstractEventLoop) -> None: ... + def activate(self) -> None: ... + def clear(self) -> None: ... + def __del__(self) -> None: ... + +if sys.version_info >= (3, 5): + def isfuture(obj: object) -> bool: ... + +class Future(Awaitable[_T], Iterable[_T]): + _state: str + _exception: BaseException + _blocking = False + _log_traceback = False + _tb_logger: Type[_TracebackLogger] + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def __repr__(self) -> str: ... + def __del__(self) -> None: ... + if sys.version_info >= (3, 7): + def get_loop(self) -> AbstractEventLoop: ... + def _callbacks(self: _S) -> List[Tuple[Callable[[_S], Any], Context]]: ... + def add_done_callback(self: _S, __fn: Callable[[_S], Any], *, context: Optional[Context] = ...) -> None: ... + else: + @property + def _callbacks(self: _S) -> List[Callable[[_S], Any]]: ... + def add_done_callback(self: _S, __fn: Callable[[_S], Any]) -> None: ... + def cancel(self) -> bool: ... + def _schedule_callbacks(self) -> None: ... + def cancelled(self) -> bool: ... + def done(self) -> bool: ... + def result(self) -> _T: ... + def exception(self) -> BaseException: ... + def remove_done_callback(self: _S, fn: Callable[[_S], Any]) -> int: ... + def set_result(self, result: _T) -> None: ... + def set_exception(self, exception: Union[type, BaseException]) -> None: ... + def _copy_state(self, other: Any) -> None: ... + def __iter__(self) -> Generator[Any, None, _T]: ... + def __await__(self) -> Generator[Any, None, _T]: ... + @property + def _loop(self) -> AbstractEventLoop: ... + +def wrap_future(f: Union[_ConcurrentFuture[_T], Future[_T]]) -> Future[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi new file mode 100644 index 0000000..56b8a67 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi @@ -0,0 +1,60 @@ +from typing import Any, Callable, Generator, Iterable, Iterator, List, Type, TypeVar, Union, Optional, Awaitable + +from .coroutines import coroutine +from .events import AbstractEventLoop +from .futures import Future +from types import TracebackType + +_T = TypeVar('_T') + +__all__: List[str] + +class _ContextManager: + def __init__(self, lock: Union[Lock, Semaphore]) -> None: ... + def __enter__(self) -> object: ... + def __exit__(self, *args: Any) -> None: ... + +class _ContextManagerMixin(Future[_ContextManager]): + # Apparently this exists to *prohibit* use as a context manager. + def __enter__(self) -> object: ... + def __exit__(self, *args: Any) -> None: ... + def __aenter__(self) -> Awaitable[None]: ... + def __aexit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[TracebackType]) -> Awaitable[None]: ... + +class Lock(_ContextManagerMixin): + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + +class Event: + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def is_set(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + @coroutine + def wait(self) -> Generator[Any, None, bool]: ... + +class Condition(_ContextManagerMixin): + def __init__(self, lock: Optional[Lock] = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + @coroutine + def wait(self) -> Generator[Any, None, bool]: ... + @coroutine + def wait_for(self, predicate: Callable[[], _T]) -> Generator[Any, None, _T]: ... + def notify(self, n: int = ...) -> None: ... + def notify_all(self) -> None: ... + +class Semaphore(_ContextManagerMixin): + def __init__(self, value: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi new file mode 100644 index 0000000..bb258e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi @@ -0,0 +1,24 @@ +from asyncio import transports +from typing import List, Optional, Text, Tuple, Union + +__all__: List[str] + + +class BaseProtocol: + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def connection_lost(self, exc: Optional[Exception]) -> None: ... + def pause_writing(self) -> None: ... + def resume_writing(self) -> None: ... + +class Protocol(BaseProtocol): + def data_received(self, data: bytes) -> None: ... + def eof_received(self) -> Optional[bool]: ... + +class DatagramProtocol(BaseProtocol): + def datagram_received(self, data: Union[bytes, Text], addr: Tuple[str, int]) -> None: ... + def error_received(self, exc: Exception) -> None: ... + +class SubprocessProtocol(BaseProtocol): + def pipe_data_received(self, fd: int, data: Union[bytes, Text]) -> None: ... + def pipe_connection_lost(self, fd: int, exc: Optional[Exception]) -> None: ... + def process_exited(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi new file mode 100644 index 0000000..dc4e9ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi @@ -0,0 +1,50 @@ +import sys +from asyncio.events import AbstractEventLoop +from .coroutines import coroutine +from .futures import Future +from typing import Any, Generator, Generic, List, TypeVar, Optional + +__all__: List[str] + + +class QueueEmpty(Exception): ... +class QueueFull(Exception): ... + +_T = TypeVar('_T') + +class Queue(Generic[_T]): + def __init__(self, maxsize: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def _init(self, maxsize: int) -> None: ... + def _get(self) -> _T: ... + def _put(self, item: _T) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def _format(self) -> str: ... + def _consume_done_getters(self) -> None: ... + def _consume_done_putters(self) -> None: ... + def qsize(self) -> int: ... + @property + def maxsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + @coroutine + def put(self, item: _T) -> Generator[Any, None, None]: ... + def put_nowait(self, item: _T) -> None: ... + @coroutine + def get(self) -> Generator[Any, None, _T]: ... + def get_nowait(self) -> _T: ... + @coroutine + def join(self) -> Generator[Any, None, bool]: ... + def task_done(self) -> None: ... + + +class PriorityQueue(Queue[_T]): ... + + +class LifoQueue(Queue[_T]): ... + +if sys.version_info < (3, 5): + class JoinableQueue(Queue[_T]): + def task_done(self) -> None: ... + @coroutine + def join(self) -> Generator[Any, None, bool]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi new file mode 100644 index 0000000..7d8c28c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi @@ -0,0 +1,9 @@ +import sys + + +if sys.version_info >= (3, 7): + from typing import Awaitable, TypeVar + + _T = TypeVar('_T') + + def run(main: Awaitable[_T], *, debug: bool = ...) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi new file mode 100644 index 0000000..68271c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi @@ -0,0 +1,119 @@ +import sys +from typing import Any, Awaitable, Callable, Generator, Iterable, List, Optional, Tuple, Union + +from . import coroutines +from . import events +from . import protocols +from . import transports + +_ClientConnectedCallback = Callable[[StreamReader, StreamWriter], Optional[Awaitable[None]]] + + +__all__: List[str] + +class IncompleteReadError(EOFError): + expected: Optional[int] + partial: bytes + def __init__(self, partial: bytes, expected: Optional[int]) -> None: ... + +class LimitOverrunError(Exception): + consumed: int + def __init__(self, message: str, consumed: int) -> None: ... + +@coroutines.coroutine +def open_connection( + host: str = ..., + port: Union[int, str] = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Tuple[StreamReader, StreamWriter]]: ... + +@coroutines.coroutine +def start_server( + client_connected_cb: _ClientConnectedCallback, + host: Optional[str] = ..., + port: Optional[Union[int, str]] = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, events.AbstractServer]: ... + +if sys.platform != 'win32': + if sys.version_info >= (3, 7): + from os import PathLike + _PathType = Union[str, PathLike[str]] + else: + _PathType = str + + @coroutines.coroutine + def open_unix_connection( + path: _PathType = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any + ) -> Generator[Any, None, Tuple[StreamReader, StreamWriter]]: ... + + @coroutines.coroutine + def start_unix_server( + client_connected_cb: _ClientConnectedCallback, + path: _PathType = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any) -> Generator[Any, None, events.AbstractServer]: ... + +class FlowControlMixin(protocols.Protocol): ... + +class StreamReaderProtocol(FlowControlMixin, protocols.Protocol): + def __init__(self, + stream_reader: StreamReader, + client_connected_cb: _ClientConnectedCallback = ..., + loop: Optional[events.AbstractEventLoop] = ...) -> None: ... + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def connection_lost(self, exc: Optional[Exception]) -> None: ... + def data_received(self, data: bytes) -> None: ... + def eof_received(self) -> bool: ... + +class StreamWriter: + def __init__(self, + transport: transports.BaseTransport, + protocol: protocols.BaseProtocol, + reader: Optional[StreamReader], + loop: events.AbstractEventLoop) -> None: ... + @property + def transport(self) -> transports.BaseTransport: ... + def write(self, data: bytes) -> None: ... + def writelines(self, data: Iterable[bytes]) -> None: ... + def write_eof(self) -> None: ... + def can_write_eof(self) -> bool: ... + def close(self) -> None: ... + if sys.version_info >= (3, 7): + def is_closing(self) -> bool: ... + @coroutines.coroutine + def wait_closed(self) -> None: ... + def get_extra_info(self, name: str, default: Any = ...) -> Any: ... + @coroutines.coroutine + def drain(self) -> Generator[Any, None, None]: ... + +class StreamReader: + def __init__(self, + limit: int = ..., + loop: Optional[events.AbstractEventLoop] = ...) -> None: ... + def exception(self) -> Exception: ... + def set_exception(self, exc: Exception) -> None: ... + def set_transport(self, transport: transports.BaseTransport) -> None: ... + def feed_eof(self) -> None: ... + def at_eof(self) -> bool: ... + def feed_data(self, data: bytes) -> None: ... + @coroutines.coroutine + def readline(self) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def readuntil(self, separator: bytes = ...) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def read(self, n: int = ...) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def readexactly(self, n: int) -> Generator[Any, None, bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi new file mode 100644 index 0000000..46ed302 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi @@ -0,0 +1,67 @@ +from asyncio import events +from asyncio import protocols +from asyncio import streams +from asyncio import transports +from asyncio.coroutines import coroutine +from typing import Any, Generator, List, Optional, Text, Tuple, Union, IO + +__all__: List[str] + +PIPE: int +STDOUT: int +DEVNULL: int + +class SubprocessStreamProtocol(streams.FlowControlMixin, + protocols.SubprocessProtocol): + stdin: Optional[streams.StreamWriter] + stdout: Optional[streams.StreamReader] + stderr: Optional[streams.StreamReader] + def __init__(self, limit: int, loop: events.AbstractEventLoop) -> None: ... + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def pipe_data_received(self, fd: int, data: Union[bytes, Text]) -> None: ... + def pipe_connection_lost(self, fd: int, exc: Optional[Exception]) -> None: ... + def process_exited(self) -> None: ... + + +class Process: + stdin: Optional[streams.StreamWriter] + stdout: Optional[streams.StreamReader] + stderr: Optional[streams.StreamReader] + pid: int + def __init__(self, + transport: transports.BaseTransport, + protocol: protocols.BaseProtocol, + loop: events.AbstractEventLoop) -> None: ... + @property + def returncode(self) -> int: ... + @coroutine + def wait(self) -> Generator[Any, None, int]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + @coroutine + def communicate(self, input: Optional[bytes] = ...) -> Generator[Any, None, Tuple[bytes, bytes]]: ... + + +@coroutine +def create_subprocess_shell( + *Args: Union[str, bytes], # Union used instead of AnyStr due to mypy issue #1236 + stdin: Union[int, IO[Any], None] = ..., + stdout: Union[int, IO[Any], None] = ..., + stderr: Union[int, IO[Any], None] = ..., + loop: events.AbstractEventLoop = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Process]: ... + +@coroutine +def create_subprocess_exec( + program: Union[str, bytes], # Union used instead of AnyStr due to mypy issue #1236 + *args: Any, + stdin: Union[int, IO[Any], None] = ..., + stdout: Union[int, IO[Any], None] = ..., + stderr: Union[int, IO[Any], None] = ..., + loop: events.AbstractEventLoop = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Process]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi new file mode 100644 index 0000000..6fe13f5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi @@ -0,0 +1,77 @@ +import concurrent.futures +import sys +from typing import (Any, TypeVar, Set, Dict, List, TextIO, Union, Tuple, Generic, Callable, + Coroutine, Generator, Iterable, Awaitable, overload, Sequence, Iterator, + Optional) +from types import FrameType +from .events import AbstractEventLoop +from .futures import Future + +__all__: List[str] + +_T = TypeVar('_T') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_FutureT = Union[Future[_T], Generator[Any, None, _T], Awaitable[_T]] + +FIRST_EXCEPTION: str +FIRST_COMPLETED: str +ALL_COMPLETED: str + +def as_completed(fs: Sequence[_FutureT[_T]], *, loop: AbstractEventLoop = ..., + timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... +def ensure_future(coro_or_future: _FutureT[_T], + *, loop: Optional[AbstractEventLoop] = ...) -> Future[_T]: ... +# Prior to Python 3.7 'async' was an alias for 'ensure_future'. +# It became a keyword in 3.7. +@overload +def gather(coro_or_future1: _FutureT[_T1], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + coro_or_future4: _FutureT[_T4], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + coro_or_future4: _FutureT[_T4], coro_or_future5: _FutureT[_T5], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def gather(coro_or_future1: _FutureT[Any], coro_or_future2: _FutureT[Any], coro_or_future3: _FutureT[Any], + coro_or_future4: _FutureT[Any], coro_or_future5: _FutureT[Any], coro_or_future6: _FutureT[Any], + *coros_or_futures: _FutureT[Any], + loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[Any, ...]]: ... +def run_coroutine_threadsafe(coro: _FutureT[_T], + loop: AbstractEventLoop) -> concurrent.futures.Future[_T]: ... +def shield(arg: _FutureT[_T], *, loop: AbstractEventLoop = ...) -> Future[_T]: ... +def sleep(delay: float, result: _T = ..., loop: AbstractEventLoop = ...) -> Future[_T]: ... +def wait(fs: Iterable[_FutureT[_T]], *, loop: AbstractEventLoop = ..., timeout: Optional[float] = ..., + return_when: str = ...) -> Future[Tuple[Set[Future[_T]], Set[Future[_T]]]]: ... +def wait_for(fut: _FutureT[_T], timeout: Optional[float], + *, loop: AbstractEventLoop = ...) -> Future[_T]: ... + +class Task(Future[_T], Generic[_T]): + @classmethod + def current_task(cls, loop: Optional[AbstractEventLoop] = ...) -> Task: ... + @classmethod + def all_tasks(cls, loop: Optional[AbstractEventLoop] = ...) -> Set[Task]: ... + def __init__(self, coro: Union[Generator[Any, None, _T], Awaitable[_T]], *, loop: AbstractEventLoop = ...) -> None: ... + def __repr__(self) -> str: ... + def get_stack(self, *, limit: int = ...) -> List[FrameType]: ... + def print_stack(self, *, limit: int = ..., file: TextIO = ...) -> None: ... + def cancel(self) -> bool: ... + def _step(self, value: Any = ..., exc: Exception = ...) -> None: ... + def _wakeup(self, future: Future[Any]) -> None: ... + +if sys.version_info >= (3, 7): + def all_tasks(loop: Optional[AbstractEventLoop] = ...) -> Set[Task]: ... + def create_task(coro: Union[Generator[Any, None, _T], Awaitable[_T]]) -> Task: ... + def current_task(loop: Optional[AbstractEventLoop] = ...) -> Optional[Task]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi new file mode 100644 index 0000000..9ea6688 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi @@ -0,0 +1,38 @@ +from typing import Dict, Any, TypeVar, Mapping, List, Optional, Tuple + +__all__: List[str] + +class BaseTransport: + def __init__(self, extra: Mapping[Any, Any] = ...) -> None: ... + def get_extra_info(self, name: Any, default: Any = ...) -> Any: ... + def is_closing(self) -> bool: ... + def close(self) -> None: ... + +class ReadTransport(BaseTransport): + def pause_reading(self) -> None: ... + def resume_reading(self) -> None: ... + +class WriteTransport(BaseTransport): + def set_write_buffer_limits( + self, high: int = ..., low: int = ... + ) -> None: ... + def get_write_buffer_size(self) -> int: ... + def write(self, data: Any) -> None: ... + def writelines(self, list_of_data: List[Any]) -> None: ... + def write_eof(self) -> None: ... + def can_write_eof(self) -> bool: ... + def abort(self) -> None: ... + +class Transport(ReadTransport, WriteTransport): ... + +class DatagramTransport(BaseTransport): + def sendto(self, data: Any, addr: Optional[Tuple[str, int]] = ...) -> None: ... + def abort(self) -> None: ... + +class SubprocessTransport(BaseTransport): + def get_pid(self) -> int: ... + def get_returncode(self) -> int: ... + def get_pipe_transport(self, fd: int) -> BaseTransport: ... + def send_signal(self, signal: int) -> int: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/atexit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/atexit.pyi new file mode 100644 index 0000000..24f9389 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/atexit.pyi @@ -0,0 +1,9 @@ +"""Stub file for the 'atexit' module.""" + +from typing import Any, Callable + +def _clear() -> None: ... +def _ncallbacks() -> int: ... +def _run_exitfuncs() -> None: ... +def register(func: Callable[..., Any], *args: Any, **kwargs: Any) -> Callable[..., Any]: ... +def unregister(func: Callable[..., Any]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi new file mode 100644 index 0000000..524ff6f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi @@ -0,0 +1,348 @@ +# These are not exported. +import sys +import typing +from typing import ( + TypeVar, Generic, Dict, overload, List, Tuple, + Any, Type, Optional, Union +) +# These are exported. +from . import abc + +from typing import ( + Callable as Callable, + Container as Container, + Hashable as Hashable, + Iterable as Iterable, + Iterator as Iterator, + Sized as Sized, + Generator as Generator, + ByteString as ByteString, + Reversible as Reversible, + Mapping as Mapping, + MappingView as MappingView, + ItemsView as ItemsView, + KeysView as KeysView, + ValuesView as ValuesView, + MutableMapping as MutableMapping, + Sequence as Sequence, + MutableSequence as MutableSequence, + MutableSet as MutableSet, + AbstractSet as Set, +) +if sys.version_info >= (3, 6): + from typing import ( + Collection as Collection, + AsyncGenerator as AsyncGenerator, + ) +if sys.version_info >= (3, 5): + from typing import ( + Awaitable as Awaitable, + Coroutine as Coroutine, + AsyncIterable as AsyncIterable, + AsyncIterator as AsyncIterator, + ) + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + + +# namedtuple is special-cased in the type checker; the initializer is ignored. +if sys.version_info >= (3, 7): + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], *, + rename: bool = ..., module: Optional[str] = ..., defaults: Optional[Iterable[Any]] = ...) -> Type[tuple]: ... +elif sys.version_info >= (3, 6): + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], *, + verbose: bool = ..., rename: bool = ..., module: Optional[str] = ...) -> Type[tuple]: ... +else: + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], + verbose: bool = ..., rename: bool = ...) -> Type[tuple]: ... + +_UserDictT = TypeVar('_UserDictT', bound=UserDict) + +class UserDict(MutableMapping[_KT, _VT]): + data: Dict[_KT, _VT] + def __init__(self, dict: Optional[Mapping[_KT, _VT]] = ..., **kwargs: _VT) -> None: ... + def __len__(self) -> int: ... + def __getitem__(self, key: _KT) -> _VT: ... + def __setitem__(self, key: _KT, item: _VT) -> None: ... + def __delitem__(self, key: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __contains__(self, key: object) -> bool: ... + def copy(self: _UserDictT) -> _UserDictT: ... + @classmethod + def fromkeys(cls: Type[_UserDictT], iterable: Iterable[_KT], value: Optional[_VT] = ...) -> _UserDictT: ... + +_UserListT = TypeVar('_UserListT', bound=UserList) + +class UserList(MutableSequence[_T]): + data: List[_T] + def __init__(self, initlist: Optional[Iterable[_T]] = ...) -> None: ... + def __lt__(self, other: object) -> bool: ... + def __le__(self, other: object) -> bool: ... + def __gt__(self, other: object) -> bool: ... + def __ge__(self, other: object) -> bool: ... + def __contains__(self, item: object) -> bool: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, i: slice) -> MutableSequence[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, i: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __add__(self: _UserListT, other: Iterable[_T]) -> _UserListT: ... + def __iadd__(self: _UserListT, other: Iterable[_T]) -> _UserListT: ... + def __mul__(self: _UserListT, n: int) -> _UserListT: ... + def __imul__(self: _UserListT, n: int) -> _UserListT: ... + def append(self, item: _T) -> None: ... + def insert(self, i: int, item: _T) -> None: ... + def pop(self, i: int = ...) -> _T: ... + def remove(self, item: _T) -> None: ... + def clear(self) -> None: ... + def copy(self: _UserListT) -> _UserListT: ... + def count(self, item: _T) -> int: ... + def index(self, item: _T, *args: Any) -> int: ... + def reverse(self) -> None: ... + def sort(self, *args: Any, **kwds: Any) -> None: ... + def extend(self, other: Iterable[_T]) -> None: ... + +_UserStringT = TypeVar('_UserStringT', bound=UserString) + +class UserString(Sequence[str]): + data: str + def __init__(self, seq: object) -> None: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + if sys.version_info >= (3, 5): + def __getnewargs__(self) -> Tuple[str]: ... + def __lt__(self, string: Union[str, UserString]) -> bool: ... + def __le__(self, string: Union[str, UserString]) -> bool: ... + def __gt__(self, string: Union[str, UserString]) -> bool: ... + def __ge__(self, string: Union[str, UserString]) -> bool: ... + def __contains__(self, char: object) -> bool: ... + def __len__(self) -> int: ... + # It should return a str to implement Sequence correctly, but it doesn't. + def __getitem__(self: _UserStringT, i: Union[int, slice]) -> _UserStringT: ... # type: ignore + def __add__(self: _UserStringT, other: object) -> _UserStringT: ... + def __mul__(self: _UserStringT, n: int) -> _UserStringT: ... + def __mod__(self: _UserStringT, args: Any) -> _UserStringT: ... + def capitalize(self: _UserStringT) -> _UserStringT: ... + if sys.version_info >= (3, 5): + def casefold(self: _UserStringT) -> _UserStringT: ... + def center(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def count(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def encode(self: _UserStringT, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UserStringT: ... + def endswith(self, suffix: Union[str, Tuple[str, ...]], start: int = ..., end: int = ...) -> bool: ... + def expandtabs(self: _UserStringT, tabsize: int = ...) -> _UserStringT: ... + def find(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwds: Any) -> str: ... + if sys.version_info >= (3, 5): + def format_map(self, mapping: Mapping[str, Any]) -> str: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def isalpha(self) -> bool: ... + def isalnum(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + if sys.version_info >= (3, 5): + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, seq: Iterable[str]) -> str: ... + def ljust(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def lower(self: _UserStringT) -> _UserStringT: ... + def lstrip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + if sys.version_info >= (3, 5): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self: _UserStringT, old: Union[str, UserString], new: Union[str, UserString], maxsplit: int = ...) -> _UserStringT: ... + def rfind(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def rjust(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rstrip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + def startswith(self, prefix: Union[str, Tuple[str, ...]], start: int = ..., end: int = ...) -> bool: ... + def strip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + def swapcase(self: _UserStringT) -> _UserStringT: ... + def title(self: _UserStringT) -> _UserStringT: ... + def translate(self: _UserStringT, *args: Any) -> _UserStringT: ... + def upper(self: _UserStringT) -> _UserStringT: ... + def zfill(self: _UserStringT, width: int) -> _UserStringT: ... + + +# Technically, deque only derives from MutableSequence in 3.5 (before then, the insert and index +# methods did not exist). +# But in practice it's not worth losing sleep over. +class deque(MutableSequence[_T], Generic[_T]): + @property + def maxlen(self) -> Optional[int]: ... + def __init__(self, iterable: Iterable[_T] = ..., + maxlen: Optional[int] = ...) -> None: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + if sys.version_info >= (3, 5): + def copy(self) -> deque[_T]: ... + def count(self, x: _T) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def extendleft(self, iterable: Iterable[_T]) -> None: ... + def insert(self, i: int, x: _T) -> None: ... + def index(self, x: _T, start: int = ..., stop: int = ...) -> int: ... + def pop(self, i: int = ...) -> _T: ... + def popleft(self) -> _T: ... + def remove(self, value: _T) -> None: ... + def reverse(self) -> None: ... + def rotate(self, n: int) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + + # These methods of deque don't really take slices, but we need to + # define them as taking a slice to satisfy MutableSequence. + @overload + def __getitem__(self, index: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> MutableSequence[_T]: + raise TypeError + @overload + def __setitem__(self, i: int, x: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: + raise TypeError + @overload + def __delitem__(self, i: int) -> None: ... + @overload + def __delitem__(self, s: slice) -> None: + raise TypeError + + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + + def __iadd__(self: _S, iterable: Iterable[_T]) -> _S: ... + + if sys.version_info >= (3, 5): + def __add__(self, other: deque[_T]) -> deque[_T]: ... + def __mul__(self, other: int) -> deque[_T]: ... + def __imul__(self, other: int) -> None: ... + +_CounterT = TypeVar('_CounterT', bound=Counter) + +class Counter(Dict[_T, int], Generic[_T]): + @overload + def __init__(self, **kwargs: int) -> None: ... + @overload + def __init__(self, mapping: Mapping[_T, int]) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + def copy(self: _CounterT) -> _CounterT: ... + def elements(self) -> Iterator[_T]: ... + + def most_common(self, n: Optional[int] = ...) -> List[Tuple[_T, int]]: ... + + @overload + def subtract(self, __mapping: Mapping[_T, int]) -> None: ... + @overload + def subtract(self, iterable: Iterable[_T]) -> None: ... + + # The Iterable[Tuple[...]] argument type is not actually desirable + # (the tuples will be added as keys, breaking type safety) but + # it's included so that the signature is compatible with + # Dict.update. Not sure if we should use '# type: ignore' instead + # and omit the type from the union. + @overload + def update(self, __m: Mapping[_T, int], **kwargs: int) -> None: ... + @overload + def update(self, __m: Union[Iterable[_T], Iterable[Tuple[_T, int]]], **kwargs: int) -> None: ... + @overload + def update(self, **kwargs: int) -> None: ... + + def __add__(self, other: Counter[_T]) -> Counter[_T]: ... + def __sub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __and__(self, other: Counter[_T]) -> Counter[_T]: ... + def __or__(self, other: Counter[_T]) -> Counter[_T]: ... + def __pos__(self) -> Counter[_T]: ... + def __neg__(self) -> Counter[_T]: ... + def __iadd__(self, other: Counter[_T]) -> Counter[_T]: ... + def __isub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iand__(self, other: Counter[_T]) -> Counter[_T]: ... + def __ior__(self, other: Counter[_T]) -> Counter[_T]: ... + +_OrderedDictT = TypeVar('_OrderedDictT', bound=OrderedDict) + +class _OrderedDictKeysView(KeysView[_KT], Reversible[_KT]): + def __reversed__(self) -> Iterator[_KT]: ... +class _OrderedDictItemsView(ItemsView[_KT, _VT], Reversible[Tuple[_KT, _VT]]): + def __reversed__(self) -> Iterator[Tuple[_KT, _VT]]: ... +class _OrderedDictValuesView(ValuesView[_VT], Reversible[_VT]): + def __reversed__(self) -> Iterator[_VT]: ... + +class OrderedDict(Dict[_KT, _VT], Reversible[_KT], Generic[_KT, _VT]): + def popitem(self, last: bool = ...) -> Tuple[_KT, _VT]: ... + def move_to_end(self, key: _KT, last: bool = ...) -> None: ... + def copy(self: _OrderedDictT) -> _OrderedDictT: ... + def __reversed__(self) -> Iterator[_KT]: ... + def keys(self) -> _OrderedDictKeysView[_KT]: ... + def items(self) -> _OrderedDictItemsView[_KT, _VT]: ... + def values(self) -> _OrderedDictValuesView[_VT]: ... + +_DefaultDictT = TypeVar('_DefaultDictT', bound=defaultdict) + +class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): + default_factory: Optional[Callable[[], _VT]] + + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + def __missing__(self, key: _KT) -> _VT: ... + # TODO __reversed__ + def copy(self: _DefaultDictT) -> _DefaultDictT: ... + +class ChainMap(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + def __init__(self, *maps: Mapping[_KT, _VT]) -> None: ... + + @property + def maps(self) -> List[Mapping[_KT, _VT]]: ... + + def new_child(self, m: Mapping[_KT, _VT] = ...) -> typing.ChainMap[_KT, _VT]: ... + + @property + def parents(self) -> typing.ChainMap[_KT, _VT]: ... + + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __iter__(self) -> Iterator[_KT]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi new file mode 100644 index 0000000..a957728 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi @@ -0,0 +1,40 @@ +# Stubs for collections.abc (introduced from Python 3.3) +# +# https://docs.python.org/3.3/whatsnew/3.3.html#collections +import sys + +from . import ( + Container as Container, + Hashable as Hashable, + Iterable as Iterable, + Iterator as Iterator, + Sized as Sized, + Callable as Callable, + Mapping as Mapping, + MutableMapping as MutableMapping, + Sequence as Sequence, + MutableSequence as MutableSequence, + Set as Set, + MutableSet as MutableSet, + MappingView as MappingView, + ItemsView as ItemsView, + KeysView as KeysView, + ValuesView as ValuesView, +) + +if sys.version_info >= (3, 5): + from . import ( + Generator as Generator, + ByteString as ByteString, + Awaitable as Awaitable, + Coroutine as Coroutine, + AsyncIterable as AsyncIterable, + AsyncIterator as AsyncIterator, + ) + +if sys.version_info >= (3, 6): + from . import ( + Collection as Collection, + Reversible as Reversible, + AsyncGenerator as AsyncGenerator, + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/compileall.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/compileall.pyi new file mode 100644 index 0000000..8d2731c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/compileall.pyi @@ -0,0 +1,20 @@ +# Stubs for compileall (Python 3) + +import os +import sys +from typing import Optional, Union, Pattern + +if sys.version_info < (3, 6): + _Path = Union[str, bytes] + _SuccessType = bool +else: + _Path = Union[str, bytes, os.PathLike] + _SuccessType = int + +# rx can be any object with a 'search' method; once we have Protocols we can change the type +if sys.version_info < (3, 5): + def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... +else: + def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ..., workers: int = ...) -> _SuccessType: ... +def compile_file(fullname: _Path, ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... +def compile_path(skip_curdir: bool = ..., maxlevels: int = ..., force: bool = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi new file mode 100644 index 0000000..4439dca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi @@ -0,0 +1,3 @@ +from ._base import * # noqa: F403 +from .thread import * # noqa: F403 +from .process import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi new file mode 100644 index 0000000..95189a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi @@ -0,0 +1,56 @@ +from typing import TypeVar, Generic, Any, Iterable, Iterator, Callable, Tuple, Optional, Set, NamedTuple +from types import TracebackType +import sys + +FIRST_COMPLETED: str +FIRST_EXCEPTION: str +ALL_COMPLETED: str +PENDING: Any +RUNNING: Any +CANCELLED: Any +CANCELLED_AND_NOTIFIED: Any +FINISHED: Any +LOGGER: Any + +class Error(Exception): ... +class CancelledError(Error): ... +class TimeoutError(Error): ... + +_T = TypeVar('_T') + +class Future(Generic[_T]): + def __init__(self) -> None: ... + def cancel(self) -> bool: ... + def cancelled(self) -> bool: ... + def running(self) -> bool: ... + def done(self) -> bool: ... + def add_done_callback(self, fn: Callable[[Future[_T]], Any]) -> None: ... + def result(self, timeout: Optional[float] = ...) -> _T: ... + def set_running_or_notify_cancel(self) -> bool: ... + def set_result(self, result: _T) -> None: ... + + if sys.version_info >= (3,): + def exception(self, timeout: Optional[float] = ...) -> Optional[BaseException]: ... + def set_exception(self, exception: Optional[BaseException]) -> None: ... + else: + def exception(self, timeout: Optional[float] = ...) -> Any: ... + def exception_info(self, timeout: Optional[float] = ...) -> Tuple[Any, Optional[TracebackType]]: ... + def set_exception(self, exception: Any) -> None: ... + def set_exception_info(self, exception: Any, traceback: Optional[TracebackType]) -> None: ... + + +class Executor: + def submit(self, fn: Callable[..., _T], *args: Any, **kwargs: Any) -> Future[_T]: ... + if sys.version_info >= (3, 5): + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ..., + chunksize: int = ...) -> Iterator[_T]: ... + else: + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ...,) -> Iterator[_T]: ... + def shutdown(self, wait: bool = ...) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool: ... + +def as_completed(fs: Iterable[Future[_T]], timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... + +def wait(fs: Iterable[Future[_T]], timeout: Optional[float] = ..., return_when: str = ...) -> Tuple[Set[Future[_T]], + Set[Future[_T]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi new file mode 100644 index 0000000..ba0cd61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Future, Executor +import sys + +EXTRA_QUEUED_CALLS: Any + +if sys.version_info >= (3,): + class BrokenProcessPool(RuntimeError): ... + +if sys.version_info >= (3, 7): + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... +else: + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi new file mode 100644 index 0000000..983594d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi @@ -0,0 +1,15 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Executor, Future +import sys + +class ThreadPoolExecutor(Executor): + if sys.version_info >= (3, 7): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... + elif sys.version_info >= (3, 6) or sys.version_info < (3,): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ...) -> None: ... + else: + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/configparser.pyi new file mode 100644 index 0000000..17501c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/configparser.pyi @@ -0,0 +1,234 @@ +# Based on http://docs.python.org/3.5/library/configparser.html and on +# reading configparser.py. + +import sys +from typing import (AbstractSet, MutableMapping, Mapping, Dict, Sequence, List, + Union, Iterable, Iterator, Callable, Any, IO, overload, + Optional, Pattern, Type, TypeVar) +# Types only used in type comments only +from typing import Optional, Tuple # noqa + +if sys.version_info >= (3, 6): + from os import PathLike + +# Internal type aliases +_section = Mapping[str, str] +_parser = MutableMapping[str, _section] +_converter = Callable[[str], Any] +_converters = Dict[str, _converter] +_T = TypeVar('_T') + +if sys.version_info >= (3, 7): + _Path = Union[str, bytes, PathLike[str]] +elif sys.version_info >= (3, 6): + _Path = Union[str, PathLike[str]] +else: + _Path = str + +DEFAULTSECT: str +MAX_INTERPOLATION_DEPTH: int + +class Interpolation: + def before_get(self, parser: _parser, + section: str, + option: str, + value: str, + defaults: _section) -> str: ... + + def before_set(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + def before_read(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + def before_write(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + +class BasicInterpolation(Interpolation): ... +class ExtendedInterpolation(Interpolation): ... +class LegacyInterpolation(Interpolation): ... + + +class RawConfigParser(_parser): + def __init__(self, + defaults: Optional[_section] = ..., + dict_type: Type[Mapping[str, str]] = ..., + allow_no_value: bool = ..., + *, + delimiters: Sequence[str] = ..., + comment_prefixes: Sequence[str] = ..., + inline_comment_prefixes: Optional[Sequence[str]] = ..., + strict: bool = ..., + empty_lines_in_values: bool = ..., + default_section: str = ..., + interpolation: Optional[Interpolation] = ...) -> None: ... + + def __len__(self) -> int: ... + + def __getitem__(self, section: str) -> SectionProxy: ... + + def __setitem__(self, section: str, options: _section) -> None: ... + + def __delitem__(self, section: str) -> None: ... + + def __iter__(self) -> Iterator[str]: ... + + def defaults(self) -> _section: ... + + def sections(self) -> List[str]: ... + + def add_section(self, section: str) -> None: ... + + def has_section(self, section: str) -> bool: ... + + def options(self, section: str) -> List[str]: ... + + def has_option(self, section: str, option: str) -> bool: ... + + def read(self, filenames: Union[_Path, Iterable[_Path]], + encoding: Optional[str] = ...) -> List[str]: ... + def read_file(self, f: Iterable[str], source: Optional[str] = ...) -> None: ... + def read_string(self, string: str, source: str = ...) -> None: ... + def read_dict(self, dictionary: Mapping[str, Mapping[str, Any]], + source: str = ...) -> None: ... + def readfp(self, fp: Iterable[str], filename: Optional[str] = ...) -> None: ... + + # These get* methods are partially applied (with the same names) in + # SectionProxy; the stubs should be kept updated together + def getint(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: int = ...) -> int: ... + + def getfloat(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: float = ...) -> float: ... + + def getboolean(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: bool = ...) -> bool: ... + + def _get_conv(self, section: str, option: str, conv: Callable[[str], _T], *, raw: bool = ..., vars: Optional[_section] = ..., fallback: _T = ...) -> _T: ... + + # This is incompatible with MutableMapping so we ignore the type + @overload # type: ignore + def get(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ...) -> str: ... + + @overload # type: ignore + def get(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: _T) -> Union[str, _T]: ... + + @overload + def items(self, *, raw: bool = ..., vars: Optional[_section] = ...) -> AbstractSet[Tuple[str, SectionProxy]]: ... + + @overload + def items(self, section: str, raw: bool = ..., vars: Optional[_section] = ...) -> List[Tuple[str, str]]: ... + + def set(self, section: str, option: str, value: str) -> None: ... + + def write(self, + fileobject: IO[str], + space_around_delimiters: bool = ...) -> None: ... + + def remove_option(self, section: str, option: str) -> bool: ... + + def remove_section(self, section: str) -> bool: ... + + def optionxform(self, option: str) -> str: ... + + +class ConfigParser(RawConfigParser): + def __init__(self, + defaults: Optional[_section] = ..., + dict_type: Type[Mapping[str, str]] = ..., + allow_no_value: bool = ..., + delimiters: Sequence[str] = ..., + comment_prefixes: Sequence[str] = ..., + inline_comment_prefixes: Optional[Sequence[str]] = ..., + strict: bool = ..., + empty_lines_in_values: bool = ..., + default_section: str = ..., + interpolation: Optional[Interpolation] = ..., + converters: _converters = ...) -> None: ... + +class SafeConfigParser(ConfigParser): ... + +class SectionProxy(MutableMapping[str, str]): + def __init__(self, parser: RawConfigParser, name: str) -> None: ... + def __getitem__(self, key: str) -> str: ... + def __setitem__(self, key: str, value: str) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __contains__(self, key: object) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + @property + def parser(self) -> RawConfigParser: ... + @property + def name(self) -> str: ... + def get(self, option: str, fallback: Optional[str] = ..., *, raw: bool = ..., vars: Optional[_section] = ..., **kwargs: Any) -> str: ... # type: ignore + + # These are partially-applied version of the methods with the same names in + # RawConfigParser; the stubs should be kept updated together + def getint(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: int = ...) -> int: ... + def getfloat(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: float = ...) -> float: ... + def getboolean(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: bool = ...) -> bool: ... + + # SectionProxy can have arbitrary attributes when custon converters are used + def __getattr__(self, key: str) -> Callable[..., Any]: ... + +class ConverterMapping(MutableMapping[str, Optional[_converter]]): + GETTERCRE: Pattern + def __init__(self, parser: RawConfigParser) -> None: ... + def __getitem__(self, key: str) -> _converter: ... + def __setitem__(self, key: str, value: Optional[_converter]) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + + +class Error(Exception): ... + + +class NoSectionError(Error): ... + + +class DuplicateSectionError(Error): + section: str + source: Optional[str] + lineno: Optional[int] + + +class DuplicateOptionError(Error): + section: str + option: str + source: Optional[str] + lineno: Optional[int] + + +class NoOptionError(Error): + section: str + option: str + + +class InterpolationError(Error): + section: str + option: str + + +class InterpolationDepthError(InterpolationError): ... + + +class InterpolationMissingOptionError(InterpolationError): + reference: str + + +class InterpolationSyntaxError(InterpolationError): ... + + +class ParsingError(Error): + source: str + errors: Sequence[Tuple[int, str]] + + +class MissingSectionHeaderError(ParsingError): + lineno: int + line: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi new file mode 100644 index 0000000..a8d6df4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi @@ -0,0 +1,12 @@ +import _curses +from _curses import * # noqa: F403 +from typing import TypeVar, Callable, Any, Sequence, Mapping + +_T = TypeVar('_T') + +LINES: int +COLS: int + +def initscr() -> _curses._CursesWindow: ... +def start_color() -> None: ... +def wrapper(func: Callable[..., _T], *arg: Any, **kwds: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi new file mode 100644 index 0000000..4033769 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi @@ -0,0 +1,62 @@ +from typing import List, Union, overload, TypeVar + +_Ch = TypeVar('_Ch', str, int) + +NUL: int +SOH: int +STX: int +ETX: int +EOT: int +ENQ: int +ACK: int +BEL: int +BS: int +TAB: int +HT: int +LF: int +NL: int +VT: int +FF: int +CR: int +SO: int +SI: int +DLE: int +DC1: int +DC2: int +DC3: int +DC4: int +NAK: int +SYN: int +ETB: int +CAN: int +EM: int +SUB: int +ESC: int +FS: int +GS: int +RS: int +US: int +SP: int +DEL: int + +controlnames: List[int] + +def isalnum(c: Union[str, int]) -> bool: ... +def isalpha(c: Union[str, int]) -> bool: ... +def isascii(c: Union[str, int]) -> bool: ... +def isblank(c: Union[str, int]) -> bool: ... +def iscntrl(c: Union[str, int]) -> bool: ... +def isdigit(c: Union[str, int]) -> bool: ... +def isgraph(c: Union[str, int]) -> bool: ... +def islower(c: Union[str, int]) -> bool: ... +def isprint(c: Union[str, int]) -> bool: ... +def ispunct(c: Union[str, int]) -> bool: ... +def isspace(c: Union[str, int]) -> bool: ... +def isupper(c: Union[str, int]) -> bool: ... +def isxdigit(c: Union[str, int]) -> bool: ... +def isctrl(c: Union[str, int]) -> bool: ... +def ismeta(c: Union[str, int]) -> bool: ... +def ascii(c: _Ch) -> _Ch: ... +def ctrl(c: _Ch) -> _Ch: ... +def alt(c: _Ch) -> _Ch: ... +def unctrl(c: Union[str, int]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi new file mode 100644 index 0000000..90f70c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi @@ -0,0 +1,20 @@ +from _curses import _CursesWindow + +class _Curses_Panel: # type is (note the space in the class name) + def above(self) -> _Curses_Panel: ... + def below(self) -> _Curses_Panel: ... + def bottom(self) -> None: ... + def hidden(self) -> bool: ... + def hide(self) -> None: ... + def move(self, y: int, x: int) -> None: ... + def replace(self, win: _CursesWindow) -> None: ... + def set_userptr(self, obj: object) -> None: ... + def show(self) -> None: ... + def top(self) -> None: ... + def userptr(self) -> object: ... + def window(self) -> _CursesWindow: ... + +def bottom_panel() -> _Curses_Panel: ... +def new_panel(win: _CursesWindow) -> _Curses_Panel: ... +def top_panel() -> _Curses_Panel: ... +def update_panels() -> _Curses_Panel: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi new file mode 100644 index 0000000..a218564 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi @@ -0,0 +1,11 @@ +from _curses import _CursesWindow +from typing import Callable, Union + +def rectangle(win: _CursesWindow, uly: int, ulx: int, lry: int, lrx: int) -> None: ... + +class Textbox: + stripspaces: bool + def __init__(self, w: _CursesWindow, insert_mode: bool = ...) -> None: ... + def edit(self, validate: Callable[[int], int]) -> str: ... + def do_command(self, ch: Union[str, int]) -> None: ... + def gather(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi new file mode 100644 index 0000000..ec7c25b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi @@ -0,0 +1,26 @@ +# Stubs for email (Python 3.4) + +from typing import Callable, Optional, IO +import sys +from email.message import Message +from email.policy import Policy + +def message_from_string(s: str, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_bytes(s: bytes, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_file(fp: IO[str], _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_binary_file(fp: IO[bytes], _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... + +# Names in __all__ with no definition: +# base64mime +# charset +# encoders +# errors +# feedparser +# generator +# header +# iterators +# message +# mime +# parser +# quoprimime +# utils diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/charset.pyi new file mode 100644 index 0000000..3a6c19d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/charset.pyi @@ -0,0 +1,31 @@ +# Stubs for email.charset (Python 3.4) + +from typing import List, Optional, Iterator, Any + +QP: int # undocumented +BASE64: int # undocumented +SHORTEST: int # undocumented + +class Charset: + input_charset: str + header_encoding: int + body_encoding: int + output_charset: Optional[str] + input_codec: Optional[str] + output_codec: Optional[str] + def __init__(self, input_charset: str = ...) -> None: ... + def get_body_encoding(self) -> str: ... + def get_output_charset(self) -> Optional[str]: ... + def header_encode(self, string: str) -> str: ... + def header_encode_lines(self, string: str, + maxlengths: Iterator[int]) -> List[str]: ... + def body_encode(self, string: str) -> str: ... + def __str__(self) -> str: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +def add_charset(charset: str, header_enc: Optional[int] = ..., + body_enc: Optional[int] = ..., + output_charset: Optional[str] = ...) -> None: ... +def add_alias(alias: str, canonical: str) -> None: ... +def add_codec(charset: str, codecname: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi new file mode 100644 index 0000000..ed55ef6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi @@ -0,0 +1,15 @@ +# Stubs for email.contentmanager (Python 3.4) + +from typing import Any, Callable +from email.message import Message + +class ContentManager: + def __init__(self) -> None: ... + def get_content(self, msg: Message, *args: Any, **kw: Any) -> Any: ... + def set_content(self, msg: Message, obj: Any, *args: Any, + **kw: Any) -> Any: ... + def add_get_handler(self, key: str, handler: Callable[..., Any]) -> None: ... + def add_set_handler(self, typekey: type, + handler: Callable[..., Any]) -> None: ... + +raw_data_manager: ContentManager diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi new file mode 100644 index 0000000..bb5c84c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi @@ -0,0 +1,8 @@ +# Stubs for email.encoders (Python 3.4) + +from email.message import Message + +def encode_base64(msg: Message) -> None: ... +def encode_quopri(msg: Message) -> None: ... +def encode_7or8bit(msg: Message) -> None: ... +def encode_noop(msg: Message) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/errors.pyi new file mode 100644 index 0000000..77d9902 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/errors.pyi @@ -0,0 +1,19 @@ +# Stubs for email.errors (Python 3.4) + +class MessageError(Exception): ... +class MessageParseError(MessageError): ... +class HeaderParseError(MessageParseError): ... +class BoundaryError(MessageParseError): ... +class MultipartConversionError(MessageError, TypeError): ... + +class MessageDefect(ValueError): ... +class NoBoundaryInMultipartDefect(MessageDefect): ... +class StartBoundaryNotFoundDefect(MessageDefect): ... +class FirstHeaderLineIsContinuationDefect(MessageDefect): ... +class MisplacedEnvelopeHeaderDefect(MessageDefect): ... +class MalformedHeaderDefect(MessageDefect): ... +class MultipartInvariantViolationDefect(MessageDefect): ... +class InvalidBase64PaddingDefect(MessageDefect): ... +class InvalidBase64CharactersDefect(MessageDefect): ... +class CloseBoundaryNotFoundDefect(MessageDefect): ... +class MissingHeaderBodySeparatorDefect(MessageDefect): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi new file mode 100644 index 0000000..48d940b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi @@ -0,0 +1,18 @@ +# Stubs for email.feedparser (Python 3.4) + +from typing import Callable +import sys +from email.message import Message +from email.policy import Policy + +class FeedParser: + def __init__(self, _factory: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def feed(self, data: str) -> None: ... + def close(self) -> Message: ... + +class BytesFeedParser: + def __init__(self, _factory: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def feed(self, data: str) -> None: ... + def close(self) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/generator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/generator.pyi new file mode 100644 index 0000000..81e733b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/generator.pyi @@ -0,0 +1,27 @@ +# Stubs for email.generator (Python 3.4) + +from typing import TextIO, Optional +from email.message import Message +from email.policy import Policy + +class Generator: + def clone(self, fp: TextIO) -> Generator: ... + def write(self, s: str) -> None: ... + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, + policy: Policy = ...) -> None: ... + def flatten(self, msg: Message, unixfrom: bool = ..., + linesep: Optional[str] = ...) -> None: ... + +class BytesGenerator: + def clone(self, fp: TextIO) -> Generator: ... + def write(self, s: str) -> None: ... + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, + policy: Policy = ...) -> None: ... + def flatten(self, msg: Message, unixfrom: bool = ..., + linesep: Optional[str] = ...) -> None: ... + +class DecodedGenerator(Generator): + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, fmt: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/header.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/header.pyi new file mode 100644 index 0000000..21b9995 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/header.pyi @@ -0,0 +1,25 @@ +# Stubs for email.header (Python 3.4) + +from typing import Union, Optional, Any, List, Tuple +from email.charset import Charset + +class Header: + def __init__(self, s: Union[bytes, str, None] = ..., + charset: Union[Charset, str, None] = ..., + maxlinelen: Optional[int] = ..., + header_name: Optional[str] = ..., continuation_ws: str = ..., + errors: str = ...) -> None: ... + def append(self, s: Union[bytes, str], + charset: Union[Charset, str, None] = ..., + errors: str = ...) -> None: ... + def encode(self, splitchars: str = ..., maxlinelen: Optional[int] = ..., + linesep: str = ...) -> str: ... + def __str__(self) -> str: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +def decode_header(header: Union[Header, str]) -> List[Tuple[bytes, Optional[str]]]: ... +def make_header(decoded_seq: List[Tuple[bytes, Optional[str]]], + maxlinelen: Optional[int] = ..., + header_name: Optional[str] = ..., + continuation_ws: str = ...) -> Header: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi new file mode 100644 index 0000000..6af1abf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi @@ -0,0 +1,97 @@ +# Stubs for email.headerregistry (Python 3.4) + +from datetime import datetime as _datetime +from typing import Dict, Tuple, Optional, Any, Union, Mapping +from email.errors import MessageDefect +from email.policy import Policy + +class BaseHeader(str): + @property + def name(self) -> str: ... + @property + def defects(self) -> Tuple[MessageDefect, ...]: ... + @property + def max_count(self) -> Optional[int]: ... + def __new__(cls, name: str, value: Any) -> BaseHeader: ... + def init(self, *args: Any, **kw: Any) -> None: ... + def fold(self, *, policy: Policy) -> str: ... + +class UnstructuredHeader: + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class UniqueUnstructuredHeader(UnstructuredHeader): ... + +class DateHeader: + datetime: _datetime + @classmethod + def parse(cls, string: Union[str, _datetime], + kwds: Dict[str, Any]) -> None: ... + +class UniqueDateHeader(DateHeader): ... + +class AddressHeader: + groups: Tuple[Group, ...] + addresses: Tuple[Address, ...] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class UniqueAddressHeader(AddressHeader): ... + +class SingleAddressHeader(AddressHeader): + @property + def address(self) -> Address: ... + +class UniqueSingleAddressHeader(SingleAddressHeader): ... + +class MIMEVersionHeader: + version: Optional[str] + major: Optional[int] + minor: Optional[int] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class ParameterizedMIMEHeader: + params: Mapping[str, Any] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class ContentTypeHeader(ParameterizedMIMEHeader): + content_type: str + maintype: str + subtype: str + +class ContentDispositionHeader(ParameterizedMIMEHeader): + content_disposition: str + +class ContentTransferEncodingHeader: + cte: str + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class HeaderRegistry: + def __init__(self, base_class: BaseHeader = ..., + default_class: BaseHeader = ..., + use_default_map: bool = ...) -> None: ... + def map_to_type(self, name: str, cls: BaseHeader) -> None: ... + def __getitem__(self, name: str) -> BaseHeader: ... + def __call__(self, name: str, value: Any) -> BaseHeader: ... + +class Address: + display_name: str + username: str + domain: str + @property + def addr_spec(self) -> str: ... + def __init__(self, display_name: str = ..., + username: Optional[str] = ..., + domain: Optional[str] = ..., + addr_spec: Optional[str] = ...) -> None: ... + def __str__(self) -> str: ... + +class Group: + display_name: Optional[str] + addresses: Tuple[Address, ...] + def __init__(self, display_name: Optional[str] = ..., + addresses: Optional[Tuple[Address, ...]] = ...) -> None: ... + def __str__(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi new file mode 100644 index 0000000..6a69f39 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi @@ -0,0 +1,8 @@ +# Stubs for email.iterators (Python 3.4) + +from typing import Iterator, Optional +from email.message import Message + +def body_line_iterator(msg: Message, decode: bool = ...) -> Iterator[str]: ... +def typed_subpart_iterator(msg: Message, maintype: str = ..., + subtype: Optional[str] = ...) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/message.pyi new file mode 100644 index 0000000..09fbdda --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/message.pyi @@ -0,0 +1,105 @@ +# Stubs for email.message (Python 3.4) + +from typing import ( + List, Optional, Union, Tuple, TypeVar, Generator, Sequence, Iterator, Any +) +import sys +from email.charset import Charset +from email.errors import MessageDefect +from email.header import Header +from email.policy import Policy +from email.contentmanager import ContentManager + +_T = TypeVar('_T') + +_PayloadType = Union[List[Message], str, bytes] +_CharsetType = Union[Charset, str, None] +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] +_ParamType = Union[str, Tuple[Optional[str], Optional[str], str]] +_HeaderType = Union[str, Header] + +class Message: + preamble: Optional[str] + epilogue: Optional[str] + defects: List[MessageDefect] + def __str__(self) -> str: ... + def is_multipart(self) -> bool: ... + def set_unixfrom(self, unixfrom: str) -> None: ... + def get_unixfrom(self) -> Optional[str]: ... + def attach(self, payload: Message) -> None: ... + def get_payload(self, i: int = ..., decode: bool = ...) -> Optional[_PayloadType]: ... + def set_payload(self, payload: _PayloadType, + charset: _CharsetType = ...) -> None: ... + def set_charset(self, charset: _CharsetType) -> None: ... + def get_charset(self) -> _CharsetType: ... + def __len__(self) -> int: ... + def __contains__(self, name: str) -> bool: ... + def __getitem__(self, name: str) -> Optional[_HeaderType]: ... + def __setitem__(self, name: str, val: _HeaderType) -> None: ... + def __delitem__(self, name: str) -> None: ... + def keys(self) -> List[str]: ... + def values(self) -> List[_HeaderType]: ... + def items(self) -> List[Tuple[str, _HeaderType]]: ... + def get(self, name: str, failobj: _T = ...) -> Union[_HeaderType, _T]: ... + def get_all(self, name: str, failobj: _T = ...) -> Union[List[_HeaderType], _T]: ... + def add_header(self, _name: str, _value: str, **_params: _ParamsType) -> None: ... + def replace_header(self, _name: str, _value: _HeaderType) -> None: ... + def get_content_type(self) -> str: ... + def get_content_maintype(self) -> str: ... + def get_content_subtype(self) -> str: ... + def get_default_type(self) -> str: ... + def set_default_type(self, ctype: str) -> None: ... + def get_params(self, failobj: _T = ..., header: str = ..., + unquote: bool = ...) -> Union[List[Tuple[str, str]], _T]: ... + def get_param(self, param: str, failobj: _T = ..., header: str = ..., + unquote: bool = ...) -> Union[_T, _ParamType]: ... + def del_param(self, param: str, header: str = ..., + requote: bool = ...) -> None: ... + def set_type(self, type: str, header: str = ..., + requote: bool = ...) -> None: ... + def get_filename(self, failobj: _T = ...) -> Union[_T, str]: ... + def get_boundary(self, failobj: _T = ...) -> Union[_T, str]: ... + def set_boundary(self, boundary: str) -> None: ... + def get_content_charset(self, failobj: _T = ...) -> Union[_T, str]: ... + def get_charsets(self, failobj: _T = ...) -> Union[_T, List[str]]: ... + def walk(self) -> Generator[Message, None, None]: ... + if sys.version_info >= (3, 5): + def get_content_disposition(self) -> Optional[str]: ... + def as_string(self, unixfrom: bool = ..., maxheaderlen: int = ..., + policy: Optional[Policy] = ...) -> str: ... + def as_bytes(self, unixfrom: bool = ..., + policy: Optional[Policy] = ...) -> bytes: ... + def __bytes__(self) -> bytes: ... + def set_param(self, param: str, value: str, header: str = ..., + requote: bool = ..., charset: str = ..., + language: str = ..., replace: bool = ...) -> None: ... + def __init__(self, policy: Policy = ...) -> None: ... + +class MIMEPart(Message): + def get_body(self, + preferencelist: Sequence[str] = ...) -> Optional[Message]: ... + def iter_attachments(self) -> Iterator[Message]: ... + def iter_parts(self) -> Iterator[Message]: ... + def get_content(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> Any: ... + def set_content(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def make_related(self, boundary: Optional[str] = ...) -> None: ... + def make_alternative(self, boundary: Optional[str] = ...) -> None: ... + def make_mixed(self, boundary: Optional[str] = ...) -> None: ... + def add_related(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def add_alternative(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def add_attachment(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def clear(self) -> None: ... + def clear_content(self) -> None: ... + def is_attachment(self) -> bool: ... + +class EmailMessage(MIMEPart): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi new file mode 100644 index 0000000..1a40e28 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.application (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEApplication(MIMENonMultipart): + def __init__(self, _data: Union[str, bytes], _subtype: str = ..., + _encoder: Callable[[MIMEApplication], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi new file mode 100644 index 0000000..5bb57d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.audio (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEAudio(MIMENonMultipart): + def __init__(self, _audiodata: Union[str, bytes], _subtype: Optional[str] = ..., + _encoder: Callable[[MIMEAudio], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi new file mode 100644 index 0000000..448d34b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi @@ -0,0 +1,10 @@ +# Stubs for email.mime.base (Python 3.4) + +from typing import Optional, Tuple, Union +import email.message + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEBase(email.message.Message): + def __init__(self, _maintype: str, _subtype: str, + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi new file mode 100644 index 0000000..d32d9ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.image (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEImage(MIMENonMultipart): + def __init__(self, _imagedata: Union[str, bytes], _subtype: Optional[str] = ..., + _encoder: Callable[[MIMEImage], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi new file mode 100644 index 0000000..561e8c3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi @@ -0,0 +1,7 @@ +# Stubs for email.mime.message (Python 3.4) + +from email.message import Message +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEMessage(MIMENonMultipart): + def __init__(self, _msg: Message, _subtype: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi new file mode 100644 index 0000000..ea5eba1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi @@ -0,0 +1,12 @@ +# Stubs for email.mime.multipart (Python 3.4) + +from typing import Optional, Sequence, Tuple, Union +from email.message import Message +from email.mime.base import MIMEBase + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEMultipart(MIMEBase): + def __init__(self, _subtype: str = ..., boundary: Optional[str] = ..., + _subparts: Optional[Sequence[Message]] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi new file mode 100644 index 0000000..1fd3ea9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi @@ -0,0 +1,5 @@ +# Stubs for email.mime.nonmultipart (Python 3.4) + +from email.mime.base import MIMEBase + +class MIMENonMultipart(MIMEBase): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi new file mode 100644 index 0000000..73adaf5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi @@ -0,0 +1,8 @@ +# Stubs for email.mime.text (Python 3.4) + +from typing import Optional +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text: str, _subtype: str = ..., + _charset: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/parser.pyi new file mode 100644 index 0000000..180e382 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/parser.pyi @@ -0,0 +1,33 @@ +# Stubs for email.parser (Python 3.4) + +import email.feedparser +from email.message import Message +from email.policy import Policy +from typing import BinaryIO, Callable, Optional, TextIO + +FeedParser = email.feedparser.FeedParser +BytesFeedParser = email.feedparser.BytesFeedParser + +class Parser: + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: TextIO, headersonly: bool = ...) -> Message: ... + def parsestr(self, text: str, headersonly: bool = ...) -> Message: ... + +class HeaderParser(Parser): + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: TextIO, headersonly: bool = ...) -> Message: ... + def parsestr(self, text: str, headersonly: bool = ...) -> Message: ... + +class BytesHeaderParser(BytesParser): + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: BinaryIO, headersonly: bool = ...) -> Message: ... + def parsebytes(self, text: bytes, headersonly: bool = ...) -> Message: ... + +class BytesParser: + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: BinaryIO, headersonly: bool = ...) -> Message: ... + def parsebytes(self, text: bytes, headersonly: bool = ...) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/policy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/policy.pyi new file mode 100644 index 0000000..e47e643 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/policy.pyi @@ -0,0 +1,64 @@ +# Stubs for email.policy (Python 3.4) + +from abc import abstractmethod +from typing import Any, List, Optional, Tuple, Union, Callable +import sys +from email.message import Message +from email.errors import MessageDefect +from email.header import Header +from email.contentmanager import ContentManager + +class Policy: + max_line_length: Optional[int] + linesep: str + cte_type: str + raise_on_defect: bool + if sys.version_info >= (3, 5): + mange_from: bool + def __init__(self, **kw: Any) -> None: ... + def clone(self, **kw: Any) -> Policy: ... + def handle_defect(self, obj: Message, + defect: MessageDefect) -> None: ... + def register_defect(self, obj: Message, + defect: MessageDefect) -> None: ... + def header_max_count(self, name: str) -> Optional[int]: ... + @abstractmethod + def header_source_parse(self, sourcelines: List[str]) -> str: ... + @abstractmethod + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + @abstractmethod + def header_fetch_parse(self, name: str, + value: str) -> str: ... + @abstractmethod + def fold(self, name: str, value: str) -> str: ... + @abstractmethod + def fold_binary(self, name: str, value: str) -> bytes: ... + +class Compat32(Policy): + def header_source_parse(self, sourcelines: List[str]) -> str: ... + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + def header_fetch_parse(self, name: str, value: str) -> Union[str, Header]: ... # type: ignore + def fold(self, name: str, value: str) -> str: ... + def fold_binary(self, name: str, value: str) -> bytes: ... + +compat32: Compat32 + +class EmailPolicy(Policy): + utf8: bool + refold_source: str + header_factory: Callable[[str, str], str] + content_manager: ContentManager + def header_source_parse(self, sourcelines: List[str]) -> str: ... + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + def header_fetch_parse(self, name: str, value: str) -> str: ... + def fold(self, name: str, value: str) -> str: ... + def fold_binary(self, name: str, value: str) -> bytes: ... + +default: EmailPolicy +SMTP: EmailPolicy +SMTPUTF8: EmailPolicy +HTTP: EmailPolicy +strict: EmailPolicy diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/utils.pyi new file mode 100644 index 0000000..6c0a183 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/email/utils.pyi @@ -0,0 +1,33 @@ +# Stubs for email.utils (Python 3.4) + +from typing import List, Optional, Tuple, Union +from email.charset import Charset +import datetime + +_ParamType = Union[str, Tuple[Optional[str], Optional[str], str]] +_PDTZ = Tuple[int, int, int, int, int, int, int, int, int, Optional[int]] + +def quote(str: str) -> str: ... +def unquote(str: str) -> str: ... +def parseaddr(address: Optional[str]) -> Tuple[str, str]: ... +def formataddr(pair: Tuple[Optional[str], str], + charset: Union[str, Charset] = ...) -> str: ... +def getaddresses(fieldvalues: List[str]) -> List[Tuple[str, str]]: ... +def parsedate(date: str) -> Optional[Tuple[int, int, int, int, int, int, int, int, int]]: ... +def parsedate_tz(date: str) -> Optional[_PDTZ]: ... +def parsedate_to_datetime(date: str) -> datetime.datetime: ... +def mktime_tz(tuple: _PDTZ) -> int: ... +def formatdate(timeval: Optional[float] = ..., localtime: bool = ..., + usegmt: bool = ...) -> str: ... +def format_datetime(dt: datetime.datetime, usegmt: bool = ...) -> str: ... +def localtime(dt: Optional[datetime.datetime] = ...) -> datetime.datetime: ... +def make_msgid(idstring: Optional[str] = ..., + domain: Optional[str] = ...) -> str: ... +def decode_rfc2231(s: str) -> Tuple[Optional[str], Optional[str], str]: ... +def encode_rfc2231(s: str, charset: Optional[str] = ..., + language: Optional[str] = ...) -> str: ... +def collapse_rfc2231_value(value: _ParamType, errors: str = ..., + fallback_charset: str = ...) -> str: ... +def decode_params( + params: List[Tuple[str, str]] +) -> List[Tuple[str, _ParamType]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi new file mode 100644 index 0000000..2ae6c0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi @@ -0,0 +1,6 @@ +import codecs + +import typing + +def search_function(encoding: str) -> codecs.CodecInfo: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi new file mode 100644 index 0000000..d38bd58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi @@ -0,0 +1,15 @@ +import codecs +from typing import Text, Tuple + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input: Text, final: bool = ...) -> bytes: ... + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input: bytes, errors: str, final: bool) -> Tuple[Text, int]: ... + +class StreamWriter(codecs.StreamWriter): ... +class StreamReader(codecs.StreamReader): ... + +def getregentry() -> codecs.CodecInfo: ... +def encode(input: Text, errors: Text = ...) -> bytes: ... +def decode(input: bytes, errors: Text = ...) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/enum.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/enum.pyi new file mode 100644 index 0000000..703c7cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/enum.pyi @@ -0,0 +1,77 @@ +# NB: third_party/2/enum.pyi and stdlib/3.4/enum.pyi must remain consistent! +import sys +from typing import Any, Dict, Iterator, List, Mapping, Type, TypeVar, Union +from abc import ABCMeta + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Type[Enum]) + +# Note: EnumMeta actually subclasses type directly, not ABCMeta. +# This is a temporary workaround to allow multiple creation of enums with builtins +# such as str as mixins, which due to the handling of ABCs of builtin types, cause +# spurious inconsistent metaclass structure. See #1595. +# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself +class EnumMeta(ABCMeta): + def __iter__(self: Type[_T]) -> Iterator[_T]: ... + def __reversed__(self: Type[_T]) -> Iterator[_T]: ... + def __contains__(self: Type[_T], member: object) -> bool: ... + def __getitem__(self: Type[_T], name: str) -> _T: ... + @property + def __members__(self: Type[_T]) -> Mapping[str, _T]: ... + def __len__(self) -> int: ... + +class Enum(metaclass=EnumMeta): + name: str + value: Any + _name_: str + _value_: Any + _member_names_: List[str] # undocumented + _member_map_: Dict[str, Enum] # undocumented + _value2member_map_: Dict[int, Enum] # undocumented + if sys.version_info >= (3, 7): + _ignore_: Union[str, List[str]] + if sys.version_info >= (3, 6): + _order_: str + @classmethod + def _missing_(cls, value: object) -> Any: ... + @staticmethod + def _generate_next_value_(name: str, start: int, count: int, last_values: List[Any]) -> Any: ... + def __new__(cls: Type[_T], value: object) -> _T: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __dir__(self) -> List[str]: ... + def __format__(self, format_spec: str) -> str: ... + def __hash__(self) -> Any: ... + def __reduce_ex__(self, proto: object) -> Any: ... + +class IntEnum(int, Enum): + value: int + +def unique(enumeration: _S) -> _S: ... + +if sys.version_info >= (3, 6): + _auto_null: Any + + # subclassing IntFlag so it picks up all implemented base functions, best modeling behavior of enum.auto() + class auto(IntFlag): + value: Any + + class Flag(Enum): + def __contains__(self: _T, other: _T) -> bool: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __bool__(self) -> bool: ... + def __or__(self: _T, other: _T) -> _T: ... + def __and__(self: _T, other: _T) -> _T: ... + def __xor__(self: _T, other: _T) -> _T: ... + def __invert__(self: _T) -> _T: ... + + # The `type: ignore` comment is needed because mypy considers the type + # signatures of several methods defined in int and Flag to be incompatible. + class IntFlag(int, Flag): # type: ignore + def __or__(self: _T, other: Union[int, _T]) -> _T: ... + def __and__(self: _T, other: Union[int, _T]) -> _T: ... + def __xor__(self: _T, other: Union[int, _T]) -> _T: ... + __ror__ = __or__ + __rand__ = __and__ + __rxor__ = __xor__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi new file mode 100644 index 0000000..1a87c9c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi @@ -0,0 +1,23 @@ +import sys +from typing import Union, Protocol + + +class _HasFileno(Protocol): + def fileno(self) -> int: ... + + +if sys.version_info >= (3, 5): + _File = Union[_HasFileno, int] +else: + _File = _HasFileno + + +def cancel_dump_traceback_later() -> None: ... +def disable() -> None: ... +def dump_traceback(file: _File = ..., all_threads: bool = ...) -> None: ... +def dump_traceback_later(timeout: int, repeat: bool = ..., file: _File = ..., exit: bool = ...) -> None: ... +def enable(file: _File = ..., all_threads: bool = ...) -> None: ... +def is_enabled() -> bool: ... +if sys.platform != "win32": + def register(signum: int, file: _File = ..., all_threads: bool = ..., chain: bool = ...) -> None: ... + def unregister(signum: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fcntl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fcntl.pyi new file mode 100644 index 0000000..fdcb4fc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fcntl.pyi @@ -0,0 +1,96 @@ +# Stubs for fcntl +from io import IOBase +from typing import Any, IO, Union + +FASYNC: int +FD_CLOEXEC: int +DN_ACCESS: int +DN_ATTRIB: int +DN_CREATE: int +DN_DELETE: int +DN_MODIFY: int +DN_MULTISHOT: int +DN_RENAME: int +F_DUPFD: int +F_DUPFD_CLOEXEC: int +F_FULLFSYNC: int +F_EXLCK: int +F_GETFD: int +F_GETFL: int +F_GETLEASE: int +F_GETLK: int +F_GETLK64: int +F_GETOWN: int +F_NOCACHE: int +F_GETSIG: int +F_NOTIFY: int +F_RDLCK: int +F_SETFD: int +F_SETFL: int +F_SETLEASE: int +F_SETLK: int +F_SETLK64: int +F_SETLKW: int +F_SETLKW64: int +F_SETOWN: int +F_SETSIG: int +F_SHLCK: int +F_UNLCK: int +F_WRLCK: int +I_ATMARK: int +I_CANPUT: int +I_CKBAND: int +I_FDINSERT: int +I_FIND: int +I_FLUSH: int +I_FLUSHBAND: int +I_GETBAND: int +I_GETCLTIME: int +I_GETSIG: int +I_GRDOPT: int +I_GWROPT: int +I_LINK: int +I_LIST: int +I_LOOK: int +I_NREAD: int +I_PEEK: int +I_PLINK: int +I_POP: int +I_PUNLINK: int +I_PUSH: int +I_RECVFD: int +I_SENDFD: int +I_SETCLTIME: int +I_SETSIG: int +I_SRDOPT: int +I_STR: int +I_SWROPT: int +I_UNLINK: int +LOCK_EX: int +LOCK_MAND: int +LOCK_NB: int +LOCK_READ: int +LOCK_RW: int +LOCK_SH: int +LOCK_UN: int +LOCK_WRITE: int + +_AnyFile = Union[int, IO[Any], IOBase] + +# TODO All these return either int or bytes depending on the value of +# cmd (not on the type of arg). +def fcntl(fd: _AnyFile, + cmd: int, + arg: Union[int, bytes] = ...) -> Any: ... +# TODO This function accepts any object supporting a buffer interface, +# as arg, is there a better way to express this than bytes? +def ioctl(fd: _AnyFile, + request: int, + arg: Union[int, bytes] = ..., + mutate_flag: bool = ...) -> Any: ... +def flock(fd: _AnyFile, operation: int) -> None: ... +def lockf(fd: _AnyFile, + cmd: int, + len: int = ..., + start: int = ..., + whence: int = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi new file mode 100644 index 0000000..4f99b4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi @@ -0,0 +1,11 @@ +# Stubs for fnmatch + +# Based on http://docs.python.org/3.2/library/fnmatch.html and +# python-lib/fnmatch.py + +from typing import Iterable, List, AnyStr + +def fnmatch(name: AnyStr, pat: AnyStr) -> bool: ... +def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ... +def filter(names: Iterable[AnyStr], pat: AnyStr) -> List[AnyStr]: ... +def translate(pat: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/functools.pyi new file mode 100644 index 0000000..409e84b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/functools.pyi @@ -0,0 +1,143 @@ +import sys +from typing import Any, Callable, Generic, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Type, TypeVar, NamedTuple, Union, overload + +_AnyCallable = Callable[..., Any] + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... + + +class _CacheInfo(NamedTuple('CacheInfo', [ + ('hits', int), + ('misses', int), + ('maxsize', int), + ('currsize', int) +])): ... + +class _lru_cache_wrapper(Generic[_T]): + __wrapped__: Callable[..., _T] + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + def cache_info(self) -> _CacheInfo: ... + def cache_clear(self) -> None: ... + +class lru_cache(): + def __init__(self, maxsize: Optional[int] = ..., typed: bool = ...) -> None: ... + def __call__(self, f: Callable[..., _T]) -> _lru_cache_wrapper[_T]: ... + + +WRAPPER_ASSIGNMENTS: Sequence[str] +WRAPPER_UPDATES: Sequence[str] + +def update_wrapper(wrapper: _AnyCallable, wrapped: _AnyCallable, assigned: Sequence[str] = ..., + updated: Sequence[str] = ...) -> _AnyCallable: ... +def wraps(wrapped: _AnyCallable, assigned: Sequence[str] = ..., updated: Sequence[str] = ...) -> Callable[[_AnyCallable], _AnyCallable]: ... +def total_ordering(cls: type) -> type: ... +def cmp_to_key(mycmp: Callable[[_T, _T], int]) -> Callable[[_T], Any]: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... + +# With protocols, this could change into a generic protocol that defines __get__ and returns _T +_Descriptor = Any + +class partialmethod(Generic[_T]): + func: Union[Callable[..., _T], _Descriptor] + args: Tuple[Any, ...] + keywords: Dict[str, Any] + + @overload + def __init__(self, func: Callable[..., _T], *args: Any, **keywords: Any) -> None: ... + @overload + def __init__(self, func: _Descriptor, *args: Any, **keywords: Any) -> None: ... + def __get__(self, obj: Any, cls: Type[Any]) -> Callable[..., _T]: ... + @property + def __isabstractmethod__(self) -> bool: ... + +class _SingleDispatchCallable(Generic[_T]): + registry: Mapping[Any, Callable[..., _T]] + def dispatch(self, cls: Any) -> Callable[..., _T]: ... + @overload + def register(self, cls: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + @overload + def register(self, cls: Any, func: Callable[..., _T]) -> Callable[..., _T]: ... + def _clear_cache(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + +def singledispatch(func: Callable[..., _T]) -> _SingleDispatchCallable[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gc.pyi new file mode 100644 index 0000000..d4bb109 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gc.pyi @@ -0,0 +1,28 @@ +# Stubs for gc + +from typing import Any, Dict, List, Tuple + + +DEBUG_COLLECTABLE: int +DEBUG_LEAK: int +DEBUG_SAVEALL: int +DEBUG_STATS: int +DEBUG_UNCOLLECTABLE: int +callbacks: List[Any] +garbage: List[Any] + +def collect(generations: int = ...) -> int: ... +def disable() -> None: ... +def enable() -> None: ... +def get_count() -> Tuple[int, int, int]: ... +def get_debug() -> int: ... +def get_objects() -> List[Any]: ... +def get_referents(*objs: Any) -> List[Any]: ... +def get_referrers(*objs: Any) -> List[Any]: ... +def get_stats() -> List[Dict[str, Any]]: ... +def get_threshold() -> Tuple[int, int, int]: ... +def is_tracked(obj: Any) -> bool: ... +def isenabled() -> bool: ... +def set_debug(flags: int) -> None: ... +def set_threshold(threshold0: int, threshold1: int = ..., + threshold2: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getopt.pyi new file mode 100644 index 0000000..0417a82 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getopt.pyi @@ -0,0 +1,14 @@ +# Stubs for getopt + +# Based on http://docs.python.org/3.2/library/getopt.html + +from typing import List, Tuple + +def getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... +def gnu_getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... + +class GetoptError(Exception): + msg: str + opt: str + +error = GetoptError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getpass.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getpass.pyi new file mode 100644 index 0000000..55a8433 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/getpass.pyi @@ -0,0 +1,12 @@ +# Stubs for getpass + +from typing import Optional, TextIO + + +def getpass(prompt: str = ..., stream: Optional[TextIO] = ...) -> str: ... + + +def getuser() -> str: ... + + +class GetPassWarning(UserWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gettext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gettext.pyi new file mode 100644 index 0000000..eeb9b09 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gettext.pyi @@ -0,0 +1,44 @@ +# Stubs for gettext (Python 3.4) + +from typing import Any, IO, List, Optional, Union, Callable + +class NullTranslations: + def __init__(self, fp: IO[str] = ...) -> None: ... + def add_fallback(self, fallback: NullTranslations) -> None: ... + def gettext(self, message: str) -> str: ... + def lgettext(self, message: str) -> str: ... + def ngettext(self, singular: str, plural: str, n: int) -> str: ... + def lngettext(self, singular: str, plural: str, n: int) -> str: ... + def info(self) -> Any: ... + def charset(self) -> Any: ... + def output_charset(self) -> Any: ... + def set_output_charset(self, charset: Any) -> None: ... + def install(self, names: List[str] = ...) -> None: ... + +class GNUTranslations(NullTranslations): + LE_MAGIC: int + BE_MAGIC: int + +def find(domain: str, localedir: str = ..., languages: List[str] = ..., + all: bool = ...): ... + +def translation(domain: str, localedir: str = ..., languages: List[str] = ..., + class_: Callable[[IO[str]], NullTranslations] = ..., + fallback: bool = ..., codeset: Any = ...) -> NullTranslations: ... + +def install(domain: str, localedir: str = ..., codeset: Any = ..., + names: List[str] = ...): ... + +def textdomain(domain: str = ...) -> str: ... +def bindtextdomain(domain: str, localedir: str = ...) -> str: ... +def bind_textdomain_codeset(domain: str, codeset: str = ...) -> str: ... +def dgettext(domain: str, message: str) -> str: ... +def ldgettext(domain: str, message: str) -> str: ... +def dngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def ldngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def gettext(message: str) -> str: ... +def lgettext(message: str) -> str: ... +def ngettext(singular: str, plural: str, n: int) -> str: ... +def lngettext(singular: str, plural: str, n: int) -> str: ... + +Catalog = translation diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/glob.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/glob.pyi new file mode 100644 index 0000000..22ee205 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/glob.pyi @@ -0,0 +1,23 @@ +# Stubs for glob +# Based on http://docs.python.org/3/library/glob.html + +from typing import List, Iterator, AnyStr, Union +import sys + +if sys.version_info >= (3, 6): + def glob0(dirname: AnyStr, pattern: AnyStr) -> List[AnyStr]: ... +else: + def glob0(dirname: AnyStr, basename: AnyStr) -> List[AnyStr]: ... + +def glob1(dirname: AnyStr, pattern: AnyStr) -> List[AnyStr]: ... + +if sys.version_info >= (3, 5): + def glob(pathname: AnyStr, *, recursive: bool = ...) -> List[AnyStr]: ... + def iglob(pathname: AnyStr, *, recursive: bool = ...) -> Iterator[AnyStr]: ... +else: + def glob(pathname: AnyStr) -> List[AnyStr]: ... + def iglob(pathname: AnyStr) -> Iterator[AnyStr]: ... + +def escape(pathname: AnyStr) -> AnyStr: ... + +def has_magic(s: Union[str, bytes]) -> bool: ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gzip.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gzip.pyi new file mode 100644 index 0000000..6f1bf7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/gzip.pyi @@ -0,0 +1,49 @@ +from typing import Any, IO, Optional +from os.path import _PathType +import _compression +import zlib + +def open(filename, mode: str = ..., compresslevel: int = ..., encoding: Optional[str] = ..., errors: Optional[str] = ..., newline: Optional[str] = ...) -> IO[Any]: ... + +class _PaddedFile: + file: IO[bytes] + def __init__(self, f: IO[bytes], prepend: bytes = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def prepend(self, prepend: bytes = ...) -> None: ... + def seek(self, off: int) -> int: ... + def seekable(self) -> bool: ... + +class GzipFile(_compression.BaseStream): + myfileobj: Optional[IO[bytes]] + mode: str + name: str + compress: zlib._Compress + fileobj: IO[bytes] + def __init__(self, filename: Optional[_PathType] = ..., mode: Optional[str] = ..., compresslevel: int = ..., fileobj: Optional[IO[bytes]] = ..., mtime: Optional[float] = ...) -> None: ... + @property + def filename(self) -> str: ... + @property + def mtime(self) -> Optional[int]: ... + crc: int + def write(self, data: bytes) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + def peek(self, n: int) -> bytes: ... + @property + def closed(self) -> bool: ... + def close(self) -> None: ... + def flush(self, zlib_mode: int = ...) -> None: ... + def fileno(self) -> int: ... + def rewind(self) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def readline(self, size: int = ...) -> bytes: ... + +class _GzipReader(_compression.DecompressReader): + def __init__(self, fp: IO[bytes]) -> None: ... + def read(self, size: int = ...) -> bytes: ... + +def compress(data, compresslevel: int = ...) -> bytes: ... +def decompress(data: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/hashlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/hashlib.pyi new file mode 100644 index 0000000..616bb0f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/hashlib.pyi @@ -0,0 +1,69 @@ +# Stubs for hashlib + +import sys +from typing import AbstractSet, Optional, Union + +_DataType = Union[bytes, bytearray, memoryview] + +class _Hash(object): + digest_size: int + block_size: int + + # [Python documentation note] Changed in version 3.4: The name attribute has + # been present in CPython since its inception, but until Python 3.4 was not + # formally specified, so may not exist on some platforms + name: str + + def __init__(self, data: _DataType = ...) -> None: ... + + def copy(self) -> _Hash: ... + def digest(self) -> bytes: ... + def hexdigest(self) -> str: ... + def update(self, arg: _DataType) -> None: ... + +def md5(arg: _DataType = ...) -> _Hash: ... +def sha1(arg: _DataType = ...) -> _Hash: ... +def sha224(arg: _DataType = ...) -> _Hash: ... +def sha256(arg: _DataType = ...) -> _Hash: ... +def sha384(arg: _DataType = ...) -> _Hash: ... +def sha512(arg: _DataType = ...) -> _Hash: ... + +def new(name: str, data: _DataType = ...) -> _Hash: ... + +algorithms_guaranteed: AbstractSet[str] +algorithms_available: AbstractSet[str] + +def pbkdf2_hmac(hash_name: str, password: _DataType, salt: _DataType, iterations: int, dklen: Optional[int] = ...) -> bytes: ... + +if sys.version_info >= (3, 6): + class _VarLenHash(object): + digest_size: int + block_size: int + name: str + + def __init__(self, data: _DataType = ...) -> None: ... + + def copy(self) -> _VarLenHash: ... + def digest(self, length: int) -> bytes: ... + def hexdigest(self, length: int) -> str: ... + def update(self, arg: _DataType) -> None: ... + + sha3_224 = _Hash + sha3_256 = _Hash + sha3_384 = _Hash + sha3_512 = _Hash + shake_128 = _VarLenHash + shake_256 = _VarLenHash + + def scrypt(password: _DataType, *, salt: _DataType, n: int, r: int, p: int, maxmem: int = ..., dklen: int = ...) -> bytes: ... + + class _BlakeHash(_Hash): + MAX_DIGEST_SIZE: int + MAX_KEY_SIZE: int + PERSON_SIZE: int + SALT_SIZE: int + + def __init__(self, data: _DataType = ..., digest_size: int = ..., key: _DataType = ..., salt: _DataType = ..., person: _DataType = ..., fanout: int = ..., depth: int = ..., leaf_size: int = ..., node_offset: int = ..., node_depth: int = ..., inner_size: int = ..., last_node: bool = ...) -> None: ... + + blake2b = _BlakeHash + blake2s = _BlakeHash diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/heapq.pyi new file mode 100644 index 0000000..5c49dfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/heapq.pyi @@ -0,0 +1,23 @@ +# Stubs for heapq + +# Based on http://docs.python.org/3.2/library/heapq.html + +import sys +from typing import TypeVar, List, Iterable, Any, Callable, Optional + +_T = TypeVar('_T') + +def heappush(heap: List[_T], item: _T) -> None: ... +def heappop(heap: List[_T]) -> _T: ... +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapify(x: List[_T]) -> None: ... +def heapreplace(heap: List[_T], item: _T) -> _T: ... +if sys.version_info >= (3, 5): + def merge(*iterables: Iterable[_T], key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> Iterable[_T]: ... +else: + def merge(*iterables: Iterable[_T]) -> Iterable[_T]: ... +def nlargest(n: int, iterable: Iterable[_T], + key: Optional[Callable[[_T], Any]] = ...) -> List[_T]: ... +def nsmallest(n: int, iterable: Iterable[_T], + key: Callable[[_T], Any] = ...) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi new file mode 100644 index 0000000..af2a800 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi @@ -0,0 +1,4 @@ +from typing import AnyStr + +def escape(s: AnyStr, quote: bool = ...) -> AnyStr: ... +def unescape(s: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/entities.pyi new file mode 100644 index 0000000..e8ce9f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/entities.pyi @@ -0,0 +1,6 @@ +from typing import Any + +name2codepoint: Any +html5: Any +codepoint2name: Any +entitydefs: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/parser.pyi new file mode 100644 index 0000000..102a2cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/html/parser.pyi @@ -0,0 +1,31 @@ +from typing import List, Tuple +from _markupbase import ParserBase +import sys + +class HTMLParser(ParserBase): + if sys.version_info >= (3, 5): + def __init__(self, *, convert_charrefs: bool = ...) -> None: ... + else: + def __init__(self, strict: bool = ..., *, + convert_charrefs: bool = ...) -> None: ... + def feed(self, feed: str) -> None: ... + def close(self) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + def get_starttag_text(self) -> str: ... + + def handle_starttag(self, tag: str, + attrs: List[Tuple[str, str]]) -> None: ... + def handle_endtag(self, tag: str) -> None: ... + def handle_startendtag(self, tag: str, + attrs: List[Tuple[str, str]]) -> None: ... + def handle_data(self, data: str) -> None: ... + def handle_entityref(self, name: str) -> None: ... + def handle_charref(self, name: str) -> None: ... + def handle_comment(self, data: str) -> None: ... + def handle_decl(self, decl: str) -> None: ... + def handle_pi(self, data: str) -> None: ... + def unknown_decl(self, data: str) -> None: ... + +if sys.version_info < (3, 5): + class HTMLParseError(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi new file mode 100644 index 0000000..580250b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi @@ -0,0 +1,69 @@ +import sys + +from enum import IntEnum + +if sys.version_info >= (3, 5): + class HTTPStatus(IntEnum): + + def __init__(self, *a) -> None: ... + + phrase: str + description: str + + CONTINUE = ... + SWITCHING_PROTOCOLS = ... + PROCESSING = ... + OK = ... + CREATED = ... + ACCEPTED = ... + NON_AUTHORITATIVE_INFORMATION = ... + NO_CONTENT = ... + RESET_CONTENT = ... + PARTIAL_CONTENT = ... + MULTI_STATUS = ... + ALREADY_REPORTED = ... + IM_USED = ... + MULTIPLE_CHOICES = ... + MOVED_PERMANENTLY = ... + FOUND = ... + SEE_OTHER = ... + NOT_MODIFIED = ... + USE_PROXY = ... + TEMPORARY_REDIRECT = ... + PERMANENT_REDIRECT = ... + BAD_REQUEST = ... + UNAUTHORIZED = ... + PAYMENT_REQUIRED = ... + FORBIDDEN = ... + NOT_FOUND = ... + METHOD_NOT_ALLOWED = ... + NOT_ACCEPTABLE = ... + PROXY_AUTHENTICATION_REQUIRED = ... + REQUEST_TIMEOUT = ... + CONFLICT = ... + GONE = ... + LENGTH_REQUIRED = ... + PRECONDITION_FAILED = ... + REQUEST_ENTITY_TOO_LARGE = ... + REQUEST_URI_TOO_LONG = ... + UNSUPPORTED_MEDIA_TYPE = ... + REQUESTED_RANGE_NOT_SATISFIABLE = ... + EXPECTATION_FAILED = ... + UNPROCESSABLE_ENTITY = ... + LOCKED = ... + FAILED_DEPENDENCY = ... + UPGRADE_REQUIRED = ... + PRECONDITION_REQUIRED = ... + TOO_MANY_REQUESTS = ... + REQUEST_HEADER_FIELDS_TOO_LARGE = ... + INTERNAL_SERVER_ERROR = ... + NOT_IMPLEMENTED = ... + BAD_GATEWAY = ... + SERVICE_UNAVAILABLE = ... + GATEWAY_TIMEOUT = ... + HTTP_VERSION_NOT_SUPPORTED = ... + VARIANT_ALSO_NEGOTIATES = ... + INSUFFICIENT_STORAGE = ... + LOOP_DETECTED = ... + NOT_EXTENDED = ... + NETWORK_AUTHENTICATION_REQUIRED = ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/client.pyi new file mode 100644 index 0000000..5528b01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/client.pyi @@ -0,0 +1,223 @@ +from typing import ( + Any, Dict, IO, Iterable, List, Iterator, Mapping, Optional, + Protocol, Tuple, Type, TypeVar, + Union, + overload, + BinaryIO, +) +import email.message +import io +from socket import socket +import sys +import ssl +import types + +_DataType = Union[bytes, IO[Any], Iterable[bytes], str] +_T = TypeVar('_T') + +HTTP_PORT: int +HTTPS_PORT: int + +CONTINUE: int +SWITCHING_PROTOCOLS: int +PROCESSING: int + +OK: int +CREATED: int +ACCEPTED: int +NON_AUTHORITATIVE_INFORMATION: int +NO_CONTENT: int +RESET_CONTENT: int +PARTIAL_CONTENT: int +MULTI_STATUS: int +IM_USED: int + +MULTIPLE_CHOICES: int +MOVED_PERMANENTLY: int +FOUND: int +SEE_OTHER: int +NOT_MODIFIED: int +USE_PROXY: int +TEMPORARY_REDIRECT: int + +BAD_REQUEST: int +UNAUTHORIZED: int +PAYMENT_REQUIRED: int +FORBIDDEN: int +NOT_FOUND: int +METHOD_NOT_ALLOWED: int +NOT_ACCEPTABLE: int +PROXY_AUTHENTICATION_REQUIRED: int +REQUEST_TIMEOUT: int +CONFLICT: int +GONE: int +LENGTH_REQUIRED: int +PRECONDITION_FAILED: int +REQUEST_ENTITY_TOO_LARGE: int +REQUEST_URI_TOO_LONG: int +UNSUPPORTED_MEDIA_TYPE: int +REQUESTED_RANGE_NOT_SATISFIABLE: int +EXPECTATION_FAILED: int +UNPROCESSABLE_ENTITY: int +LOCKED: int +FAILED_DEPENDENCY: int +UPGRADE_REQUIRED: int +PRECONDITION_REQUIRED: int +TOO_MANY_REQUESTS: int +REQUEST_HEADER_FIELDS_TOO_LARGE: int + +INTERNAL_SERVER_ERROR: int +NOT_IMPLEMENTED: int +BAD_GATEWAY: int +SERVICE_UNAVAILABLE: int +GATEWAY_TIMEOUT: int +HTTP_VERSION_NOT_SUPPORTED: int +INSUFFICIENT_STORAGE: int +NOT_EXTENDED: int +NETWORK_AUTHENTICATION_REQUIRED: int + +responses: Dict[int, str] + +class HTTPMessage(email.message.Message): ... + +if sys.version_info >= (3, 5): + # Ignore errors to work around python/mypy#5027 + class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore + msg: HTTPMessage + headers: HTTPMessage + version: int + debuglevel: int + closed: bool + status: int + reason: str + def __init__(self, sock: socket, debuglevel: int = ..., + method: Optional[str] = ..., url: Optional[str] = ...) -> None: ... + def read(self, amt: Optional[int] = ...) -> bytes: ... + @overload + def getheader(self, name: str) -> Optional[str]: ... + @overload + def getheader(self, name: str, default: _T) -> Union[str, _T]: ... + def getheaders(self) -> List[Tuple[str, str]]: ... + def fileno(self) -> int: ... + def isclosed(self) -> bool: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> HTTPResponse: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + def info(self) -> email.message.Message: ... + def geturl(self) -> str: ... + def getcode(self) -> int: ... + def begin(self) -> None: ... +else: + class HTTPResponse(io.RawIOBase, BinaryIO): # type: ignore + msg: HTTPMessage + headers: HTTPMessage + version: int + debuglevel: int + closed: bool + status: int + reason: str + def read(self, amt: Optional[int] = ...) -> bytes: ... + def readinto(self, b: bytearray) -> int: ... + @overload + def getheader(self, name: str) -> Optional[str]: ... + @overload + def getheader(self, name: str, default: _T) -> Union[str, _T]: ... + def getheaders(self) -> List[Tuple[str, str]]: ... + def fileno(self) -> int: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> HTTPResponse: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + def info(self) -> email.message.Message: ... + def geturl(self) -> str: ... + def getcode(self) -> int: ... + def begin(self) -> None: ... + +# This is an API stub only for the class below, not a class itself. +# urllib.request uses it for a parameter. +class HTTPConnectionProtocol(Protocol): + if sys.version_info >= (3, 7): + def __call__(self, host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., + blocksize: int = ...): ... + else: + def __call__(self, host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ...): ... + +class HTTPConnection: + host: str = ... + port: int = ... + if sys.version_info >= (3, 7): + def __init__( + self, + host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., blocksize: int = ... + ) -> None: ... + else: + def __init__( + self, + host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ... + ) -> None: ... + if sys.version_info >= (3, 6): + def request(self, method: str, url: str, + body: Optional[_DataType] = ..., + headers: Mapping[str, str] = ..., + *, encode_chunked: bool = ...) -> None: ... + else: + def request(self, method: str, url: str, + body: Optional[_DataType] = ..., + headers: Mapping[str, str] = ...) -> None: ... + def getresponse(self) -> HTTPResponse: ... + def set_debuglevel(self, level: int) -> None: ... + def set_tunnel(self, host: str, port: Optional[int] = ..., + headers: Optional[Mapping[str, str]] = ...) -> None: ... + def connect(self) -> None: ... + def close(self) -> None: ... + def putrequest(self, request: str, selector: str, skip_host: bool = ..., + skip_accept_encoding: bool = ...) -> None: ... + def putheader(self, header: str, *argument: str) -> None: ... + if sys.version_info >= (3, 6): + def endheaders(self, message_body: Optional[_DataType] = ..., + *, encode_chunked: bool = ...) -> None: ... + else: + def endheaders(self, message_body: Optional[_DataType] = ...) -> None: ... + def send(self, data: _DataType) -> None: ... + +class HTTPSConnection(HTTPConnection): + def __init__(self, + host: str, port: Optional[int] = ..., + key_file: Optional[str] = ..., + cert_file: Optional[str] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., + *, context: Optional[ssl.SSLContext] = ..., + check_hostname: Optional[bool] = ...) -> None: ... + +class HTTPException(Exception): ... +error = HTTPException + +class NotConnected(HTTPException): ... +class InvalidURL(HTTPException): ... +class UnknownProtocol(HTTPException): ... +class UnknownTransferEncoding(HTTPException): ... +class UnimplementedFileMode(HTTPException): ... +class IncompleteRead(HTTPException): ... + +class ImproperConnectionState(HTTPException): ... +class CannotSendRequest(ImproperConnectionState): ... +class CannotSendHeader(ImproperConnectionState): ... +class ResponseNotReady(ImproperConnectionState): ... + +class BadStatusLine(HTTPException): ... +class LineTooLong(HTTPException): ... + +if sys.version_info >= (3, 5): + class RemoteDisconnected(ConnectionResetError, BadStatusLine): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi new file mode 100644 index 0000000..25701ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi @@ -0,0 +1,115 @@ +from typing import Dict, Iterable, Iterator, Optional, Sequence, Tuple, TypeVar, Union, overload +from http.client import HTTPResponse +from urllib.request import Request + +_T = TypeVar('_T') + +class LoadError(OSError): ... + + +class CookieJar(Iterable[Cookie]): + def __init__(self, policy: Optional[CookiePolicy] = ...) -> None: ... + def add_cookie_header(self, request: Request) -> None: ... + def extract_cookies(self, response: HTTPResponse, + request: Request) -> None: ... + def set_policy(self, policy: CookiePolicy) -> None: ... + def make_cookies(self, response: HTTPResponse, + request: Request) -> Sequence[Cookie]: ... + def set_cookie(self, cookie: Cookie) -> None: ... + def set_cookie_if_ok(self, cookie: Cookie, + request: Request) -> None: ... + def clear(self, domain: str = ..., path: str = ..., + name: str = ...) -> None: ... + def clear_session_cookies(self) -> None: ... + def __iter__(self) -> Iterator[Cookie]: ... + def __len__(self) -> int: ... + +class FileCookieJar(CookieJar): + filename: str + delayload: bool + def __init__(self, filename: str = ..., delayload: bool = ..., + policy: Optional[CookiePolicy] = ...) -> None: ... + def save(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + def load(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + def revert(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + +class MozillaCookieJar(FileCookieJar): ... +class LWPCookieJar(FileCookieJar): ... + + +class CookiePolicy: + netscape: bool + rfc2965: bool + hide_cookie2: bool + def set_ok(self, cookie: Cookie, request: Request) -> bool: ... + def return_ok(self, cookie: Cookie, request: Request) -> bool: ... + def domain_return_ok(self, domain: str, request: Request) -> bool: ... + def path_return_ok(self, path: str, request: Request) -> bool: ... + + +class DefaultCookiePolicy(CookiePolicy): + rfc2109_as_netscape: bool + strict_domain: bool + strict_rfc2965_unverifiable: bool + strict_ns_unverifiable: bool + strict_ns_domain: int + strict_ns_set_initial_dollar: bool + strict_ns_set_path: bool + DomainStrictNoDots: int + DomainStrictNonDomain: int + DomainRFC2965Match: int + DomainLiberal: int + DomainStrict: int + def __init__(self, blocked_domains: Optional[Sequence[str]] = ..., + allowed_domains: Optional[Sequence[str]] = ..., + netscape: bool = ..., + rfc2965: bool = ..., + rfc2109_as_netscape: Optional[bool] = ..., + hide_cookie2: bool = ..., strict_domain: bool = ..., + strict_rfc2965_unverifiable: bool = ..., + strict_ns_unverifiable: bool = ..., + strict_ns_domain: int = ..., + strict_ns_set_initial_dollar: bool = ..., + strict_ns_set_path: bool = ...) -> None: ... + def blocked_domains(self) -> Tuple[str, ...]: ... + def set_blocked_domains(self, blocked_domains: Sequence[str]) -> None: ... + def is_blocked(self, domain: str) -> bool: ... + def allowed_domains(self) -> Optional[Tuple[str, ...]]: ... + def set_allowed_domains(self, allowed_domains: Optional[Sequence[str]]) -> None: ... + def is_not_allowed(self, domain: str) -> bool: ... + + +class Cookie: + version: Optional[int] + name: str + value: Optional[str] + port: Optional[str] + path: str + secure: bool + expires: Optional[int] + discard: bool + comment: Optional[str] + comment_url: Optional[str] + rfc2109: bool + port_specified: bool + domain: str # undocumented + domain_specified: bool + domain_initial_dot: bool + def __init__(self, version: Optional[int], name: str, value: Optional[str], # undocumented + port: Optional[str], port_specified: bool, + domain: str, domain_specified: bool, domain_initial_dot: bool, + path: str, path_specified: bool, + secure: bool, expires: Optional[int], discard: bool, + comment: Optional[str], comment_url: Optional[str], + rest: Dict[str, str], + rfc2109: bool = ...) -> None: ... + def has_nonstandard_attr(self, name: str) -> bool: ... + @overload + def get_nonstandard_attr(self, name: str) -> Optional[str]: ... + @overload + def get_nonstandard_attr(self, name: str, default: _T = ...) -> Union[str, _T]: ... + def set_nonstandard_attr(self, name: str, value: str) -> None: ... + def is_expired(self, now: int = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi new file mode 100644 index 0000000..5e5d58a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi @@ -0,0 +1,31 @@ +# Stubs for http.cookies (Python 3.5) + +from typing import Generic, Dict, List, Mapping, MutableMapping, Optional, TypeVar, Union + +_DataType = Union[str, Mapping[str, Union[str, Morsel]]] +_T = TypeVar('_T') + +class CookieError(Exception): ... + +class Morsel(Dict[str, str], Generic[_T]): + value: str + coded_value: _T + key: str + def set(self, key: str, val: str, coded_val: _T) -> None: ... + def isReservedKey(self, K: str) -> bool: ... + def output(self, attrs: Optional[List[str]] = ..., + header: str = ...) -> str: ... + def js_output(self, attrs: Optional[List[str]] = ...) -> str: ... + def OutputString(self, attrs: Optional[List[str]] = ...) -> str: ... + +class BaseCookie(Dict[str, Morsel], Generic[_T]): + def __init__(self, input: Optional[_DataType] = ...) -> None: ... + def value_decode(self, val: str) -> _T: ... + def value_encode(self, val: _T) -> str: ... + def output(self, attrs: Optional[List[str]] = ..., header: str = ..., + sep: str = ...) -> str: ... + def js_output(self, attrs: Optional[List[str]] = ...) -> str: ... + def load(self, rawdata: _DataType) -> None: ... + def __setitem__(self, key: str, value: Union[str, Morsel]) -> None: ... + +class SimpleCookie(BaseCookie): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/server.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/server.pyi new file mode 100644 index 0000000..7a7729f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/http/server.pyi @@ -0,0 +1,71 @@ +# Stubs for http.server (Python 3.4) + +import sys +from typing import Any, BinaryIO, Dict, List, Mapping, Optional, Tuple, Union +import socketserver +import email.message + +if sys.version_info >= (3, 7): + from builtins import _PathLike + +class HTTPServer(socketserver.TCPServer): + server_name: str + server_port: int + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + +class BaseHTTPRequestHandler: + client_address: Tuple[str, int] + server: socketserver.BaseServer + close_connection: bool + requestline: str + command: str + path: str + request_version: str + headers: email.message.Message + rfile: BinaryIO + wfile: BinaryIO + server_version: str + sys_version: str + error_message_format: str + error_content_type: str + protocol_version: str + MessageClass: type + responses: Mapping[int, Tuple[str, str]] + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer) -> None: ... + def handle(self) -> None: ... + def handle_one_request(self) -> None: ... + def handle_expect_100(self) -> bool: ... + def send_error(self, code: int, message: Optional[str] = ..., + explain: Optional[str] = ...) -> None: ... + def send_response(self, code: int, + message: Optional[str] = ...) -> None: ... + def send_header(self, keyword: str, value: str) -> None: ... + def send_response_only(self, code: int, + message: Optional[str] = ...) -> None: ... + def end_headers(self) -> None: ... + def flush_headers(self) -> None: ... + def log_request(self, code: Union[int, str] = ..., + size: Union[int, str] = ...) -> None: ... + def log_error(self, format: str, *args: Any) -> None: ... + def log_message(self, format: str, *args: Any) -> None: ... + def version_string(self) -> str: ... + def date_time_string(self, timestamp: Optional[int] = ...) -> str: ... + def log_date_time_string(self) -> str: ... + def address_string(self) -> str: ... + +class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): + extensions_map: Dict[str, str] + if sys.version_info >= (3, 7): + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer, directory: Optional[Union[str, _PathLike[str]]]) -> None: ... + else: + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer) -> None: ... + def do_GET(self) -> None: ... + def do_HEAD(self) -> None: ... + +class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): + cgi_directories: List[str] + def do_POST(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/imp.pyi new file mode 100644 index 0000000..3344091 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/imp.pyi @@ -0,0 +1,55 @@ +# Stubs for imp (Python 3.6) + +import os +import sys +import types +from typing import Any, IO, List, Optional, Tuple, TypeVar, Union + +from _imp import (lock_held as lock_held, acquire_lock as acquire_lock, release_lock as release_lock, + get_frozen_object as get_frozen_object, is_frozen_package as is_frozen_package, + init_frozen as init_frozen, is_builtin as is_builtin, is_frozen as is_frozen) + +if sys.version_info >= (3, 5): + from _imp import create_dynamic as create_dynamic + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + _Path = Union[str, os.PathLike[str]] +else: + _Path = str + +SEARCH_ERROR: int +PY_SOURCE: int +PY_COMPILED: int +C_EXTENSION: int +PY_RESOURCE: int +PKG_DIRECTORY: int +C_BUILTIN: int +PY_FROZEN: int +PY_CODERESOURCE: int +IMP_HOOK: int + +def new_module(name: str) -> types.ModuleType: ... +def get_magic() -> bytes: ... +def get_tag() -> str: ... +def cache_from_source(path: _Path, debug_override: Optional[bool] = ...) -> str: ... +def source_from_cache(path: _Path) -> str: ... +def get_suffixes() -> List[Tuple[str, str, int]]: ... + +class NullImporter: + def __init__(self, path: _Path) -> None: ... + def find_module(self, fullname: Any) -> None: ... + +# PathLike doesn't work for the pathname argument here +def load_source(name: str, pathname: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... +def load_compiled(name: str, pathname: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... +def load_package(name: str, path: _Path) -> types.ModuleType: ... +def load_module(name: str, file: IO[Any], filename: str, details: Tuple[str, str, int]) -> types.ModuleType: ... +if sys.version_info >= (3, 6): + def find_module(name: str, path: Union[None, List[str], List[os.PathLike[str]], List[_Path]] = ...) -> Tuple[str, str, Tuple[IO[Any], str, int]]: ... +else: + def find_module(name: str, path: Optional[List[str]] = ...) -> Tuple[str, str, Tuple[IO[Any], str, int]]: ... +def reload(module: types.ModuleType) -> types.ModuleType: ... +def init_builtin(name: str) -> Optional[types.ModuleType]: ... +def load_dynamic(name: str, path: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi new file mode 100644 index 0000000..d46f7e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi @@ -0,0 +1,17 @@ +from importlib.abc import Loader +import sys +import types +from typing import Any, Mapping, Optional, Sequence + +def __import__(name: str, globals: Optional[Mapping[str, Any]] = ..., + locals: Optional[Mapping[str, Any]] = ..., + fromlist: Sequence[str] = ..., + level: int = ...) -> types.ModuleType: ... + +def import_module(name: str, package: Optional[str] = ...) -> types.ModuleType: ... + +def find_loader(name: str, path: Optional[str] = ...) -> Optional[Loader]: ... + +def invalidate_caches() -> None: ... + +def reload(module: types.ModuleType) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi new file mode 100644 index 0000000..a86e194 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi @@ -0,0 +1,97 @@ +from abc import ABCMeta, abstractmethod +import os +import sys +import types +from typing import Any, IO, Iterator, Mapping, Optional, Sequence, Tuple, Union + +# Loader is exported from this module, but for circular import reasons +# exists in its own stub file (with ModuleSpec and ModuleType). +from _importlib_modulespec import Loader as Loader # Exported + +from _importlib_modulespec import ModuleSpec + +_Path = Union[bytes, str] + +class Finder(metaclass=ABCMeta): + ... + # Technically this class defines the following method, but its subclasses + # in this module violate its signature. Since this class is deprecated, it's + # easier to simply ignore that this method exists. + # @abstractmethod + # def find_module(self, fullname: str, + # path: Optional[Sequence[_Path]] = ...) -> Optional[Loader]: ... + +class ResourceLoader(Loader): + @abstractmethod + def get_data(self, path: _Path) -> bytes: ... + +class InspectLoader(Loader): + def is_package(self, fullname: str) -> bool: ... + def get_code(self, fullname: str) -> Optional[types.CodeType]: ... + def load_module(self, fullname: str) -> types.ModuleType: ... + @abstractmethod + def get_source(self, fullname: str) -> Optional[str]: ... + def exec_module(self, module: types.ModuleType) -> None: ... + if sys.version_info < (3, 5): + def source_to_code(self, data: Union[bytes, str], + path: str = ...) -> types.CodeType: ... + else: + @staticmethod + def source_to_code(data: Union[bytes, str], + path: str = ...) -> types.CodeType: ... + +class ExecutionLoader(InspectLoader): + @abstractmethod + def get_filename(self, fullname: str) -> _Path: ... + def get_code(self, fullname: str) -> Optional[types.CodeType]: ... + +class SourceLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta): + def path_mtime(self, path: _Path) -> float: ... + def set_data(self, path: _Path, data: bytes) -> None: ... + def get_source(self, fullname: str) -> Optional[str]: ... + def path_stats(self, path: _Path) -> Mapping[str, Any]: ... + + +class MetaPathFinder(Finder): + def find_module(self, fullname: str, + path: Optional[Sequence[_Path]]) -> Optional[Loader]: + ... + def invalidate_caches(self) -> None: ... + # Not defined on the actual class, but expected to exist. + def find_spec( + self, fullname: str, path: Optional[Sequence[_Path]], + target: Optional[types.ModuleType] = ... + ) -> Optional[ModuleSpec]: + ... + +class PathEntryFinder(Finder): + def find_module(self, fullname: str) -> Optional[Loader]: ... + def find_loader( + self, fullname: str + ) -> Tuple[Optional[Loader], Sequence[_Path]]: ... + def invalidate_caches(self) -> None: ... + # Not defined on the actual class, but expected to exist. + def find_spec( + self, fullname: str, + target: Optional[types.ModuleType] = ... + ) -> Optional[ModuleSpec]: ... + +class FileLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta): + name: str + path: _Path + def __init__(self, fullname: str, path: _Path) -> None: ... + def get_data(self, path: _Path) -> bytes: ... + def get_filename(self, fullname: str) -> _Path: ... + +if sys.version_info >= (3, 7): + _PathLike = Union[bytes, str, os.PathLike[Any]] + + class ResourceReader(metaclass=ABCMeta): + @abstractmethod + def open_resource(self, resource: _PathLike) -> IO[bytes]: ... + @abstractmethod + def resource_path(self, resource: _PathLike) -> str: ... + @abstractmethod + def is_resource(self, name: str) -> bool: ... + @abstractmethod + def contents(self) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi new file mode 100644 index 0000000..036a91f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi @@ -0,0 +1,116 @@ +import importlib.abc +import sys +import types +from typing import Any, Callable, List, Optional, Sequence, Tuple, Union + +# ModuleSpec is exported from this module, but for circular import +# reasons exists in its own stub file (with Loader and ModuleType). +from _importlib_modulespec import ModuleSpec as ModuleSpec # Exported + +class BuiltinImporter(importlib.abc.MetaPathFinder, + importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... + @classmethod + def get_source(cls, fullname: str) -> None: ... + # Loader + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: ... + @classmethod + def exec_module(cls, module: types.ModuleType) -> None: ... + +class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... + @classmethod + def get_source(cls, fullname: str) -> None: ... + # Loader + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: + ... + @staticmethod + def exec_module(module: types.ModuleType) -> None: ... + +class WindowsRegistryFinder(importlib.abc.MetaPathFinder): + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + +class PathFinder(importlib.abc.MetaPathFinder): ... + +SOURCE_SUFFIXES: List[str] +DEBUG_BYTECODE_SUFFIXES: List[str] +OPTIMIZED_BYTECODE_SUFFIXES: List[str] +BYTECODE_SUFFIXES: List[str] +EXTENSION_SUFFIXES: List[str] + +def all_suffixes() -> List[str]: ... + +class FileFinder(importlib.abc.PathEntryFinder): + path: str + def __init__( + self, path: str, + *loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> None: ... + @classmethod + def path_hook( + cls, *loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> Callable[[str], importlib.abc.PathEntryFinder]: ... + +class SourceFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + +class SourcelessFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + +class ExtensionFileLoader(importlib.abc.ExecutionLoader): + def get_filename(self, fullname: str) -> importlib.abc._Path: ... + def get_source(self, fullname: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi new file mode 100644 index 0000000..007477d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi @@ -0,0 +1,25 @@ +import sys +# This is a >=3.7 module, so we conditionally include its source. +if sys.version_info >= (3, 7): + import os + + from pathlib import Path + from types import ModuleType + from typing import ContextManager, Iterator, Union, BinaryIO, TextIO + + Package = Union[str, ModuleType] + Resource = Union[str, os.PathLike] + + def open_binary(package: Package, resource: Resource) -> BinaryIO: ... + def open_text(package: Package, + resource: Resource, + encoding: str = ..., + errors: str = ...) -> TextIO: ... + def read_binary(package: Package, resource: Resource) -> bytes: ... + def read_text(package: Package, + resource: Resource, + encoding: str = ..., + errors: str = ...) -> str: ... + def path(package: Package, resource: Resource) -> ContextManager[Path]: ... + def is_resource(package: Package, name: str) -> bool: ... + def contents(package: Package) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi new file mode 100644 index 0000000..706a5dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi @@ -0,0 +1,53 @@ +import importlib.abc +import importlib.machinery +import sys +import types +from typing import Any, Callable, List, Optional + +def module_for_loader( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... +def set_loader( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... +def set_package( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... + +def resolve_name(name: str, package: str) -> str: ... + +MAGIC_NUMBER: bytes + +def cache_from_source(path: str, debug_override: Optional[bool] = ..., *, + optimization: Optional[Any] = ...) -> str: ... +def source_from_cache(path: str) -> str: ... +def decode_source(source_bytes: bytes) -> str: ... +def find_spec( + name: str, package: Optional[str] = ... +) -> Optional[importlib.machinery.ModuleSpec]: ... +def spec_from_loader( + name: str, loader: Optional[importlib.abc.Loader], *, + origin: Optional[str] = ..., loader_state: Optional[Any] = ..., + is_package: Optional[bool] = ... +) -> importlib.machinery.ModuleSpec: ... +def spec_from_file_location( + name: str, location: str, *, + loader: Optional[importlib.abc.Loader] = ..., + submodule_search_locations: Optional[List[str]] = ... +) -> importlib.machinery.ModuleSpec: ... + +if sys.version_info >= (3, 5): + def module_from_spec( + spec: importlib.machinery.ModuleSpec + ) -> types.ModuleType: ... + + class LazyLoader(importlib.abc.Loader): + def __init__(self, loader: importlib.abc.Loader) -> None: ... + @classmethod + def factory( + cls, loader: importlib.abc.Loader + ) -> Callable[..., LazyLoader]: ... + def create_module( + self, spec: importlib.machinery.ModuleSpec + ) -> Optional[types.ModuleType]: ... + def exec_module(self, module: types.ModuleType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/inspect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/inspect.pyi new file mode 100644 index 0000000..6173715 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/inspect.pyi @@ -0,0 +1,329 @@ +import sys +from typing import (AbstractSet, Any, Callable, Dict, Generator, List, Mapping, + NamedTuple, Optional, Sequence, Tuple, Union, + ) +from types import CodeType, FrameType, ModuleType, TracebackType +from collections import OrderedDict + +# +# Types and members +# +class EndOfBlock(Exception): ... + +class BlockFinder: + indent: int + islambda: bool + started: bool + passline: bool + indecorator: bool + decoratorhasargs: bool + last: int + def tokeneater(self, type: int, token: str, srow_scol: Tuple[int, int], + erow_ecol: Tuple[int, int], line: str) -> None: ... + +CO_OPTIMIZED: int +CO_NEWLOCALS: int +CO_VARARGS: int +CO_VARKEYWORDS: int +CO_NESTED: int +CO_GENERATOR: int +CO_NOFREE: int +if sys.version_info >= (3, 5): + CO_COROUTINE: int + CO_ITERABLE_COROUTINE: int +if sys.version_info >= (3, 6): + CO_ASYNC_GENERATOR: int +TPFLAGS_IS_ABSTRACT: int + +if sys.version_info < (3, 6): + ModuleInfo = NamedTuple('ModuleInfo', [('name', str), + ('suffix', str), + ('mode', str), + ('module_type', int), + ]) + def getmoduleinfo(path: str) -> Optional[ModuleInfo]: ... + +def getmembers(object: object, + predicate: Optional[Callable[[Any], bool]] = ..., + ) -> List[Tuple[str, Any]]: ... +def getmodulename(path: str) -> Optional[str]: ... + +def ismodule(object: object) -> bool: ... +def isclass(object: object) -> bool: ... +def ismethod(object: object) -> bool: ... +def isfunction(object: object) -> bool: ... +def isgeneratorfunction(object: object) -> bool: ... +def isgenerator(object: object) -> bool: ... + +if sys.version_info >= (3, 5): + def iscoroutinefunction(object: object) -> bool: ... + def iscoroutine(object: object) -> bool: ... + def isawaitable(object: object) -> bool: ... +if sys.version_info >= (3, 6): + def isasyncgenfunction(object: object) -> bool: ... + def isasyncgen(object: object) -> bool: ... +def istraceback(object: object) -> bool: ... +def isframe(object: object) -> bool: ... +def iscode(object: object) -> bool: ... +def isbuiltin(object: object) -> bool: ... +def isroutine(object: object) -> bool: ... +def isabstract(object: object) -> bool: ... +def ismethoddescriptor(object: object) -> bool: ... +def isdatadescriptor(object: object) -> bool: ... +def isgetsetdescriptor(object: object) -> bool: ... +def ismemberdescriptor(object: object) -> bool: ... + + +# +# Retrieving source code +# +def findsource(object: object) -> Tuple[List[str], int]: ... +def getabsfile(object: object) -> str: ... +def getblock(lines: Sequence[str]) -> Sequence[str]: ... +def getdoc(object: object) -> str: ... +def getcomments(object: object) -> str: ... +def getfile(object: object) -> str: ... +def getmodule(object: object) -> ModuleType: ... +def getsourcefile(object: object) -> str: ... +# TODO restrict to "module, class, method, function, traceback, frame, +# or code object" +def getsourcelines(object: object) -> Tuple[List[str], int]: ... +# TODO restrict to "a module, class, method, function, traceback, frame, +# or code object" +def getsource(object: object) -> str: ... +def cleandoc(doc: str) -> str: ... +def indentsize(line: str) -> int: ... + + +# +# Introspecting callables with the Signature object +# +def signature(callable: Callable[..., Any], + *, + follow_wrapped: bool = ...) -> Signature: ... + +class Signature: + def __init__(self, + parameters: Optional[Sequence[Parameter]] = ..., + *, + return_annotation: Any = ...) -> None: ... + # TODO: can we be more specific here? + empty: object = ... + + parameters: Mapping[str, Parameter] + + # TODO: can we be more specific here? + return_annotation: Any + + def bind(self, *args: Any, **kwargs: Any) -> BoundArguments: ... + def bind_partial(self, *args: Any, **kwargs: Any) -> BoundArguments: ... + def replace(self, + *, + parameters: Optional[Sequence[Parameter]] = ..., + return_annotation: Any = ...) -> Signature: ... + + if sys.version_info >= (3, 5): + @classmethod + def from_callable(cls, + obj: Callable[..., Any], + *, + follow_wrapped: bool = ...) -> Signature: ... + +# The name is the same as the enum's name in CPython +class _ParameterKind: ... + +class Parameter: + def __init__(self, + name: str, + kind: _ParameterKind, + *, + default: Any = ..., + annotation: Any = ...) -> None: ... + empty: Any = ... + name: str + default: Any + annotation: Any + + kind: _ParameterKind + POSITIONAL_ONLY: _ParameterKind = ... + POSITIONAL_OR_KEYWORD: _ParameterKind = ... + VAR_POSITIONAL: _ParameterKind = ... + KEYWORD_ONLY: _ParameterKind = ... + VAR_KEYWORD: _ParameterKind = ... + + def replace(self, + *, + name: Optional[str] = ..., + kind: Optional[_ParameterKind] = ..., + default: Any = ..., + annotation: Any = ...) -> Parameter: ... + +class BoundArguments: + arguments: OrderedDict[str, Any] + args: Tuple[Any, ...] + kwargs: Dict[str, Any] + signature: Signature + + if sys.version_info >= (3, 5): + def apply_defaults(self) -> None: ... + + +# +# Classes and functions +# + +# TODO: The actual return type should be List[_ClassTreeItem] but mypy doesn't +# seem to be supporting this at the moment: +# _ClassTreeItem = Union[List[_ClassTreeItem], Tuple[type, Tuple[type, ...]]] +def getclasstree(classes: List[type], unique: bool = ...) -> Any: ... + +ArgSpec = NamedTuple('ArgSpec', [('args', List[str]), + ('varargs', str), + ('keywords', str), + ('defaults', tuple), + ]) + +Arguments = NamedTuple('Arguments', [('args', List[str]), + ('varargs', Optional[str]), + ('varkw', Optional[str]), + ]) + +def getargs(co: CodeType) -> Arguments: ... +def getargspec(func: object) -> ArgSpec: ... + +FullArgSpec = NamedTuple('FullArgSpec', [('args', List[str]), + ('varargs', Optional[str]), + ('varkw', Optional[str]), + ('defaults', tuple), + ('kwonlyargs', List[str]), + ('kwonlydefaults', Dict[str, Any]), + ('annotations', Dict[str, Any]), + ]) + +def getfullargspec(func: object) -> FullArgSpec: ... + +# TODO make the field types more specific here +ArgInfo = NamedTuple('ArgInfo', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('locals', Dict[str, Any]), + ]) + +def getargvalues(frame: FrameType) -> ArgInfo: ... +def formatannotation(annotation: object, base_module: Optional[str] = ...) -> str: ... +def formatannotationrelativeto(object: object) -> Callable[[object], str]: ... +def formatargspec(args: List[str], + varargs: Optional[str] = ..., + varkw: Optional[str] = ..., + defaults: Optional[Tuple[Any, ...]] = ..., + kwonlyargs: Optional[List[str]] = ..., + kwonlydefaults: Optional[Dict[str, Any]] = ..., + annotations: Dict[str, Any] = ..., + formatarg: Callable[[str], str] = ..., + formatvarargs: Callable[[str], str] = ..., + formatvarkw: Callable[[str], str] = ..., + formatvalue: Callable[[Any], str] = ..., + formatreturns: Callable[[Any], str] = ..., + formatannotations: Callable[[Any], str] = ..., + ) -> str: ... +def formatargvalues(args: List[str], + varargs: Optional[str] = ..., + varkw: Optional[str] = ..., + locals: Optional[Dict[str, Any]] = ..., + formatarg: Optional[Callable[[str], str]] = ..., + formatvarargs: Optional[Callable[[str], str]] = ..., + formatvarkw: Optional[Callable[[str], str]] = ..., + formatvalue: Optional[Callable[[Any], str]] = ..., + ) -> str: ... +def getmro(cls: type) -> Tuple[type, ...]: ... + +def getcallargs(func: Callable[..., Any], + *args: Any, + **kwds: Any) -> Dict[str, Any]: ... + + +ClosureVars = NamedTuple('ClosureVars', [('nonlocals', Mapping[str, Any]), + ('globals', Mapping[str, Any]), + ('builtins', Mapping[str, Any]), + ('unbound', AbstractSet[str]), + ]) +def getclosurevars(func: Callable[..., Any]) -> ClosureVars: ... + +def unwrap(func: Callable[..., Any], + *, + stop: Optional[Callable[[Any], Any]] = ...) -> Any: ... + + +# +# The interpreter stack +# + +Traceback = NamedTuple( + 'Traceback', + [ + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ] +) + +# Python 3.5+ (functions returning it used to return regular tuples) +FrameInfo = NamedTuple('FrameInfo', [('frame', FrameType), + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ]) + +def getframeinfo(frame: Union[FrameType, TracebackType], context: int = ...) -> Traceback: ... +def getouterframes(frame: Any, context: int = ...) -> List[FrameInfo]: ... +def getinnerframes(traceback: TracebackType, context: int = ...) -> List[FrameInfo]: ... +def getlineno(frame: FrameType) -> int: ... +def currentframe() -> Optional[FrameType]: ... +def stack(context: int = ...) -> List[FrameInfo]: ... +def trace(context: int = ...) -> List[FrameInfo]: ... + +# +# Fetching attributes statically +# + +def getattr_static(obj: object, attr: str, default: Optional[Any] = ...) -> Any: ... + + +# +# Current State of Generators and Coroutines +# + +# TODO In the next two blocks of code, can we be more specific regarding the +# type of the "enums"? + +GEN_CREATED: str +GEN_RUNNING: str +GEN_SUSPENDED: str +GEN_CLOSED: str +def getgeneratorstate(generator: Generator[Any, Any, Any]) -> str: ... + +if sys.version_info >= (3, 5): + CORO_CREATED: str + CORO_RUNNING: str + CORO_SUSPENDED: str + CORO_CLOSED: str + # TODO can we be more specific than "object"? + def getcoroutinestate(coroutine: object) -> str: ... + +def getgeneratorlocals(generator: Generator[Any, Any, Any]) -> Dict[str, Any]: ... + +if sys.version_info >= (3, 5): + # TODO can we be more specific than "object"? + def getcoroutinelocals(coroutine: object) -> Dict[str, Any]: ... + +Attribute = NamedTuple('Attribute', [('name', str), + ('kind', str), + ('defining_class', type), + ('object', object), + ]) + +def classify_class_attrs(cls: type) -> List[Attribute]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/io.pyi new file mode 100644 index 0000000..903fab2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/io.pyi @@ -0,0 +1,210 @@ +from typing import ( + List, BinaryIO, TextIO, Iterator, Union, Optional, Callable, Tuple, Type, Any, IO, Iterable +) +import builtins +import codecs +from mmap import mmap +import sys +from types import TracebackType +from typing import TypeVar + +_bytearray_like = Union[bytearray, mmap] + +DEFAULT_BUFFER_SIZE: int + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + +_T = TypeVar('_T', bound='IOBase') + +open = builtins.open + +BlockingIOError = builtins.BlockingIOError +class UnsupportedOperation(OSError, ValueError): ... + +class IOBase: + def __iter__(self) -> Iterator[bytes]: ... + def __next__(self) -> bytes: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def writelines(self, lines: Iterable[Union[bytes, bytearray]]) -> None: ... + def readline(self, size: int = ...) -> bytes: ... + def __del__(self) -> None: ... + @property + def closed(self) -> bool: ... + +class RawIOBase(IOBase): + def readall(self) -> bytes: ... + def readinto(self, b: bytearray) -> Optional[int]: ... + def write(self, b: Union[bytes, bytearray]) -> Optional[int]: ... + def read(self, size: int = ...) -> Optional[bytes]: ... + +class BufferedIOBase(IOBase): + def detach(self) -> RawIOBase: ... + def readinto(self, b: _bytearray_like) -> int: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + if sys.version_info >= (3, 5): + def readinto1(self, b: _bytearray_like) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + + +class FileIO(RawIOBase): + mode: str + name: Union[int, str] + def __init__( + self, + name: Union[str, bytes, int], + mode: str = ..., + closefd: bool = ..., + opener: Optional[Callable[[Union[int, str], str], int]] = ... + ) -> None: ... + +# TODO should extend from BufferedIOBase +class BytesIO(BinaryIO): + def __init__(self, initial_bytes: bytes = ...) -> None: ... + # BytesIO does not contain a "name" field. This workaround is necessary + # to allow BytesIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> bytes: ... + def getbuffer(self) -> memoryview: ... + # copied from IOBase + def __iter__(self) -> Iterator[bytes]: ... + def __next__(self) -> bytes: ... + def __enter__(self) -> BytesIO: ... + def __exit__(self, t: Optional[Type[BaseException]] = ..., value: Optional[BaseException] = ..., + traceback: Optional[TracebackType] = ...) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + # TODO should be the next line instead + # def writelines(self, lines: List[Union[bytes, bytearray]]) -> None: ... + def writelines(self, lines: Any) -> None: ... + def readline(self, size: int = ...) -> bytes: ... + def __del__(self) -> None: ... + closed: bool + # copied from BufferedIOBase + def detach(self) -> RawIOBase: ... + def readinto(self, b: _bytearray_like) -> int: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + if sys.version_info >= (3, 5): + def readinto1(self, b: _bytearray_like) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + +class BufferedReader(BufferedIOBase): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def peek(self, size: int = ...) -> bytes: ... + +class BufferedWriter(BufferedIOBase): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def flush(self) -> None: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + +class BufferedRandom(BufferedReader, BufferedWriter): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +class BufferedRWPair(BufferedIOBase): + def __init__(self, reader: RawIOBase, writer: RawIOBase, + buffer_size: int = ...) -> None: ... + + +class TextIOBase(IOBase): + encoding: str + errors: Optional[str] + newlines: Union[str, Tuple[str, ...], None] + def __iter__(self) -> Iterator[str]: ... # type: ignore + def __next__(self) -> str: ... # type: ignore + def detach(self) -> IOBase: ... + def write(self, s: str) -> int: ... + def writelines(self, lines: List[str]) -> None: ... # type: ignore + def readline(self, size: int = ...) -> str: ... # type: ignore + def readlines(self, hint: int = ...) -> List[str]: ... # type: ignore + def read(self, size: Optional[int] = ...) -> str: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +# TODO should extend from TextIOBase +class TextIOWrapper(TextIO): + line_buffering: bool + # TODO uncomment after fixing mypy about using write_through + # def __init__(self, buffer: IO[bytes], encoding: str = ..., + # errors: Optional[str] = ..., newline: Optional[str] = ..., + # line_buffering: bool = ..., write_through: bool = ...) \ + # -> None: ... + def __init__( + self, + buffer: IO[bytes], + encoding: str = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ..., + line_buffering: bool = ..., + write_through: bool = ... + ) -> None: ... + # copied from IOBase + def __exit__(self, t: Optional[Type[BaseException]] = ..., value: Optional[BaseException] = ..., + traceback: Optional[TracebackType] = ...) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seekable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + # TODO should be the next line instead + # def writelines(self, lines: List[str]) -> None: ... + def writelines(self, lines: Any) -> None: ... + def __del__(self) -> None: ... + closed: bool + # copied from TextIOBase + encoding: str + errors: Optional[str] + newlines: Union[str, Tuple[str, ...], None] + def __iter__(self) -> Iterator[str]: ... + def __next__(self) -> str: ... + def __enter__(self) -> TextIO: ... + def detach(self) -> IOBase: ... + def write(self, s: str) -> int: ... + def readline(self, size: int = ...) -> str: ... + def read(self, size: Optional[int] = ...) -> str: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +class StringIO(TextIOWrapper): + def __init__(self, initial_value: str = ..., + newline: Optional[str] = ...) -> None: ... + # StringIO does not contain a "name" field. This workaround is necessary + # to allow StringIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> str: ... + def __enter__(self) -> StringIO: ... + +class IncrementalNewlineDecoder(codecs.IncrementalDecoder): + def decode(self, input: bytes, final: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi new file mode 100644 index 0000000..f706330 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi @@ -0,0 +1,151 @@ +import sys +from typing import (Any, Container, Generic, Iterable, Iterator, Optional, + overload, SupportsInt, Tuple, TypeVar) + +# Undocumented length constants +IPV4LENGTH: int +IPV6LENGTH: int + +_A = TypeVar("_A", IPv4Address, IPv6Address) +_N = TypeVar("_N", IPv4Network, IPv6Network) +_T = TypeVar("_T") + +def ip_address(address: object) -> Any: ... # morally Union[IPv4Address, IPv6Address] +def ip_network(address: object, strict: bool = ...) -> Any: ... # morally Union[IPv4Network, IPv6Network] +def ip_interface(address: object) -> Any: ... # morally Union[IPv4Interface, IPv6Interface] + +class _IPAddressBase: + def __eq__(self, other: Any) -> bool: ... + def __ge__(self: _T, other: _T) -> bool: ... + def __gt__(self: _T, other: _T) -> bool: ... + def __le__(self: _T, other: _T) -> bool: ... + def __lt__(self: _T, other: _T) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + @property + def compressed(self) -> str: ... + @property + def exploded(self) -> str: ... + if sys.version_info >= (3, 5): + @property + def reverse_pointer(self) -> str: ... + @property + def version(self) -> int: ... + +class _BaseAddress(_IPAddressBase, SupportsInt): + def __init__(self, address: object) -> None: ... + def __add__(self: _T, other: int) -> _T: ... + def __hash__(self) -> int: ... + def __int__(self) -> int: ... + def __sub__(self: _T, other: int) -> _T: ... + @property + def is_global(self) -> bool: ... + @property + def is_link_local(self) -> bool: ... + @property + def is_loopback(self) -> bool: ... + @property + def is_multicast(self) -> bool: ... + @property + def is_private(self) -> bool: ... + @property + def is_reserved(self) -> bool: ... + @property + def is_unspecified(self) -> bool: ... + @property + def max_prefixlen(self) -> int: ... + @property + def packed(self) -> bytes: ... + +class _BaseNetwork(_IPAddressBase, Container, Iterable[_A], Generic[_A]): + network_address: _A + netmask: _A + def __init__(self, address: object, strict: bool = ...) -> None: ... + def __contains__(self, other: Any) -> bool: ... + def __getitem__(self, n: int) -> _A: ... + def __iter__(self) -> Iterator[_A]: ... + def address_exclude(self: _T, other: _T) -> Iterator[_T]: ... + @property + def broadcast_address(self) -> _A: ... + def compare_networks(self: _T, other: _T) -> int: ... + def hosts(self) -> Iterator[_A]: ... + @property + def is_global(self) -> bool: ... + @property + def is_link_local(self) -> bool: ... + @property + def is_loopback(self) -> bool: ... + @property + def is_multicast(self) -> bool: ... + @property + def is_private(self) -> bool: ... + @property + def is_reserved(self) -> bool: ... + @property + def is_unspecified(self) -> bool: ... + @property + def max_prefixlen(self) -> int: ... + @property + def num_addresses(self) -> int: ... + def overlaps(self: _T, other: _T) -> bool: ... + @property + def prefixlen(self) -> int: ... + def subnets(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> Iterator[_T]: ... + def supernet(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> _T: ... + @property + def with_hostmask(self) -> str: ... + @property + def with_netmask(self) -> str: ... + @property + def with_prefixlen(self) -> str: ... + @property + def hostmask(self) -> _A: ... + +class _BaseInterface(_BaseAddress, Generic[_A, _N]): + hostmask: _A + netmask: _A + network: _N + @property + def ip(self) -> _A: ... + @property + def with_hostmask(self) -> str: ... + @property + def with_netmask(self) -> str: ... + @property + def with_prefixlen(self) -> str: ... + +class IPv4Address(_BaseAddress): ... +class IPv4Network(_BaseNetwork[IPv4Address]): ... +class IPv4Interface(IPv4Address, _BaseInterface[IPv4Address, IPv4Network]): ... + +class IPv6Address(_BaseAddress): + @property + def ipv4_mapped(self) -> Optional[IPv4Address]: ... + @property + def is_site_local(self) -> bool: ... + @property + def sixtofour(self) -> Optional[IPv4Address]: ... + @property + def teredo(self) -> Optional[Tuple[IPv4Address, IPv4Address]]: ... + +class IPv6Network(_BaseNetwork[IPv6Address]): + @property + def is_site_local(self) -> bool: ... + +class IPv6Interface(IPv6Address, _BaseInterface[IPv6Address, IPv6Network]): ... + +def v4_int_to_packed(address: int) -> bytes: ... +def v6_int_to_packed(address: int) -> bytes: ... +@overload +def summarize_address_range(first: IPv4Address, last: IPv4Address) -> Iterator[IPv4Network]: ... +@overload +def summarize_address_range(first: IPv6Address, last: IPv6Address) -> Iterator[IPv6Network]: ... +def collapse_addresses(addresses: Iterable[_N]) -> Iterator[_N]: ... +@overload +def get_mixed_type_key(obj: _A) -> Tuple[int, _A]: ... +@overload +def get_mixed_type_key(obj: IPv4Network) -> Tuple[int, IPv4Address, IPv4Address]: ... +@overload +def get_mixed_type_key(obj: IPv6Network) -> Tuple[int, IPv6Address, IPv6Address]: ... + +class AddressValueError(ValueError): ... +class NetmaskValueError(ValueError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/itertools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/itertools.pyi new file mode 100644 index 0000000..f34dd5b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/itertools.pyi @@ -0,0 +1,106 @@ +# Stubs for itertools + +# Based on http://docs.python.org/3.2/library/itertools.html + +from typing import (Iterator, TypeVar, Iterable, overload, Any, Callable, Tuple, + Generic, Optional) + +_T = TypeVar('_T') +_S = TypeVar('_S') +_N = TypeVar('_N', int, float) +Predicate = Callable[[_T], object] + +def count(start: _N = ..., + step: _N = ...) -> Iterator[_N]: ... # more general types? +def cycle(iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def repeat(object: _T) -> Iterator[_T]: ... +@overload +def repeat(object: _T, times: int) -> Iterator[_T]: ... + +def accumulate(iterable: Iterable[_T], func: Callable[[_T, _T], _T] = ...) -> Iterator[_T]: ... + +class chain(Iterator[_T], Generic[_T]): + def __init__(self, *iterables: Iterable[_T]) -> None: ... + def __next__(self) -> _T: ... + def __iter__(self) -> Iterator[_T]: ... + @staticmethod + def from_iterable(iterable: Iterable[Iterable[_S]]) -> Iterator[_S]: ... + +def compress(data: Iterable[_T], selectors: Iterable[Any]) -> Iterator[_T]: ... +def dropwhile(predicate: Predicate[_T], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def filterfalse(predicate: Optional[Predicate[_T]], + iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def groupby(iterable: Iterable[_T], key: None = ...) -> Iterator[Tuple[_T, Iterator[_T]]]: ... +@overload +def groupby(iterable: Iterable[_T], key: Callable[[_T], _S]) -> Iterator[Tuple[_S, Iterator[_T]]]: ... + +@overload +def islice(iterable: Iterable[_T], stop: Optional[int]) -> Iterator[_T]: ... +@overload +def islice(iterable: Iterable[_T], start: Optional[int], stop: Optional[int], + step: Optional[int] = ...) -> Iterator[_T]: ... + +def starmap(func: Callable[..., _S], iterable: Iterable[Iterable[Any]]) -> Iterator[_S]: ... +def takewhile(predicate: Predicate[_T], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def tee(iterable: Iterable[_T], n: int = ...) -> Tuple[Iterator[_T], ...]: ... +def zip_longest(*p: Iterable[Any], + fillvalue: Any = ...) -> Iterator[Any]: ... + +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_T6 = TypeVar('_T6') + +@overload +def product(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... +@overload +def product(iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + iter7: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +@overload +def product(*iterables: Iterable[Any], repeat: int = ...) -> Iterator[Tuple[Any, ...]]: ... + +def permutations(iterable: Iterable[_T], + r: Optional[int] = ...) -> Iterator[Tuple[_T, ...]]: ... +def combinations(iterable: Iterable[_T], + r: int) -> Iterator[Tuple[_T, ...]]: ... +def combinations_with_replacement(iterable: Iterable[_T], + r: int) -> Iterator[Tuple[_T, ...]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi new file mode 100644 index 0000000..620b239 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi @@ -0,0 +1,58 @@ +import sys +from typing import Any, IO, Optional, Tuple, Callable, Dict, List, Union, Protocol + +from .decoder import JSONDecoder as JSONDecoder +from .encoder import JSONEncoder as JSONEncoder +if sys.version_info >= (3, 5): + from .decoder import JSONDecodeError as JSONDecodeError + +def dumps(obj: Any, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Union[None, int, str] = ..., + separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> str: ... + +def dump(obj: Any, + fp: IO[str], + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Union[None, int, str] = ..., + separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> None: ... + +if sys.version_info >= (3, 6): + _LoadsString = Union[str, bytes, bytearray] +else: + _LoadsString = str +def loads(s: _LoadsString, + encoding: Any = ..., # ignored and deprecated + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class _Reader(Protocol): + def read(self) -> _LoadsString: ... + +def load(fp: _Reader, + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi new file mode 100644 index 0000000..8e30c1e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple + +if sys.version_info >= (3, 5): + class JSONDecodeError(ValueError): + msg: str + doc: str + pos: int + lineno: int + colno: int + def __init__(self, msg: str, doc: str, pos: int) -> None: ... + +class JSONDecoder: + object_hook: Callable[[Dict[str, Any]], Any] + parse_float: Callable[[str], Any] + parse_int: Callable[[str], Any] + parse_constant = ... # Callable[[str], Any] + strict: bool + object_pairs_hook: Callable[[List[Tuple[str, Any]]], Any] + + def __init__(self, object_hook: Optional[Callable[[Dict[str, Any]], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + strict: bool = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[str, Any]]], Any]] = ...) -> None: ... + def decode(self, s: str) -> Any: ... + def raw_decode(self, s: str, idx: int = ...) -> Tuple[Any, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi new file mode 100644 index 0000000..e35f344 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Iterator, Optional, Tuple + +class JSONEncoder: + item_separator: str + key_separator: str + + skipkeys: bool + ensure_ascii: bool + check_circular: bool + allow_nan: bool + sort_keys: bool + indent: int + + def __init__(self, skipkeys: bool = ..., ensure_ascii: bool = ..., + check_circular: bool = ..., allow_nan: bool = ..., sort_keys: bool = ..., + indent: Optional[int] = ..., separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable] = ...) -> None: ... + + def default(self, o: Any) -> Any: ... + def encode(self, o: Any) -> str: ... + def iterencode(self, o: Any, _one_shot: bool = ...) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/lzma.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/lzma.pyi new file mode 100644 index 0000000..cd0a088 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/lzma.pyi @@ -0,0 +1,107 @@ +import io +import sys +from typing import Any, IO, Mapping, Optional, Sequence, Union + +if sys.version_info >= (3, 6): + from os import PathLike + _PathOrFile = Union[str, bytes, IO[Any], PathLike[Any]] +else: + _PathOrFile = Union[str, bytes, IO[Any]] + +_FilterChain = Sequence[Mapping[str, Any]] + +FORMAT_AUTO: int +FORMAT_XZ: int +FORMAT_ALONE: int +FORMAT_RAW: int +CHECK_NONE: int +CHECK_CRC32: int +CHECK_CRC64: int +CHECK_SHA256: int +CHECK_ID_MAX: int +CHECK_UNKNOWN: int +FILTER_LZMA1: int +FILTER_LZMA2: int +FILTER_DELTA: int +FILTER_X86: int +FILTER_IA64: int +FILTER_ARM: int +FILTER_ARMTHUMB: int +FILTER_SPARC: int +FILTER_POWERPC: int +MF_HC3: int +MF_HC4: int +MF_BT2: int +MF_BT3: int +MF_BT4: int +MODE_FAST: int +MODE_NORMAL: int +PRESET_DEFAULT: int +PRESET_EXTREME: int + +# from _lzma.c +class LZMADecompressor(object): + def __init__(self, format: Optional[int] = ..., memlimit: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> None: ... + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + @property + def check(self) -> int: ... + @property + def eof(self) -> bool: ... + @property + def unused_data(self) -> bytes: ... + if sys.version_info >= (3, 5): + @property + def needs_input(self) -> bool: ... + +# from _lzma.c +class LZMACompressor(object): + def __init__(self, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ...) -> None: ... + def compress(self, data: bytes) -> bytes: ... + def flush(self) -> bytes: ... + + +class LZMAError(Exception): ... + + +class LZMAFile(io.BufferedIOBase, IO[bytes]): # type: ignore # python/mypy#5027 + def __init__(self, + filename: Optional[_PathOrFile] = ..., + mode: str = ..., + *, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ...) -> None: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def fileno(self) -> int: ... + def seekable(self) -> bool: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def peek(self, size: int = ...) -> bytes: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def write(self, data: bytes) -> int: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + + +def open(filename: _PathOrFile, + mode: str = ..., + *, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... +def compress(data: bytes, format: int = ..., check: int = ..., preset: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> bytes: ... +def decompress(data: bytes, format: int = ..., memlimit: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> bytes: ... +def is_check_supported(check: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi new file mode 100644 index 0000000..bcab64c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi @@ -0,0 +1,8 @@ +# Stubs for msvcrt + +# NOTE: These are incomplete! + +from typing import overload, BinaryIO, TextIO + +def get_osfhandle(file: int) -> int: ... +def open_osfhandle(handle: int, flags: int) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi new file mode 100644 index 0000000..e5fad0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi @@ -0,0 +1,85 @@ +# Stubs for multiprocessing + +from typing import ( + Any, Callable, ContextManager, Iterable, Mapping, Optional, Dict, List, + Union, Sequence, Tuple +) + +from logging import Logger +from multiprocessing import connection, pool, spawn, synchronize +from multiprocessing.context import ( + BaseContext, + ProcessError as ProcessError, BufferTooShort as BufferTooShort, TimeoutError as TimeoutError, AuthenticationError as AuthenticationError) +from multiprocessing.managers import SyncManager +from multiprocessing.process import current_process as current_process +from multiprocessing.queues import Queue as Queue, SimpleQueue as SimpleQueue, JoinableQueue as JoinableQueue +from multiprocessing.spawn import freeze_support as freeze_support +from multiprocessing.spawn import set_executable as set_executable + +import sys + +# N.B. The functions below are generated at runtime by partially applying +# multiprocessing.context.BaseContext's methods, so the two signatures should +# be identical (modulo self). + +# Sychronization primitives +_LockLike = Union[synchronize.Lock, synchronize.RLock] +def Barrier(parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ...) -> synchronize.Barrier: ... +def BoundedSemaphore(value: int = ...) -> synchronize.BoundedSemaphore: ... +def Condition(lock: Optional[_LockLike] = ...) -> synchronize.Condition: ... +def Event(lock: Optional[_LockLike] = ...) -> synchronize.Event: ... +def Lock() -> synchronize.Lock: ... +def RLock() -> synchronize.RLock: ... +def Semaphore(value: int = ...) -> synchronize.Semaphore: ... + +def Pipe(duplex: bool = ...) -> Tuple[connection.Connection, connection.Connection]: ... + +def Pool(processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> pool.Pool: ... + +class Process(): + name: str + daemon: bool + pid: Optional[int] + exitcode: Optional[int] + authkey: bytes + sentinel: int + # TODO: set type of group to None + def __init__(self, + group: Any = ..., + target: Optional[Callable] = ..., + name: Optional[str] = ..., + args: Iterable[Any] = ..., + kwargs: Mapping[Any, Any] = ..., + *, + daemon: Optional[bool] = ...) -> None: ... + def start(self) -> None: ... + def run(self) -> None: ... + def terminate(self) -> None: ... + if sys.version_info >= (3, 7): + def kill(self) -> None: ... + def close(self) -> None: ... + def is_alive(self) -> bool: ... + def join(self, timeout: Optional[float] = ...) -> None: ... + +class Value(): + value: Any = ... + def __init__(self, typecode_or_type: str, *args: Any, lock: Union[bool, _LockLike] = ...) -> None: ... + def get_lock(self) -> _LockLike: ... + +# ----- multiprocessing function stubs ----- +def active_children() -> List[Process]: ... +def allow_connection_pickling() -> None: ... +def cpu_count() -> int: ... +def get_logger() -> Logger: ... +def log_to_stderr(level: Optional[Union[str, int]] = ...) -> Logger: ... +def Manager() -> SyncManager: ... +def set_forkserver_preload(module_names: List[str]) -> None: ... +def get_all_start_methods() -> List[str]: ... +def get_context(method: Optional[str] = ...) -> BaseContext: ... +def get_start_method(allow_none: Optional[bool]) -> Optional[str]: ... +def set_start_method(method: str, force: Optional[bool] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi new file mode 100644 index 0000000..76bdca0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi @@ -0,0 +1,48 @@ +from typing import Any, Iterable, List, Optional, Tuple, Type, Union +import socket +import sys +import types + +# https://docs.python.org/3/library/multiprocessing.html#address-formats +_Address = Union[str, Tuple[str, int]] + +class _ConnectionBase: + @property + def closed(self) -> bool: ... # undocumented + @property + def readable(self) -> bool: ... # undocumented + @property + def writable(self) -> bool: ... # undocumented + def fileno(self) -> int: ... + def close(self) -> None: ... + def send_bytes(self, + buf: bytes, + offset: int = ..., + size: Optional[int] = ...) -> None: ... + def send(self, obj: Any) -> None: ... + def recv_bytes(self, maxlength: Optional[int] = ...) -> bytes: ... + def recv_bytes_into(self, buf: Any, offset: int = ...) -> int: ... + def recv(self) -> Any: ... + def poll(self, timeout: Optional[float] = ...) -> bool: ... + +class Connection(_ConnectionBase): ... + +if sys.platform == "win32": + class PipeConnection(_ConnectionBase): ... + +class Listener: + def __init__(self, address: Optional[_Address] = ..., family: Optional[str] = ..., backlog: int = ..., authkey: Optional[bytes] = ...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + @property + def address(self) -> _Address: ... + @property + def last_accepted(self) -> Optional[_Address]: ... + def __enter__(self) -> Listener: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_value: Optional[BaseException], exc_tb: Optional[types.TracebackType]) -> None: ... + +def deliver_challenge(connection: Connection, authkey: bytes) -> None: ... +def answer_challenge(connection: Connection, authkey: bytes) -> None: ... +def wait(object_list: Iterable[Union[Connection, socket.socket, int]], timeout: Optional[float] = ...) -> List[Union[Connection, socket.socket, int]]: ... +def Client(address: _Address, family: Optional[str] = ..., authkey: Optional[bytes] = ...) -> Connection: ... +def Pipe(duplex: bool = ...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi new file mode 100644 index 0000000..dada9b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi @@ -0,0 +1,179 @@ +# Stubs for multiprocessing.context + +from logging import Logger +import multiprocessing +from multiprocessing import synchronize +from multiprocessing import queues +import sys +from typing import ( + Any, Callable, Iterable, Optional, List, Mapping, Sequence, Tuple, Type, + Union, +) + +_LockLike = Union[synchronize.Lock, synchronize.RLock] + +class ProcessError(Exception): ... + +class BufferTooShort(ProcessError): ... + +class TimeoutError(ProcessError): ... + +class AuthenticationError(ProcessError): ... + +class BaseContext(object): + ProcessError: Type[Exception] + BufferTooShort: Type[Exception] + TimeoutError: Type[Exception] + AuthenticationError: Type[Exception] + + # N.B. The methods below are applied at runtime to generate + # multiprocessing.*, so the signatures should be identical (modulo self). + + @staticmethod + def current_process() -> multiprocessing.Process: ... + @staticmethod + def active_children() -> List[multiprocessing.Process]: ... + def cpu_count(self) -> int: ... + # TODO: change return to SyncManager once a stub exists in multiprocessing.managers + def Manager(self) -> Any: ... + # TODO: change return to Pipe once a stub exists in multiprocessing.connection + def Pipe(self, duplex: bool) -> Any: ... + + def Barrier(self, + parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ...) -> synchronize.Barrier: ... + def BoundedSemaphore(self, + value: int = ...) -> synchronize.BoundedSemaphore: ... + def Condition(self, + lock: Optional[_LockLike] = ...) -> synchronize.Condition: ... + def Event(self, lock: Optional[_LockLike] = ...) -> synchronize.Event: ... + def Lock(self) -> synchronize.Lock: ... + def RLock(self) -> synchronize.RLock: ... + def Semaphore(self, value: int = ...) -> synchronize.Semaphore: ... + + def Queue(self, maxsize: int = ...) -> queues.Queue: ... + def JoinableQueue(self, maxsize: int = ...) -> queues.JoinableQueue: ... + def SimpleQueue(self) -> queues.SimpleQueue: ... + def Pool( + self, + processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ... + ) -> multiprocessing.pool.Pool: ... + def Process( + self, + group: Any = ..., + target: Optional[Callable] = ..., + name: Optional[str] = ..., + args: Iterable[Any] = ..., + kwargs: Mapping[Any, Any] = ..., + *, + daemon: Optional[bool] = ... + ) -> multiprocessing.Process: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to RawValue once a stub exists in multiprocessing.sharedctypes + def RawValue(self, typecode_or_type: Any, *args: Any) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to RawArray once a stub exists in multiprocessing.sharedctypes + def RawArray(self, typecode_or_type: Any, size_or_initializer: Union[int, Sequence[Any]]) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to Value once a stub exists in multiprocessing.sharedctypes + def Value( + self, + typecode_or_type: Any, + *args: Any, + lock: bool = ... + ) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to Array once a stub exists in multiprocessing.sharedctypes + def Array( + self, + typecode_or_type: Any, + size_or_initializer: Union[int, Sequence[Any]], + *, + lock: bool = ... + ) -> Any: ... + def freeze_support(self) -> None: ... + def get_logger(self) -> Logger: ... + def log_to_stderr(self, level: Optional[str] = ...) -> Logger: ... + def allow_connection_pickling(self) -> None: ... + def set_executable(self, executable: str) -> None: ... + def set_forkserver_preload(self, module_names: List[str]) -> None: ... + def get_context(self, method: Optional[str] = ...) -> BaseContext: ... + def get_start_method(self, allow_none: bool = ...) -> str: ... + def set_start_method(self, method: Optional[str] = ...) -> None: ... + @property + def reducer(self) -> str: ... + @reducer.setter + def reducer(self, reduction: str) -> None: ... + def _check_available(self) -> None: ... + +class Process(object): + _start_method: Optional[str] + @staticmethod + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + def _Popen(process_obj: Any) -> DefaultContext: ... + +class DefaultContext(object): + Process: Type[multiprocessing.Process] + + def __init__(self, context: BaseContext) -> None: ... + def get_context(self, method: Optional[str] = ...) -> BaseContext: ... + def set_start_method(self, method: str, force: bool = ...) -> None: ... + def get_start_method(self, allow_none: bool = ...) -> str: ... + def get_all_start_methods(self) -> List[str]: ... + +if sys.platform != 'win32': + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class ForkProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> Any: ... + + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class SpawnProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> SpawnProcess: ... + + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class ForkServerProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> Any: ... + + class ForkContext(BaseContext): + _name: str + Process: Type[ForkProcess] + + class SpawnContext(BaseContext): + _name: str + Process: Type[SpawnProcess] + + class ForkServerContext(BaseContext): + _name: str + Process: Type[ForkServerProcess] +else: + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class SpawnProcess(Any): # type: ignore + _start_method: str + @staticmethod + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + def _Popen(process_obj: Process) -> Any: ... + + class SpawnContext(BaseContext): + _name: str + Process: Type[SpawnProcess] + +def _force_start_method(method: str) -> None: ... +# TODO: type should be BaseProcess once a stub in multiprocessing.process exists +def get_spawning_popen() -> Optional[Any]: ... +# TODO: type should be BaseProcess once a stub in multiprocessing.process exists +def set_spawning_popen(popen: Any) -> None: ... +def assert_spawning(obj: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi new file mode 100644 index 0000000..c169d2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi @@ -0,0 +1,42 @@ +from typing import Any, Optional, List, Type + +import array +import sys +import threading +import weakref + +from .connection import Pipe +from threading import Lock, RLock, Semaphore, BoundedSemaphore +from threading import Event, Condition, Barrier +from queue import Queue + +JoinableQueue = Queue + + +class DummyProcess(threading.Thread): + _children: weakref.WeakKeyDictionary + _parent: threading.Thread + _pid: None + _start_called: int + exitcode: Optional[int] + def __init__(self, group=..., target=..., name=..., args=..., kwargs=...) -> None: ... + +Process = DummyProcess + +class Namespace(object): + def __init__(self, **kwds) -> None: ... + +class Value(object): + _typecode: Any + _value: Any + value: Any + def __init__(self, typecode, value, lock=...) -> None: ... + + +def Array(typecode, sequence, lock=...) -> array.array: ... +def Manager() -> Any: ... +def Pool(processes=..., initializer=..., initargs=...) -> Any: ... +def active_children() -> List: ... +def current_process() -> threading.Thread: ... +def freeze_support() -> None: ... +def shutdown() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi new file mode 100644 index 0000000..3baaf28 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi @@ -0,0 +1,35 @@ +from typing import Any, List, Optional, Tuple, Type, TypeVar + +from queue import Queue + +families: List[None] + +_TConnection = TypeVar('_TConnection', bound=Connection) +_TListener = TypeVar('_TListener', bound=Listener) + +class Connection(object): + _in: Any + _out: Any + recv: Any + recv_bytes: Any + send: Any + send_bytes: Any + def __enter__(self: _TConnection) -> _TConnection: ... + def __exit__(self, exc_type, exc_value, exc_tb) -> None: ... + def __init__(self, _in, _out) -> None: ... + def close(self) -> None: ... + def poll(self, timeout: float = ...) -> bool: ... + +class Listener(object): + _backlog_queue: Optional[Queue] + @property + def address(self) -> Optional[Queue]: ... + def __enter__(self: _TListener) -> _TListener: ... + def __exit__(self, exc_type, exc_value, exc_tb) -> None: ... + def __init__(self, address=..., family=..., backlog=...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + + +def Client(address) -> Connection: ... +def Pipe(duplex: bool = ...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi new file mode 100644 index 0000000..a5ec399 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi @@ -0,0 +1,47 @@ +# Stubs for multiprocessing.managers + +# NOTE: These are incomplete! + +import queue +import threading +from typing import ( + Any, Callable, ContextManager, Dict, Iterable, List, Mapping, Optional, + Sequence, Tuple, TypeVar, Union, +) + +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +class Namespace: ... + +_Namespace = Namespace + +class BaseManager(ContextManager[BaseManager]): + address: Union[str, Tuple[str, int]] + def connect(self) -> None: ... + @classmethod + def register(cls, typeid: str, callable: Optional[Callable] = ..., + proxytype: Any = ..., + exposed: Optional[Sequence[str]] = ..., + method_to_typeid: Optional[Mapping[str, str]] = ..., + create_method: bool = ...) -> None: ... + def shutdown(self) -> None: ... + def start(self, initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... + +class SyncManager(BaseManager): + def BoundedSemaphore(self, value: Any = ...) -> threading.BoundedSemaphore: ... + def Condition(self, lock: Any = ...) -> threading.Condition: ... + def Event(self) -> threading.Event: ... + def Lock(self) -> threading.Lock: ... + def Namespace(self) -> _Namespace: ... + def Queue(self, maxsize: int = ...) -> queue.Queue: ... + def RLock(self) -> threading.RLock: ... + def Semaphore(self, value: Any = ...) -> threading.Semaphore: ... + def Array(self, typecode: Any, sequence: Sequence[_T]) -> Sequence[_T]: ... + def Value(self, typecode: Any, value: _T) -> _T: ... + def dict(self, sequence: Mapping[_KT, _VT] = ...) -> Dict[_KT, _VT]: ... + def list(self, sequence: Sequence[_T] = ...) -> List[_T]: ... + +class RemoteError(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi new file mode 100644 index 0000000..469d83a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi @@ -0,0 +1,87 @@ +from typing import ( + Any, Callable, ContextManager, Iterable, Mapping, Optional, List, + Type, TypeVar, Generic, Iterator +) +from types import TracebackType + +_PT = TypeVar('_PT', bound='Pool') +_S = TypeVar('_S') +_T = TypeVar('_T') + +class ApplyResult(Generic[_T]): + def get(self, timeout: Optional[float] = ...) -> _T: ... + def wait(self, timeout: Optional[float] = ...) -> None: ... + def ready(self) -> bool: ... + def successful(self) -> bool: ... + +# alias created during issue #17805 +AsyncResult = ApplyResult + +_IMIT = TypeVar('_IMIT', bound=IMapIterator) + +class IMapIterator(Iterator[_T]): + def __iter__(self: _IMIT) -> _IMIT: ... + def next(self, timeout: Optional[float] = ...) -> _T: ... + def __next__(self, timeout: Optional[float] = ...) -> _T: ... + +class IMapUnorderedIterator(IMapIterator): ... + +class Pool(ContextManager[Pool]): + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ..., + context: Optional[Any] = ...) -> None: ... + def apply(self, + func: Callable[..., _T], + args: Iterable[Any] = ..., + kwds: Mapping[str, Any] = ...) -> _T: ... + def apply_async(self, + func: Callable[..., _T], + args: Iterable[Any] = ..., + kwds: Mapping[str, Any] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[_T]: ... + def map(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> List[_T]: ... + def map_async(self, func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[List[_T]]: ... + def imap(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> IMapIterator[_T]: ... + def imap_unordered(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> IMapIterator[_T]: ... + def starmap(self, + func: Callable[..., _T], + iterable: Iterable[Iterable[Any]] = ..., + chunksize: Optional[int] = ...) -> List[_T]: ... + def starmap_async(self, + func: Callable[..., _T], + iterable: Iterable[Iterable[Any]] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[List[_T]]: ... + def close(self) -> None: ... + def terminate(self) -> None: ... + def join(self) -> None: ... + def __enter__(self: _PT) -> _PT: ... + + +class ThreadPool(Pool, ContextManager[ThreadPool]): + + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... + +# undocumented +RUN: int +CLOSE: int +TERMINATE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi new file mode 100644 index 0000000..df8ea93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi @@ -0,0 +1,5 @@ +from typing import List +from multiprocessing import Process + +def current_process() -> Process: ... +def active_children() -> List[Process]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi new file mode 100644 index 0000000..c6dd0f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi @@ -0,0 +1,30 @@ +from typing import Any, Generic, Optional, TypeVar + +import queue + +_T = TypeVar('_T') + +class Queue(queue.Queue[_T]): + # FIXME: `ctx` is a circular dependency and it's not actually optional. + # It's marked as such to be able to use the generic Queue in __init__.pyi. + def __init__(self, maxsize: int = ..., *, ctx: Any = ...) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def put(self, obj: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put_nowait(self, item: _T) -> None: ... + def get_nowait(self) -> _T: ... + def close(self) -> None: ... + def join_thread(self) -> None: ... + def cancel_join_thread(self) -> None: ... + +class JoinableQueue(Queue[_T]): + def task_done(self) -> None: ... + def join(self) -> None: ... + +class SimpleQueue(Generic[_T]): + def __init__(self, *, ctx: Any = ...) -> None: ... + def empty(self) -> bool: ... + def get(self) -> _T: ... + def put(self, item: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi new file mode 100644 index 0000000..659253c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi @@ -0,0 +1,18 @@ +from typing import Any, Dict, List, Mapping, Optional, Sequence +from types import ModuleType + +WINEXE: bool +WINSERVICE: bool + +def set_executable(exe: str) -> None: ... +def get_executable() -> str: ... +def is_forking(argv: Sequence[str]) -> bool: ... +def freeze_support() -> None: ... +def get_command_line(**kwds: Any) -> List[str]: ... +def spawn_main(pipe_handle: int, parent_pid: Optional[int] = ..., tracker_fd: Optional[int] = ...) -> None: ... +# undocumented +def _main(fd: int) -> Any: ... +def get_preparation_data(name: str) -> Dict[str, Any]: ... +old_main_modules: List[ModuleType] = ... +def prepare(data: Mapping[str, Any]) -> None: ... +def import_main_path(main_path: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi new file mode 100644 index 0000000..9b22681 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi @@ -0,0 +1,63 @@ +from typing import Callable, ContextManager, Optional, Union + +from multiprocessing.context import BaseContext +import threading +import sys + +_LockLike = Union[Lock, RLock] + +class Barrier(threading.Barrier): + def __init__(self, + parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ..., + * + ctx: BaseContext) -> None: ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ..., *, ctx: BaseContext) -> None: ... + +class Condition(ContextManager[bool]): + def __init__(self, + lock: Optional[_LockLike] = ..., + *, + ctx: BaseContext) -> None: ... + if sys.version_info >= (3, 7): + def notify(self, n: int = ...) -> None: ... + else: + def notify(self) -> None: ... + def notify_all(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + def wait_for(self, + predicate: Callable[[], bool], + timeout: Optional[float] = ...) -> bool: ... + def acquire(self, + block: bool = ..., + timeout: Optional[float] = ...) -> bool: ... + def release(self) -> None: ... + +class Event(ContextManager[bool]): + def __init__(self, + lock: Optional[_LockLike] = ..., + *, + ctx: BaseContext) -> None: ... + def is_set(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + +class Lock(SemLock): + def __init__(self, *, ctx: BaseContext) -> None: ... + +class RLock(SemLock): + def __init__(self, *, ctx: BaseContext) -> None: ... + +class Semaphore(SemLock): + def __init__(self, value: int = ..., *, ctx: BaseContext) -> None: ... + +# Not part of public API +class SemLock(ContextManager[bool]): + def acquire(self, + block: bool = ..., + timeout: Optional[float] = ...) -> bool: ... + def release(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nntplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nntplib.pyi new file mode 100644 index 0000000..00abdd9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nntplib.pyi @@ -0,0 +1,102 @@ +# Stubs for nntplib (Python 3) + +import datetime +import socket +import ssl +from typing import Any, Dict, IO, Iterable, List, NamedTuple, Optional, Tuple, TypeVar, Union + +_SelfT = TypeVar('_SelfT', bound=_NNTPBase) +_File = Union[IO[bytes], bytes, str, None] + + +class NNTPError(Exception): + response: str +class NNTPReplyError(NNTPError): ... +class NNTPTemporaryError(NNTPError): ... +class NNTPPermanentError(NNTPError): ... +class NNTPProtocolError(NNTPError): ... +class NNTPDataError(NNTPError): ... + +NNTP_PORT: int +NNTP_SSL_PORT: int + +GroupInfo = NamedTuple('GroupInfo', [ + ('group', str), + ('last', str), + ('first', str), + ('flag', str), +]) +ArticleInfo = NamedTuple('ArticleInfo', [ + ('number', int), + ('message_id', str), + ('lines', List[bytes]), +]) + +def decode_header(header_str: str) -> str: ... + +class _NNTPBase: + encoding: str + errors: str + + host: str + file: IO[bytes] + debugging: int + welcome: str + readermode_afterauth: bool + tls_on: bool + authenticated: bool + nntp_implementation: str + nntp_version: int + + def __init__(self, file: IO[bytes], host: str, + readermode: Optional[bool] = ..., timeout: float = ...) -> None: ... + def __enter__(self: _SelfT) -> _SelfT: ... + def __exit__(self, *args: Any) -> None: ... + def getwelcome(self) -> str: ... + def getcapabilities(self) -> Dict[str, List[str]]: ... + def set_debuglevel(self, level: int) -> None: ... + def debug(self, level: int) -> None: ... + def capabilities(self) -> Tuple[str, Dict[str, List[str]]]: ... + def newgroups(self, date: Union[datetime.date, datetime.datetime], *, file: _File = ...) -> Tuple[str, List[str]]: ... + def newnews(self, group: str, date: Union[datetime.date, datetime.datetime], *, file: _File = ...) -> Tuple[str, List[str]]: ... + def list(self, group_pattern: Optional[str] = ..., *, file: _File = ...) -> Tuple[str, List[str]]: ... + def description(self, group: str) -> str: ... + def descriptions(self, group_pattern: str) -> Tuple[str, Dict[str, str]]: ... + def group(self, name: str) -> Tuple[str, int, int, int, str]: ... + def help(self, *, file: _File = ...) -> Tuple[str, List[str]]: ... + def stat(self, message_spec: Any = ...) -> Tuple[str, int, str]: ... + def next(self) -> Tuple[str, int, str]: ... + def last(self) -> Tuple[str, int, str]: ... + def head(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def body(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def article(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def slave(self) -> str: ... + def xhdr(self, hdr: str, str: Any, *, file: _File = ...) -> Tuple[str, List[str]]: ... + def xover(self, start: int, end: int, *, file: _File = ...) -> Tuple[str, List[Tuple[int, Dict[str, str]]]]: ... + def over(self, message_spec: Union[None, str, List[Any], Tuple[Any, ...]], *, file: _File = ...) -> Tuple[str, List[Tuple[int, Dict[str, str]]]]: ... + def xgtitle(self, group: str, *, file: _File = ...) -> Tuple[str, List[Tuple[str, str]]]: ... + def xpath(self, id: Any) -> Tuple[str, str]: ... + def date(self) -> Tuple[str, datetime.datetime]: ... + def post(self, data: Union[bytes, Iterable[bytes]]) -> str: ... + def ihave(self, message_id: Any, data: Union[bytes, Iterable[bytes]]) -> str: ... + def quit(self) -> str: ... + def login(self, user: Optional[str] = ..., password: Optional[str] = ..., usenetrc: bool = ...) -> None: ... + def starttls(self, ssl_context: Optional[ssl.SSLContext] = ...) -> None: ... + + +class NNTP(_NNTPBase): + port: int + sock: socket.socket + + def __init__(self, host: str, port: int = ..., user: Optional[str] = ..., password: Optional[str] = ..., + readermode: Optional[bool] = ..., usenetrc: bool = ..., + timeout: float = ...) -> None: ... + + +class NNTP_SSL(_NNTPBase): + sock: socket.socket + + def __init__(self, host: str, port: int = ..., user: Optional[str] = ..., password: Optional[str] = ..., + ssl_context: Optional[ssl.SSLContext] = ..., + readermode: Optional[bool] = ..., usenetrc: bool = ..., + timeout: float = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi new file mode 100644 index 0000000..b8ad8d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi @@ -0,0 +1,2 @@ +def url2pathname(url: str) -> str: ... +def pathname2url(p: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi new file mode 100644 index 0000000..b717926 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi @@ -0,0 +1,722 @@ +# Stubs for os +# Ron Murawski + +from io import TextIOWrapper as _TextIOWrapper +import sys +from typing import ( + Mapping, MutableMapping, Dict, List, Any, Tuple, IO, Iterable, Iterator, NoReturn, overload, Union, AnyStr, + Optional, Generic, Set, Callable, Text, Sequence, NamedTuple, TypeVar, ContextManager +) + +# Re-exported names from other modules. +from builtins import OSError as error +from . import path as path + +_T = TypeVar('_T') + +# ----- os variables ----- + +if sys.version_info >= (3, 2): + supports_bytes_environ: bool + +if sys.version_info >= (3, 3): + supports_dir_fd: Set[Callable[..., Any]] + supports_fd: Set[Callable[..., Any]] + supports_effective_ids: Set[Callable[..., Any]] + supports_follow_symlinks: Set[Callable[..., Any]] + + if sys.platform != 'win32': + # Unix only + PRIO_PROCESS: int + PRIO_PGRP: int + PRIO_USER: int + + F_LOCK: int + F_TLOCK: int + F_ULOCK: int + F_TEST: int + + POSIX_FADV_NORMAL: int + POSIX_FADV_SEQUENTIAL: int + POSIX_FADV_RANDOM: int + POSIX_FADV_NOREUSE: int + POSIX_FADV_WILLNEED: int + POSIX_FADV_DONTNEED: int + + SF_NODISKIO: int + SF_MNOWAIT: int + SF_SYNC: int + + XATTR_SIZE_MAX: int # Linux only + XATTR_CREATE: int # Linux only + XATTR_REPLACE: int # Linux only + + P_PID: int + P_PGID: int + P_ALL: int + + WEXITED: int + WSTOPPED: int + WNOWAIT: int + + CLD_EXITED: int + CLD_DUMPED: int + CLD_TRAPPED: int + CLD_CONTINUED: int + + SCHED_OTHER: int # some flavors of Unix + SCHED_BATCH: int # some flavors of Unix + SCHED_IDLE: int # some flavors of Unix + SCHED_SPORADIC: int # some flavors of Unix + SCHED_FIFO: int # some flavors of Unix + SCHED_RR: int # some flavors of Unix + SCHED_RESET_ON_FORK: int # some flavors of Unix + + RTLD_LAZY: int + RTLD_NOW: int + RTLD_GLOBAL: int + RTLD_LOCAL: int + RTLD_NODELETE: int + RTLD_NOLOAD: int + RTLD_DEEPBIND: int + + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int +if sys.version_info >= (3, 3) and sys.platform != 'win32': + SEEK_DATA: int # some flavors of Unix + SEEK_HOLE: int # some flavors of Unix + +O_RDONLY: int +O_WRONLY: int +O_RDWR: int +O_APPEND: int +O_CREAT: int +O_EXCL: int +O_TRUNC: int +# We don't use sys.platform for O_* flags to denote platform-dependent APIs because some codes, +# including tests for mypy, use a more finer way than sys.platform before using these APIs +# See https://github.com/python/typeshed/pull/2286 for discussions +O_DSYNC: int # Unix only +O_RSYNC: int # Unix only +O_SYNC: int # Unix only +O_NDELAY: int # Unix only +O_NONBLOCK: int # Unix only +O_NOCTTY: int # Unix only +if sys.version_info >= (3, 3): + O_CLOEXEC: int # Unix only +O_SHLOCK: int # Unix only +O_EXLOCK: int # Unix only +O_BINARY: int # Windows only +O_NOINHERIT: int # Windows only +O_SHORT_LIVED: int # Windows only +O_TEMPORARY: int # Windows only +O_RANDOM: int # Windows only +O_SEQUENTIAL: int # Windows only +O_TEXT: int # Windows only +O_ASYNC: int # Gnu extension if in C library +O_DIRECT: int # Gnu extension if in C library +O_DIRECTORY: int # Gnu extension if in C library +O_NOFOLLOW: int # Gnu extension if in C library +O_NOATIME: int # Gnu extension if in C library +if sys.version_info >= (3, 4): + O_PATH: int # Gnu extension if in C library + O_TMPFILE: int # Gnu extension if in C library +O_LARGEFILE: int # Gnu extension if in C library + +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +linesep: str +devnull: str +name: str + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +class _Environ(MutableMapping[AnyStr, AnyStr], Generic[AnyStr]): + def copy(self) -> Dict[AnyStr, AnyStr]: ... + def __delitem__(self, key: AnyStr) -> None: ... + def __getitem__(self, key: AnyStr) -> AnyStr: ... + def __setitem__(self, key: AnyStr, value: AnyStr) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __len__(self) -> int: ... + +environ: _Environ[str] +if sys.version_info >= (3, 2): + environb: _Environ[bytes] + +if sys.platform != 'win32': + confstr_names: Dict[str, int] + pathconf_names: Dict[str, int] + sysconf_names: Dict[str, int] + + EX_OK: int + EX_USAGE: int + EX_DATAERR: int + EX_NOINPUT: int + EX_NOUSER: int + EX_NOHOST: int + EX_UNAVAILABLE: int + EX_SOFTWARE: int + EX_OSERR: int + EX_OSFILE: int + EX_CANTCREAT: int + EX_IOERR: int + EX_TEMPFAIL: int + EX_PROTOCOL: int + EX_NOPERM: int + EX_CONFIG: int + EX_NOTFOUND: int + +P_NOWAIT: int +P_NOWAITO: int +P_WAIT: int +if sys.platform == 'win32': + P_DETACH: int + P_OVERLAY: int + +# wait()/waitpid() options +if sys.platform != 'win32': + WNOHANG: int # Unix only + WCONTINUED: int # some Unix systems + WUNTRACED: int # Unix only + +TMP_MAX: int # Undocumented, but used by tempfile + +# ----- os classes (structures) ----- +class stat_result: + # For backward compatibility, the return value of stat() is also + # accessible as a tuple of at least 10 integers giving the most important + # (and portable) members of the stat structure, in the order st_mode, + # st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, + # st_ctime. More items may be added at the end by some implementations. + + st_mode: int # protection bits, + st_ino: int # inode number, + st_dev: int # device, + st_nlink: int # number of hard links, + st_uid: int # user id of owner, + st_gid: int # group id of owner, + st_size: int # size of file, in bytes, + st_atime: float # time of most recent access, + st_mtime: float # time of most recent content modification, + st_ctime: float # platform dependent (time of most recent metadata change on Unix, or the time of creation on Windows) + st_atime_ns: int # time of most recent access, in nanoseconds + st_mtime_ns: int # time of most recent content modification in nanoseconds + st_ctime_ns: int # platform dependent (time of most recent metadata change on Unix, or the time of creation on Windows) in nanoseconds + + def __getitem__(self, i: int) -> int: ... + + # not documented + def __init__(self, tuple: Tuple[int, ...]) -> None: ... + + # On some Unix systems (such as Linux), the following attributes may also + # be available: + st_blocks: int # number of blocks allocated for file + st_blksize: int # filesystem blocksize + st_rdev: int # type of device if an inode device + st_flags: int # user defined flags for file + + # On other Unix systems (such as FreeBSD), the following attributes may be + # available (but may be only filled out if root tries to use them): + st_gen: int # file generation number + st_birthtime: int # time of file creation + + # On Mac OS systems, the following attributes may also be available: + st_rsize: int + st_creator: int + st_type: int + +if sys.version_info >= (3, 6): + from builtins import _PathLike as PathLike # See comment in builtins + +_PathType = path._PathType +if sys.version_info >= (3, 3): + _FdOrPathType = Union[int, _PathType] +else: + _FdOrPathType = _PathType + +if sys.version_info >= (3, 6): + class DirEntry(PathLike[AnyStr]): + # This is what the scandir interator yields + # The constructor is hidden + + name: AnyStr + path: AnyStr + def inode(self) -> int: ... + def is_dir(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_file(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_symlink(self) -> bool: ... + def stat(self, *, follow_symlinks: bool = ...) -> stat_result: ... + + def __fspath__(self) -> AnyStr: ... +elif sys.version_info >= (3, 5): + class DirEntry(Generic[AnyStr]): + # This is what the scandir interator yields + # The constructor is hidden + + name: AnyStr + path: AnyStr + def inode(self) -> int: ... + def is_dir(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_file(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_symlink(self) -> bool: ... + def stat(self, *, follow_symlinks: bool = ...) -> stat_result: ... + + +if sys.platform != 'win32': + class statvfs_result: # Unix only + f_bsize: int + f_frsize: int + f_blocks: int + f_bfree: int + f_bavail: int + f_files: int + f_ffree: int + f_favail: int + f_flag: int + f_namemax: int + +# ----- os function stubs ----- +if sys.version_info >= (3, 6): + def fsencode(filename: Union[str, bytes, PathLike]) -> bytes: ... +else: + def fsencode(filename: Union[str, bytes]) -> bytes: ... + +if sys.version_info >= (3, 6): + def fsdecode(filename: Union[str, bytes, PathLike]) -> str: ... +else: + def fsdecode(filename: Union[str, bytes]) -> str: ... + +if sys.version_info >= (3, 6): + @overload + def fspath(path: str) -> str: ... + @overload + def fspath(path: bytes) -> bytes: ... + @overload + def fspath(path: PathLike) -> Any: ... + +def get_exec_path(env: Optional[Mapping[str, str]] = ...) -> List[str]: ... +# NOTE: get_exec_path(): returns List[bytes] when env not None +def getlogin() -> str: ... +def getpid() -> int: ... +def getppid() -> int: ... +def strerror(code: int) -> str: ... +def umask(mask: int) -> int: ... + +if sys.platform != 'win32': + # Unix only + def ctermid() -> str: ... + def getegid() -> int: ... + def geteuid() -> int: ... + def getgid() -> int: ... + if sys.version_info >= (3, 3): + def getgrouplist(user: str, gid: int) -> List[int]: ... + def getgroups() -> List[int]: ... # Unix only, behaves differently on Mac + def initgroups(username: str, gid: int) -> None: ... + def getpgid(pid: int) -> int: ... + def getpgrp() -> int: ... + if sys.version_info >= (3, 3): + def getpriority(which: int, who: int) -> int: ... + def setpriority(which: int, who: int, priority: int) -> None: ... + def getresuid() -> Tuple[int, int, int]: ... + def getresgid() -> Tuple[int, int, int]: ... + def getuid() -> int: ... + def setegid(egid: int) -> None: ... + def seteuid(euid: int) -> None: ... + def setgid(gid: int) -> None: ... + def setgroups(groups: Sequence[int]) -> None: ... + def setpgrp() -> None: ... + def setpgid(pid: int, pgrp: int) -> None: ... + def setregid(rgid: int, egid: int) -> None: ... + def setresgid(rgid: int, egid: int, sgid: int) -> None: ... + def setresuid(ruid: int, euid: int, suid: int) -> None: ... + def setreuid(ruid: int, euid: int) -> None: ... + def getsid(pid: int) -> int: ... + def setsid() -> None: ... + def setuid(uid: int) -> None: ... + if sys.version_info >= (3, 3): + from posix import uname_result + def uname() -> uname_result: ... + else: + def uname() -> Tuple[str, str, str, str, str]: ... + +@overload +def getenv(key: Text) -> Optional[str]: ... +@overload +def getenv(key: Text, default: _T) -> Union[str, _T]: ... +def getenvb(key: bytes, default: bytes = ...) -> bytes: ... +def putenv(key: Union[bytes, Text], value: Union[bytes, Text]) -> None: ... +def unsetenv(key: Union[bytes, Text]) -> None: ... + +# Return IO or TextIO +def fdopen(fd: int, mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: str = ..., newline: str = ..., closefd: bool = ...) -> Any: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def device_encoding(fd: int) -> Optional[str]: ... +def dup(fd: int) -> int: ... +if sys.version_info >= (3, 7): + def dup2(fd: int, fd2: int, inheritable: bool = ...) -> int: ... +elif sys.version_info >= (3, 4): + def dup2(fd: int, fd2: int, inheritable: bool = ...) -> None: ... +else: + def dup2(fd: int, fd2: int) -> None: ... +def fstat(fd: int) -> stat_result: ... +def fsync(fd: int) -> None: ... +def lseek(fd: int, pos: int, how: int) -> int: ... +if sys.version_info >= (3, 3): + def open(file: _PathType, flags: int, mode: int = ..., *, dir_fd: Optional[int] = ...) -> int: ... +else: + def open(file: _PathType, flags: int, mode: int = ...) -> int: ... +def pipe() -> Tuple[int, int]: ... +def read(fd: int, n: int) -> bytes: ... + +if sys.platform != 'win32': + # Unix only + def fchmod(fd: int, mode: int) -> None: ... + def fchown(fd: int, uid: int, gid: int) -> None: ... + def fdatasync(fd: int) -> None: ... # Unix only, not Mac + def fpathconf(fd: int, name: Union[str, int]) -> int: ... + def fstatvfs(fd: int) -> statvfs_result: ... + def ftruncate(fd: int, length: int) -> None: ... + if sys.version_info >= (3, 5): + def get_blocking(fd: int) -> bool: ... + def set_blocking(fd: int, blocking: bool) -> None: ... + def isatty(fd: int) -> bool: ... + if sys.version_info >= (3, 3): + def lockf(__fd: int, __cmd: int, __length: int) -> None: ... + def openpty() -> Tuple[int, int]: ... # some flavors of Unix + if sys.version_info >= (3, 3): + def pipe2(flags: int) -> Tuple[int, int]: ... # some flavors of Unix + def posix_fallocate(fd: int, offset: int, length: int) -> None: ... + def posix_fadvise(fd: int, offset: int, length: int, advice: int) -> None: ... + def pread(fd: int, buffersize: int, offset: int) -> bytes: ... + def pwrite(fd: int, string: bytes, offset: int) -> int: ... + @overload + def sendfile(__out_fd: int, __in_fd: int, offset: Optional[int], count: int) -> int: ... + @overload + def sendfile(__out_fd: int, __in_fd: int, offset: int, count: int, + headers: Sequence[bytes] = ..., trailers: Sequence[bytes] = ..., flags: int = ...) -> int: ... # FreeBSD and Mac OS X only + def readv(fd: int, buffers: Sequence[bytearray]) -> int: ... + def writev(fd: int, buffers: Sequence[bytes]) -> int: ... + +terminal_size = NamedTuple('terminal_size', [('columns', int), ('lines', int)]) +def get_terminal_size(fd: int = ...) -> terminal_size: ... + +if sys.version_info >= (3, 4): + def get_inheritable(fd: int) -> bool: ... + def set_inheritable(fd: int, inheritable: bool) -> None: ... + +if sys.platform != 'win32': + # Unix only + def tcgetpgrp(fd: int) -> int: ... + def tcsetpgrp(fd: int, pg: int) -> None: ... + def ttyname(fd: int) -> str: ... +def write(fd: int, string: bytes) -> int: ... +if sys.version_info >= (3, 3): + def access(path: _FdOrPathType, mode: int, *, dir_fd: Optional[int] = ..., + effective_ids: bool = ..., follow_symlinks: bool = ...) -> bool: ... +else: + def access(path: _PathType, mode: int) -> bool: ... +def chdir(path: _FdOrPathType) -> None: ... +def fchdir(fd: int) -> None: ... +def getcwd() -> str: ... +def getcwdb() -> bytes: ... +if sys.version_info >= (3, 3): + def chmod(path: _FdOrPathType, mode: int, *, dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... + if sys.platform != 'win32': + def chflags(path: _PathType, flags: int, follow_symlinks: bool = ...) -> None: ... # some flavors of Unix + def chown(path: _FdOrPathType, uid: int, gid: int, *, dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... # Unix only +else: + def chmod(path: _PathType, mode: int) -> None: ... + if sys.platform != 'win32': + def chflags(path: _PathType, flags: int) -> None: ... # Some flavors of Unix + def chown(path: _PathType, uid: int, gid: int) -> None: ... # Unix only +if sys.platform != 'win32': + # Unix only + def chroot(path: _PathType) -> None: ... + def lchflags(path: _PathType, flags: int) -> None: ... + def lchmod(path: _PathType, mode: int) -> None: ... + def lchown(path: _PathType, uid: int, gid: int) -> None: ... +if sys.version_info >= (3, 3): + def link(src: _PathType, link_name: _PathType, *, src_dir_fd: Optional[int] = ..., + dst_dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... +else: + def link(src: _PathType, link_name: _PathType) -> None: ... + +if sys.version_info >= (3, 6): + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + @overload + def listdir(path: int) -> List[str]: ... + @overload + def listdir(path: PathLike[str]) -> List[str]: ... +elif sys.version_info >= (3, 3): + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + @overload + def listdir(path: int) -> List[str]: ... +else: + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + +if sys.version_info >= (3, 3): + def lstat(path: _PathType, *, dir_fd: Optional[int] = ...) -> stat_result: ... + def mkdir(path: _PathType, mode: int = ..., *, dir_fd: Optional[int] = ...) -> None: ... + if sys.platform != 'win32': + def mkfifo(path: _PathType, mode: int = ..., *, dir_fd: Optional[int] = ...) -> None: ... # Unix only +else: + def lstat(path: _PathType) -> stat_result: ... + def mkdir(path: _PathType, mode: int = ...) -> None: ... + if sys.platform != 'win32': + def mkfifo(path: _PathType, mode: int = ...) -> None: ... # Unix only +if sys.version_info >= (3, 4): + def makedirs(name: _PathType, mode: int = ..., exist_ok: bool = ...) -> None: ... +else: + def makedirs(path: _PathType, mode: int = ..., exist_ok: bool = ...) -> None: ... +if sys.version_info >= (3, 4): + def mknod(path: _PathType, mode: int = ..., device: int = ..., + *, dir_fd: Optional[int] = ...) -> None: ... +elif sys.version_info >= (3, 3): + def mknod(filename: _PathType, mode: int = ..., device: int = ..., + *, dir_fd: Optional[int] = ...) -> None: ... +else: + def mknod(filename: _PathType, mode: int = ..., device: int = ...) -> None: ... +def major(device: int) -> int: ... +def minor(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +if sys.platform != 'win32': + def pathconf(path: _FdOrPathType, name: Union[str, int]) -> int: ... # Unix only +if sys.version_info >= (3, 6): + def readlink(path: Union[AnyStr, PathLike[AnyStr]], *, dir_fd: Optional[int] = ...) -> AnyStr: ... +elif sys.version_info >= (3, 3): + def readlink(path: AnyStr, *, dir_fd: Optional[int] = ...) -> AnyStr: ... +else: + def readlink(path: AnyStr) -> AnyStr: ... +if sys.version_info >= (3, 3): + def remove(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... +else: + def remove(path: _PathType) -> None: ... +if sys.version_info >= (3, 4): + def removedirs(name: _PathType) -> None: ... +else: + def removedirs(path: _PathType) -> None: ... +if sys.version_info >= (3, 3): + def rename(src: _PathType, dst: _PathType, *, + src_dir_fd: Optional[int] = ..., dst_dir_fd: Optional[int] = ...) -> None: ... +else: + def rename(src: _PathType, dst: _PathType) -> None: ... +def renames(old: _PathType, new: _PathType) -> None: ... +if sys.version_info >= (3, 3): + def replace(src: _PathType, dst: _PathType, *, + src_dir_fd: Optional[int] = ..., dst_dir_fd: Optional[int] = ...) -> None: ... + def rmdir(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... +else: + def rmdir(path: _PathType) -> None: ... +if sys.version_info >= (3, 7): + class _ScandirIterator(Iterator[DirEntry[AnyStr]], ContextManager[_ScandirIterator[AnyStr]]): + def __next__(self) -> DirEntry[AnyStr]: ... + def close(self) -> None: ... + @overload + def scandir() -> _ScandirIterator[str]: ... + @overload + def scandir(path: int) -> _ScandirIterator[str]: ... + @overload + def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> _ScandirIterator[AnyStr]: ... +elif sys.version_info >= (3, 6): + class _ScandirIterator(Iterator[DirEntry[AnyStr]], ContextManager[_ScandirIterator[AnyStr]]): + def __next__(self) -> DirEntry[AnyStr]: ... + def close(self) -> None: ... + @overload + def scandir() -> _ScandirIterator[str]: ... + @overload + def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> _ScandirIterator[AnyStr]: ... +elif sys.version_info >= (3, 5): + @overload + def scandir() -> Iterator[DirEntry[str]]: ... + @overload + def scandir(path: AnyStr) -> Iterator[DirEntry[AnyStr]]: ... +if sys.version_info >= (3, 3): + def stat(path: _FdOrPathType, *, dir_fd: Optional[int] = ..., + follow_symlinks: bool = ...) -> stat_result: ... +else: + def stat(path: _PathType) -> stat_result: ... +if sys.version_info < (3, 7): + @overload + def stat_float_times() -> bool: ... + @overload + def stat_float_times(__newvalue: bool) -> None: ... +if sys.platform != 'win32': + def statvfs(path: _FdOrPathType) -> statvfs_result: ... # Unix only +if sys.version_info >= (3, 3): + def symlink(source: _PathType, link_name: _PathType, + target_is_directory: bool = ..., *, dir_fd: Optional[int] = ...) -> None: ... + if sys.platform != 'win32': + def sync() -> None: ... # Unix only + def truncate(path: _FdOrPathType, length: int) -> None: ... # Unix only up to version 3.4 + def unlink(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... + def utime(path: _FdOrPathType, times: Optional[Union[Tuple[int, int], Tuple[float, float]]] = ..., *, + ns: Tuple[int, int] = ..., dir_fd: Optional[int] = ..., + follow_symlinks: bool = ...) -> None: ... +else: + def symlink(source: _PathType, link_name: _PathType, + target_is_directory: bool = ...) -> None: + ... # final argument in Windows only + def unlink(path: _PathType) -> None: ... + def utime(path: _PathType, times: Optional[Tuple[float, float]]) -> None: ... + +if sys.version_info >= (3, 6): + def walk(top: Union[AnyStr, PathLike[AnyStr]], topdown: bool = ..., + onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +else: + def walk(top: AnyStr, topdown: bool = ..., onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +if sys.platform != 'win32' and sys.version_info >= (3, 3): + if sys.version_info >= (3, 7): + @overload + def fwalk(top: Union[str, PathLike[str]] = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + @overload + def fwalk(top: bytes, topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[bytes, List[bytes], List[bytes], int]]: ... + elif sys.version_info >= (3, 6): + def fwalk(top: Union[str, PathLike[str]] = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + else: + def fwalk(top: str = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + def getxattr(path: _FdOrPathType, attribute: _PathType, *, follow_symlinks: bool = ...) -> bytes: ... # Linux only + def listxattr(path: _FdOrPathType, *, follow_symlinks: bool = ...) -> List[str]: ... # Linux only + def removexattr(path: _FdOrPathType, attribute: _PathType, *, follow_symlinks: bool = ...) -> None: ... # Linux only + def setxattr(path: _FdOrPathType, attribute: _PathType, value: bytes, flags: int = ..., *, + follow_symlinks: bool = ...) -> None: ... # Linux only + +def abort() -> NoReturn: ... +# These are defined as execl(file, *args) but the first *arg is mandatory. +def execl(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... +def execlp(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... + +# These are: execle(file, *args, env) but env is pulled from the last element of the args. +def execle(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... +def execlpe(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... + +# The docs say `args: tuple or list of strings` +# The implementation enforces tuple or list so we can't use Sequence. +_ExecVArgs = Union[Tuple[Union[bytes, Text], ...], List[bytes], List[Text], List[Union[bytes, Text]]] +def execv(path: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execve(path: _FdOrPathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... +def execvp(file: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execvpe(file: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... + +def _exit(n: int) -> NoReturn: ... +def kill(pid: int, sig: int) -> None: ... +if sys.platform != 'win32': + # Unix only + def fork() -> int: ... + def forkpty() -> Tuple[int, int]: ... # some flavors of Unix + def killpg(pgid: int, sig: int) -> None: ... + def nice(increment: int) -> int: ... + def plock(op: int) -> None: ... # ???op is int? + +if sys.version_info >= (3, 0): + class _wrap_close(_TextIOWrapper): + def close(self) -> Optional[int]: ... # type: ignore + def popen(command: str, mode: str = ..., buffering: int = ...) -> _wrap_close: ... +else: + class _wrap_close(IO[Text]): + def close(self) -> Optional[int]: ... + def popen(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> _wrap_close: ... + def popen2(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text]]: ... + def popen3(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text], IO[Text]]: ... + def popen4(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text]]: ... + +def spawnl(mode: int, path: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... +def spawnle(mode: int, path: _PathType, arg0: Union[bytes, Text], + *args: Any) -> int: ... # Imprecise sig +def spawnv(mode: int, path: _PathType, args: List[Union[bytes, Text]]) -> int: ... +def spawnve(mode: int, path: _PathType, args: List[Union[bytes, Text]], + env: Mapping[str, str]) -> int: ... +def system(command: _PathType) -> int: ... +if sys.version_info >= (3, 3): + from posix import times_result + def times() -> times_result: ... +else: + def times() -> Tuple[float, float, float, float, float]: ... +def waitpid(pid: int, options: int) -> Tuple[int, int]: ... + +if sys.platform == 'win32': + def startfile(path: _PathType, operation: Optional[str] = ...) -> None: ... +else: + # Unix only + def spawnlp(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... + def spawnlpe(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Any) -> int: ... # Imprecise signature + def spawnvp(mode: int, file: _PathType, args: List[Union[bytes, Text]]) -> int: ... + def spawnvpe(mode: int, file: _PathType, args: List[Union[bytes, Text]], env: Mapping[str, str]) -> int: ... + def wait() -> Tuple[int, int]: ... # Unix only + if sys.version_info >= (3, 3): + from posix import waitid_result + def waitid(idtype: int, ident: int, options: int) -> waitid_result: ... + def wait3(options: int) -> Tuple[int, int, Any]: ... + def wait4(pid: int, options: int) -> Tuple[int, int, Any]: ... + def WCOREDUMP(status: int) -> bool: ... + def WIFCONTINUED(status: int) -> bool: ... + def WIFSTOPPED(status: int) -> bool: ... + def WIFSIGNALED(status: int) -> bool: ... + def WIFEXITED(status: int) -> bool: ... + def WEXITSTATUS(status: int) -> int: ... + def WSTOPSIG(status: int) -> int: ... + def WTERMSIG(status: int) -> int: ... + +if sys.platform != 'win32' and sys.version_info >= (3, 3): + from posix import sched_param + def sched_get_priority_min(policy: int) -> int: ... # some flavors of Unix + def sched_get_priority_max(policy: int) -> int: ... # some flavors of Unix + def sched_setscheduler(pid: int, policy: int, param: sched_param) -> None: ... # some flavors of Unix + def sched_getscheduler(pid: int) -> int: ... # some flavors of Unix + def sched_setparam(pid: int, param: sched_param) -> None: ... # some flavors of Unix + def sched_getparam(pid: int) -> sched_param: ... # some flavors of Unix + def sched_rr_get_interval(pid: int) -> float: ... # some flavors of Unix + def sched_yield() -> None: ... # some flavors of Unix + def sched_setaffinity(pid: int, mask: Iterable[int]) -> None: ... # some flavors of Unix + def sched_getaffinity(pid: int) -> Set[int]: ... # some flavors of Unix + +if sys.version_info >= (3, 4): + def cpu_count() -> Optional[int]: ... +if sys.platform != 'win32': + # Unix only + def confstr(name: Union[str, int]) -> Optional[str]: ... + def getloadavg() -> Tuple[float, float, float]: ... + def sysconf(name: Union[str, int]) -> int: ... +if sys.version_info >= (3, 6): + def getrandom(size: int, flags: int = ...) -> bytes: ... + def urandom(size: int) -> bytes: ... +else: + def urandom(n: int) -> bytes: ... + +if sys.version_info >= (3, 7): + def register_at_fork(func: Callable[..., object], when: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/path.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/os/path.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pathlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pathlib.pyi new file mode 100644 index 0000000..42968fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pathlib.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generator, IO, Optional, Sequence, Tuple, Type, TypeVar, Union, List +from types import TracebackType +import os +import sys + +_P = TypeVar('_P', bound='PurePath') + +if sys.version_info >= (3, 6): + _PurePathBase = os.PathLike[str] +else: + _PurePathBase = object + +class PurePath(_PurePathBase): + parts: Tuple[str, ...] + drive: str + root: str + anchor: str + name: str + suffix: str + suffixes: List[str] + stem: str + if sys.version_info < (3, 5): + def __init__(self, *pathsegments: str) -> None: ... + elif sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath]) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]]) -> _P: ... + def __hash__(self) -> int: ... + def __lt__(self, other: PurePath) -> bool: ... + def __le__(self, other: PurePath) -> bool: ... + def __gt__(self, other: PurePath) -> bool: ... + def __ge__(self, other: PurePath) -> bool: ... + def __truediv__(self: _P, key: Union[str, PurePath]) -> _P: ... + if sys.version_info < (3,): + def __div__(self: _P, key: Union[str, PurePath]) -> _P: ... + def __bytes__(self) -> bytes: ... + def as_posix(self) -> str: ... + def as_uri(self) -> str: ... + def is_absolute(self) -> bool: ... + def is_reserved(self) -> bool: ... + def match(self, path_pattern: str) -> bool: ... + def relative_to(self: _P, *other: Union[str, PurePath]) -> _P: ... + def with_name(self: _P, name: str) -> _P: ... + def with_suffix(self: _P, suffix: str) -> _P: ... + def joinpath(self: _P, *other: Union[str, PurePath]) -> _P: ... + + @property + def parents(self: _P) -> Sequence[_P]: ... + @property + def parent(self: _P) -> _P: ... + +class PurePosixPath(PurePath): ... +class PureWindowsPath(PurePath): ... + +class Path(PurePath): + def __enter__(self) -> Path: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Optional[bool]: ... + @classmethod + def cwd(cls: Type[_P]) -> _P: ... + def stat(self) -> os.stat_result: ... + def chmod(self, mode: int) -> None: ... + def exists(self) -> bool: ... + def glob(self, pattern: str) -> Generator[Path, None, None]: ... + def group(self) -> str: ... + def is_dir(self) -> bool: ... + def is_file(self) -> bool: ... + def is_symlink(self) -> bool: ... + def is_socket(self) -> bool: ... + def is_fifo(self) -> bool: ... + def is_block_device(self) -> bool: ... + def is_char_device(self) -> bool: ... + def iterdir(self) -> Generator[Path, None, None]: ... + def lchmod(self, mode: int) -> None: ... + def lstat(self) -> os.stat_result: ... + if sys.version_info < (3, 5): + def mkdir(self, mode: int = ..., + parents: bool = ...) -> None: ... + else: + def mkdir(self, mode: int = ..., parents: bool = ..., + exist_ok: bool = ...) -> None: ... + def open(self, mode: str = ..., buffering: int = ..., + encoding: Optional[str] = ..., errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + def owner(self) -> str: ... + def rename(self, target: Union[str, PurePath]) -> None: ... + def replace(self, target: Union[str, PurePath]) -> None: ... + if sys.version_info < (3, 6): + def resolve(self: _P) -> _P: ... + else: + def resolve(self: _P, strict: bool = ...) -> _P: ... + def rglob(self, pattern: str) -> Generator[Path, None, None]: ... + def rmdir(self) -> None: ... + def symlink_to(self, target: Union[str, Path], + target_is_directory: bool = ...) -> None: ... + def touch(self, mode: int = ..., exist_ok: bool = ...) -> None: ... + def unlink(self) -> None: ... + + if sys.version_info >= (3, 5): + @classmethod + def home(cls: Type[_P]) -> _P: ... + if sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath], + **kwargs: Any) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]], + **kwargs: Any) -> _P: ... + + def absolute(self: _P) -> _P: ... + def expanduser(self: _P) -> _P: ... + def read_bytes(self) -> bytes: ... + def read_text(self, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> str: ... + def samefile(self, other_path: Union[str, bytes, int, Path]) -> bool: ... + def write_bytes(self, data: bytes) -> int: ... + def write_text(self, data: str, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> int: ... + + +class PosixPath(Path, PurePosixPath): ... +class WindowsPath(Path, PureWindowsPath): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pipes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pipes.pyi new file mode 100644 index 0000000..658373e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/pipes.pyi @@ -0,0 +1,19 @@ +# Stubs for pipes + +# Based on http://docs.python.org/3.5/library/pipes.html + +import os + +class Template: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def clone(self) -> Template: ... + def debug(self, flag: bool) -> None: ... + def append(self, cmd: str, kind: str) -> None: ... + def prepend(self, cmd: str, kind: str) -> None: ... + def open(self, file: str, rw: str) -> os._wrap_close: ... + def copy(self, file: str, rw: str) -> os._wrap_close: ... + +# Not documented, but widely used. +# Documented as shlex.quote since 3.3. +def quote(s: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/platform.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/platform.pyi new file mode 100644 index 0000000..728e259 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/platform.pyi @@ -0,0 +1,34 @@ +# Stubs for platform (Python 3.5) + +from os import devnull as DEV_NULL +from os import popen +from typing import Tuple, NamedTuple + +def libc_ver(executable: str = ..., lib: str = ..., version: str = ..., chunksize: int = ...) -> Tuple[str, str]: ... +def linux_distribution(distname: str = ..., version: str = ..., id: str = ..., supported_dists: Tuple[str, ...] = ..., full_distribution_name: bool = ...) -> Tuple[str, str, str]: ... +def dist(distname: str = ..., version: str = ..., id: str = ..., supported_dists: Tuple[str, ...] = ...) -> Tuple[str, str, str]: ... +def win32_ver(release: str = ..., version: str = ..., csd: str = ..., ptype: str = ...) -> Tuple[str, str, str, str]: ... +def mac_ver(release: str = ..., versioninfo: Tuple[str, str, str] = ..., machine: str = ...) -> Tuple[str, Tuple[str, str, str], str]: ... +def java_ver(release: str = ..., vendor: str = ..., vminfo: Tuple[str, str, str] = ..., osinfo: Tuple[str, str, str] = ...) -> Tuple[str, str, Tuple[str, str, str], Tuple[str, str, str]]: ... +def system_alias(system: str, release: str, version: str) -> Tuple[str, str, str]: ... +def architecture(executable: str = ..., bits: str = ..., linkage: str = ...) -> Tuple[str, str]: ... + +uname_result = NamedTuple('uname_result', [('system', str), ('node', str), ('release', str), ('version', str), ('machine', str), ('processor', str)]) + +def uname() -> uname_result: ... +def system() -> str: ... +def node() -> str: ... +def release() -> str: ... +def version() -> str: ... +def machine() -> str: ... +def processor() -> str: ... + +def python_implementation() -> str: ... +def python_version() -> str: ... +def python_version_tuple() -> Tuple[str, str, str]: ... +def python_branch() -> str: ... +def python_revision() -> str: ... +def python_build() -> Tuple[str, str]: ... +def python_compiler() -> str: ... + +def platform(aliased: bool = ..., terse: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/posix.pyi new file mode 100644 index 0000000..6902e5f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/posix.pyi @@ -0,0 +1,112 @@ +# Stubs for posix + +# NOTE: These are incomplete! + +import sys +from typing import NamedTuple, Tuple + +from os import stat_result as stat_result + +uname_result = NamedTuple('uname_result', [ + ('sysname', str), + ('nodename', str), + ('release', str), + ('version', str), + ('machine', str), +]) + +times_result = NamedTuple('times_result', [ + ('user', float), + ('system', float), + ('children_user', float), + ('children_system', float), + ('elapsed', float), +]) + +waitid_result = NamedTuple('waitid_result', [ + ('si_pid', int), + ('si_uid', int), + ('si_signo', int), + ('si_status', int), + ('si_code', int), +]) + +sched_param = NamedTuple('sched_param', [ + ('sched_priority', int), +]) + + +EX_CANTCREAT: int +EX_CONFIG: int +EX_DATAERR: int +EX_IOERR: int +EX_NOHOST: int +EX_NOINPUT: int +EX_NOPERM: int +EX_NOTFOUND: int +EX_NOUSER: int +EX_OK: int +EX_OSERR: int +EX_OSFILE: int +EX_PROTOCOL: int +EX_SOFTWARE: int +EX_TEMPFAIL: int +EX_UNAVAILABLE: int +EX_USAGE: int + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +if sys.version_info >= (3, 6): + GRND_NONBLOCK: int + GRND_RANDOM: int +NGROUPS_MAX: int + +O_APPEND: int +if sys.version_info >= (3, 4): + O_ACCMODE: int +O_ASYNC: int +O_CREAT: int +O_DIRECT: int +O_DIRECTORY: int +O_DSYNC: int +O_EXCL: int +O_LARGEFILE: int +O_NDELAY: int +O_NOATIME: int +O_NOCTTY: int +O_NOFOLLOW: int +O_NONBLOCK: int +O_RDONLY: int +O_RDWR: int +O_RSYNC: int +O_SYNC: int +O_TRUNC: int +O_WRONLY: int + +ST_APPEND: int +ST_MANDLOCK: int +ST_NOATIME: int +ST_NODEV: int +ST_NODIRATIME: int +ST_NOEXEC: int +ST_NOSUID: int +ST_RDONLY: int +ST_RELATIME: int +ST_SYNCHRONOUS: int +ST_WRITE: int + +TMP_MAX: int +WCONTINUED: int +WCOREDUMP: int +WEXITSTATUS: int +WIFCONTINUED: int +WIFEXITED: int +WIFSIGNALED: int +WIFSTOPPED: int +WNOHANG: int +WSTOPSIG: int +WTERMSIG: int +WUNTRACED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/queue.pyi new file mode 100644 index 0000000..9874524 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/queue.pyi @@ -0,0 +1,32 @@ +# Stubs for queue + +# NOTE: These are incomplete! + +from collections import deque +from typing import Any, TypeVar, Generic, Optional + +_T = TypeVar('_T') + +class Empty(Exception): ... +class Full(Exception): ... + +class Queue(Generic[_T]): + maxsize: int + queue: deque # undocumented + def __init__(self, maxsize: int = ...) -> None: ... + def _init(self, maxsize: int) -> None: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def get_nowait(self) -> _T: ... + def _get(self) -> _T: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def put_nowait(self, item: _T) -> None: ... + def _put(self, item: _T) -> None: ... + def join(self) -> None: ... + def qsize(self) -> int: ... + def _qsize(self) -> int: ... + def task_done(self) -> None: ... + +class PriorityQueue(Queue[_T]): ... +class LifoQueue(Queue[_T]): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/random.pyi new file mode 100644 index 0000000..35ee634 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/random.pyi @@ -0,0 +1,71 @@ +# Stubs for random +# Ron Murawski +# Updated by Jukka Lehtosalo + +# based on http://docs.python.org/3.2/library/random.html + +# ----- random classes ----- + +import _random +import sys +from typing import ( + Any, TypeVar, Sequence, List, Callable, AbstractSet, Union, Optional +) + +_T = TypeVar('_T') + +class Random(_random.Random): + def __init__(self, x: Any = ...) -> None: ... + def seed(self, a: Any = ..., version: int = ...) -> None: ... + def getstate(self) -> tuple: ... + def setstate(self, state: tuple) -> None: ... + def getrandbits(self, k: int) -> int: ... + def randrange(self, start: int, stop: Union[int, None] = ..., step: int = ...) -> int: ... + def randint(self, a: int, b: int) -> int: ... + def choice(self, seq: Sequence[_T]) -> _T: ... + if sys.version_info >= (3, 6): + def choices(self, population: Sequence[_T], weights: Optional[Sequence[float]] = ..., *, cum_weights: Optional[Sequence[float]] = ..., k: int = ...) -> List[_T]: ... + def shuffle(self, x: List[Any], random: Union[Callable[[], float], None] = ...) -> None: ... + def sample(self, population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... + def random(self) -> float: ... + def uniform(self, a: float, b: float) -> float: ... + def triangular(self, low: float = ..., high: float = ..., mode: float = ...) -> float: ... + def betavariate(self, alpha: float, beta: float) -> float: ... + def expovariate(self, lambd: float) -> float: ... + def gammavariate(self, alpha: float, beta: float) -> float: ... + def gauss(self, mu: float, sigma: float) -> float: ... + def lognormvariate(self, mu: float, sigma: float) -> float: ... + def normalvariate(self, mu: float, sigma: float) -> float: ... + def vonmisesvariate(self, mu: float, kappa: float) -> float: ... + def paretovariate(self, alpha: float) -> float: ... + def weibullvariate(self, alpha: float, beta: float) -> float: ... + +# SystemRandom is not implemented for all OS's; good on Windows & Linux +class SystemRandom(Random): + ... + +# ----- random function stubs ----- +def seed(a: Any = ..., version: int = ...) -> None: ... +def getstate() -> object: ... +def setstate(state: object) -> None: ... +def getrandbits(k: int) -> int: ... +def randrange(start: int, stop: Union[None, int] = ..., step: int = ...) -> int: ... +def randint(a: int, b: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +if sys.version_info >= (3, 6): + def choices(population: Sequence[_T], weights: Optional[Sequence[float]] = ..., *, cum_weights: Optional[Sequence[float]] = ..., k: int = ...) -> List[_T]: ... +def shuffle(x: List[Any], random: Union[Callable[[], float], None] = ...) -> None: ... +def sample(population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... +def random() -> float: ... +def uniform(a: float, b: float) -> float: ... +def triangular(low: float = ..., high: float = ..., + mode: float = ...) -> float: ... +def betavariate(alpha: float, beta: float) -> float: ... +def expovariate(lambd: float) -> float: ... +def gammavariate(alpha: float, beta: float) -> float: ... +def gauss(mu: float, sigma: float) -> float: ... +def lognormvariate(mu: float, sigma: float) -> float: ... +def normalvariate(mu: float, sigma: float) -> float: ... +def vonmisesvariate(mu: float, kappa: float) -> float: ... +def paretovariate(alpha: float) -> float: ... +def weibullvariate(alpha: float, beta: float) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/re.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/re.pyi new file mode 100644 index 0000000..a75bfe6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/re.pyi @@ -0,0 +1,155 @@ +# Stubs for re +# Ron Murawski +# 'bytes' support added by Jukka Lehtosalo + +# based on: http://docs.python.org/3.2/library/re.html +# and http://hg.python.org/cpython/file/618ea5612e83/Lib/re.py + +import sys +from typing import ( + List, Iterator, overload, Callable, Tuple, Sequence, Dict, + Generic, AnyStr, Match, Pattern, Any, Optional, Union +) + +# ----- re variables and constants ----- +if sys.version_info >= (3, 6): + import enum + class RegexFlag(enum.IntFlag): + A = 0 + ASCII = 0 + DEBUG = 0 + I = 0 + IGNORECASE = 0 + L = 0 + LOCALE = 0 + M = 0 + MULTILINE = 0 + S = 0 + DOTALL = 0 + X = 0 + VERBOSE = 0 + U = 0 + UNICODE = 0 + T = 0 + TEMPLATE = 0 + + A = RegexFlag.A + ASCII = RegexFlag.ASCII + DEBUG = RegexFlag.DEBUG + I = RegexFlag.I + IGNORECASE = RegexFlag.IGNORECASE + L = RegexFlag.L + LOCALE = RegexFlag.LOCALE + M = RegexFlag.M + MULTILINE = RegexFlag.MULTILINE + S = RegexFlag.S + DOTALL = RegexFlag.DOTALL + X = RegexFlag.X + VERBOSE = RegexFlag.VERBOSE + U = RegexFlag.U + UNICODE = RegexFlag.UNICODE + T = RegexFlag.T + TEMPLATE = RegexFlag.TEMPLATE + _FlagsType = Union[int, RegexFlag] +else: + A = 0 + ASCII = 0 + DEBUG = 0 + I = 0 + IGNORECASE = 0 + L = 0 + LOCALE = 0 + M = 0 + MULTILINE = 0 + S = 0 + DOTALL = 0 + X = 0 + VERBOSE = 0 + U = 0 + UNICODE = 0 + T = 0 + TEMPLATE = 0 + _FlagsType = int + +if sys.version_info < (3, 7): + # undocumented + _pattern_type: type + +class error(Exception): ... + +@overload +def compile(pattern: AnyStr, flags: _FlagsType = ...) -> Pattern[AnyStr]: ... +@overload +def compile(pattern: Pattern[AnyStr], flags: _FlagsType = ...) -> Pattern[AnyStr]: ... + +@overload +def search(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def search(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def match(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def match(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +# New in Python 3.4 +@overload +def fullmatch(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def fullmatch(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def split(pattern: AnyStr, string: AnyStr, + maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ... +@overload +def split(pattern: Pattern[AnyStr], string: AnyStr, + maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ... + +@overload +def findall(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ... +@overload +def findall(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ... + +# Return an iterator yielding match objects over all non-overlapping matches +# for the RE pattern in string. The string is scanned left-to-right, and +# matches are returned in the order found. Empty matches are included in the +# result unless they touch the beginning of another match. +@overload +def finditer(pattern: AnyStr, string: AnyStr, + flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ... +@overload +def finditer(pattern: Pattern[AnyStr], string: AnyStr, + flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ... + +@overload +def sub(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ... + +@overload +def subn(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... + +def escape(string: AnyStr) -> AnyStr: ... + +def purge() -> None: ... +def template(pattern: Union[AnyStr, Pattern[AnyStr]], flags: _FlagsType = ...) -> Pattern[AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/reprlib.pyi new file mode 100644 index 0000000..4622518 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/reprlib.pyi @@ -0,0 +1,37 @@ +# Stubs for reprlib (Python 3) + +from array import array +from typing import Any, Callable, Deque, Dict, FrozenSet, List, Set, Tuple + +_ReprFunc = Callable[[Any], str] + +def recursive_repr(fillvalue: str = ...) -> Callable[[_ReprFunc], _ReprFunc]: ... + +class Repr: + maxlevel: int + maxdict: int + maxlist: int + maxtuple: int + maxset: int + maxfrozenset: int + maxdeque: int + maxarray: int + maxlong: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def repr(self, x: Any) -> str: ... + def repr1(self, x: Any, level: int) -> str: ... + def repr_tuple(self, x: Tuple[Any, ...], level: int) -> str: ... + def repr_list(self, x: List[Any], level: int) -> str: ... + def repr_array(self, x: array, level: int) -> str: ... + def repr_set(self, x: Set[Any], level: int) -> str: ... + def repr_frozenset(self, x: FrozenSet[Any], level: int) -> str: ... + def repr_deque(self, x: Deque[Any], level: int) -> str: ... + def repr_dict(self, x: Dict[Any, Any], level: int) -> str: ... + def repr_str(self, x: str, level: int) -> str: ... + def repr_int(self, x: int, level: int) -> str: ... + def repr_instance(self, x: Any, level: int) -> str: ... + +aRepr: Repr +def repr(x: object) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/resource.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/resource.pyi new file mode 100644 index 0000000..0d2e30b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/resource.pyi @@ -0,0 +1,42 @@ +# Stubs for resource + +# NOTE: These are incomplete! + +from typing import Tuple, Optional, NamedTuple + +RLIMIT_AS: int +RLIMIT_CORE: int +RLIMIT_CPU: int +RLIMIT_DATA: int +RLIMIT_FSIZE: int +RLIMIT_MEMLOCK: int +RLIMIT_MSGQUEUE: int +RLIMIT_NICE: int +RLIMIT_NOFILE: int +RLIMIT_NPROC: int +RLIMIT_OFILE: int +RLIMIT_RSS: int +RLIMIT_RTPRIO: int +RLIMIT_RTTIME: int +RLIMIT_SIGPENDING: int +RLIMIT_STACK: int +RLIM_INFINITY: int +RUSAGE_CHILDREN: int +RUSAGE_SELF: int +RUSAGE_THREAD: int + +_RUsage = NamedTuple('_RUsage', [('ru_utime', float), ('ru_stime', float), ('ru_maxrss', int), + ('ru_ixrss', int), ('ru_idrss', int), ('ru_isrss', int), + ('ru_minflt', int), ('ru_majflt', int), ('ru_nswap', int), + ('ru_inblock', int), ('ru_oublock', int), ('ru_msgsnd', int), + ('ru_msgrcv', int), ('ru_nsignals', int), ('ru_nvcsw', int), + ('ru_nivcsw', int)]) + +def getpagesize() -> int: ... +def getrlimit(resource: int) -> Tuple[int, int]: ... +def getrusage(who: int) -> _RUsage: ... +def prlimit(pid: int, resource: int, limits: Optional[Tuple[int, int]]) -> Tuple[int, int]: ... +def setrlimit(resource: int, limits: Tuple[int, int]) -> None: ... + +# NOTE: This is an alias of OSError in Python 3.3. +class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/runpy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/runpy.pyi new file mode 100644 index 0000000..654c53c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/runpy.pyi @@ -0,0 +1,23 @@ +from types import ModuleType +from typing import Dict, Optional, Any + +class _TempModule: + mod_name: str = ... + module: ModuleType = ... + def __init__(self, mod_name): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +class _ModifiedArgv0: + value: Any = ... + def __init__(self, value): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +def run_module(mod_name: str, + init_globals: Optional[Dict[str, Any]] = ..., + run_name: Optional[str] = ..., + alter_sys: bool = ...): ... +def run_path(path_name: str, + init_globals: Optional[Dict[str, Any]] = ..., + run_name: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/selectors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/selectors.pyi new file mode 100644 index 0000000..39e68ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/selectors.pyi @@ -0,0 +1,90 @@ +# Stubs for selector +# See https://docs.python.org/3/library/selectors.html + +from typing import Any, List, NamedTuple, Mapping, Tuple, Optional, Union +from abc import ABCMeta, abstractmethod +import socket + + +# Type aliases added mainly to preserve some context +# +# See https://github.com/python/typeshed/issues/482 +# for details regarding how _FileObject is typed. +_FileObject = Union[int, socket.socket] +_FileDescriptor = int +_EventMask = int + + +EVENT_READ: _EventMask +EVENT_WRITE: _EventMask + + +SelectorKey = NamedTuple('SelectorKey', [ + ('fileobj', _FileObject), + ('fd', _FileDescriptor), + ('events', _EventMask), + ('data', Any) +]) + + +class BaseSelector(metaclass=ABCMeta): + @abstractmethod + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + + @abstractmethod + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + + def modify(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + + @abstractmethod + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + + def close(self) -> None: ... + + def get_key(self, fileobj: _FileObject) -> SelectorKey: ... + + @abstractmethod + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + + def __enter__(self) -> BaseSelector: ... + + def __exit__(self, *args: Any) -> None: ... + +class SelectSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class PollSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class EpollSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class DevpollSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class KqueueSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class DefaultSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shelve.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shelve.pyi new file mode 100644 index 0000000..4a33969 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shelve.pyi @@ -0,0 +1,31 @@ +from typing import Any, Dict, Iterator, Optional, Tuple +import collections + + +class Shelf(collections.MutableMapping): + def __init__(self, dict: Dict[bytes, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + def __contains__(self, key: Any) -> bool: ... # key should be str, but it would conflict with superclass's type signature + def get(self, key: str, default: Any = ...) -> Any: ... + def __getitem__(self, key: str) -> Any: ... + def __setitem__(self, key: str, value: Any) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __enter__(self) -> Shelf: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def close(self) -> None: ... + def __del__(self) -> None: ... + def sync(self) -> None: ... + +class BsdDbShelf(Shelf): + def __init__(self, dict: Dict[bytes, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def set_location(self, key: Any) -> Tuple[str, Any]: ... + def next(self) -> Tuple[str, Any]: ... + def previous(self) -> Tuple[str, Any]: ... + def first(self) -> Tuple[str, Any]: ... + def last(self) -> Tuple[str, Any]: ... + +class DbfilenameShelf(Shelf): + def __init__(self, filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> None: ... + +def open(filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> DbfilenameShelf: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shlex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shlex.pyi new file mode 100644 index 0000000..fb398ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/shlex.pyi @@ -0,0 +1,50 @@ +# Stubs for shlex + +# Based on http://docs.python.org/3.2/library/shlex.html + +from typing import List, Tuple, Any, TextIO, Union, Optional, Iterable, TypeVar +import sys + +def split(s: str, comments: bool = ..., + posix: bool = ...) -> List[str]: ... + +# Added in 3.3, use (undocumented) pipes.quote in previous versions. +def quote(s: str) -> str: ... + +_SLT = TypeVar('_SLT', bound=shlex) + +class shlex(Iterable[str]): + commenters: str + wordchars: str + whitespace: str + escape: str + quotes: str + escapedquotes: str + whitespace_split: bool + infile: str + instream: TextIO + source: str + debug = 0 + lineno = 0 + token: str + eof: str + if sys.version_info >= (3, 6): + punctuation_chars: str + + if sys.version_info >= (3, 6): + def __init__(self, instream: Union[str, TextIO] = ..., infile: Optional[str] = ..., + posix: bool = ..., punctuation_chars: Union[bool, str] = ...) -> None: ... + else: + def __init__(self, instream: Union[str, TextIO] = ..., infile: Optional[str] = ..., + posix: bool = ...) -> None: ... + def get_token(self) -> str: ... + def push_token(self, tok: str) -> None: ... + def read_token(self) -> str: ... + def sourcehook(self, filename: str) -> Tuple[str, TextIO]: ... + # TODO argument types + def push_source(self, newstream: Any, newfile: Any = ...) -> None: ... + def pop_source(self) -> None: ... + def error_leader(self, infile: str = ..., + lineno: int = ...) -> None: ... + def __iter__(self: _SLT) -> _SLT: ... + def __next__(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/signal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/signal.pyi new file mode 100644 index 0000000..34a8cdd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/signal.pyi @@ -0,0 +1,187 @@ +"""Stub file for the 'signal' module.""" + +import sys +from enum import IntEnum +from typing import Any, Callable, List, Tuple, Dict, Generic, Union, Optional, Iterable, Set +from types import FrameType + +class ItimerError(IOError): ... + +ITIMER_PROF: int = ... +ITIMER_REAL: int = ... +ITIMER_VIRTUAL: int = ... + +NSIG: int = ... + +if sys.version_info >= (3, 5): + class Signals(IntEnum): + SIGABRT = ... + SIGALRM = ... + SIGBREAK = ... # Windows + SIGBUS = ... + SIGCHLD = ... + SIGCLD = ... + SIGCONT = ... + SIGEMT = ... + SIGFPE = ... + SIGHUP = ... + SIGILL = ... + SIGINFO = ... + SIGINT = ... + SIGIO = ... + SIGIOT = ... + SIGKILL = ... + SIGPIPE = ... + SIGPOLL = ... + SIGPROF = ... + SIGPWR = ... + SIGQUIT = ... + SIGRTMAX = ... + SIGRTMIN = ... + SIGSEGV = ... + SIGSTOP = ... + SIGSYS = ... + SIGTERM = ... + SIGTRAP = ... + SIGTSTP = ... + SIGTTIN = ... + SIGTTOU = ... + SIGURG = ... + SIGUSR1 = ... + SIGUSR2 = ... + SIGVTALRM = ... + SIGWINCH = ... + SIGXCPU = ... + SIGXFSZ = ... + + class Handlers(IntEnum): + SIG_DFL = ... + SIG_IGN = ... + + SIG_DFL = Handlers.SIG_DFL + SIG_IGN = Handlers.SIG_IGN + + class Sigmasks(IntEnum): + SIG_BLOCK = ... + SIG_UNBLOCK = ... + SIG_SETMASK = ... + + SIG_BLOCK = Sigmasks.SIG_BLOCK + SIG_UNBLOCK = Sigmasks.SIG_UNBLOCK + SIG_SETMASK = Sigmasks.SIG_SETMASK + + _SIG = Signals + _SIGNUM = Union[int, Signals] + _HANDLER = Union[Callable[[Signals, FrameType], None], int, Handlers, None] +else: + SIG_DFL: int = ... + SIG_IGN: int = ... + + SIG_BLOCK: int = ... + SIG_UNBLOCK: int = ... + SIG_SETMASK: int = ... + + _SIG = int + _SIGNUM = int + _HANDLER = Union[Callable[[int, FrameType], None], int, None] + +SIGABRT: _SIG = ... +SIGALRM: _SIG = ... +SIGBREAK: _SIG = ... # Windows +SIGBUS: _SIG = ... +SIGCHLD: _SIG = ... +SIGCLD: _SIG = ... +SIGCONT: _SIG = ... +SIGEMT: _SIG = ... +SIGFPE: _SIG = ... +SIGHUP: _SIG = ... +SIGILL: _SIG = ... +SIGINFO: _SIG = ... +SIGINT: _SIG = ... +SIGIO: _SIG = ... +SIGIOT: _SIG = ... +SIGKILL: _SIG = ... +SIGPIPE: _SIG = ... +SIGPOLL: _SIG = ... +SIGPROF: _SIG = ... +SIGPWR: _SIG = ... +SIGQUIT: _SIG = ... +SIGRTMAX: _SIG = ... +SIGRTMIN: _SIG = ... +SIGSEGV: _SIG = ... +SIGSTOP: _SIG = ... +SIGSYS: _SIG = ... +SIGTERM: _SIG = ... +SIGTRAP: _SIG = ... +SIGTSTP: _SIG = ... +SIGTTIN: _SIG = ... +SIGTTOU: _SIG = ... +SIGURG: _SIG = ... +SIGUSR1: _SIG = ... +SIGUSR2: _SIG = ... +SIGVTALRM: _SIG = ... +SIGWINCH: _SIG = ... +SIGXCPU: _SIG = ... +SIGXFSZ: _SIG = ... + +# Windows +CTRL_C_EVENT: _SIG = ... +CTRL_BREAK_EVENT: _SIG = ... + +class struct_siginfo(Tuple[int, int, int, int, int, int, int]): + def __init__(self, sequence: Iterable[int]) -> None: ... + @property + def si_signo(self) -> int: ... + @property + def si_code(self) -> int: ... + @property + def si_errno(self) -> int: ... + @property + def si_pid(self) -> int: ... + @property + def si_uid(self) -> int: ... + @property + def si_status(self) -> int: ... + @property + def si_band(self) -> int: ... + +def alarm(time: int) -> int: ... + +def default_int_handler(signum: int, frame: FrameType) -> None: + raise KeyboardInterrupt() + +def getitimer(which: int) -> Tuple[float, float]: ... + +def getsignal(signalnum: _SIGNUM) -> _HANDLER: + raise ValueError() + +def pause() -> None: ... + +def pthread_kill(thread_id: int, signum: int) -> None: + raise OSError() + +def pthread_sigmask(how: int, mask: Iterable[int]) -> Set[_SIGNUM]: + raise OSError() + +def set_wakeup_fd(fd: int) -> int: ... + +def setitimer(which: int, seconds: float, interval: float = ...) -> Tuple[float, float]: ... + +def siginterrupt(signalnum: int, flag: bool) -> None: + raise OSError() + +def signal(signalnum: _SIGNUM, handler: _HANDLER) -> _HANDLER: + raise OSError() + +def sigpending() -> Any: + raise OSError() + +def sigtimedwait(sigset: Iterable[int], timeout: float) -> Optional[struct_siginfo]: + raise OSError() + raise ValueError() + +def sigwait(sigset: Iterable[int]) -> _SIGNUM: + raise OSError() + +def sigwaitinfo(sigset: Iterable[int]) -> struct_siginfo: + raise OSError() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/smtplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/smtplib.pyi new file mode 100644 index 0000000..ec8e27f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/smtplib.pyi @@ -0,0 +1,141 @@ +from email.message import Message as _Message +from socket import socket +from ssl import SSLContext +from types import TracebackType +from typing import ( + Any, AnyStr, Dict, Generic, List, Optional, Sequence, Tuple, Union, + Pattern, Type, Callable, Protocol, overload) +import sys + +_Reply = Tuple[int, bytes] +_SendErrs = Dict[str, _Reply] +# Should match source_address for socket.create_connection +_SourceAddress = Tuple[Union[bytearray, bytes, str], int] + +SMTP_PORT: int +SMTP_SSL_PORT: int +CRLF: str +bCRLF: bytes + +OLDSTYLE_AUTH: Pattern[str] + +class SMTPException(OSError): ... +class SMTPServerDisconnected(SMTPException): ... + +class SMTPResponseException(SMTPException): + smtp_code: int + smtp_error: Union[bytes, str] + args: Union[Tuple[int, Union[bytes, str]], Tuple[int, bytes, str]] + def __init__(self, code: int, msg: Union[bytes, str]) -> None: ... + +class SMTPSenderRefused(SMTPResponseException): + smtp_code: int + smtp_error: bytes + sender: str + args: Tuple[int, bytes, str] + def __init__(self, code: int, msg: bytes, sender: str) -> None: ... + +class SMTPRecipientsRefused(SMTPException): + recipients: _SendErrs + args: Tuple[_SendErrs] + def __init__(self, recipients: _SendErrs) -> None: ... + +class SMTPDataError(SMTPResponseException): ... +class SMTPConnectError(SMTPResponseException): ... +class SMTPHeloError(SMTPResponseException): ... +class SMTPAuthenticationError(SMTPResponseException): ... + +def quoteaddr(addrstring: str) -> str: ... +def quotedata(data: str) -> str: ... + +class _AuthObject(Protocol): + @overload + def __call__(self, challenge: None = ...) -> Optional[str]: ... + @overload + def __call__(self, challenge: bytes) -> str: ... + +class SMTP: + debuglevel: int = ... + # Type of file should match what socket.makefile() returns + file: Any = ... + helo_resp: Optional[bytes] = ... + ehlo_msg: str = ... + ehlo_resp: Optional[bytes] = ... + does_esmtp: int = ... + default_port: int = ... + timeout: float + esmtp_features: Dict[str, str] + command_encoding: str + source_address: Optional[_SourceAddress] + local_hostname: str + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., timeout: float = ..., + source_address: Optional[_SourceAddress] = ...) -> None: ... + def __enter__(self) -> SMTP: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + tb: Optional[TracebackType]) -> None: ... + def set_debuglevel(self, debuglevel: int) -> None: ... + sock: Optional[socket] + def connect(self, host: str = ..., port: int = ..., + source_address: Optional[_SourceAddress] = ...) -> _Reply: ... + def send(self, s: Union[bytes, str]) -> None: ... + def putcmd(self, cmd: str, args: str = ...) -> None: ... + def getreply(self) -> _Reply: ... + def docmd(self, cmd: str, args: str = ...) -> _Reply: ... + def helo(self, name: str = ...) -> _Reply: ... + def ehlo(self, name: str = ...) -> _Reply: ... + def has_extn(self, opt: str) -> bool: ... + def help(self, args: str = ...) -> bytes: ... + def rset(self) -> _Reply: ... + def noop(self) -> _Reply: ... + def mail(self, sender: str, options: Sequence[str] = ...) -> _Reply: ... + def rcpt(self, recip: str, options: Sequence[str] = ...) -> _Reply: ... + def data(self, msg: Union[bytes, str]) -> _Reply: ... + def verify(self, address: str) -> _Reply: ... + vrfy = verify + def expn(self, address: str) -> _Reply: ... + def ehlo_or_helo_if_needed(self) -> None: ... + if sys.version_info >= (3, 5): + user: str + password: str + def auth(self, mechanism: str, authobject: _AuthObject, *, initial_response_ok: bool = ...) -> _Reply: ... + @overload + def auth_cram_md5(self, challenge: None = ...) -> None: ... + @overload + def auth_cram_md5(self, challenge: bytes) -> str: ... + def auth_plain(self, challenge: Optional[bytes] = ...) -> str: ... + def auth_login(self, challenge: Optional[bytes] = ...) -> str: ... + def login(self, user: str, password: str, *, + initial_response_ok: bool = ...) -> _Reply: ... + else: + def login(self, user: str, password: str) -> _Reply: ... + def starttls(self, keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + context: Optional[SSLContext] = ...) -> _Reply: ... + def sendmail(self, from_addr: str, to_addrs: Union[str, Sequence[str]], + msg: Union[bytes, str], mail_options: Sequence[str] = ..., + rcpt_options: List[str] = ...) -> _SendErrs: ... + def send_message(self, msg: _Message, from_addr: Optional[str] = ..., + to_addrs: Optional[Union[str, Sequence[str]]] = ..., + mail_options: List[str] = ..., + rcpt_options: Sequence[str] = ...) -> _SendErrs: ... + def close(self) -> None: ... + def quit(self) -> _Reply: ... + +class SMTP_SSL(SMTP): + keyfile: Optional[str] + certfile: Optional[str] + context: SSLContext + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., + keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + timeout: float = ..., + source_address: Optional[_SourceAddress] = ..., + context: Optional[SSLContext] = ...) -> None: ... + +LMTP_PORT: int + +class LMTP(SMTP): + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., + source_address: Optional[_SourceAddress] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/socketserver.pyi new file mode 100644 index 0000000..d485b8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/socketserver.pyi @@ -0,0 +1,99 @@ +# NB: SocketServer.pyi and socketserver.pyi must remain consistent! +# Stubs for socketserver + +from typing import Any, BinaryIO, Optional, Tuple, Type +from socket import SocketType +import sys +import types + +class BaseServer: + address_family: int + RequestHandlerClass: type + server_address: Tuple[str, int] + socket: SocketType + allow_reuse_address: bool + request_queue_size: int + socket_type: int + timeout: Optional[float] + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + def fileno(self) -> int: ... + def handle_request(self) -> None: ... + def serve_forever(self, poll_interval: float = ...) -> None: ... + def shutdown(self) -> None: ... + def server_close(self) -> None: ... + def finish_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def get_request(self) -> None: ... + def handle_error(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def handle_timeout(self) -> None: ... + def process_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def server_activate(self) -> None: ... + def server_bind(self) -> None: ... + def verify_request(self, request: bytes, + client_address: Tuple[str, int]) -> bool: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> BaseServer: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + if sys.version_info >= (3, 3): + def service_actions(self) -> None: ... + +class TCPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class UDPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +if sys.platform != 'win32': + class UnixStreamServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + + class UnixDatagramServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class ForkingMixIn: ... +class ThreadingMixIn: ... + +class ForkingTCPServer(ForkingMixIn, TCPServer): ... +class ForkingUDPServer(ForkingMixIn, UDPServer): ... +class ThreadingTCPServer(ThreadingMixIn, TCPServer): ... +class ThreadingUDPServer(ThreadingMixIn, UDPServer): ... +if sys.platform != 'win32': + class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): ... + class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): ... + + +class BaseRequestHandler: + # Those are technically of types, respectively: + # * Union[SocketType, Tuple[bytes, SocketType]] + # * Union[Tuple[str, int], str] + # But there are some concerns that having unions here would cause + # too much inconvenience to people using it (see + # https://github.com/python/typeshed/pull/384#issuecomment-234649696) + request: Any + client_address: Any + + server: BaseServer + def setup(self) -> None: ... + def handle(self) -> None: ... + def finish(self) -> None: ... + +class StreamRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO + +class DatagramRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/spwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/spwd.pyi new file mode 100644 index 0000000..0e55d74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/spwd.pyi @@ -0,0 +1,14 @@ +from typing import List, NamedTuple + +struct_spwd = NamedTuple("struct_spwd", [("sp_namp", str), + ("sp_pwdp", str), + ("sp_lstchg", int), + ("sp_min", int), + ("sp_max", int), + ("sp_warn", int), + ("sp_inact", int), + ("sp_expire", int), + ("sp_flag", int)]) + +def getspall() -> List[struct_spwd]: ... +def getspnam(name: str) -> struct_spwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi new file mode 100644 index 0000000..85f50ca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi @@ -0,0 +1,114 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/sre_constants.py + +from typing import Any, Dict, List, Optional, Union + +MAGIC: int + +class error(Exception): + msg: str + pattern: Optional[Union[str, bytes]] + pos: Optional[int] + lineno: int + colno: int + def __init__(self, msg: str, pattern: Union[str, bytes] = ..., pos: int = ...) -> None: ... + +class _NamedIntConstant(int): + name: Any + def __new__(cls, value: int, name: str): ... + +MAXREPEAT: _NamedIntConstant +OPCODES: List[_NamedIntConstant] +ATCODES: List[_NamedIntConstant] +CHCODES: List[_NamedIntConstant] +OP_IGNORE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_MULTILINE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_LOCALE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_UNICODE: Dict[_NamedIntConstant, _NamedIntConstant] +CH_LOCALE: Dict[_NamedIntConstant, _NamedIntConstant] +CH_UNICODE: Dict[_NamedIntConstant, _NamedIntConstant] +SRE_FLAG_TEMPLATE: int +SRE_FLAG_IGNORECASE: int +SRE_FLAG_LOCALE: int +SRE_FLAG_MULTILINE: int +SRE_FLAG_DOTALL: int +SRE_FLAG_UNICODE: int +SRE_FLAG_VERBOSE: int +SRE_FLAG_DEBUG: int +SRE_FLAG_ASCII: int +SRE_INFO_PREFIX: int +SRE_INFO_LITERAL: int +SRE_INFO_CHARSET: int + + +# Stubgen above; manually defined constants below (dynamic at runtime) + +# from OPCODES +FAILURE: _NamedIntConstant +SUCCESS: _NamedIntConstant +ANY: _NamedIntConstant +ANY_ALL: _NamedIntConstant +ASSERT: _NamedIntConstant +ASSERT_NOT: _NamedIntConstant +AT: _NamedIntConstant +BRANCH: _NamedIntConstant +CALL: _NamedIntConstant +CATEGORY: _NamedIntConstant +CHARSET: _NamedIntConstant +BIGCHARSET: _NamedIntConstant +GROUPREF: _NamedIntConstant +GROUPREF_EXISTS: _NamedIntConstant +GROUPREF_IGNORE: _NamedIntConstant +IN: _NamedIntConstant +IN_IGNORE: _NamedIntConstant +INFO: _NamedIntConstant +JUMP: _NamedIntConstant +LITERAL: _NamedIntConstant +LITERAL_IGNORE: _NamedIntConstant +MARK: _NamedIntConstant +MAX_UNTIL: _NamedIntConstant +MIN_UNTIL: _NamedIntConstant +NOT_LITERAL: _NamedIntConstant +NOT_LITERAL_IGNORE: _NamedIntConstant +NEGATE: _NamedIntConstant +RANGE: _NamedIntConstant +REPEAT: _NamedIntConstant +REPEAT_ONE: _NamedIntConstant +SUBPATTERN: _NamedIntConstant +MIN_REPEAT_ONE: _NamedIntConstant +RANGE_IGNORE: _NamedIntConstant +MIN_REPEAT: _NamedIntConstant +MAX_REPEAT: _NamedIntConstant + +# from ATCODES +AT_BEGINNING: _NamedIntConstant +AT_BEGINNING_LINE: _NamedIntConstant +AT_BEGINNING_STRING: _NamedIntConstant +AT_BOUNDARY: _NamedIntConstant +AT_NON_BOUNDARY: _NamedIntConstant +AT_END: _NamedIntConstant +AT_END_LINE: _NamedIntConstant +AT_END_STRING: _NamedIntConstant +AT_LOC_BOUNDARY: _NamedIntConstant +AT_LOC_NON_BOUNDARY: _NamedIntConstant +AT_UNI_BOUNDARY: _NamedIntConstant +AT_UNI_NON_BOUNDARY: _NamedIntConstant + +# from CHCODES +CATEGORY_DIGIT: _NamedIntConstant +CATEGORY_NOT_DIGIT: _NamedIntConstant +CATEGORY_SPACE: _NamedIntConstant +CATEGORY_NOT_SPACE: _NamedIntConstant +CATEGORY_WORD: _NamedIntConstant +CATEGORY_NOT_WORD: _NamedIntConstant +CATEGORY_LINEBREAK: _NamedIntConstant +CATEGORY_NOT_LINEBREAK: _NamedIntConstant +CATEGORY_LOC_WORD: _NamedIntConstant +CATEGORY_LOC_NOT_WORD: _NamedIntConstant +CATEGORY_UNI_DIGIT: _NamedIntConstant +CATEGORY_UNI_NOT_DIGIT: _NamedIntConstant +CATEGORY_UNI_SPACE: _NamedIntConstant +CATEGORY_UNI_NOT_SPACE: _NamedIntConstant +CATEGORY_UNI_WORD: _NamedIntConstant +CATEGORY_UNI_NOT_WORD: _NamedIntConstant +CATEGORY_UNI_LINEBREAK: _NamedIntConstant +CATEGORY_UNI_NOT_LINEBREAK: _NamedIntConstant diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi new file mode 100644 index 0000000..93b3c1d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi @@ -0,0 +1,81 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/sre_parse.py + +from typing import ( + Any, Dict, FrozenSet, Iterable, List, Match, + Optional, Pattern as _Pattern, Tuple, Union +) +from sre_constants import _NamedIntConstant as NIC, error as _Error + +SPECIAL_CHARS: str +REPEAT_CHARS: str +DIGITS: FrozenSet[str] +OCTDIGITS: FrozenSet[str] +HEXDIGITS: FrozenSet[str] +ASCIILETTERS: FrozenSet[str] +WHITESPACE: FrozenSet[str] +ESCAPES: Dict[str, Tuple[NIC, int]] +CATEGORIES: Dict[str, Union[Tuple[NIC, NIC], Tuple[NIC, List[Tuple[NIC, NIC]]]]] +FLAGS: Dict[str, int] +GLOBAL_FLAGS: int + +class Verbose(Exception): ... + +class Pattern: + flags: int + groupdict: Dict[str, int] + groupwidths: List[Optional[int]] + lookbehindgroups: Optional[int] + def __init__(self) -> None: ... + @property + def groups(self) -> int: ... + def opengroup(self, name: str = ...) -> int: ... + def closegroup(self, gid: int, p: SubPattern) -> None: ... + def checkgroup(self, gid: int) -> bool: ... + def checklookbehindgroup(self, gid: int, source: Tokenizer) -> None: ... + + +_OpSubpatternType = Tuple[Optional[int], int, int, SubPattern] +_OpGroupRefExistsType = Tuple[int, SubPattern, SubPattern] +_OpInType = List[Tuple[NIC, int]] +_OpBranchType = Tuple[None, List[SubPattern]] +_AvType = Union[_OpInType, _OpBranchType, Iterable[SubPattern], _OpGroupRefExistsType, _OpSubpatternType] +_CodeType = Tuple[NIC, _AvType] + + +class SubPattern: + pattern: Pattern + data: List[_CodeType] + width: Optional[int] + def __init__(self, pattern: Pattern, data: List[_CodeType] = ...) -> None: ... + def dump(self, level: int = ...) -> None: ... + def __len__(self) -> int: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __getitem__(self, index: Union[int, slice]) -> Union[SubPattern, _CodeType]: ... + def __setitem__(self, index: Union[int, slice], code: _CodeType) -> None: ... + def insert(self, index: int, code: _CodeType) -> None: ... + def append(self, code: _CodeType) -> None: ... + def getwidth(self) -> int: ... + + +class Tokenizer: + istext: bool + string: Any + decoded_string: str + index: int + next: Optional[str] + def __init__(self, string: Any) -> None: ... + def match(self, char: str) -> bool: ... + def get(self) -> Optional[str]: ... + def getwhile(self, n: int, charset: Iterable[str]) -> str: ... + def getuntil(self, terminator: str) -> str: ... + @property + def pos(self) -> int: ... + def tell(self) -> int: ... + def seek(self, index: int) -> None: ... + def error(self, msg: str, offset: int = ...) -> _Error: ... + +def fix_flags(src: Union[str, bytes], flag: int) -> int: ... +def parse(str: str, flags: int = ..., pattern: Pattern = ...) -> SubPattern: ... +_TemplateType = Tuple[List[Tuple[int, int]], List[str]] +def parse_template(source: str, pattern: _Pattern) -> _TemplateType: ... +def expand_template(template: _TemplateType, match: Match) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/stat.pyi new file mode 100644 index 0000000..c45a068 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/stat.pyi @@ -0,0 +1,75 @@ +# Stubs for stat + +# Based on http://docs.python.org/3.2/library/stat.html + +import sys +import typing + +def S_ISDIR(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISBLK(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +def filemode(mode: int) -> str: ... + +ST_MODE = 0 +ST_INO = 0 +ST_DEV = 0 +ST_NLINK = 0 +ST_UID = 0 +ST_GID = 0 +ST_SIZE = 0 +ST_ATIME = 0 +ST_MTIME = 0 +ST_CTIME = 0 + +S_IFSOCK = 0 +S_IFLNK = 0 +S_IFREG = 0 +S_IFBLK = 0 +S_IFDIR = 0 +S_IFCHR = 0 +S_IFIFO = 0 +S_ISUID = 0 +S_ISGID = 0 +S_ISVTX = 0 + +S_IRWXU = 0 +S_IRUSR = 0 +S_IWUSR = 0 +S_IXUSR = 0 + +S_IRWXG = 0 +S_IRGRP = 0 +S_IWGRP = 0 +S_IXGRP = 0 + +S_IRWXO = 0 +S_IROTH = 0 +S_IWOTH = 0 +S_IXOTH = 0 + +S_ENFMT = 0 +S_IREAD = 0 +S_IWRITE = 0 +S_IEXEC = 0 + +UF_NODUMP = 0 +UF_IMMUTABLE = 0 +UF_APPEND = 0 +UF_OPAQUE = 0 +UF_NOUNLINK = 0 +if sys.platform == 'darwin': + UF_COMPRESSED = 0 # OS X 10.6+ only + UF_HIDDEN = 0 # OX X 10.5+ only +SF_ARCHIVED = 0 +SF_IMMUTABLE = 0 +SF_APPEND = 0 +SF_NOUNLINK = 0 +SF_SNAPSHOT = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/statistics.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/statistics.pyi new file mode 100644 index 0000000..d9116e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/statistics.pyi @@ -0,0 +1,24 @@ +# Stubs for statistics + +from decimal import Decimal +from fractions import Fraction +import sys +from typing import Iterable, Optional, TypeVar + +# Most functions in this module accept homogeneous collections of one of these types +_Number = TypeVar('_Number', float, Decimal, Fraction) + +class StatisticsError(ValueError): ... + +def mean(data: Iterable[_Number]) -> _Number: ... +if sys.version_info >= (3, 6): + def harmonic_mean(data: Iterable[_Number]) -> _Number: ... +def median(data: Iterable[_Number]) -> _Number: ... +def median_low(data: Iterable[_Number]) -> _Number: ... +def median_high(data: Iterable[_Number]) -> _Number: ... +def median_grouped(data: Iterable[_Number]) -> _Number: ... +def mode(data: Iterable[_Number]) -> _Number: ... +def pstdev(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ... +def pvariance(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ... +def stdev(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ... +def variance(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/string.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/string.pyi new file mode 100644 index 0000000..92fc036 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/string.pyi @@ -0,0 +1,42 @@ +# Stubs for string + +# Based on http://docs.python.org/3.2/library/string.html + +from typing import Mapping, Sequence, Any, Optional, Union, List, Tuple, Iterable + +ascii_letters: str +ascii_lowercase: str +ascii_uppercase: str +digits: str +hexdigits: str +octdigits: str +punctuation: str +printable: str +whitespace: str + +def capwords(s: str, sep: str = ...) -> str: ... + +class Template: + template: str + + def __init__(self, template: str) -> None: ... + def substitute(self, mapping: Mapping[str, str] = ..., **kwds: str) -> str: ... + def safe_substitute(self, mapping: Mapping[str, str] = ..., + **kwds: str) -> str: ... + +# TODO(MichalPokorny): This is probably badly and/or loosely typed. +class Formatter: + def format(self, format_string: str, *args: Any, **kwargs: Any) -> str: ... + def vformat(self, format_string: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> str: ... + def parse(self, format_string: str) -> Iterable[Tuple[str, Optional[str], Optional[str], Optional[str]]]: ... + def get_field(self, field_name: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: ... + def get_value(self, key: Union[int, str], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: + raise IndexError() + raise KeyError() + def check_unused_args(self, used_args: Sequence[Union[int, str]], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> None: ... + def format_field(self, value: Any, format_spec: str) -> Any: ... + def convert_field(self, value: Any, conversion: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/subprocess.pyi new file mode 100644 index 0000000..b242449 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/subprocess.pyi @@ -0,0 +1,365 @@ +# Stubs for subprocess + +# Based on http://docs.python.org/3.6/library/subprocess.html +import sys +from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Optional, Union, List, Type, Text +from types import TracebackType + +# We prefer to annotate inputs to methods (eg subprocess.check_call) with these +# union types. However, outputs (eg check_call return) and class attributes +# (eg TimeoutError.cmd) we prefer to annotate with Any, so the caller does not +# have to use an assertion to confirm which type. +# +# For example: +# +# try: +# x = subprocess.check_output(["ls", "-l"]) +# reveal_type(x) # Any, but morally is _TXT +# except TimeoutError as e: +# reveal_type(e.cmd) # Any, but morally is _CMD +_FILE = Union[None, int, IO[Any]] +_TXT = Union[bytes, Text] +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PATH = Union[bytes, Text, _PathLike] +else: + _PATH = Union[bytes, Text] +# Python 3.6 does't support _CMD being a single PathLike. +# See: https://bugs.python.org/issue31961 +_CMD = Union[_TXT, Sequence[_PATH]] +_ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] + +if sys.version_info >= (3, 5): + class CompletedProcess: + # morally: _CMD + args: Any + returncode: int + # morally: Optional[_TXT] + stdout: Any + stderr: Any + def __init__(self, args: _CMD, + returncode: int, + stdout: Optional[_TXT] = ..., + stderr: Optional[_TXT] = ...) -> None: ... + def check_returncode(self) -> None: ... + + if sys.version_info >= (3, 7): + # Nearly the same args as for 3.6, except for capture_output and text + def run(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + capture_output: bool = ..., + check: bool = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + input: Optional[_TXT] = ..., + text: Optional[bool] = ..., + timeout: Optional[float] = ...) -> CompletedProcess: ... + elif sys.version_info >= (3, 6): + # Nearly same args as Popen.__init__ except for timeout, input, and check + def run(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + check: bool = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + input: Optional[_TXT] = ..., + timeout: Optional[float] = ...) -> CompletedProcess: ... + else: + # Nearly same args as Popen.__init__ except for timeout, input, and check + def run(args: _CMD, + timeout: Optional[float] = ..., + input: Optional[_TXT] = ..., + check: bool = ..., + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ...) -> CompletedProcess: ... + +# Same args as Popen.__init__ +def call(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ...) -> int: ... + +# Same args as Popen.__init__ +def check_call(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ...) -> int: ... + +if sys.version_info >= (3, 7): + # 3.7 added text + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + timeout: float = ..., + input: _TXT = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + text: Optional[bool] = ..., + ) -> Any: ... # morally: -> _TXT +elif sys.version_info >= (3, 6): + # 3.6 added encoding and errors + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + timeout: float = ..., + input: _TXT = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + ) -> Any: ... # morally: -> _TXT +else: + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ..., + input: _TXT = ..., + ) -> Any: ... # morally: -> _TXT + + +PIPE: int +STDOUT: int +DEVNULL: int +class SubprocessError(Exception): ... +class TimeoutExpired(SubprocessError): + def __init__(self, cmd: _CMD, timeout: float, output: Optional[_TXT] = ..., stderr: Optional[_TXT] = ...) -> None: ... + # morally: _CMD + cmd: Any + timeout: float + # morally: Optional[_TXT] + output: Any + stdout: Any + stderr: Any + + +class CalledProcessError(Exception): + returncode = 0 + # morally: _CMD + cmd: Any + # morally: Optional[_TXT] + output: Any + + if sys.version_info >= (3, 5): + # morally: Optional[_TXT] + stdout: Any + stderr: Any + + def __init__(self, + returncode: int, + cmd: _CMD, + output: Optional[_TXT] = ..., + stderr: Optional[_TXT] = ...) -> None: ... + +class Popen: + args: _CMD + stdin: IO[Any] + stdout: IO[Any] + stderr: IO[Any] + pid = 0 + returncode = 0 + + if sys.version_info >= (3, 6): + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_PATH] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> None: ... + else: + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_PATH] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ...) -> None: ... + + def poll(self) -> int: ... + def wait(self, timeout: Optional[float] = ...) -> int: ... + # Return str/bytes + def communicate(self, + input: Optional[_TXT] = ..., + timeout: Optional[float] = ..., + # morally: -> Tuple[Optional[_TXT], Optional[_TXT]] + ) -> Tuple[Any, Any]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + def __enter__(self) -> Popen: ... + def __exit__(self, type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> bool: ... + +# The result really is always a str. +def getstatusoutput(cmd: _TXT) -> Tuple[int, str]: ... +def getoutput(cmd: _TXT) -> str: ... + +def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented + +if sys.platform == 'win32': + class STARTUPINFO: + if sys.version_info >= (3, 7): + def __init__(self, *, dwFlags: int = ..., hStdInput: Optional[Any] = ..., hStdOutput: Optional[Any] = ..., hStdError: Optional[Any] = ..., wShowWindow: int = ..., lpAttributeList: Optional[Mapping[str, Any]] = ...) -> None: ... + dwFlags: int + hStdInput: Optional[Any] + hStdOutput: Optional[Any] + hStdError: Optional[Any] + wShowWindow: int + if sys.version_info >= (3, 7): + lpAttributeList: Mapping[str, Any] + + STD_INPUT_HANDLE: Any + STD_OUTPUT_HANDLE: Any + STD_ERROR_HANDLE: Any + SW_HIDE: int + STARTF_USESTDHANDLES: int + STARTF_USESHOWWINDOW: int + CREATE_NEW_CONSOLE: int + CREATE_NEW_PROCESS_GROUP: int + if sys.version_info >= (3, 7): + ABOVE_NORMAL_PRIORITY_CLASS: int + BELOW_NORMAL_PRIORITY_CLASS: int + HIGH_PRIORITY_CLASS: int + IDLE_PRIORITY_CLASS: int + NORMAL_PRIORITY_CLASS: int + REALTIME_PRIORITY_CLASS: int + CREATE_NO_WINDOW: int + DETACHED_PROCESS: int + CREATE_DEFAULT_ERROR_MODE: int + CREATE_BREAKAWAY_FROM_JOB: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/symbol.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/symbol.pyi new file mode 100644 index 0000000..0cf5f1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/symbol.pyi @@ -0,0 +1,97 @@ +# Stubs for symbol (Python 3) + +import sys +from typing import Dict + +single_input: int +file_input: int +eval_input: int +decorator: int +decorators: int +decorated: int +if sys.version_info >= (3, 5): + async_funcdef: int +funcdef: int +parameters: int +typedargslist: int +tfpdef: int +varargslist: int +vfpdef: int +stmt: int +simple_stmt: int +small_stmt: int +expr_stmt: int +if sys.version_info >= (3, 6): + annassign: int +testlist_star_expr: int +augassign: int +del_stmt: int +pass_stmt: int +flow_stmt: int +break_stmt: int +continue_stmt: int +return_stmt: int +yield_stmt: int +raise_stmt: int +import_stmt: int +import_name: int +import_from: int +import_as_name: int +dotted_as_name: int +import_as_names: int +dotted_as_names: int +dotted_name: int +global_stmt: int +nonlocal_stmt: int +assert_stmt: int +compound_stmt: int +if sys.version_info >= (3, 5): + async_stmt: int +if_stmt: int +while_stmt: int +for_stmt: int +try_stmt: int +with_stmt: int +with_item: int +except_clause: int +suite: int +test: int +test_nocond: int +lambdef: int +lambdef_nocond: int +or_test: int +and_test: int +not_test: int +comparison: int +comp_op: int +star_expr: int +expr: int +xor_expr: int +and_expr: int +shift_expr: int +arith_expr: int +term: int +factor: int +power: int +if sys.version_info >= (3, 5): + atom_expr: int +atom: int +testlist_comp: int +trailer: int +subscriptlist: int +subscript: int +sliceop: int +exprlist: int +testlist: int +dictorsetmaker: int +classdef: int +arglist: int +argument: int +comp_iter: int +comp_for: int +comp_if: int +encoding_decl: int +yield_expr: int +yield_arg: int + +sym_name: Dict[int, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sys.pyi new file mode 100644 index 0000000..3f856bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/sys.pyi @@ -0,0 +1,201 @@ +# Stubs for sys +# Ron Murawski + +# based on http://docs.python.org/3.2/library/sys.html + +from typing import ( + List, NoReturn, Sequence, Any, Dict, Tuple, TextIO, overload, Optional, + Union, TypeVar, Callable, Type +) +import sys +from types import FrameType, ModuleType, TracebackType + +from importlib.abc import MetaPathFinder + +_T = TypeVar('_T') + +# The following type alias are stub-only and do not exist during runtime +_ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +_OptExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +# ----- sys variables ----- +abiflags: str +argv: List[str] +base_exec_prefix: str +base_prefix: str +byteorder: str +builtin_module_names: Sequence[str] # actually a tuple of strings +copyright: str +# dllhandle = 0 # Windows only +dont_write_bytecode: bool +__displayhook__: Any # contains the original value of displayhook +__excepthook__: Any # contains the original value of excepthook +exec_prefix: str +executable: str +float_repr_style: str +hexversion: int +last_type: Optional[Type[BaseException]] +last_value: Optional[BaseException] +last_traceback: Optional[TracebackType] +maxsize: int +maxunicode: int +meta_path: List[MetaPathFinder] +modules: Dict[str, ModuleType] +path: List[str] +path_hooks: List[Any] # TODO precise type; function, path to finder +path_importer_cache: Dict[str, Any] # TODO precise type +platform: str +prefix: str +ps1: str +ps2: str +stdin: TextIO +stdout: TextIO +stderr: TextIO +__stdin__: TextIO +__stdout__: TextIO +__stderr__: TextIO +# deprecated and removed in Python 3.3: +subversion: Tuple[str, str, str] +tracebacklimit: int +version: str +api_version: int +warnoptions: Any +# Each entry is a tuple of the form (action, message, category, module, +# lineno) +# winver = '' # Windows only +_xoptions: Dict[Any, Any] + + +flags: _flags +class _flags: + debug: int + division_warning: int + inspect: int + interactive: int + optimize: int + dont_write_bytecode: int + no_user_site: int + no_site: int + ignore_environment: int + verbose: int + bytes_warning: int + quiet: int + hash_randomization: int + if sys.version_info >= (3, 7): + dev_mode: int + +float_info: _float_info +class _float_info: + epsilon: float # DBL_EPSILON + dig: int # DBL_DIG + mant_dig: int # DBL_MANT_DIG + max: float # DBL_MAX + max_exp: int # DBL_MAX_EXP + max_10_exp: int # DBL_MAX_10_EXP + min: float # DBL_MIN + min_exp: int # DBL_MIN_EXP + min_10_exp: int # DBL_MIN_10_EXP + radix: int # FLT_RADIX + rounds: int # FLT_ROUNDS + +hash_info: _hash_info +class _hash_info: + width: int + modulus: int + inf: int + nan: int + imag: int + +implementation: _implementation +class _implementation: + name: str + version: _version_info + hexversion: int + cache_tag: str + +int_info: _int_info +class _int_info: + bits_per_digit: int + sizeof_digit: int + +class _version_info(Tuple[int, int, int, str, int]): + major: int + minor: int + micro: int + releaselevel: str + serial: int +version_info: _version_info + +def call_tracing(fn: Callable[..., _T], args: Any) -> _T: ... +def _clear_type_cache() -> None: ... +def _current_frames() -> Dict[int, Any]: ... +def displayhook(value: Optional[int]) -> None: ... +def excepthook(type_: Type[BaseException], value: BaseException, + traceback: TracebackType) -> None: ... +def exc_info() -> _OptExcInfo: ... +# sys.exit() accepts an optional argument of anything printable +def exit(arg: object = ...) -> NoReturn: + raise SystemExit() +def getcheckinterval() -> int: ... # deprecated +def getdefaultencoding() -> str: ... +if sys.platform != 'win32': + # Unix only + def getdlopenflags() -> int: ... +def getfilesystemencoding() -> str: ... +def getrefcount(arg: Any) -> int: ... +def getrecursionlimit() -> int: ... + +@overload +def getsizeof(obj: object) -> int: ... +@overload +def getsizeof(obj: object, default: int) -> int: ... + +def getswitchinterval() -> float: ... + +@overload +def _getframe() -> FrameType: ... +@overload +def _getframe(depth: int) -> FrameType: ... + +_ProfileFunc = Callable[[FrameType, str, Any], Any] +def getprofile() -> Optional[_ProfileFunc]: ... +def setprofile(profilefunc: Optional[_ProfileFunc]) -> None: ... + +_TraceFunc = Callable[[FrameType, str, Any], Optional[Callable[[FrameType, str, Any], Any]]] +def gettrace() -> Optional[_TraceFunc]: ... +def settrace(tracefunc: Optional[_TraceFunc]) -> None: ... + + +class _WinVersion(Tuple[int, int, int, int, + str, int, int, int, int, + Tuple[int, int, int]]): + major: int + minor: int + build: int + platform: int + service_pack: str + service_pack_minor: int + service_pack_major: int + suite_mast: int + product_type: int + platform_version: Tuple[int, int, int] + + +def getwindowsversion() -> _WinVersion: ... # Windows only + +def intern(string: str) -> str: ... + +if sys.version_info >= (3, 5): + def is_finalizing() -> bool: ... + +if sys.version_info >= (3, 7): + __breakpointhook__: Any # contains the original value of breakpointhook + def breakpointhook(*args: Any, **kwargs: Any) -> Any: ... + +def setcheckinterval(interval: int) -> None: ... # deprecated +def setdlopenflags(n: int) -> None: ... # Linux only +def setrecursionlimit(limit: int) -> None: ... +def setswitchinterval(interval: float) -> None: ... +def settscdump(on_flag: bool) -> None: ... + +def gettotalrefcount() -> int: ... # Debug builds only diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tempfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tempfile.pyi new file mode 100644 index 0000000..e041b44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tempfile.pyi @@ -0,0 +1,123 @@ +# Stubs for tempfile +# Ron Murawski + +# based on http://docs.python.org/3.3/library/tempfile.html + +import sys +from types import TracebackType +from typing import Any, AnyStr, Generic, IO, Iterable, Iterator, List, Optional, overload, Tuple, Type + +# global variables +TMP_MAX: int +tempdir: Optional[str] +template: str + + +if sys.version_info >= (3, 5): + def TemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ... + ) -> IO[Any]: + ... + def NamedTemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ..., delete: bool = ... + ) -> IO[Any]: + ... + + # It does not actually derive from IO[AnyStr], but it does implement the + # protocol. + class SpooledTemporaryFile(IO[AnyStr]): + def __init__(self, max_size: int = ..., mode: str = ..., + buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[str] = ..., + prefix: Optional[str] = ..., dir: Optional[str] = ... + ) -> None: ... + def rollover(self) -> None: ... + def __enter__(self) -> SpooledTemporaryFile: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + # These methods are copied from the abstract methods of IO, because + # SpooledTemporaryFile implements IO. + # See also https://github.com/python/typeshed/pull/2452#issuecomment-420657918. + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, n: int = ...) -> AnyStr: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> AnyStr: ... + def readlines(self, hint: int = ...) -> List[AnyStr]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: AnyStr) -> int: ... + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + def __next__(self) -> AnyStr: ... + def __iter__(self) -> Iterator[AnyStr]: ... + + class TemporaryDirectory(Generic[AnyStr]): + name: str + def __init__(self, suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> AnyStr: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + def mkstemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ..., + text: bool = ...) -> Tuple[int, AnyStr]: ... + @overload + def mkdtemp() -> str: ... + @overload + def mkdtemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ...) -> AnyStr: ... + def mktemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... + + def gettempdirb() -> bytes: ... + def gettempprefixb() -> bytes: ... +else: + def TemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ... + ) -> IO[Any]: + ... + def NamedTemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ..., delete: bool = ... + ) -> IO[Any]: + ... + def SpooledTemporaryFile( + max_size: int = ..., mode: str = ..., buffering: int = ..., + encoding: str = ..., newline: str = ..., suffix: str = ..., + prefix: str = ..., dir: Optional[str] = ... + ) -> IO[Any]: + ... + + class TemporaryDirectory: + name: str + def __init__(self, suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> str: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + def mkstemp(suffix: str = ..., prefix: str = ..., dir: Optional[str] = ..., + text: bool = ...) -> Tuple[int, str]: ... + def mkdtemp(suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ...) -> str: ... + def mktemp(suffix: str = ..., prefix: str = ..., dir: Optional[str] = ...) -> str: ... + +def gettempdir() -> str: ... +def gettempprefix() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/textwrap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/textwrap.pyi new file mode 100644 index 0000000..f61f975 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/textwrap.pyi @@ -0,0 +1,113 @@ +from typing import Callable, List, Optional, Dict, Pattern + +class TextWrapper: + width: int = ... + initial_indent: str = ... + subsequent_indent: str = ... + expand_tabs: bool = ... + replace_whitespace: bool = ... + fix_sentence_endings: bool = ... + drop_whitespace: bool = ... + break_long_words: bool = ... + break_on_hyphens: bool = ... + tabsize: int = ... + max_lines: Optional[int] = ... + placeholder: str = ... + + # Attributes not present in documentation + sentence_end_re: Pattern[str] = ... + wordsep_re: Pattern[str] = ... + wordsep_simple_re: Pattern[str] = ... + whitespace_trans: str = ... + unicode_whitespace_trans: Dict[int, int] = ... + uspace: int = ... + x: int = ... + + def __init__( + self, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ..., + tabsize: int = ..., + *, + max_lines: Optional[int] = ..., + placeholder: str = ...) -> None: + ... + + # Private methods *are* part of the documented API for subclasses. + def _munge_whitespace(self, text: str) -> str: ... + def _split(self, text: str) -> List[str]: ... + def _fix_sentence_endings(self, chunks: List[str]) -> None: ... + def _handle_long_word(self, reversed_chunks: List[str], cur_line: List[str], cur_len: int, width: int) -> None: ... + def _wrap_chunks(self, chunks: List[str]) -> List[str]: ... + def _split_chunks(self, text: str) -> List[str]: ... + + def wrap(self, text: str) -> List[str]: ... + def fill(self, text: str) -> str: ... + + +def wrap( + text: str = ..., + width: int = ..., + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + max_lines: int = ..., + placeholder: str = ... +) -> List[str]: + ... + +def fill( + text: str, + width: int = ..., + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + max_lines: int = ..., + placeholder: str = ... +) -> str: + ... + +def shorten( + text: str, + width: int, + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + # Omit `max_lines: int = None`, it is forced to 1 here. + placeholder: str = ... +) -> str: + ... + +def dedent(text: str) -> str: + ... + +def indent(text: str, prefix: str, predicate: Callable[[str], bool] = ...) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi new file mode 100644 index 0000000..c638394 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi @@ -0,0 +1,663 @@ +from types import TracebackType +from typing import Any, Optional, Dict, Callable, Type +from tkinter.constants import * # noqa: F403 + +TclError: Any +wantobjects: Any +TkVersion: Any +TclVersion: Any +READABLE: Any +WRITABLE: Any +EXCEPTION: Any + +class Event: ... + +def NoDefaultRoot(): ... + +class Variable: + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def __del__(self): ... + def set(self, value): ... + initialize: Any + def get(self): ... + def trace_variable(self, mode, callback): ... + trace: Any + def trace_vdelete(self, mode, cbname): ... + def trace_vinfo(self): ... + def __eq__(self, other): ... + +class StringVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class IntVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class DoubleVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class BooleanVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def set(self, value): ... + initialize: Any + def get(self): ... + +def mainloop(n: int = ...): ... + +getint: Any +getdouble: Any + +def getboolean(s): ... + +class Misc: + def destroy(self): ... + def deletecommand(self, name): ... + def tk_strictMotif(self, boolean: Optional[Any] = ...): ... + def tk_bisque(self): ... + def tk_setPalette(self, *args, **kw): ... + def tk_menuBar(self, *args): ... + def wait_variable(self, name: str = ...): ... + waitvar: Any + def wait_window(self, window: Optional[Any] = ...): ... + def wait_visibility(self, window: Optional[Any] = ...): ... + def setvar(self, name: str = ..., value: str = ...): ... + def getvar(self, name: str = ...): ... + def getint(self, s): ... + def getdouble(self, s): ... + def getboolean(self, s): ... + def focus_set(self): ... + focus: Any + def focus_force(self): ... + def focus_get(self): ... + def focus_displayof(self): ... + def focus_lastfor(self): ... + def tk_focusFollowsMouse(self): ... + def tk_focusNext(self): ... + def tk_focusPrev(self): ... + def after(self, ms, func: Optional[Any] = ..., *args): ... + def after_idle(self, func, *args): ... + def after_cancel(self, id): ... + def bell(self, displayof: int = ...): ... + def clipboard_get(self, **kw): ... + def clipboard_clear(self, **kw): ... + def clipboard_append(self, string, **kw): ... + def grab_current(self): ... + def grab_release(self): ... + def grab_set(self): ... + def grab_set_global(self): ... + def grab_status(self): ... + def option_add(self, pattern, value, priority: Optional[Any] = ...): ... + def option_clear(self): ... + def option_get(self, name, className): ... + def option_readfile(self, fileName, priority: Optional[Any] = ...): ... + def selection_clear(self, **kw): ... + def selection_get(self, **kw): ... + def selection_handle(self, command, **kw): ... + def selection_own(self, **kw): ... + def selection_own_get(self, **kw): ... + def send(self, interp, cmd, *args): ... + def lower(self, belowThis: Optional[Any] = ...): ... + def tkraise(self, aboveThis: Optional[Any] = ...): ... + lift: Any + def winfo_atom(self, name, displayof: int = ...): ... + def winfo_atomname(self, id, displayof: int = ...): ... + def winfo_cells(self): ... + def winfo_children(self): ... + def winfo_class(self): ... + def winfo_colormapfull(self): ... + def winfo_containing(self, rootX, rootY, displayof: int = ...): ... + def winfo_depth(self): ... + def winfo_exists(self): ... + def winfo_fpixels(self, number): ... + def winfo_geometry(self): ... + def winfo_height(self): ... + def winfo_id(self): ... + def winfo_interps(self, displayof: int = ...): ... + def winfo_ismapped(self): ... + def winfo_manager(self): ... + def winfo_name(self): ... + def winfo_parent(self): ... + def winfo_pathname(self, id, displayof: int = ...): ... + def winfo_pixels(self, number): ... + def winfo_pointerx(self): ... + def winfo_pointerxy(self): ... + def winfo_pointery(self): ... + def winfo_reqheight(self): ... + def winfo_reqwidth(self): ... + def winfo_rgb(self, color): ... + def winfo_rootx(self): ... + def winfo_rooty(self): ... + def winfo_screen(self): ... + def winfo_screencells(self): ... + def winfo_screendepth(self): ... + def winfo_screenheight(self): ... + def winfo_screenmmheight(self): ... + def winfo_screenmmwidth(self): ... + def winfo_screenvisual(self): ... + def winfo_screenwidth(self): ... + def winfo_server(self): ... + def winfo_toplevel(self): ... + def winfo_viewable(self): ... + def winfo_visual(self): ... + def winfo_visualid(self): ... + def winfo_visualsavailable(self, includeids: int = ...): ... + def winfo_vrootheight(self): ... + def winfo_vrootwidth(self): ... + def winfo_vrootx(self): ... + def winfo_vrooty(self): ... + def winfo_width(self): ... + def winfo_x(self): ... + def winfo_y(self): ... + def update(self): ... + def update_idletasks(self): ... + def bindtags(self, tagList: Optional[Any] = ...): ... + def bind(self, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind(self, sequence, funcid: Optional[Any] = ...): ... + def bind_all(self, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind_all(self, sequence): ... + def bind_class(self, className, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind_class(self, className, sequence): ... + def mainloop(self, n: int = ...): ... + def quit(self): ... + def nametowidget(self, name): ... + register: Any + def configure(self, cnf: Optional[Any] = ..., **kw): ... + config: Any + def cget(self, key): ... + __getitem__: Any + def __setitem__(self, key, value): ... + def keys(self): ... + def pack_propagate(self, flag=...): ... + propagate: Any + def pack_slaves(self): ... + slaves: Any + def place_slaves(self): ... + def grid_anchor(self, anchor: Optional[Any] = ...): ... + anchor: Any + def grid_bbox(self, column: Optional[Any] = ..., row: Optional[Any] = ..., col2: Optional[Any] = ..., + row2: Optional[Any] = ...): ... + bbox: Any + def grid_columnconfigure(self, index, cnf=..., **kw): ... + columnconfigure: Any + def grid_location(self, x, y): ... + def grid_propagate(self, flag=...): ... + def grid_rowconfigure(self, index, cnf=..., **kw): ... + rowconfigure: Any + def grid_size(self): ... + size: Any + def grid_slaves(self, row: Optional[Any] = ..., column: Optional[Any] = ...): ... + def event_add(self, virtual, *sequences): ... + def event_delete(self, virtual, *sequences): ... + def event_generate(self, sequence, **kw): ... + def event_info(self, virtual: Optional[Any] = ...): ... + def image_names(self): ... + def image_types(self): ... + +class CallWrapper: + func: Any + subst: Any + widget: Any + def __init__(self, func, subst, widget): ... + def __call__(self, *args): ... + +class XView: + def xview(self, *args): ... + def xview_moveto(self, fraction): ... + def xview_scroll(self, number, what): ... + +class YView: + def yview(self, *args): ... + def yview_moveto(self, fraction): ... + def yview_scroll(self, number, what): ... + +class Wm: + def wm_aspect(self, minNumer: Optional[Any] = ..., minDenom: Optional[Any] = ..., maxNumer: Optional[Any] = ..., + maxDenom: Optional[Any] = ...): ... + aspect: Any + def wm_attributes(self, *args): ... + attributes: Any + def wm_client(self, name: Optional[Any] = ...): ... + client: Any + def wm_colormapwindows(self, *wlist): ... + colormapwindows: Any + def wm_command(self, value: Optional[Any] = ...): ... + command: Any + def wm_deiconify(self): ... + deiconify: Any + def wm_focusmodel(self, model: Optional[Any] = ...): ... + focusmodel: Any + def wm_forget(self, window): ... + forget: Any + def wm_frame(self): ... + frame: Any + def wm_geometry(self, newGeometry: Optional[Any] = ...): ... + geometry: Any + def wm_grid(self, baseWidth: Optional[Any] = ..., baseHeight: Optional[Any] = ..., widthInc: Optional[Any] = ..., + heightInc: Optional[Any] = ...): ... + grid: Any + def wm_group(self, pathName: Optional[Any] = ...): ... + group: Any + def wm_iconbitmap(self, bitmap: Optional[Any] = ..., default: Optional[Any] = ...): ... + iconbitmap: Any + def wm_iconify(self): ... + iconify: Any + def wm_iconmask(self, bitmap: Optional[Any] = ...): ... + iconmask: Any + def wm_iconname(self, newName: Optional[Any] = ...): ... + iconname: Any + def wm_iconphoto(self, default: bool = ..., *args): ... + iconphoto: Any + def wm_iconposition(self, x: Optional[Any] = ..., y: Optional[Any] = ...): ... + iconposition: Any + def wm_iconwindow(self, pathName: Optional[Any] = ...): ... + iconwindow: Any + def wm_manage(self, widget): ... + manage: Any + def wm_maxsize(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + maxsize: Any + def wm_minsize(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + minsize: Any + def wm_overrideredirect(self, boolean: Optional[Any] = ...): ... + overrideredirect: Any + def wm_positionfrom(self, who: Optional[Any] = ...): ... + positionfrom: Any + def wm_protocol(self, name: Optional[Any] = ..., func: Optional[Any] = ...): ... + protocol: Any + def wm_resizable(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + resizable: Any + def wm_sizefrom(self, who: Optional[Any] = ...): ... + sizefrom: Any + def wm_state(self, newstate: Optional[Any] = ...): ... + state: Any + def wm_title(self, string: Optional[Any] = ...): ... + title: Any + def wm_transient(self, master: Optional[Any] = ...): ... + transient: Any + def wm_withdraw(self): ... + withdraw: Any + +class Tk(Misc, Wm): + master: Optional[Any] + children: Dict[str, Any] + tk: Any + def __init__(self, screenName: Optional[str] = ..., baseName: Optional[str] = ..., className: str = ..., useTk: bool = ..., + sync: bool = ..., use: Optional[str] = ...) -> None: ... + def loadtk(self) -> None: ... + def destroy(self) -> None: ... + def readprofile(self, baseName: str, className: str) -> None: ... + report_callback_exception: Callable[[Type[BaseException], BaseException, TracebackType], Any] + def __getattr__(self, attr: str) -> Any: ... + +def Tcl(screenName: Optional[Any] = ..., baseName: Optional[Any] = ..., className: str = ..., useTk: bool = ...): ... + +class Pack: + def pack_configure(self, cnf=..., **kw): ... + pack: Any + def pack_forget(self): ... + forget: Any + def pack_info(self): ... + info: Any + propagate: Any + slaves: Any + +class Place: + def place_configure(self, cnf=..., **kw): ... + place: Any + def place_forget(self): ... + forget: Any + def place_info(self): ... + info: Any + slaves: Any + +class Grid: + def grid_configure(self, cnf=..., **kw): ... + grid: Any + bbox: Any + columnconfigure: Any + def grid_forget(self): ... + forget: Any + def grid_remove(self): ... + def grid_info(self): ... + info: Any + location: Any + propagate: Any + rowconfigure: Any + size: Any + slaves: Any + +class BaseWidget(Misc): + widgetName: Any + def __init__(self, master, widgetName, cnf=..., kw=..., extra=...): ... + def destroy(self): ... + +class Widget(BaseWidget, Pack, Place, Grid): ... + +class Toplevel(BaseWidget, Wm): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Button(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def flash(self): ... + def invoke(self): ... + +class Canvas(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def addtag(self, *args): ... + def addtag_above(self, newtag, tagOrId): ... + def addtag_all(self, newtag): ... + def addtag_below(self, newtag, tagOrId): ... + def addtag_closest(self, newtag, x, y, halo: Optional[Any] = ..., start: Optional[Any] = ...): ... + def addtag_enclosed(self, newtag, x1, y1, x2, y2): ... + def addtag_overlapping(self, newtag, x1, y1, x2, y2): ... + def addtag_withtag(self, newtag, tagOrId): ... + def bbox(self, *args): ... + def tag_unbind(self, tagOrId, sequence, funcid: Optional[Any] = ...): ... + def tag_bind(self, tagOrId, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def canvasx(self, screenx, gridspacing: Optional[Any] = ...): ... + def canvasy(self, screeny, gridspacing: Optional[Any] = ...): ... + def coords(self, *args): ... + def create_arc(self, *args, **kw): ... + def create_bitmap(self, *args, **kw): ... + def create_image(self, *args, **kw): ... + def create_line(self, *args, **kw): ... + def create_oval(self, *args, **kw): ... + def create_polygon(self, *args, **kw): ... + def create_rectangle(self, *args, **kw): ... + def create_text(self, *args, **kw): ... + def create_window(self, *args, **kw): ... + def dchars(self, *args): ... + def delete(self, *args): ... + def dtag(self, *args): ... + def find(self, *args): ... + def find_above(self, tagOrId): ... + def find_all(self): ... + def find_below(self, tagOrId): ... + def find_closest(self, x, y, halo: Optional[Any] = ..., start: Optional[Any] = ...): ... + def find_enclosed(self, x1, y1, x2, y2): ... + def find_overlapping(self, x1, y1, x2, y2): ... + def find_withtag(self, tagOrId): ... + def focus(self, *args): ... + def gettags(self, *args): ... + def icursor(self, *args): ... + def index(self, *args): ... + def insert(self, *args): ... + def itemcget(self, tagOrId, option): ... + def itemconfigure(self, tagOrId, cnf: Optional[Any] = ..., **kw): ... + itemconfig: Any + def tag_lower(self, *args): ... + lower: Any + def move(self, *args): ... + def postscript(self, cnf=..., **kw): ... + def tag_raise(self, *args): ... + lift: Any + def scale(self, *args): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y, gain: int = ...): ... + def select_adjust(self, tagOrId, index): ... + def select_clear(self): ... + def select_from(self, tagOrId, index): ... + def select_item(self): ... + def select_to(self, tagOrId, index): ... + def type(self, tagOrId): ... + +class Checkbutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def deselect(self): ... + def flash(self): ... + def invoke(self): ... + def select(self): ... + def toggle(self): ... + +class Entry(Widget, XView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self): ... + def icursor(self, index): ... + def index(self, index): ... + def insert(self, index, string): ... + def scan_mark(self, x): ... + def scan_dragto(self, x): ... + def selection_adjust(self, index): ... + select_adjust: Any + def selection_clear(self): ... + select_clear: Any + def selection_from(self, index): ... + select_from: Any + def selection_present(self): ... + select_present: Any + def selection_range(self, start, end): ... + select_range: Any + def selection_to(self, index): ... + select_to: Any + +class Frame(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Label(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Listbox(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def activate(self, index): ... + def bbox(self, index): ... + def curselection(self): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self, first, last: Optional[Any] = ...): ... + def index(self, index): ... + def insert(self, index, *elements): ... + def nearest(self, y): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y): ... + def see(self, index): ... + def selection_anchor(self, index): ... + select_anchor: Any + def selection_clear(self, first, last: Optional[Any] = ...): ... # type: ignore + select_clear: Any + def selection_includes(self, index): ... + select_includes: Any + def selection_set(self, first, last: Optional[Any] = ...): ... + select_set: Any + def size(self): ... + def itemcget(self, index, option): ... + def itemconfigure(self, index, cnf: Optional[Any] = ..., **kw): ... + itemconfig: Any + +class Menu(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def tk_popup(self, x, y, entry: str = ...): ... + def tk_bindForTraversal(self): ... + def activate(self, index): ... + def add(self, itemType, cnf=..., **kw): ... + def add_cascade(self, cnf=..., **kw): ... + def add_checkbutton(self, cnf=..., **kw): ... + def add_command(self, cnf=..., **kw): ... + def add_radiobutton(self, cnf=..., **kw): ... + def add_separator(self, cnf=..., **kw): ... + def insert(self, index, itemType, cnf=..., **kw): ... + def insert_cascade(self, index, cnf=..., **kw): ... + def insert_checkbutton(self, index, cnf=..., **kw): ... + def insert_command(self, index, cnf=..., **kw): ... + def insert_radiobutton(self, index, cnf=..., **kw): ... + def insert_separator(self, index, cnf=..., **kw): ... + def delete(self, index1, index2: Optional[Any] = ...): ... + def entrycget(self, index, option): ... + def entryconfigure(self, index, cnf: Optional[Any] = ..., **kw): ... + entryconfig: Any + def index(self, index): ... + def invoke(self, index): ... + def post(self, x, y): ... + def type(self, index): ... + def unpost(self): ... + def xposition(self, index): ... + def yposition(self, index): ... + +class Menubutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Message(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Radiobutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def deselect(self): ... + def flash(self): ... + def invoke(self): ... + def select(self): ... + +class Scale(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def get(self): ... + def set(self, value): ... + def coords(self, value: Optional[Any] = ...): ... + def identify(self, x, y): ... + +class Scrollbar(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def activate(self, index: Optional[Any] = ...): ... + def delta(self, deltax, deltay): ... + def fraction(self, x, y): ... + def identify(self, x, y): ... + def get(self): ... + def set(self, first, last): ... + +class Text(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def bbox(self, index): ... + def compare(self, index1, op, index2): ... + def count(self, index1, index2, *args): ... + def debug(self, boolean: Optional[Any] = ...): ... + def delete(self, index1, index2: Optional[Any] = ...): ... + def dlineinfo(self, index): ... + def dump(self, index1, index2: Optional[Any] = ..., command: Optional[Any] = ..., **kw): ... + def edit(self, *args): ... + def edit_modified(self, arg: Optional[Any] = ...): ... + def edit_redo(self): ... + def edit_reset(self): ... + def edit_separator(self): ... + def edit_undo(self): ... + def get(self, index1, index2: Optional[Any] = ...): ... + def image_cget(self, index, option): ... + def image_configure(self, index, cnf: Optional[Any] = ..., **kw): ... + def image_create(self, index, cnf=..., **kw): ... + def image_names(self): ... + def index(self, index): ... + def insert(self, index, chars, *args): ... + def mark_gravity(self, markName, direction: Optional[Any] = ...): ... + def mark_names(self): ... + def mark_set(self, markName, index): ... + def mark_unset(self, *markNames): ... + def mark_next(self, index): ... + def mark_previous(self, index): ... + def peer_create(self, newPathName, cnf=..., **kw): ... + def peer_names(self): ... + def replace(self, index1, index2, chars, *args): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y): ... + def search(self, pattern, index, stopindex: Optional[Any] = ..., forwards: Optional[Any] = ..., + backwards: Optional[Any] = ..., exact: Optional[Any] = ..., regexp: Optional[Any] = ..., + nocase: Optional[Any] = ..., count: Optional[Any] = ..., elide: Optional[Any] = ...): ... + def see(self, index): ... + def tag_add(self, tagName, index1, *args): ... + def tag_unbind(self, tagName, sequence, funcid: Optional[Any] = ...): ... + def tag_bind(self, tagName, sequence, func, add: Optional[Any] = ...): ... + def tag_cget(self, tagName, option): ... + def tag_configure(self, tagName, cnf: Optional[Any] = ..., **kw): ... + tag_config: Any + def tag_delete(self, *tagNames): ... + def tag_lower(self, tagName, belowThis: Optional[Any] = ...): ... + def tag_names(self, index: Optional[Any] = ...): ... + def tag_nextrange(self, tagName, index1, index2: Optional[Any] = ...): ... + def tag_prevrange(self, tagName, index1, index2: Optional[Any] = ...): ... + def tag_raise(self, tagName, aboveThis: Optional[Any] = ...): ... + def tag_ranges(self, tagName): ... + def tag_remove(self, tagName, index1, index2: Optional[Any] = ...): ... + def window_cget(self, index, option): ... + def window_configure(self, index, cnf: Optional[Any] = ..., **kw): ... + window_config: Any + def window_create(self, index, cnf=..., **kw): ... + def window_names(self): ... + def yview_pickplace(self, *what): ... + +class _setit: + def __init__(self, var, value, callback: Optional[Any] = ...): ... + def __call__(self, *args): ... + +class OptionMenu(Menubutton): + widgetName: Any + menuname: Any + def __init__(self, master, variable, value, *values, **kwargs): ... + def __getitem__(self, name): ... + def destroy(self): ... + +class Image: + name: Any + tk: Any + def __init__(self, imgtype, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + def __del__(self): ... + def __setitem__(self, key, value): ... + def __getitem__(self, key): ... + def configure(self, **kw): ... + config: Any + def height(self): ... + def type(self): ... + def width(self): ... + +class PhotoImage(Image): + def __init__(self, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + def blank(self): ... + def cget(self, option): ... + def __getitem__(self, key): ... + def copy(self): ... + def zoom(self, x, y: str = ...): ... + def subsample(self, x, y: str = ...): ... + def get(self, x, y): ... + def put(self, data, to: Optional[Any] = ...): ... + def write(self, filename, format: Optional[Any] = ..., from_coords: Optional[Any] = ...): ... + +class BitmapImage(Image): + def __init__(self, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + +def image_names(): ... +def image_types(): ... + +class Spinbox(Widget, XView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def bbox(self, index): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self): ... + def icursor(self, index): ... + def identify(self, x, y): ... + def index(self, index): ... + def insert(self, index, s): ... + def invoke(self, element): ... + def scan(self, *args): ... + def scan_mark(self, x): ... + def scan_dragto(self, x): ... + def selection(self, *args): ... + def selection_adjust(self, index): ... + def selection_clear(self): ... + def selection_element(self, element: Optional[Any] = ...): ... + +class LabelFrame(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class PanedWindow(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def add(self, child, **kw): ... + def remove(self, child): ... + forget: Any + def identify(self, x, y): ... + def proxy(self, *args): ... + def proxy_coord(self): ... + def proxy_forget(self): ... + def proxy_place(self, x, y): ... + def sash(self, *args): ... + def sash_coord(self, index): ... + def sash_mark(self, index): ... + def sash_place(self, index, x, y): ... + def panecget(self, child, option): ... + def paneconfigure(self, tagOrId, cnf: Optional[Any] = ..., **kw): ... + paneconfig: Any + def panes(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi new file mode 100644 index 0000000..d6a8a0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi @@ -0,0 +1,8 @@ +from typing import Any, Mapping, Optional + +class Dialog: + command: Optional[Any] = ... + master: Optional[Any] = ... + options: Mapping[str, Any] = ... + def __init__(self, master: Optional[Any] = ..., **options) -> None: ... + def show(self, **options) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi new file mode 100644 index 0000000..e21a93e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi @@ -0,0 +1,79 @@ +from typing import Any + +NO: Any +YES: Any +TRUE: Any +FALSE: Any +ON: Any +OFF: Any +N: Any +S: Any +W: Any +E: Any +NW: Any +SW: Any +NE: Any +SE: Any +NS: Any +EW: Any +NSEW: Any +CENTER: Any +NONE: Any +X: Any +Y: Any +BOTH: Any +LEFT: Any +TOP: Any +RIGHT: Any +BOTTOM: Any +RAISED: Any +SUNKEN: Any +FLAT: Any +RIDGE: Any +GROOVE: Any +SOLID: Any +HORIZONTAL: Any +VERTICAL: Any +NUMERIC: Any +CHAR: Any +WORD: Any +BASELINE: Any +INSIDE: Any +OUTSIDE: Any +SEL: Any +SEL_FIRST: Any +SEL_LAST: Any +END: Any +INSERT: Any +CURRENT: Any +ANCHOR: Any +ALL: Any +NORMAL: Any +DISABLED: Any +ACTIVE: Any +HIDDEN: Any +CASCADE: Any +CHECKBUTTON: Any +COMMAND: Any +RADIOBUTTON: Any +SEPARATOR: Any +SINGLE: Any +BROWSE: Any +MULTIPLE: Any +EXTENDED: Any +DOTBOX: Any +UNDERLINE: Any +PIESLICE: Any +CHORD: Any +ARC: Any +FIRST: Any +LAST: Any +BUTT: Any +PROJECTING: Any +ROUND: Any +BEVEL: Any +MITER: Any +MOVETO: Any +SCROLL: Any +UNITS: Any +PAGES: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi new file mode 100644 index 0000000..3136f21 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi @@ -0,0 +1,10 @@ +from typing import Any, Mapping, Optional +from tkinter import Widget + +DIALOG_ICON: str + +class Dialog(Widget): + widgetName: str = ... + num: int = ... + def __init__(self, master: Optional[Any] = ..., cnf: Mapping[str, Any] = ..., **kw) -> None: ... + def destroy(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi new file mode 100644 index 0000000..6d5f165 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi @@ -0,0 +1,65 @@ +from typing import Any, Dict, Optional, Tuple +from tkinter import Button, commondialog, Entry, Frame, Listbox, Scrollbar, Toplevel + +dialogstates: Dict[Any, Tuple[Any, Any]] + +class FileDialog: + title: str = ... + master: Any = ... + directory: Optional[Any] = ... + top: Toplevel = ... + botframe: Frame = ... + selection: Entry = ... + filter: Entry = ... + midframe: Entry = ... + filesbar: Scrollbar = ... + files: Listbox = ... + dirsbar: Scrollbar = ... + dirs: Listbox = ... + ok_button: Button = ... + filter_button: Button = ... + cancel_button: Button = ... + def __init__(self, master, title: Optional[Any] = ...) -> None: ... # title is usually a str or None, but e.g. int doesn't raise en exception either + how: Optional[Any] = ... + def go(self, dir_or_file: Any = ..., pattern: str = ..., default: str = ..., key: Optional[Any] = ...): ... + def quit(self, how: Optional[Any] = ...) -> None: ... + def dirs_double_event(self, event) -> None: ... + def dirs_select_event(self, event) -> None: ... + def files_double_event(self, event) -> None: ... + def files_select_event(self, event) -> None: ... + def ok_event(self, event) -> None: ... + def ok_command(self) -> None: ... + def filter_command(self, event: Optional[Any] = ...) -> None: ... + def get_filter(self): ... + def get_selection(self): ... + def cancel_command(self, event: Optional[Any] = ...) -> None: ... + def set_filter(self, dir, pat) -> None: ... + def set_selection(self, file) -> None: ... + +class LoadFileDialog(FileDialog): + title: str = ... + def ok_command(self) -> None: ... + +class SaveFileDialog(FileDialog): + title: str = ... + def ok_command(self): ... + +class _Dialog(commondialog.Dialog): ... + +class Open(_Dialog): + command: str = ... + +class SaveAs(_Dialog): + command: str = ... + +class Directory(commondialog.Dialog): + command: str = ... + +def askopenfilename(**options): ... +def asksaveasfilename(**options): ... +def askopenfilenames(**options): ... +def askopenfile(mode: str = ..., **options): ... +def askopenfiles(mode: str = ..., **options): ... +def asksaveasfile(mode: str = ..., **options): ... +def askdirectory(**options): ... +def test() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi new file mode 100644 index 0000000..b44e660 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi @@ -0,0 +1,31 @@ +from tkinter.commondialog import Dialog +from typing import Any, Optional + +ERROR: str +INFO: str +QUESTION: str +WARNING: str +ABORTRETRYIGNORE: str +OK: str +OKCANCEL: str +RETRYCANCEL: str +YESNO: str +YESNOCANCEL: str +ABORT: str +RETRY: str +IGNORE: str +CANCEL: str +YES: str +NO: str + +class Message(Dialog): + command: str = ... + +def showinfo(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def showwarning(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def showerror(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def askquestion(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def askokcancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... +def askyesno(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... +def askyesnocancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> Optional[bool]: ... +def askretrycancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi new file mode 100644 index 0000000..0362f17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi @@ -0,0 +1,160 @@ +import sys +from typing import Any, Optional +import tkinter + +def tclobjs_to_py(adict): ... +def setup_master(master: Optional[Any] = ...): ... + +class Style: + master: Any + tk: Any + def __init__(self, master: Optional[Any] = ...): ... + def configure(self, style, query_opt: Optional[Any] = ..., **kw): ... + def map(self, style, query_opt: Optional[Any] = ..., **kw): ... + def lookup(self, style, option, state: Optional[Any] = ..., default: Optional[Any] = ...): ... + def layout(self, style, layoutspec: Optional[Any] = ...): ... + def element_create(self, elementname, etype, *args, **kw): ... + def element_names(self): ... + def element_options(self, elementname): ... + def theme_create(self, themename, parent: Optional[Any] = ..., settings: Optional[Any] = ...): ... + def theme_settings(self, themename, settings): ... + def theme_names(self): ... + def theme_use(self, themename: Optional[Any] = ...): ... + +class Widget(tkinter.Widget): + def __init__(self, master, widgetname, kw: Optional[Any] = ...): ... + def identify(self, x, y): ... + def instate(self, statespec, callback: Optional[Any] = ..., *args, **kw): ... + def state(self, statespec: Optional[Any] = ...): ... + +class Button(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Checkbutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Entry(Widget, tkinter.Entry): + def __init__(self, master: Optional[Any] = ..., widget: Optional[Any] = ..., **kw): ... + def bbox(self, index): ... + def identify(self, x, y): ... + def validate(self): ... + +class Combobox(Entry): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def current(self, newindex: Optional[Any] = ...): ... + def set(self, value): ... + +class Frame(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Label(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Labelframe(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +LabelFrame: Any + +class Menubutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Notebook(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def add(self, child, **kw): ... + def forget(self, tab_id): ... + def hide(self, tab_id): ... + def identify(self, x, y): ... + def index(self, tab_id): ... + def insert(self, pos, child, **kw): ... + def select(self, tab_id: Optional[Any] = ...): ... + def tab(self, tab_id, option: Optional[Any] = ..., **kw): ... + def tabs(self): ... + def enable_traversal(self): ... + +class Panedwindow(Widget, tkinter.PanedWindow): + def __init__(self, master: Optional[Any] = ..., **kw): ... + forget: Any + def insert(self, pos, child, **kw): ... + def pane(self, pane, option: Optional[Any] = ..., **kw): ... + def sashpos(self, index, newpos: Optional[Any] = ...): ... + +PanedWindow: Any + +class Progressbar(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def start(self, interval: Optional[Any] = ...): ... + def step(self, amount: Optional[Any] = ...): ... + def stop(self): ... + +class Radiobutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Scale(Widget, tkinter.Scale): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def configure(self, cnf: Optional[Any] = ..., **kw): ... + def get(self, x: Optional[Any] = ..., y: Optional[Any] = ...): ... + +class Scrollbar(Widget, tkinter.Scrollbar): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Separator(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Sizegrip(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +if sys.version_info >= (3, 7): + class Spinbox(Entry): + def __init__(self, master: Any = ..., **kw: Any) -> None: ... + def set(self, value: Any) -> None: ... + +class Treeview(Widget, tkinter.XView, tkinter.YView): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def bbox(self, item, column: Optional[Any] = ...): ... + def get_children(self, item: Optional[Any] = ...): ... + def set_children(self, item, *newchildren): ... + def column(self, column, option: Optional[Any] = ..., **kw): ... + def delete(self, *items): ... + def detach(self, *items): ... + def exists(self, item): ... + def focus(self, item: Optional[Any] = ...): ... + def heading(self, column, option: Optional[Any] = ..., **kw): ... + def identify(self, component, x, y): ... + def identify_row(self, y): ... + def identify_column(self, x): ... + def identify_region(self, x, y): ... + def identify_element(self, x, y): ... + def index(self, item): ... + def insert(self, parent, index, iid: Optional[Any] = ..., **kw): ... + def item(self, item, option: Optional[Any] = ..., **kw): ... + def move(self, item, parent, index): ... + reattach: Any + def next(self, item): ... + def parent(self, item): ... + def prev(self, item): ... + def see(self, item): ... + def selection(self, selop: Optional[Any] = ..., items: Optional[Any] = ...): ... + def selection_set(self, items): ... + def selection_add(self, items): ... + def selection_remove(self, items): ... + def selection_toggle(self, items): ... + def set(self, item, column: Optional[Any] = ..., value: Optional[Any] = ...): ... + def tag_bind(self, tagname, sequence: Optional[Any] = ..., callback: Optional[Any] = ...): ... + def tag_configure(self, tagname, option: Optional[Any] = ..., **kw): ... + def tag_has(self, tagname, item: Optional[Any] = ...): ... + +class LabeledScale(Frame): + label: Any + scale: Any + def __init__(self, master: Optional[Any] = ..., variable: Optional[Any] = ..., from_: int = ..., to: int = ..., **kw): ... + def destroy(self): ... + value: Any + +class OptionMenu(Menubutton): + def __init__(self, master, variable, default: Optional[Any] = ..., *values, **kwargs): ... + def __getitem__(self, item): ... + def set_menu(self, default: Optional[Any] = ..., *values): ... + def destroy(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tokenize.pyi new file mode 100644 index 0000000..33c8a2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tokenize.pyi @@ -0,0 +1,114 @@ +from typing import Any, Callable, Generator, Iterable, List, NamedTuple, Optional, Union, Sequence, TextIO, Tuple +from builtins import open as _builtin_open +import sys +from token import * # noqa: F403 + +COMMENT: int +NL: int +ENCODING: int + +_Position = Tuple[int, int] + +_TokenInfo = NamedTuple('TokenInfo', [ + ('type', int), + ('string', str), + ('start', _Position), + ('end', _Position), + ('line', str) +]) + +class TokenInfo(_TokenInfo): + @property + def exact_type(self) -> int: ... + +# Backwards compatible tokens can be sequences of a shorter length too +_Token = Union[TokenInfo, Sequence[Union[int, str, _Position]]] + +class TokenError(Exception): ... +class StopTokenizing(Exception): ... + +class Untokenizer: + tokens: List[str] + prev_row: int + prev_col: int + encoding: Optional[str] + def __init__(self) -> None: ... + def add_whitespace(self, start: _Position) -> None: ... + def untokenize(self, iterable: Iterable[_Token]) -> str: ... + def compat(self, token: Sequence[Union[int, str]], iterable: Iterable[_Token]) -> None: ... + +def untokenize(iterable: Iterable[_Token]) -> Any: ... +def detect_encoding(readline: Callable[[], bytes]) -> Tuple[str, Sequence[bytes]]: ... +def tokenize(readline: Callable[[], bytes]) -> Generator[TokenInfo, None, None]: ... +def generate_tokens(readline: Callable[[], str]) -> Generator[TokenInfo, None, None]: ... + +if sys.version_info >= (3, 6): + from os import PathLike + def open(filename: Union[str, bytes, int, PathLike]) -> TextIO: ... +else: + def open(filename: Union[str, bytes, int]) -> TextIO: ... + +# Names in __all__ with no definition: +# AMPER +# AMPEREQUAL +# ASYNC +# AT +# ATEQUAL +# AWAIT +# CIRCUMFLEX +# CIRCUMFLEXEQUAL +# COLON +# COMMA +# DEDENT +# DOT +# DOUBLESLASH +# DOUBLESLASHEQUAL +# DOUBLESTAR +# DOUBLESTAREQUAL +# ELLIPSIS +# ENDMARKER +# EQEQUAL +# EQUAL +# ERRORTOKEN +# GREATER +# GREATEREQUAL +# INDENT +# ISEOF +# ISNONTERMINAL +# ISTERMINAL +# LBRACE +# LEFTSHIFT +# LEFTSHIFTEQUAL +# LESS +# LESSEQUAL +# LPAR +# LSQB +# MINEQUAL +# MINUS +# NAME +# NEWLINE +# NOTEQUAL +# NT_OFFSET +# NUMBER +# N_TOKENS +# OP +# PERCENT +# PERCENTEQUAL +# PLUS +# PLUSEQUAL +# RARROW +# RBRACE +# RIGHTSHIFT +# RIGHTSHIFTEQUAL +# RPAR +# RSQB +# SEMI +# SLASH +# SLASHEQUAL +# STAR +# STAREQUAL +# STRING +# TILDE +# VBAR +# VBAREQUAL +# tok_name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi new file mode 100644 index 0000000..8758cc6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi @@ -0,0 +1,70 @@ +# Stubs for tracemalloc (Python 3.4+) + +import sys +from typing import List, Optional, Sequence, Tuple, Union, overload + +def clear_traces() -> None: ... +def get_object_traceback(obj: object) -> Optional[Traceback]: ... +def get_traceback_limit() -> int: ... +def get_traced_memory() -> Tuple[int, int]: ... +def get_tracemalloc_memory() -> int: ... +def is_tracing() -> bool: ... +def start(nframe: int = ...) -> None: ... +def stop() -> None: ... +def take_snapshot() -> Snapshot: ... + +if sys.version_info >= (3, 6): + class DomainFilter: + inclusive: bool + domain: int + def __init__(self, inclusive: bool, domain: int) -> None: ... + +class Filter: + if sys.version_info >= (3, 6): + domain: Optional[int] + inclusive: bool + lineno: Optional[int] + filename_pattern: str + all_frames: bool + def __init__(self, inclusive: bool, filename_pattern: str, lineno: Optional[int] = ..., all_frames: bool = ..., domain: Optional[int] = ...) -> None: ... + +class Frame: + filename: str + lineno: int + +class Snapshot: + def compare_to(self, old_snapshot: Snapshot, key_type: str, cumulative: bool = ...) -> List[StatisticDiff]: ... + def dump(self, filename: str) -> None: ... + if sys.version_info >= (3, 6): + def filter_traces(self, filters: Sequence[Union[DomainFilter, Filter]]) -> Snapshot: ... + else: + def filter_traces(self, filters: Sequence[Filter]) -> Snapshot: ... + @classmethod + def load(cls, filename: str) -> Snapshot: ... + def statistics(self, key_type: str, cumulative: bool = ...) -> List[Statistic]: ... + traceback_limit: int + traces: Sequence[Trace] + +class Statistic: + count: int + size: int + traceback: Traceback + +class StatisticDiff: + count: int + count_diff: int + size: int + size_diff: int + traceback: Traceback + +class Trace: + size: int + traceback: Traceback + +class Traceback(Sequence[Frame]): + def format(self, limit: Optional[int] = ...) -> List[str]: ... + @overload + def __getitem__(self, i: int) -> Frame: ... + @overload + def __getitem__(self, s: slice) -> Sequence[Frame]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/types.pyi new file mode 100644 index 0000000..11ee600 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/types.pyi @@ -0,0 +1,208 @@ +# Stubs for types +# Note, all classes "defined" here require special handling. + +# TODO parts of this should be conditional on version + +import sys +from typing import ( + Any, Awaitable, Callable, Dict, Generic, Iterator, Mapping, Optional, Tuple, TypeVar, + Union, overload, Type +) + +# ModuleType is exported from this module, but for circular import +# reasons exists in its own stub file (with ModuleSpec and Loader). +from _importlib_modulespec import ModuleType as ModuleType # Exported + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_T_contra = TypeVar('_T_contra', contravariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +class _Cell: + cell_contents: Any + +class FunctionType: + __closure__: Optional[Tuple[_Cell, ...]] + __code__: CodeType + __defaults__: Optional[Tuple[Any, ...]] + __dict__: Dict[str, Any] + __globals__: Dict[str, Any] + __name__: str + __qualname__: str + __annotations__: Dict[str, Any] + __kwdefaults__: Dict[str, Any] + def __init__(self, code: CodeType, globals: Dict[str, Any], name: Optional[str] = ..., argdefs: Optional[Tuple[object, ...]] = ..., closure: Optional[Tuple[_Cell, ...]] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __get__(self, obj: Optional[object], type: Optional[type]) -> MethodType: ... +LambdaType = FunctionType + +class CodeType: + """Create a code object. Not for the faint of heart.""" + co_argcount: int + co_kwonlyargcount: int + co_nlocals: int + co_stacksize: int + co_flags: int + co_code: bytes + co_consts: Tuple[Any, ...] + co_names: Tuple[str, ...] + co_varnames: Tuple[str, ...] + co_filename: str + co_name: str + co_firstlineno: int + co_lnotab: bytes + co_freevars: Tuple[str, ...] + co_cellvars: Tuple[str, ...] + def __init__( + self, + argcount: int, + kwonlyargcount: int, + nlocals: int, + stacksize: int, + flags: int, + codestring: bytes, + constants: Tuple[Any, ...], + names: Tuple[str, ...], + varnames: Tuple[str, ...], + filename: str, + name: str, + firstlineno: int, + lnotab: bytes, + freevars: Tuple[str, ...] = ..., + cellvars: Tuple[str, ...] = ..., + ) -> None: ... + +class MappingProxyType(Mapping[_KT, _VT], Generic[_KT, _VT]): + def __init__(self, mapping: Mapping[_KT, _VT]) -> None: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __iter__(self) -> Iterator[_KT]: ... + def __len__(self) -> int: ... + def copy(self) -> Mapping[_KT, _VT]: ... + +class SimpleNamespace: + def __init__(self, **kwargs: Any) -> None: ... + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + +class GeneratorType: + gi_code: CodeType + gi_frame: FrameType + gi_running: bool + gi_yieldfrom: Optional[GeneratorType] + def __iter__(self) -> GeneratorType: ... + def __next__(self) -> Any: ... + def close(self) -> None: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +if sys.version_info >= (3, 6): + class AsyncGeneratorType(Generic[_T_co, _T_contra]): + ag_await: Optional[Awaitable[Any]] + ag_frame: FrameType + ag_running: bool + ag_code: CodeType + def __aiter__(self) -> Awaitable[AsyncGeneratorType[_T_co, _T_contra]]: ... + def __anext__(self) -> Awaitable[_T_co]: ... + def asend(self, val: _T_contra) -> Awaitable[_T_co]: ... + @overload + def athrow(self, val: BaseException) -> Awaitable[_T_co]: ... + @overload + def athrow(self, typ: Type[BaseException], val: BaseException, tb: TracebackType = ...) -> Awaitable[_T_co]: ... + def aclose(self) -> Awaitable[_T_co]: ... + +class CoroutineType: + cr_await: Optional[Any] + cr_code: CodeType + cr_frame: FrameType + cr_running: bool + def close(self) -> None: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +class _StaticFunctionType: + """Fictional type to correct the type of MethodType.__func__. + + FunctionType is a descriptor, so mypy follows the descriptor protocol and + converts MethodType.__func__ back to MethodType (the return type of + FunctionType.__get__). But this is actually a special case; MethodType is + implemented in C and its attribute access doesn't go through + __getattribute__. + + By wrapping FunctionType in _StaticFunctionType, we get the right result; + similar to wrapping a function in staticmethod() at runtime to prevent it + being bound as a method. + """ + def __get__(self, obj: Optional[object], type: Optional[type]) -> FunctionType: ... + +class MethodType: + __func__: _StaticFunctionType + __self__: object + __name__: str + __qualname__: str + def __init__(self, func: Callable, obj: object) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +class BuiltinFunctionType: + __self__: Union[object, ModuleType] + __name__: str + __qualname__: str + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +BuiltinMethodType = BuiltinFunctionType + +class TracebackType: + if sys.version_info >= (3, 7): + def __init__(self, tb_next: Optional[TracebackType], tb_frame: FrameType, tb_lasti: int, tb_lineno: int) -> None: ... + tb_next: Optional[TracebackType] + else: + @property + def tb_next(self) -> Optional[TracebackType]: ... + # the rest are read-only even in 3.7 + @property + def tb_frame(self) -> FrameType: ... + @property + def tb_lasti(self) -> int: ... + @property + def tb_lineno(self) -> int: ... + +class FrameType: + f_back: FrameType + f_builtins: Dict[str, Any] + f_code: CodeType + f_globals: Dict[str, Any] + f_lasti: int + f_lineno: int + f_locals: Dict[str, Any] + f_trace: Callable[[], None] + if sys.version_info >= (3, 7): + f_trace_lines: bool + f_trace_opcodes: bool + + def clear(self) -> None: ... + +class GetSetDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... +class MemberDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + +def new_class(name: str, bases: Tuple[type, ...] = ..., kwds: Dict[str, Any] = ..., exec_body: Callable[[Dict[str, Any]], None] = ...) -> type: ... +def prepare_class(name: str, bases: Tuple[type, ...] = ..., kwds: Dict[str, Any] = ...) -> Tuple[type, Dict[str, Any], Dict[str, Any]]: ... + +# Actually a different type, but `property` is special and we want that too. +DynamicClassAttribute = property + +def coroutine(f: Callable[..., Any]) -> CoroutineType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/typing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/typing.pyi new file mode 100644 index 0000000..c99c1f9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/typing.pyi @@ -0,0 +1,597 @@ +# Stubs for typing + +import sys +from abc import abstractmethod, ABCMeta +from types import CodeType, FrameType, TracebackType +import collections # Needed by aliases like DefaultDict, see mypy issue 2986 + +# Definitions of special type checking related constructs. Their definition +# are not used, so their value does not matter. + +overload = object() +Any = object() +TypeVar = object() +_promote = object() +no_type_check = object() + +class _SpecialForm: + def __getitem__(self, typeargs: Any) -> Any: ... + +Tuple: _SpecialForm = ... +Generic: _SpecialForm = ... +Protocol: _SpecialForm = ... +Callable: _SpecialForm = ... +Type: _SpecialForm = ... +ClassVar: _SpecialForm = ... + +class GenericMeta(type): ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] + +# Type aliases and type constructors + +class TypeAlias: + # Class for defining generic aliases for library types. + def __init__(self, target_type: type) -> None: ... + def __getitem__(self, typeargs: Any) -> Any: ... + +Union = TypeAlias(object) +Optional = TypeAlias(object) +List = TypeAlias(object) +Dict = TypeAlias(object) +DefaultDict = TypeAlias(object) +Set = TypeAlias(object) +FrozenSet = TypeAlias(object) +Counter = TypeAlias(object) +Deque = TypeAlias(object) +ChainMap = TypeAlias(object) + +# Predefined type variables. +AnyStr = TypeVar('AnyStr', str, bytes) + +# Abstract base classes. + +# These type variables are used by the container types. +_T = TypeVar('_T') +_S = TypeVar('_S') +_KT = TypeVar('_KT') # Key type. +_VT = TypeVar('_VT') # Value type. +_T_co = TypeVar('_T_co', covariant=True) # Any type covariant containers. +_V_co = TypeVar('_V_co', covariant=True) # Any type covariant containers. +_KT_co = TypeVar('_KT_co', covariant=True) # Key type covariant containers. +_VT_co = TypeVar('_VT_co', covariant=True) # Value type covariant containers. +_T_contra = TypeVar('_T_contra', contravariant=True) # Ditto contravariant. +_TC = TypeVar('_TC', bound=Type[object]) +_C = TypeVar("_C", bound=Callable) + +def runtime(cls: _TC) -> _TC: ... + +@runtime +class SupportsInt(Protocol, metaclass=ABCMeta): + @abstractmethod + def __int__(self) -> int: ... + +@runtime +class SupportsFloat(Protocol, metaclass=ABCMeta): + @abstractmethod + def __float__(self) -> float: ... + +@runtime +class SupportsComplex(Protocol, metaclass=ABCMeta): + @abstractmethod + def __complex__(self) -> complex: ... + +@runtime +class SupportsBytes(Protocol, metaclass=ABCMeta): + @abstractmethod + def __bytes__(self) -> bytes: ... + +@runtime +class SupportsAbs(Protocol[_T_co]): + @abstractmethod + def __abs__(self) -> _T_co: ... + +@runtime +class SupportsRound(Protocol[_T_co]): + @overload + @abstractmethod + def __round__(self) -> int: ... + @overload + @abstractmethod + def __round__(self, ndigits: int) -> _T_co: ... + +@runtime +class Reversible(Protocol[_T_co]): + @abstractmethod + def __reversed__(self) -> Iterator[_T_co]: ... + +@runtime +class Sized(Protocol, metaclass=ABCMeta): + @abstractmethod + def __len__(self) -> int: ... + +@runtime +class Hashable(Protocol, metaclass=ABCMeta): + # TODO: This is special, in that a subclass of a hashable class may not be hashable + # (for example, list vs. object). It's not obvious how to represent this. This class + # is currently mostly useless for static checking. + @abstractmethod + def __hash__(self) -> int: ... + +@runtime +class Iterable(Protocol[_T_co]): + @abstractmethod + def __iter__(self) -> Iterator[_T_co]: ... + +@runtime +class Iterator(Iterable[_T_co], Protocol[_T_co]): + @abstractmethod + def __next__(self) -> _T_co: ... + def __iter__(self) -> Iterator[_T_co]: ... + +class Generator(Iterator[_T_co], Generic[_T_co, _T_contra, _V_co]): + @abstractmethod + def __next__(self) -> _T_co: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Optional[TracebackType] = ...) -> _T_co: ... + + @abstractmethod + def close(self) -> None: ... + + @abstractmethod + def __iter__(self) -> Generator[_T_co, _T_contra, _V_co]: ... + + @property + def gi_code(self) -> CodeType: ... + @property + def gi_frame(self) -> FrameType: ... + @property + def gi_running(self) -> bool: ... + @property + def gi_yieldfrom(self) -> Optional[Generator]: ... + +# TODO: Several types should only be defined if sys.python_version >= (3, 5): +# Awaitable, AsyncIterator, AsyncIterable, Coroutine, Collection. +# See https: //github.com/python/typeshed/issues/655 for why this is not easy. + +@runtime +class Awaitable(Protocol[_T_co]): + @abstractmethod + def __await__(self) -> Generator[Any, None, _T_co]: ... + +class Coroutine(Awaitable[_V_co], Generic[_T_co, _T_contra, _V_co]): + @property + def cr_await(self) -> Optional[Any]: ... + @property + def cr_code(self) -> CodeType: ... + @property + def cr_frame(self) -> FrameType: ... + @property + def cr_running(self) -> bool: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Optional[TracebackType] = ...) -> _T_co: ... + + @abstractmethod + def close(self) -> None: ... + + +# NOTE: This type does not exist in typing.py or PEP 484. +# The parameters correspond to Generator, but the 4th is the original type. +class AwaitableGenerator(Awaitable[_V_co], Generator[_T_co, _T_contra, _V_co], + Generic[_T_co, _T_contra, _V_co, _S], metaclass=ABCMeta): ... + +@runtime +class AsyncIterable(Protocol[_T_co]): + @abstractmethod + def __aiter__(self) -> AsyncIterator[_T_co]: ... + +@runtime +class AsyncIterator(AsyncIterable[_T_co], + Protocol[_T_co]): + @abstractmethod + def __anext__(self) -> Awaitable[_T_co]: ... + def __aiter__(self) -> AsyncIterator[_T_co]: ... + +if sys.version_info >= (3, 6): + class AsyncGenerator(AsyncIterator[_T_co], Generic[_T_co, _T_contra]): + @abstractmethod + def __anext__(self) -> Awaitable[_T_co]: ... + + @abstractmethod + def asend(self, value: _T_contra) -> Awaitable[_T_co]: ... + + @abstractmethod + def athrow(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Any = ...) -> Awaitable[_T_co]: ... + + @abstractmethod + def aclose(self) -> Awaitable[None]: ... + + @abstractmethod + def __aiter__(self) -> AsyncGenerator[_T_co, _T_contra]: ... + + @property + def ag_await(self) -> Any: ... + @property + def ag_code(self) -> CodeType: ... + @property + def ag_frame(self) -> FrameType: ... + @property + def ag_running(self) -> bool: ... + +@runtime +class Container(Protocol[_T_co]): + @abstractmethod + def __contains__(self, __x: object) -> bool: ... + + +if sys.version_info >= (3, 6): + @runtime + class Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]): + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + + _Collection = Collection +else: + @runtime + class _Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]): + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class Sequence(_Collection[_T_co], Reversible[_T_co], Generic[_T_co]): + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T_co: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> Sequence[_T_co]: ... + # Mixin methods + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + def count(self, x: Any) -> int: ... + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __reversed__(self) -> Iterator[_T_co]: ... + +class MutableSequence(Sequence[_T], Generic[_T]): + @abstractmethod + def insert(self, index: int, object: _T) -> None: ... + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> MutableSequence[_T]: ... + @overload + @abstractmethod + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + @abstractmethod + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: int) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: slice) -> None: ... + # Mixin methods + def append(self, object: _T) -> None: ... + def clear(self) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def reverse(self) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def remove(self, object: _T) -> None: ... + def __iadd__(self, x: Iterable[_T]) -> MutableSequence[_T]: ... + +class AbstractSet(_Collection[_T_co], Generic[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + # Mixin methods + def __le__(self, s: AbstractSet[Any]) -> bool: ... + def __lt__(self, s: AbstractSet[Any]) -> bool: ... + def __gt__(self, s: AbstractSet[Any]) -> bool: ... + def __ge__(self, s: AbstractSet[Any]) -> bool: ... + def __and__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __or__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + def __sub__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __xor__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + # TODO: Argument can be a more general ABC? + def isdisjoint(self, s: AbstractSet[Any]) -> bool: ... + +class MutableSet(AbstractSet[_T], Generic[_T]): + @abstractmethod + def add(self, x: _T) -> None: ... + @abstractmethod + def discard(self, x: _T) -> None: ... + # Mixin methods + def clear(self) -> None: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def __ior__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __iand__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + def __ixor__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __isub__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + +class MappingView: + def __len__(self) -> int: ... + +class ItemsView(MappingView, AbstractSet[Tuple[_KT_co, _VT_co]], Generic[_KT_co, _VT_co]): + def __and__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[Tuple[_KT_co, _VT_co]]: ... + def __or__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + def __xor__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + +class KeysView(MappingView, AbstractSet[_KT_co], Generic[_KT_co]): + def __and__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT_co]: ... + def __or__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + def __xor__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + +class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_VT_co]: ... + +@runtime +class ContextManager(Protocol[_T_co]): + def __enter__(self) -> _T_co: ... + def __exit__(self, __exc_type: Optional[Type[BaseException]], + __exc_value: Optional[BaseException], + __traceback: Optional[TracebackType]) -> Optional[bool]: ... + +if sys.version_info >= (3, 5): + @runtime + class AsyncContextManager(Protocol[_T_co]): + def __aenter__(self) -> Awaitable[_T_co]: ... + def __aexit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Awaitable[Optional[bool]]: ... + +class Mapping(_Collection[_KT], Generic[_KT, _VT_co]): + # TODO: We wish the key type could also be covariant, but that doesn't work, + # see discussion in https: //github.com/python/typing/pull/273. + @abstractmethod + def __getitem__(self, k: _KT) -> _VT_co: + ... + # Mixin methods + @overload + def get(self, k: _KT) -> Optional[_VT_co]: ... + @overload + def get(self, k: _KT, default: Union[_VT_co, _T]) -> Union[_VT_co, _T]: ... + def items(self) -> AbstractSet[Tuple[_KT, _VT_co]]: ... + def keys(self) -> AbstractSet[_KT]: ... + def values(self) -> ValuesView[_VT_co]: ... + def __contains__(self, o: object) -> bool: ... + +class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]): + @abstractmethod + def __setitem__(self, k: _KT, v: _VT) -> None: ... + @abstractmethod + def __delitem__(self, v: _KT) -> None: ... + + def clear(self) -> None: ... + @overload + def pop(self, k: _KT) -> _VT: ... + @overload + def pop(self, k: _KT, default: Union[_VT, _T] = ...) -> Union[_VT, _T]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + # 'update' used to take a Union, but using overloading is better. + # The second overloaded type here is a bit too general, because + # Mapping[Tuple[_KT, _VT], W] is a subclass of Iterable[Tuple[_KT, _VT]], + # but will always have the behavior of the first overloaded type + # at runtime, leading to keys of a mix of types _KT and Tuple[_KT, _VT]. + # We don't currently have any way of forcing all Mappings to use + # the first overload, but by using overloading rather than a Union, + # mypy will commit to using the first overload when the argument is + # known to be a Mapping with unknown type parameters, which is closer + # to the behavior we want. See mypy issue #1430. + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + +Text = str + +TYPE_CHECKING = True + +class IO(Iterator[AnyStr], Generic[AnyStr]): + # TODO detach + # TODO use abstract properties + @property + def mode(self) -> str: ... + @property + def name(self) -> str: ... + @abstractmethod + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + @abstractmethod + def fileno(self) -> int: ... + @abstractmethod + def flush(self) -> None: ... + @abstractmethod + def isatty(self) -> bool: ... + # TODO what if n is None? + @abstractmethod + def read(self, n: int = ...) -> AnyStr: ... + @abstractmethod + def readable(self) -> bool: ... + @abstractmethod + def readline(self, limit: int = ...) -> AnyStr: ... + @abstractmethod + def readlines(self, hint: int = ...) -> list[AnyStr]: ... + @abstractmethod + def seek(self, offset: int, whence: int = ...) -> int: ... + @abstractmethod + def seekable(self) -> bool: ... + @abstractmethod + def tell(self) -> int: ... + @abstractmethod + def truncate(self, size: Optional[int] = ...) -> int: ... + @abstractmethod + def writable(self) -> bool: ... + # TODO buffer objects + @abstractmethod + def write(self, s: AnyStr) -> int: ... + @abstractmethod + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + + @abstractmethod + def __next__(self) -> AnyStr: ... + @abstractmethod + def __iter__(self) -> Iterator[AnyStr]: ... + @abstractmethod + def __enter__(self) -> IO[AnyStr]: ... + @abstractmethod + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], + traceback: Optional[TracebackType]) -> bool: ... + +class BinaryIO(IO[bytes]): + # TODO readinto + # TODO read1? + # TODO peek? + @overload + @abstractmethod + def write(self, s: bytearray) -> int: ... + @overload + @abstractmethod + def write(self, s: bytes) -> int: ... + + @abstractmethod + def __enter__(self) -> BinaryIO: ... + +class TextIO(IO[str]): + # TODO use abstractproperty + @property + def buffer(self) -> BinaryIO: ... + @property + def encoding(self) -> str: ... + @property + def errors(self) -> Optional[str]: ... + @property + def line_buffering(self) -> int: ... # int on PyPy, bool on CPython + @property + def newlines(self) -> Any: ... # None, str or tuple + @abstractmethod + def __enter__(self) -> TextIO: ... + +class ByteString(Sequence[int], metaclass=ABCMeta): ... + +class Match(Generic[AnyStr]): + pos = 0 + endpos = 0 + lastindex = 0 + lastgroup: AnyStr + string: AnyStr + + # The regular expression object whose match() or search() method produced + # this match instance. + re: Pattern[AnyStr] + + def expand(self, template: AnyStr) -> AnyStr: ... + + @overload + def group(self, group1: int = ...) -> AnyStr: ... + @overload + def group(self, group1: str) -> AnyStr: ... + @overload + def group(self, group1: int, group2: int, + *groups: int) -> Sequence[AnyStr]: ... + @overload + def group(self, group1: str, group2: str, + *groups: str) -> Sequence[AnyStr]: ... + + def groups(self, default: AnyStr = ...) -> Sequence[AnyStr]: ... + def groupdict(self, default: AnyStr = ...) -> dict[str, AnyStr]: ... + def start(self, group: Union[int, str] = ...) -> int: ... + def end(self, group: Union[int, str] = ...) -> int: ... + def span(self, group: Union[int, str] = ...) -> Tuple[int, int]: ... + if sys.version_info >= (3, 6): + def __getitem__(self, g: Union[int, str]) -> AnyStr: ... + +class Pattern(Generic[AnyStr]): + flags = 0 + groupindex: Mapping[str, int] + groups = 0 + pattern: AnyStr + + def search(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + def match(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + # New in Python 3.4 + def fullmatch(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + def split(self, string: AnyStr, maxsplit: int = ...) -> list[AnyStr]: ... + def findall(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> list[Any]: ... + def finditer(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Iterator[Match[AnyStr]]: ... + + @overload + def sub(self, repl: AnyStr, string: AnyStr, + count: int = ...) -> AnyStr: ... + @overload + def sub(self, repl: Callable[[Match[AnyStr]], AnyStr], string: AnyStr, + count: int = ...) -> AnyStr: ... + + @overload + def subn(self, repl: AnyStr, string: AnyStr, + count: int = ...) -> Tuple[AnyStr, int]: ... + @overload + def subn(self, repl: Callable[[Match[AnyStr]], AnyStr], string: AnyStr, + count: int = ...) -> Tuple[AnyStr, int]: ... + +# Functions + +def get_type_hints(obj: Callable, globalns: Optional[dict[str, Any]] = ..., + localns: Optional[dict[str, Any]] = ...) -> dict[str, Any]: ... + +@overload +def cast(tp: Type[_T], obj: Any) -> _T: ... +@overload +def cast(tp: str, obj: Any) -> Any: ... + +# Type constructors + +# NamedTuple is special-cased in the type checker +class NamedTuple(tuple): + _field_types: collections.OrderedDict[str, Type[Any]] + _field_defaults: Dict[str, Any] = ... + _fields: Tuple[str, ...] + _source: str + + def __init__(self, typename: str, fields: Iterable[Tuple[str, Any]] = ..., *, + verbose: bool = ..., rename: bool = ..., **kwargs: Any) -> None: ... + + @classmethod + def _make(cls: Type[_T], iterable: Iterable[Any]) -> _T: ... + + def _asdict(self) -> collections.OrderedDict[str, Any]: ... + def _replace(self: _T, **kwargs: Any) -> _T: ... + +def NewType(name: str, tp: Type[_T]) -> Type[_T]: ... + +# This itself is only available during type checking +def type_check_only(func_or_cls: _C) -> _C: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi new file mode 100644 index 0000000..3ed602c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi @@ -0,0 +1,31 @@ +# Stubs for unittest + +from typing import Iterable, List, Optional, Type, Union +from types import ModuleType + +from unittest.case import * +from unittest.loader import * +from unittest.result import * +from unittest.runner import * +from unittest.signals import * +from unittest.suite import * + + +# not really documented +class TestProgram: + result: TestResult + def runTests(self) -> None: ... # undocumented + + +def main(module: Union[None, str, ModuleType] = ..., + defaultTest: Union[str, Iterable[str], None] = ..., + argv: Optional[List[str]] = ..., + testRunner: Union[Type[TestRunner], TestRunner, None] = ..., + testLoader: TestLoader = ..., exit: bool = ..., verbosity: int = ..., + failfast: Optional[bool] = ..., catchbreak: Optional[bool] = ..., + buffer: Optional[bool] = ..., + warnings: Optional[str] = ...) -> TestProgram: ... + + +def load_tests(loader: TestLoader, tests: TestSuite, + pattern: Optional[str]) -> TestSuite: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi new file mode 100644 index 0000000..f71e5e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi @@ -0,0 +1,224 @@ +from typing import ( + Any, AnyStr, Callable, Container, ContextManager, Dict, FrozenSet, Generic, + Iterable, List, NoReturn, Optional, overload, Pattern, Sequence, Set, + Tuple, Type, TypeVar, Union, +) +import logging +import unittest.result +from types import TracebackType + + +_E = TypeVar('_E', bound=BaseException) +_FT = TypeVar('_FT', bound=Callable[..., Any]) + + +def expectedFailure(func: _FT) -> _FT: ... +def skip(reason: str) -> Callable[[_FT], _FT]: ... +def skipIf(condition: object, reason: str) -> Callable[[_FT], _FT]: ... +def skipUnless(condition: object, reason: str) -> Callable[[_FT], _FT]: ... + + +class SkipTest(Exception): + def __init__(self, reason: str) -> None: ... + + +class TestCase: + failureException: Type[BaseException] + longMessage: bool + maxDiff: Optional[int] + # undocumented + _testMethodName: str + # undocumented + _testMethodDoc: str + def __init__(self, methodName: str = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + @classmethod + def setUpClass(cls) -> None: ... + @classmethod + def tearDownClass(cls) -> None: ... + def run(self, result: Optional[unittest.result.TestResult] = ...) -> Optional[unittest.result.TestResult]: ... + def __call__(self, result: Optional[unittest.result.TestResult] = ...) -> Optional[unittest.result.TestResult]: ... + def skipTest(self, reason: Any) -> None: ... + def subTest(self, msg: Any = ..., **params: Any) -> ContextManager[None]: ... + def debug(self) -> None: ... + def _addSkip( + self, result: unittest.result.TestResult, test_case: unittest.case.TestCase, reason: str + ) -> None: ... + def assertEqual(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def assertNotEqual(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def assertTrue(self, expr: Any, msg: Any = ...) -> None: ... + def assertFalse(self, expr: Any, msg: Any = ...) -> None: ... + def assertIs(self, expr1: Any, expr2: Any, msg: Any = ...) -> None: ... + def assertIsNot(self, expr1: Any, expr2: Any, msg: Any = ...) -> None: ... + def assertIsNone(self, obj: Any, msg: Any = ...) -> None: ... + def assertIsNotNone(self, obj: Any, msg: Any = ...) -> None: ... + def assertIn(self, member: Any, + container: Union[Iterable[Any], Container[Any]], + msg: Any = ...) -> None: ... + def assertNotIn(self, member: Any, + container: Union[Iterable[Any], Container[Any]], + msg: Any = ...) -> None: ... + def assertIsInstance(self, obj: Any, + cls: Union[type, Tuple[type, ...]], + msg: Any = ...) -> None: ... + def assertNotIsInstance(self, obj: Any, + cls: Union[type, Tuple[type, ...]], + msg: Any = ...) -> None: ... + def assertGreater(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertGreaterEqual(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertLess(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertLessEqual(self, a: Any, b: Any, msg: Any = ...) -> None: ... + @overload + def assertRaises(self, # type: ignore + expected_exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaises(self, + expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + @overload + def assertRaisesRegex(self, # type: ignore + expected_exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegex(self, + expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + @overload + def assertWarns(self, # type: ignore + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertWarns(self, + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + msg: Any = ...) -> _AssertWarnsContext: ... + @overload + def assertWarnsRegex(self, # type: ignore + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertWarnsRegex(self, + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + msg: Any = ...) -> _AssertWarnsContext: ... + def assertLogs( + self, logger: Optional[logging.Logger] = ..., + level: Union[int, str, None] = ... + ) -> _AssertLogsContext: ... + def assertAlmostEqual(self, first: float, second: float, places: int = ..., + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def assertRegex(self, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + def assertNotRegex(self, text: AnyStr, unexpected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + def assertCountEqual(self, first: Iterable[Any], second: Iterable[Any], + msg: Any = ...) -> None: ... + def addTypeEqualityFunc(self, typeobj: Type[Any], + function: Callable[..., None]) -> None: ... + def assertMultiLineEqual(self, first: str, second: str, + msg: Any = ...) -> None: ... + def assertSequenceEqual(self, seq1: Sequence[Any], seq2: Sequence[Any], + msg: Any = ..., + seq_type: Type[Sequence[Any]] = ...) -> None: ... + def assertListEqual(self, list1: List[Any], list2: List[Any], + msg: Any = ...) -> None: ... + def assertTupleEqual(self, tuple1: Tuple[Any, ...], tuple2: Tuple[Any, ...], + msg: Any = ...) -> None: ... + def assertSetEqual(self, set1: Union[Set[Any], FrozenSet[Any]], + set2: Union[Set[Any], FrozenSet[Any]], msg: Any = ...) -> None: ... + def assertDictEqual(self, d1: Dict[Any, Any], d2: Dict[Any, Any], + msg: Any = ...) -> None: ... + def fail(self, msg: Any = ...) -> NoReturn: ... + def countTestCases(self) -> int: ... + def defaultTestResult(self) -> unittest.result.TestResult: ... + def id(self) -> str: ... + def shortDescription(self) -> Optional[str]: ... + def addCleanup(self, function: Callable[..., Any], *args: Any, + **kwargs: Any) -> None: ... + def doCleanups(self) -> None: ... + def _formatMessage(self, msg: Optional[str], standardMsg: str) -> str: ... # undocumented + def _getAssertEqualityFunc(self, first: Any, second: Any) -> Callable[..., None]: ... # undocumented + # below is deprecated + def failUnlessEqual(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def assertEquals(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def failIfEqual(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def assertNotEquals(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def failUnless(self, expr: bool, msg: Any = ...) -> None: ... + def assert_(self, expr: bool, msg: Any = ...) -> None: ... + def failIf(self, expr: bool, msg: Any = ...) -> None: ... + @overload + def failUnlessRaises(self, # type: ignore + exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any] = ..., + *args: Any, **kwargs: Any) -> None: ... + @overload + def failUnlessRaises(self, + exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + def failUnlessAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + def assertAlmostEquals(self, first: float, second: float, places: int = ..., + msg: Any = ..., delta: float = ...) -> None: ... + def failIfAlmostEqual(self, first: float, second: float, places: int = ..., + msg: Any = ...) -> None: ... + def assertNotAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ..., + delta: float = ...) -> None: ... + def assertRegexpMatches(self, text: AnyStr, regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + @overload + def assertRaisesRegexp(self, # type: ignore + exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any] = ..., + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegexp(self, + exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + +class FunctionTestCase(TestCase): + def __init__(self, testFunc: Callable[[], None], + setUp: Optional[Callable[[], None]] = ..., + tearDown: Optional[Callable[[], None]] = ..., + description: Optional[str] = ...) -> None: ... + +class _AssertRaisesContext(Generic[_E]): + exception: _E + def __enter__(self) -> _AssertRaisesContext[_E]: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + +class _AssertWarnsContext: + warning: Warning + filename: str + lineno: int + def __enter__(self) -> _AssertWarnsContext: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + +class _AssertLogsContext: + records: List[logging.LogRecord] + output: List[str] + def __enter__(self) -> _AssertLogsContext: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi new file mode 100644 index 0000000..53b81ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi @@ -0,0 +1,32 @@ +import sys +import unittest.case +import unittest.suite +import unittest.result +from types import ModuleType +from typing import Any, Callable, List, Optional, Sequence, Type + + +class TestLoader: + if sys.version_info >= (3, 5): + errors: List[Type[BaseException]] + testMethodPrefix: str + sortTestMethodsUsing: Callable[[str, str], bool] + suiteClass: Callable[[List[unittest.case.TestCase]], unittest.suite.TestSuite] + def loadTestsFromTestCase(self, + testCaseClass: Type[unittest.case.TestCase]) -> unittest.suite.TestSuite: ... + if sys.version_info >= (3, 5): + def loadTestsFromModule(self, module: ModuleType, + *, pattern: Any = ...) -> unittest.suite.TestSuite: ... + else: + def loadTestsFromModule(self, + module: ModuleType) -> unittest.suite.TestSuite: ... + def loadTestsFromName(self, name: str, + module: Optional[ModuleType] = ...) -> unittest.suite.TestSuite: ... + def loadTestsFromNames(self, names: Sequence[str], + module: Optional[ModuleType] = ...) -> unittest.suite.TestSuite: ... + def getTestCaseNames(self, + testCaseClass: Type[unittest.case.TestCase]) -> Sequence[str]: ... + def discover(self, start_dir: str, pattern: str = ..., + top_level_dir: Optional[str] = ...) -> unittest.suite.TestSuite: ... + +defaultTestLoader: TestLoader diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi new file mode 100644 index 0000000..cb3db61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi @@ -0,0 +1,146 @@ +# Stubs for mock + +import sys +from typing import Any, Optional, Text, Type + +FILTER_DIR: Any + +class _slotted: ... + +class _SentinelObject: + name: Any + def __init__(self, name: Any) -> None: ... + +class _Sentinel: + def __init__(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +sentinel: Any +DEFAULT: Any + +class _CallList(list): + def __contains__(self, value: Any) -> bool: ... + +class _MockIter: + obj: Any + def __init__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __next__(self) -> Any: ... + +class Base: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + +# TODO: Defining this and other mock classes as classes in this stub causes +# many false positives with mypy and production code. See if we can +# improve mypy somehow and use a class with an "Any" base class. +NonCallableMock: Any + +class CallableMixin(Base): + side_effect: Any + def __init__(self, spec: Optional[Any] = ..., side_effect: Optional[Any] = ..., return_value: Any = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., **kwargs: Any) -> None: ... + def __call__(_mock_self, *args: Any, **kwargs: Any) -> Any: ... + +Mock: Any + +class _patch: + attribute_name: Any + getter: Any + attribute: Any + new: Any + new_callable: Any + spec: Any + create: bool + has_local: Any + spec_set: Any + autospec: Any + kwargs: Any + additional_patchers: Any + def __init__(self, getter: Any, attribute: Any, new: Any, spec: Any, create: Any, spec_set: Any, autospec: Any, new_callable: Any, kwargs: Any) -> None: ... + def copy(self) -> Any: ... + def __call__(self, func: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def decorate_callable(self, func: Any) -> Any: ... + def get_original(self) -> Any: ... + target: Any + temp_original: Any + is_local: Any + def __enter__(self) -> Any: ... + def __exit__(self, *exc_info: Any) -> Any: ... + def start(self) -> Any: ... + def stop(self) -> Any: ... + +class _patch_dict: + in_dict: Any + values: Any + clear: Any + def __init__(self, in_dict: Any, values: Any = ..., clear: Any = ..., **kwargs: Any) -> None: ... + def __call__(self, f: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def __enter__(self) -> Any: ... + def __exit__(self, *args: Any) -> Any: ... + start: Any + stop: Any + +class _patcher: + TEST_PREFIX: str + dict: Type[_patch_dict] + def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def object(self, target: Any, attribute: Text, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def stopall(self) -> None: ... + +patch: _patcher + +class MagicMixin: + def __init__(self, *args: Any, **kw: Any) -> None: ... + +NonCallableMagicMock: Any +MagicMock: Any + +class MagicProxy: + name: Any + parent: Any + def __init__(self, name: Any, parent: Any) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def create_mock(self) -> Any: ... + def __get__(self, obj: Any, _type: Optional[Any] = ...) -> Any: ... + +class _ANY: + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +ANY: Any + +class _Call(tuple): + def __new__(cls, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> Any: ... + name: Any + parent: Any + from_kall: Any + def __init__(self, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> None: ... + def __eq__(self, other: Any) -> bool: ... + __ne__: Any + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __getattr__(self, attr: Any) -> Any: ... + def count(self, *args: Any, **kwargs: Any) -> Any: ... + def index(self, *args: Any, **kwargs: Any) -> Any: ... + def call_list(self) -> Any: ... + +call: Any + +def create_autospec(spec: Any, spec_set: Any = ..., instance: Any = ..., _parent: Optional[Any] = ..., _name: Optional[Any] = ..., **kwargs: Any) -> Any: ... + +class _SpecState: + spec: Any + ids: Any + spec_set: Any + parent: Any + instance: Any + name: Any + def __init__(self, spec: Any, spec_set: Any = ..., parent: Optional[Any] = ..., name: Optional[Any] = ..., ids: Optional[Any] = ..., instance: Any = ...) -> None: ... + +def mock_open(mock: Optional[Any] = ..., read_data: Any = ...) -> Any: ... + +PropertyMock: Any + +if sys.version_info >= (3, 7): + def seal(mock: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi new file mode 100644 index 0000000..cb85399 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi @@ -0,0 +1,36 @@ +from typing import Any, List, Optional, Tuple, Type +from types import TracebackType +import unittest.case + + +_SysExcInfoType = Tuple[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]] + + +class TestResult: + errors: List[Tuple[unittest.case.TestCase, str]] + failures: List[Tuple[unittest.case.TestCase, str]] + skipped: List[Tuple[unittest.case.TestCase, str]] + expectedFailures: List[Tuple[unittest.case.TestCase, str]] + unexpectedSuccesses: List[unittest.case.TestCase] + shouldStop: bool + testsRun: int + buffer: bool + failfast: bool + tb_locals: bool + def wasSuccessful(self) -> bool: ... + def stop(self) -> None: ... + def startTest(self, test: unittest.case.TestCase) -> None: ... + def stopTest(self, test: unittest.case.TestCase) -> None: ... + def startTestRun(self) -> None: ... + def stopTestRun(self) -> None: ... + def addError(self, test: unittest.case.TestCase, err: _SysExcInfoType) -> None: ... + def addFailure(self, test: unittest.case.TestCase, err: _SysExcInfoType) -> None: ... + def addSuccess(self, test: unittest.case.TestCase) -> None: ... + def addSkip(self, test: unittest.case.TestCase, reason: str) -> None: ... + def addExpectedFailure(self, test: unittest.case.TestCase, + err: _SysExcInfoType) -> None: ... + def addUnexpectedSuccess(self, test: unittest.case.TestCase) -> None: ... + def addSubTest(self, test: unittest.case.TestCase, subtest: unittest.case.TestCase, + outcome: Optional[_SysExcInfoType]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi new file mode 100644 index 0000000..786bc19 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi @@ -0,0 +1,40 @@ +from typing import Callable, Optional, TextIO, Tuple, Type, Union +import sys +import unittest.case +import unittest.result +import unittest.suite + + +_ResultClassType = Callable[[TextIO, bool, int], unittest.result.TestResult] + + +class TextTestResult(unittest.result.TestResult): + separator1: str + separator2: str + def __init__(self, stream: TextIO, descriptions: bool, + verbosity: int) -> None: ... + def getDescription(self, test: unittest.case.TestCase) -> str: ... + def printErrors(self) -> None: ... + def printErrorList(self, flavour: str, errors: Tuple[unittest.case.TestCase, str]) -> None: ... + + +class TestRunner: + def run(self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]) -> unittest.result.TestResult: ... + + +class TextTestRunner(TestRunner): + if sys.version_info >= (3, 5): + def __init__(self, stream: Optional[TextIO] = ..., + descriptions: bool = ..., verbosity: int = ..., + failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[_ResultClassType] = ..., + warnings: Optional[Type[Warning]] = ..., + *, tb_locals: bool = ...) -> None: ... + else: + def __init__(self, + stream: Optional[TextIO] = ..., + descriptions: bool = ..., verbosity: int = ..., + failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[_ResultClassType] = ..., + warnings: Optional[Type[Warning]] = ...) -> None: ... + def _makeResult(self) -> unittest.result.TestResult: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi new file mode 100644 index 0000000..a4616b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi @@ -0,0 +1,14 @@ +from typing import Any, Callable, overload, TypeVar +import unittest.result + + +_F = TypeVar('_F', bound=Callable[..., Any]) + + +def installHandler() -> None: ... +def registerResult(result: unittest.result.TestResult) -> None: ... +def removeResult(result: unittest.result.TestResult) -> bool: ... +@overload +def removeHandler() -> None: ... +@overload +def removeHandler(function: _F) -> _F: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi new file mode 100644 index 0000000..54e9e69 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi @@ -0,0 +1,22 @@ +from typing import Iterable, Iterator, List, Union +import unittest.case +import unittest.result + + +_TestType = Union[unittest.case.TestCase, TestSuite] + + +class BaseTestSuite(Iterable[_TestType]): + _tests: List[unittest.case.TestCase] + _removed_tests: int + def __init__(self, tests: Iterable[_TestType] = ...) -> None: ... + def __call__(self, result: unittest.result.TestResult) -> unittest.result.TestResult: ... + def addTest(self, test: _TestType) -> None: ... + def addTests(self, tests: Iterable[_TestType]) -> None: ... + def run(self, result: unittest.result.TestResult) -> unittest.result.TestResult: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + def __iter__(self) -> Iterator[_TestType]: ... + + +class TestSuite(BaseTestSuite): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi new file mode 100644 index 0000000..191c765 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi @@ -0,0 +1,12 @@ +from typing import Dict, Union +from urllib.response import addinfourl + +# Stubs for urllib.error + +class URLError(IOError): + reason: Union[str, BaseException] +class HTTPError(URLError, addinfourl): + code: int + headers: Dict[str, str] + def __init__(self, url, code, msg, hdrs, fp) -> None: ... +class ContentTooShortError(URLError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi new file mode 100644 index 0000000..8d7cc4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi @@ -0,0 +1,146 @@ +# Stubs for urllib.parse +from typing import Any, List, Dict, Tuple, AnyStr, Generic, overload, Sequence, Mapping, Union, NamedTuple, Callable, Optional +import sys + +_Str = Union[bytes, str] + + +uses_relative: List[str] +uses_netloc: List[str] +uses_params: List[str] +non_hierarchical: List[str] +uses_query: List[str] +uses_fragment: List[str] +scheme_chars: str +MAX_CACHE_SIZE = 0 + +class _ResultMixinBase(Generic[AnyStr]): + def geturl(self) -> AnyStr: ... + +class _ResultMixinStr(_ResultMixinBase[str]): + def encode(self, encoding: str = ..., errors: str = ...) -> _ResultMixinBytes: ... + + +class _ResultMixinBytes(_ResultMixinBase[str]): + def decode(self, encoding: str = ..., errors: str = ...) -> _ResultMixinStr: ... + + +class _NetlocResultMixinBase(Generic[AnyStr]): + username: AnyStr + password: AnyStr + hostname: AnyStr + port: int + +class _NetlocResultMixinStr(_NetlocResultMixinBase[str], _ResultMixinStr): ... + +class _NetlocResultMixinBytes(_NetlocResultMixinBase[bytes], _ResultMixinBytes): ... + +class _DefragResultBase(tuple, Generic[AnyStr]): + url: AnyStr + fragment: AnyStr + + +_SplitResultBase = NamedTuple( + '_SplitResultBase', + [ + ('scheme', str), ('netloc', str), ('path', str), ('query', str), ('fragment', str) + ] +) +_SplitResultBytesBase = NamedTuple( + '_SplitResultBytesBase', + [ + ('scheme', bytes), ('netloc', bytes), ('path', bytes), ('query', bytes), ('fragment', bytes) + ] +) + +_ParseResultBase = NamedTuple( + '_ParseResultBase', + [ + ('scheme', str), ('netloc', str), ('path', str), ('params', str), ('query', str), ('fragment', str) + ] +) +_ParseResultBytesBase = NamedTuple( + '_ParseResultBytesBase', + [ + ('scheme', bytes), ('netloc', bytes), ('path', bytes), ('params', bytes), ('query', bytes), ('fragment', bytes) + ] +) + +# Structured result objects for string data +class DefragResult(_DefragResultBase[str], _ResultMixinStr): ... + +class SplitResult(_SplitResultBase, _NetlocResultMixinStr): ... + +class ParseResult(_ParseResultBase, _NetlocResultMixinStr): ... + +# Structured result objects for bytes data +class DefragResultBytes(_DefragResultBase[bytes], _ResultMixinBytes): ... + +class SplitResultBytes(_SplitResultBytesBase, _NetlocResultMixinBytes): ... + +class ParseResultBytes(_ParseResultBytesBase, _NetlocResultMixinBytes): ... + + +def parse_qs(qs: AnyStr, keep_blank_values: bool = ..., strict_parsing: bool = ..., encoding: str = ..., errors: str = ...) -> Dict[AnyStr, List[AnyStr]]: ... + +def parse_qsl(qs: AnyStr, keep_blank_values: bool = ..., strict_parsing: bool = ..., encoding: str = ..., errors: str = ...) -> List[Tuple[AnyStr, AnyStr]]: ... + + +@overload +def quote(string: str, safe: _Str = ..., encoding: str = ..., errors: str = ...) -> str: ... +@overload +def quote(string: bytes, safe: _Str = ...) -> str: ... + +def quote_from_bytes(bs: bytes, safe: _Str = ...) -> str: ... + +@overload +def quote_plus(string: str, safe: _Str = ..., encoding: str = ..., errors: str = ...) -> str: ... +@overload +def quote_plus(string: bytes, safe: _Str = ...) -> str: ... + +def unquote(string: str, encoding: str = ..., errors: str = ...) -> str: ... + +def unquote_to_bytes(string: _Str) -> bytes: ... + +def unquote_plus(string: str, encoding: str = ..., errors: str = ...) -> str: ... + +@overload +def urldefrag(url: str) -> DefragResult: ... +@overload +def urldefrag(url: bytes) -> DefragResultBytes: ... + +if sys.version_info >= (3, 5): + def urlencode(query: Union[Mapping[Any, Any], + Mapping[Any, Sequence[Any]], + Sequence[Tuple[Any, Any]], + Sequence[Tuple[Any, Sequence[Any]]]], + doseq: bool = ..., safe: AnyStr = ..., encoding: str = ..., errors: str = ..., + quote_via: Callable[[str, AnyStr, str, str], str] = ...) -> str: ... +else: + def urlencode(query: Union[Mapping[Any, Any], + Mapping[Any, Sequence[Any]], + Sequence[Tuple[Any, Any]], + Sequence[Tuple[Any, Sequence[Any]]]], + doseq: bool = ..., safe: AnyStr = ..., encoding: str = ..., errors: str = ...) -> str: ... + +def urljoin(base: AnyStr, url: Optional[AnyStr], allow_fragments: bool = ...) -> AnyStr: ... + +@overload +def urlparse(url: str, scheme: str = ..., allow_fragments: bool = ...) -> ParseResult: ... +@overload +def urlparse(url: bytes, scheme: bytes = ..., allow_fragments: bool = ...) -> ParseResultBytes: ... + +@overload +def urlsplit(url: str, scheme: str = ..., allow_fragments: bool = ...) -> SplitResult: ... +@overload +def urlsplit(url: bytes, scheme: bytes = ..., allow_fragments: bool = ...) -> SplitResultBytes: ... + +@overload +def urlunparse(components: Tuple[AnyStr, AnyStr, AnyStr, AnyStr, AnyStr, AnyStr]) -> AnyStr: ... +@overload +def urlunparse(components: Sequence[AnyStr]) -> AnyStr: ... + +@overload +def urlunsplit(components: Tuple[AnyStr, AnyStr, AnyStr, AnyStr, AnyStr]) -> AnyStr: ... +@overload +def urlunsplit(components: Sequence[AnyStr]) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi new file mode 100644 index 0000000..a1a5568 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi @@ -0,0 +1,222 @@ +# Stubs for urllib.request (Python 3.4) + +from typing import ( + Any, Callable, ClassVar, Dict, List, IO, Mapping, Optional, Sequence, Tuple, + TypeVar, Union, overload, NoReturn, +) +from http.client import HTTPResponse, HTTPMessage, HTTPConnectionProtocol +from http.cookiejar import CookieJar +from email.message import Message +from urllib.response import addinfourl +import ssl +import sys +import os + +_T = TypeVar('_T') +_UrlopenRet = Union[_HTTPResponse, addinfourl] + +class _HTTPResponse(HTTPResponse): + url: str + msg: str # type: ignore + +def urlopen( + url: Union[str, Request], data: Optional[bytes] = ..., + timeout: float = ..., *, cafile: Optional[str] = ..., + capath: Optional[str] = ..., cadefault: bool = ..., + context: Optional[ssl.SSLContext] = ... +) -> _UrlopenRet: ... +def install_opener(opener: OpenerDirector) -> None: ... +def build_opener( + *handlers: Union[BaseHandler, Callable[[], BaseHandler]] +) -> OpenerDirector: ... +def url2pathname(path: str) -> str: ... +def pathname2url(path: str) -> str: ... +def getproxies() -> Dict[str, str]: ... +def parse_http_list(s: str) -> List[str]: ... +def parse_keqv_list(l: List[str]) -> Dict[str, str]: ... + +class Request: + @property + def full_url(self) -> str: ... + @full_url.setter + def full_url(self, value: str) -> None: ... + @full_url.deleter + def full_url(self) -> None: ... + type: str + host: str + origin_req_host: str + selector: str + data: Optional[bytes] + headers: Dict[str, str] + unverifiable: bool + method: Optional[str] + def __init__(self, url: str, data: Optional[bytes] = ..., + headers: Dict[str, str] = ..., origin_req_host: Optional[str] = ..., + unverifiable: bool = ..., method: Optional[str] = ...) -> None: ... + def get_method(self) -> str: ... + def add_header(self, key: str, val: str) -> None: ... + def add_unredirected_header(self, key: str, val: str) -> None: ... + def has_header(self, header_name: str) -> bool: ... + def remove_header(self, header_name: str) -> None: ... + def get_full_url(self) -> str: ... + def set_proxy(self, host: str, type: str) -> None: ... + @overload + def get_header(self, header_name: str) -> Optional[str]: ... + @overload + def get_header(self, header_name: str, default: _T) -> Union[str, _T]: ... + def header_items(self) -> List[Tuple[str, str]]: ... + +class OpenerDirector: + addheaders: List[Tuple[str, str]] + def add_handler(self, handler: BaseHandler) -> None: ... + def open(self, url: Union[str, Request], data: Optional[bytes] = ..., + timeout: float = ...) -> _UrlopenRet: ... + def error(self, proto: str, *args: Any) -> _UrlopenRet: ... + + +class BaseHandler: + handler_order: ClassVar[int] + parent: OpenerDirector + def add_parent(self, parent: OpenerDirector) -> None: ... + def close(self) -> None: ... + def http_error_nnn(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> _UrlopenRet: ... + +class HTTPDefaultErrorHandler(BaseHandler): ... + +class HTTPRedirectHandler(BaseHandler): + def redirect_request(self, req: Request, fp: IO[str], code: int, msg: str, + hdrs: Mapping[str, str], + newurl: str) -> Optional[Request]: ... + def http_error_301(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_302(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_303(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_307(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class HTTPCookieProcessor(BaseHandler): + cookiejar: CookieJar + def __init__(self, cookiejar: Optional[CookieJar] = ...) -> None: ... + +class ProxyHandler(BaseHandler): + def __init__(self, proxies: Optional[Dict[str, str]] = ...) -> None: ... + # TODO add a method for every (common) proxy protocol + +class HTTPPasswordMgr: + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str) -> None: ... + def find_user_password(self, realm: str, authuri: str) -> Tuple[Optional[str], Optional[str]]: ... + +class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str) -> None: ... + def find_user_password(self, realm: str, authuri: str) -> Tuple[Optional[str], Optional[str]]: ... + +if sys.version_info >= (3, 5): + class HTTPPasswordMgrWithPriorAuth(HTTPPasswordMgrWithDefaultRealm): + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str, + is_authenticated: bool = ...) -> None: ... + def update_authenticated(self, uri: Union[str, Sequence[str]], + is_authenticated: bool = ...) -> None: ... + def is_authenticated(self, authuri: str) -> bool: ... + +class AbstractBasicAuthHandler: + def __init__(self, + password_mgr: Optional[HTTPPasswordMgr] = ...) -> None: ... + def http_error_auth_reqed(self, authreq: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + +class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + def http_error_401(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + def http_error_407(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class AbstractDigestAuthHandler: + def __init__(self, passwd: Optional[HTTPPasswordMgr] = ...) -> None: ... + def reset_retry_count(self) -> None: ... + def http_error_auth_reqed(self, auth_header: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + def retry_http_digest_auth(self, req: Request, auth: str) -> Optional[_UrlopenRet]: ... + def get_cnonce(self, nonce: str) -> str: ... + def get_authorization(self, req: Request, chal: Mapping[str, str]) -> str: ... + def get_algorithm_impls(self, algorithm: str) -> Tuple[Callable[[str], str], Callable[[str, str], str]]: ... + def get_entity_digest(self, data: Optional[bytes], chal: Mapping[str, str]) -> Optional[str]: ... + +class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + def http_error_401(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + def http_error_407(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class AbstractHTTPHandler(BaseHandler): # undocumented + def __init__(self, debuglevel: int = ...) -> None: ... + def set_http_debuglevel(self, level: int) -> None: ... + def do_request_(self, request: Request) -> Request: ... + def do_open(self, + http_class: HTTPConnectionProtocol, + req: Request, + **http_conn_args: Any) -> HTTPResponse: ... + +class HTTPHandler(AbstractHTTPHandler): + def http_open(self, req: Request) -> HTTPResponse: ... + def http_request(self, request: Request) -> Request: ... # undocumented + +class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel: int = ..., + context: Optional[ssl.SSLContext] = ..., + check_hostname: Optional[bool] = ...) -> None: ... + def https_open(self, req: Request) -> HTTPResponse: ... + def https_request(self, request: Request) -> Request: ... # undocumented + +class FileHandler(BaseHandler): + def file_open(self, req: Request) -> addinfourl: ... + +class DataHandler(BaseHandler): + def data_open(self, req: Request) -> addinfourl: ... + +class FTPHandler(BaseHandler): + def ftp_open(self, req: Request) -> addinfourl: ... + +class CacheFTPHandler(FTPHandler): + def setTimeout(self, t: float) -> None: ... + def setMaxConns(self, m: int) -> None: ... + +class UnknownHandler(BaseHandler): + def unknown_open(self, req: Request) -> NoReturn: ... + +class HTTPErrorProcessor(BaseHandler): + def http_response(self, request, response) -> _UrlopenRet: ... + def https_response(self, request, response) -> _UrlopenRet: ... + +if sys.version_info >= (3, 6): + def urlretrieve(url: str, filename: Optional[Union[str, os.PathLike]] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, HTTPMessage]: ... +else: + def urlretrieve(url: str, filename: Optional[str] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, HTTPMessage]: ... +def urlcleanup() -> None: ... + +class URLopener: + version: ClassVar[str] + def __init__(self, proxies: Optional[Dict[str, str]] = ..., + **x509: str) -> None: ... + def open(self, fullurl: str, data: Optional[bytes] = ...) -> _UrlopenRet: ... + def open_unknown(self, fullurl: str, + data: Optional[bytes] = ...) -> _UrlopenRet: ... + def retrieve(self, url: str, filename: Optional[str] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, Optional[Message]]: ... + +class FancyURLopener(URLopener): + def prompt_user_passwd(self, host: str, realm: str) -> Tuple[str, str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi new file mode 100644 index 0000000..ef3507d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi @@ -0,0 +1,41 @@ +# private module, we only expose what's needed + +from typing import BinaryIO, Iterable, List, Mapping, Optional, Type, TypeVar +from types import TracebackType + +_AIUT = TypeVar("_AIUT", bound=addbase) + +class addbase(BinaryIO): + def __enter__(self: _AIUT) -> _AIUT: ... + def __exit__(self, type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> bool: ... + def __iter__(self: _AIUT) -> _AIUT: ... + def __next__(self) -> bytes: ... + def close(self) -> None: ... + # These methods don't actually exist, but the class inherits at runtime from + # tempfile._TemporaryFileWrapper, which uses __getattr__ to delegate to the + # underlying file object. To satisfy the BinaryIO interface, we pretend that this + # class has these additional methods. + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, n: int = ...) -> bytes: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: bytes) -> int: ... + def writelines(self, lines: Iterable[bytes]) -> None: ... + +class addinfo(addbase): + headers: Mapping[str, str] + def info(self) -> Mapping[str, str]: ... + +class addinfourl(addinfo): + url: str + code: int + def geturl(self) -> str: ... + def getcode(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi new file mode 100644 index 0000000..36150ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi @@ -0,0 +1,18 @@ +# Stubs for urllib.robotparser (Python 3.4) + +from typing import Iterable, NamedTuple, Optional +import sys + +_RequestRate = NamedTuple('_RequestRate', [('requests', int), ('seconds', int)]) + +class RobotFileParser: + def __init__(self, url: str = ...) -> None: ... + def set_url(self, url: str) -> None: ... + def read(self) -> None: ... + def parse(self, lines: Iterable[str]) -> None: ... + def can_fetch(self, user_agent: str, url: str) -> bool: ... + def mtime(self) -> int: ... + def modified(self) -> None: ... + if sys.version_info >= (3, 6): + def crawl_delay(self, useragent: str) -> Optional[str]: ... + def request_rate(self, useragent: str) -> Optional[_RequestRate]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi new file mode 100644 index 0000000..395e630 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi @@ -0,0 +1,191 @@ +# Stubs for OpenSSL.crypto (Python 2) + +from typing import Any, Callable, Iterable, List, Optional, Set, Text, Tuple, Union + +from cryptography.hazmat.primitives.asymmetric import dsa, rsa +from datetime import datetime + +FILETYPE_PEM: int +FILETYPE_ASN1: int +FILETYPE_TEXT: int +TYPE_RSA: int +TYPE_DSA: int + +class Error(Exception): ... + +_Key = Union[rsa.RSAPublicKey, rsa.RSAPrivateKey, dsa.DSAPublicKey, dsa.DSAPrivateKey] + +class PKey: + def __init__(self) -> None: ... + def to_cryptography_key(self) -> _Key: ... + @classmethod + def from_cryptography_key(cls, crypto_key: _Key): ... + def generate_key(self, type: int, bits: int) -> None: ... + def check(self) -> bool: ... + def type(self) -> int: ... + def bits(self) -> int: ... + +class _EllipticCurve: + name: Text + +def get_elliptic_curves() -> Set[_EllipticCurve]: ... +def get_elliptic_curve(name: str) -> _EllipticCurve: ... + +class X509Name: + def __init__(self, name: X509Name) -> None: ... + countryName: Union[str, unicode] + stateOrProvinceName: Union[str, unicode] + localityName: Union[str, unicode] + organizationName: Union[str, unicode] + organizationalUnitName: Union[str, unicode] + commonName: Union[str, unicode] + emailAddress: Union[str, unicode] + C: Union[str, unicode] + ST: Union[str, unicode] + L: Union[str, unicode] + O: Union[str, unicode] + OU: Union[str, unicode] + CN: Union[str, unicode] + def hash(self) -> int: ... + def der(self) -> bytes: ... + def get_components(self) -> List[Tuple[str, str]]: ... + +class X509Extension: + def __init__(self, type_name: bytes, critical: bool, value: bytes, subject: Optional[X509] = ..., + issuer: Optional[X509] = ...) -> None: ... + def get_critical(self) -> bool: ... + def get_short_name(self) -> str: ... + def get_data(self) -> str: ... + +class X509Req: + def __init__(self) -> None: ... + def set_pubkey(self, pkey: PKey) -> None: ... + def get_pubkey(self) -> PKey: ... + def set_version(self, version: int) -> None: ... + def get_version(self) -> int: ... + def get_subject(self) -> X509Name: ... + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ... + def get_extensions(self) -> List[X509Extension]: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def verify(self, pkey: PKey) -> bool: ... + +class X509: + def __init__(self) -> None: ... + def set_version(self, version: int) -> None: ... + def get_version(self) -> int: ... + def get_pubkey(self) -> PKey: ... + def set_pubkey(self, pkey: PKey) -> None: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def get_signature_algorithm(self) -> str: ... + def digest(self, digest_name: str) -> str: ... + def subject_name_hash(self) -> str: ... + def set_serial_number(self, serial: int) -> None: ... + def get_serial_number(self) -> int: ... + def gmtime_adj_notAfter(self, amount: int) -> None: ... + def gmtime_adj_notBefore(self, amount: int) -> None: ... + def has_expired(self) -> bool: ... + def get_notBefore(self) -> str: ... + def set_notBefore(self, when: str) -> None: ... + def get_notAfter(self) -> str: ... + def set_notAfter(self, when: str) -> None: ... + def get_issuer(self) -> X509Name: ... + def set_issuer(self, issuer: X509Name) -> None: ... + def get_subject(self) -> X509Name: ... + def set_subject(self, subject: X509Name) -> None: ... + def get_extension_count(self) -> int: ... + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ... + def get_extension(self, index: int) -> X509Extension: ... + +class X509StoreFlags: + CRL_CHECK: int + CRL_CHECK_ALL: int + IGNORE_CRITICAL: int + X509_STRICT: int + ALLOW_PROXY_CERTS: int + POLICY_CHECK: int + EXPLICIT_POLICY: int + INHIBIT_MAP: int + NOTIFY_POLICY: int + CHECK_SS_SIGNATURE: int + CB_ISSUER_CHECK: int + +class X509Store: + def __init__(self) -> None: ... + def add_cert(self, cert: X509) -> None: ... + def add_crl(self, crl: CRL) -> None: ... + def set_flags(self, flags: int) -> None: ... + def set_time(self, vfy_time: datetime) -> None: ... + +class X509StoreContextError(Exception): + certificate: X509 + def __init__(self, message: str, certificate: X509) -> None: ... + +class X509StoreContext: + def __init__(self, store: X509Store, certificate: X509) -> None: ... + def set_store(self, store: X509Store) -> None: ... + def verify_certificate(self) -> None: ... + +def load_certificate(type: int, buffer: Union[str, unicode]) -> X509: ... +def dump_certificate(type: int, cert: X509) -> bytes: ... +def dump_publickey(type: int, pkey: PKey) -> bytes: ... +def dump_privatekey(type: int, pkey: PKey, cipher: Optional[str] = ..., + passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> bytes: ... + +class Revoked: + def __init__(self) -> None: ... + def set_serial(self, hex_str: str) -> None: ... + def get_serial(self) -> str: ... + def set_reason(self, reason: str) -> None: ... + def get_reason(self) -> str: ... + def all_reasons(self) -> List[str]: ... + def set_rev_date(self, when: str) -> None: ... + def get_rev_date(self) -> str: ... + +class CRL: + def __init__(self) -> None: ... + def get_revoked(self) -> Tuple[Revoked, ...]: ... + def add_revoked(self, revoked: Revoked) -> None: ... + def get_issuer(self) -> X509Name: ... + def set_version(self, version: int) -> None: ... + def set_lastUpdate(self, when: str) -> None: ... + def set_nextUpdate(self, when: str) -> None: ... + def sign(self, issuer_cert: X509, issuer_key: PKey, digest: str) -> None: ... + def export(self, cert: X509, key: PKey, type: int = ..., days: int = ..., digest: str = ...) -> bytes: ... + +class PKCS7: + def type_is_signed(self) -> bool: ... + def type_is_enveloped(self) -> bool: ... + def type_is_signedAndEnveloped(self) -> bool: ... + def type_is_data(self) -> bool: ... + def get_type_name(self) -> str: ... + +class PKCS12: + def __init__(self) -> None: ... + def get_certificate(self) -> X509: ... + def set_certificate(self, cert: X509) -> None: ... + def get_privatekey(self) -> PKey: ... + def set_privatekey(self, pkey: PKey) -> None: ... + def get_ca_certificates(self) -> Tuple[X509, ...]: ... + def set_ca_certificates(self, cacerts: Iterable[X509]) -> None: ... + def set_friendlyname(self, name: bytes) -> None: ... + def get_friendlyname(self) -> bytes: ... + def export(self, passphrase: Optional[str] = ..., iter: int = ..., maciter: int = ...): ... + +class NetscapeSPKI: + def __init__(self) -> None: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def verify(self, key: PKey) -> bool: ... + def b64_encode(self) -> str: ... + def get_pubkey(self) -> PKey: ... + def set_pubkey(self, pkey: PKey) -> None: ... + +def load_publickey(type: int, buffer: Union[str, unicode]) -> PKey: ... +def load_privatekey(type: int, buffer: bytes, passphrase: Optional[Union[str, Callable[[int], int]]] = ...): ... +def dump_certificate_request(type: int, req: X509Req): ... +def load_certificate_request(type, buffer: Union[str, unicode]) -> X509Req: ... +def sign(pkey: PKey, data: Union[str, unicode], digest: str) -> bytes: ... +def verify(cert: X509, signature: bytes, data: Union[str, unicode], digest: str) -> None: ... +def dump_crl(type: int, crl: CRL) -> bytes: ... +def load_crl(type: int, buffer: Union[str, unicode]) -> CRL: ... +def load_pkcs7_data(type: int, buffer: Union[str, unicode]) -> PKCS7: ... +def load_pkcs12(buffer: Union[str, unicode], passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> PKCS12: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi new file mode 100644 index 0000000..4439dca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi @@ -0,0 +1,3 @@ +from ._base import * # noqa: F403 +from .thread import * # noqa: F403 +from .process import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi new file mode 100644 index 0000000..95189a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi @@ -0,0 +1,56 @@ +from typing import TypeVar, Generic, Any, Iterable, Iterator, Callable, Tuple, Optional, Set, NamedTuple +from types import TracebackType +import sys + +FIRST_COMPLETED: str +FIRST_EXCEPTION: str +ALL_COMPLETED: str +PENDING: Any +RUNNING: Any +CANCELLED: Any +CANCELLED_AND_NOTIFIED: Any +FINISHED: Any +LOGGER: Any + +class Error(Exception): ... +class CancelledError(Error): ... +class TimeoutError(Error): ... + +_T = TypeVar('_T') + +class Future(Generic[_T]): + def __init__(self) -> None: ... + def cancel(self) -> bool: ... + def cancelled(self) -> bool: ... + def running(self) -> bool: ... + def done(self) -> bool: ... + def add_done_callback(self, fn: Callable[[Future[_T]], Any]) -> None: ... + def result(self, timeout: Optional[float] = ...) -> _T: ... + def set_running_or_notify_cancel(self) -> bool: ... + def set_result(self, result: _T) -> None: ... + + if sys.version_info >= (3,): + def exception(self, timeout: Optional[float] = ...) -> Optional[BaseException]: ... + def set_exception(self, exception: Optional[BaseException]) -> None: ... + else: + def exception(self, timeout: Optional[float] = ...) -> Any: ... + def exception_info(self, timeout: Optional[float] = ...) -> Tuple[Any, Optional[TracebackType]]: ... + def set_exception(self, exception: Any) -> None: ... + def set_exception_info(self, exception: Any, traceback: Optional[TracebackType]) -> None: ... + + +class Executor: + def submit(self, fn: Callable[..., _T], *args: Any, **kwargs: Any) -> Future[_T]: ... + if sys.version_info >= (3, 5): + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ..., + chunksize: int = ...) -> Iterator[_T]: ... + else: + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ...,) -> Iterator[_T]: ... + def shutdown(self, wait: bool = ...) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool: ... + +def as_completed(fs: Iterable[Future[_T]], timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... + +def wait(fs: Iterable[Future[_T]], timeout: Optional[float] = ..., return_when: str = ...) -> Tuple[Set[Future[_T]], + Set[Future[_T]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi new file mode 100644 index 0000000..ba0cd61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Future, Executor +import sys + +EXTRA_QUEUED_CALLS: Any + +if sys.version_info >= (3,): + class BrokenProcessPool(RuntimeError): ... + +if sys.version_info >= (3, 7): + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... +else: + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi new file mode 100644 index 0000000..983594d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi @@ -0,0 +1,15 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Executor, Future +import sys + +class ThreadPoolExecutor(Executor): + if sys.version_info >= (3, 7): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... + elif sys.version_info >= (3, 6) or sys.version_info < (3,): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ...) -> None: ... + else: + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi new file mode 100644 index 0000000..cfb0c73 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi @@ -0,0 +1,4 @@ +# Minimal stub expressing only the classes required by OpenSSL.crypto. + +class DSAPrivateKey: ... +class DSAPublicKey: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi new file mode 100644 index 0000000..006e822 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi @@ -0,0 +1,58 @@ +from cryptography.hazmat.primitives.serialization import Encoding, KeySerializationEncryption, PrivateFormat, PublicFormat +from typing import Tuple + +class RSAPrivateKey: + def signer(self, padding, algorithm): ... + def decrypt(self, ciphertext: bytes, padding) -> bytes: ... + def public_key(self) -> RSAPublicKey: ... + @property + def key_size(self) -> int: ... + def sign(self, data: bytes, padding, algorithm) -> bytes: ... + +class RSAPrivateKeyWithSerialization(RSAPrivateKey): + def private_numbers(self) -> RSAPrivateNumbers: ... + def private_bytes(self, encoding: Encoding, format: PrivateFormat, + encryption_algorithm: KeySerializationEncryption) -> bytes: ... + +class RSAPublicKey: + def verifier(self, signature: bytes, padding, algorithm): ... + def encrypt(self, plaintext: bytes, padding) -> bytes: ... + @property + def key_size(self) -> int: ... + def public_numbers(self) -> RSAPublicNumbers: ... + def public_bytes(self, encoding: Encoding, format: PublicFormat) -> bytes: ... + def verify(self, signature: bytes, data: bytes, padding, algorithm) -> None: ... + +RSAPublicKeyWithSerialization = RSAPublicKey + +def generate_private_key(public_exponent: int, key_size: int, backend) -> RSAPrivateKey: ... +def rsa_crt_iqmp(p: int, q: int) -> int: ... +def rsa_crt_dmp1(private_exponent: int, p: int) -> int: ... +def rsa_crt_dmq1(private_exponent: int, q: int) -> int: ... +def rsa_recover_prime_factors(n: int, e: int, d: int) -> Tuple[int, int]: ... + +class RSAPrivateNumbers: + def __init__(self, p: int, q: int, d: int, dmp1: int, dmq1: int, iqmp: int, public_numbers: RSAPublicNumbers) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + @property + def d(self) -> int: ... + @property + def dmp1(self) -> int: ... + @property + def dmq1(self) -> int: ... + @property + def iqmp(self) -> int: ... + @property + def public_numbers(self) -> RSAPublicNumbers: ... + def private_key(self, backend) -> RSAPrivateKey: ... + +class RSAPublicNumbers: + def __init__(self, e: int, n: int) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + def public_key(self, backend) -> RSAPublicKey: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi new file mode 100644 index 0000000..bec4e89 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi @@ -0,0 +1,33 @@ +from typing import Any, Optional +from enum import Enum + +def load_pem_private_key(data: bytes, password: Optional[bytes], backend): ... +def load_pem_public_key(data: bytes, backend): ... +def load_der_private_key(data: bytes, password: Optional[bytes], backend): ... +def load_der_public_key(data: bytes, backend): ... +def load_ssh_public_key(data: bytes, backend): ... + +class Encoding(Enum): + PEM: str + DER: str + OpenSSH: str + +class PrivateFormat(Enum): + PKCS8: str + TraditionalOpenSSL: str + +class PublicFormat(Enum): + SubjectPublicKeyInfo: str + PKCS1: str + OpenSSH: str + +class ParameterFormat(Enum): + PKCS3: str + +class KeySerializationEncryption: ... + +class BestAvailableEncryption(KeySerializationEncryption): + password: Any + def __init__(self, password) -> None: ... + +class NoEncryption(KeySerializationEncryption): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/enum.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/enum.pyi new file mode 100644 index 0000000..703c7cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/enum.pyi @@ -0,0 +1,77 @@ +# NB: third_party/2/enum.pyi and stdlib/3.4/enum.pyi must remain consistent! +import sys +from typing import Any, Dict, Iterator, List, Mapping, Type, TypeVar, Union +from abc import ABCMeta + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Type[Enum]) + +# Note: EnumMeta actually subclasses type directly, not ABCMeta. +# This is a temporary workaround to allow multiple creation of enums with builtins +# such as str as mixins, which due to the handling of ABCs of builtin types, cause +# spurious inconsistent metaclass structure. See #1595. +# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself +class EnumMeta(ABCMeta): + def __iter__(self: Type[_T]) -> Iterator[_T]: ... + def __reversed__(self: Type[_T]) -> Iterator[_T]: ... + def __contains__(self: Type[_T], member: object) -> bool: ... + def __getitem__(self: Type[_T], name: str) -> _T: ... + @property + def __members__(self: Type[_T]) -> Mapping[str, _T]: ... + def __len__(self) -> int: ... + +class Enum(metaclass=EnumMeta): + name: str + value: Any + _name_: str + _value_: Any + _member_names_: List[str] # undocumented + _member_map_: Dict[str, Enum] # undocumented + _value2member_map_: Dict[int, Enum] # undocumented + if sys.version_info >= (3, 7): + _ignore_: Union[str, List[str]] + if sys.version_info >= (3, 6): + _order_: str + @classmethod + def _missing_(cls, value: object) -> Any: ... + @staticmethod + def _generate_next_value_(name: str, start: int, count: int, last_values: List[Any]) -> Any: ... + def __new__(cls: Type[_T], value: object) -> _T: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __dir__(self) -> List[str]: ... + def __format__(self, format_spec: str) -> str: ... + def __hash__(self) -> Any: ... + def __reduce_ex__(self, proto: object) -> Any: ... + +class IntEnum(int, Enum): + value: int + +def unique(enumeration: _S) -> _S: ... + +if sys.version_info >= (3, 6): + _auto_null: Any + + # subclassing IntFlag so it picks up all implemented base functions, best modeling behavior of enum.auto() + class auto(IntFlag): + value: Any + + class Flag(Enum): + def __contains__(self: _T, other: _T) -> bool: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __bool__(self) -> bool: ... + def __or__(self: _T, other: _T) -> _T: ... + def __and__(self: _T, other: _T) -> _T: ... + def __xor__(self: _T, other: _T) -> _T: ... + def __invert__(self: _T) -> _T: ... + + # The `type: ignore` comment is needed because mypy considers the type + # signatures of several methods defined in int and Flag to be incompatible. + class IntFlag(int, Flag): # type: ignore + def __or__(self: _T, other: Union[int, _T]) -> _T: ... + def __and__(self: _T, other: Union[int, _T]) -> _T: ... + def __xor__(self: _T, other: Union[int, _T]) -> _T: ... + __ror__ = __or__ + __rand__ = __and__ + __rxor__ = __xor__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi new file mode 100644 index 0000000..ead5d24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi @@ -0,0 +1,297 @@ +from typing import Any +from thrift.Thrift import TProcessor # type: ignore + +fastbinary: Any + +class Iface: + def getName(self): ... + def getVersion(self): ... + def getStatus(self): ... + def getStatusDetails(self): ... + def getCounters(self): ... + def getCounter(self, key): ... + def setOption(self, key, value): ... + def getOption(self, key): ... + def getOptions(self): ... + def getCpuProfile(self, profileDurationInSec): ... + def aliveSince(self): ... + def reinitialize(self): ... + def shutdown(self): ... + +class Client(Iface): + def __init__(self, iprot, oprot=...) -> None: ... + def getName(self): ... + def send_getName(self): ... + def recv_getName(self): ... + def getVersion(self): ... + def send_getVersion(self): ... + def recv_getVersion(self): ... + def getStatus(self): ... + def send_getStatus(self): ... + def recv_getStatus(self): ... + def getStatusDetails(self): ... + def send_getStatusDetails(self): ... + def recv_getStatusDetails(self): ... + def getCounters(self): ... + def send_getCounters(self): ... + def recv_getCounters(self): ... + def getCounter(self, key): ... + def send_getCounter(self, key): ... + def recv_getCounter(self): ... + def setOption(self, key, value): ... + def send_setOption(self, key, value): ... + def recv_setOption(self): ... + def getOption(self, key): ... + def send_getOption(self, key): ... + def recv_getOption(self): ... + def getOptions(self): ... + def send_getOptions(self): ... + def recv_getOptions(self): ... + def getCpuProfile(self, profileDurationInSec): ... + def send_getCpuProfile(self, profileDurationInSec): ... + def recv_getCpuProfile(self): ... + def aliveSince(self): ... + def send_aliveSince(self): ... + def recv_aliveSince(self): ... + def reinitialize(self): ... + def send_reinitialize(self): ... + def shutdown(self): ... + def send_shutdown(self): ... + +class Processor(Iface, TProcessor): + def __init__(self, handler) -> None: ... + def process(self, iprot, oprot): ... + def process_getName(self, seqid, iprot, oprot): ... + def process_getVersion(self, seqid, iprot, oprot): ... + def process_getStatus(self, seqid, iprot, oprot): ... + def process_getStatusDetails(self, seqid, iprot, oprot): ... + def process_getCounters(self, seqid, iprot, oprot): ... + def process_getCounter(self, seqid, iprot, oprot): ... + def process_setOption(self, seqid, iprot, oprot): ... + def process_getOption(self, seqid, iprot, oprot): ... + def process_getOptions(self, seqid, iprot, oprot): ... + def process_getCpuProfile(self, seqid, iprot, oprot): ... + def process_aliveSince(self, seqid, iprot, oprot): ... + def process_reinitialize(self, seqid, iprot, oprot): ... + def process_shutdown(self, seqid, iprot, oprot): ... + +class getName_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getName_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getVersion_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getVersion_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatus_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatus_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatusDetails_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatusDetails_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounters_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounters_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounter_args: + thrift_spec: Any + key: Any + def __init__(self, key=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounter_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class setOption_args: + thrift_spec: Any + key: Any + value: Any + def __init__(self, key=..., value=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class setOption_result: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOption_args: + thrift_spec: Any + key: Any + def __init__(self, key=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOption_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOptions_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOptions_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCpuProfile_args: + thrift_spec: Any + profileDurationInSec: Any + def __init__(self, profileDurationInSec=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCpuProfile_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class aliveSince_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class aliveSince_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class reinitialize_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class shutdown_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/gflags.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/gflags.pyi new file mode 100644 index 0000000..87edd4e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/gflags.pyi @@ -0,0 +1,242 @@ +from typing import Any, Callable, Dict, Iterable, IO, List, Optional, Sequence, Union +from types import ModuleType + +class Error(Exception): ... +FlagsError = Error + +class DuplicateFlag(FlagsError): ... + +class CantOpenFlagFileError(FlagsError): ... + +class DuplicateFlagCannotPropagateNoneToSwig(DuplicateFlag): ... + +class DuplicateFlagError(DuplicateFlag): + def __init__(self, flagname: str, flag_values: FlagValues, other_flag_values: FlagValues = ...) -> None: ... + +class IllegalFlagValueError(FlagsError): ... +IllegalFlagValue = IllegalFlagValueError + +class UnrecognizedFlag(FlagsError): ... + +class UnrecognizedFlagError(UnrecognizedFlag): + def __init__(self, flagname: str, flagvalue: str = ...) -> None: ... + +def get_help_width() -> int: ... +GetHelpWidth = get_help_width +def CutCommonSpacePrefix(text) -> str: ... +def text_wrap(text: str, length: int = ..., indent: str = ..., firstline_indent: str = ..., tabs: str = ...) -> str: ... +TextWrap = text_wrap +def doc_to_help(doc: str) -> str: ... +DocToHelp = doc_to_help + +class FlagValues: + def __init__(self) -> None: ... + def UseGnuGetOpt(self, use_gnu_getopt: bool = ...) -> None: ... + def is_gnu_getopt(self) -> bool: ... + IsGnuGetOpt = is_gnu_getopt + # TODO dict type + def FlagDict(self) -> dict: ... + def flags_by_module_dict(self) -> Dict[str, List[Flag]]: ... + FlagsByModuleDict = flags_by_module_dict + def flags_by_module_id_dict(self) -> Dict[int, List[Flag]]: ... + FlagsByModuleIdDict = flags_by_module_id_dict + def key_flags_by_module_dict(self) -> Dict[str, List[Flag]]: ... + KeyFlagsByModuleDict = key_flags_by_module_dict + def find_module_defining_flag(self, flagname: str, default: str = ...) -> str: ... + FindModuleDefiningFlag = find_module_defining_flag + def find_module_id_defining_flag(self, flagname: str, default: int = ...) -> int: ... + FindModuleIdDefiningFlag = find_module_id_defining_flag + def append_flag_values(self, flag_values: FlagValues) -> None: ... + AppendFlagValues = append_flag_values + def remove_flag_values(self, flag_values: FlagValues) -> None: ... + RemoveFlagValues = remove_flag_values + def __setitem__(self, name: str, flag: Flag) -> None: ... + def __getitem__(self, name: str) -> Flag: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any): ... + def __delattr__(self, flag_name: str) -> None: ... + def set_default(self, name: str, value: Any) -> None: ... + SetDefault = set_default + def __contains__(self, name: str) -> bool: ... + has_key = __contains__ + def __iter__(self) -> Iterable[str]: ... + def __call__(self, argv: List[str], known_only: bool = ...) -> List[str]: ... + def reset(self) -> None: ... + Reset = reset + def RegisteredFlags(self) -> List[str]: ... + def flag_values_dict(self) -> Dict[str, Any]: ... + FlagValuesDict = flag_values_dict + def __str__(self) -> str: ... + def GetHelp(self, prefix: str = ...) -> str: ... + def module_help(self, module: Union[ModuleType, str]) -> str: ... + ModuleHelp = module_help + def main_module_help(self) -> str: ... + MainModuleHelp = main_module_help + def get(self, name: str, default: Any) -> Any: ... + def ShortestUniquePrefixes(self, fl: Dict[str, Flag]) -> Dict[str, str]: ... + def ExtractFilename(self, flagfile_str: str) -> str: ... + def read_flags_from_files(self, argv: List[str], force_gnu: bool = ...) -> List[str]: ... + ReadFlagsFromFiles = read_flags_from_files + def flags_into_string(self) -> str: ... + FlagsIntoString = flags_into_string + def append_flags_into_file(self, filename: str) -> None: ... + AppendFlagsIntoFile = append_flags_into_file + def write_help_in_xml_format(self, outfile: IO[str] = ...) -> None: ... + WriteHelpInXMLFormat = write_help_in_xml_format + # TODO validator: gflags_validators.Validator + def AddValidator(self, validator: Any) -> None: ... + +FLAGS: FlagValues + +class Flag: + name: str + default: Any + default_as_str: str + value: Any + help: str + short_name: str + boolean = False + present = False + parser: ArgumentParser + serializer: ArgumentSerializer + allow_override = False + + def __init__(self, parser: ArgumentParser, serializer: ArgumentSerializer, name: str, + default: Optional[str], help_string: str, short_name: str = ..., boolean: bool = ..., + allow_override: bool = ...) -> None: ... + def Parse(self, argument: Any) -> Any: ... + def Unparse(self) -> None: ... + def Serialize(self) -> str: ... + def SetDefault(self, value: Any) -> None: ... + def Type(self) -> str: ... + def WriteInfoInXMLFormat(self, outfile: IO[str], module_name: str, is_key: bool = ..., indent: str = ...) -> None: ... + +class ArgumentParser(object): + syntactic_help: str + # TODO what is this + def parse(self, argument: Any) -> Any: ... + Parser = parse + def flag_type(self) -> str: ... + Type = flag_type + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str) -> None: ... + +class ArgumentSerializer: + def Serialize(self, value: Any) -> unicode: ... + +class ListSerializer(ArgumentSerializer): + def __init__(self, list_sep: str) -> None: ... + def Serialize(self, value: List[Any]) -> str: ... + +def register_validator(flag_name: str, + checker: Callable[[Any], bool], + message: str = ..., + flag_values: FlagValues = ...) -> None: ... +RegisterValidator = register_validator +def mark_flag_as_required(flag_name: str, flag_values: FlagValues = ...) -> None: ... +MarkFlagAsRequired = mark_flag_as_required + +def DEFINE(parser: ArgumentParser, name: str, default: Any, help: str, + flag_values: FlagValues = ..., serializer: ArgumentSerializer = ..., **args: Any) -> None: ... +def DEFINE_flag(flag: Flag, flag_values: FlagValues = ...) -> None: ... +def declare_key_flag(flag_name: str, flag_values: FlagValues = ...) -> None: ... +DECLARE_key_flag = declare_key_flag +def adopt_module_key_flags(module: ModuleType, flag_values: FlagValues = ...) -> None: ... +ADOPT_module_key_flags = adopt_module_key_flags +def DEFINE_string(name: str, default: Optional[str], help: str, flag_values: FlagValues = ..., **args: Any): ... + +class BooleanParser(ArgumentParser): + def Convert(self, argument: Any) -> bool: ... + def Parse(self, argument: Any) -> bool: ... + +class BooleanFlag(Flag): + def __init__(self, name: str, default: Optional[bool], help: str, short_name=..., **args: Any) -> None: ... + +def DEFINE_boolean(name: str, default: Optional[bool], help: str, flag_values: FlagValues = ..., **args: Any) -> None: ... + +DEFINE_bool = DEFINE_boolean + +class HelpFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class HelpXMLFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class HelpshortFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class NumericParser(ArgumentParser): + def IsOutsideBounds(self, val: float) -> bool: ... + def Parse(self, argument: Any) -> float: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str) -> None: ... + def Convert(self, argument: Any) -> Any: ... + +class FloatParser(NumericParser): + number_article: str + number_name: str + syntactic_help: str + def __init__(self, lower_bound: float = ..., upper_bound: float = ...) -> None: ... + def Convert(self, argument: Any) -> float: ... + +def DEFINE_float(name: str, default: Optional[float], help: str, lower_bound: float = ..., + upper_bound: float = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... + +class IntegerParser(NumericParser): + number_article: str + number_name: str + syntactic_help: str + def __init__(self, lower_bound: int = ..., upper_bound: int = ...) -> None: ... + def Convert(self, argument: Any) -> int: ... + +def DEFINE_integer(name: str, default: Optional[int], help: str, lower_bound: int = ..., + upper_bound: int = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... + +class EnumParser(ArgumentParser): + def __init__(self, enum_values: List[str]) -> None: ... + def Parse(self, argument: Any) -> Any: ... + +class EnumFlag(Flag): + def __init__(self, name: str, default: Optional[str], help: str, enum_values: List[str], + short_name: str, **args: Any) -> None: ... + +def DEFINE_enum(name: str, default: Optional[str], enum_values: List[str], help: str, + flag_values: FlagValues = ..., **args: Any) -> None: ... + +class BaseListParser(ArgumentParser): + def __init__(self, token: str = ..., name: str = ...) -> None: ... + def Parse(self, argument: Any) -> list: ... + +class ListParser(BaseListParser): + def __init__(self) -> None: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str): ... + +class WhitespaceSeparatedListParser(BaseListParser): + def __init__(self) -> None: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str): ... + +def DEFINE_list(name: str, default: Optional[List[str]], help: str, flag_values: FlagValues = ..., **args: Any) -> None: ... +def DEFINE_spaceseplist(name: str, default: Optional[List[str]], help: str, flag_values: FlagValues = ..., + **args: Any) -> None: ... + +class MultiFlag(Flag): + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + def Parse(self, arguments: Any) -> None: ... + def Serialize(self) -> str: ... + +def DEFINE_multi_string(name: str, default: Optional[Union[str, List[str]]], help: str, + flag_values: FlagValues = ..., **args: Any) -> None: ... +DEFINE_multistring = DEFINE_multi_string + +def DEFINE_multi_integer(name: str, default: Optional[Union[int, List[int]]], help: str, lower_bound: int = ..., + upper_bound: int = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... +DEFINE_multi_int = DEFINE_multi_integer + +def DEFINE_multi_float(name: str, default: Optional[Union[float, List[float]]], help: str, + lower_bound: float = ..., upper_bound: float = ..., + flag_values: FlagValues = ..., **args: Any) -> None: ... + +def DEFINE_multi_enum(name: str, default: Optional[Union[Sequence[str], str]], + enum_values: Sequence[str], help: str, + flag_values: FlagValues = ..., case_sensitive: bool = ..., **args: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi new file mode 100644 index 0000000..0d3fc00 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi @@ -0,0 +1,97 @@ +from typing import Any + +string_types: Any +bytes_types: Any +LOST_STATES: Any +ENVI_VERSION: Any +ENVI_VERSION_KEY: Any +log: Any + +class KazooClient: + logger: Any + handler: Any + auth_data: Any + default_acl: Any + randomize_hosts: Any + hosts: Any + chroot: Any + state: Any + state_listeners: Any + read_only: Any + retry: Any + Barrier: Any + Counter: Any + DoubleBarrier: Any + ChildrenWatch: Any + DataWatch: Any + Election: Any + NonBlockingLease: Any + MultiNonBlockingLease: Any + Lock: Any + Party: Any + Queue: Any + LockingQueue: Any + SetPartitioner: Any + Semaphore: Any + ShallowParty: Any + def __init__(self, hosts=..., timeout=..., client_id=..., handler=..., default_acl=..., auth_data=..., read_only=..., + randomize_hosts=..., connection_retry=..., command_retry=..., logger=..., **kwargs) -> None: ... + @property + def client_state(self): ... + @property + def client_id(self): ... + @property + def connected(self): ... + def set_hosts(self, hosts, randomize_hosts=...): ... + def add_listener(self, listener): ... + def remove_listener(self, listener): ... + def start(self, timeout=...): ... + def start_async(self): ... + def stop(self): ... + def restart(self): ... + def close(self): ... + def command(self, cmd=...): ... + def server_version(self, retries=...): ... + def add_auth(self, scheme, credential): ... + def add_auth_async(self, scheme, credential): ... + def unchroot(self, path): ... + def sync_async(self, path): ... + def sync(self, path): ... + def create(self, path, value=..., acl=..., ephemeral=..., sequence=..., makepath=...): ... + def create_async(self, path, value=..., acl=..., ephemeral=..., sequence=..., makepath=...): ... + def ensure_path(self, path, acl=...): ... + def ensure_path_async(self, path, acl=...): ... + def exists(self, path, watch=...): ... + def exists_async(self, path, watch=...): ... + def get(self, path, watch=...): ... + def get_async(self, path, watch=...): ... + def get_children(self, path, watch=..., include_data=...): ... + def get_children_async(self, path, watch=..., include_data=...): ... + def get_acls(self, path): ... + def get_acls_async(self, path): ... + def set_acls(self, path, acls, version=...): ... + def set_acls_async(self, path, acls, version=...): ... + def set(self, path, value, version=...): ... + def set_async(self, path, value, version=...): ... + def transaction(self): ... + def delete(self, path, version=..., recursive=...): ... + def delete_async(self, path, version=...): ... + def reconfig(self, joining, leaving, new_members, from_config=...): ... + def reconfig_async(self, joining, leaving, new_members, from_config): ... + +class TransactionRequest: + client: Any + operations: Any + committed: Any + def __init__(self, client) -> None: ... + def create(self, path, value=..., acl=..., ephemeral=..., sequence=...): ... + def delete(self, path, version=...): ... + def set_data(self, path, value, version=...): ... + def check(self, path, version): ... + def commit_async(self): ... + def commit(self): ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, exc_tb): ... + +class KazooState: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi new file mode 100644 index 0000000..4dd76cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi @@ -0,0 +1,58 @@ +from typing import Any + +class KazooException(Exception): ... +class ZookeeperError(KazooException): ... +class CancelledError(KazooException): ... +class ConfigurationError(KazooException): ... +class ZookeeperStoppedError(KazooException): ... +class ConnectionDropped(KazooException): ... +class LockTimeout(KazooException): ... +class WriterNotClosedException(KazooException): ... + +EXCEPTIONS: Any + +class RolledBackError(ZookeeperError): ... +class SystemZookeeperError(ZookeeperError): ... +class RuntimeInconsistency(ZookeeperError): ... +class DataInconsistency(ZookeeperError): ... +class ConnectionLoss(ZookeeperError): ... +class MarshallingError(ZookeeperError): ... +class UnimplementedError(ZookeeperError): ... +class OperationTimeoutError(ZookeeperError): ... +class BadArgumentsError(ZookeeperError): ... +class NewConfigNoQuorumError(ZookeeperError): ... +class ReconfigInProcessError(ZookeeperError): ... +class APIError(ZookeeperError): ... +class NoNodeError(ZookeeperError): ... +class NoAuthError(ZookeeperError): ... +class BadVersionError(ZookeeperError): ... +class NoChildrenForEphemeralsError(ZookeeperError): ... +class NodeExistsError(ZookeeperError): ... +class NotEmptyError(ZookeeperError): ... +class SessionExpiredError(ZookeeperError): ... +class InvalidCallbackError(ZookeeperError): ... +class InvalidACLError(ZookeeperError): ... +class AuthFailedError(ZookeeperError): ... +class SessionMovedError(ZookeeperError): ... +class NotReadOnlyCallError(ZookeeperError): ... +class ConnectionClosedError(SessionExpiredError): ... + +ConnectionLossException: Any +MarshallingErrorException: Any +SystemErrorException: Any +RuntimeInconsistencyException: Any +DataInconsistencyException: Any +UnimplementedException: Any +OperationTimeoutException: Any +BadArgumentsException: Any +ApiErrorException: Any +NoNodeException: Any +NoAuthException: Any +BadVersionException: Any +NoChildrenForEphemeralsException: Any +NodeExistsException: Any +InvalidACLException: Any +AuthFailedException: Any +NotEmptyException: Any +SessionExpiredException: Any +InvalidCallbackException: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi new file mode 100644 index 0000000..111a48c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi @@ -0,0 +1,21 @@ +from typing import Any + +log: Any + +class DataWatch: + def __init__(self, client, path, func=..., *args, **kwargs) -> None: ... + def __call__(self, func): ... + +class ChildrenWatch: + def __init__(self, client, path, func=..., allow_session_lost=..., send_event=...) -> None: ... + def __call__(self, func): ... + +class PatientChildrenWatch: + client: Any + path: Any + children: Any + time_boundary: Any + children_changed: Any + def __init__(self, client, path, time_boundary=...) -> None: ... + asy: Any + def start(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pathlib2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pathlib2.pyi new file mode 100644 index 0000000..42968fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pathlib2.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generator, IO, Optional, Sequence, Tuple, Type, TypeVar, Union, List +from types import TracebackType +import os +import sys + +_P = TypeVar('_P', bound='PurePath') + +if sys.version_info >= (3, 6): + _PurePathBase = os.PathLike[str] +else: + _PurePathBase = object + +class PurePath(_PurePathBase): + parts: Tuple[str, ...] + drive: str + root: str + anchor: str + name: str + suffix: str + suffixes: List[str] + stem: str + if sys.version_info < (3, 5): + def __init__(self, *pathsegments: str) -> None: ... + elif sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath]) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]]) -> _P: ... + def __hash__(self) -> int: ... + def __lt__(self, other: PurePath) -> bool: ... + def __le__(self, other: PurePath) -> bool: ... + def __gt__(self, other: PurePath) -> bool: ... + def __ge__(self, other: PurePath) -> bool: ... + def __truediv__(self: _P, key: Union[str, PurePath]) -> _P: ... + if sys.version_info < (3,): + def __div__(self: _P, key: Union[str, PurePath]) -> _P: ... + def __bytes__(self) -> bytes: ... + def as_posix(self) -> str: ... + def as_uri(self) -> str: ... + def is_absolute(self) -> bool: ... + def is_reserved(self) -> bool: ... + def match(self, path_pattern: str) -> bool: ... + def relative_to(self: _P, *other: Union[str, PurePath]) -> _P: ... + def with_name(self: _P, name: str) -> _P: ... + def with_suffix(self: _P, suffix: str) -> _P: ... + def joinpath(self: _P, *other: Union[str, PurePath]) -> _P: ... + + @property + def parents(self: _P) -> Sequence[_P]: ... + @property + def parent(self: _P) -> _P: ... + +class PurePosixPath(PurePath): ... +class PureWindowsPath(PurePath): ... + +class Path(PurePath): + def __enter__(self) -> Path: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Optional[bool]: ... + @classmethod + def cwd(cls: Type[_P]) -> _P: ... + def stat(self) -> os.stat_result: ... + def chmod(self, mode: int) -> None: ... + def exists(self) -> bool: ... + def glob(self, pattern: str) -> Generator[Path, None, None]: ... + def group(self) -> str: ... + def is_dir(self) -> bool: ... + def is_file(self) -> bool: ... + def is_symlink(self) -> bool: ... + def is_socket(self) -> bool: ... + def is_fifo(self) -> bool: ... + def is_block_device(self) -> bool: ... + def is_char_device(self) -> bool: ... + def iterdir(self) -> Generator[Path, None, None]: ... + def lchmod(self, mode: int) -> None: ... + def lstat(self) -> os.stat_result: ... + if sys.version_info < (3, 5): + def mkdir(self, mode: int = ..., + parents: bool = ...) -> None: ... + else: + def mkdir(self, mode: int = ..., parents: bool = ..., + exist_ok: bool = ...) -> None: ... + def open(self, mode: str = ..., buffering: int = ..., + encoding: Optional[str] = ..., errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + def owner(self) -> str: ... + def rename(self, target: Union[str, PurePath]) -> None: ... + def replace(self, target: Union[str, PurePath]) -> None: ... + if sys.version_info < (3, 6): + def resolve(self: _P) -> _P: ... + else: + def resolve(self: _P, strict: bool = ...) -> _P: ... + def rglob(self, pattern: str) -> Generator[Path, None, None]: ... + def rmdir(self) -> None: ... + def symlink_to(self, target: Union[str, Path], + target_is_directory: bool = ...) -> None: ... + def touch(self, mode: int = ..., exist_ok: bool = ...) -> None: ... + def unlink(self) -> None: ... + + if sys.version_info >= (3, 5): + @classmethod + def home(cls: Type[_P]) -> _P: ... + if sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath], + **kwargs: Any) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]], + **kwargs: Any) -> _P: ... + + def absolute(self: _P) -> _P: ... + def expanduser(self: _P) -> _P: ... + def read_bytes(self) -> bytes: ... + def read_text(self, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> str: ... + def samefile(self, other_path: Union[str, bytes, int, Path]) -> bool: ... + def write_bytes(self, data: bytes) -> int: ... + def write_text(self, data: str, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> int: ... + + +class PosixPath(Path, PurePosixPath): ... +class WindowsPath(Path, PureWindowsPath): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pymssql.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pymssql.pyi new file mode 100644 index 0000000..8e08ee3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/pymssql.pyi @@ -0,0 +1,48 @@ +from datetime import datetime, date, time + +from typing import Any, Dict, Tuple, Iterable, List, Optional, Union, Sequence + +Scalar = Union[int, float, str, datetime, date, time] +Result = Union[Tuple[Scalar, ...], Dict[str, Scalar]] + +class Connection(object): + def __init__(self, user, password, host, database, timeout, + login_timeout, charset, as_dict) -> None: ... + def autocommit(self, status: bool) -> None: ... + def close(self) -> None: ... + def commit(self) -> None: ... + def cursor(self) -> Cursor: ... + def rollback(self) -> None: ... + +class Cursor(object): + def __init__(self) -> None: ... + def __iter__(self): ... + def __next__(self) -> Any: ... + def callproc(self, procname: str, **kwargs) -> None: ... + def close(self) -> None: ... + def execute(self, stmt: str, + params: Optional[Union[Scalar, Tuple[Scalar, ...], + Dict[str, Scalar]]]) -> None: ... + def executemany(self, stmt: str, + params: Optional[Sequence[Tuple[Scalar, ...]]]) -> None: ... + def fetchall(self) -> List[Result]: ... + def fetchmany(self, size: Optional[int]) -> List[Result]: ... + def fetchone(self) -> Result: ... + +def connect(server: Optional[str], + user: Optional[str], + password: Optional[str], + database: Optional[str], + timeout: Optional[int], + login_timeout: Optional[int], + charset: Optional[str], + as_dict: Optional[bool], + host: Optional[str], + appname: Optional[str], + port: Optional[str], + + conn_properties: Optional[Union[str, Sequence[str]]], + autocommit: Optional[bool], + tds_version: Optional[str]) -> Connection: ... +def get_max_connections() -> int: ... +def set_max_connections(n: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi new file mode 100644 index 0000000..333de49 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi @@ -0,0 +1,24 @@ +from . import client +from . import connection +from . import utils +from . import exceptions + +Redis = client.Redis +StrictRedis = client.StrictRedis +BlockingConnectionPool = connection.BlockingConnectionPool +ConnectionPool = connection.ConnectionPool +Connection = connection.Connection +SSLConnection = connection.SSLConnection +UnixDomainSocketConnection = connection.UnixDomainSocketConnection +from_url = utils.from_url +AuthenticationError = exceptions.AuthenticationError +BusyLoadingError = exceptions.BusyLoadingError +ConnectionError = exceptions.ConnectionError +DataError = exceptions.DataError +InvalidResponse = exceptions.InvalidResponse +PubSubError = exceptions.PubSubError +ReadOnlyError = exceptions.ReadOnlyError +RedisError = exceptions.RedisError +ResponseError = exceptions.ResponseError +TimeoutError = exceptions.TimeoutError +WatchError = exceptions.WatchError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/client.pyi new file mode 100644 index 0000000..f416761 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/client.pyi @@ -0,0 +1,292 @@ +from typing import Any + +SYM_EMPTY: Any + +def list_or_args(keys, args): ... +def timestamp_to_datetime(response): ... +def string_keys_to_dict(key_string, callback): ... +def dict_merge(*dicts): ... +def parse_debug_object(response): ... +def parse_object(response, infotype): ... +def parse_info(response): ... + +SENTINEL_STATE_TYPES: Any + +def parse_sentinel_state(item): ... +def parse_sentinel_master(response): ... +def parse_sentinel_masters(response): ... +def parse_sentinel_slaves_and_sentinels(response): ... +def parse_sentinel_get_master(response): ... +def pairs_to_dict(response): ... +def pairs_to_dict_typed(response, type_info): ... +def zset_score_pairs(response, **options): ... +def sort_return_tuples(response, **options): ... +def int_or_none(response): ... +def float_or_none(response): ... +def bool_ok(response): ... +def parse_client_list(response, **options): ... +def parse_config_get(response, **options): ... +def parse_scan(response, **options): ... +def parse_hscan(response, **options): ... +def parse_zscan(response, **options): ... +def parse_slowlog_get(response, **options): ... + +class StrictRedis: + RESPONSE_CALLBACKS: Any + @classmethod + def from_url(cls, url, db=..., **kwargs): ... + connection_pool: Any + response_callbacks: Any + def __init__(self, host=..., port=..., db=..., password=..., socket_timeout=..., socket_connect_timeout=..., + socket_keepalive=..., socket_keepalive_options=..., connection_pool=..., unix_socket_path=..., encoding=..., + encoding_errors=..., charset=..., errors=..., decode_responses=..., retry_on_timeout=..., ssl=..., + ssl_keyfile=..., ssl_certfile=..., ssl_cert_reqs=..., ssl_ca_certs=...) -> None: ... + def set_response_callback(self, command, callback): ... + def pipeline(self, transaction=..., shard_hint=...): ... + def transaction(self, func, *watches, **kwargs): ... + def lock(self, name, timeout=..., sleep=..., blocking_timeout=..., lock_class=..., thread_local=...): ... + def pubsub(self, **kwargs): ... + def execute_command(self, *args, **options): ... + def parse_response(self, connection, command_name, **options): ... + def bgrewriteaof(self): ... + def bgsave(self): ... + def client_kill(self, address): ... + def client_list(self): ... + def client_getname(self): ... + def client_setname(self, name): ... + def config_get(self, pattern=...): ... + def config_set(self, name, value): ... + def config_resetstat(self): ... + def config_rewrite(self): ... + def dbsize(self): ... + def debug_object(self, key): ... + def echo(self, value): ... + def flushall(self): ... + def flushdb(self): ... + def info(self, section=...): ... + def lastsave(self): ... + def object(self, infotype, key): ... + def ping(self): ... + def save(self): ... + def sentinel(self, *args): ... + def sentinel_get_master_addr_by_name(self, service_name): ... + def sentinel_master(self, service_name): ... + def sentinel_masters(self): ... + def sentinel_monitor(self, name, ip, port, quorum): ... + def sentinel_remove(self, name): ... + def sentinel_sentinels(self, service_name): ... + def sentinel_set(self, name, option, value): ... + def sentinel_slaves(self, service_name): ... + def shutdown(self): ... + def slaveof(self, host=..., port=...): ... + def slowlog_get(self, num=...): ... + def slowlog_len(self): ... + def slowlog_reset(self): ... + def time(self): ... + def append(self, key, value): ... + def bitcount(self, key, start=..., end=...): ... + def bitop(self, operation, dest, *keys): ... + def bitpos(self, key, bit, start=..., end=...): ... + def decr(self, name, amount=...): ... + def delete(self, *names): ... + def __delitem__(self, name): ... + def dump(self, name): ... + def exists(self, name): ... + __contains__: Any + def expire(self, name, time): ... + def expireat(self, name, when): ... + def get(self, name): ... + def __getitem__(self, name): ... + def getbit(self, name, offset): ... + def getrange(self, key, start, end): ... + def getset(self, name, value): ... + def incr(self, name, amount=...): ... + def incrby(self, name, amount=...): ... + def incrbyfloat(self, name, amount=...): ... + def keys(self, pattern=...): ... + def mget(self, keys, *args): ... + def mset(self, *args, **kwargs): ... + def msetnx(self, *args, **kwargs): ... + def move(self, name, db): ... + def persist(self, name): ... + def pexpire(self, name, time): ... + def pexpireat(self, name, when): ... + def psetex(self, name, time_ms, value): ... + def pttl(self, name): ... + def randomkey(self): ... + def rename(self, src, dst): ... + def renamenx(self, src, dst): ... + def restore(self, name, ttl, value): ... + def set(self, name, value, ex=..., px=..., nx=..., xx=...): ... + def __setitem__(self, name, value): ... + def setbit(self, name, offset, value): ... + def setex(self, name, time, value): ... + def setnx(self, name, value): ... + def setrange(self, name, offset, value): ... + def strlen(self, name): ... + def substr(self, name, start, end=...): ... + def ttl(self, name): ... + def type(self, name): ... + def watch(self, *names): ... + def unwatch(self): ... + def blpop(self, keys, timeout=...): ... + def brpop(self, keys, timeout=...): ... + def brpoplpush(self, src, dst, timeout=...): ... + def lindex(self, name, index): ... + def linsert(self, name, where, refvalue, value): ... + def llen(self, name): ... + def lpop(self, name): ... + def lpush(self, name, *values): ... + def lpushx(self, name, value): ... + def lrange(self, name, start, end): ... + def lrem(self, name, count, value): ... + def lset(self, name, index, value): ... + def ltrim(self, name, start, end): ... + def rpop(self, name): ... + def rpoplpush(self, src, dst): ... + def rpush(self, name, *values): ... + def rpushx(self, name, value): ... + def sort(self, name, start=..., num=..., by=..., get=..., desc=..., alpha=..., store=..., groups=...): ... + def scan(self, cursor=..., match=..., count=...): ... + def scan_iter(self, match=..., count=...): ... + def sscan(self, name, cursor=..., match=..., count=...): ... + def sscan_iter(self, name, match=..., count=...): ... + def hscan(self, name, cursor=..., match=..., count=...): ... + def hscan_iter(self, name, match=..., count=...): ... + def zscan(self, name, cursor=..., match=..., count=..., score_cast_func=...): ... + def zscan_iter(self, name, match=..., count=..., score_cast_func=...): ... + def sadd(self, name, *values): ... + def scard(self, name): ... + def sdiff(self, keys, *args): ... + def sdiffstore(self, dest, keys, *args): ... + def sinter(self, keys, *args): ... + def sinterstore(self, dest, keys, *args): ... + def sismember(self, name, value): ... + def smembers(self, name): ... + def smove(self, src, dst, value): ... + def spop(self, name): ... + def srandmember(self, name, number=...): ... + def srem(self, name, *values): ... + def sunion(self, keys, *args): ... + def sunionstore(self, dest, keys, *args): ... + def zadd(self, name, *args, **kwargs): ... + def zcard(self, name): ... + def zcount(self, name, min, max): ... + def zincrby(self, name, value, amount=...): ... + def zinterstore(self, dest, keys, aggregate=...): ... + def zlexcount(self, name, min, max): ... + def zrange(self, name, start, end, desc=..., withscores=..., score_cast_func=...): ... + def zrangebylex(self, name, min, max, start=..., num=...): ... + def zrangebyscore(self, name, min, max, start=..., num=..., withscores=..., score_cast_func=...): ... + def zrank(self, name, value): ... + def zrem(self, name, *values): ... + def zremrangebylex(self, name, min, max): ... + def zremrangebyrank(self, name, min, max): ... + def zremrangebyscore(self, name, min, max): ... + def zrevrange(self, name, start, end, withscores=..., score_cast_func=...): ... + def zrevrangebyscore(self, name, max, min, start=..., num=..., withscores=..., score_cast_func=...): ... + def zrevrank(self, name, value): ... + def zscore(self, name, value): ... + def zunionstore(self, dest, keys, aggregate=...): ... + def pfadd(self, name, *values): ... + def pfcount(self, name): ... + def pfmerge(self, dest, *sources): ... + def hdel(self, name, *keys): ... + def hexists(self, name, key): ... + def hget(self, name, key): ... + def hgetall(self, name): ... + def hincrby(self, name, key, amount=...): ... + def hincrbyfloat(self, name, key, amount=...): ... + def hkeys(self, name): ... + def hlen(self, name): ... + def hset(self, name, key, value): ... + def hsetnx(self, name, key, value): ... + def hmset(self, name, mapping): ... + def hmget(self, name, keys, *args): ... + def hvals(self, name): ... + def publish(self, channel, message): ... + def eval(self, script, numkeys, *keys_and_args): ... + def evalsha(self, sha, numkeys, *keys_and_args): ... + def script_exists(self, *args): ... + def script_flush(self): ... + def script_kill(self): ... + def script_load(self, script): ... + def register_script(self, script): ... + +class Redis(StrictRedis): + RESPONSE_CALLBACKS: Any + def pipeline(self, transaction=..., shard_hint=...): ... + def setex(self, name, value, time): ... + def lrem(self, name, value, num=...): ... + def zadd(self, name, *args, **kwargs): ... + +class PubSub: + PUBLISH_MESSAGE_TYPES: Any + UNSUBSCRIBE_MESSAGE_TYPES: Any + connection_pool: Any + shard_hint: Any + ignore_subscribe_messages: Any + connection: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, connection_pool, shard_hint=..., ignore_subscribe_messages=...) -> None: ... + def __del__(self): ... + channels: Any + patterns: Any + def reset(self): ... + def close(self): ... + def on_connect(self, connection): ... + def encode(self, value): ... + @property + def subscribed(self): ... + def execute_command(self, *args, **kwargs): ... + def parse_response(self, block=...): ... + def psubscribe(self, *args, **kwargs): ... + def punsubscribe(self, *args): ... + def subscribe(self, *args, **kwargs): ... + def unsubscribe(self, *args): ... + def listen(self): ... + def get_message(self, ignore_subscribe_messages=...): ... + def handle_message(self, response, ignore_subscribe_messages=...): ... + def run_in_thread(self, sleep_time=...): ... + +class BasePipeline: + UNWATCH_COMMANDS: Any + connection_pool: Any + connection: Any + response_callbacks: Any + transaction: Any + shard_hint: Any + watching: Any + def __init__(self, connection_pool, response_callbacks, transaction, shard_hint) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, traceback): ... + def __del__(self): ... + def __len__(self): ... + command_stack: Any + scripts: Any + explicit_transaction: Any + def reset(self): ... + def multi(self): ... + def execute_command(self, *args, **kwargs): ... + def immediate_execute_command(self, *args, **options): ... + def pipeline_execute_command(self, *args, **options): ... + def raise_first_error(self, commands, response): ... + def annotate_exception(self, exception, number, command): ... + def parse_response(self, connection, command_name, **options): ... + def load_scripts(self): ... + def execute(self, raise_on_error=...): ... + def watch(self, *names): ... + def unwatch(self): ... + def script_load_for_pipeline(self, script): ... + +class StrictPipeline(BasePipeline, StrictRedis): ... +class Pipeline(BasePipeline, Redis): ... + +class Script: + registered_client: Any + script: Any + sha: Any + def __init__(self, registered_client, script) -> None: ... + def __call__(self, keys=..., args=..., client=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/connection.pyi new file mode 100644 index 0000000..7b7ddef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/connection.pyi @@ -0,0 +1,134 @@ +from typing import Any + +ssl_available: Any +hiredis_version: Any +HIREDIS_SUPPORTS_CALLABLE_ERRORS: Any +HIREDIS_SUPPORTS_BYTE_BUFFER: Any +msg: Any +HIREDIS_USE_BYTE_BUFFER: Any +SYM_STAR: Any +SYM_DOLLAR: Any +SYM_CRLF: Any +SYM_EMPTY: Any +SERVER_CLOSED_CONNECTION_ERROR: Any + +class Token: + value: Any + def __init__(self, value) -> None: ... + +class BaseParser: + EXCEPTION_CLASSES: Any + def parse_error(self, response): ... + +class SocketBuffer: + socket_read_size: Any + bytes_written: Any + bytes_read: Any + def __init__(self, socket, socket_read_size) -> None: ... + @property + def length(self): ... + def read(self, length): ... + def readline(self): ... + def purge(self): ... + def close(self): ... + +class PythonParser(BaseParser): + encoding: Any + socket_read_size: Any + def __init__(self, socket_read_size) -> None: ... + def __del__(self): ... + def on_connect(self, connection): ... + def on_disconnect(self): ... + def can_read(self): ... + def read_response(self): ... + +class HiredisParser(BaseParser): + socket_read_size: Any + def __init__(self, socket_read_size) -> None: ... + def __del__(self): ... + def on_connect(self, connection): ... + def on_disconnect(self): ... + def can_read(self): ... + def read_response(self): ... + +DefaultParser: Any + +class Connection: + description_format: Any + pid: Any + host: Any + port: Any + db: Any + password: Any + socket_timeout: Any + socket_connect_timeout: Any + socket_keepalive: Any + socket_keepalive_options: Any + retry_on_timeout: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, host=..., port=..., db=..., password=..., socket_timeout=..., socket_connect_timeout=..., + socket_keepalive=..., socket_keepalive_options=..., retry_on_timeout=..., encoding=..., encoding_errors=..., + decode_responses=..., parser_class=..., socket_read_size=...) -> None: ... + def __del__(self): ... + def register_connect_callback(self, callback): ... + def clear_connect_callbacks(self): ... + def connect(self): ... + def on_connect(self): ... + def disconnect(self): ... + def send_packed_command(self, command): ... + def send_command(self, *args): ... + def can_read(self): ... + def read_response(self): ... + def encode(self, value): ... + def pack_command(self, *args): ... + def pack_commands(self, commands): ... + +class SSLConnection(Connection): + description_format: Any + keyfile: Any + certfile: Any + cert_reqs: Any + ca_certs: Any + def __init__(self, ssl_keyfile=..., ssl_certfile=..., ssl_cert_reqs=..., ssl_ca_certs=..., **kwargs) -> None: ... + +class UnixDomainSocketConnection(Connection): + description_format: Any + pid: Any + path: Any + db: Any + password: Any + socket_timeout: Any + retry_on_timeout: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, path=..., db=..., password=..., socket_timeout=..., encoding=..., encoding_errors=..., + decode_responses=..., retry_on_timeout=..., parser_class=..., socket_read_size=...) -> None: ... + +class ConnectionPool: + @classmethod + def from_url(cls, url, db=..., **kwargs): ... + connection_class: Any + connection_kwargs: Any + max_connections: Any + def __init__(self, connection_class=..., max_connections=..., **connection_kwargs) -> None: ... + pid: Any + def reset(self): ... + def get_connection(self, command_name, *keys, **options): ... + def make_connection(self): ... + def release(self, connection): ... + def disconnect(self): ... + +class BlockingConnectionPool(ConnectionPool): + queue_class: Any + timeout: Any + def __init__(self, max_connections=..., timeout=..., connection_class=..., queue_class=..., **connection_kwargs) -> None: ... + pid: Any + pool: Any + def reset(self): ... + def make_connection(self): ... + def get_connection(self, command_name, *keys, **options): ... + def release(self, connection): ... + def disconnect(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi new file mode 100644 index 0000000..e0cd08a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi @@ -0,0 +1,17 @@ +class RedisError(Exception): ... + +def __unicode__(self): ... + +class AuthenticationError(RedisError): ... +class ConnectionError(RedisError): ... +class TimeoutError(RedisError): ... +class BusyLoadingError(ConnectionError): ... +class InvalidResponse(RedisError): ... +class ResponseError(RedisError): ... +class DataError(RedisError): ... +class PubSubError(RedisError): ... +class WatchError(RedisError): ... +class NoScriptError(ResponseError): ... +class ExecAbortError(ResponseError): ... +class ReadOnlyError(ResponseError): ... +class LockError(RedisError, ValueError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/utils.pyi new file mode 100644 index 0000000..9559abb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/redis/utils.pyi @@ -0,0 +1,8 @@ +from typing import Any + +HIREDIS_AVAILABLE: Any + +def from_url(url, db=..., **kwargs): ... +def pipeline(redis_obj): ... + +class dummy: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi new file mode 100644 index 0000000..8a1261f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi @@ -0,0 +1,15 @@ +from . import mapper +from . import util + +class _RequestConfig: + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def __delattr__(self, name): ... + def load_wsgi_environ(self, environ): ... + +def request_config(original=...): ... + +Mapper = mapper.Mapper +redirect_to = util.redirect_to +url_for = util.url_for +URLGenerator = util.URLGenerator diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi new file mode 100644 index 0000000..f834d08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi @@ -0,0 +1,67 @@ +from typing import Any + +COLLECTION_ACTIONS: Any +MEMBER_ACTIONS: Any + +def strip_slashes(name): ... + +class SubMapperParent: + def submapper(self, **kargs): ... + def collection(self, collection_name, resource_name, path_prefix=..., member_prefix=..., controller=..., + collection_actions=..., member_actions=..., member_options=..., **kwargs): ... + +class SubMapper(SubMapperParent): + kwargs: Any + obj: Any + collection_name: Any + member: Any + resource_name: Any + formatted: Any + def __init__(self, obj, resource_name=..., collection_name=..., actions=..., formatted=..., **kwargs) -> None: ... + def connect(self, *args, **kwargs): ... + def link(self, rel=..., name=..., action=..., method=..., formatted=..., **kwargs): ... + def new(self, **kwargs): ... + def edit(self, **kwargs): ... + def action(self, name=..., action=..., method=..., formatted=..., **kwargs): ... + def index(self, name=..., **kwargs): ... + def show(self, name=..., **kwargs): ... + def create(self, **kwargs): ... + def update(self, **kwargs): ... + def delete(self, **kwargs): ... + def add_actions(self, actions): ... + def __enter__(self): ... + def __exit__(self, type, value, tb): ... + +class Mapper(SubMapperParent): + matchlist: Any + maxkeys: Any + minkeys: Any + urlcache: Any + prefix: Any + req_data: Any + directory: Any + always_scan: Any + controller_scan: Any + debug: Any + append_slash: Any + sub_domains: Any + sub_domains_ignore: Any + domain_match: Any + explicit: Any + encoding: Any + decode_errors: Any + hardcode_names: Any + minimization: Any + create_regs_lock: Any + def __init__(self, controller_scan=..., directory=..., always_scan=..., register=..., explicit=...) -> None: ... + environ: Any + def extend(self, routes, path_prefix=...): ... + def make_route(self, *args, **kargs): ... + def connect(self, *args, **kargs): ... + def create_regs(self, *args, **kwargs): ... + def match(self, url=..., environ=...): ... + def routematch(self, url=..., environ=...): ... + obj: Any + def generate(self, *args, **kargs): ... + def resource(self, member_name, collection_name, **kwargs): ... + def redirect(self, match_path, destination_path, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/util.pyi new file mode 100644 index 0000000..e3be1d4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/routes/util.pyi @@ -0,0 +1,20 @@ +from typing import Any + +class RoutesException(Exception): ... +class MatchException(RoutesException): ... +class GenerationException(RoutesException): ... + +def url_for(*args, **kargs): ... + +class URLGenerator: + mapper: Any + environ: Any + def __init__(self, mapper, environ) -> None: ... + def __call__(self, *args, **kargs): ... + def current(self, *args, **kwargs): ... + +def redirect_to(*args, **kargs): ... +def cache_hostinfo(environ): ... +def controller_scan(directory=...): ... +def as_unicode(value, encoding, errors=...): ... +def ascii_characters(string): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi new file mode 100644 index 0000000..3530bf8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi @@ -0,0 +1,39 @@ +from typing import Any + +import fb303.FacebookService +from .ttypes import * # noqa: F403 +from thrift.Thrift import TProcessor # type: ignore # We don't have thrift stubs in typeshed + +class Iface(fb303.FacebookService.Iface): + def Log(self, messages): ... + +class Client(fb303.FacebookService.Client, Iface): + def __init__(self, iprot, oprot=...) -> None: ... + def Log(self, messages): ... + def send_Log(self, messages): ... + def recv_Log(self): ... + +class Processor(fb303.FacebookService.Processor, Iface, TProcessor): + def __init__(self, handler) -> None: ... + def process(self, iprot, oprot): ... + def process_Log(self, seqid, iprot, oprot): ... + +class Log_args: + thrift_spec: Any + messages: Any + def __init__(self, messages=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class Log_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi new file mode 100644 index 0000000..5bb7ded --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi @@ -0,0 +1,18 @@ +from typing import Any + +fastbinary: Any + +class ResultCode: + OK: Any + TRY_LATER: Any + +class LogEntry: + thrift_spec: Any + category: Any + message: Any + def __init__(self, category=..., message=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/__init__.pyi new file mode 100644 index 0000000..3bed050 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/__init__.pyi @@ -0,0 +1,96 @@ +# Stubs for six (Python 2.7) + +from __future__ import print_function + +import types +from typing import ( + Any, AnyStr, Callable, Dict, Iterable, Mapping, NoReturn, Optional, + Pattern, Text, Tuple, Type, TypeVar, Union, overload, ValuesView, KeysView, ItemsView, +) +import typing +import unittest + +# Exports +from __builtin__ import unichr as unichr +from StringIO import StringIO as StringIO, StringIO as BytesIO +from functools import wraps as wraps +from . import moves + + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + +# TODO make constant, then move this stub to 2and3 +# https://github.com/python/typeshed/issues/17 +PY2 = True +PY3 = False +PY34 = False + +string_types = (str, unicode) +integer_types = (int, long) +class_types = (type, types.ClassType) +text_type = unicode +binary_type = str + +MAXSIZE: int + +# def add_move +# def remove_move + +def advance_iterator(it: typing.Iterator[_T]) -> _T: ... +next = advance_iterator + +def callable(obj: object) -> bool: ... + +def get_unbound_function(unbound: types.MethodType) -> types.FunctionType: ... +def create_bound_method(func: types.FunctionType, obj: object) -> types.MethodType: ... +def create_unbound_method(func: types.FunctionType, cls: Union[type, types.ClassType]) -> types.MethodType: ... + +class Iterator: + def next(self) -> Any: ... + +def get_method_function(meth: types.MethodType) -> types.FunctionType: ... +def get_method_self(meth: types.MethodType) -> Optional[object]: ... +def get_function_closure(fun: types.FunctionType) -> Optional[Tuple[types._Cell, ...]]: ... +def get_function_code(fun: types.FunctionType) -> types.CodeType: ... +def get_function_defaults(fun: types.FunctionType) -> Optional[Tuple[Any, ...]]: ... +def get_function_globals(fun: types.FunctionType) -> Dict[str, Any]: ... + +def iterkeys(d: Mapping[_K, _V]) -> typing.Iterator[_K]: ... +def itervalues(d: Mapping[_K, _V]) -> typing.Iterator[_V]: ... +def iteritems(d: Mapping[_K, _V]) -> typing.Iterator[Tuple[_K, _V]]: ... +# def iterlists + +def viewkeys(d: Mapping[_K, _V]) -> KeysView[_K]: ... +def viewvalues(d: Mapping[_K, _V]) -> ValuesView[_V]: ... +def viewitems(d: Mapping[_K, _V]) -> ItemsView[_K, _V]: ... + +def b(s: str) -> binary_type: ... +def u(s: str) -> text_type: ... +int2byte = chr +def byte2int(bs: binary_type) -> int: ... +def indexbytes(buf: binary_type, i: int) -> int: ... +def iterbytes(buf: binary_type) -> typing.Iterator[int]: ... + +def assertCountEqual(self: unittest.TestCase, first: Iterable[_T], second: Iterable[_T], msg: str = ...) -> None: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, msg: str = ...) -> Any: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, callable_obj: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ... +def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: str = ...) -> None: ... + +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], + tb: Optional[types.TracebackType] = ...) -> NoReturn: ... +def exec_(_code_: Union[unicode, types.CodeType], _globs_: Dict[str, Any] = ..., _locs_: Dict[str, Any] = ...): ... +def raise_from(value: Union[BaseException, Type[BaseException]], from_value: Optional[BaseException]) -> NoReturn: ... + +print_ = print + +def with_metaclass(meta: type, *bases: type) -> type: ... +def add_metaclass(metaclass: type) -> Callable[[_T], _T]: ... +def ensure_binary(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> bytes: ... +def ensure_str(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> str: ... +def ensure_text(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> Text: ... +def python_2_unicode_compatible(klass: _T) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi new file mode 100644 index 0000000..16f7a9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi @@ -0,0 +1 @@ +from BaseHTTPServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi new file mode 100644 index 0000000..97cfe77 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi @@ -0,0 +1 @@ +from SimpleHTTPServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi new file mode 100644 index 0000000..ade0304 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi @@ -0,0 +1,66 @@ +# Stubs for six.moves +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from cStringIO import StringIO as cStringIO +from itertools import ifilter as filter +from itertools import ifilterfalse as filterfalse +from __builtin__ import raw_input as input +from __builtin__ import intern as intern +from itertools import imap as map +from os import getcwdu as getcwd +from os import getcwd as getcwdb +from __builtin__ import xrange as range +from __builtin__ import reload as reload_module +from __builtin__ import reduce as reduce +from pipes import quote as shlex_quote +from StringIO import StringIO as StringIO +from UserDict import UserDict as UserDict +from UserList import UserList as UserList +from UserString import UserString as UserString +from __builtin__ import xrange as xrange +from itertools import izip as zip +from itertools import izip_longest as zip_longest +import __builtin__ as builtins +from . import configparser +# import copy_reg as copyreg +# import gdbm as dbm_gnu +from . import _dummy_thread +from . import http_cookiejar +from . import http_cookies +from . import html_entities +from . import html_parser +from . import http_client +# import email.MIMEMultipart as email_mime_multipart +# import email.MIMENonMultipart as email_mime_nonmultipart +from . import email_mime_text +# import email.MIMEBase as email_mime_base +from . import BaseHTTPServer +# import CGIHTTPServer as CGIHTTPServer +from . import SimpleHTTPServer +from . import cPickle +from . import queue +from . import reprlib +from . import socketserver +from . import _thread +# import Tkinter as tkinter +# import Dialog as tkinter_dialog +# import FileDialog as tkinter_filedialog +# import ScrolledText as tkinter_scrolledtext +# import SimpleDialog as tkinter_simpledialog +# import Tix as tkinter_tix +# import ttk as tkinter_ttk +# import Tkconstants as tkinter_constants +# import Tkdnd as tkinter_dnd +# import tkColorChooser as tkinter_colorchooser +# import tkCommonDialog as tkinter_commondialog +# import tkFileDialog as tkinter_tkfiledialog +# import tkFont as tkinter_font +# import tkMessageBox as tkinter_messagebox +# import tkSimpleDialog as tkinter_tksimpledialog +from . import urllib_parse +from . import urllib_error +from . import urllib +from . import urllib_robotparser +from . import xmlrpc_client +# import SimpleXMLRPCServer as xmlrpc_server diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi new file mode 100644 index 0000000..3efe922 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi @@ -0,0 +1 @@ +from dummy_thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi new file mode 100644 index 0000000..b27f4c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi @@ -0,0 +1 @@ +from thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi new file mode 100644 index 0000000..ca829a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi @@ -0,0 +1 @@ +from cPickle import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi new file mode 100644 index 0000000..b2da53a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi @@ -0,0 +1 @@ +from ConfigParser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi new file mode 100644 index 0000000..4df155c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi @@ -0,0 +1 @@ +from email.mime.base import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi new file mode 100644 index 0000000..4f31241 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi @@ -0,0 +1 @@ +from email.mime.multipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi new file mode 100644 index 0000000..c15c8c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi @@ -0,0 +1 @@ +from email.mime.nonmultipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi new file mode 100644 index 0000000..214bf1e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi @@ -0,0 +1 @@ +from email.MIMEText import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi new file mode 100644 index 0000000..9e15d01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi @@ -0,0 +1 @@ +from htmlentitydefs import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi new file mode 100644 index 0000000..984cee6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi @@ -0,0 +1 @@ +from HTMLParser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi new file mode 100644 index 0000000..24ef0b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi @@ -0,0 +1 @@ +from httplib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi new file mode 100644 index 0000000..1357ad3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi @@ -0,0 +1 @@ +from cookielib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi new file mode 100644 index 0000000..5115c0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi @@ -0,0 +1 @@ +from Cookie import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi new file mode 100644 index 0000000..7ce3ccb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi @@ -0,0 +1 @@ +from Queue import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi new file mode 100644 index 0000000..40ad103 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi @@ -0,0 +1 @@ +from repr import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi new file mode 100644 index 0000000..c80a6e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi @@ -0,0 +1 @@ +from SocketServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi new file mode 100644 index 0000000..d08209c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi @@ -0,0 +1,5 @@ +import six.moves.urllib.error as error +import six.moves.urllib.parse as parse +import six.moves.urllib.request as request +import six.moves.urllib.response as response +import six.moves.urllib.robotparser as robotparser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi new file mode 100644 index 0000000..044327e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi @@ -0,0 +1,3 @@ +from urllib2 import URLError as URLError +from urllib2 import HTTPError as HTTPError +from urllib import ContentTooShortError as ContentTooShortError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi new file mode 100644 index 0000000..4096c27 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi @@ -0,0 +1,24 @@ +# Stubs for six.moves.urllib.parse +from urlparse import ParseResult as ParseResult +from urlparse import SplitResult as SplitResult +from urlparse import parse_qs as parse_qs +from urlparse import parse_qsl as parse_qsl +from urlparse import urldefrag as urldefrag +from urlparse import urljoin as urljoin +from urlparse import urlparse as urlparse +from urlparse import urlsplit as urlsplit +from urlparse import urlunparse as urlunparse +from urlparse import urlunsplit as urlunsplit +from urllib import quote as quote +from urllib import quote_plus as quote_plus +from urllib import unquote as unquote +from urllib import unquote_plus as unquote_plus +from urllib import urlencode as urlencode +from urllib import splitquery as splitquery +from urllib import splittag as splittag +from urllib import splituser as splituser +from urlparse import uses_fragment as uses_fragment +from urlparse import uses_netloc as uses_netloc +from urlparse import uses_params as uses_params +from urlparse import uses_query as uses_query +from urlparse import uses_relative as uses_relative diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi new file mode 100644 index 0000000..6aadde1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi @@ -0,0 +1,36 @@ +# Stubs for six.moves.urllib.request +from urllib2 import urlopen as urlopen +from urllib2 import install_opener as install_opener +from urllib2 import build_opener as build_opener +from urllib import pathname2url as pathname2url +from urllib import url2pathname as url2pathname +from urllib import getproxies as getproxies +from urllib2 import Request as Request +from urllib2 import OpenerDirector as OpenerDirector +from urllib2 import HTTPDefaultErrorHandler as HTTPDefaultErrorHandler +from urllib2 import HTTPRedirectHandler as HTTPRedirectHandler +from urllib2 import HTTPCookieProcessor as HTTPCookieProcessor +from urllib2 import ProxyHandler as ProxyHandler +from urllib2 import BaseHandler as BaseHandler +from urllib2 import HTTPPasswordMgr as HTTPPasswordMgr +from urllib2 import HTTPPasswordMgrWithDefaultRealm as HTTPPasswordMgrWithDefaultRealm +from urllib2 import AbstractBasicAuthHandler as AbstractBasicAuthHandler +from urllib2 import HTTPBasicAuthHandler as HTTPBasicAuthHandler +from urllib2 import ProxyBasicAuthHandler as ProxyBasicAuthHandler +from urllib2 import AbstractDigestAuthHandler as AbstractDigestAuthHandler +from urllib2 import HTTPDigestAuthHandler as HTTPDigestAuthHandler +from urllib2 import ProxyDigestAuthHandler as ProxyDigestAuthHandler +from urllib2 import HTTPHandler as HTTPHandler +from urllib2 import HTTPSHandler as HTTPSHandler +from urllib2 import FileHandler as FileHandler +from urllib2 import FTPHandler as FTPHandler +from urllib2 import CacheFTPHandler as CacheFTPHandler +from urllib2 import UnknownHandler as UnknownHandler +from urllib2 import HTTPErrorProcessor as HTTPErrorProcessor +from urllib import urlretrieve as urlretrieve +from urllib import urlcleanup as urlcleanup +from urllib import URLopener as URLopener +from urllib import FancyURLopener as FancyURLopener +from urllib import proxy_bypass as proxy_bypass +from urllib2 import parse_http_list as parse_http_list +from urllib2 import parse_keqv_list as parse_keqv_list diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi new file mode 100644 index 0000000..83e117f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi @@ -0,0 +1,5 @@ +# Stubs for six.moves.urllib.response +from urllib import addbase as addbase +from urllib import addclosehook as addclosehook +from urllib import addinfo as addinfo +from urllib import addinfourl as addinfourl diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi new file mode 100644 index 0000000..11eef50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi @@ -0,0 +1 @@ +from robotparser import RobotFileParser as RobotFileParser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi new file mode 100644 index 0000000..b560812 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi @@ -0,0 +1 @@ +from .urllib.error import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi new file mode 100644 index 0000000..bdb4d1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi @@ -0,0 +1 @@ +from .urllib.parse import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi new file mode 100644 index 0000000..dc03dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi @@ -0,0 +1 @@ +from .urllib.request import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi new file mode 100644 index 0000000..bbee522 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi @@ -0,0 +1 @@ +from .urllib.response import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi new file mode 100644 index 0000000..ddb63b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi @@ -0,0 +1 @@ +from robotparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi new file mode 100644 index 0000000..1b3bd74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi @@ -0,0 +1 @@ +from xmlrpclib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi new file mode 100644 index 0000000..91fc326 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi @@ -0,0 +1,43 @@ +from typing import Any + +futures: Any + +class ReturnValueIgnoredError(Exception): ... + +class _TracebackLogger: + exc_info: Any + formatted_tb: Any + def __init__(self, exc_info) -> None: ... + def activate(self): ... + def clear(self): ... + def __del__(self): ... + +class Future: + def __init__(self) -> None: ... + def cancel(self): ... + def cancelled(self): ... + def running(self): ... + def done(self): ... + def result(self, timeout=...): ... + def exception(self, timeout=...): ... + def add_done_callback(self, fn): ... + def set_result(self, result): ... + def set_exception(self, exception): ... + def exc_info(self): ... + def set_exc_info(self, exc_info): ... + def __del__(self): ... + +TracebackFuture: Any +FUTURES: Any + +def is_future(x): ... + +class DummyExecutor: + def submit(self, fn, *args, **kwargs): ... + def shutdown(self, wait=...): ... + +dummy_executor: Any + +def run_on_executor(*args, **kwargs): ... +def return_future(f): ... +def chain_future(a, b): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi new file mode 100644 index 0000000..ee3954b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi @@ -0,0 +1,109 @@ +from typing import Any +from collections import namedtuple + +singledispatch: Any + +class KeyReuseError(Exception): ... +class UnknownKeyError(Exception): ... +class LeakedCallbackError(Exception): ... +class BadYieldError(Exception): ... +class ReturnValueIgnoredError(Exception): ... +class TimeoutError(Exception): ... + +def engine(func): ... +def coroutine(func, replace_callback=...): ... + +class Return(Exception): + value: Any + def __init__(self, value=...) -> None: ... + +class WaitIterator: + current_index: Any + def __init__(self, *args, **kwargs) -> None: ... + def done(self): ... + def next(self): ... + +class YieldPoint: + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Callback(YieldPoint): + key: Any + def __init__(self, key) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Wait(YieldPoint): + key: Any + def __init__(self, key) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class WaitAll(YieldPoint): + keys: Any + def __init__(self, keys) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +def Task(func, *args, **kwargs): ... + +class YieldFuture(YieldPoint): + future: Any + io_loop: Any + def __init__(self, future, io_loop=...) -> None: ... + runner: Any + key: Any + result_fn: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Multi(YieldPoint): + keys: Any + children: Any + unfinished_children: Any + quiet_exceptions: Any + def __init__(self, children, quiet_exceptions=...) -> None: ... + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +def multi_future(children, quiet_exceptions=...): ... +def maybe_future(x): ... +def with_timeout(timeout, future, io_loop=..., quiet_exceptions=...): ... +def sleep(duration): ... + +moment: Any + +class Runner: + gen: Any + result_future: Any + future: Any + yield_point: Any + pending_callbacks: Any + results: Any + running: Any + finished: Any + had_exception: Any + io_loop: Any + stack_context_deactivate: Any + def __init__(self, gen, result_future, first_yielded) -> None: ... + def register_callback(self, key): ... + def is_ready(self, key): ... + def set_result(self, key, result): ... + def pop_result(self, key): ... + def run(self): ... + def handle_yield(self, yielded): ... + def result_callback(self, key): ... + def handle_exception(self, typ, value, tb): ... + +Arguments = namedtuple('Arguments', ['args', 'kwargs']) + +def convert_yielded(yielded): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi new file mode 100644 index 0000000..f107093 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi @@ -0,0 +1,96 @@ +from typing import Any +from tornado.util import Configurable + +class HTTPClient: + def __init__(self, async_client_class=..., **kwargs) -> None: ... + def __del__(self): ... + def close(self): ... + def fetch(self, request, **kwargs): ... + +class AsyncHTTPClient(Configurable): + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def __new__(cls, io_loop=..., force_instance=..., **kwargs): ... + io_loop: Any + defaults: Any + def initialize(self, io_loop, defaults=...): ... + def close(self): ... + def fetch(self, request, callback=..., raise_error=..., **kwargs): ... + def fetch_impl(self, request, callback): ... + @classmethod + def configure(cls, impl, **kwargs): ... + +class HTTPRequest: + proxy_host: Any + proxy_port: Any + proxy_username: Any + proxy_password: Any + url: Any + method: Any + body_producer: Any + auth_username: Any + auth_password: Any + auth_mode: Any + connect_timeout: Any + request_timeout: Any + follow_redirects: Any + max_redirects: Any + user_agent: Any + decompress_response: Any + network_interface: Any + streaming_callback: Any + header_callback: Any + prepare_curl_callback: Any + allow_nonstandard_methods: Any + validate_cert: Any + ca_certs: Any + allow_ipv6: Any + client_key: Any + client_cert: Any + ssl_options: Any + expect_100_continue: Any + start_time: Any + def __init__(self, url, method=..., headers=..., body=..., auth_username=..., auth_password=..., auth_mode=..., + connect_timeout=..., request_timeout=..., if_modified_since=..., follow_redirects=..., max_redirects=..., + user_agent=..., use_gzip=..., network_interface=..., streaming_callback=..., header_callback=..., + prepare_curl_callback=..., proxy_host=..., proxy_port=..., proxy_username=..., proxy_password=..., + allow_nonstandard_methods=..., validate_cert=..., ca_certs=..., allow_ipv6=..., client_key=..., client_cert=..., + body_producer=..., expect_100_continue=..., decompress_response=..., ssl_options=...) -> None: ... + @property + def headers(self): ... + @headers.setter + def headers(self, value): ... + @property + def body(self): ... + @body.setter + def body(self, value): ... + +class HTTPResponse: + request: Any + code: Any + reason: Any + headers: Any + buffer: Any + effective_url: Any + error: Any + request_time: Any + time_info: Any + def __init__(self, request, code, headers=..., buffer=..., effective_url=..., error=..., request_time=..., time_info=..., + reason=...) -> None: ... + body: Any + def rethrow(self): ... + +class HTTPError(Exception): + code: Any + response: Any + def __init__(self, code, message=..., response=...) -> None: ... + +class _RequestProxy: + request: Any + defaults: Any + def __init__(self, request, defaults) -> None: ... + def __getattr__(self, name): ... + +def main(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi new file mode 100644 index 0000000..9bcf99a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi @@ -0,0 +1,43 @@ +from typing import Any +from tornado import httputil +from tornado.tcpserver import TCPServer +from tornado.util import Configurable + +class HTTPServer(TCPServer, Configurable, httputil.HTTPServerConnectionDelegate): + def __init__(self, *args, **kwargs) -> None: ... + request_callback: Any + no_keep_alive: Any + xheaders: Any + protocol: Any + conn_params: Any + def initialize(self, request_callback, no_keep_alive=..., io_loop=..., xheaders=..., ssl_options=..., protocol=..., + decompress_request=..., chunk_size=..., max_header_size=..., idle_connection_timeout=..., body_timeout=..., + max_body_size=..., max_buffer_size=...): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def close_all_connections(self): ... + def handle_stream(self, stream, address): ... + def start_request(self, server_conn, request_conn): ... + def on_close(self, server_conn): ... + +class _HTTPRequestContext: + address: Any + protocol: Any + address_family: Any + remote_ip: Any + def __init__(self, stream, address, protocol) -> None: ... + +class _ServerRequestAdapter(httputil.HTTPMessageDelegate): + server: Any + connection: Any + request: Any + delegate: Any + def __init__(self, server, server_conn, request_conn) -> None: ... + def headers_received(self, start_line, headers): ... + def data_received(self, chunk): ... + def finish(self): ... + def on_connection_close(self): ... + +HTTPRequest: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi new file mode 100644 index 0000000..bfc81fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi @@ -0,0 +1,90 @@ +from typing import Any +from tornado.util import ObjectDict +from collections import namedtuple + +class SSLError(Exception): ... + +class _NormalizedHeaderCache(dict): + size: Any + queue: Any + def __init__(self, size) -> None: ... + def __missing__(self, key): ... + +class HTTPHeaders(dict): + def __init__(self, *args, **kwargs) -> None: ... + def add(self, name, value): ... + def get_list(self, name): ... + def get_all(self): ... + def parse_line(self, line): ... + @classmethod + def parse(cls, headers): ... + def __setitem__(self, name, value): ... + def __getitem__(self, name): ... + def __delitem__(self, name): ... + def __contains__(self, name): ... + def get(self, name, default=...): ... + def update(self, *args, **kwargs): ... + def copy(self): ... + __copy__: Any + def __deepcopy__(self, memo_dict): ... + +class HTTPServerRequest: + method: Any + uri: Any + version: Any + headers: Any + body: Any + remote_ip: Any + protocol: Any + host: Any + files: Any + connection: Any + arguments: Any + query_arguments: Any + body_arguments: Any + def __init__(self, method=..., uri=..., version=..., headers=..., body=..., host=..., files=..., connection=..., + start_line=...) -> None: ... + def supports_http_1_1(self): ... + @property + def cookies(self): ... + def write(self, chunk, callback=...): ... + def finish(self): ... + def full_url(self): ... + def request_time(self): ... + def get_ssl_certificate(self, binary_form=...): ... + +class HTTPInputError(Exception): ... +class HTTPOutputError(Exception): ... + +class HTTPServerConnectionDelegate: + def start_request(self, server_conn, request_conn): ... + def on_close(self, server_conn): ... + +class HTTPMessageDelegate: + def headers_received(self, start_line, headers): ... + def data_received(self, chunk): ... + def finish(self): ... + def on_connection_close(self): ... + +class HTTPConnection: + def write_headers(self, start_line, headers, chunk=..., callback=...): ... + def write(self, chunk, callback=...): ... + def finish(self): ... + +def url_concat(url, args): ... + +class HTTPFile(ObjectDict): ... + +def parse_body_arguments(content_type, body, arguments, files, headers=...): ... +def parse_multipart_form_data(boundary, data, arguments, files): ... +def format_timestamp(ts): ... + +RequestStartLine = namedtuple('RequestStartLine', ['method', 'path', 'version']) + +def parse_request_start_line(line): ... + +ResponseStartLine = namedtuple('ResponseStartLine', ['version', 'code', 'reason']) + +def parse_response_start_line(line): ... +def doctests(): ... +def split_host_and_port(netloc): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi new file mode 100644 index 0000000..92c3548 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi @@ -0,0 +1,84 @@ +from typing import Any +from tornado.util import Configurable + +signal: Any + +class TimeoutError(Exception): ... + +class IOLoop(Configurable): + NONE: Any + READ: Any + WRITE: Any + ERROR: Any + @staticmethod + def instance(): ... + @staticmethod + def initialized(): ... + def install(self): ... + @staticmethod + def clear_instance(): ... + @staticmethod + def current(instance=...): ... + def make_current(self): ... + @staticmethod + def clear_current(): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def initialize(self, make_current=...): ... + def close(self, all_fds=...): ... + def add_handler(self, fd, handler, events): ... + def update_handler(self, fd, events): ... + def remove_handler(self, fd): ... + def set_blocking_signal_threshold(self, seconds, action): ... + def set_blocking_log_threshold(self, seconds): ... + def log_stack(self, signal, frame): ... + def start(self): ... + def stop(self): ... + def run_sync(self, func, timeout=...): ... + def time(self): ... + def add_timeout(self, deadline, callback, *args, **kwargs): ... + def call_later(self, delay, callback, *args, **kwargs): ... + def call_at(self, when, callback, *args, **kwargs): ... + def remove_timeout(self, timeout): ... + def add_callback(self, callback, *args, **kwargs): ... + def add_callback_from_signal(self, callback, *args, **kwargs): ... + def spawn_callback(self, callback, *args, **kwargs): ... + def add_future(self, future, callback): ... + def handle_callback_exception(self, callback): ... + def split_fd(self, fd): ... + def close_fd(self, fd): ... + +class PollIOLoop(IOLoop): + time_func: Any + def initialize(self, impl, time_func=..., **kwargs): ... + def close(self, all_fds=...): ... + def add_handler(self, fd, handler, events): ... + def update_handler(self, fd, events): ... + def remove_handler(self, fd): ... + def set_blocking_signal_threshold(self, seconds, action): ... + def start(self): ... + def stop(self): ... + def time(self): ... + def call_at(self, deadline, callback, *args, **kwargs): ... + def remove_timeout(self, timeout): ... + def add_callback(self, callback, *args, **kwargs): ... + def add_callback_from_signal(self, callback, *args, **kwargs): ... + +class _Timeout: + deadline: Any + callback: Any + tiebreaker: Any + def __init__(self, deadline, callback, io_loop) -> None: ... + def __lt__(self, other): ... + def __le__(self, other): ... + +class PeriodicCallback: + callback: Any + callback_time: Any + io_loop: Any + def __init__(self, callback, callback_time, io_loop=...) -> None: ... + def start(self): ... + def stop(self): ... + def is_running(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi new file mode 100644 index 0000000..723e991 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional + +class _TimeoutGarbageCollector: + def __init__(self): ... + +class Condition(_TimeoutGarbageCollector): + io_loop: Any + def __init__(self): ... + def wait(self, timeout: Optional[Any] = ...): ... + def notify(self, n: int = ...): ... + def notify_all(self): ... + +class Event: + def __init__(self): ... + def is_set(self): ... + def set(self): ... + def clear(self): ... + def wait(self, timeout: Optional[Any] = ...): ... + +class _ReleasingContextManager: + def __init__(self, obj): ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + +class Semaphore(_TimeoutGarbageCollector): + def __init__(self, value: int = ...): ... + def release(self): ... + def acquire(self, timeout: Optional[Any] = ...): ... + def __enter__(self): ... + __exit__: Any + def __aenter__(self): ... + def __aexit__(self, typ, value, tb): ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ...): ... + def release(self): ... + +class Lock: + def __init__(self): ... + def acquire(self, timeout: Optional[Any] = ...): ... + def release(self): ... + def __enter__(self): ... + __exit__: Any + def __aenter__(self): ... + def __aexit__(self, typ, value, tb): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi new file mode 100644 index 0000000..53c8fc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi @@ -0,0 +1,45 @@ +from typing import Any +from tornado.util import Configurable + +ssl: Any +certifi: Any +xrange: Any +ssl_match_hostname: Any +SSLCertificateError: Any + +def bind_sockets(port, address=..., family=..., backlog=..., flags=...): ... +def bind_unix_socket(file, mode=..., backlog=...): ... +def add_accept_handler(sock, callback, io_loop=...): ... +def is_valid_ip(ip): ... + +class Resolver(Configurable): + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def resolve(self, host, port, family=..., callback=...): ... + def close(self): ... + +class ExecutorResolver(Resolver): + io_loop: Any + executor: Any + close_executor: Any + def initialize(self, io_loop=..., executor=..., close_executor=...): ... + def close(self): ... + def resolve(self, host, port, family=...): ... + +class BlockingResolver(ExecutorResolver): + def initialize(self, io_loop=...): ... + +class ThreadedResolver(ExecutorResolver): + def initialize(self, io_loop=..., num_threads=...): ... + +class OverrideResolver(Resolver): + resolver: Any + mapping: Any + def initialize(self, resolver, mapping): ... + def close(self): ... + def resolve(self, host, port, *args, **kwargs): ... + +def ssl_options_to_context(ssl_options): ... +def ssl_wrap_socket(socket, ssl_options, server_hostname=..., **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/process.pyi new file mode 100644 index 0000000..c467454 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/process.pyi @@ -0,0 +1,24 @@ +from typing import Any, Optional + +long = int +CalledProcessError: Any + +def cpu_count() -> int: ... +def fork_processes(num_processes, max_restarts: int = ...) -> Optional[int]: ... +def task_id() -> int: ... + +class Subprocess: + STREAM: Any = ... + io_loop: Any = ... + stdin: Any = ... + stdout: Any = ... + stderr: Any = ... + proc: Any = ... + returncode: Any = ... + def __init__(self, *args, **kwargs) -> None: ... + def set_exit_callback(self, callback): ... + def wait_for_exit(self, raise_error: bool = ...): ... + @classmethod + def initialize(cls, io_loop: Optional[Any] = ...): ... + @classmethod + def uninitialize(cls): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi new file mode 100644 index 0000000..28fe6a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi @@ -0,0 +1,17 @@ +from typing import Any + +ssl: Any + +class TCPServer: + io_loop: Any + ssl_options: Any + max_buffer_size: Any + read_chunk_size: Any + def __init__(self, io_loop=..., ssl_options=..., max_buffer_size=..., read_chunk_size=...) -> None: ... + def listen(self, port, address=...): ... + def add_sockets(self, sockets): ... + def add_socket(self, socket): ... + def bind(self, port, address=..., family=..., backlog=...): ... + def start(self, num_processes=...): ... + def stop(self): ... + def handle_stream(self, stream, address): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi new file mode 100644 index 0000000..25fd0e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi @@ -0,0 +1,60 @@ +from typing import Any, Optional +import unittest +import logging + +AsyncHTTPClient: Any +gen: Any +HTTPServer: Any +IOLoop: Any +netutil: Any +SimpleAsyncHTTPClient: Any + +def get_unused_port(): ... +def bind_unused_port(): ... + +class AsyncTestCase(unittest.TestCase): + def __init__(self, *args, **kwargs): ... + io_loop: Any + def setUp(self): ... + def tearDown(self): ... + def get_new_ioloop(self): ... + def run(self, result: Optional[Any] = ...): ... + def stop(self, _arg: Optional[Any] = ..., **kwargs): ... + def wait(self, condition: Optional[Any] = ..., timeout: float = ...): ... + +class AsyncHTTPTestCase(AsyncTestCase): + http_client: Any + http_server: Any + def setUp(self): ... + def get_http_client(self): ... + def get_http_server(self): ... + def get_app(self): ... + def fetch(self, path, **kwargs): ... + def get_httpserver_options(self): ... + def get_http_port(self): ... + def get_protocol(self): ... + def get_url(self, path): ... + def tearDown(self): ... + +class AsyncHTTPSTestCase(AsyncHTTPTestCase): + def get_http_client(self): ... + def get_httpserver_options(self): ... + def get_ssl_options(self): ... + def get_protocol(self): ... + +def gen_test(f): ... + +class LogTrapTestCase(unittest.TestCase): + def run(self, result: Optional[Any] = ...): ... + +class ExpectLog(logging.Filter): + logger: Any + regex: Any + required: Any + matched: Any + def __init__(self, logger, regex, required: bool = ...): ... + def filter(self, record): ... + def __enter__(self): ... + def __exit__(self, typ, value, tb): ... + +def main(**kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/util.pyi new file mode 100644 index 0000000..1f6e0d2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/util.pyi @@ -0,0 +1,46 @@ +from typing import Any + +xrange: Any + +class ObjectDict(dict): + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + +class GzipDecompressor: + decompressobj: Any + def __init__(self) -> None: ... + def decompress(self, value, max_length=...): ... + @property + def unconsumed_tail(self): ... + def flush(self): ... + +unicode_type: Any +basestring_type: Any + +def import_object(name): ... + +bytes_type: Any + +def errno_from_exception(e): ... + +class Configurable: + def __new__(cls, *args, **kwargs): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def initialize(self): ... + @classmethod + def configure(cls, impl, **kwargs): ... + @classmethod + def configured_class(cls): ... + +class ArgReplacer: + name: Any + arg_pos: Any + def __init__(self, func, name) -> None: ... + def get_old_value(self, args, kwargs, default=...): ... + def replace(self, new_value, args, kwargs): ... + +def timedelta_to_seconds(td): ... +def doctests(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/web.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/web.pyi new file mode 100644 index 0000000..c63f414 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2/tornado/web.pyi @@ -0,0 +1,257 @@ +from typing import Any +from tornado import httputil + +MIN_SUPPORTED_SIGNED_VALUE_VERSION: Any +MAX_SUPPORTED_SIGNED_VALUE_VERSION: Any +DEFAULT_SIGNED_VALUE_VERSION: Any +DEFAULT_SIGNED_VALUE_MIN_VERSION: Any + +class RequestHandler: + SUPPORTED_METHODS: Any + application: Any + request: Any + path_args: Any + path_kwargs: Any + ui: Any + def __init__(self, application, request, **kwargs) -> None: ... + def initialize(self): ... + @property + def settings(self): ... + def head(self, *args, **kwargs): ... + def get(self, *args, **kwargs): ... + def post(self, *args, **kwargs): ... + def delete(self, *args, **kwargs): ... + def patch(self, *args, **kwargs): ... + def put(self, *args, **kwargs): ... + def options(self, *args, **kwargs): ... + def prepare(self): ... + def on_finish(self): ... + def on_connection_close(self): ... + def clear(self): ... + def set_default_headers(self): ... + def set_status(self, status_code, reason=...): ... + def get_status(self): ... + def set_header(self, name, value): ... + def add_header(self, name, value): ... + def clear_header(self, name): ... + def get_argument(self, name, default=..., strip=...): ... + def get_arguments(self, name, strip=...): ... + def get_body_argument(self, name, default=..., strip=...): ... + def get_body_arguments(self, name, strip=...): ... + def get_query_argument(self, name, default=..., strip=...): ... + def get_query_arguments(self, name, strip=...): ... + def decode_argument(self, value, name=...): ... + @property + def cookies(self): ... + def get_cookie(self, name, default=...): ... + def set_cookie(self, name, value, domain=..., expires=..., path=..., expires_days=..., **kwargs): ... + def clear_cookie(self, name, path=..., domain=...): ... + def clear_all_cookies(self, path=..., domain=...): ... + def set_secure_cookie(self, name, value, expires_days=..., version=..., **kwargs): ... + def create_signed_value(self, name, value, version=...): ... + def get_secure_cookie(self, name, value=..., max_age_days=..., min_version=...): ... + def get_secure_cookie_key_version(self, name, value=...): ... + def redirect(self, url, permanent=..., status=...): ... + def write(self, chunk): ... + def render(self, template_name, **kwargs): ... + def render_string(self, template_name, **kwargs): ... + def get_template_namespace(self): ... + def create_template_loader(self, template_path): ... + def flush(self, include_footers=..., callback=...): ... + def finish(self, chunk=...): ... + def send_error(self, status_code=..., **kwargs): ... + def write_error(self, status_code, **kwargs): ... + @property + def locale(self): ... + @locale.setter + def locale(self, value): ... + def get_user_locale(self): ... + def get_browser_locale(self, default=...): ... + @property + def current_user(self): ... + @current_user.setter + def current_user(self, value): ... + def get_current_user(self): ... + def get_login_url(self): ... + def get_template_path(self): ... + @property + def xsrf_token(self): ... + def check_xsrf_cookie(self): ... + def xsrf_form_html(self): ... + def static_url(self, path, include_host=..., **kwargs): ... + def require_setting(self, name, feature=...): ... + def reverse_url(self, name, *args): ... + def compute_etag(self): ... + def set_etag_header(self): ... + def check_etag_header(self): ... + def data_received(self, chunk): ... + def log_exception(self, typ, value, tb): ... + +def asynchronous(method): ... +def stream_request_body(cls): ... +def removeslash(method): ... +def addslash(method): ... + +class Application(httputil.HTTPServerConnectionDelegate): + transforms: Any + handlers: Any + named_handlers: Any + default_host: Any + settings: Any + ui_modules: Any + ui_methods: Any + def __init__(self, handlers=..., default_host=..., transforms=..., **settings) -> None: ... + def listen(self, port, address=..., **kwargs): ... + def add_handlers(self, host_pattern, host_handlers): ... + def add_transform(self, transform_class): ... + def start_request(self, server_conn, request_conn): ... + def __call__(self, request): ... + def reverse_url(self, name, *args): ... + def log_request(self, handler): ... + +class _RequestDispatcher(httputil.HTTPMessageDelegate): + application: Any + connection: Any + request: Any + chunks: Any + handler_class: Any + handler_kwargs: Any + path_args: Any + path_kwargs: Any + def __init__(self, application, connection) -> None: ... + def headers_received(self, start_line, headers): ... + stream_request_body: Any + def set_request(self, request): ... + def data_received(self, data): ... + def finish(self): ... + def on_connection_close(self): ... + handler: Any + def execute(self): ... + +class HTTPError(Exception): + status_code: Any + log_message: Any + args: Any + reason: Any + def __init__(self, status_code, log_message=..., *args, **kwargs) -> None: ... + +class Finish(Exception): ... + +class MissingArgumentError(HTTPError): + arg_name: Any + def __init__(self, arg_name) -> None: ... + +class ErrorHandler(RequestHandler): + def initialize(self, status_code): ... + def prepare(self): ... + def check_xsrf_cookie(self): ... + +class RedirectHandler(RequestHandler): + def initialize(self, url, permanent=...): ... + def get(self): ... + +class StaticFileHandler(RequestHandler): + CACHE_MAX_AGE: Any + root: Any + default_filename: Any + def initialize(self, path, default_filename=...): ... + @classmethod + def reset(cls): ... + def head(self, path): ... + path: Any + absolute_path: Any + modified: Any + def get(self, path, include_body=...): ... + def compute_etag(self): ... + def set_headers(self): ... + def should_return_304(self): ... + @classmethod + def get_absolute_path(cls, root, path): ... + def validate_absolute_path(self, root, absolute_path): ... + @classmethod + def get_content(cls, abspath, start=..., end=...): ... + @classmethod + def get_content_version(cls, abspath): ... + def get_content_size(self): ... + def get_modified_time(self): ... + def get_content_type(self): ... + def set_extra_headers(self, path): ... + def get_cache_time(self, path, modified, mime_type): ... + @classmethod + def make_static_url(cls, settings, path, include_version=...): ... + def parse_url_path(self, url_path): ... + @classmethod + def get_version(cls, settings, path): ... + +class FallbackHandler(RequestHandler): + fallback: Any + def initialize(self, fallback): ... + def prepare(self): ... + +class OutputTransform: + def __init__(self, request) -> None: ... + def transform_first_chunk(self, status_code, headers, chunk, finishing): ... + def transform_chunk(self, chunk, finishing): ... + +class GZipContentEncoding(OutputTransform): + CONTENT_TYPES: Any + MIN_LENGTH: Any + def __init__(self, request) -> None: ... + def transform_first_chunk(self, status_code, headers, chunk, finishing): ... + def transform_chunk(self, chunk, finishing): ... + +def authenticated(method): ... + +class UIModule: + handler: Any + request: Any + ui: Any + locale: Any + def __init__(self, handler) -> None: ... + @property + def current_user(self): ... + def render(self, *args, **kwargs): ... + def embedded_javascript(self): ... + def javascript_files(self): ... + def embedded_css(self): ... + def css_files(self): ... + def html_head(self): ... + def html_body(self): ... + def render_string(self, path, **kwargs): ... + +class _linkify(UIModule): + def render(self, text, **kwargs): ... + +class _xsrf_form_html(UIModule): + def render(self): ... + +class TemplateModule(UIModule): + def __init__(self, handler) -> None: ... + def render(self, path, **kwargs): ... + def embedded_javascript(self): ... + def javascript_files(self): ... + def embedded_css(self): ... + def css_files(self): ... + def html_head(self): ... + def html_body(self): ... + +class _UIModuleNamespace: + handler: Any + ui_modules: Any + def __init__(self, handler, ui_modules) -> None: ... + def __getitem__(self, key): ... + def __getattr__(self, key): ... + +class URLSpec: + regex: Any + handler_class: Any + kwargs: Any + name: Any + def __init__(self, pattern, handler, kwargs=..., name=...) -> None: ... + def reverse(self, *args): ... + +url: Any + +def create_signed_value(secret, name, value, version=..., clock=..., key_version=...): ... +def decode_signed_value(secret, name, value, max_age_days=..., clock=..., min_version=...): ... +def get_signature_key_version(value): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi new file mode 100644 index 0000000..144ccfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class AESCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> AESCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi new file mode 100644 index 0000000..24a12ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class RC2Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> RC2Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi new file mode 100644 index 0000000..109e2bf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi @@ -0,0 +1,15 @@ +from typing import Any, Union, Text + +__revision__: str + +class ARC4Cipher: + block_size: int + key_size: int + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext): ... + def decrypt(self, ciphertext): ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> ARC4Cipher: ... + +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi new file mode 100644 index 0000000..e29ca6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class BlowfishCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> BlowfishCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi new file mode 100644 index 0000000..b291919 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class CAST128Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> CAST128Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi new file mode 100644 index 0000000..30a40dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class DESCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> DESCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi new file mode 100644 index 0000000..59ccd8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi @@ -0,0 +1,20 @@ +from typing import Any, Union, Text + +from .blockalgo import BlockAlgo + +__revision__: str + +class DES3Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> DES3Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi new file mode 100644 index 0000000..50980a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional, Union, Text + +from Crypto.PublicKey.RSA import _RSAobj + +class PKCS1OAEP_Cipher: + def __init__(self, key: _RSAobj, hashAlgo: Any, mgfunc: Any, label: Any) -> None: ... + def can_encrypt(self): ... + def can_decrypt(self): ... + def encrypt(self, message: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ct: bytes) -> bytes: ... + + +def new(key: _RSAobj, hashAlgo: Optional[Any] = ..., mgfunc: Optional[Any] = ..., label: Any = ...) -> PKCS1OAEP_Cipher: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi new file mode 100644 index 0000000..c2b9ea1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi @@ -0,0 +1,13 @@ +from typing import Any, Union, Text + +from Crypto.PublicKey.RSA import _RSAobj + +class PKCS115_Cipher: + def __init__(self, key: _RSAobj) -> None: ... + def can_encrypt(self) -> bool: ... + def can_decrypt(self) -> bool: ... + rf: Any + def encrypt(self, message: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ct: bytes, sentinel: Any) -> bytes: ... + +def new(key: _RSAobj) -> PKCS115_Cipher: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi new file mode 100644 index 0000000..4c952c2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi @@ -0,0 +1,16 @@ +from typing import Any, Union, Text + +__revision__: str + +class XORCipher: + block_size: int + key_size: int + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ciphertext: bytes) -> bytes: ... + + +def new(key: Union[bytes, Text], *args, **kwargs) -> XORCipher: ... + +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi new file mode 100644 index 0000000..309f274 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi @@ -0,0 +1,11 @@ +# Names in __all__ with no definition: +# AES +# ARC2 +# ARC4 +# Blowfish +# CAST +# DES +# DES3 +# PKCS1_OAEP +# PKCS1_v1_5 +# XOR diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi new file mode 100644 index 0000000..8286b7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi @@ -0,0 +1,17 @@ +from typing import Any, Union, Text + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int + +class BlockAlgo: + mode: int + block_size: int + IV: Any + def __init__(self, factory: Any, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ciphertext: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi new file mode 100644 index 0000000..5e2337d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +digest_size: Any + +class HMAC: + digest_size: Any + digestmod: Any + outer: Any + inner: Any + def __init__(self, key, msg: Optional[Any] = ..., digestmod: Optional[Any] = ...) -> None: ... + def update(self, msg): ... + def copy(self): ... + def digest(self): ... + def hexdigest(self): ... + +def new(key, msg: Optional[Any] = ..., digestmod: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi new file mode 100644 index 0000000..1575b11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD2Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi new file mode 100644 index 0000000..644b3bd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD4Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi new file mode 100644 index 0000000..52261ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD5Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi new file mode 100644 index 0000000..3fe4ac5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class RIPEMD160Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi new file mode 100644 index 0000000..145abd8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA1Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi new file mode 100644 index 0000000..fcd170f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA224Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi new file mode 100644 index 0000000..2ee9472 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA256Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi new file mode 100644 index 0000000..ce63a32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA384Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi new file mode 100644 index 0000000..c59eb76 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA512Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi new file mode 100644 index 0000000..9af06f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi @@ -0,0 +1,11 @@ +# Names in __all__ with no definition: +# HMAC +# MD2 +# MD4 +# MD5 +# RIPEMD +# SHA +# SHA224 +# SHA256 +# SHA384 +# SHA512 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi new file mode 100644 index 0000000..7c57e03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi @@ -0,0 +1,11 @@ +from typing import Any, Optional + +class HashAlgo: + digest_size: Any + block_size: Any + def __init__(self, hashFactory, data: Optional[Any] = ...) -> None: ... + def update(self, data): ... + def digest(self): ... + def hexdigest(self): ... + def copy(self): ... + def new(self, data: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi new file mode 100644 index 0000000..a7ae7d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +__revision__: str + +def isInt(x): ... + +class AllOrNothing: + def __init__(self, ciphermodule, mode: Optional[Any] = ..., IV: Optional[Any] = ...) -> None: ... + def digest(self, text): ... + def undigest(self, blocks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi new file mode 100644 index 0000000..d70e9f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi @@ -0,0 +1,5 @@ +__revision__: str + +class Chaff: + def __init__(self, factor: float = ..., blocksper: int = ...) -> None: ... + def chaff(self, blocks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi new file mode 100644 index 0000000..a10d839 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi @@ -0,0 +1,7 @@ +from typing import Any, Optional +from Crypto.Hash import SHA as SHA1 + +__revision__: str + +def PBKDF1(password, salt, dkLen, count: int = ..., hashAlgo: Optional[Any] = ...): ... +def PBKDF2(password, salt, dkLen: int = ..., count: int = ..., prf: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi new file mode 100644 index 0000000..e3744e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi @@ -0,0 +1,4 @@ +# Names in __all__ with no definition: +# AllOrNothing +# Chaffing +# KDF diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi new file mode 100644 index 0000000..bc48d23 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi @@ -0,0 +1,27 @@ +from typing import Any, Optional +from .pubkey import pubkey + +class _DSAobj(pubkey): + keydata: Any + implementation: Any + key: Any + def __init__(self, implementation, key) -> None: ... + def __getattr__(self, attrname): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def has_private(self): ... + def size(self): ... + def can_blind(self): ... + def can_encrypt(self): ... + def can_sign(self): ... + def publickey(self): ... + +class DSAImplementation: + error: Any + def __init__(self, **kwargs) -> None: ... + def generate(self, bits, randfunc: Optional[Any] = ..., progress_func: Optional[Any] = ...): ... + def construct(self, tup): ... + +generate: Any +construct: Any +error: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi new file mode 100644 index 0000000..1a256a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +from Crypto.PublicKey.pubkey import pubkey +from Crypto.PublicKey.pubkey import * # noqa: F403 + +class error(Exception): ... + +def generate(bits, randfunc, progress_func: Optional[Any] = ...): ... +def construct(tup): ... + +class ElGamalobj(pubkey): + keydata: Any + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def size(self): ... + def has_private(self): ... + def publickey(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi new file mode 100644 index 0000000..5ce7b91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi @@ -0,0 +1,32 @@ +from typing import Any, Optional, Union, Text +from .pubkey import pubkey + +class _RSAobj(pubkey): + keydata: Any + implementation: Any + key: Any + def __init__(self, implementation, key, randfunc: Optional[Any] = ...) -> None: ... + def __getattr__(self, attrname): ... + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def has_private(self): ... + def size(self): ... + def can_blind(self): ... + def can_encrypt(self): ... + def can_sign(self): ... + def publickey(self): ... + def exportKey(self, format: str = ..., passphrase: Optional[Any] = ..., pkcs: int = ...): ... + +class RSAImplementation: + error: Any + def __init__(self, **kwargs) -> None: ... + def generate(self, bits, randfunc: Optional[Any] = ..., progress_func: Optional[Any] = ..., e: int = ...): ... + def construct(self, tup): ... + def importKey(self, externKey: Any, passphrase: Union[None, bytes, Text] = ...) -> _RSAobj: ... + +generate: Any +construct: Any +importKey: Any +error: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi new file mode 100644 index 0000000..36d9e94 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi @@ -0,0 +1,4 @@ +# Names in __all__ with no definition: +# DSA +# ElGamal +# RSA diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi new file mode 100644 index 0000000..b9281ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi @@ -0,0 +1,21 @@ +from Crypto.Util.number import * # noqa: F403 + +__revision__: str + +class pubkey: + def __init__(self) -> None: ... + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def validate(self, M, signature): ... + def blind(self, M, B): ... + def unblind(self, M, B): ... + def can_sign(self): ... + def can_encrypt(self): ... + def can_blind(self): ... + def size(self): ... + def has_private(self): ... + def publickey(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi new file mode 100644 index 0000000..40149bf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi @@ -0,0 +1,25 @@ +from typing import Any + +__revision__: str + +class FortunaPool: + digest_size: Any + def __init__(self) -> None: ... + def append(self, data): ... + def digest(self): ... + def hexdigest(self): ... + length: int + def reset(self): ... + +def which_pools(r): ... + +class FortunaAccumulator: + min_pool_size: int + reseed_interval: float + reseed_count: int + generator: Any + last_reseed: Any + pools: Any + def __init__(self) -> None: ... + def random_data(self, bytes): ... + def add_random_event(self, source_number, pool_number, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi new file mode 100644 index 0000000..047ac93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi @@ -0,0 +1,16 @@ +from typing import Any + +__revision__: str + +class AESGenerator: + block_size: Any + key_size: int + max_blocks_per_request: Any + counter: Any + key: Any + block_size_shift: Any + blocks_per_key: Any + max_bytes_per_request: Any + def __init__(self) -> None: ... + def reseed(self, seed): ... + def pseudo_random_data(self, bytes): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi new file mode 100644 index 0000000..1fbd51f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional + +class _SHAd256: + digest_size: Any + def __init__(self, internal_api_check, sha256_hash_obj) -> None: ... + def copy(self): ... + def digest(self): ... + def hexdigest(self): ... + def update(self, data): ... + +digest_size: Any + +def new(data: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi new file mode 100644 index 0000000..d1f1427 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi @@ -0,0 +1 @@ +__revision__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi new file mode 100644 index 0000000..72df987 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi @@ -0,0 +1,5 @@ +from .rng_base import BaseRNG + +class PythonOSURandomRNG(BaseRNG): + name: str + def __init__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi new file mode 100644 index 0000000..bbaf740 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi @@ -0,0 +1,6 @@ +from typing import Any, Optional +from .rng_base import BaseRNG + +class DevURandomRNG(BaseRNG): + name: str + def __init__(self, devname: Optional[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi new file mode 100644 index 0000000..12e3d81 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi @@ -0,0 +1,11 @@ +__revision__: str + +class BaseRNG: + closed: bool + def __init__(self) -> None: ... + def __del__(self): ... + def __enter__(self): ... + def __exit__(self): ... + def close(self): ... + def flush(self): ... + def read(self, N: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi new file mode 100644 index 0000000..f30acfd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi @@ -0,0 +1 @@ +def new(*args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi new file mode 100644 index 0000000..88ea62e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi @@ -0,0 +1,17 @@ +from typing import Any, Optional + +class StrongRandom: + def __init__(self, rng: Optional[Any] = ..., randfunc: Optional[Any] = ...) -> None: ... + def getrandbits(self, k): ... + def randrange(self, *args): ... + def randint(self, a, b): ... + def choice(self, seq): ... + def shuffle(self, x): ... + def sample(self, population, k): ... + +getrandbits: Any +randrange: Any +randint: Any +choice: Any +shuffle: Any +sample: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi new file mode 100644 index 0000000..8341c2b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi @@ -0,0 +1,9 @@ +from typing import Any, Optional + +class PSS_SigScheme: + def __init__(self, key, mgfunc, saltLen) -> None: ... + def can_sign(self): ... + def sign(self, mhash): ... + def verify(self, mhash, S): ... + +def new(key, mgfunc: Optional[Any] = ..., saltLen: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi new file mode 100644 index 0000000..4a2b225 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi @@ -0,0 +1,7 @@ +class PKCS115_SigScheme: + def __init__(self, key) -> None: ... + def can_sign(self): ... + def sign(self, mhash): ... + def verify(self, mhash, S): ... + +def new(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi new file mode 100644 index 0000000..560f06f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi @@ -0,0 +1,3 @@ +# Names in __all__ with no definition: +# PKCS1_PSS +# PKCS1_v1_5 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi new file mode 100644 index 0000000..4aae7f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def new(nbits, prefix: Any = ..., suffix: Any = ..., initial_value: int = ..., overflow: int = ..., little_endian: bool = ..., allow_wraparound: bool = ..., disable_shortcut: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi new file mode 100644 index 0000000..e1e8f5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi @@ -0,0 +1,9 @@ +from typing import Any + +__revision__: str +binary: Any + +def key_to_english(key): ... +def english_to_key(s): ... + +wordlist: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi new file mode 100644 index 0000000..1747299 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi @@ -0,0 +1,6 @@ +# Names in __all__ with no definition: +# RFC1751 +# asn1 +# number +# randpool +# strxor diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi new file mode 100644 index 0000000..03d4b29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional + +class DerObject: + typeTags: Any + typeTag: Any + payload: Any + def __init__(self, ASN1Type: Optional[Any] = ..., payload: Any = ...) -> None: ... + def isType(self, ASN1Type): ... + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerInteger(DerObject): + value: Any + def __init__(self, value: int = ...) -> None: ... + payload: Any + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerSequence(DerObject): + def __init__(self, startSeq: Optional[Any] = ...) -> None: ... + def __delitem__(self, n): ... + def __getitem__(self, n): ... + def __setitem__(self, key, value): ... + def __setslice__(self, i, j, sequence): ... + def __delslice__(self, i, j): ... + def __getslice__(self, i, j): ... + def __len__(self): ... + def append(self, item): ... + def hasInts(self): ... + def hasOnlyInts(self): ... + payload: Any + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerOctetString(DerObject): + payload: Any + def __init__(self, value: Any = ...) -> None: ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerNull(DerObject): + def __init__(self) -> None: ... + +class DerObjectId(DerObject): + def __init__(self) -> None: ... + def decode(self, derEle, noLeftOvers: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi new file mode 100644 index 0000000..4ffbd03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi @@ -0,0 +1,22 @@ +from typing import Any, Optional +from warnings import warn as _warn + +__revision__: str +bignum: Any + +def size(N): ... +def getRandomNumber(N, randfunc: Optional[Any] = ...): ... +def getRandomInteger(N, randfunc: Optional[Any] = ...): ... +def getRandomRange(a, b, randfunc: Optional[Any] = ...): ... +def getRandomNBitInteger(N, randfunc: Optional[Any] = ...): ... +def GCD(x, y): ... +def inverse(u, v): ... +def getPrime(N, randfunc: Optional[Any] = ...): ... +def getStrongPrime(N, e: int = ..., false_positive_prob: float = ..., randfunc: Optional[Any] = ...): ... +def isPrime(N, false_positive_prob: float = ..., randfunc: Optional[Any] = ...): ... +def long_to_bytes(n, blocksize: int = ...): ... +def bytes_to_long(s): ... +def long2str(n, blocksize: int = ...): ... +def str2long(s): ... + +sieve_base: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi new file mode 100644 index 0000000..4d90f92 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +__revision__: str + +class RandomPool: + bytes: Any + bits: Any + entropy: Any + def __init__(self, numbytes: int = ..., cipher: Optional[Any] = ..., hash: Optional[Any] = ..., file: Optional[Any] = ...) -> None: ... + def get_bytes(self, N): ... + def randomize(self, N: int = ...): ... + def stir(self, s: str = ...): ... + def stir_n(self, N: int = ...): ... + def add_event(self, s: str = ...): ... + def getBytes(self, N): ... + def addEvent(self, event, s: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi new file mode 100644 index 0000000..cb6269b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi @@ -0,0 +1,2 @@ +def strxor(*args, **kwargs): ... +def strxor_c(*args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi new file mode 100644 index 0000000..6d8e124 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi @@ -0,0 +1,7 @@ +# Names in __all__ with no definition: +# Cipher +# Hash +# Protocol +# PublicKey +# Signature +# Util diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi new file mode 100644 index 0000000..b77e975 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi @@ -0,0 +1,7 @@ +class CryptoWarning(Warning): ... +class CryptoDeprecationWarning(DeprecationWarning, CryptoWarning): ... +class CryptoRuntimeWarning(RuntimeWarning, CryptoWarning): ... +class RandomPool_DeprecationWarning(CryptoDeprecationWarning): ... +class ClockRewindWarning(CryptoRuntimeWarning): ... +class GetRandomNumber_DeprecationWarning(CryptoDeprecationWarning): ... +class PowmInsecureWarning(CryptoRuntimeWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi new file mode 100644 index 0000000..07edff6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi @@ -0,0 +1,13 @@ +from typing import AnyStr, Callable, ContextManager, IO, Optional, Text, Type + +def replace_atomic(src: AnyStr, dst: AnyStr) -> None: ... +def move_atomic(src: AnyStr, dst: AnyStr) -> None: ... +class AtomicWriter(object): + def __init__(self, path: AnyStr, mode: Text = ..., overwrite: bool = ...) -> None: ... + def open(self) -> ContextManager[IO]: ... + def _open(self, get_fileobject: Callable) -> ContextManager[IO]: ... + def get_fileobject(self, dir: Optional[AnyStr] = ..., **kwargs) -> IO: ... + def sync(self, f: IO) -> None: ... + def commit(self, f: IO) -> None: ... + def rollback(self, f: IO) -> None: ... +def atomic_write(path: AnyStr, writer_cls: Type[AtomicWriter] = ..., **cls_kwargs: object) -> ContextManager[IO]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi new file mode 100644 index 0000000..fcb93b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi @@ -0,0 +1,255 @@ +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Sequence, + Mapping, + Tuple, + Type, + TypeVar, + Union, + overload, +) + +# `import X as X` is required to make these public +from . import exceptions as exceptions +from . import filters as filters +from . import converters as converters +from . import validators as validators + +_T = TypeVar("_T") +_C = TypeVar("_C", bound=type) + +_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] +_ConverterType = Callable[[Any], _T] +_FilterType = Callable[[Attribute[_T], _T], bool] +# FIXME: in reality, if multiple validators are passed they must be in a list or tuple, +# but those are invariant and so would prevent subtypes of _ValidatorType from working +# when passed in a list or tuple. +_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] + +# _make -- + +NOTHING: object + +# NOTE: Factory lies about its return type to make this possible: `x: List[int] = Factory(list)` +# Work around mypy issue #4554 in the common case by using an overload. +@overload +def Factory(factory: Callable[[], _T]) -> _T: ... +@overload +def Factory( + factory: Union[Callable[[Any], _T], Callable[[], _T]], + takes_self: bool = ..., +) -> _T: ... + +class Attribute(Generic[_T]): + name: str + default: Optional[_T] + validator: Optional[_ValidatorType[_T]] + repr: bool + cmp: bool + hash: Optional[bool] + init: bool + converter: Optional[_ConverterType[_T]] + metadata: Dict[Any, Any] + type: Optional[Type[_T]] + kw_only: bool + def __lt__(self, x: Attribute[_T]) -> bool: ... + def __le__(self, x: Attribute[_T]) -> bool: ... + def __gt__(self, x: Attribute[_T]) -> bool: ... + def __ge__(self, x: Attribute[_T]) -> bool: ... + +# NOTE: We had several choices for the annotation to use for type arg: +# 1) Type[_T] +# - Pros: Handles simple cases correctly +# - Cons: Might produce less informative errors in the case of conflicting TypeVars +# e.g. `attr.ib(default='bad', type=int)` +# 2) Callable[..., _T] +# - Pros: Better error messages than #1 for conflicting TypeVars +# - Cons: Terrible error messages for validator checks. +# e.g. attr.ib(type=int, validator=validate_str) +# -> error: Cannot infer function type argument +# 3) type (and do all of the work in the mypy plugin) +# - Pros: Simple here, and we could customize the plugin with our own errors. +# - Cons: Would need to write mypy plugin code to handle all the cases. +# We chose option #1. + +# `attr` lies about its return type to make the following possible: +# attr() -> Any +# attr(8) -> int +# attr(validator=) -> Whatever the callable expects. +# This makes this type of assignments possible: +# x: int = attr(8) +# +# This form catches explicit None or no default but with no other arguments returns Any. +@overload +def attrib( + default: None = ..., + validator: None = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: None = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: None = ..., + converter: None = ..., + factory: None = ..., + kw_only: bool = ..., +) -> Any: ... + +# This form catches an explicit None or no default and infers the type from the other arguments. +@overload +def attrib( + default: None = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> _T: ... + +# This form catches an explicit default argument. +@overload +def attrib( + default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> _T: ... + +# This form covers type=non-Type: e.g. forward references (str), Any +@overload +def attrib( + default: Optional[_T] = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: object = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> Any: ... +@overload +def attrs( + maybe_cls: _C, + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> _C: ... +@overload +def attrs( + maybe_cls: None = ..., + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> Callable[[_C], _C]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +class _Fields(Tuple[Attribute[Any], ...]): + def __getattr__(self, name: str) -> Attribute[Any]: ... + +def fields(cls: type) -> _Fields: ... +def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... +def validate(inst: Any) -> None: ... + +# TODO: add support for returning a proper attrs class from the mypy plugin +# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', [attr.ib()])` is valid +def make_class( + name: str, + attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], + bases: Tuple[type, ...] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> type: ... + +# _funcs -- + +# TODO: add support for returning TypedDict from the mypy plugin +# FIXME: asdict/astuple do not honor their factory args. waiting on one of these: +# https://github.com/python/mypy/issues/4236 +# https://github.com/python/typing/issues/253 +def asdict( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + dict_factory: Type[Mapping[Any, Any]] = ..., + retain_collection_types: bool = ..., +) -> Dict[str, Any]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +def astuple( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + tuple_factory: Type[Sequence[Any]] = ..., + retain_collection_types: bool = ..., +) -> Tuple[Any, ...]: ... +def has(cls: type) -> bool: ... +def assoc(inst: _T, **changes: Any) -> _T: ... +def evolve(inst: _T, **changes: Any) -> _T: ... + +# _config -- + +def set_run_validators(run: bool) -> None: ... +def get_run_validators() -> bool: ... + +# aliases -- + +s = attributes = attrs +ib = attr = attrib +dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi new file mode 100644 index 0000000..63b2a38 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi @@ -0,0 +1,12 @@ +from typing import TypeVar, Optional, Callable, overload +from . import _ConverterType + +_T = TypeVar("_T") + +def optional( + converter: _ConverterType[_T] +) -> _ConverterType[Optional[_T]]: ... +@overload +def default_if_none(default: _T) -> _ConverterType[_T]: ... +@overload +def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi new file mode 100644 index 0000000..48fffcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi @@ -0,0 +1,7 @@ +class FrozenInstanceError(AttributeError): + msg: str = ... + +class AttrsAttributeNotFoundError(ValueError): ... +class NotAnAttrsClassError(ValueError): ... +class DefaultAlreadySetError(RuntimeError): ... +class UnannotatedAttributeError(RuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi new file mode 100644 index 0000000..68368fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi @@ -0,0 +1,5 @@ +from typing import Union, Any +from . import Attribute, _FilterType + +def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... +def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi new file mode 100644 index 0000000..01af068 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi @@ -0,0 +1,24 @@ +from typing import Container, List, Union, TypeVar, Type, Any, Optional, Tuple +from . import _ValidatorType + +_T = TypeVar("_T") + +def instance_of( + type: Union[Tuple[Type[_T], ...], Type[_T]] +) -> _ValidatorType[_T]: ... +def provides(interface: Any) -> _ValidatorType[Any]: ... +def optional( + validator: Union[_ValidatorType[_T], List[_ValidatorType[_T]]] +) -> _ValidatorType[Optional[_T]]: ... +def in_(options: Container[_T]) -> _ValidatorType[_T]: ... +def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ... +def deep_iterable( + member_validator: _ValidatorType[_T], + iterable_validator: Optional[_ValidatorType[_T]], +) -> _ValidatorType[_T]: ... +def deep_mapping( + key_validator: _ValidatorType[_T], + value_validator: _ValidatorType[_T], + mapping_validator: Optional[_ValidatorType[_T]], +) -> _ValidatorType[_T]: ... +def is_callable() -> _ValidatorType[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi new file mode 100644 index 0000000..c219980 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi @@ -0,0 +1,3 @@ +class CertificateError(ValueError): ... + +def match_hostname(cert, hostname): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi new file mode 100644 index 0000000..b48ae33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi @@ -0,0 +1,15 @@ +from typing import Any + +def mk_gen(): ... +def mk_awaitable(): ... +def mk_coroutine(): ... + +Generator: Any +Awaitable: Any +Coroutine: Any + +def isawaitable(obj): ... + +PATCHED: Any + +def patch(patch_inspect: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi new file mode 100644 index 0000000..3a1ad2c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi @@ -0,0 +1,32 @@ +from typing import Any, Container, Iterable, Optional, Text + +from bleach.linkifier import DEFAULT_CALLBACKS as DEFAULT_CALLBACKS, Linker as Linker +from bleach.sanitizer import ( + ALLOWED_ATTRIBUTES as ALLOWED_ATTRIBUTES, + ALLOWED_PROTOCOLS as ALLOWED_PROTOCOLS, + ALLOWED_STYLES as ALLOWED_STYLES, + ALLOWED_TAGS as ALLOWED_TAGS, + Cleaner as Cleaner, +) + +from .linkifier import _Callback + +__releasedate__: Text +__version__: Text +VERSION: Any # packaging.version.Version + +def clean( + text: Text, + tags: Container[Text] = ..., + attributes: Any = ..., + styles: Container[Text] = ..., + protocols: Container[Text] = ..., + strip: bool = ..., + strip_comments: bool = ..., +) -> Text: ... +def linkify( + text: Text, + callbacks: Iterable[_Callback] = ..., + skip_tags: Optional[Container[Text]] = ..., + parse_email: bool = ..., +) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi new file mode 100644 index 0000000..25c5c01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi @@ -0,0 +1,6 @@ +from typing import MutableMapping, Any, Text + +_Attrs = MutableMapping[Any, Text] + +def nofollow(attrs: _Attrs, new: bool = ...) -> _Attrs: ... +def target_blank(attrs: _Attrs, new: bool = ...) -> _Attrs: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi new file mode 100644 index 0000000..f6ef3ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi @@ -0,0 +1,31 @@ +from typing import Any, Container, Iterable, List, MutableMapping, Optional, Pattern, Protocol, Text + +_Attrs = MutableMapping[Any, Text] + +class _Callback(Protocol): + def __call__(self, attrs: _Attrs, new: bool = ...) -> _Attrs: ... + +DEFAULT_CALLBACKS: List[_Callback] + +TLDS: List[Text] + +def build_url_re(tlds: Iterable[Text] = ..., protocols: Iterable[Text] = ...) -> Pattern[Text]: ... + +URL_RE: Pattern[Text] +PROTO_RE: Pattern[Text] +EMAIL_RE: Pattern[Text] + +class Linker(object): + def __init__( + self, + callbacks: Iterable[_Callback] = ..., + skip_tags: Optional[Container[Text]] = ..., + parse_email: bool = ..., + url_re: Pattern[Text] = ..., + email_re: Pattern[Text] = ..., + recognized_tags: Optional[Container[Text]] = ..., + ) -> None: ... + def linkify(self, text: Text) -> Text: ... + +class LinkifyFilter(object): # TODO: derives from html5lib.Filter + def __getattr__(self, item: str) -> Any: ... # incomplete diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi new file mode 100644 index 0000000..c6a7283 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi @@ -0,0 +1,34 @@ +from typing import Any, Callable, Container, Dict, Iterable, List, Optional, Pattern, Text, Type, Union + +ALLOWED_TAGS: List[Text] +ALLOWED_ATTRIBUTES: Dict[Text, List[Text]] +ALLOWED_STYLES: List[Text] +ALLOWED_PROTOCOLS: List[Text] + +INVISIBLE_CHARACTERS: Text +INVISIBLE_CHARACTERS_RE: Pattern[Text] +INVISIBLE_REPLACEMENT_CHAR: Text + +# A html5lib Filter class +_Filter = Any + +class Cleaner(object): + def __init__( + self, + tags: Container[Text] = ..., + attributes: Any = ..., + styles: Container[Text] = ..., + protocols: Container[Text] = ..., + strip: bool = ..., + strip_comments: bool = ..., + filters: Optional[Iterable[_Filter]] = ..., + ) -> None: ... + def clean(self, text: Text) -> Text: ... + +_AttributeFilter = Callable[[Text, Text, Text], bool] +_AttributeDict = Dict[Text, Union[Container[Text], _AttributeFilter]] + +def attribute_filter_factory(attributes: Union[_AttributeFilter, _AttributeDict, Container[Text]]) -> _AttributeFilter: ... + +class BleachSanitizerFilter(object): # TODO: derives from html5lib.sanitizer.Filter + def __getattr__(self, item: str) -> Any: ... # incomplete diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi new file mode 100644 index 0000000..984c554 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi @@ -0,0 +1,8 @@ +from collections import OrderedDict +from typing import overload, Mapping, Any, Text + +@overload +def alphabetize_attributes(attrs: None) -> None: ... +@overload +def alphabetize_attributes(attrs: Mapping[Any, Text]) -> OrderedDict[Any, Text]: ... +def force_unicode(text: Text) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi new file mode 100644 index 0000000..8426785 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi @@ -0,0 +1,76 @@ +from typing import Any, Optional, Text +import logging + +from .s3.connection import S3Connection + +Version: Any +UserAgent: Any +config: Any +BUCKET_NAME_RE: Any +TOO_LONG_DNS_NAME_COMP: Any +GENERATION_RE: Any +VERSION_RE: Any +ENDPOINTS_PATH: Any + +def init_logging(): ... + +class NullHandler(logging.Handler): + def emit(self, record): ... + +log: Any +perflog: Any + +def set_file_logger(name, filepath, level: Any = ..., format_string: Optional[Any] = ...): ... +def set_stream_logger(name, level: Any = ..., format_string: Optional[Any] = ...): ... +def connect_sqs(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_s3(aws_access_key_id: Optional[Text] = ..., aws_secret_access_key: Optional[Text] = ..., **kwargs) -> S3Connection: ... +def connect_gs(gs_access_key_id: Optional[Any] = ..., gs_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_elb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_autoscale(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudwatch(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sdb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_fps(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_mturk(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudfront(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_vpc(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_rds(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_rds2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_emr(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sns(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_iam(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_route53(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudformation(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_euca(host: Optional[Any] = ..., aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., port: int = ..., path: str = ..., is_secure: bool = ..., **kwargs): ... +def connect_glacier(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2_endpoint(url, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_walrus(host: Optional[Any] = ..., aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., port: int = ..., path: str = ..., is_secure: bool = ..., **kwargs): ... +def connect_ses(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sts(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ia(ia_access_key_id: Optional[Any] = ..., ia_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., **kwargs): ... +def connect_dynamodb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_swf(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudsearch(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudsearch2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., sign_request: bool = ..., **kwargs): ... +def connect_cloudsearchdomain(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_beanstalk(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_elastictranscoder(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_opsworks(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_redshift(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_support(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudtrail(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_directconnect(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_kinesis(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_logs(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_route53domains(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cognito_identity(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cognito_sync(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_kms(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_awslambda(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_codedeploy(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_configservice(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudhsm(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2containerservice(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_machinelearning(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def storage_uri(uri_str, default_scheme: str = ..., debug: int = ..., validate: bool = ..., bucket_storage_uri_class: Any = ..., suppress_consec_slashes: bool = ..., is_latest: bool = ...): ... +def storage_uri_for_key(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi new file mode 100644 index 0000000..033d1d7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi @@ -0,0 +1,108 @@ +from typing import Any, Optional +from boto.auth_handler import AuthHandler + +SIGV4_DETECT: Any + +class HmacKeys: + host: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def algorithm(self): ... + def sign_string(self, string_to_sign): ... + +class AnonAuthHandler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV1Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV2Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV3Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV3HTTPHandler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def headers_to_sign(self, http_request): ... + def canonical_headers(self, headers_to_sign): ... + def string_to_sign(self, http_request): ... + def add_auth(self, req, **kwargs): ... + +class HmacAuthV4Handler(AuthHandler, HmacKeys): + capability: Any + service_name: Any + region_name: Any + def __init__(self, host, config, provider, service_name: Optional[Any] = ..., region_name: Optional[Any] = ...) -> None: ... + def headers_to_sign(self, http_request): ... + def host_header(self, host, http_request): ... + def query_string(self, http_request): ... + def canonical_query_string(self, http_request): ... + def canonical_headers(self, headers_to_sign): ... + def signed_headers(self, headers_to_sign): ... + def canonical_uri(self, http_request): ... + def payload(self, http_request): ... + def canonical_request(self, http_request): ... + def scope(self, http_request): ... + def split_host_parts(self, host): ... + def determine_region_name(self, host): ... + def determine_service_name(self, host): ... + def credential_scope(self, http_request): ... + def string_to_sign(self, http_request, canonical_request): ... + def signature(self, http_request, string_to_sign): ... + def add_auth(self, req, **kwargs): ... + +class S3HmacAuthV4Handler(HmacAuthV4Handler, AuthHandler): + capability: Any + region_name: Any + def __init__(self, *args, **kwargs) -> None: ... + def clean_region_name(self, region_name): ... + def canonical_uri(self, http_request): ... + def canonical_query_string(self, http_request): ... + def host_header(self, host, http_request): ... + def headers_to_sign(self, http_request): ... + def determine_region_name(self, host): ... + def determine_service_name(self, host): ... + def mangle_path_and_params(self, req): ... + def payload(self, http_request): ... + def add_auth(self, req, **kwargs): ... + def presign(self, req, expires, iso_date: Optional[Any] = ...): ... + +class STSAnonHandler(AuthHandler): + capability: Any + def add_auth(self, http_request, **kwargs): ... + +class QuerySignatureHelper(HmacKeys): + def add_auth(self, http_request, **kwargs): ... + +class QuerySignatureV0AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + +class QuerySignatureV1AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + def __init__(self, *args, **kw) -> None: ... + +class QuerySignatureV2AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + +class POSTPathQSV2AuthHandler(QuerySignatureV2AuthHandler, AuthHandler): + capability: Any + def add_auth(self, req, **kwargs): ... + +def get_auth_handler(host, config, provider, requested_capability: Optional[Any] = ...): ... +def detect_potential_sigv4(func): ... +def detect_potential_s3sigv4(func): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi new file mode 100644 index 0000000..018e6d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi @@ -0,0 +1,9 @@ +from typing import Any +from boto.plugin import Plugin + +class NotReadyToAuthenticate(Exception): ... + +class AuthHandler(Plugin): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi new file mode 100644 index 0000000..ce99703 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi @@ -0,0 +1,17 @@ +import sys + +from typing import Any +from base64 import encodestring as encodebytes + +from six.moves import http_client + +expanduser: Any + +if sys.version_info >= (3, 0): + StandardError = Exception +else: + from __builtin__ import StandardError as StandardError + +long_type: Any +unquote_str: Any +parse_qs_safe: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi new file mode 100644 index 0000000..820d6e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi @@ -0,0 +1,115 @@ +from typing import Any, Dict, Optional, Text +from six.moves import http_client + +HAVE_HTTPS_CONNECTION: bool +ON_APP_ENGINE: Any +PORTS_BY_SECURITY: Any +DEFAULT_CA_CERTS_FILE: Any + +class HostConnectionPool: + queue: Any + def __init__(self) -> None: ... + def size(self): ... + def put(self, conn): ... + def get(self): ... + def clean(self): ... + +class ConnectionPool: + CLEAN_INTERVAL: float + STALE_DURATION: float + host_to_pool: Any + last_clean_time: float + mutex: Any + def __init__(self) -> None: ... + def size(self): ... + def get_http_connection(self, host, port, is_secure): ... + def put_http_connection(self, host, port, is_secure, conn): ... + def clean(self): ... + +class HTTPRequest: + method: Any + protocol: Any + host: Any + port: Any + path: Any + auth_path: Any + params: Any + headers: Any + body: Any + def __init__(self, method, protocol, host, port, path, auth_path, params, headers, body) -> None: ... + def authorize(self, connection, **kwargs): ... + +class HTTPResponse(http_client.HTTPResponse): + def __init__(self, *args, **kwargs) -> None: ... + def read(self, amt: Optional[Any] = ...): ... + +class AWSAuthConnection: + suppress_consec_slashes: Any + num_retries: int + is_secure: Any + https_validate_certificates: Any + ca_certificates_file: Any + port: Any + http_exceptions: Any + http_unretryable_exceptions: Any + socket_exception_values: Any + https_connection_factory: Any + protocol: str + host: Any + path: Any + debug: Any + host_header: Any + http_connection_kwargs: Any + provider: Any + auth_service_name: Any + request_hook: Any + def __init__(self, host, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., path: str = ..., provider: str = ..., security_token: Optional[Any] = ..., suppress_consec_slashes: bool = ..., validate_certs: bool = ..., profile_name: Optional[Any] = ...) -> None: ... + auth_region_name: Any + @property + def connection(self): ... + @property + def aws_access_key_id(self): ... + @property + def gs_access_key_id(self) -> Any: ... + access_key: Any + @property + def aws_secret_access_key(self): ... + @property + def gs_secret_access_key(self): ... + secret_key: Any + @property + def profile_name(self): ... + def get_path(self, path: str = ...): ... + def server_name(self, port: Optional[Any] = ...): ... + proxy: Any + proxy_port: Any + proxy_user: Any + proxy_pass: Any + no_proxy: Any + use_proxy: Any + def handle_proxy(self, proxy, proxy_port, proxy_user, proxy_pass): ... + def get_http_connection(self, host, port, is_secure): ... + def skip_proxy(self, host): ... + def new_http_connection(self, host, port, is_secure): ... + def put_http_connection(self, host, port, is_secure, connection): ... + def proxy_ssl(self, host: Optional[Any] = ..., port: Optional[Any] = ...): ... + def prefix_proxy_to_path(self, path, host: Optional[Any] = ...): ... + def get_proxy_auth_header(self): ... + def get_proxy_url_with_auth(self): ... + def set_host_header(self, request): ... + def set_request_hook(self, hook): ... + def build_base_http_request(self, method, path, auth_path, params: Optional[Any] = ..., headers: Optional[Any] = ..., data: str = ..., host: Optional[Any] = ...): ... + def make_request(self, method, path, headers: Optional[Any] = ..., data: str = ..., host: Optional[Any] = ..., auth_path: Optional[Any] = ..., sender: Optional[Any] = ..., override_num_retries: Optional[Any] = ..., params: Optional[Any] = ..., retry_handler: Optional[Any] = ...): ... + def close(self): ... + +class AWSQueryConnection(AWSAuthConnection): + APIVersion: str + ResponseError: Any + def __init__(self, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., host: Optional[Any] = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., path: str = ..., security_token: Optional[Any] = ..., validate_certs: bool = ..., profile_name: Optional[Any] = ..., provider: str = ...) -> None: ... + def get_utf8_value(self, value): ... + def make_request(self, action, params: Optional[Any] = ..., path: str = ..., verb: str = ..., *args, **kwargs): ... # type: ignore # https://github.com/python/mypy/issues/1237 + def build_list_params(self, params, items, label): ... + def build_complex_list_params(self, params, items, label, names): ... + def get_list(self, action, params, markers, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... + def get_object(self, action, params, cls, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... + def get_status(self, action, params, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi new file mode 100644 index 0000000..d671c90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi @@ -0,0 +1,7 @@ +from typing import Any + +RegionData: Any + +def regions(**kw_params): ... +def connect_to_region(region_name, **kw_params): ... +def get_region(region_name, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi new file mode 100644 index 0000000..16cf5b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi @@ -0,0 +1,39 @@ +from typing import Any +from boto.connection import AWSQueryConnection + +RegionData: Any + +def regions(): ... +def connect_to_region(region_name, **kw_params): ... + +class ELBConnection(AWSQueryConnection): + APIVersion: Any + DefaultRegionName: Any + DefaultRegionEndpoint: Any + region: Any + def __init__(self, aws_access_key_id=..., aws_secret_access_key=..., is_secure=..., port=..., proxy=..., proxy_port=..., proxy_user=..., proxy_pass=..., debug=..., https_connection_factory=..., region=..., path=..., security_token=..., validate_certs=..., profile_name=...) -> None: ... + def build_list_params(self, params, items, label): ... + def get_all_load_balancers(self, load_balancer_names=..., marker=...): ... + def create_load_balancer(self, name, zones, listeners=..., subnets=..., security_groups=..., scheme=..., complex_listeners=...): ... + def create_load_balancer_listeners(self, name, listeners=..., complex_listeners=...): ... + def delete_load_balancer(self, name): ... + def delete_load_balancer_listeners(self, name, ports): ... + def enable_availability_zones(self, load_balancer_name, zones_to_add): ... + def disable_availability_zones(self, load_balancer_name, zones_to_remove): ... + def modify_lb_attribute(self, load_balancer_name, attribute, value): ... + def get_all_lb_attributes(self, load_balancer_name): ... + def get_lb_attribute(self, load_balancer_name, attribute): ... + def register_instances(self, load_balancer_name, instances): ... + def deregister_instances(self, load_balancer_name, instances): ... + def describe_instance_health(self, load_balancer_name, instances=...): ... + def configure_health_check(self, name, health_check): ... + def set_lb_listener_SSL_certificate(self, lb_name, lb_port, ssl_certificate_id): ... + def create_app_cookie_stickiness_policy(self, name, lb_name, policy_name): ... + def create_lb_cookie_stickiness_policy(self, cookie_expiration_period, lb_name, policy_name): ... + def create_lb_policy(self, lb_name, policy_name, policy_type, policy_attributes): ... + def delete_lb_policy(self, lb_name, policy_name): ... + def set_lb_policies_of_listener(self, lb_name, lb_port, policies): ... + def set_lb_policies_of_backend_server(self, lb_name, instance_port, policies): ... + def apply_security_groups_to_lb(self, name, security_groups): ... + def attach_lb_to_subnets(self, name, subnets): ... + def detach_lb_from_subnets(self, name, subnets): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi new file mode 100644 index 0000000..e83a074 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi @@ -0,0 +1,146 @@ +from typing import Any, Optional +from boto.compat import StandardError + +class BotoClientError(StandardError): + reason: Any + def __init__(self, reason, *args) -> None: ... + +class SDBPersistenceError(StandardError): ... +class StoragePermissionsError(BotoClientError): ... +class S3PermissionsError(StoragePermissionsError): ... +class GSPermissionsError(StoragePermissionsError): ... + +class BotoServerError(StandardError): + status: Any + reason: Any + body: Any + request_id: Any + error_code: Any + message: str + box_usage: Any + def __init__(self, status, reason, body: Optional[Any] = ..., *args) -> None: ... + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class ConsoleOutput: + parent: Any + instance_id: Any + timestamp: Any + comment: Any + output: Any + def __init__(self, parent: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class StorageCreateError(BotoServerError): + bucket: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def endElement(self, name, value, connection): ... + +class S3CreateError(StorageCreateError): ... +class GSCreateError(StorageCreateError): ... +class StorageCopyError(BotoServerError): ... +class S3CopyError(StorageCopyError): ... +class GSCopyError(StorageCopyError): ... + +class SQSError(BotoServerError): + detail: Any + type: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class SQSDecodeError(BotoClientError): + message: Any + def __init__(self, reason, message) -> None: ... + +class StorageResponseError(BotoServerError): + resource: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class S3ResponseError(StorageResponseError): ... +class GSResponseError(StorageResponseError): ... + +class EC2ResponseError(BotoServerError): + errors: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + request_id: Any + def endElement(self, name, value, connection): ... + +class JSONResponseError(BotoServerError): + status: Any + reason: Any + body: Any + error_message: Any + error_code: Any + def __init__(self, status, reason, body: Optional[Any] = ..., *args) -> None: ... + +class DynamoDBResponseError(JSONResponseError): ... +class SWFResponseError(JSONResponseError): ... +class EmrResponseError(BotoServerError): ... + +class _EC2Error: + connection: Any + error_code: Any + error_message: Any + def __init__(self, connection: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class SDBResponseError(BotoServerError): ... +class AWSConnectionError(BotoClientError): ... +class StorageDataError(BotoClientError): ... +class S3DataError(StorageDataError): ... +class GSDataError(StorageDataError): ... + +class InvalidUriError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class InvalidAclError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class InvalidCorsError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class NoAuthHandlerFound(Exception): ... + +class InvalidLifecycleConfigError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class ResumableTransferDisposition: + START_OVER: str + WAIT_BEFORE_RETRY: str + ABORT_CUR_PROCESS: str + ABORT: str + +class ResumableUploadException(Exception): + message: Any + disposition: Any + def __init__(self, message, disposition) -> None: ... + +class ResumableDownloadException(Exception): + message: Any + disposition: Any + def __init__(self, message, disposition) -> None: ... + +class TooManyRecordsException(Exception): + message: Any + def __init__(self, message) -> None: ... + +class PleaseRetryException(Exception): + message: Any + response: Any + def __init__(self, message, response: Optional[Any] = ...) -> None: ... + +class InvalidInstanceMetadataError(Exception): + MSG: str + def __init__(self, msg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi new file mode 100644 index 0000000..41fff60 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi @@ -0,0 +1,5 @@ +from typing import List +import boto.regioninfo + +def regions() -> List[boto.regioninfo.RegionInfo]: ... +def connect_to_region(region_name, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi new file mode 100644 index 0000000..5ac2ecd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi @@ -0,0 +1,17 @@ +from boto.exception import BotoServerError + +class InvalidGrantTokenException(BotoServerError): ... +class DisabledException(BotoServerError): ... +class LimitExceededException(BotoServerError): ... +class DependencyTimeoutException(BotoServerError): ... +class InvalidMarkerException(BotoServerError): ... +class AlreadyExistsException(BotoServerError): ... +class InvalidCiphertextException(BotoServerError): ... +class KeyUnavailableException(BotoServerError): ... +class InvalidAliasNameException(BotoServerError): ... +class UnsupportedOperationException(BotoServerError): ... +class InvalidArnException(BotoServerError): ... +class KMSInternalException(BotoServerError): ... +class InvalidKeyUsageException(BotoServerError): ... +class MalformedPolicyDocumentException(BotoServerError): ... +class NotFoundException(BotoServerError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi new file mode 100644 index 0000000..f48ce66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi @@ -0,0 +1,37 @@ +from typing import Any, Dict, List, Mapping, Optional, Type +from boto.connection import AWSQueryConnection + +class KMSConnection(AWSQueryConnection): + APIVersion: str + DefaultRegionName: str + DefaultRegionEndpoint: str + ServiceName: str + TargetPrefix: str + ResponseError: Type[Exception] + region: Any + def __init__(self, **kwargs) -> None: ... + def create_alias(self, alias_name: str, target_key_id: str) -> Optional[Dict[str, Any]]: ... + def create_grant(self, key_id: str, grantee_principal: str, retiring_principal: Optional[str] = ..., operations: Optional[List[str]] = ..., constraints: Optional[Dict[str, Dict[str, str]]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def create_key(self, policy: Optional[str] = ..., description: Optional[str] = ..., key_usage: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def decrypt(self, ciphertext_blob: bytes, encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def delete_alias(self, alias_name: str) -> Optional[Dict[str, Any]]: ... + def describe_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def disable_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def disable_key_rotation(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def enable_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def enable_key_rotation(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def encrypt(self, key_id: str, plaintext: bytes, encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_data_key(self, key_id: str, encryption_context: Optional[Mapping[str, Any]] = ..., number_of_bytes: Optional[int] = ..., key_spec: Optional[str] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_data_key_without_plaintext(self, key_id: str, encryption_context: Optional[Mapping[str, Any]] = ..., key_spec: Optional[str] = ..., number_of_bytes: Optional[int] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_random(self, number_of_bytes: Optional[int] = ...) -> Optional[Dict[str, Any]]: ... + def get_key_policy(self, key_id: str, policy_name: str) -> Optional[Dict[str, Any]]: ... + def get_key_rotation_status(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def list_aliases(self, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_grants(self, key_id: str, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_key_policies(self, key_id: str, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_keys(self, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def put_key_policy(self, key_id: str, policy_name: str, policy: str) -> Optional[Dict[str, Any]]: ... + def re_encrypt(self, ciphertext_blob: bytes, destination_key_id: str, source_encryption_context: Optional[Mapping[str, Any]] = ..., destination_encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def retire_grant(self, grant_token: str) -> Optional[Dict[str, Any]]: ... + def revoke_grant(self, key_id: str, grant_id: str) -> Optional[Dict[str, Any]]: ... + def update_key_description(self, key_id: str, description: str) -> Optional[Dict[str, Any]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi new file mode 100644 index 0000000..e7d5f1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi @@ -0,0 +1,9 @@ +from typing import Any, Optional + +class Plugin: + capability: Any + @classmethod + def is_capable(cls, requested_capability): ... + +def get_plugin(cls, requested_capability: Optional[Any] = ...): ... +def load_plugins(config): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi new file mode 100644 index 0000000..525b565 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +def load_endpoint_json(path): ... +def merge_endpoints(defaults, additions): ... +def load_regions(): ... +def get_regions(service_name, region_cls: Optional[Any] = ..., connection_cls: Optional[Any] = ...): ... + +class RegionInfo: + connection: Any + name: Any + endpoint: Any + connection_cls: Any + def __init__(self, connection: Optional[Any] = ..., name: Optional[Any] = ..., endpoint: Optional[Any] = ..., connection_cls: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def connect(self, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi new file mode 100644 index 0000000..d88955e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi @@ -0,0 +1,14 @@ +from typing import Optional + +from .connection import S3Connection + +from boto.connection import AWSAuthConnection +from boto.regioninfo import RegionInfo + +from typing import List, Type, Text + +class S3RegionInfo(RegionInfo): + def connect(self, name: Optional[Text] = ..., endpoint: Optional[str] = ..., connection_cls: Optional[Type[AWSAuthConnection]] = ..., **kw_params) -> S3Connection: ... + +def regions() -> List[S3RegionInfo]: ... +def connect_to_region(region_name: Text, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi new file mode 100644 index 0000000..168f914 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi @@ -0,0 +1,39 @@ +from .connection import S3Connection +from .user import User +from typing import Any, Dict, Optional, List, Text, Union + +CannedACLStrings: List[str] + +class Policy: + parent: Any + namespace: Any + acl: ACL + def __init__(self, parent: Optional[Any] = ...) -> None: ... + owner: User + def startElement(self, name: Text, attrs: Dict[str, Any], connection: S3Connection) -> Union[None, User, ACL]: ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... + +class ACL: + policy: Policy + grants: List[Grant] + def __init__(self, policy: Optional[Policy] = ...) -> None: ... + def add_grant(self, grant: Grant) -> None: ... + def add_email_grant(self, permission: Text, email_address: Text) -> None: ... + def add_user_grant(self, permission: Text, user_id: Text, display_name: Optional[Text] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... + +class Grant: + NameSpace: Text + permission: Text + id: Text + display_name: Text + uri: Text + email_address: Text + type: Text + def __init__(self, permission: Optional[Text] = ..., type: Optional[Text] = ..., id: Optional[Text] = ..., display_name: Optional[Text] = ..., uri: Optional[Text] = ..., email_address: Optional[Text] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi new file mode 100644 index 0000000..daed502 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi @@ -0,0 +1,94 @@ +from .bucketlistresultset import BucketListResultSet +from .connection import S3Connection +from .key import Key + +from typing import Any, Dict, Optional, Text, Type, List + +class S3WebsiteEndpointTranslate: + trans_region: Dict[str, str] + @classmethod + def translate_region(self, reg: Text) -> str: ... + +S3Permissions: List[str] + +class Bucket: + LoggingGroup: str + BucketPaymentBody: str + VersioningBody: str + VersionRE: str + MFADeleteRE: str + name: Text + connection: S3Connection + key_class: Type[Key] + def __init__(self, connection: Optional[S3Connection] = ..., name: Optional[Text] = ..., key_class: Type[Key] = ...) -> None: ... + def __iter__(self): ... + def __contains__(self, key_name) -> bool: ... + def startElement(self, name, attrs, connection): ... + creation_date: Any + def endElement(self, name, value, connection): ... + def set_key_class(self, key_class): ... + def lookup(self, key_name, headers: Optional[Dict[Text, Text]] = ...): ... + def get_key(self, key_name, headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., response_headers: Optional[Dict[Text, Text]] = ..., validate: bool = ...) -> Key: ... + def list(self, prefix: Text = ..., delimiter: Text = ..., marker: Text = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Any] = ...) -> BucketListResultSet: ... + def list_versions(self, prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Text] = ...) -> BucketListResultSet: ... + def list_multipart_uploads(self, key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Any] = ...): ... + def validate_kwarg_names(self, kwargs, names): ... + def get_all_keys(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def get_all_versions(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def validate_get_all_versions_params(self, params): ... + def get_all_multipart_uploads(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def new_key(self, key_name: Optional[Any] = ...): ... + def generate_url(self, expires_in, method: str = ..., headers: Optional[Dict[Text, Text]] = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., expires_in_absolute: bool = ...): ... + def delete_keys(self, keys, quiet: bool = ..., mfa_token: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def delete_key(self, key_name, headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., mfa_token: Optional[Any] = ...): ... + def copy_key(self, new_key_name, src_bucket_name, src_key_name, metadata: Optional[Any] = ..., src_version_id: Optional[Any] = ..., storage_class: str = ..., preserve_acl: bool = ..., encrypt_key: bool = ..., headers: Optional[Dict[Text, Text]] = ..., query_args: Optional[Any] = ...): ... + def set_canned_acl(self, acl_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_xml_acl(self, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def set_xml_acl(self, acl_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., query_args: str = ...): ... + def set_acl(self, acl_or_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_acl(self, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def set_subresource(self, subresource, value, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_subresource(self, subresource, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def make_public(self, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def add_email_grant(self, permission, email_address, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def add_user_grant(self, permission, user_id, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ..., display_name: Optional[Any] = ...): ... + def list_grants(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_location(self): ... + def set_xml_logging(self, logging_str, headers: Optional[Dict[Text, Text]] = ...): ... + def enable_logging(self, target_bucket, target_prefix: str = ..., grants: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def disable_logging(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_logging_status(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_as_logging_target(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_request_payment(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_request_payment(self, payer: str = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def configure_versioning(self, versioning, mfa_delete: bool = ..., mfa_token: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def get_versioning_status(self, headers: Optional[Dict[Text, Text]] = ...): ... + def configure_lifecycle(self, lifecycle_config, headers: Optional[Dict[Text, Text]] = ...): ... + def get_lifecycle_config(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_lifecycle_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def configure_website(self, suffix: Optional[Any] = ..., error_key: Optional[Any] = ..., redirect_all_requests_to: Optional[Any] = ..., routing_rules: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def set_website_configuration(self, config, headers: Optional[Dict[Text, Text]] = ...): ... + def set_website_configuration_xml(self, xml, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_obj(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_with_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_website_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_endpoint(self): ... + def get_policy(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_policy(self, policy, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_policy(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_cors_xml(self, cors_xml, headers: Optional[Dict[Text, Text]] = ...): ... + def set_cors(self, cors_config, headers: Optional[Dict[Text, Text]] = ...): ... + def get_cors_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_cors(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_cors(self, headers: Optional[Dict[Text, Text]] = ...): ... + def initiate_multipart_upload(self, key_name, headers: Optional[Dict[Text, Text]] = ..., reduced_redundancy: bool = ..., metadata: Optional[Any] = ..., encrypt_key: bool = ..., policy: Optional[Any] = ...): ... + def complete_multipart_upload(self, key_name, upload_id, xml_body, headers: Optional[Dict[Text, Text]] = ...): ... + def cancel_multipart_upload(self, key_name, upload_id, headers: Optional[Dict[Text, Text]] = ...): ... + def delete(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_tags(self): ... + def get_xml_tags(self): ... + def set_xml_tags(self, tag_str, headers: Optional[Dict[Text, Text]] = ..., query_args: str = ...): ... + def set_tags(self, tags, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_tags(self, headers: Optional[Dict[Text, Text]] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi new file mode 100644 index 0000000..b33d84d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi @@ -0,0 +1,40 @@ +from .bucket import Bucket +from .key import Key + +from typing import Any, Iterable, Iterator, Optional + +def bucket_lister(bucket, prefix: str = ..., delimiter: str = ..., marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class BucketListResultSet(Iterable[Key]): + bucket: Any + prefix: Any + delimiter: Any + marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., prefix: str = ..., delimiter: str = ..., marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self) -> Iterator[Key]: ... + +def versioned_bucket_lister(bucket, prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class VersionedBucketListResultSet: + bucket: Any + prefix: Any + delimiter: Any + key_marker: Any + version_id_marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self) -> Iterator[Key]: ... + +def multipart_upload_lister(bucket, key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class MultiPartUploadListResultSet: + bucket: Any + key_marker: Any + upload_id_marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi new file mode 100644 index 0000000..4eaa1ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi @@ -0,0 +1,11 @@ +from typing import Any, Optional + +class BucketLogging: + target: Any + prefix: Any + grants: Any + def __init__(self, target: Optional[Any] = ..., prefix: Optional[Any] = ..., grants: Optional[Any] = ...) -> None: ... + def add_grant(self, grant): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi new file mode 100644 index 0000000..9148e68 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi @@ -0,0 +1,67 @@ +from .bucket import Bucket + +from typing import Any, Dict, Optional, Text, Type +from boto.connection import AWSAuthConnection +from boto.exception import BotoClientError + +def check_lowercase_bucketname(n): ... +def assert_case_insensitive(f): ... + +class _CallingFormat: + def get_bucket_server(self, server, bucket): ... + def build_url_base(self, connection, protocol, server, bucket, key: str = ...): ... + def build_host(self, server, bucket): ... + def build_auth_path(self, bucket, key: str = ...): ... + def build_path_base(self, bucket, key: str = ...): ... + +class SubdomainCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + +class VHostCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + +class OrdinaryCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + def build_path_base(self, bucket, key: str = ...): ... + +class ProtocolIndependentOrdinaryCallingFormat(OrdinaryCallingFormat): + def build_url_base(self, connection, protocol, server, bucket, key: str = ...): ... + +class Location: + DEFAULT: str + EU: str + EUCentral1: str + USWest: str + USWest2: str + SAEast: str + APNortheast: str + APSoutheast: str + APSoutheast2: str + CNNorth1: str + +class NoHostProvided: ... +class HostRequiredError(BotoClientError): ... + +class S3Connection(AWSAuthConnection): + DefaultHost: Any + DefaultCallingFormat: Any + QueryString: str + calling_format: Any + bucket_class: Type[Bucket] + anon: Any + def __init__(self, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., host: Any = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., calling_format: Any = ..., path: str = ..., provider: str = ..., bucket_class: Type[Bucket] = ..., security_token: Optional[Any] = ..., suppress_consec_slashes: bool = ..., anon: bool = ..., validate_certs: Optional[Any] = ..., profile_name: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + def __contains__(self, bucket_name): ... + def set_bucket_class(self, bucket_class: Type[Bucket]) -> None: ... + def build_post_policy(self, expiration_time, conditions): ... + def build_post_form_args(self, bucket_name, key, expires_in: int = ..., acl: Optional[Any] = ..., success_action_redirect: Optional[Any] = ..., max_content_length: Optional[Any] = ..., http_method: str = ..., fields: Optional[Any] = ..., conditions: Optional[Any] = ..., storage_class: str = ..., server_side_encryption: Optional[Any] = ...): ... + def generate_url_sigv4(self, expires_in, method, bucket: str = ..., key: str = ..., headers: Optional[Dict[Text, Text]] = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., iso_date: Optional[Any] = ...): ... + def generate_url(self, expires_in, method, bucket: str = ..., key: str = ..., headers: Optional[Dict[Text, Text]] = ..., query_auth: bool = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., expires_in_absolute: bool = ..., version_id: Optional[Any] = ...): ... + def get_all_buckets(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_canonical_user_id(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_bucket(self, bucket_name: Text, validate: bool = ..., headers: Optional[Dict[Text, Text]] = ...) -> Bucket: ... + def head_bucket(self, bucket_name, headers: Optional[Dict[Text, Text]] = ...): ... + def lookup(self, bucket_name, validate: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def create_bucket(self, bucket_name, headers: Optional[Dict[Text, Text]] = ..., location: Any = ..., policy: Optional[Any] = ...): ... + def delete_bucket(self, bucket, headers: Optional[Dict[Text, Text]] = ...): ... + def make_request(self, method, bucket: str = ..., key: str = ..., headers: Optional[Any] = ..., data: str = ..., query_args: Optional[Any] = ..., sender: Optional[Any] = ..., override_num_retries: Optional[Any] = ..., retry_handler: Optional[Any] = ..., *args, **kwargs): ... # type: ignore # https://github.com/python/mypy/issues/1237 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi new file mode 100644 index 0000000..6ffe8ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +class CORSRule: + allowed_method: Any + allowed_origin: Any + id: Any + allowed_header: Any + max_age_seconds: Any + expose_header: Any + def __init__(self, allowed_method: Optional[Any] = ..., allowed_origin: Optional[Any] = ..., id: Optional[Any] = ..., allowed_header: Optional[Any] = ..., max_age_seconds: Optional[Any] = ..., expose_header: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self) -> str: ... + +class CORSConfiguration(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self) -> str: ... + def add_rule(self, allowed_method, allowed_origin, id: Optional[Any] = ..., allowed_header: Optional[Any] = ..., max_age_seconds: Optional[Any] = ..., expose_header: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi new file mode 100644 index 0000000..b2955c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi @@ -0,0 +1,12 @@ +from typing import Any, Optional + +class DeleteMarker: + bucket: Any + name: Any + version_id: Any + is_latest: bool + last_modified: Any + owner: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi new file mode 100644 index 0000000..4200e7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi @@ -0,0 +1,232 @@ +from typing import Any, Callable, Dict, Optional, Text, Union, overload + +class Key: + DefaultContentType: str + RestoreBody: str + BufferSize: Any + base_user_settable_fields: Any + base_fields: Any + bucket: Any + name: str + metadata: Any + cache_control: Any + content_type: Any + content_encoding: Any + content_disposition: Any + content_language: Any + filename: Any + etag: Any + is_latest: bool + last_modified: Any + owner: Any + path: Any + resp: Any + mode: Any + size: Any + version_id: Any + source_version_id: Any + delete_marker: bool + encrypted: Any + ongoing_restore: Any + expiry_date: Any + local_hashes: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + @property + def provider(self): ... + key: Any + md5: Any + base64md5: Any + storage_class: Any + def get_md5_from_hexdigest(self, md5_hexdigest): ... + def handle_encryption_headers(self, resp): ... + def handle_version_headers(self, resp, force: bool = ...): ... + def handle_restore_headers(self, response): ... + def handle_addl_headers(self, headers): ... + def open_read( + self, + headers: Optional[Dict[Text, Text]] = ..., + query_args: str = ..., + override_num_retries: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def open_write(self, headers: Optional[Dict[Text, Text]] = ..., override_num_retries: Optional[Any] = ...): ... + def open( + self, + mode: str = ..., + headers: Optional[Dict[Text, Text]] = ..., + query_args: Optional[Any] = ..., + override_num_retries: Optional[Any] = ..., + ): ... + closed: bool + def close(self, fast: bool = ...): ... + def next(self): ... + __next__: Any + def read(self, size: int = ...): ... + def change_storage_class(self, new_storage_class, dst_bucket: Optional[Any] = ..., validate_dst_bucket: bool = ...): ... + def copy( + self, + dst_bucket, + dst_key, + metadata: Optional[Any] = ..., + reduced_redundancy: bool = ..., + preserve_acl: bool = ..., + encrypt_key: bool = ..., + validate_dst_bucket: bool = ..., + ): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def exists(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_metadata(self, name): ... + def set_metadata(self, name, value): ... + def update_metadata(self, d): ... + def set_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def get_acl(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_xml_acl(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_xml_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def set_canned_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def get_redirect(self): ... + def set_redirect(self, redirect_location, headers: Optional[Dict[Text, Text]] = ...): ... + def make_public(self, headers: Optional[Dict[Text, Text]] = ...): ... + def generate_url( + self, + expires_in, + method: str = ..., + headers: Optional[Dict[Text, Text]] = ..., + query_auth: bool = ..., + force_http: bool = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + expires_in_absolute: bool = ..., + version_id: Optional[Any] = ..., + policy: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ): ... + def send_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + query_args: Optional[Any] = ..., + chunked_transfer: bool = ..., + size: Optional[Any] = ..., + ): ... + def should_retry(self, response, chunked_transfer: bool = ...): ... + def compute_md5(self, fp, size: Optional[Any] = ...): ... + def set_contents_from_stream( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + reduced_redundancy: bool = ..., + query_args: Optional[Any] = ..., + size: Optional[Any] = ..., + ): ... + def set_contents_from_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + query_args: Optional[Any] = ..., + encrypt_key: bool = ..., + size: Optional[Any] = ..., + rewind: bool = ..., + ): ... + def set_contents_from_filename( + self, + filename, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ): ... + def set_contents_from_string( + self, + string_data: Union[Text, bytes], + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ) -> None: ... + def get_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + override_num_retries: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def get_torrent_file( + self, fp, headers: Optional[Dict[Text, Text]] = ..., cb: Optional[Callable[[int, int], Any]] = ..., num_cb: int = ... + ): ... + def get_contents_to_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + res_download_handler: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def get_contents_to_filename( + self, + filename, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + res_download_handler: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + @overload + def get_contents_as_string( + self, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + encoding: None = ..., + ) -> bytes: ... + @overload + def get_contents_as_string( + self, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + *, encoding: Text, + ) -> Text: ... + def add_email_grant(self, permission, email_address, headers: Optional[Dict[Text, Text]] = ...): ... + def add_user_grant( + self, permission, user_id, headers: Optional[Dict[Text, Text]] = ..., display_name: Optional[Any] = ... + ): ... + def set_remote_metadata(self, metadata_plus, metadata_minus, preserve_acl, headers: Optional[Dict[Text, Text]] = ...): ... + def restore(self, days, headers: Optional[Dict[Text, Text]] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi new file mode 100644 index 0000000..121da16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi @@ -0,0 +1,29 @@ +from typing import Any + +class KeyFile: + key: Any + location: int + closed: bool + softspace: int + mode: str + encoding: str + errors: str + newlines: str + name: Any + def __init__(self, key) -> None: ... + def tell(self): ... + def seek(self, pos, whence: Any = ...): ... + def read(self, size): ... + def close(self): ... + def isatty(self): ... + def getkey(self): ... + def write(self, buf): ... + def fileno(self): ... + def flush(self): ... + def next(self): ... + def readinto(self): ... + def readline(self): ... + def readlines(self): ... + def truncate(self): ... + def writelines(self): ... + def xreadlines(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi new file mode 100644 index 0000000..0b775ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi @@ -0,0 +1,51 @@ +from typing import Any, Optional + +class Rule: + id: Any + prefix: Any + status: Any + expiration: Any + transition: Any + def __init__(self, id: Optional[Any] = ..., prefix: Optional[Any] = ..., status: Optional[Any] = ..., expiration: Optional[Any] = ..., transition: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class Expiration: + days: Any + date: Any + def __init__(self, days: Optional[Any] = ..., date: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class Transition: + days: Any + date: Any + storage_class: Any + def __init__(self, days: Optional[Any] = ..., date: Optional[Any] = ..., storage_class: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class Transitions(list): + transition_properties: int + current_transition_property: int + temp_days: Any + temp_date: Any + temp_storage_class: Any + def __init__(self) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_transition(self, days: Optional[Any] = ..., date: Optional[Any] = ..., storage_class: Optional[Any] = ...): ... + @property + def days(self): ... + @property + def date(self): ... + @property + def storage_class(self): ... + +class Lifecycle(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_rule(self, id: Optional[Any] = ..., prefix: str = ..., status: str = ..., expiration: Optional[Any] = ..., transition: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi new file mode 100644 index 0000000..fa0c8dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi @@ -0,0 +1,27 @@ +from typing import Any, Optional + +class Deleted: + key: Any + version_id: Any + delete_marker: Any + delete_marker_version_id: Any + def __init__(self, key: Optional[Any] = ..., version_id: Optional[Any] = ..., delete_marker: bool = ..., delete_marker_version_id: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class Error: + key: Any + version_id: Any + code: Any + message: Any + def __init__(self, key: Optional[Any] = ..., version_id: Optional[Any] = ..., code: Optional[Any] = ..., message: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class MultiDeleteResult: + bucket: Any + deleted: Any + errors: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi new file mode 100644 index 0000000..8463c4d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi @@ -0,0 +1,49 @@ +from typing import Any, Optional + +class CompleteMultiPartUpload: + bucket: Any + location: Any + bucket_name: Any + key_name: Any + etag: Any + version_id: Any + encrypted: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class Part: + bucket: Any + part_number: Any + last_modified: Any + etag: Any + size: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +def part_lister(mpupload, part_number_marker: Optional[Any] = ...): ... + +class MultiPartUpload: + bucket: Any + bucket_name: Any + key_name: Any + id: Any + initiator: Any + owner: Any + storage_class: Any + initiated: Any + part_number_marker: Any + next_part_number_marker: Any + max_parts: Any + is_truncated: bool + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + def to_xml(self): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def get_all_parts(self, max_parts: Optional[Any] = ..., part_number_marker: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + def upload_part_from_file(self, fp, part_num, headers: Optional[Any] = ..., replace: bool = ..., cb: Optional[Any] = ..., num_cb: int = ..., md5: Optional[Any] = ..., size: Optional[Any] = ...): ... + def copy_part_from_key(self, src_bucket_name, src_key_name, part_num, start: Optional[Any] = ..., end: Optional[Any] = ..., src_version_id: Optional[Any] = ..., headers: Optional[Any] = ...): ... + def complete_upload(self): ... + def cancel_upload(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi new file mode 100644 index 0000000..de8f3a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +class Prefix: + bucket: Any + name: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + @property + def provider(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi new file mode 100644 index 0000000..9dec4e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi @@ -0,0 +1,22 @@ +from typing import Any, Optional + +class Tag: + key: Any + value: Any + def __init__(self, key: Optional[Any] = ..., value: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def __eq__(self, other): ... + +class TagSet(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def add_tag(self, key, value): ... + def to_xml(self): ... + +class Tags(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_tag_set(self, tag_set): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi new file mode 100644 index 0000000..c5cc11c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +class User: + type: Any + id: Any + display_name: Any + def __init__(self, parent: Optional[Any] = ..., id: str = ..., display_name: str = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self, element_name: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi new file mode 100644 index 0000000..2a92866 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi @@ -0,0 +1,62 @@ +from typing import Any, Optional + +def tag(key, value): ... + +class WebsiteConfiguration: + suffix: Any + error_key: Any + redirect_all_requests_to: Any + routing_rules: Any + def __init__(self, suffix: Optional[Any] = ..., error_key: Optional[Any] = ..., redirect_all_requests_to: Optional[Any] = ..., routing_rules: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class _XMLKeyValue: + translator: Any + container: Any + def __init__(self, translator, container: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class RedirectLocation(_XMLKeyValue): + TRANSLATOR: Any + hostname: Any + protocol: Any + def __init__(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class RoutingRules(list): + def add_rule(self, rule): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class RoutingRule: + condition: Any + redirect: Any + def __init__(self, condition: Optional[Any] = ..., redirect: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + @classmethod + def when(cls, key_prefix: Optional[Any] = ..., http_error_code: Optional[Any] = ...): ... + def then_redirect(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ..., replace_key: Optional[Any] = ..., replace_key_prefix: Optional[Any] = ..., http_redirect_code: Optional[Any] = ...): ... + +class Condition(_XMLKeyValue): + TRANSLATOR: Any + key_prefix: Any + http_error_code: Any + def __init__(self, key_prefix: Optional[Any] = ..., http_error_code: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class Redirect(_XMLKeyValue): + TRANSLATOR: Any + hostname: Any + protocol: Any + replace_key: Any + replace_key_prefix: Any + http_redirect_code: Any + def __init__(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ..., replace_key: Optional[Any] = ..., replace_key_prefix: Optional[Any] = ..., http_redirect_code: Optional[Any] = ...) -> None: ... + def to_xml(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi new file mode 100644 index 0000000..6552b0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi @@ -0,0 +1,239 @@ +import datetime +import logging.handlers +import subprocess +import sys +import time + +import boto.connection +from typing import ( + Any, + Callable, + ContextManager, + Dict, + IO, + Iterable, + List, + Mapping, + Optional, + Sequence, + Tuple, + Type, + TypeVar, + Union, +) + +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +if sys.version_info[0] >= 3: + # TODO move _StringIO definition into boto.compat once stubs exist and rename to StringIO + import io + _StringIO = io.StringIO + + from hashlib import _Hash + _HashType = _Hash + + from email.message import Message as _Message +else: + # TODO move _StringIO definition into boto.compat once stubs exist and rename to StringIO + import StringIO + _StringIO = StringIO.StringIO + + from hashlib import _hash + _HashType = _hash + + # TODO use email.message.Message once stubs exist + _Message = Any + +_Provider = Any # TODO replace this with boto.provider.Provider once stubs exist +_LockType = Any # TODO replace this with _thread.LockType once stubs exist + + +JSONDecodeError: Type[ValueError] +qsa_of_interest: List[str] + + +def unquote_v(nv: str) -> Union[str, Tuple[str, str]]: ... +def canonical_string( + method: str, + path: str, + headers: Mapping[str, Optional[str]], + expires: Optional[int] = ..., + provider: Optional[_Provider] = ..., +) -> str: ... +def merge_meta( + headers: Mapping[str, str], + metadata: Mapping[str, str], + provider: Optional[_Provider] = ..., +) -> Mapping[str, str]: ... +def get_aws_metadata( + headers: Mapping[str, str], + provider: Optional[_Provider] = ..., +) -> Mapping[str, str]: ... +def retry_url( + url: str, + retry_on_404: bool = ..., + num_retries: int = ..., + timeout: Optional[int] = ..., +) -> str: ... + +class LazyLoadMetadata(Dict[_KT, _VT]): + def __init__( + self, + url: str, + num_retries: int, + timeout: Optional[int] = ..., + ) -> None: ... + +def get_instance_metadata( + version: str = ..., + url: str = ..., + data: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Optional[LazyLoadMetadata]: ... +def get_instance_identity( + version: str = ..., + url: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Optional[Mapping[str, Any]]: ... +def get_instance_userdata( + version: str = ..., + sep: Optional[str] = ..., + url: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Mapping[str, str]: ... + +ISO8601: str +ISO8601_MS: str +RFC1123: str +LOCALE_LOCK: _LockType + +def setlocale(name: Union[str, Tuple[str, str]]) -> ContextManager[str]: ... +def get_ts(ts: Optional[time.struct_time] = ...) -> str: ... +def parse_ts(ts: str) -> datetime.datetime: ... +def find_class(module_name: str, class_name: Optional[str] = ...) -> Optional[Type[Any]]: ... +def update_dme(username: str, password: str, dme_id: str, ip_address: str) -> str: ... +def fetch_file( + uri: str, + file: Optional[IO[str]] = ..., + username: Optional[str] = ..., + password: Optional[str] = ..., +) -> Optional[IO[str]]: ... + +class ShellCommand: + exit_code: int + command: subprocess._CMD + log_fp: _StringIO + wait: bool + fail_fast: bool + + def __init__( + self, + command: subprocess._CMD, + wait: bool = ..., + fail_fast: bool = ..., + cwd: Optional[subprocess._TXT] = ..., + ) -> None: ... + + process: subprocess.Popen + + def run(self, cwd: Optional[subprocess._CMD] = ...) -> Optional[int]: ... + def setReadOnly(self, value) -> None: ... + def getStatus(self) -> Optional[int]: ... + + status: Optional[int] + + def getOutput(self) -> str: ... + + output: str + +class AuthSMTPHandler(logging.handlers.SMTPHandler): + username: str + password: str + def __init__( + self, + mailhost: str, + username: str, + password: str, + fromaddr: str, + toaddrs: Sequence[str], + subject: str, + ) -> None: ... + +class LRUCache(Dict[_KT, _VT]): + class _Item: + previous: Optional[LRUCache._Item] + next: Optional[LRUCache._Item] + key = ... + value = ... + def __init__(self, key, value) -> None: ... + + _dict: Dict[_KT, LRUCache._Item] + capacity: int + head: Optional[LRUCache._Item] + tail: Optional[LRUCache._Item] + + def __init__(self, capacity: int) -> None: ... + + +# This exists to work around Password.str's name shadowing the str type +_str = str + +class Password: + hashfunc: Callable[[bytes], _HashType] + str: Optional[_str] + + def __init__( + self, + str: Optional[_str] = ..., + hashfunc: Optional[Callable[[bytes], _HashType]] = ..., + ) -> None: ... + def set(self, value: Union[bytes, _str]) -> None: ... + def __eq__(self, other: Any) -> bool: ... + def __len__(self) -> int: ... + +def notify( + subject: str, + body: Optional[str] = ..., + html_body: Optional[Union[Sequence[str], str]] = ..., + to_string: Optional[str] = ..., + attachments: Optional[Iterable[_Message]] = ..., + append_instance_id: bool = ..., +) -> None: ... +def get_utf8_value(value: str) -> bytes: ... +def mklist(value: Any) -> List: ... +def pythonize_name(name: str) -> str: ... +def write_mime_multipart( + content: List[Tuple[str, str]], + compress: bool = ..., + deftype: str = ..., + delimiter: str = ..., +) -> str: ... +def guess_mime_type(content: str, deftype: str) -> str: ... +def compute_md5( + fp: IO[Any], + buf_size: int = ..., + size: Optional[int] = ..., +) -> Tuple[str, str, int]: ... +def compute_hash( + fp: IO[Any], + buf_size: int = ..., + size: Optional[int] = ..., + hash_algorithm: Any = ..., +) -> Tuple[str, str, int]: ... +def find_matching_headers(name: str, headers: Mapping[str, Optional[str]]) -> List[str]: ... +def merge_headers_by_name(name: str, headers: Mapping[str, Optional[str]]) -> str: ... + +class RequestHook: + def handle_request_data( + self, + request: boto.connection.HTTPRequest, + response: boto.connection.HTTPResponse, + error: bool = ..., + ) -> Any: ... + +def host_is_ipv6(hostname: str) -> bool: ... +def parse_host(hostname: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/certifi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/certifi.pyi new file mode 100644 index 0000000..c809e6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/certifi.pyi @@ -0,0 +1,2 @@ +def where() -> str: ... +def old_where() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi new file mode 100644 index 0000000..20bd6e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi @@ -0,0 +1,34 @@ +from typing import Sequence, Callable, Union, Any, Optional, AnyStr, TypeVar, Type + +def with_repr(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def with_cmp(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def with_init(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def immutable(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... + +def strip_leading_underscores(attribute_name: AnyStr) -> AnyStr: ... + +NOTHING = Any + +_T = TypeVar('_T') + +def attributes( + attrs: Sequence[Union[AnyStr, Attribute]], + apply_with_cmp: bool = ..., + apply_with_init: bool = ..., + apply_with_repr: bool = ..., + apply_immutable: bool = ..., + store_attributes: Optional[Callable[[type, Attribute], Any]] = ..., + **kw: Optional[dict]) -> Callable[[Type[_T]], Type[_T]]: ... + +class Attribute: + def __init__( + self, + name: AnyStr, + exclude_from_cmp: bool = ..., + exclude_from_init: bool = ..., + exclude_from_repr: bool = ..., + exclude_from_immutable: bool = ..., + default_value: Any = ..., + default_factory: Optional[Callable[[None], Any]] = ..., + instance_of: Optional[Any] = ..., + init_aliaser: Optional[Callable[[AnyStr], AnyStr]] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi new file mode 100644 index 0000000..4733c6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +""" + click + ~~~~~ + + Click is a simple Python module that wraps the stdlib's optparse to make + writing command line scripts fun. Unlike other modules, it's based around + a simple API that does not come with too much magic and is composable. + + In case optparse ever gets removed from the stdlib, it will be shipped by + this module. + + :copyright: (c) 2014 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +# Core classes +from .core import ( + Context as Context, + BaseCommand as BaseCommand, + Command as Command, + MultiCommand as MultiCommand, + Group as Group, + CommandCollection as CommandCollection, + Parameter as Parameter, + Option as Option, + Argument as Argument, +) + +# Globals +from .globals import get_current_context as get_current_context + +# Decorators +from .decorators import ( + pass_context as pass_context, + pass_obj as pass_obj, + make_pass_decorator as make_pass_decorator, + command as command, + group as group, + argument as argument, + option as option, + confirmation_option as confirmation_option, + password_option as password_option, + version_option as version_option, + help_option as help_option, +) + +# Types +from .types import ( + ParamType as ParamType, + File as File, + Path as Path, + Choice as Choice, + IntRange as IntRange, + Tuple as Tuple, + STRING as STRING, + INT as INT, + FLOAT as FLOAT, + BOOL as BOOL, + UUID as UUID, + UNPROCESSED as UNPROCESSED, +) + +# Utilities +from .utils import ( + echo as echo, + get_binary_stream as get_binary_stream, + get_text_stream as get_text_stream, + open_file as open_file, + format_filename as format_filename, + get_app_dir as get_app_dir, + get_os_args as get_os_args, +) + +# Terminal functions +from .termui import ( + prompt as prompt, + confirm as confirm, + get_terminal_size as get_terminal_size, + echo_via_pager as echo_via_pager, + progressbar as progressbar, + clear as clear, + style as style, + unstyle as unstyle, + secho as secho, + edit as edit, + launch as launch, + getchar as getchar, + pause as pause, +) + +# Exceptions +from .exceptions import ( + ClickException as ClickException, + UsageError as UsageError, + BadParameter as BadParameter, + FileError as FileError, + Abort as Abort, + NoSuchOption as NoSuchOption, + BadOptionUsage as BadOptionUsage, + BadArgumentUsage as BadArgumentUsage, + MissingParameter as MissingParameter, +) + +# Formatting +from .formatting import HelpFormatter as HelpFormatter, wrap_text as wrap_text + +# Parsing +from .parser import OptionParser as OptionParser + +# Controls if click should emit the warning about the use of unicode +# literals. +disable_unicode_literals_warning: bool + + +__version__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi new file mode 100644 index 0000000..f938c1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi @@ -0,0 +1,14 @@ +from typing import ContextManager, Iterator, Generic, TypeVar, Optional + +_T = TypeVar("_T") + +class ProgressBar(object, Generic[_T]): + def update(self, n_steps: int) -> None: ... + def finish(self) -> None: ... + def __enter__(self) -> ProgressBar[_T]: ... + def __exit__(self, exc_type, exc_value, tb) -> None: ... + def __iter__(self) -> ProgressBar[_T]: ... + def next(self) -> _T: ... + def __next__(self) -> _T: ... + length: Optional[int] + label: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/core.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/core.pyi new file mode 100644 index 0000000..2cc32f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/core.pyi @@ -0,0 +1,474 @@ +from typing import ( + Any, + Callable, + ContextManager, + Dict, + Generator, + Iterable, + List, + Mapping, + NoReturn, + Optional, + Sequence, + Set, + Tuple, + TypeVar, + Union, +) + +from click.formatting import HelpFormatter +from click.parser import OptionParser + +def invoke_param_callback( + callback: Callable[[Context, Parameter, Optional[str]], Any], + ctx: Context, + param: Parameter, + value: Optional[str] +) -> Any: + ... + + +def augment_usage_errors( + ctx: Context, param: Optional[Parameter] = ... +) -> ContextManager[None]: + ... + + +def iter_params_for_processing( + invocation_order: Sequence[Parameter], + declaration_order: Iterable[Parameter], +) -> Iterable[Parameter]: + ... + + +class Context: + parent: Optional[Context] + command: Command + info_name: Optional[str] + params: Dict + args: List[str] + protected_args: List[str] + obj: Any + default_map: Mapping[str, Any] + invoked_subcommand: Optional[str] + terminal_width: Optional[int] + max_content_width: Optional[int] + allow_extra_args: bool + allow_interspersed_args: bool + ignore_unknown_options: bool + help_option_names: List[str] + token_normalize_func: Optional[Callable[[str], str]] + resilient_parsing: bool + auto_envvar_prefix: Optional[str] + color: Optional[bool] + _meta: Dict[str, Any] + _close_callbacks: List + _depth: int + + # properties + meta: Dict[str, Any] + command_path: str + + def __init__( + self, + command: Command, + parent: Optional[Context] = ..., + info_name: Optional[str] = ..., + obj: Optional[Any] = ..., + auto_envvar_prefix: Optional[str] = ..., + default_map: Optional[Mapping[str, Any]] = ..., + terminal_width: Optional[int] = ..., + max_content_width: Optional[int] = ..., + resilient_parsing: bool = ..., + allow_extra_args: Optional[bool] = ..., + allow_interspersed_args: Optional[bool] = ..., + ignore_unknown_options: Optional[bool] = ..., + help_option_names: Optional[List[str]] = ..., + token_normalize_func: Optional[Callable[[str], str]] = ..., + color: Optional[bool] = ... + ) -> None: + ... + + def scope(self, cleanup: bool = ...) -> ContextManager[Context]: + ... + + def make_formatter(self) -> HelpFormatter: + ... + + def call_on_close(self, f: Callable) -> Callable: + ... + + def close(self) -> None: + ... + + def find_root(self) -> Context: + ... + + def find_object(self, object_type: type) -> Any: + ... + + def ensure_object(self, object_type: type) -> Any: + ... + + def lookup_default(self, name: str) -> Any: + ... + + def fail(self, message: str) -> NoReturn: + ... + + def abort(self) -> NoReturn: + ... + + def exit(self, code: Union[int, str] = ...) -> NoReturn: + ... + + def get_usage(self) -> str: + ... + + def get_help(self) -> str: + ... + + def invoke( + self, callback: Union[Command, Callable], *args, **kwargs + ) -> Any: + ... + + def forward( + self, callback: Union[Command, Callable], *args, **kwargs + ) -> Any: + ... + +class BaseCommand: + allow_extra_args: bool + allow_interspersed_args: bool + ignore_unknown_options: bool + name: str + context_settings: Dict + + def __init__(self, name: str, context_settings: Optional[Dict] = ...) -> None: + ... + + def get_usage(self, ctx: Context) -> str: + ... + + def get_help(self, ctx: Context) -> str: + ... + + def make_context( + self, info_name: str, args: List[str], parent: Optional[Context] = ..., **extra + ) -> Context: + ... + + def parse_args(self, ctx: Context, args: List[str]) -> List[str]: + ... + + def invoke(self, ctx: Context) -> Any: + ... + + def main( + self, + args: Optional[List[str]] = ..., + prog_name: Optional[str] = ..., + complete_var: Optional[str] = ..., + standalone_mode: bool = ..., + **extra + ) -> Any: + ... + + def __call__(self, *args, **kwargs) -> Any: + ... + + +class Command(BaseCommand): + callback: Optional[Callable] + params: List[Parameter] + help: Optional[str] + epilog: Optional[str] + short_help: Optional[str] + options_metavar: str + add_help_option: bool + hidden: bool + deprecated: bool + + def __init__( + self, + name: str, + context_settings: Optional[Dict] = ..., + callback: Optional[Callable] = ..., + params: Optional[List[Parameter]] = ..., + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., + ) -> None: + ... + + def get_params(self, ctx: Context) -> List[Parameter]: + ... + + def format_usage( + self, + ctx: Context, + formatter: HelpFormatter + ) -> None: + ... + + def collect_usage_pieces(self, ctx: Context) -> List[str]: + ... + + def get_help_option_names(self, ctx: Context) -> Set[str]: + ... + + def get_help_option(self, ctx: Context) -> Optional[Option]: + ... + + def make_parser(self, ctx: Context) -> OptionParser: + ... + + def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) + + +class MultiCommand(Command): + no_args_is_help: bool + invoke_without_command: bool + subcommand_metavar: str + chain: bool + result_callback: Callable + + def __init__( + self, + name: Optional[str] = ..., + invoke_without_command: bool = ..., + no_args_is_help: Optional[bool] = ..., + subcommand_metavar: Optional[str] = ..., + chain: bool = ..., + result_callback: Optional[Callable] = ..., + **attrs + ) -> None: + ... + + def resultcallback( + self, replace: bool = ... + ) -> Callable[[_F], _F]: + ... + + def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def resolve_command( + self, ctx: Context, args: List[str] + ) -> Tuple[str, Command, List[str]]: + ... + + def get_command(self, ctx: Context, cmd_name: str) -> Optional[Command]: + ... + + def list_commands(self, ctx: Context) -> Iterable[str]: + ... + + +class Group(MultiCommand): + commands: Dict[str, Command] + + def __init__( + self, name: Optional[str] = ..., commands: Optional[Dict[str, Command]] = ..., **attrs + ) -> None: + ... + + def add_command(self, cmd: Command, name: Optional[str] = ...): + ... + + def command(self, *args, **kwargs) -> Callable[[Callable], Command]: + ... + + def group(self, *args, **kwargs) -> Callable[[Callable], Group]: + ... + + +class CommandCollection(MultiCommand): + sources: List[MultiCommand] + + def __init__( + self, name: Optional[str] = ..., sources: Optional[List[MultiCommand]] = ..., **attrs + ) -> None: + ... + + def add_source(self, multi_cmd: MultiCommand) -> None: + ... + + +class _ParamType: + name: str + is_composite: bool + envvar_list_splitter: Optional[str] + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> Any: + ... + + def get_metavar(self, param: Parameter) -> str: + ... + + def get_missing_message(self, param: Parameter) -> str: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> Any: + ... + + def split_envvar_value(self, rv: str) -> List[str]: + ... + + def fail(self, message: str, param: Optional[Parameter] = ..., ctx: Optional[Context] = ...) -> None: + ... + + +# This type is here to resolve https://github.com/python/mypy/issues/5275 +_ConvertibleType = Union[type, _ParamType, Tuple[type, ...], Callable[[str], Any], Callable[[Optional[str]], Any]] + + +class Parameter: + param_type_name: str + name: str + opts: List[str] + secondary_opts: List[str] + type: _ParamType + required: bool + callback: Optional[Callable[[Context, Parameter, str], Any]] + nargs: int + multiple: bool + expose_value: bool + default: Any + is_eager: bool + metavar: Optional[str] + envvar: Union[str, List[str], None] + # properties + human_readable_name: str + + def __init__( + self, + param_decls: Optional[List[str]] = ..., + type: Optional[_ConvertibleType] = ..., + required: bool = ..., + default: Optional[Any] = ..., + callback: Optional[Callable[[Context, Parameter, str], Any]] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... + ) -> None: + ... + + def make_metavar(self) -> str: + ... + + def get_default(self, ctx: Context) -> Any: + ... + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + ... + + def consume_value(self, ctx: Context, opts: Dict[str, Any]) -> Any: + ... + + def type_cast_value(self, ctx: Context, value: Any) -> Any: + ... + + def process_value(self, ctx: Context, value: Any) -> Any: + ... + + def value_is_missing(self, value: Any) -> bool: + ... + + def full_process_value(self, ctx: Context, value: Any) -> Any: + ... + + def resolve_envvar_value(self, ctx: Context) -> str: + ... + + def value_from_envvar(self, ctx: Context) -> Union[str, List[str]]: + ... + + def handle_parse_result( + self, ctx: Context, opts: Dict[str, Any], args: List[str] + ) -> Tuple[Any, List[str]]: + ... + + def get_help_record(self, ctx: Context) -> Tuple[str, str]: + ... + + def get_usage_pieces(self, ctx: Context) -> List[str]: + ... + + +class Option(Parameter): + prompt: str # sic + confirmation_prompt: bool + hide_input: bool + is_flag: bool + flag_value: Any + is_bool_flag: bool + count: bool + multiple: bool + allow_from_autoenv: bool + help: Optional[str] + show_default: bool + show_choices: bool + + def __init__( + self, + param_decls: Optional[List[str]] = ..., + show_default: bool = ..., + prompt: Union[bool, str] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + **attrs + ) -> None: + ... + + def prompt_for_value(self, ctx: Context) -> Any: + ... + + +class Argument(Parameter): + def __init__( + self, + param_decls: Optional[List[str]] = ..., + required: Optional[bool] = ..., + **attrs + ) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi new file mode 100644 index 0000000..44f4ad7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi @@ -0,0 +1,336 @@ +from distutils.version import Version +from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, Union, Text, overload + +from click.core import Command, Group, Argument, Option, Parameter, Context, _ConvertibleType + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) + +# Until https://github.com/python/mypy/issues/3924 is fixed you can't do the following: +# _Decorator = Callable[[_F], _F] + +_Callback = Callable[ + [Context, Union[Option, Parameter], Any], + Any +] + +def pass_context(_T) -> _T: + ... + + +def pass_obj(_T) -> _T: + ... + + +def make_pass_decorator( + object_type: type, ensure: bool = ... +) -> Callable[[_T], _T]: + ... + + +# NOTE: Decorators below have **attrs converted to concrete constructor +# arguments from core.pyi to help with type checking. + +def command( + name: Optional[str] = ..., + cls: Optional[Type[Command]] = ..., + # Command + context_settings: Optional[Dict] = ..., + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., +) -> Callable[[Callable], Command]: + ... + + +# This inherits attrs from Group, MultiCommand and Command. + +def group( + name: Optional[str] = ..., + cls: Type[Command] = ..., + # Group + commands: Optional[Dict[str, Command]] = ..., + # MultiCommand + invoke_without_command: bool = ..., + no_args_is_help: Optional[bool] = ..., + subcommand_metavar: Optional[str] = ..., + chain: bool = ..., + result_callback: Optional[Callable] = ..., + # Command + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., + # User-defined + **kwargs: Any, +) -> Callable[[Callable], Group]: + ... + + +def argument( + *param_decls: str, + cls: Type[Argument] = ..., + # Argument + required: Optional[bool] = ..., + # Parameter + type: Optional[_ConvertibleType] = ..., + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + autocompletion: Optional[Callable[[Any, List[str], str], List[Union[str, Tuple[str, str]]]]] = ..., +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: _T = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Optional[Callable[[Context, Union[Option, Parameter], Union[bool, int, str]], _T]] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Type[str] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Callable[[Context, Union[Option, Parameter], str], Any] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Type[int] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Callable[[Context, Union[Option, Parameter], int], Any] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +def confirmation_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def password_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def version_option( + version: Optional[Union[str, Version]] = ..., + *param_decls: str, + cls: Type[Option] = ..., + # Option + prog_name: Optional[str] = ..., + message: Optional[str] = ..., + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def help_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi new file mode 100644 index 0000000..7e081be --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi @@ -0,0 +1,96 @@ +from typing import IO, List, Optional, Any + +from click.core import Context, Parameter + + +class ClickException(Exception): + exit_code: int + message: str + + def __init__(self, message: str) -> None: + ... + + def format_message(self) -> str: + ... + + def show(self, file: Optional[Any] = ...) -> None: + ... + + +class UsageError(ClickException): + ctx: Optional[Context] + + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + def show(self, file: Optional[IO] = ...) -> None: + ... + + +class BadParameter(UsageError): + param: Optional[Parameter] + param_hint: Optional[str] + + def __init__( + self, + message: str, + ctx: Optional[Context] = ..., + param: Optional[Parameter] = ..., + param_hint: Optional[str] = ... + ) -> None: + ... + + +class MissingParameter(BadParameter): + param_type: str # valid values: 'parameter', 'option', 'argument' + + def __init__( + self, + message: Optional[str] = ..., + ctx: Optional[Context] = ..., + param: Optional[Parameter] = ..., + param_hint: Optional[str] = ..., + param_type: Optional[str] = ... + ) -> None: + ... + + +class NoSuchOption(UsageError): + option_name: str + possibilities: Optional[List[str]] + + def __init__( + self, + option_name: str, + message: Optional[str] = ..., + possibilities: Optional[List[str]] = ..., + ctx: Optional[Context] = ... + ) -> None: + ... + + +class BadOptionUsage(UsageError): + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + +class BadArgumentUsage(UsageError): + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + +class FileError(ClickException): + ui_filename: str + filename: str + + def __init__(self, filename: str, hint: Optional[str] = ...) -> None: + ... + + +class Abort(RuntimeError): + ... + + +class Exit(RuntimeError): + def __init__(self, code: int = ...) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi new file mode 100644 index 0000000..bcd3048 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi @@ -0,0 +1,86 @@ +from typing import ContextManager, Generator, Iterable, List, Optional, Tuple + + +FORCED_WIDTH: Optional[int] + + +def measure_table(rows: Iterable[Iterable[str]]) -> Tuple[int, ...]: + ... + + +def iter_rows( + rows: Iterable[Iterable[str]], col_count: int +) -> Generator[Tuple[str, ...], None, None]: + ... + + +def wrap_text( + text: str, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + preserve_paragraphs: bool = ... +) -> str: + ... + + +class HelpFormatter: + indent_increment: int + width: Optional[int] + current_indent: int + buffer: List[str] + + def __init__( + self, + indent_increment: int = ..., + width: Optional[int] = ..., + max_width: Optional[int] = ..., + ) -> None: + ... + + def write(self, string: str) -> None: + ... + + def indent(self) -> None: + ... + + def dedent(self) -> None: + ... + + def write_usage( + self, + prog: str, + args: str = ..., + prefix: str = ..., + ): + ... + + def write_heading(self, heading: str) -> None: + ... + + def write_paragraph(self) -> None: + ... + + def write_text(self, text: str) -> None: + ... + + def write_dl( + self, + rows: Iterable[Iterable[str]], + col_max: int = ..., + col_spacing: int = ..., + ) -> None: + ... + + def section(self, name) -> ContextManager[None]: + ... + + def indentation(self) -> ContextManager[None]: + ... + + def getvalue(self) -> str: + ... + + +def join_options(options: List[str]) -> Tuple[str, bool]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi new file mode 100644 index 0000000..11adce3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi @@ -0,0 +1,18 @@ +from click.core import Context +from typing import Optional + + +def get_current_context(silent: bool = ...) -> Context: + ... + + +def push_context(ctx: Context) -> None: + ... + + +def pop_context() -> None: + ... + + +def resolve_color_default(color: Optional[bool] = ...) -> Optional[bool]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi new file mode 100644 index 0000000..f5869a2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi @@ -0,0 +1,102 @@ +from typing import Any, Dict, Iterable, List, Optional, Set, Tuple + +from click.core import Context + + +def _unpack_args( + args: Iterable[str], nargs_spec: Iterable[int] +) -> Tuple[Tuple[Optional[Tuple[str, ...]], ...], List[str]]: + ... + + +def split_opt(opt: str) -> Tuple[str, str]: + ... + + +def normalize_opt(opt: str, ctx: Context) -> str: + ... + + +def split_arg_string(string: str) -> List[str]: + ... + + +class Option: + dest: str + action: str + nargs: int + const: Any + obj: Any + prefixes: Set[str] + _short_opts: List[str] + _long_opts: List[str] + # properties + takes_value: bool + + def __init__( + self, + opts: Iterable[str], + dest: str, + action: Optional[str] = ..., + nargs: int = ..., + const: Optional[Any] = ..., + obj: Optional[Any] = ... + ) -> None: + ... + + def process(self, value: Any, state: ParsingState) -> None: + ... + + +class Argument: + dest: str + nargs: int + obj: Any + + def __init__(self, dest: str, nargs: int = ..., obj: Optional[Any] = ...) -> None: + ... + + def process(self, value: Any, state: ParsingState) -> None: + ... + + +class ParsingState: + opts: Dict[str, Any] + largs: List[str] + rargs: List[str] + order: List[Any] + + def __init__(self, rargs: List[str]) -> None: + ... + + +class OptionParser: + ctx: Optional[Context] + allow_interspersed_args: bool + ignore_unknown_options: bool + _short_opt: Dict[str, Option] + _long_opt: Dict[str, Option] + _opt_prefixes: Set[str] + _args: List[Argument] + + def __init__(self, ctx: Optional[Context] = ...) -> None: + ... + + def add_option( + self, + opts: Iterable[str], + dest: str, + action: Optional[str] = ..., + nargs: int = ..., + const: Optional[Any] = ..., + obj: Optional[Any] = ... + ) -> None: + ... + + def add_argument(self, dest: str, nargs: int = ..., obj: Optional[Any] = ...) -> None: + ... + + def parse_args( + self, args: List[str] + ) -> Tuple[Dict[str, Any], List[str], List[Any]]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi new file mode 100644 index 0000000..95b6850 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi @@ -0,0 +1,169 @@ +from typing import ( + Any, + Callable, + Generator, + Iterable, + IO, + List, + Optional, + Text, + overload, + Tuple, + TypeVar, +) + +from click.core import _ConvertibleType +from click._termui_impl import ProgressBar as _ProgressBar + + +def hidden_prompt_func(prompt: str) -> str: + ... + + +def _build_prompt( + text: str, + suffix: str, + show_default: bool = ..., + default: Optional[str] = ..., +) -> str: + ... + + +def prompt( + text: str, + default: Optional[str] = ..., + hide_input: bool = ..., + confirmation_prompt: bool = ..., + type: Optional[_ConvertibleType] = ..., + value_proc: Optional[Callable[[Optional[str]], Any]] = ..., + prompt_suffix: str = ..., + show_default: bool = ..., + err: bool = ..., + show_choices: bool = ..., +) -> Any: + ... + + +def confirm( + text: str, + default: bool = ..., + abort: bool = ..., + prompt_suffix: str = ..., + show_default: bool = ..., + err: bool = ..., +) -> bool: + ... + + +def get_terminal_size() -> Tuple[int, int]: + ... + + +def echo_via_pager(text: str, color: Optional[bool] = ...) -> None: + ... + + +_T = TypeVar('_T') + +@overload +def progressbar( + iterable: Iterable[_T], + length: Optional[int] = ..., + label: Optional[str] = ..., + show_eta: bool = ..., + show_percent: Optional[bool] = ..., + show_pos: bool = ..., + item_show_func: Optional[Callable[[_T], str]] = ..., + fill_char: str = ..., + empty_char: str = ..., + bar_template: str = ..., + info_sep: str = ..., + width: int = ..., + file: Optional[IO] = ..., + color: Optional[bool] = ..., +) -> _ProgressBar[_T]: + ... + +@overload +def progressbar( + iterable: None = ..., + length: Optional[int] = ..., + label: Optional[str] = ..., + show_eta: bool = ..., + show_percent: Optional[bool] = ..., + show_pos: bool = ..., + item_show_func: Optional[Callable[[_T], str]] = ..., + fill_char: str = ..., + empty_char: str = ..., + bar_template: str = ..., + info_sep: str = ..., + width: int = ..., + file: Optional[IO] = ..., + color: Optional[bool] = ..., +) -> _ProgressBar[int]: + ... + +def clear() -> None: + ... + + +def style( + text: str, + fg: Optional[str] = ..., + bg: Optional[str] = ..., + bold: Optional[bool] = ..., + dim: Optional[bool] = ..., + underline: Optional[bool] = ..., + blink: Optional[bool] = ..., + reverse: Optional[bool] = ..., + reset: bool = ..., +) -> str: + ... + + +def unstyle(text: str) -> str: + ... + + +# Styling options copied from style() for nicer type checking. +def secho( + text: str, + file: Optional[IO] = ..., + nl: bool = ..., + err: bool = ..., + color: Optional[bool] = ..., + fg: Optional[str] = ..., + bg: Optional[str] = ..., + bold: Optional[bool] = ..., + dim: Optional[bool] = ..., + underline: Optional[bool] = ..., + blink: Optional[bool] = ..., + reverse: Optional[bool] = ..., + reset: bool = ..., +): + ... + + +def edit( + text: Optional[str] = ..., + editor: Optional[str] = ..., + env: Optional[str] = ..., + require_save: bool = ..., + extension: str = ..., + filename: Optional[str] = ..., +) -> str: + ... + + +def launch(url: str, wait: bool = ..., locate: bool = ...) -> int: + ... + + +def getchar(echo: bool = ...) -> Text: + ... + + +def pause( + info: str = ..., err: bool = ... +) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi new file mode 100644 index 0000000..c743516 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi @@ -0,0 +1,63 @@ +from typing import (IO, Any, BinaryIO, ContextManager, Dict, Iterable, List, + Mapping, Optional, Text, Tuple, Union) + +from .core import BaseCommand + +clickpkg: Any + +class EchoingStdin: + def __init__(self, input: BinaryIO, output: BinaryIO) -> None: ... + def __getattr__(self, x: str) -> Any: ... + def read(self, n: int = ...) -> bytes: ... + def readline(self, n: int = ...) -> bytes: ... + def readlines(self) -> List[bytes]: ... + def __iter__(self) -> Iterable[bytes]: ... + +def make_input_stream(input: Optional[Union[bytes, Text, IO]], charset: Text) -> BinaryIO: ... + +class Result: + runner: CliRunner + exit_code: int + exception: Any + exc_info: Optional[Any] + def __init__( + self, + runner: CliRunner, + exit_code: int, + exception: Any, + exc_info: Optional[Any] = ..., + ) -> None: ... + @property + def output(self) -> Text: ... + +class CliRunner: + charset: str + env: Mapping[str, str] + echo_stdin: bool + def __init__( + self, + charset: Optional[Text] = ..., + env: Optional[Mapping[str, str]] = ..., + echo_stdin: bool = ..., + ) -> None: + ... + def get_default_prog_name(self, cli: BaseCommand) -> str: ... + def make_env(self, overrides: Optional[Mapping[str, str]] = ...) -> Dict[str, str]: ... + def isolation( + self, + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + color: bool = ..., + ) -> ContextManager[BinaryIO]: ... + def invoke( + self, + cli: BaseCommand, + args: Optional[Union[str, Iterable[str]]] = ..., + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + catch_exceptions: bool = ..., + color: bool = ..., + **extra: Any, + ) -> Result: + ... + def isolated_filesystem(self) -> ContextManager[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/types.pyi new file mode 100644 index 0000000..7f1e0ba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/types.pyi @@ -0,0 +1,269 @@ +from typing import Any, Callable, IO, Iterable, List, Optional, TypeVar, Union, Tuple as _PyTuple, Type +import datetime +import uuid + +from click.core import Context, Parameter, _ParamType as ParamType, _ConvertibleType + +class BoolParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> bool: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> bool: + ... + + +class CompositeParamType(ParamType): + arity: int + + +class Choice(ParamType): + choices: Iterable[str] + def __init__( + self, + choices: Iterable[str], + case_sensitive: bool = ..., + ) -> None: + ... + + +class DateTime(ParamType): + def __init__( + self, + formats: Optional[List[str]] = ..., + ) -> None: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> datetime.datetime: + ... + + +class FloatParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> float: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> float: + ... + + +class FloatRange(FloatParamType): + ... + + +class File(ParamType): + def __init__( + self, + mode: str = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + lazy: Optional[bool] = ..., + atomic: Optional[bool] = ..., + ) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> IO: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> IO: + ... + + def resolve_lazy_flag(self, value: str) -> bool: + ... + + +_F = TypeVar('_F') # result of the function +_Func = Callable[[Optional[str]], _F] + + +class FuncParamType(ParamType): + func: _Func + + def __init__(self, func: _Func) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> _F: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> _F: + ... + + +class IntParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> int: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> int: + ... + + +class IntRange(IntParamType): + def __init__( + self, min: Optional[int] = ..., max: Optional[int] = ..., clamp: bool = ... + ) -> None: + ... + + +_PathType = TypeVar('_PathType', str, bytes) + + +class Path(ParamType): + def __init__( + self, + exists: bool = ..., + file_okay: bool = ..., + dir_okay: bool = ..., + writable: bool = ..., + readable: bool = ..., + resolve_path: bool = ..., + allow_dash: bool = ..., + path_type: Optional[Type[_PathType]] = ..., + ) -> None: + ... + + def coerce_path_result(self, rv: Union[str, bytes]) -> _PathType: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> _PathType: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> _PathType: + ... + +class StringParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> str: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> str: + ... + + +class Tuple(CompositeParamType): + types: List[ParamType] + + def __init__(self, types: Iterable[Any]) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> Tuple: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> Tuple: + ... + + +class UnprocessedParamType(ParamType): + ... + + +class UUIDParameterType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> uuid.UUID: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> uuid.UUID: + ... + + +def convert_type(ty: Optional[_ConvertibleType], default: Optional[Any] = ...) -> ParamType: + ... + +# parameter type shortcuts + +BOOL: BoolParamType +FLOAT: FloatParamType +INT: IntParamType +STRING: StringParamType +UNPROCESSED: UnprocessedParamType +UUID: UUIDParameterType diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi new file mode 100644 index 0000000..547c5e8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi @@ -0,0 +1,116 @@ +from typing import Any, Callable, Iterator, IO, List, Optional, TypeVar, Union, Text + +_T = TypeVar('_T') + + +def _posixify(name: str) -> str: + ... + + +def safecall(func: _T) -> _T: + ... + + +def make_str(value: Any) -> str: + ... + + +def make_default_short_help(help: str, max_length: int = ...): + ... + + +class LazyFile: + name: str + mode: str + encoding: Optional[str] + errors: str + atomic: bool + + def __init__( + self, + filename: str, + mode: str = ..., + encoding: Optional[str] = ..., + errors: str = ..., + atomic: bool = ... + ) -> None: + ... + + def open(self) -> IO: + ... + + def close(self) -> None: + ... + + def close_intelligently(self) -> None: + ... + + def __enter__(self) -> LazyFile: + ... + + def __exit__(self, exc_type, exc_value, tb): + ... + + def __iter__(self) -> Iterator: + ... + + +class KeepOpenFile: + _file: IO + + def __init__(self, file: IO) -> None: + ... + + def __enter__(self) -> KeepOpenFile: + ... + + def __exit__(self, exc_type, exc_value, tb): + ... + + def __iter__(self) -> Iterator: + ... + + +def echo( + message: object = ..., + file: Optional[IO] = ..., + nl: bool = ..., + err: bool = ..., + color: Optional[bool] = ..., +) -> None: + ... + + +def get_binary_stream(name: str) -> IO[bytes]: + ... + + +def get_text_stream( + name: str, encoding: Optional[str] = ..., errors: str = ... +) -> IO[str]: + ... + + +def open_file( + filename: str, + mode: str = ..., + encoding: Optional[str] = ..., + errors: str = ..., + lazy: bool = ..., + atomic: bool = ... +) -> Union[IO, LazyFile, KeepOpenFile]: + ... + + +def get_os_args() -> List[str]: + ... + + +def format_filename(filename: str, shorten: bool = ...) -> str: + ... + + +def get_app_dir( + app_name: str, roaming: bool = ..., force_posix: bool = ... +) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/croniter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/croniter.pyi new file mode 100644 index 0000000..0d01b7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/croniter.pyi @@ -0,0 +1,41 @@ +import datetime +from typing import Any, Dict, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union + +_RetType = Union[Type[float], Type[datetime.datetime]] +_SelfT = TypeVar('_SelfT', bound=croniter) + +class CroniterError(ValueError): ... +class CroniterBadCronError(CroniterError): ... +class CroniterBadDateError(CroniterError): ... +class CroniterNotAlphaError(CroniterError): ... + +class croniter(Iterator[Any]): + MONTHS_IN_YEAR: int + RANGES: Tuple[Tuple[int, int], ...] + DAYS: Tuple[int, ...] + ALPHACONV: Tuple[Dict[str, Any], ...] + LOWMAP: Tuple[Dict[int, Any], ...] + bad_length: str + tzinfo: Optional[datetime.tzinfo] + cur: float + expanded: List[List[str]] + start_time: float + dst_start_time: float + nth_weekday_of_month: Dict[str, Any] + def __init__(self, expr_format: Text, start_time: Optional[Union[float, datetime.datetime]] = ..., ret_type: Optional[_RetType] = ...) -> None: ... + # Most return value depend on ret_type, which can be passed in both as a method argument and as + # a constructor argument. + def get_next(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def get_prev(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def get_current(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def __iter__(self: _SelfT) -> _SelfT: ... + def __next__(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def next(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def all_next(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def all_prev(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def iter(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def is_leap(self, year: int) -> bool: ... + @classmethod + def expand(cls, expr_format: Text) -> Tuple[List[List[str]], Dict[str, Any]]: ... + @classmethod + def is_valid(cls, expression: Text) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi new file mode 100644 index 0000000..1311a17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi @@ -0,0 +1,15 @@ +from typing import Optional + +class weekday(object): + def __init__(self, weekday: int, n: Optional[int] = ...) -> None: ... + + def __call__(self, n: int) -> weekday: ... + + def __eq__(self, other) -> bool: ... + + def __repr__(self) -> str: ... + + def __hash__(self) -> int: ... + + weekday: int + n: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi new file mode 100644 index 0000000..045a793 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi @@ -0,0 +1,46 @@ +from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict, Mapping, Text +from datetime import datetime, tzinfo + +_FileOrStr = Union[bytes, Text, IO[str], IO[Any]] + + +class parserinfo(object): + JUMP: List[str] + WEEKDAYS: List[Tuple[str, str]] + MONTHS: List[Tuple[str, str]] + HMS: List[Tuple[str, str, str]] + AMPM: List[Tuple[str, str]] + UTCZONE: List[str] + PERTAIN: List[str] + TZOFFSET: Dict[str, int] + + def __init__(self, dayfirst: bool = ..., yearfirst: bool = ...) -> None: ... + def jump(self, name: Text) -> bool: ... + def weekday(self, name: Text) -> Optional[int]: ... + def month(self, name: Text) -> Optional[int]: ... + def hms(self, name: Text) -> Optional[int]: ... + def ampm(self, name: Text) -> Optional[int]: ... + def pertain(self, name: Text) -> bool: ... + def utczone(self, name: Text) -> bool: ... + def tzoffset(self, name: Text) -> Optional[int]: ... + def convertyear(self, year: int) -> int: ... + def validate(self, res: datetime) -> bool: ... + +class parser(object): + def __init__(self, info: Optional[parserinfo] = ...) -> None: ... + def parse(self, timestr: _FileOrStr, + default: Optional[datetime] = ..., + ignoretz: bool = ..., tzinfos: Optional[Mapping[Text, tzinfo]] = ..., + **kwargs: Any) -> datetime: ... + +def isoparse(dt_str: Union[str, bytes, IO[str], IO[bytes]]) -> datetime: ... + +DEFAULTPARSER: parser +def parse(timestr: _FileOrStr, parserinfo: Optional[parserinfo] = ..., **kwargs: Any) -> datetime: ... +class _tzparser: ... + +DEFAULTTZPARSER: _tzparser + +class InvalidDatetimeError(ValueError): ... +class InvalidDateError(InvalidDatetimeError): ... +class InvalidTimeError(InvalidDatetimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi new file mode 100644 index 0000000..40ee586 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi @@ -0,0 +1,91 @@ +from typing import overload, Any, List, Optional, SupportsFloat, TypeVar, Union +from datetime import date, datetime, timedelta + +from ._common import weekday + + +_SelfT = TypeVar('_SelfT', bound=relativedelta) +_DateT = TypeVar('_DateT', date, datetime) +# Work around attribute and type having the same name. +_weekday = weekday + +MO: weekday +TU: weekday +WE: weekday +TH: weekday +FR: weekday +SA: weekday +SU: weekday + + +class relativedelta(object): + years: int + months: int + days: int + leapdays: int + hours: int + minutes: int + seconds: int + microseconds: int + year: Optional[int] + month: Optional[int] + weekday: Optional[_weekday] + day: Optional[int] + hour: Optional[int] + minute: Optional[int] + second: Optional[int] + microsecond: Optional[int] + def __init__(self, + dt1: Optional[date] = ..., + dt2: Optional[date] = ..., + years: Optional[int] = ..., months: Optional[int] = ..., + days: Optional[int] = ..., leapdays: Optional[int] = ..., + weeks: Optional[int] = ..., + hours: Optional[int] = ..., minutes: Optional[int] = ..., + seconds: Optional[int] = ..., microseconds: Optional[int] = ..., + year: Optional[int] = ..., month: Optional[int] = ..., + day: Optional[int] = ..., + weekday: Optional[Union[int, _weekday]] = ..., + yearday: Optional[int] = ..., + nlyearday: Optional[int] = ..., + hour: Optional[int] = ..., minute: Optional[int] = ..., + second: Optional[int] = ..., + microsecond: Optional[int] = ...) -> None: ... + @property + def weeks(self) -> int: ... + @weeks.setter + def weeks(self, value: int) -> None: ... + def normalized(self: _SelfT) -> _SelfT: ... + # TODO: use Union when mypy will handle it properly in overloaded operator + # methods (#2129, #1442, #1264 in mypy) + @overload + def __add__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __add__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __add__(self, other: _DateT) -> _DateT: ... + @overload + def __radd__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __radd__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __radd__(self, other: _DateT) -> _DateT: ... + @overload + def __rsub__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __rsub__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __rsub__(self, other: _DateT) -> _DateT: ... + def __sub__(self: _SelfT, other: relativedelta) -> _SelfT: ... + def __neg__(self: _SelfT) -> _SelfT: ... + def __bool__(self) -> bool: ... + def __nonzero__(self) -> bool: ... + def __mul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __rmul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __eq__(self, other) -> bool: ... + def __ne__(self, other: object) -> bool: ... + def __div__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __truediv__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __repr__(self) -> str: ... + def __abs__(self: _SelfT) -> _SelfT: ... + def __hash__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi new file mode 100644 index 0000000..f8ab9d2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi @@ -0,0 +1,103 @@ +from ._common import weekday as weekdaybase +from typing import Any, Iterable, Optional, Union +import datetime + +YEARLY: int +MONTHLY: int +WEEKLY: int +DAILY: int +HOURLY: int +MINUTELY: int +SECONDLY: int + +class weekday(weekdaybase): + ... + +MO: weekday +TU: weekday +WE: weekday +TH: weekday +FR: weekday +SA: weekday +SU: weekday + +class rrulebase: + def __init__(self, cache: bool = ...) -> None: ... + def __iter__(self): ... + def __getitem__(self, item): ... + def __contains__(self, item): ... + def count(self): ... + def before(self, dt, inc: bool = ...): ... + def after(self, dt, inc: bool = ...): ... + def xafter(self, dt, count: Optional[Any] = ..., inc: bool = ...): ... + def between(self, after, before, inc: bool = ..., count: int = ...): ... + +class rrule(rrulebase): + def __init__(self, + freq, + dtstart: Optional[datetime.datetime] = ..., + interval: int = ..., + wkst: Optional[Union[weekday, int]] = ..., + count: Optional[int] = ..., + until: Optional[Union[datetime.datetime, int]] = ..., + bysetpos: Optional[Union[int, Iterable[int]]] = ..., + bymonth: Optional[Union[int, Iterable[int]]] = ..., + bymonthday: Optional[Union[int, Iterable[int]]] = ..., + byyearday: Optional[Union[int, Iterable[int]]] = ..., + byeaster: Optional[Union[int, Iterable[int]]] = ..., + byweekno: Optional[Union[int, Iterable[int]]] = ..., + byweekday: Optional[Union[int, Iterable[int]]] = ..., + byhour: Optional[Union[int, Iterable[int]]] = ..., + byminute: Optional[Union[int, Iterable[int]]] = ..., + bysecond: Optional[Union[int, Iterable[int]]] = ..., + cache: bool = ...) -> None: ... + def replace(self, **kwargs): ... + +class _iterinfo: + rrule: Any = ... + def __init__(self, rrule) -> None: ... + yearlen: int = ... + nextyearlen: int = ... + yearordinal: int = ... + yearweekday: int = ... + mmask: Any = ... + mdaymask: Any = ... + nmdaymask: Any = ... + wdaymask: Any = ... + mrange: Any = ... + wnomask: Any = ... + nwdaymask: Any = ... + eastermask: Any = ... + lastyear: int = ... + lastmonth: int = ... + def rebuild(self, year, month): ... + def ydayset(self, year, month, day): ... + def mdayset(self, year, month, day): ... + def wdayset(self, year, month, day): ... + def ddayset(self, year, month, day): ... + def htimeset(self, hour, minute, second): ... + def mtimeset(self, hour, minute, second): ... + def stimeset(self, hour, minute, second): ... + +class rruleset(rrulebase): + class _genitem: + dt: Any = ... + genlist: Any = ... + gen: Any = ... + def __init__(self, genlist, gen) -> None: ... + def __next__(self): ... + next: Any = ... + def __lt__(self, other): ... + def __gt__(self, other): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __init__(self, cache: bool = ...) -> None: ... + def rrule(self, rrule): ... + def rdate(self, rdate): ... + def exrule(self, exrule): ... + def exdate(self, exdate): ... + +class _rrulestr: + def __call__(self, s, **kwargs): ... + +rrulestr: _rrulestr diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi new file mode 100644 index 0000000..5a5e45f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi @@ -0,0 +1,15 @@ +from .tz import ( + tzutc as tzutc, + tzoffset as tzoffset, + tzlocal as tzlocal, + tzfile as tzfile, + tzrange as tzrange, + tzstr as tzstr, + tzical as tzical, + gettz as gettz, + datetime_exists as datetime_exists, + datetime_ambiguous as datetime_ambiguous, + resolve_imaginary as resolve_imaginary, +) + +UTC: tzutc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi new file mode 100644 index 0000000..32b06ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi @@ -0,0 +1,24 @@ +from typing import Any, Optional +from datetime import datetime, tzinfo, timedelta + +def tzname_in_python2(namefunc): ... +def enfold(dt: datetime, fold: int = ...): ... + +class _DatetimeWithFold(datetime): + @property + def fold(self): ... + +class _tzinfo(tzinfo): + def is_ambiguous(self, dt: datetime) -> bool: ... + def fromutc(self, dt: datetime) -> datetime: ... + +class tzrangebase(_tzinfo): + def __init__(self) -> None: ... + def utcoffset(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def tzname(self, dt: Optional[datetime]) -> str: ... + def fromutc(self, dt: datetime) -> datetime: ... + def is_ambiguous(self, dt: datetime) -> bool: ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi new file mode 100644 index 0000000..7139507 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi @@ -0,0 +1,96 @@ +from typing import Any, Optional, Union, IO, Text, Tuple, List +import datetime +from ._common import tzname_in_python2 as tzname_in_python2, _tzinfo as _tzinfo +from ._common import tzrangebase as tzrangebase, enfold as enfold +from ..relativedelta import relativedelta + +_FileObj = Union[str, Text, IO[str], IO[Text]] + +ZERO: datetime.timedelta +EPOCH: datetime.datetime +EPOCHORDINAL: int + +class tzutc(datetime.tzinfo): + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + +class tzoffset(datetime.tzinfo): + def __init__(self, name, offset) -> None: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + + @classmethod + def instance(cls, name, offset) -> tzoffset: ... + +class tzlocal(_tzinfo): + def __init__(self) -> None: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + +class _ttinfo: + def __init__(self) -> None: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + +class tzfile(_tzinfo): + def __init__(self, fileobj: _FileObj, filename: Optional[Text] = ...) -> None: ... + def is_ambiguous(self, dt: Optional[datetime.datetime], idx: Optional[int] = ...) -> bool: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + def __reduce__(self): ... + def __reduce_ex__(self, protocol): ... + +class tzrange(tzrangebase): + hasdst: bool + def __init__(self, stdabbr: Text, stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Optional[Text] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ... + def transitions(self, year: int) -> Tuple[datetime.datetime, datetime.datetime]: ... + def __eq__(self, other): ... + +class tzstr(tzrange): + hasdst: bool + def __init__(self, s: Union[bytes, _FileObj], posix_offset: bool = ...) -> None: ... + + @classmethod + def instance(cls, name, offset) -> tzoffset: ... + +class tzical: + def __init__(self, fileobj: _FileObj) -> None: ... + def keys(self): ... + def get(self, tzid: Optional[Any] = ...): ... + +TZFILES: List[str] +TZPATHS: List[str] + +def datetime_exists(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ... +def datetime_ambiguous(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ... +def resolve_imaginary(dt: datetime.datetime) -> datetime.datetime: ... + + +class _GetTZ: + def __call__(self, name: Optional[Text] = ...) -> Optional[datetime.tzinfo]: ... + def nocache(self, name: Optional[Text]) -> Optional[datetime.tzinfo]: ... + +gettz: _GetTZ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi new file mode 100644 index 0000000..b722053 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi @@ -0,0 +1,7 @@ +from typing import Optional +from datetime import datetime, tzinfo, timedelta + + +def default_tzinfo(dt: datetime, tzinfo: tzinfo) -> datetime: ... +def today(tzinfo: Optional[tzinfo] = ...) -> datetime: ... +def within_delta(dt1: datetime, dt2: datetime, delta: timedelta) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/emoji.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/emoji.pyi new file mode 100644 index 0000000..fe193b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/emoji.pyi @@ -0,0 +1,18 @@ +from typing import Tuple, Pattern, List, Dict, Union + +_DEFAULT_DELIMITER: str + +def emojize( + string: str, + use_aliases: bool = ..., + delimiters: Tuple[str, str] = ... +) -> str: ... + +def demojize( + string: str, + delimiters: Tuple[str, str] = ... +) -> str: ... + +def get_emoji_regexp() -> Pattern: ... + +def emoji_lis(string: str) -> List[Dict[str, Union[int, str]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/first.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/first.pyi new file mode 100644 index 0000000..f03f3a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/first.pyi @@ -0,0 +1,13 @@ +from typing import Any, Callable, Iterable, Optional, overload, TypeVar, Union + +_T = TypeVar('_T') +_S = TypeVar('_S') + +@overload +def first(iterable: Iterable[_T]) -> Optional[_T]: ... +@overload +def first(iterable: Iterable[_T], default: _S) -> Union[_T, _S]: ... +@overload +def first(iterable: Iterable[_T], default: _S, key: Optional[Callable[[_T], Any]]) -> Union[_T, _S]: ... +@overload +def first(iterable: Iterable[_T], *, key: Optional[Callable[[_T], Any]]) -> Optional[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi new file mode 100644 index 0000000..caeac5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi @@ -0,0 +1,45 @@ +# Stubs for flask (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask as Flask +from .blueprints import Blueprint as Blueprint +from .config import Config as Config +from .ctx import after_this_request as after_this_request +from .ctx import copy_current_request_context as copy_current_request_context +from .ctx import has_app_context as has_app_context +from .ctx import has_request_context as has_request_context +from .globals import current_app as current_app +from .globals import g as g +from .globals import request as request +from .globals import session as session +from .helpers import flash as flash +from .helpers import get_flashed_messages as get_flashed_messages +from .helpers import get_template_attribute as get_template_attribute +from .helpers import make_response as make_response +from .helpers import safe_join as safe_join +from .helpers import send_file as send_file +from .helpers import send_from_directory as send_from_directory +from .helpers import stream_with_context as stream_with_context +from .helpers import url_for as url_for +from .json import jsonify as jsonify +from .signals import appcontext_popped as appcontext_popped +from .signals import appcontext_pushed as appcontext_pushed +from .signals import appcontext_tearing_down as appcontext_tearing_down +from .signals import before_render_template as before_render_template +from .signals import got_request_exception as got_request_exception +from .signals import message_flashed as message_flashed +from .signals import request_finished as request_finished +from .signals import request_started as request_started +from .signals import request_tearing_down as request_tearing_down +from .signals import signals_available as signals_available +from .signals import template_rendered as template_rendered +from .templating import render_template as render_template +from .templating import render_template_string as render_template_string +from .wrappers import Request as Request +from .wrappers import Response as Response + +from werkzeug.exceptions import abort as abort +from werkzeug.utils import redirect as redirect +from jinja2 import Markup as Markup +from jinja2 import escape as escape diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi new file mode 100644 index 0000000..5be3d6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi @@ -0,0 +1,148 @@ +# Stubs for flask.app (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .blueprints import Blueprint +from .config import Config, ConfigAttribute +from .ctx import AppContext, RequestContext, _AppCtxGlobals +from .globals import _request_ctx_stack, g, request, session +from .helpers import _PackageBoundObject, find_package, get_debug_flag, get_env, get_flashed_messages, get_load_dotenv, locked_cached_property, url_for +from .logging import create_logger +from .sessions import SecureCookieSessionInterface +from .signals import appcontext_tearing_down, got_request_exception, request_finished, request_started, request_tearing_down +from .templating import DispatchingJinjaLoader, Environment +from .wrappers import Request, Response +from .testing import FlaskClient +from typing import Any, Callable, ContextManager, Dict, List, Optional, Type, TypeVar, Union, Text +from datetime import timedelta + +def setupmethod(f: Any): ... + +_T = TypeVar('_T') + +class Flask(_PackageBoundObject): + request_class: type = ... + response_class: type = ... + jinja_environment: type = ... + app_ctx_globals_class: type = ... + config_class: Type[Config] = ... + testing: Any = ... + secret_key: Union[Text, bytes, None] = ... + session_cookie_name: Any = ... + permanent_session_lifetime: timedelta = ... + send_file_max_age_default: timedelta = ... + use_x_sendfile: Any = ... + json_encoder: Any = ... + json_decoder: Any = ... + jinja_options: Any = ... + default_config: Any = ... + url_rule_class: type = ... + test_client_class: type = ... + test_cli_runner_class: type = ... + session_interface: Any = ... + import_name: str = ... + template_folder: str = ... + root_path: Optional[Union[str, Text]] = ... + static_url_path: Any = ... + static_folder: Optional[str] = ... + instance_path: Union[str, Text] = ... + config: Config = ... + view_functions: Any = ... + error_handler_spec: Any = ... + url_build_error_handlers: Any = ... + before_request_funcs: Dict[Optional[str], List[Callable[[], Any]]] = ... + before_first_request_funcs: List[Callable[[], None]] = ... + after_request_funcs: Dict[Optional[str], List[Callable[[Response], Response]]] = ... + teardown_request_funcs: Dict[Optional[str], List[Callable[[Optional[Exception]], Any]]] = ... + teardown_appcontext_funcs: List[Callable[[Optional[Exception]], Any]] = ... + url_value_preprocessors: Any = ... + url_default_functions: Any = ... + template_context_processors: Any = ... + shell_context_processors: Any = ... + blueprints: Any = ... + extensions: Any = ... + url_map: Any = ... + subdomain_matching: Any = ... + cli: Any = ... + def __init__(self, import_name: str, static_url_path: Optional[str] = ..., static_folder: Optional[str] = ..., static_host: Optional[str] = ..., host_matching: bool = ..., subdomain_matching: bool = ..., template_folder: str = ..., instance_path: Optional[str] = ..., instance_relative_config: bool = ..., root_path: Optional[str] = ...) -> None: ... + @property + def name(self) -> str: ... + @property + def propagate_exceptions(self) -> bool: ... + @property + def preserve_context_on_exception(self): ... + @property + def logger(self): ... + @property + def jinja_env(self): ... + @property + def got_first_request(self) -> bool: ... + def make_config(self, instance_relative: bool = ...): ... + def auto_find_instance_path(self): ... + def open_instance_resource(self, resource: Union[str, Text], mode: str = ...): ... + templates_auto_reload: Any = ... + def create_jinja_environment(self): ... + def create_global_jinja_loader(self): ... + def select_jinja_autoescape(self, filename: Any): ... + def update_template_context(self, context: Any) -> None: ... + def make_shell_context(self): ... + env: Optional[str] = ... + debug: bool = ... + def run(self, host: Optional[str] = ..., port: Optional[Union[int, str]] = ..., debug: Optional[bool] = ..., load_dotenv: bool = ..., **options: Any) -> None: ... + def test_client(self, use_cookies: bool = ..., **kwargs: Any) -> FlaskClient: ... + def test_cli_runner(self, **kwargs: Any): ... + def open_session(self, request: Any): ... + def save_session(self, session: Any, response: Any): ... + def make_null_session(self): ... + def register_blueprint(self, blueprint: Blueprint, **options: Any) -> None: ... + def iter_blueprints(self): ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., provide_automatic_options: Optional[bool] = ..., **options: Any) -> None: ... + def route(self, rule: str, **options: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def endpoint(self, endpoint: str) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def errorhandler(self, code_or_exception: Union[int, Type[Exception]]) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def register_error_handler(self, code_or_exception: Union[int, Type[Exception]], f: Callable[..., Any]) -> None: ... + def template_filter(self, name: Optional[Any] = ...): ... + def add_template_filter(self, f: Any, name: Optional[Any] = ...) -> None: ... + def template_test(self, name: Optional[Any] = ...): ... + def add_template_test(self, f: Any, name: Optional[Any] = ...) -> None: ... + def template_global(self, name: Optional[Any] = ...): ... + def add_template_global(self, f: Any, name: Optional[Any] = ...) -> None: ... + def before_request(self, f: Callable[[], _T]) -> Callable[[], _T]: ... + def before_first_request(self, f: Callable[[], _T]) -> Callable[[], _T]: ... + def after_request(self, f: Callable[[Response], Response]) -> Callable[[Response], Response]: ... + def teardown_request(self, f: Callable[[Optional[Exception]], _T]) -> Callable[[Optional[Exception]], _T]: ... + def teardown_appcontext(self, f: Callable[[Optional[Exception]], _T]) -> Callable[[Optional[Exception]], _T]: ... + def context_processor(self, f: Any): ... + def shell_context_processor(self, f: Any): ... + def url_value_preprocessor(self, f: Any): ... + def url_defaults(self, f: Any): ... + def handle_http_exception(self, e: Any): ... + def trap_http_exception(self, e: Any): ... + def handle_user_exception(self, e: Any): ... + def handle_exception(self, e: Any): ... + def log_exception(self, exc_info: Any) -> None: ... + def raise_routing_exception(self, request: Any) -> None: ... + def dispatch_request(self): ... + def full_dispatch_request(self): ... + def finalize_request(self, rv: Any, from_error_handler: bool = ...): ... + def try_trigger_before_first_request_functions(self): ... + def make_default_options_response(self): ... + def should_ignore_error(self, error: Any): ... + def make_response(self, rv: Any): ... + def create_url_adapter(self, request: Any): ... + def inject_url_defaults(self, endpoint: Any, values: Any) -> None: ... + def handle_url_build_error(self, error: Any, endpoint: Any, values: Any): ... + def preprocess_request(self): ... + def process_response(self, response: Any): ... + def do_teardown_request(self, exc: Any = ...) -> None: ... + def do_teardown_appcontext(self, exc: Any = ...) -> None: ... + def app_context(self): ... + def request_context(self, environ: Any): ... + def test_request_context(self, *args: Any, **kwargs: Any) -> ContextManager[RequestContext]: ... + def wsgi_app(self, environ: Any, start_response: Any): ... + def __call__(self, environ: Any, start_response: Any): ... + + # These are not preset at runtime but we add them since monkeypatching this + # class is quite common. + def __setattr__(self, name: str, value: Any): ... + def __getattr__(self, name: str): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi new file mode 100644 index 0000000..d43f8e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi @@ -0,0 +1,64 @@ +# Stubs for flask.blueprints (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .helpers import _PackageBoundObject +from typing import Any, Callable, Optional, Type, TypeVar, Union + +_T = TypeVar('_T') + +class BlueprintSetupState: + app: Any = ... + blueprint: Any = ... + options: Any = ... + first_registration: Any = ... + subdomain: Any = ... + url_prefix: Any = ... + url_defaults: Any = ... + def __init__(self, blueprint: Any, app: Any, options: Any, first_registration: Any) -> None: ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., **options: Any) -> None: ... + +class Blueprint(_PackageBoundObject): + warn_on_modifications: bool = ... + json_encoder: Any = ... + json_decoder: Any = ... + import_name: str = ... + template_folder: Optional[str] = ... + root_path: str = ... + name: str = ... + url_prefix: Optional[str] = ... + subdomain: Optional[str] = ... + static_folder: Optional[str] = ... + static_url_path: Optional[str] = ... + deferred_functions: Any = ... + url_values_defaults: Any = ... + def __init__(self, name: str, import_name: str, static_folder: Optional[str] = ..., static_url_path: Optional[str] = ..., template_folder: Optional[str] = ..., url_prefix: Optional[str] = ..., subdomain: Optional[str] = ..., url_defaults: Optional[Any] = ..., root_path: Optional[str] = ...) -> None: ... + def record(self, func: Any) -> None: ... + def record_once(self, func: Any): ... + def make_setup_state(self, app: Any, options: Any, first_registration: bool = ...): ... + def register(self, app: Any, options: Any, first_registration: bool = ...) -> None: ... + def route(self, rule: str, **options: Any) -> Callable[[Callable[..., Any]], Callable[..., Any]]: ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., **options: Any) -> None: ... + def endpoint(self, endpoint: str) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def app_template_filter(self, name: Optional[Any] = ...): ... + def add_app_template_filter(self, f: Any, name: Optional[Any] = ...) -> None: ... + def app_template_test(self, name: Optional[Any] = ...): ... + def add_app_template_test(self, f: Any, name: Optional[Any] = ...) -> None: ... + def app_template_global(self, name: Optional[Any] = ...): ... + def add_app_template_global(self, f: Any, name: Optional[Any] = ...) -> None: ... + def before_request(self, f: Any): ... + def before_app_request(self, f: Any): ... + def before_app_first_request(self, f: Any): ... + def after_request(self, f: Any): ... + def after_app_request(self, f: Any): ... + def teardown_request(self, f: Any): ... + def teardown_app_request(self, f: Any): ... + def context_processor(self, f: Any): ... + def app_context_processor(self, f: Any): ... + def app_errorhandler(self, code: Any): ... + def url_value_preprocessor(self, f: Any): ... + def url_defaults(self, f: Any): ... + def app_url_value_preprocessor(self, f: Any): ... + def app_url_defaults(self, f: Any): ... + def errorhandler(self, code_or_exception: Union[int, Type[Exception]]) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def register_error_handler(self, code_or_exception: Union[int, Type[Exception]], f: Callable[..., Any]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi new file mode 100644 index 0000000..15d3243 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi @@ -0,0 +1,64 @@ +# Stubs for flask.cli (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +import click +from .globals import current_app +from .helpers import get_debug_flag, get_env, get_load_dotenv +from typing import Any, Optional + +class NoAppException(click.UsageError): ... + +def find_best_app(script_info: Any, module: Any): ... +def call_factory(script_info: Any, app_factory: Any, arguments: Any = ...): ... +def find_app_by_string(script_info: Any, module: Any, app_name: Any): ... +def prepare_import(path: Any): ... +def locate_app(script_info: Any, module_name: Any, app_name: Any, raise_if_not_found: bool = ...): ... +def get_version(ctx: Any, param: Any, value: Any): ... + +version_option: Any + +class DispatchingApp: + loader: Any = ... + def __init__(self, loader: Any, use_eager_loading: bool = ...) -> None: ... + def __call__(self, environ: Any, start_response: Any): ... + +class ScriptInfo: + app_import_path: Any = ... + create_app: Any = ... + data: Any = ... + def __init__(self, app_import_path: Optional[Any] = ..., create_app: Optional[Any] = ...) -> None: ... + def load_app(self): ... + +pass_script_info: Any + +def with_appcontext(f: Any): ... + +class AppGroup(click.Group): + def command(self, *args: Any, **kwargs: Any): ... + def group(self, *args: Any, **kwargs: Any): ... + +class FlaskGroup(AppGroup): + create_app: Any = ... + load_dotenv: Any = ... + def __init__(self, add_default_commands: bool = ..., create_app: Optional[Any] = ..., add_version_option: bool = ..., load_dotenv: bool = ..., **extra: Any) -> None: ... + def get_command(self, ctx: Any, name: Any): ... + def list_commands(self, ctx: Any): ... + def main(self, *args: Any, **kwargs: Any): ... + +def load_dotenv(path: Optional[Any] = ...): ... +def show_server_banner(env: Any, debug: Any, app_import_path: Any, eager_loading: Any): ... + +class CertParamType(click.ParamType): + name: str = ... + path_type: Any = ... + def __init__(self) -> None: ... + def convert(self, value: Any, param: Any, ctx: Any): ... + +def run_command(info: Any, host: Any, port: Any, reload: Any, debugger: Any, eager_loading: Any, with_threads: Any, cert: Any) -> None: ... +def shell_command() -> None: ... +def routes_command(sort: Any, all_methods: Any): ... + +cli: Any + +def main(as_module: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi new file mode 100644 index 0000000..6b925e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi @@ -0,0 +1,22 @@ +# Stubs for flask.config (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional, Dict + +class ConfigAttribute: + __name__: Any = ... + get_converter: Any = ... + def __init__(self, name: Any, get_converter: Optional[Any] = ...) -> None: ... + def __get__(self, obj: Any, type: Optional[Any] = ...): ... + def __set__(self, obj: Any, value: Any) -> None: ... + +class Config(Dict[str, Any]): + root_path: Any = ... + def __init__(self, root_path: Any, defaults: Optional[Any] = ...) -> None: ... + def from_envvar(self, variable_name: Any, silent: bool = ...): ... + def from_pyfile(self, filename: Any, silent: bool = ...): ... + def from_object(self, obj: Any) -> None: ... + def from_json(self, filename: Any, silent: bool = ...): ... + def from_mapping(self, *mapping: Any, **kwargs: Any): ... + def get_namespace(self, namespace: Any, lowercase: bool = ..., trim_namespace: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi new file mode 100644 index 0000000..09fdea3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi @@ -0,0 +1,46 @@ +# Stubs for flask.ctx (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack +from .signals import appcontext_popped, appcontext_pushed +from typing import Any, Optional + +class _AppCtxGlobals: + def get(self, name: Any, default: Optional[Any] = ...): ... + def pop(self, name: Any, default: Any = ...): ... + def setdefault(self, name: Any, default: Optional[Any] = ...): ... + def __contains__(self, item: Any): ... + def __iter__(self): ... + +def after_this_request(f: Any): ... +def copy_current_request_context(f: Any): ... +def has_request_context(): ... +def has_app_context(): ... + +class AppContext: + app: Any = ... + url_adapter: Any = ... + g: Any = ... + def __init__(self, app: Any) -> None: ... + def push(self) -> None: ... + def pop(self, exc: Any = ...) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... + +class RequestContext: + app: Any = ... + request: Any = ... + url_adapter: Any = ... + flashes: Any = ... + session: Any = ... + preserved: bool = ... + def __init__(self, app: Any, environ: Any, request: Optional[Any] = ...) -> None: ... + g: Any = ... + def copy(self): ... + def match_request(self) -> None: ... + def push(self) -> None: ... + def pop(self, exc: Any = ...) -> None: ... + def auto_pop(self, exc: Any) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi new file mode 100644 index 0000000..5a4cbea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi @@ -0,0 +1,21 @@ +# Stubs for flask.debughelpers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask +from .blueprints import Blueprint +from .globals import _request_ctx_stack +from typing import Any + +class UnexpectedUnicodeError(AssertionError, UnicodeError): ... + +class DebugFilesKeyError(KeyError, AssertionError): + msg: Any = ... + def __init__(self, request: Any, key: Any) -> None: ... + +class FormDataRoutingRedirect(AssertionError): + def __init__(self, request: Any) -> None: ... + +def attach_enctype_error_multidict(request: Any): ... +def explain_template_loading_attempts(app: Any, template: Any, attempts: Any) -> None: ... +def explain_ignored_app_run() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi new file mode 100644 index 0000000..8ce1caf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi @@ -0,0 +1,18 @@ +# Stubs for flask.globals (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask +from .wrappers import Request +from typing import Any +from werkzeug.local import LocalStack + +class _FlaskLocalProxy(Flask): + def _get_current_object(self) -> Flask: ... + +_request_ctx_stack: LocalStack +_app_ctx_stack: LocalStack +current_app: _FlaskLocalProxy +request: Request +session: Any +g: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi new file mode 100644 index 0000000..726f8a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi @@ -0,0 +1,48 @@ +# Stubs for flask.helpers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack, current_app, request, session +from .signals import message_flashed +from typing import Any, Optional + +def get_env(): ... +def get_debug_flag(): ... +def get_load_dotenv(default: bool = ...): ... +def stream_with_context(generator_or_function: Any): ... +def make_response(*args: Any): ... +def url_for(endpoint: Any, **values: Any): ... +def get_template_attribute(template_name: Any, attribute: Any): ... +def flash(message: Any, category: str = ...) -> None: ... +def get_flashed_messages(with_categories: bool = ..., category_filter: Any = ...): ... +def send_file(filename_or_fp: Any, mimetype: Optional[Any] = ..., as_attachment: bool = ..., attachment_filename: Optional[Any] = ..., add_etags: bool = ..., cache_timeout: Optional[Any] = ..., conditional: bool = ..., last_modified: Optional[Any] = ...): ... +def safe_join(directory: Any, *pathnames: Any): ... +def send_from_directory(directory: Any, filename: Any, **options: Any): ... +def get_root_path(import_name: Any): ... +def find_package(import_name: Any): ... + +class locked_cached_property: + __name__: Any = ... + __module__: Any = ... + __doc__: Any = ... + func: Any = ... + lock: Any = ... + def __init__(self, func: Any, name: Optional[Any] = ..., doc: Optional[Any] = ...) -> None: ... + def __get__(self, obj: Any, type: Optional[Any] = ...): ... + +class _PackageBoundObject: + import_name: Any = ... + template_folder: Any = ... + root_path: Any = ... + def __init__(self, import_name: Any, template_folder: Optional[Any] = ..., root_path: Optional[Any] = ...) -> None: ... + static_folder: Any = ... + static_url_path: Any = ... + @property + def has_static_folder(self): ... + def jinja_loader(self): ... + def get_send_file_max_age(self, filename: Any): ... + def send_static_file(self, filename: Any): ... + def open_resource(self, resource: Any, mode: str = ...): ... + +def total_seconds(td: Any): ... +def is_ip(value: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi new file mode 100644 index 0000000..24047ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi @@ -0,0 +1,19 @@ +# Stubs for flask.json (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +import json as _json +from typing import Any + +class JSONEncoder(_json.JSONEncoder): + def default(self, o: Any): ... + +class JSONDecoder(_json.JSONDecoder): ... + +def dumps(obj: Any, **kwargs: Any): ... +def dump(obj: Any, fp: Any, **kwargs: Any) -> None: ... +def loads(s: Any, **kwargs: Any): ... +def load(fp: Any, **kwargs: Any): ... +def htmlsafe_dumps(obj: Any, **kwargs: Any): ... +def htmlsafe_dump(obj: Any, fp: Any, **kwargs: Any) -> None: ... +def jsonify(*args: Any, **kwargs: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi new file mode 100644 index 0000000..b1648dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi @@ -0,0 +1,71 @@ +# Stubs for flask.json.tag (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional + +class JSONTag: + key: Any = ... + serializer: Any = ... + def __init__(self, serializer: Any) -> None: ... + def check(self, value: Any) -> None: ... + def to_json(self, value: Any) -> None: ... + def to_python(self, value: Any) -> None: ... + def tag(self, value: Any): ... + +class TagDict(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class PassDict(JSONTag): + def check(self, value: Any): ... + def to_json(self, value: Any): ... + tag: Any = ... + +class TagTuple(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class PassList(JSONTag): + def check(self, value: Any): ... + def to_json(self, value: Any): ... + tag: Any = ... + +class TagBytes(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagMarkup(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagUUID(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagDateTime(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TaggedJSONSerializer: + default_tags: Any = ... + tags: Any = ... + order: Any = ... + def __init__(self) -> None: ... + def register(self, tag_class: Any, force: bool = ..., index: Optional[Any] = ...) -> None: ... + def tag(self, value: Any): ... + def untag(self, value: Any): ... + def dumps(self, value: Any): ... + def loads(self, value: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi new file mode 100644 index 0000000..e43d51d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi @@ -0,0 +1,13 @@ +# Stubs for flask.logging (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import request +from typing import Any + +def wsgi_errors_stream(): ... +def has_level_handler(logger: Any): ... + +default_handler: Any + +def create_logger(app: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi new file mode 100644 index 0000000..b0d238d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi @@ -0,0 +1,60 @@ +# Stubs for flask.sessions (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from abc import ABCMeta +from typing import Any, MutableMapping, Optional +from werkzeug.datastructures import CallbackDict + +class SessionMixin(MutableMapping, metaclass=ABCMeta): + @property + def permanent(self): ... + @permanent.setter + def permanent(self, value: Any) -> None: ... + new: bool = ... + modified: bool = ... + accessed: bool = ... + +class SecureCookieSession(CallbackDict, SessionMixin): + modified: bool = ... + accessed: bool = ... + def __init__(self, initial: Optional[Any] = ...) -> None: ... + def __getitem__(self, key: Any): ... + def get(self, key: Any, default: Optional[Any] = ...): ... + def setdefault(self, key: Any, default: Optional[Any] = ...): ... + +class NullSession(SecureCookieSession): + __setitem__: Any = ... + __delitem__: Any = ... + clear: Any = ... + pop: Any = ... + popitem: Any = ... + update: Any = ... + setdefault: Any = ... + +class SessionInterface: + null_session_class: Any = ... + pickle_based: bool = ... + def make_null_session(self, app: Any): ... + def is_null_session(self, obj: Any): ... + def get_cookie_domain(self, app: Any): ... + def get_cookie_path(self, app: Any): ... + def get_cookie_httponly(self, app: Any): ... + def get_cookie_secure(self, app: Any): ... + def get_cookie_samesite(self, app: Any): ... + def get_expiration_time(self, app: Any, session: Any): ... + def should_set_cookie(self, app: Any, session: Any): ... + def open_session(self, app: Any, request: Any) -> None: ... + def save_session(self, app: Any, session: Any, response: Any) -> None: ... + +session_json_serializer: Any + +class SecureCookieSessionInterface(SessionInterface): + salt: str = ... + digest_method: Any = ... + key_derivation: str = ... + serializer: Any = ... + session_class: Any = ... + def get_signing_serializer(self, app: Any): ... + def open_session(self, app: Any, request: Any): ... + def save_session(self, app: Any, session: Any, response: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi new file mode 100644 index 0000000..0aa7ac3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi @@ -0,0 +1,33 @@ +# Stubs for flask.signals (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional + +signals_available: bool + +class Namespace: + def signal(self, name: Any, doc: Optional[Any] = ...): ... + +class _FakeSignal: + name: Any = ... + __doc__: Any = ... + def __init__(self, name: Any, doc: Optional[Any] = ...) -> None: ... + send: Any = ... + connect: Any = ... + disconnect: Any = ... + has_receivers_for: Any = ... + receivers_for: Any = ... + temporarily_connected_to: Any = ... + connected_to: Any = ... + +template_rendered: Any +before_render_template: Any +request_started: Any +request_finished: Any +request_tearing_down: Any +got_request_exception: Any +appcontext_tearing_down: Any +appcontext_pushed: Any +appcontext_popped: Any +message_flashed: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi new file mode 100644 index 0000000..1da102d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi @@ -0,0 +1,21 @@ +# Stubs for flask.templating (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack +from .signals import before_render_template, template_rendered +from jinja2 import BaseLoader, Environment as BaseEnvironment +from typing import Any + +class Environment(BaseEnvironment): + app: Any = ... + def __init__(self, app: Any, **options: Any) -> None: ... + +class DispatchingJinjaLoader(BaseLoader): + app: Any = ... + def __init__(self, app: Any) -> None: ... + def get_source(self, environment: Any, template: Any): ... + def list_templates(self): ... + +def render_template(template_name_or_list: Any, **context: Any): ... +def render_template_string(source: Any, **context: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi new file mode 100644 index 0000000..813eeca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi @@ -0,0 +1,34 @@ +# Stubs for flask.testing (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from click import BaseCommand +from click.testing import CliRunner, Result +from typing import Any, IO, Iterable, Mapping, Optional, Union +from werkzeug.test import Client + +def make_test_environ_builder(app: Any, path: str = ..., base_url: Optional[Any] = ..., subdomain: Optional[Any] = ..., url_scheme: Optional[Any] = ..., *args: Any, **kwargs: Any): ... + +class FlaskClient(Client): + preserve_context: bool = ... + environ_base: Any = ... + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + def session_transaction(self, *args: Any, **kwargs: Any) -> None: ... + def open(self, *args: Any, **kwargs: Any): ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... + +class FlaskCliRunner(CliRunner): + app: Any = ... + def __init__(self, app: Any, **kwargs: Any) -> None: ... + def invoke( + self, + cli: Optional[BaseCommand] = ..., + args: Optional[Union[str, Iterable[str]]] = ..., + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + catch_exceptions: bool = ..., + color: bool = ..., + **extra: Any, + ) -> Result: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi new file mode 100644 index 0000000..a2637b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi @@ -0,0 +1,22 @@ +# Stubs for flask.views (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import request +from typing import Any + +http_method_funcs: Any + +class View: + methods: Any = ... + provide_automatic_options: Any = ... + decorators: Any = ... + def dispatch_request(self, *args: Any, **kwargs: Any) -> Any: ... + @classmethod + def as_view(cls, name: Any, *class_args: Any, **class_kwargs: Any): ... + +class MethodViewType(type): + def __init__(self, name: Any, bases: Any, d: Any) -> None: ... + +class MethodView(View, metaclass=MethodViewType): + def dispatch_request(self, *args: Any, **kwargs: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi new file mode 100644 index 0000000..df8869e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi @@ -0,0 +1,35 @@ +# Stubs for flask.wrappers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Dict, Optional +from werkzeug.exceptions import HTTPException +from werkzeug.routing import Rule +from werkzeug.wrappers import Request as RequestBase, Response as ResponseBase + +class JSONMixin: + @property + def is_json(self) -> bool: ... + @property + def json(self): ... + def get_json(self, force: bool = ..., silent: bool = ..., cache: bool = ...): ... + def on_json_loading_failed(self, e: Any) -> None: ... + +class Request(RequestBase, JSONMixin): + url_rule: Optional[Rule] = ... + view_args: Dict[str, Any] = ... + routing_exception: Optional[HTTPException] = ... + # Request is making the max_content_length readonly, where it was not the + # case in its supertype. + # We would require something like https://github.com/python/typing/issues/241 + @property + def max_content_length(self) -> Optional[int]: ... # type: ignore + @property + def endpoint(self) -> Optional[str]: ... + @property + def blueprint(self) -> Optional[str]: ... + +class Response(ResponseBase, JSONMixin): + default_mimetype: str = ... + @property + def max_cookie_size(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi new file mode 100644 index 0000000..aae1f93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi @@ -0,0 +1 @@ +__version__: bytes diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi new file mode 100644 index 0000000..c2a7295 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi @@ -0,0 +1,22 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, + Text, +) + + +class Any(Message, well_known_types.Any_): + type_url: Text + value: bytes + + def __init__(self, + type_url: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi new file mode 100644 index 0000000..d352bad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi @@ -0,0 +1,32 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, +) + + +class TestAny(Message): + int32_value: int + + @property + def any_value(self) -> Any: ... + + @property + def repeated_any_value(self) -> RepeatedCompositeFieldContainer[Any]: ... + + def __init__(self, + int32_value: Optional[int] = ..., + any_value: Optional[Any] = ..., + repeated_any_value: Optional[Iterable[Any]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAny: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi new file mode 100644 index 0000000..3646878 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi @@ -0,0 +1,87 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.source_context_pb2 import ( + SourceContext, +) +from google.protobuf.type_pb2 import ( + Option, + Syntax, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class Api(Message): + name: Text + version: Text + syntax: Syntax + + @property + def methods(self) -> RepeatedCompositeFieldContainer[Method]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + @property + def mixins(self) -> RepeatedCompositeFieldContainer[Mixin]: ... + + def __init__(self, + name: Optional[Text] = ..., + methods: Optional[Iterable[Method]] = ..., + options: Optional[Iterable[Option]] = ..., + version: Optional[Text] = ..., + source_context: Optional[SourceContext] = ..., + mixins: Optional[Iterable[Mixin]] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Api: ... + + +class Method(Message): + name: Text + request_type_url: Text + request_streaming: bool + response_type_url: Text + response_streaming: bool + syntax: Syntax + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + name: Optional[Text] = ..., + request_type_url: Optional[Text] = ..., + request_streaming: Optional[bool] = ..., + response_type_url: Optional[Text] = ..., + response_streaming: Optional[bool] = ..., + options: Optional[Iterable[Option]] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Method: ... + + +class Mixin(Message): + name: Text + root: Text + + def __init__(self, + name: Optional[Text] = ..., + root: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Mixin: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi new file mode 100644 index 0000000..d1037fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi @@ -0,0 +1,82 @@ +from google.protobuf.descriptor_pb2 import ( + FileDescriptorProto, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class Version(Message): + major: int + minor: int + patch: int + suffix: Text + + def __init__(self, + major: Optional[int] = ..., + minor: Optional[int] = ..., + patch: Optional[int] = ..., + suffix: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Version: ... + + +class CodeGeneratorRequest(Message): + file_to_generate: RepeatedScalarFieldContainer[Text] + parameter: Text + + @property + def proto_file(self) -> RepeatedCompositeFieldContainer[FileDescriptorProto]: ... + + @property + def compiler_version(self) -> Version: ... + + def __init__(self, + file_to_generate: Optional[Iterable[Text]] = ..., + parameter: Optional[Text] = ..., + proto_file: Optional[Iterable[FileDescriptorProto]] = ..., + compiler_version: Optional[Version] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorRequest: ... + + +class CodeGeneratorResponse(Message): + + class File(Message): + name: Text + insertion_point: Text + content: Text + + def __init__(self, + name: Optional[Text] = ..., + insertion_point: Optional[Text] = ..., + content: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorResponse.File: ... + error: Text + + @property + def file(self) -> RepeatedCompositeFieldContainer[CodeGeneratorResponse.File]: ... + + def __init__(self, + error: Optional[Text] = ..., + file: Optional[Iterable[CodeGeneratorResponse.File]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorResponse: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi new file mode 100644 index 0000000..44352c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi @@ -0,0 +1,182 @@ +from typing import Any + +from .message import Message +from .descriptor_pb2 import ( + EnumOptions, + EnumValueOptions, + FieldOptions, + FileOptions, + MessageOptions, + MethodOptions, + OneofOptions, + ServiceOptions, +) + +class Error(Exception): ... +class TypeTransformationError(Error): ... + +class DescriptorMetaclass(type): + def __instancecheck__(self, obj): ... + +class DescriptorBase(metaclass=DescriptorMetaclass): + has_options: Any + def __init__(self, options, options_class_name) -> None: ... + def GetOptions(self): ... + +class _NestedDescriptorBase(DescriptorBase): + name: Any + full_name: Any + file: Any + containing_type: Any + def __init__(self, options, options_class_name, name, full_name, file, containing_type, serialized_start=..., serialized_end=...) -> None: ... + def GetTopLevelContainingType(self): ... + def CopyToProto(self, proto): ... + +class Descriptor(_NestedDescriptorBase): + def __new__(cls, name, full_name, filename, containing_type, fields, nested_types, enum_types, extensions, options=..., is_extendable=..., extension_ranges=..., oneofs=..., file=..., serialized_start=..., serialized_end=..., syntax=...): ... + fields: Any + fields_by_number: Any + fields_by_name: Any + nested_types: Any + nested_types_by_name: Any + enum_types: Any + enum_types_by_name: Any + enum_values_by_name: Any + extensions: Any + extensions_by_name: Any + is_extendable: Any + extension_ranges: Any + oneofs: Any + oneofs_by_name: Any + syntax: Any + def __init__(self, name, full_name, filename, containing_type, fields, nested_types, enum_types, extensions, options=..., is_extendable=..., extension_ranges=..., oneofs=..., file=..., serialized_start=..., serialized_end=..., syntax=...) -> None: ... + def EnumValueName(self, enum, value): ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> MessageOptions: ... + +class FieldDescriptor(DescriptorBase): + TYPE_DOUBLE: Any + TYPE_FLOAT: Any + TYPE_INT64: Any + TYPE_UINT64: Any + TYPE_INT32: Any + TYPE_FIXED64: Any + TYPE_FIXED32: Any + TYPE_BOOL: Any + TYPE_STRING: Any + TYPE_GROUP: Any + TYPE_MESSAGE: Any + TYPE_BYTES: Any + TYPE_UINT32: Any + TYPE_ENUM: Any + TYPE_SFIXED32: Any + TYPE_SFIXED64: Any + TYPE_SINT32: Any + TYPE_SINT64: Any + MAX_TYPE: Any + CPPTYPE_INT32: Any + CPPTYPE_INT64: Any + CPPTYPE_UINT32: Any + CPPTYPE_UINT64: Any + CPPTYPE_DOUBLE: Any + CPPTYPE_FLOAT: Any + CPPTYPE_BOOL: Any + CPPTYPE_ENUM: Any + CPPTYPE_STRING: Any + CPPTYPE_MESSAGE: Any + MAX_CPPTYPE: Any + LABEL_OPTIONAL: Any + LABEL_REQUIRED: Any + LABEL_REPEATED: Any + MAX_LABEL: Any + MAX_FIELD_NUMBER: Any + FIRST_RESERVED_FIELD_NUMBER: Any + LAST_RESERVED_FIELD_NUMBER: Any + def __new__(cls, name, full_name, index, number, type, cpp_type, label, default_value, message_type, enum_type, containing_type, is_extension, extension_scope, options=..., file=..., has_default_value=..., containing_oneof=...): ... + name: Any + full_name: Any + index: Any + number: Any + type: Any + cpp_type: Any + label: Any + has_default_value: Any + default_value: Any + containing_type: Any + message_type: Any + enum_type: Any + is_extension: Any + extension_scope: Any + containing_oneof: Any + def __init__(self, name, full_name, index, number, type, cpp_type, label, default_value, message_type, enum_type, containing_type, is_extension, extension_scope, options=..., file=..., has_default_value=..., containing_oneof=...) -> None: ... + @staticmethod + def ProtoTypeToCppProtoType(proto_type): ... + def GetOptions(self) -> FieldOptions: ... + +class EnumDescriptor(_NestedDescriptorBase): + def __new__(cls, name, full_name, filename, values, containing_type=..., options=..., file=..., serialized_start=..., serialized_end=...): ... + values: Any + values_by_name: Any + values_by_number: Any + def __init__(self, name, full_name, filename, values, containing_type=..., options=..., file=..., serialized_start=..., serialized_end=...) -> None: ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> EnumOptions: ... + +class EnumValueDescriptor(DescriptorBase): + def __new__(cls, name, index, number, type=..., options=...): ... + name: Any + index: Any + number: Any + type: Any + def __init__(self, name, index, number, type=..., options=...) -> None: ... + def GetOptions(self) -> EnumValueOptions: ... + +class OneofDescriptor: + def __new__(cls, name, full_name, index, containing_type, fields): ... + name: Any + full_name: Any + index: Any + containing_type: Any + fields: Any + def __init__(self, name, full_name, index, containing_type, fields) -> None: ... + def GetOptions(self) -> OneofOptions: ... + +class ServiceDescriptor(_NestedDescriptorBase): + index: Any + methods: Any + methods_by_name: Any + def __init__(self, name, full_name, index, methods, options=..., file=..., serialized_start=..., serialized_end=...) -> None: ... + def FindMethodByName(self, name): ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> ServiceOptions: ... + +class MethodDescriptor(DescriptorBase): + name: Any + full_name: Any + index: Any + containing_service: Any + input_type: Any + output_type: Any + def __init__(self, name, full_name, index, containing_service, input_type, output_type, options=...) -> None: ... + def GetOptions(self) -> MethodOptions: ... + +class FileDescriptor(DescriptorBase): + def __new__(cls, name, package, options=..., serialized_pb=..., dependencies=..., public_dependencies=..., syntax=..., pool=...): ... + _options: Any + pool: Any + message_types_by_name: Any + name: Any + package: Any + syntax: Any + serialized_pb: Any + enum_types_by_name: Any + extensions_by_name: Any + services_by_name: Any + dependencies: Any + public_dependencies: Any + def __init__(self, name, package, options=..., serialized_pb=..., dependencies=..., public_dependencies=..., syntax=..., pool=...) -> None: ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> FileOptions: ... + +def MakeDescriptor(desc_proto, package=..., build_file_if_cpp=..., syntax=...): ... +def _ParseOptions(message: Message, string: bytes) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi new file mode 100644 index 0000000..d0fbcdc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi @@ -0,0 +1,732 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class FileDescriptorSet(Message): + + @property + def file(self) -> RepeatedCompositeFieldContainer[FileDescriptorProto]: ... + + def __init__(self, + file: Optional[Iterable[FileDescriptorProto]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileDescriptorSet: ... + + +class FileDescriptorProto(Message): + name: Text + package: Text + dependency: RepeatedScalarFieldContainer[Text] + public_dependency: RepeatedScalarFieldContainer[int] + weak_dependency: RepeatedScalarFieldContainer[int] + syntax: Text + + @property + def message_type( + self) -> RepeatedCompositeFieldContainer[DescriptorProto]: ... + + @property + def enum_type( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto]: ... + + @property + def service( + self) -> RepeatedCompositeFieldContainer[ServiceDescriptorProto]: ... + + @property + def extension( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def options(self) -> FileOptions: ... + + @property + def source_code_info(self) -> SourceCodeInfo: ... + + def __init__(self, + name: Optional[Text] = ..., + package: Optional[Text] = ..., + dependency: Optional[Iterable[Text]] = ..., + public_dependency: Optional[Iterable[int]] = ..., + weak_dependency: Optional[Iterable[int]] = ..., + message_type: Optional[Iterable[DescriptorProto]] = ..., + enum_type: Optional[Iterable[EnumDescriptorProto]] = ..., + service: Optional[Iterable[ServiceDescriptorProto]] = ..., + extension: Optional[Iterable[FieldDescriptorProto]] = ..., + options: Optional[FileOptions] = ..., + source_code_info: Optional[SourceCodeInfo] = ..., + syntax: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileDescriptorProto: ... + + +class DescriptorProto(Message): + + class ExtensionRange(Message): + start: int + end: int + + @property + def options(self) -> ExtensionRangeOptions: ... + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + options: Optional[ExtensionRangeOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto.ExtensionRange: ... + + class ReservedRange(Message): + start: int + end: int + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto.ReservedRange: ... + name: Text + reserved_name: RepeatedScalarFieldContainer[Text] + + @property + def field( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def extension( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def nested_type( + self) -> RepeatedCompositeFieldContainer[DescriptorProto]: ... + + @property + def enum_type( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto]: ... + + @property + def extension_range( + self) -> RepeatedCompositeFieldContainer[DescriptorProto.ExtensionRange]: ... + + @property + def oneof_decl( + self) -> RepeatedCompositeFieldContainer[OneofDescriptorProto]: ... + + @property + def options(self) -> MessageOptions: ... + + @property + def reserved_range( + self) -> RepeatedCompositeFieldContainer[DescriptorProto.ReservedRange]: ... + + def __init__(self, + name: Optional[Text] = ..., + field: Optional[Iterable[FieldDescriptorProto]] = ..., + extension: Optional[Iterable[FieldDescriptorProto]] = ..., + nested_type: Optional[Iterable[DescriptorProto]] = ..., + enum_type: Optional[Iterable[EnumDescriptorProto]] = ..., + extension_range: Optional[Iterable[DescriptorProto.ExtensionRange]] = ..., + oneof_decl: Optional[Iterable[OneofDescriptorProto]] = ..., + options: Optional[MessageOptions] = ..., + reserved_range: Optional[Iterable[DescriptorProto.ReservedRange]] = ..., + reserved_name: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto: ... + + +class ExtensionRangeOptions(Message): + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ExtensionRangeOptions: ... + + +class FieldDescriptorProto(Message): + + class Type(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldDescriptorProto.Type: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldDescriptorProto.Type]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldDescriptorProto.Type]]: ... + TYPE_DOUBLE: FieldDescriptorProto.Type + TYPE_FLOAT: FieldDescriptorProto.Type + TYPE_INT64: FieldDescriptorProto.Type + TYPE_UINT64: FieldDescriptorProto.Type + TYPE_INT32: FieldDescriptorProto.Type + TYPE_FIXED64: FieldDescriptorProto.Type + TYPE_FIXED32: FieldDescriptorProto.Type + TYPE_BOOL: FieldDescriptorProto.Type + TYPE_STRING: FieldDescriptorProto.Type + TYPE_GROUP: FieldDescriptorProto.Type + TYPE_MESSAGE: FieldDescriptorProto.Type + TYPE_BYTES: FieldDescriptorProto.Type + TYPE_UINT32: FieldDescriptorProto.Type + TYPE_ENUM: FieldDescriptorProto.Type + TYPE_SFIXED32: FieldDescriptorProto.Type + TYPE_SFIXED64: FieldDescriptorProto.Type + TYPE_SINT32: FieldDescriptorProto.Type + TYPE_SINT64: FieldDescriptorProto.Type + + class Label(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldDescriptorProto.Label: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldDescriptorProto.Label]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldDescriptorProto.Label]]: ... + LABEL_OPTIONAL: FieldDescriptorProto.Label + LABEL_REQUIRED: FieldDescriptorProto.Label + LABEL_REPEATED: FieldDescriptorProto.Label + name: Text + number: int + label: FieldDescriptorProto.Label + type: FieldDescriptorProto.Type + type_name: Text + extendee: Text + default_value: Text + oneof_index: int + json_name: Text + + @property + def options(self) -> FieldOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + label: Optional[FieldDescriptorProto.Label] = ..., + type: Optional[FieldDescriptorProto.Type] = ..., + type_name: Optional[Text] = ..., + extendee: Optional[Text] = ..., + default_value: Optional[Text] = ..., + oneof_index: Optional[int] = ..., + json_name: Optional[Text] = ..., + options: Optional[FieldOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldDescriptorProto: ... + + +class OneofDescriptorProto(Message): + name: Text + + @property + def options(self) -> OneofOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + options: Optional[OneofOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneofDescriptorProto: ... + + +class EnumDescriptorProto(Message): + + class EnumReservedRange(Message): + start: int + end: int + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> EnumDescriptorProto.EnumReservedRange: ... + name: Text + reserved_name: RepeatedScalarFieldContainer[Text] + + @property + def value( + self) -> RepeatedCompositeFieldContainer[EnumValueDescriptorProto]: ... + + @property + def options(self) -> EnumOptions: ... + + @property + def reserved_range( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto.EnumReservedRange]: ... + + def __init__(self, + name: Optional[Text] = ..., + value: Optional[Iterable[EnumValueDescriptorProto]] = ..., + options: Optional[EnumOptions] = ..., + reserved_range: Optional[Iterable[EnumDescriptorProto.EnumReservedRange]] = ..., + reserved_name: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumDescriptorProto: ... + + +class EnumValueDescriptorProto(Message): + name: Text + number: int + + @property + def options(self) -> EnumValueOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + options: Optional[EnumValueOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValueDescriptorProto: ... + + +class ServiceDescriptorProto(Message): + name: Text + + @property + def method( + self) -> RepeatedCompositeFieldContainer[MethodDescriptorProto]: ... + + @property + def options(self) -> ServiceOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + method: Optional[Iterable[MethodDescriptorProto]] = ..., + options: Optional[ServiceOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ServiceDescriptorProto: ... + + +class MethodDescriptorProto(Message): + name: Text + input_type: Text + output_type: Text + client_streaming: bool + server_streaming: bool + + @property + def options(self) -> MethodOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + input_type: Optional[Text] = ..., + output_type: Optional[Text] = ..., + options: Optional[MethodOptions] = ..., + client_streaming: Optional[bool] = ..., + server_streaming: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MethodDescriptorProto: ... + + +class FileOptions(Message): + + class OptimizeMode(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FileOptions.OptimizeMode: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FileOptions.OptimizeMode]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FileOptions.OptimizeMode]]: ... + SPEED: FileOptions.OptimizeMode + CODE_SIZE: FileOptions.OptimizeMode + LITE_RUNTIME: FileOptions.OptimizeMode + java_package: Text + java_outer_classname: Text + java_multiple_files: bool + java_generate_equals_and_hash: bool + java_string_check_utf8: bool + optimize_for: FileOptions.OptimizeMode + go_package: Text + cc_generic_services: bool + java_generic_services: bool + py_generic_services: bool + php_generic_services: bool + deprecated: bool + cc_enable_arenas: bool + objc_class_prefix: Text + csharp_namespace: Text + swift_prefix: Text + php_class_prefix: Text + php_namespace: Text + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + java_package: Optional[Text] = ..., + java_outer_classname: Optional[Text] = ..., + java_multiple_files: Optional[bool] = ..., + java_generate_equals_and_hash: Optional[bool] = ..., + java_string_check_utf8: Optional[bool] = ..., + optimize_for: Optional[FileOptions.OptimizeMode] = ..., + go_package: Optional[Text] = ..., + cc_generic_services: Optional[bool] = ..., + java_generic_services: Optional[bool] = ..., + py_generic_services: Optional[bool] = ..., + php_generic_services: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + cc_enable_arenas: Optional[bool] = ..., + objc_class_prefix: Optional[Text] = ..., + csharp_namespace: Optional[Text] = ..., + swift_prefix: Optional[Text] = ..., + php_class_prefix: Optional[Text] = ..., + php_namespace: Optional[Text] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileOptions: ... + + +class MessageOptions(Message): + message_set_wire_format: bool + no_standard_descriptor_accessor: bool + deprecated: bool + map_entry: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + message_set_wire_format: Optional[bool] = ..., + no_standard_descriptor_accessor: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + map_entry: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageOptions: ... + + +class FieldOptions(Message): + + class CType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldOptions.CType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldOptions.CType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldOptions.CType]]: ... + STRING: FieldOptions.CType + CORD: FieldOptions.CType + STRING_PIECE: FieldOptions.CType + + class JSType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldOptions.JSType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldOptions.JSType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldOptions.JSType]]: ... + JS_NORMAL: FieldOptions.JSType + JS_STRING: FieldOptions.JSType + JS_NUMBER: FieldOptions.JSType + ctype: FieldOptions.CType + packed: bool + jstype: FieldOptions.JSType + lazy: bool + deprecated: bool + weak: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + ctype: Optional[FieldOptions.CType] = ..., + packed: Optional[bool] = ..., + jstype: Optional[FieldOptions.JSType] = ..., + lazy: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + weak: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldOptions: ... + + +class OneofOptions(Message): + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneofOptions: ... + + +class EnumOptions(Message): + allow_alias: bool + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + allow_alias: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumOptions: ... + + +class EnumValueOptions(Message): + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValueOptions: ... + + +class ServiceOptions(Message): + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ServiceOptions: ... + + +class MethodOptions(Message): + + class IdempotencyLevel(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MethodOptions.IdempotencyLevel: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MethodOptions.IdempotencyLevel]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MethodOptions.IdempotencyLevel]]: ... + IDEMPOTENCY_UNKNOWN: MethodOptions.IdempotencyLevel + NO_SIDE_EFFECTS: MethodOptions.IdempotencyLevel + IDEMPOTENT: MethodOptions.IdempotencyLevel + deprecated: bool + idempotency_level: MethodOptions.IdempotencyLevel + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + idempotency_level: Optional[MethodOptions.IdempotencyLevel] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MethodOptions: ... + + +class UninterpretedOption(Message): + + class NamePart(Message): + name_part: Text + is_extension: bool + + def __init__(self, + name_part: Text, + is_extension: bool, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UninterpretedOption.NamePart: ... + identifier_value: Text + positive_int_value: int + negative_int_value: int + double_value: float + string_value: bytes + aggregate_value: Text + + @property + def name( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption.NamePart]: ... + + def __init__(self, + name: Optional[Iterable[UninterpretedOption.NamePart]] = ..., + identifier_value: Optional[Text] = ..., + positive_int_value: Optional[int] = ..., + negative_int_value: Optional[int] = ..., + double_value: Optional[float] = ..., + string_value: Optional[bytes] = ..., + aggregate_value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UninterpretedOption: ... + + +class SourceCodeInfo(Message): + + class Location(Message): + path: RepeatedScalarFieldContainer[int] + span: RepeatedScalarFieldContainer[int] + leading_comments: Text + trailing_comments: Text + leading_detached_comments: RepeatedScalarFieldContainer[Text] + + def __init__(self, + path: Optional[Iterable[int]] = ..., + span: Optional[Iterable[int]] = ..., + leading_comments: Optional[Text] = ..., + trailing_comments: Optional[Text] = ..., + leading_detached_comments: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceCodeInfo.Location: ... + + @property + def location( + self) -> RepeatedCompositeFieldContainer[SourceCodeInfo.Location]: ... + + def __init__(self, + location: Optional[Iterable[SourceCodeInfo.Location]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceCodeInfo: ... + + +class GeneratedCodeInfo(Message): + + class Annotation(Message): + path: RepeatedScalarFieldContainer[int] + source_file: Text + begin: int + end: int + + def __init__(self, + path: Optional[Iterable[int]] = ..., + source_file: Optional[Text] = ..., + begin: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> GeneratedCodeInfo.Annotation: ... + + @property + def annotation( + self) -> RepeatedCompositeFieldContainer[GeneratedCodeInfo.Annotation]: ... + + def __init__(self, + annotation: Optional[Iterable[GeneratedCodeInfo.Annotation]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> GeneratedCodeInfo: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi new file mode 100644 index 0000000..f1ade52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi @@ -0,0 +1,18 @@ +from typing import Any, Optional + +class DescriptorPool: + def __new__(cls, descriptor_db: Optional[Any] = ...): ... + def __init__(self, descriptor_db: Optional[Any] = ...) -> None: ... + def Add(self, file_desc_proto): ... + def AddSerializedFile(self, serialized_file_desc_proto): ... + def AddDescriptor(self, desc): ... + def AddEnumDescriptor(self, enum_desc): ... + def AddFileDescriptor(self, file_desc): ... + def FindFileByName(self, file_name): ... + def FindFileContainingSymbol(self, symbol): ... + def FindMessageTypeByName(self, full_name): ... + def FindEnumTypeByName(self, full_name): ... + def FindFieldByName(self, full_name): ... + def FindExtensionByName(self, full_name): ... + +def Default(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi new file mode 100644 index 0000000..378c2e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, +) + + +class Duration(Message, well_known_types.Duration): + seconds: int + nanos: int + + def __init__(self, + seconds: Optional[int] = ..., + nanos: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Duration: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi new file mode 100644 index 0000000..295ebfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi @@ -0,0 +1,12 @@ +from google.protobuf.message import ( + Message, +) + + +class Empty(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Empty: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi new file mode 100644 index 0000000..1c96a02 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi @@ -0,0 +1,24 @@ +from google.protobuf.internal.containers import ( + RepeatedScalarFieldContainer, +) +from google.protobuf.internal import well_known_types + +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class FieldMask(Message, well_known_types.FieldMask): + paths: RepeatedScalarFieldContainer[Text] + + def __init__(self, + paths: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldMask: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi new file mode 100644 index 0000000..33e603c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi @@ -0,0 +1,54 @@ +from google.protobuf.descriptor import Descriptor +from google.protobuf.internal.message_listener import MessageListener +from google.protobuf.message import Message +from typing import ( + Sequence, TypeVar, Generic, Any, Iterator, Iterable, + Union, Optional, Callable, overload, List +) + +_T = TypeVar('_T') +class BaseContainer(Sequence[_T]): + def __init__(self, message_listener: MessageListener) -> None: ... + def __len__(self) -> int: ... + def __ne__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + @overload + def __getitem__(self, key: int) -> _T: ... + @overload + def __getitem__(self, key: slice) -> List[_T]: ... + +class RepeatedScalarFieldContainer(BaseContainer[_T]): + def __init__(self, message_listener: MessageListener, message_descriptor: Descriptor) -> None: ... + def append(self, value: _T) -> None: ... + def insert(self, key: int, value: _T) -> None: ... + def extend(self, elem_seq: Optional[Iterable[_T]]) -> None: ... + def MergeFrom(self, other: RepeatedScalarFieldContainer[_T]) -> None: ... + def remove(self, elem: _T) -> None: ... + def pop(self, key: int = ...) -> _T: ... + @overload + def __setitem__(self, key: int, value: _T) -> None: ... + @overload + def __setitem__(self, key: slice, value: Iterable[_T]) -> None: ... + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, values: Iterable[_T]) -> None: ... + def __delitem__(self, key: Union[int, slice]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + +class RepeatedCompositeFieldContainer(BaseContainer[_T]): + def __init__(self, message_listener: MessageListener, type_checker: Any) -> None: ... + def add(self, **kwargs: Any) -> _T: ... + def extend(self, elem_seq: Iterable[_T]) -> None: ... + def MergeFrom(self, other: RepeatedCompositeFieldContainer[_T]) -> None: ... + def remove(self, elem: _T) -> None: ... + def pop(self, key: int = ...) -> _T: ... + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __delitem__(self, key: Union[int, slice]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + +# Classes not yet typed +class Mapping(Any): ... +class MutableMapping(Mapping): ... +class ScalarMap(MutableMapping): ... +class MessageMap(MutableMapping): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi new file mode 100644 index 0000000..24774ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi @@ -0,0 +1,30 @@ +from typing import Any + +def ReadTag(buffer, pos): ... +def EnumDecoder(field_number, is_repeated, is_packed, key, new_default): ... + +Int32Decoder: Any +Int64Decoder: Any +UInt32Decoder: Any +UInt64Decoder: Any +SInt32Decoder: Any +SInt64Decoder: Any +Fixed32Decoder: Any +Fixed64Decoder: Any +SFixed32Decoder: Any +SFixed64Decoder: Any +FloatDecoder: Any +DoubleDecoder: Any +BoolDecoder: Any + +def StringDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def BytesDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def GroupDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def MessageDecoder(field_number, is_repeated, is_packed, key, new_default): ... + +MESSAGE_SET_ITEM_TAG: Any + +def MessageSetItemDecoder(extensions_by_number): ... +def MapDecoder(field_descriptor, new_default, is_message_map): ... + +SkipField: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi new file mode 100644 index 0000000..7a7923f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi @@ -0,0 +1,34 @@ +from typing import Any + +Int32Sizer: Any +UInt32Sizer: Any +SInt32Sizer: Any +Fixed32Sizer: Any +Fixed64Sizer: Any +BoolSizer: Any + +def StringSizer(field_number, is_repeated, is_packed): ... +def BytesSizer(field_number, is_repeated, is_packed): ... +def GroupSizer(field_number, is_repeated, is_packed): ... +def MessageSizer(field_number, is_repeated, is_packed): ... +def MessageSetItemSizer(field_number): ... +def MapSizer(field_descriptor): ... +def TagBytes(field_number, wire_type): ... + +Int32Encoder: Any +UInt32Encoder: Any +SInt32Encoder: Any +Fixed32Encoder: Any +Fixed64Encoder: Any +SFixed32Encoder: Any +SFixed64Encoder: Any +FloatEncoder: Any +DoubleEncoder: Any + +def BoolEncoder(field_number, is_repeated, is_packed): ... +def StringEncoder(field_number, is_repeated, is_packed): ... +def BytesEncoder(field_number, is_repeated, is_packed): ... +def GroupEncoder(field_number, is_repeated, is_packed): ... +def MessageEncoder(field_number, is_repeated, is_packed): ... +def MessageSetItemEncoder(field_number): ... +def MapEncoder(field_descriptor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi new file mode 100644 index 0000000..61d6ea1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Tuple + +class EnumTypeWrapper(object): + def __init__(self, enum_type: Any) -> None: ... + def Name(self, number: int) -> bytes: ... + def Value(self, name: bytes) -> int: ... + def keys(self) -> List[bytes]: ... + def values(self) -> List[int]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, int]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi new file mode 100644 index 0000000..e8d33a5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi @@ -0,0 +1,5 @@ +class MessageListener(object): + def Modified(self) -> None: ... + +class NullMessageListener(MessageListener): + def Modified(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi new file mode 100644 index 0000000..91a42a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi @@ -0,0 +1,92 @@ +from typing import Any, Optional +from datetime import datetime + +class Error(Exception): ... +class ParseError(Error): ... + +# This is named 'Any' in the original, but that conflicts with typing.Any, +# and we really only need this file to mix in. +class Any_: + type_url: Any = ... + value: Any = ... + def Pack(self, msg: Any, type_url_prefix: bytes = ..., deterministic: Optional[Any] = ...) -> None: ... + def Unpack(self, msg: Any): ... + def TypeName(self): ... + def Is(self, descriptor: Any): ... + +class Timestamp: + def ToJsonString(self) -> str: ... + seconds: Any = ... + nanos: Any = ... + def FromJsonString(self, value: Any) -> None: ... + def GetCurrentTime(self) -> None: ... + def ToNanoseconds(self): ... + def ToMicroseconds(self): ... + def ToMilliseconds(self): ... + def ToSeconds(self): ... + def FromNanoseconds(self, nanos: Any) -> None: ... + def FromMicroseconds(self, micros: Any) -> None: ... + def FromMilliseconds(self, millis: Any) -> None: ... + def FromSeconds(self, seconds: Any) -> None: ... + def ToDatetime(self) -> datetime: ... + def FromDatetime(self, dt: datetime) -> None: ... + +class Duration: + def ToJsonString(self) -> str: ... + seconds: Any = ... + nanos: Any = ... + def FromJsonString(self, value: Any) -> None: ... + def ToNanoseconds(self): ... + def ToMicroseconds(self): ... + def ToMilliseconds(self): ... + def ToSeconds(self): ... + def FromNanoseconds(self, nanos: Any) -> None: ... + def FromMicroseconds(self, micros: Any) -> None: ... + def FromMilliseconds(self, millis: Any) -> None: ... + def FromSeconds(self, seconds: Any) -> None: ... + def ToTimedelta(self): ... + def FromTimedelta(self, td: Any) -> None: ... + +class FieldMask: + def ToJsonString(self) -> str: ... + def FromJsonString(self, value: Any) -> None: ... + def IsValidForDescriptor(self, message_descriptor: Any): ... + def AllFieldsFromDescriptor(self, message_descriptor: Any) -> None: ... + def CanonicalFormFromMask(self, mask: Any) -> None: ... + def Union(self, mask1: Any, mask2: Any) -> None: ... + def Intersect(self, mask1: Any, mask2: Any) -> None: ... + def MergeMessage(self, source: Any, destination: Any, replace_message_field: bool = ..., replace_repeated_field: bool = ...) -> None: ... + +class _FieldMaskTree: + def __init__(self, field_mask: Optional[Any] = ...) -> None: ... + def MergeFromFieldMask(self, field_mask: Any) -> None: ... + def AddPath(self, path: Any): ... + def ToFieldMask(self, field_mask: Any) -> None: ... + def IntersectPath(self, path: Any, intersection: Any): ... + def AddLeafNodes(self, prefix: Any, node: Any) -> None: ... + def MergeMessage(self, source: Any, destination: Any, replace_message: Any, replace_repeated: Any) -> None: ... + +class Struct: + def __getitem__(self, key: Any): ... + def __contains__(self, item: Any): ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __len__(self): ... + def __iter__(self): ... + def keys(self): ... + def values(self): ... + def items(self): ... + def get_or_create_list(self, key: Any): ... + def get_or_create_struct(self, key: Any): ... + def update(self, dictionary: Any) -> None: ... + +class ListValue: + def __len__(self): ... + def append(self, value: Any) -> None: ... + def extend(self, elem_seq: Any) -> None: ... + def __getitem__(self, index: Any): ... + def __setitem__(self, index: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def items(self) -> None: ... + def add_struct(self): ... + def add_list(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi new file mode 100644 index 0000000..3dcbd04 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi @@ -0,0 +1,50 @@ +from typing import Any + +TAG_TYPE_BITS: Any +TAG_TYPE_MASK: Any +WIRETYPE_VARINT: Any +WIRETYPE_FIXED64: Any +WIRETYPE_LENGTH_DELIMITED: Any +WIRETYPE_START_GROUP: Any +WIRETYPE_END_GROUP: Any +WIRETYPE_FIXED32: Any +INT32_MAX: Any +INT32_MIN: Any +UINT32_MAX: Any +INT64_MAX: Any +INT64_MIN: Any +UINT64_MAX: Any +FORMAT_UINT32_LITTLE_ENDIAN: Any +FORMAT_UINT64_LITTLE_ENDIAN: Any +FORMAT_FLOAT_LITTLE_ENDIAN: Any +FORMAT_DOUBLE_LITTLE_ENDIAN: Any + +def PackTag(field_number, wire_type): ... +def UnpackTag(tag): ... +def ZigZagEncode(value): ... +def ZigZagDecode(value): ... +def Int32ByteSize(field_number, int32): ... +def Int32ByteSizeNoTag(int32): ... +def Int64ByteSize(field_number, int64): ... +def UInt32ByteSize(field_number, uint32): ... +def UInt64ByteSize(field_number, uint64): ... +def SInt32ByteSize(field_number, int32): ... +def SInt64ByteSize(field_number, int64): ... +def Fixed32ByteSize(field_number, fixed32): ... +def Fixed64ByteSize(field_number, fixed64): ... +def SFixed32ByteSize(field_number, sfixed32): ... +def SFixed64ByteSize(field_number, sfixed64): ... +def FloatByteSize(field_number, flt): ... +def DoubleByteSize(field_number, double): ... +def BoolByteSize(field_number, b): ... +def EnumByteSize(field_number, enum): ... +def StringByteSize(field_number, string): ... +def BytesByteSize(field_number, b): ... +def GroupByteSize(field_number, message): ... +def MessageByteSize(field_number, message): ... +def MessageSetItemByteSize(field_number, msg): ... +def TagByteSize(field_number): ... + +NON_PACKABLE_TYPES: Any + +def IsTypePackable(field_type): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi new file mode 100644 index 0000000..e61ccb8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi @@ -0,0 +1,31 @@ +import sys +from typing import Any, Dict, Text, TypeVar, Union +from google.protobuf.message import Message + +_MessageVar = TypeVar('_MessageVar', bound=Message) + +class Error(Exception): ... + +class ParseError(Error): ... + +class SerializeToJsonError(Error): ... + +def MessageToJson( + message: Message, + including_default_value_fields: bool = ..., + preserving_proto_field_name: bool = ..., + indent: int = ..., + sort_keys: bool = ..., + use_integers_for_enums: bool = ... +) -> str: ... + +def MessageToDict( + message: Message, + including_default_value_fields: bool = ..., + preserving_proto_field_name: bool = ..., + use_integers_for_enums: bool = ... +) -> Dict[Text, Any]: ... + +def Parse(text: Union[bytes, Text], message: _MessageVar, ignore_unknown_fields: bool = ...) -> _MessageVar: ... + +def ParseDict(js_dict: Any, message: _MessageVar, ignore_unknown_fields: bool = ...) -> _MessageVar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi new file mode 100644 index 0000000..fd12d10 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi @@ -0,0 +1,428 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnumForMap, +) +from typing import ( + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class Proto2MapEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Proto2MapEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Proto2MapEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Proto2MapEnum]]: ... +PROTO2_MAP_ENUM_FOO: Proto2MapEnum +PROTO2_MAP_ENUM_BAR: Proto2MapEnum +PROTO2_MAP_ENUM_BAZ: Proto2MapEnum + + +class Proto2MapEnumPlusExtra(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Proto2MapEnumPlusExtra: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Proto2MapEnumPlusExtra]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Proto2MapEnumPlusExtra]]: ... +E_PROTO2_MAP_ENUM_FOO: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_BAR: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_BAZ: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_EXTRA: Proto2MapEnumPlusExtra + + +class TestEnumMap(Message): + + class KnownMapFieldEntry(Message): + key: int + value: Proto2MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap.KnownMapFieldEntry: ... + + class UnknownMapFieldEntry(Message): + key: int + value: Proto2MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap.UnknownMapFieldEntry: ... + + @property + def known_map_field(self) -> MutableMapping[int, Proto2MapEnum]: ... + + @property + def unknown_map_field(self) -> MutableMapping[int, Proto2MapEnum]: ... + + def __init__(self, + known_map_field: Optional[Mapping[int, Proto2MapEnum]] = ..., + unknown_map_field: Optional[Mapping[int, Proto2MapEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap: ... + + +class TestEnumMapPlusExtra(Message): + + class KnownMapFieldEntry(Message): + key: int + value: Proto2MapEnumPlusExtra + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnumPlusExtra] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra.KnownMapFieldEntry: ... + + class UnknownMapFieldEntry(Message): + key: int + value: Proto2MapEnumPlusExtra + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnumPlusExtra] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra.UnknownMapFieldEntry: ... + + @property + def known_map_field(self) -> MutableMapping[int, Proto2MapEnumPlusExtra]: ... + + @property + def unknown_map_field(self) -> MutableMapping[int, Proto2MapEnumPlusExtra]: ... + + def __init__(self, + known_map_field: Optional[Mapping[int, Proto2MapEnumPlusExtra]] = ..., + unknown_map_field: Optional[Mapping[int, Proto2MapEnumPlusExtra]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra: ... + + +class TestImportEnumMap(Message): + + class ImportEnumAmpEntry(Message): + key: int + value: ImportEnumForMap + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ImportEnumForMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestImportEnumMap.ImportEnumAmpEntry: ... + + @property + def import_enum_amp(self) -> MutableMapping[int, ImportEnumForMap]: ... + + def __init__(self, + import_enum_amp: Optional[Mapping[int, ImportEnumForMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestImportEnumMap: ... + + +class TestIntIntMap(Message): + + class MEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIntIntMap.MEntry: ... + + @property + def m(self) -> MutableMapping[int, int]: ... + + def __init__(self, + m: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIntIntMap: ... + + +class TestMaps(Message): + + class MInt32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MInt32Entry: ... + + class MInt64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MInt64Entry: ... + + class MUint32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MUint32Entry: ... + + class MUint64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MUint64Entry: ... + + class MSint32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSint32Entry: ... + + class MSint64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSint64Entry: ... + + class MFixed32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MFixed32Entry: ... + + class MFixed64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MFixed64Entry: ... + + class MSfixed32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSfixed32Entry: ... + + class MSfixed64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSfixed64Entry: ... + + class MBoolEntry(Message): + key: bool + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MBoolEntry: ... + + class MStringEntry(Message): + key: Text + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MStringEntry: ... + + @property + def m_int32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_int64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_uint32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_uint64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sint32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sint64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_fixed32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_fixed64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sfixed32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sfixed64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_bool(self) -> MutableMapping[bool, TestIntIntMap]: ... + + @property + def m_string(self) -> MutableMapping[Text, TestIntIntMap]: ... + + def __init__(self, + m_int32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_int64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_uint32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_uint64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sint32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sint64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_fixed32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_fixed64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sfixed32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sfixed64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_bool: Optional[Mapping[bool, TestIntIntMap]] = ..., + m_string: Optional[Mapping[Text, TestIntIntMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps: ... + + +class TestSubmessageMaps(Message): + + @property + def m(self) -> TestMaps: ... + + def __init__(self, + m: Optional[TestMaps] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSubmessageMaps: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi new file mode 100644 index 0000000..25058bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi @@ -0,0 +1,882 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_no_arena_pb2 import ( + ForeignMessage, +) +from google.protobuf.unittest_pb2 import ( + ForeignMessage as ForeignMessage1, + TestAllTypes, + TestRequired, +) +from typing import ( + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class MapEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MapEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MapEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MapEnum]]: ... + + +MAP_ENUM_FOO: MapEnum +MAP_ENUM_BAR: MapEnum +MAP_ENUM_BAZ: MapEnum + + +class TestMap(Message): + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapStringStringEntry: ... + + class MapInt32BytesEntry(Message): + key: int + value: bytes + + def __init__(self, + key: Optional[int] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32BytesEntry: ... + + class MapInt32EnumEntry(Message): + key: int + value: MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32EnumEntry: ... + + class MapInt32ForeignMessageEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32ForeignMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestMap.MapStringForeignMessageEntry: ... + + class MapInt32AllTypesEntry(Message): + key: int + + @property + def value(self) -> TestAllTypes: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32AllTypesEntry: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_int32_bytes(self) -> MutableMapping[int, bytes]: ... + + @property + def map_int32_enum(self) -> MutableMapping[int, MapEnum]: ... + + @property + def map_int32_foreign_message( + self) -> MutableMapping[int, ForeignMessage1]: ... + + @property + def map_string_foreign_message( + self) -> MutableMapping[Text, ForeignMessage1]: ... + + @property + def map_int32_all_types(self) -> MutableMapping[int, TestAllTypes]: ... + + def __init__(self, + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_int32_bytes: Optional[Mapping[int, bytes]] = ..., + map_int32_enum: Optional[Mapping[int, MapEnum]] = ..., + map_int32_foreign_message: Optional[Mapping[int, ForeignMessage1]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessage1]] = ..., + map_int32_all_types: Optional[Mapping[int, TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap: ... + + +class TestMapSubmessage(Message): + + @property + def test_map(self) -> TestMap: ... + + def __init__(self, + test_map: Optional[TestMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMapSubmessage: ... + + +class TestMessageMap(Message): + + class MapInt32MessageEntry(Message): + key: int + + @property + def value(self) -> TestAllTypes: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageMap.MapInt32MessageEntry: ... + + @property + def map_int32_message(self) -> MutableMapping[int, TestAllTypes]: ... + + def __init__(self, + map_int32_message: Optional[Mapping[int, TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageMap: ... + + +class TestSameTypeMap(Message): + + class Map1Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap.Map1Entry: ... + + class Map2Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap.Map2Entry: ... + + @property + def map1(self) -> MutableMapping[int, int]: ... + + @property + def map2(self) -> MutableMapping[int, int]: ... + + def __init__(self, + map1: Optional[Mapping[int, int]] = ..., + map2: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap: ... + + +class TestRequiredMessageMap(Message): + + class MapFieldEntry(Message): + key: int + + @property + def value(self) -> TestRequired: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestRequired] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestRequiredMessageMap.MapFieldEntry: ... + + @property + def map_field(self) -> MutableMapping[int, TestRequired]: ... + + def __init__(self, + map_field: Optional[Mapping[int, TestRequired]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredMessageMap: ... + + +class TestArenaMap(Message): + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapStringStringEntry: ... + + class MapInt32BytesEntry(Message): + key: int + value: bytes + + def __init__(self, + key: Optional[int] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32BytesEntry: ... + + class MapInt32EnumEntry(Message): + key: int + value: MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32EnumEntry: ... + + class MapInt32ForeignMessageEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapInt32ForeignMessageEntry: ... + + class MapInt32ForeignMessageNoArenaEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapInt32ForeignMessageNoArenaEntry: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_int32_bytes(self) -> MutableMapping[int, bytes]: ... + + @property + def map_int32_enum(self) -> MutableMapping[int, MapEnum]: ... + + @property + def map_int32_foreign_message( + self) -> MutableMapping[int, ForeignMessage1]: ... + + @property + def map_int32_foreign_message_no_arena( + self) -> MutableMapping[int, ForeignMessage]: ... + + def __init__(self, + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_int32_bytes: Optional[Mapping[int, bytes]] = ..., + map_int32_enum: Optional[Mapping[int, MapEnum]] = ..., + map_int32_foreign_message: Optional[Mapping[int, ForeignMessage1]] = ..., + map_int32_foreign_message_no_arena: Optional[Mapping[int, ForeignMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap: ... + + +class MessageContainingEnumCalledType(Message): + + class Type(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MessageContainingEnumCalledType.Type: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MessageContainingEnumCalledType.Type]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + MessageContainingEnumCalledType.Type]]: ... + TYPE_FOO: MessageContainingEnumCalledType.Type + + class TypeEntry(Message): + key: Text + + @property + def value(self) -> MessageContainingEnumCalledType: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[MessageContainingEnumCalledType] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> MessageContainingEnumCalledType.TypeEntry: ... + + @property + def type(self) -> MutableMapping[Text, + MessageContainingEnumCalledType]: ... + + def __init__(self, + type: Optional[Mapping[Text, MessageContainingEnumCalledType]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageContainingEnumCalledType: ... + + +class MessageContainingMapCalledEntry(Message): + + class EntryEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> MessageContainingMapCalledEntry.EntryEntry: ... + + @property + def entry(self) -> MutableMapping[int, int]: ... + + def __init__(self, + entry: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageContainingMapCalledEntry: ... + + +class TestRecursiveMapMessage(Message): + + class AEntry(Message): + key: Text + + @property + def value(self) -> TestRecursiveMapMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestRecursiveMapMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMapMessage.AEntry: ... + + @property + def a(self) -> MutableMapping[Text, TestRecursiveMapMessage]: ... + + def __init__(self, + a: Optional[Mapping[Text, TestRecursiveMapMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMapMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi new file mode 100644 index 0000000..4bf8cab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi @@ -0,0 +1,46 @@ +from typing import Any, Sequence, Optional, Tuple + +from .descriptor import ( + DescriptorBase, + FieldDescriptor, +) + +class Error(Exception): ... +class DecodeError(Error): ... +class EncodeError(Error): ... + +class _ExtensionDict: + def __getitem__(self, extension_handle: DescriptorBase) -> Any: ... + def __setitem__(self, extension_handle: DescriptorBase, value: Any) -> None: ... + +class Message: + DESCRIPTOR: Any + def __deepcopy__(self, memo=...): ... + def __eq__(self, other_msg): ... + def __ne__(self, other_msg): ... + def MergeFrom(self, other_msg: Message) -> None: ... + def CopyFrom(self, other_msg: Message) -> None: ... + def Clear(self) -> None: ... + def SetInParent(self) -> None: ... + def IsInitialized(self) -> bool: ... + def MergeFromString(self, serialized: Any) -> int: ... # TODO: we need to be able to call buffer() on serialized + def ParseFromString(self, serialized: Any) -> None: ... + def SerializeToString(self, deterministic: bool = ...) -> bytes: ... + def SerializePartialToString(self, deterministic: bool = ...) -> bytes: ... + def ListFields(self) -> Sequence[Tuple[FieldDescriptor, Any]]: ... + def HasExtension(self, extension_handle): ... + def ClearExtension(self, extension_handle): ... + def ByteSize(self) -> int: ... + @property + def Extensions(self) -> _ExtensionDict: ... + + # Intentionally left out typing on these three methods, because they are + # stringly typed and it is not useful to call them on a Message directly. + # We prefer more specific typing on individual subclasses of Message + # See https://github.com/dropbox/mypy-protobuf/issues/62 for details + def HasField(self, field_name: Any) -> bool: ... + def ClearField(self, field_name: Any) -> None: ... + def WhichOneof(self, oneof_group: Any) -> Any: ... + + # TODO: check kwargs + def __init__(self, **kwargs) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi new file mode 100644 index 0000000..ad31e22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi @@ -0,0 +1,13 @@ +from typing import Any, Dict, Iterable, Optional, Type + +from .message import Message +from .descriptor import Descriptor +from .descriptor_pool import DescriptorPool + +class MessageFactory: + pool: Any + def __init__(self, pool: Optional[DescriptorPool] = ...) -> None: ... + def GetPrototype(self, descriptor: Descriptor) -> Type[Message]: ... + def GetMessages(self, files: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... + +def GetMessages(file_protos: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi new file mode 100644 index 0000000..3ca5055 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi @@ -0,0 +1,6 @@ +class GeneratedProtocolMessageType(type): + def __new__(cls, name, bases, dictionary): ... + def __init__(self, name, bases, dictionary) -> None: ... + +def ParseMessage(descriptor, byte_str): ... +def MakeClass(descriptor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi new file mode 100644 index 0000000..4874d53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi @@ -0,0 +1,39 @@ +from concurrent.futures import Future +from typing import Callable, Optional, Text, Type + +from google.protobuf.descriptor import MethodDescriptor, ServiceDescriptor +from google.protobuf.message import Message + +class RpcException(Exception): ... + +class Service: + @staticmethod + def GetDescriptor() -> ServiceDescriptor: ... + def CallMethod( + self, + method_descriptor: MethodDescriptor, + rpc_controller: RpcController, + request: Message, + done: Optional[Callable[[Message], None]], + ) -> Optional[Future[Message]]: ... + def GetRequestClass(self, method_descriptor: MethodDescriptor) -> Type[Message]: ... + def GetResponseClass(self, method_descriptor: MethodDescriptor) -> Type[Message]: ... + +class RpcController: + def Reset(self) -> None: ... + def Failed(self) -> bool: ... + def ErrorText(self) -> Optional[Text]: ... + def StartCancel(self) -> None: ... + def SetFailed(self, reason: Text) -> None: ... + def IsCanceled(self) -> bool: ... + def NotifyOnCancel(self, callback: Callable[[], None]) -> None: ... + +class RpcChannel: + def CallMethod( + self, + method_descriptor: MethodDescriptor, + rpc_controller: RpcController, + request: Message, + response_class: Type[Message], + done: Optional[Callable[[Message], None]], + ) -> Optional[Future[Message]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi new file mode 100644 index 0000000..527ac1a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi @@ -0,0 +1,18 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, + Text, +) + + +class SourceContext(Message): + file_name: Text + + def __init__(self, + file_name: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceContext: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi new file mode 100644 index 0000000..21afcc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi @@ -0,0 +1,105 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.internal import well_known_types + +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class NullValue(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NullValue: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NullValue]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NullValue]]: ... + + +NULL_VALUE: NullValue + + +class Struct(Message, well_known_types.Struct): + class FieldsEntry(Message): + key: Text + + @property + def value(self) -> Value: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Value] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Struct.FieldsEntry: ... + + @property + def fields(self) -> MutableMapping[Text, Value]: ... + + def __init__(self, + fields: Optional[Mapping[Text, Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Struct: ... + + +class _Value(Message): + null_value: NullValue + number_value: float + string_value: Text + bool_value: bool + + @property + def struct_value(self) -> Struct: ... + + @property + def list_value(self) -> ListValue: ... + + def __init__(self, + null_value: Optional[NullValue] = ..., + number_value: Optional[float] = ..., + string_value: Optional[Text] = ..., + bool_value: Optional[bool] = ..., + struct_value: Optional[Struct] = ..., + list_value: Optional[ListValue] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> _Value: ... + + +Value = _Value + + +class ListValue(Message, well_known_types.ListValue): + + @property + def values(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + values: Optional[Iterable[Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ListValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi new file mode 100644 index 0000000..477d80e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi @@ -0,0 +1,14 @@ +from typing import Dict, Iterable, Type + +from .descriptor import EnumDescriptor, FileDescriptor +from .message import Message +from .message_factory import MessageFactory + +class SymbolDatabase(MessageFactory): + def RegisterMessage(self, message: Type[Message]) -> Type[Message]: ... + def RegisterEnumDescriptor(self, enum_descriptor: Type[EnumDescriptor]) -> EnumDescriptor: ... + def RegisterFileDescriptor(self, file_descriptor: Type[FileDescriptor]) -> FileDescriptor: ... + def GetSymbol(self, symbol: bytes) -> Type[Message]: ... + def GetMessages(self, files: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... + +def Default(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi new file mode 100644 index 0000000..03e34be --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi @@ -0,0 +1,627 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +import builtins +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnumProto2(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnumProto2: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnumProto2]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnumProto2]]: ... + + +FOREIGN_FOO: ForeignEnumProto2 +FOREIGN_BAR: ForeignEnumProto2 +FOREIGN_BAZ: ForeignEnumProto2 + + +class TestAllTypesProto2(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypesProto2.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypesProto2.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypesProto2.NestedEnum]]: ... + FOO: TestAllTypesProto2.NestedEnum + BAR: TestAllTypesProto2.NestedEnum + BAZ: TestAllTypesProto2.NestedEnum + NEG: TestAllTypesProto2.NestedEnum + + class NestedMessage(Message): + a: int + + @property + def corecursive(self) -> TestAllTypesProto2: ... + + def __init__(self, + a: Optional[int] = ..., + corecursive: Optional[TestAllTypesProto2] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.NestedMessage: ... + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringStringEntry: ... + + class MapStringBytesEntry(Message): + key: Text + value: bytes + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringBytesEntry: ... + + class MapStringNestedMessageEntry(Message): + key: Text + + @property + def value(self) -> TestAllTypesProto2.NestedMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto2.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringNestedMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessageProto2: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessageProto2] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringForeignMessageEntry: ... + + class MapStringNestedEnumEntry(Message): + key: Text + value: TestAllTypesProto2.NestedEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto2.NestedEnum] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringNestedEnumEntry: ... + + class MapStringForeignEnumEntry(Message): + key: Text + value: ForeignEnumProto2 + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignEnumProto2] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringForeignEnumEntry: ... + + class Data(Message): + group_int32: int + group_uint32: int + + def __init__(self, + group_int32: Optional[int] = ..., + group_uint32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.Data: ... + + class MessageSetCorrect(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MessageSetCorrect: ... + + class MessageSetCorrectExtension1(Message): + bytes: Text + + def __init__(self, + bytes: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: builtins.bytes) -> TestAllTypesProto2.MessageSetCorrectExtension1: ... + + class MessageSetCorrectExtension2(Message): + i: int + + def __init__(self, + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MessageSetCorrectExtension2: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypesProto2.NestedEnum + optional_foreign_enum: ForeignEnumProto2 + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypesProto2.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnumProto2] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + oneof_bool: bool + oneof_uint64: int + oneof_float: float + oneof_double: float + oneof_enum: TestAllTypesProto2.NestedEnum + fieldname1: int + field_name2: int + _field_name3: int + field__name4_: int + field0name5: int + field_0_name6: int + fieldName7: int + FieldName8: int + field_Name9: int + Field_Name10: int + FIELD_NAME11: int + FIELD_name12: int + __field_name13: int + __Field_name14: int + field__name15: int + field__Name16: int + field_name17__: int + Field_name18__: int + + @property + def optional_nested_message(self) -> TestAllTypesProto2.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessageProto2: ... + + @property + def recursive_message(self) -> TestAllTypesProto2: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypesProto2.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessageProto2]: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_string_bytes(self) -> MutableMapping[Text, bytes]: ... + + @property + def map_string_nested_message( + self) -> MutableMapping[Text, TestAllTypesProto2.NestedMessage]: ... + + @property + def map_string_foreign_message( + self) -> MutableMapping[Text, ForeignMessageProto2]: ... + + @property + def map_string_nested_enum( + self) -> MutableMapping[Text, TestAllTypesProto2.NestedEnum]: ... + + @property + def map_string_foreign_enum( + self) -> MutableMapping[Text, ForeignEnumProto2]: ... + + @property + def oneof_nested_message(self) -> TestAllTypesProto2.NestedMessage: ... + + @property + def data(self) -> TestAllTypesProto2.Data: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypesProto2.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessageProto2] = ..., + optional_nested_enum: Optional[TestAllTypesProto2.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnumProto2] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + recursive_message: Optional[TestAllTypesProto2] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypesProto2.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessageProto2]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypesProto2.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnumProto2]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_string_bytes: Optional[Mapping[Text, bytes]] = ..., + map_string_nested_message: Optional[Mapping[Text, TestAllTypesProto2.NestedMessage]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessageProto2]] = ..., + map_string_nested_enum: Optional[Mapping[Text, TestAllTypesProto2.NestedEnum]] = ..., + map_string_foreign_enum: Optional[Mapping[Text, ForeignEnumProto2]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypesProto2.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + oneof_bool: Optional[bool] = ..., + oneof_uint64: Optional[int] = ..., + oneof_float: Optional[float] = ..., + oneof_double: Optional[float] = ..., + oneof_enum: Optional[TestAllTypesProto2.NestedEnum] = ..., + data: Optional[TestAllTypesProto2.Data] = ..., + fieldname1: Optional[int] = ..., + field_name2: Optional[int] = ..., + _field_name3: Optional[int] = ..., + field__name4_: Optional[int] = ..., + field0name5: Optional[int] = ..., + field_0_name6: Optional[int] = ..., + fieldName7: Optional[int] = ..., + FieldName8: Optional[int] = ..., + field_Name9: Optional[int] = ..., + Field_Name10: Optional[int] = ..., + FIELD_NAME11: Optional[int] = ..., + FIELD_name12: Optional[int] = ..., + __field_name13: Optional[int] = ..., + __Field_name14: Optional[int] = ..., + field__name15: Optional[int] = ..., + field__Name16: Optional[int] = ..., + field_name17__: Optional[int] = ..., + Field_name18__: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2: ... + + +class ForeignMessageProto2(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessageProto2: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi new file mode 100644 index 0000000..5a9cce3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi @@ -0,0 +1,700 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.duration_pb2 import ( + Duration, +) +from google.protobuf.field_mask_pb2 import ( + FieldMask, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.struct_pb2 import ( + Struct, + Value, +) +from google.protobuf.timestamp_pb2 import ( + Timestamp, +) +from google.protobuf.wrappers_pb2 import ( + BoolValue, + BytesValue, + DoubleValue, + FloatValue, + Int32Value, + Int64Value, + StringValue, + UInt32Value, + UInt64Value, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypesProto3(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypesProto3.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypesProto3.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypesProto3.NestedEnum]]: ... + FOO: TestAllTypesProto3.NestedEnum + BAR: TestAllTypesProto3.NestedEnum + BAZ: TestAllTypesProto3.NestedEnum + NEG: TestAllTypesProto3.NestedEnum + + class NestedMessage(Message): + a: int + + @property + def corecursive(self) -> TestAllTypesProto3: ... + + def __init__(self, + a: Optional[int] = ..., + corecursive: Optional[TestAllTypesProto3] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.NestedMessage: ... + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringStringEntry: ... + + class MapStringBytesEntry(Message): + key: Text + value: bytes + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringBytesEntry: ... + + class MapStringNestedMessageEntry(Message): + key: Text + + @property + def value(self) -> TestAllTypesProto3.NestedMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto3.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringNestedMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringForeignMessageEntry: ... + + class MapStringNestedEnumEntry(Message): + key: Text + value: TestAllTypesProto3.NestedEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto3.NestedEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringNestedEnumEntry: ... + + class MapStringForeignEnumEntry(Message): + key: Text + value: ForeignEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringForeignEnumEntry: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypesProto3.NestedEnum + optional_foreign_enum: ForeignEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypesProto3.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + oneof_bool: bool + oneof_uint64: int + oneof_float: float + oneof_double: float + oneof_enum: TestAllTypesProto3.NestedEnum + fieldname1: int + field_name2: int + _field_name3: int + field__name4_: int + field0name5: int + field_0_name6: int + fieldName7: int + FieldName8: int + field_Name9: int + Field_Name10: int + FIELD_NAME11: int + FIELD_name12: int + __field_name13: int + __Field_name14: int + field__name15: int + field__Name16: int + field_name17__: int + Field_name18__: int + + @property + def optional_nested_message(self) -> TestAllTypesProto3.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def recursive_message(self) -> TestAllTypesProto3: ... + + @property + def repeated_nested_message(self) -> RepeatedCompositeFieldContainer[TestAllTypesProto3.NestedMessage]: ... + + @property + def repeated_foreign_message(self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_string_bytes(self) -> MutableMapping[Text, bytes]: ... + + @property + def map_string_nested_message(self) -> MutableMapping[Text, TestAllTypesProto3.NestedMessage]: ... + + @property + def map_string_foreign_message(self) -> MutableMapping[Text, ForeignMessage]: ... + + @property + def map_string_nested_enum(self) -> MutableMapping[Text, TestAllTypesProto3.NestedEnum]: ... + + @property + def map_string_foreign_enum(self) -> MutableMapping[Text, ForeignEnum]: ... + + @property + def oneof_nested_message(self) -> TestAllTypesProto3.NestedMessage: ... + + @property + def optional_bool_wrapper(self) -> BoolValue: ... + + @property + def optional_int32_wrapper(self) -> Int32Value: ... + + @property + def optional_int64_wrapper(self) -> Int64Value: ... + + @property + def optional_uint32_wrapper(self) -> UInt32Value: ... + + @property + def optional_uint64_wrapper(self) -> UInt64Value: ... + + @property + def optional_float_wrapper(self) -> FloatValue: ... + + @property + def optional_double_wrapper(self) -> DoubleValue: ... + + @property + def optional_string_wrapper(self) -> StringValue: ... + + @property + def optional_bytes_wrapper(self) -> BytesValue: ... + + @property + def repeated_bool_wrapper(self) -> RepeatedCompositeFieldContainer[BoolValue]: ... + + @property + def repeated_int32_wrapper(self) -> RepeatedCompositeFieldContainer[Int32Value]: ... + + @property + def repeated_int64_wrapper(self) -> RepeatedCompositeFieldContainer[Int64Value]: ... + + @property + def repeated_uint32_wrapper(self) -> RepeatedCompositeFieldContainer[UInt32Value]: ... + + @property + def repeated_uint64_wrapper(self) -> RepeatedCompositeFieldContainer[UInt64Value]: ... + + @property + def repeated_float_wrapper(self) -> RepeatedCompositeFieldContainer[FloatValue]: ... + + @property + def repeated_double_wrapper(self) -> RepeatedCompositeFieldContainer[DoubleValue]: ... + + @property + def repeated_string_wrapper(self) -> RepeatedCompositeFieldContainer[StringValue]: ... + + @property + def repeated_bytes_wrapper(self) -> RepeatedCompositeFieldContainer[BytesValue]: ... + + @property + def optional_duration(self) -> Duration: ... + + @property + def optional_timestamp(self) -> Timestamp: ... + + @property + def optional_field_mask(self) -> FieldMask: ... + + @property + def optional_struct(self) -> Struct: ... + + @property + def optional_any(self) -> Any: ... + + @property + def optional_value(self) -> Value: ... + + @property + def repeated_duration(self) -> RepeatedCompositeFieldContainer[Duration]: ... + + @property + def repeated_timestamp(self) -> RepeatedCompositeFieldContainer[Timestamp]: ... + + @property + def repeated_fieldmask(self) -> RepeatedCompositeFieldContainer[FieldMask]: ... + + @property + def repeated_struct(self) -> RepeatedCompositeFieldContainer[Struct]: ... + + @property + def repeated_any(self) -> RepeatedCompositeFieldContainer[Any]: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypesProto3.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_nested_enum: Optional[TestAllTypesProto3.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + recursive_message: Optional[TestAllTypesProto3] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypesProto3.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypesProto3.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_string_bytes: Optional[Mapping[Text, bytes]] = ..., + map_string_nested_message: Optional[Mapping[Text, TestAllTypesProto3.NestedMessage]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessage]] = ..., + map_string_nested_enum: Optional[Mapping[Text, TestAllTypesProto3.NestedEnum]] = ..., + map_string_foreign_enum: Optional[Mapping[Text, ForeignEnum]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypesProto3.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + oneof_bool: Optional[bool] = ..., + oneof_uint64: Optional[int] = ..., + oneof_float: Optional[float] = ..., + oneof_double: Optional[float] = ..., + oneof_enum: Optional[TestAllTypesProto3.NestedEnum] = ..., + optional_bool_wrapper: Optional[BoolValue] = ..., + optional_int32_wrapper: Optional[Int32Value] = ..., + optional_int64_wrapper: Optional[Int64Value] = ..., + optional_uint32_wrapper: Optional[UInt32Value] = ..., + optional_uint64_wrapper: Optional[UInt64Value] = ..., + optional_float_wrapper: Optional[FloatValue] = ..., + optional_double_wrapper: Optional[DoubleValue] = ..., + optional_string_wrapper: Optional[StringValue] = ..., + optional_bytes_wrapper: Optional[BytesValue] = ..., + repeated_bool_wrapper: Optional[Iterable[BoolValue]] = ..., + repeated_int32_wrapper: Optional[Iterable[Int32Value]] = ..., + repeated_int64_wrapper: Optional[Iterable[Int64Value]] = ..., + repeated_uint32_wrapper: Optional[Iterable[UInt32Value]] = ..., + repeated_uint64_wrapper: Optional[Iterable[UInt64Value]] = ..., + repeated_float_wrapper: Optional[Iterable[FloatValue]] = ..., + repeated_double_wrapper: Optional[Iterable[DoubleValue]] = ..., + repeated_string_wrapper: Optional[Iterable[StringValue]] = ..., + repeated_bytes_wrapper: Optional[Iterable[BytesValue]] = ..., + optional_duration: Optional[Duration] = ..., + optional_timestamp: Optional[Timestamp] = ..., + optional_field_mask: Optional[FieldMask] = ..., + optional_struct: Optional[Struct] = ..., + optional_any: Optional[Any] = ..., + optional_value: Optional[Value] = ..., + repeated_duration: Optional[Iterable[Duration]] = ..., + repeated_timestamp: Optional[Iterable[Timestamp]] = ..., + repeated_fieldmask: Optional[Iterable[FieldMask]] = ..., + repeated_struct: Optional[Iterable[Struct]] = ..., + repeated_any: Optional[Iterable[Any]] = ..., + repeated_value: Optional[Iterable[Value]] = ..., + fieldname1: Optional[int] = ..., + field_name2: Optional[int] = ..., + _field_name3: Optional[int] = ..., + field__name4_: Optional[int] = ..., + field0name5: Optional[int] = ..., + field_0_name6: Optional[int] = ..., + fieldName7: Optional[int] = ..., + FieldName8: Optional[int] = ..., + field_Name9: Optional[int] = ..., + Field_Name10: Optional[int] = ..., + FIELD_NAME11: Optional[int] = ..., + FIELD_name12: Optional[int] = ..., + __field_name13: Optional[int] = ..., + __Field_name14: Optional[int] = ..., + field__name15: Optional[int] = ..., + field__Name16: Optional[int] = ..., + field_name17__: Optional[int] = ..., + Field_name18__: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi new file mode 100644 index 0000000..77ae305 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, +) + + +class Timestamp(Message, well_known_types.Timestamp): + seconds: int + nanos: int + + def __init__(self, + seconds: Optional[int] = ..., + nanos: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Timestamp: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi new file mode 100644 index 0000000..e3ff9b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi @@ -0,0 +1,215 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.source_context_pb2 import ( + SourceContext, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class Syntax(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Syntax: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Syntax]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Syntax]]: ... + + +SYNTAX_PROTO2: Syntax +SYNTAX_PROTO3: Syntax + + +class Type(Message): + name: Text + oneofs: RepeatedScalarFieldContainer[Text] + syntax: Syntax + + @property + def fields(self) -> RepeatedCompositeFieldContainer[Field]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + def __init__(self, + name: Optional[Text] = ..., + fields: Optional[Iterable[Field]] = ..., + oneofs: Optional[Iterable[Text]] = ..., + options: Optional[Iterable[Option]] = ..., + source_context: Optional[SourceContext] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Type: ... + + +class Field(Message): + + class Kind(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Field.Kind: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Field.Kind]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Field.Kind]]: ... + TYPE_UNKNOWN: Field.Kind + TYPE_DOUBLE: Field.Kind + TYPE_FLOAT: Field.Kind + TYPE_INT64: Field.Kind + TYPE_UINT64: Field.Kind + TYPE_INT32: Field.Kind + TYPE_FIXED64: Field.Kind + TYPE_FIXED32: Field.Kind + TYPE_BOOL: Field.Kind + TYPE_STRING: Field.Kind + TYPE_GROUP: Field.Kind + TYPE_MESSAGE: Field.Kind + TYPE_BYTES: Field.Kind + TYPE_UINT32: Field.Kind + TYPE_ENUM: Field.Kind + TYPE_SFIXED32: Field.Kind + TYPE_SFIXED64: Field.Kind + TYPE_SINT32: Field.Kind + TYPE_SINT64: Field.Kind + + class Cardinality(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Field.Cardinality: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Field.Cardinality]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Field.Cardinality]]: ... + CARDINALITY_UNKNOWN: Field.Cardinality + CARDINALITY_OPTIONAL: Field.Cardinality + CARDINALITY_REQUIRED: Field.Cardinality + CARDINALITY_REPEATED: Field.Cardinality + kind: Field.Kind + cardinality: Field.Cardinality + number: int + name: Text + type_url: Text + oneof_index: int + packed: bool + json_name: Text + default_value: Text + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + kind: Optional[Field.Kind] = ..., + cardinality: Optional[Field.Cardinality] = ..., + number: Optional[int] = ..., + name: Optional[Text] = ..., + type_url: Optional[Text] = ..., + oneof_index: Optional[int] = ..., + packed: Optional[bool] = ..., + options: Optional[Iterable[Option]] = ..., + json_name: Optional[Text] = ..., + default_value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Field: ... + + +class Enum(Message): + name: Text + syntax: Syntax + + @property + def enumvalue(self) -> RepeatedCompositeFieldContainer[EnumValue]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + def __init__(self, + name: Optional[Text] = ..., + enumvalue: Optional[Iterable[EnumValue]] = ..., + options: Optional[Iterable[Option]] = ..., + source_context: Optional[SourceContext] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Enum: ... + + +class EnumValue(Message): + name: Text + number: int + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + options: Optional[Iterable[Option]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValue: ... + + +class Option(Message): + name: Text + + @property + def value(self) -> Any: ... + + def __init__(self, + name: Optional[Text] = ..., + value: Optional[Any] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Option: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi new file mode 100644 index 0000000..89d6042 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi @@ -0,0 +1,43 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_no_arena_import_pb2 import ( + ImportNoArenaNestedMessage, +) +from typing import ( + Iterable, + Optional, +) + + +class NestedMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedMessage: ... + + +class ArenaMessage(Message): + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[NestedMessage]: ... + + @property + def repeated_import_no_arena_message( + self) -> RepeatedCompositeFieldContainer[ImportNoArenaNestedMessage]: ... + + def __init__(self, + repeated_nested_message: Optional[Iterable[NestedMessage]] = ..., + repeated_import_no_arena_message: Optional[Iterable[ImportNoArenaNestedMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ArenaMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi new file mode 100644 index 0000000..5028e07 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi @@ -0,0 +1,472 @@ +from google.protobuf.descriptor_pb2 import ( + FileOptions, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class MethodOpt1(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MethodOpt1: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MethodOpt1]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MethodOpt1]]: ... + + +METHODOPT1_VAL1: MethodOpt1 +METHODOPT1_VAL2: MethodOpt1 + + +class AggregateEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> AggregateEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[AggregateEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, AggregateEnum]]: ... + + +VALUE: AggregateEnum + + +class TestMessageWithCustomOptions(Message): + + class AnEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestMessageWithCustomOptions.AnEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestMessageWithCustomOptions.AnEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + TestMessageWithCustomOptions.AnEnum]]: ... + ANENUM_VAL1: TestMessageWithCustomOptions.AnEnum + ANENUM_VAL2: TestMessageWithCustomOptions.AnEnum + field1: Text + oneof_field: int + + def __init__(self, + field1: Optional[Text] = ..., + oneof_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageWithCustomOptions: ... + + +class CustomOptionFooRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooRequest: ... + + +class CustomOptionFooResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooResponse: ... + + +class CustomOptionFooClientMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooClientMessage: ... + + +class CustomOptionFooServerMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooServerMessage: ... + + +class DummyMessageContainingEnum(Message): + + class TestEnumType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> DummyMessageContainingEnum.TestEnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[DummyMessageContainingEnum.TestEnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + DummyMessageContainingEnum.TestEnumType]]: ... + TEST_OPTION_ENUM_TYPE1: DummyMessageContainingEnum.TestEnumType + TEST_OPTION_ENUM_TYPE2: DummyMessageContainingEnum.TestEnumType + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DummyMessageContainingEnum: ... + + +class DummyMessageInvalidAsOptionType(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DummyMessageInvalidAsOptionType: ... + + +class CustomOptionMinIntegerValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionMinIntegerValues: ... + + +class CustomOptionMaxIntegerValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionMaxIntegerValues: ... + + +class CustomOptionOtherValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionOtherValues: ... + + +class SettingRealsFromPositiveInts(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SettingRealsFromPositiveInts: ... + + +class SettingRealsFromNegativeInts(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SettingRealsFromNegativeInts: ... + + +class ComplexOptionType1(Message): + foo: int + foo2: int + foo3: int + foo4: RepeatedScalarFieldContainer[int] + + def __init__(self, + foo: Optional[int] = ..., + foo2: Optional[int] = ..., + foo3: Optional[int] = ..., + foo4: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType1: ... + + +class ComplexOptionType2(Message): + + class ComplexOptionType4(Message): + waldo: int + + def __init__(self, + waldo: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> ComplexOptionType2.ComplexOptionType4: ... + baz: int + + @property + def bar(self) -> ComplexOptionType1: ... + + @property + def fred(self) -> ComplexOptionType2.ComplexOptionType4: ... + + @property + def barney( + self) -> RepeatedCompositeFieldContainer[ComplexOptionType2.ComplexOptionType4]: ... + + def __init__(self, + bar: Optional[ComplexOptionType1] = ..., + baz: Optional[int] = ..., + fred: Optional[ComplexOptionType2.ComplexOptionType4] = ..., + barney: Optional[Iterable[ComplexOptionType2.ComplexOptionType4]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType2: ... + + +class ComplexOptionType3(Message): + + class ComplexOptionType5(Message): + plugh: int + + def __init__(self, + plugh: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> ComplexOptionType3.ComplexOptionType5: ... + qux: int + + @property + def complexoptiontype5(self) -> ComplexOptionType3.ComplexOptionType5: ... + + def __init__(self, + qux: Optional[int] = ..., + complexoptiontype5: Optional[ComplexOptionType3.ComplexOptionType5] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType3: ... + + +class ComplexOpt6(Message): + xyzzy: int + + def __init__(self, + xyzzy: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOpt6: ... + + +class VariousComplexOptions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> VariousComplexOptions: ... + + +class AggregateMessageSet(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessageSet: ... + + +class AggregateMessageSetElement(Message): + s: Text + + def __init__(self, + s: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessageSetElement: ... + + +class Aggregate(Message): + i: int + s: Text + + @property + def sub(self) -> Aggregate: ... + + @property + def file(self) -> FileOptions: ... + + @property + def mset(self) -> AggregateMessageSet: ... + + def __init__(self, + i: Optional[int] = ..., + s: Optional[Text] = ..., + sub: Optional[Aggregate] = ..., + file: Optional[FileOptions] = ..., + mset: Optional[AggregateMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Aggregate: ... + + +class AggregateMessage(Message): + fieldname: int + + def __init__(self, + fieldname: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessage: ... + + +class NestedOptionType(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NestedOptionType.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NestedOptionType.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NestedOptionType.NestedEnum]]: ... + NESTED_ENUM_VALUE: NestedOptionType.NestedEnum + + class NestedMessage(Message): + nested_field: int + + def __init__(self, + nested_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedOptionType.NestedMessage: ... + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedOptionType: ... + + +class OldOptionType(Message): + + class TestEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> OldOptionType.TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[OldOptionType.TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, OldOptionType.TestEnum]]: ... + OLD_VALUE: OldOptionType.TestEnum + value: OldOptionType.TestEnum + + def __init__(self, + value: OldOptionType.TestEnum, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OldOptionType: ... + + +class NewOptionType(Message): + + class TestEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NewOptionType.TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NewOptionType.TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NewOptionType.TestEnum]]: ... + OLD_VALUE: NewOptionType.TestEnum + NEW_VALUE: NewOptionType.TestEnum + value: NewOptionType.TestEnum + + def __init__(self, + value: NewOptionType.TestEnum, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NewOptionType: ... + + +class TestMessageWithRequiredEnumOption(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageWithRequiredEnumOption: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi new file mode 100644 index 0000000..92f1914 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi @@ -0,0 +1,66 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + List, + Optional, + Tuple, + cast, +) + + +class ImportEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ImportEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ImportEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ImportEnum]]: ... + + +IMPORT_FOO: ImportEnum +IMPORT_BAR: ImportEnum +IMPORT_BAZ: ImportEnum + + +class ImportEnumForMap(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ImportEnumForMap: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ImportEnumForMap]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ImportEnumForMap]]: ... + + +UNKNOWN: ImportEnumForMap +FOO: ImportEnumForMap +BAR: ImportEnumForMap + + +class ImportMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ImportMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi new file mode 100644 index 0000000..c8e13ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi @@ -0,0 +1,17 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class PublicImportMessage(Message): + e: int + + def __init__(self, + e: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> PublicImportMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi new file mode 100644 index 0000000..6366320 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi @@ -0,0 +1,75 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_mset_wire_format_pb2 import ( + TestMessageSet, +) +import builtins +from typing import ( + Iterable, + Optional, + Text, +) + + +class TestMessageSetContainer(Message): + + @property + def message_set(self) -> TestMessageSet: ... + + def __init__(self, + message_set: Optional[TestMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetContainer: ... + + +class TestMessageSetExtension1(Message): + i: int + + def __init__(self, + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetExtension1: ... + + +class TestMessageSetExtension2(Message): + str: Text + + def __init__(self, + bytes: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: builtins.bytes) -> TestMessageSetExtension2: ... + + +class RawMessageSet(Message): + + class Item(Message): + type_id: int + message: bytes + + def __init__(self, + type_id: int, + message: bytes, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RawMessageSet.Item: ... + + @property + def item(self) -> RepeatedCompositeFieldContainer[RawMessageSet.Item]: ... + + def __init__(self, + item: Optional[Iterable[RawMessageSet.Item]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RawMessageSet: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi new file mode 100644 index 0000000..acb24a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi @@ -0,0 +1,28 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class TestMessageSet(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSet: ... + + +class TestMessageSetWireFormatContainer(Message): + + @property + def message_set(self) -> TestMessageSet: ... + + def __init__(self, + message_set: Optional[TestMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetWireFormatContainer: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi new file mode 100644 index 0000000..c02e4d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi @@ -0,0 +1,17 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class ImportNoArenaNestedMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ImportNoArenaNestedMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi new file mode 100644 index 0000000..8a25622 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi @@ -0,0 +1,315 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_arena_pb2 import ( + ArenaMessage, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnum, + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypes(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.OptionalGroup: ... + + class RepeatedGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.RepeatedGroup: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_import_enum: ImportEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_import_enum: RepeatedScalarFieldContainer[ImportEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + default_int32: int + default_int64: int + default_uint32: int + default_uint64: int + default_sint32: int + default_sint64: int + default_fixed32: int + default_fixed64: int + default_sfixed32: int + default_sfixed64: int + default_float: float + default_double: float + default_bool: bool + default_string: Text + default_bytes: bytes + default_nested_enum: TestAllTypes.NestedEnum + default_foreign_enum: ForeignEnum + default_import_enum: ImportEnum + default_string_piece: Text + default_cord: Text + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optionalgroup(self) -> TestAllTypes.OptionalGroup: ... + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.RepeatedGroup]: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def lazy_oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optionalgroup: Optional[TestAllTypes.OptionalGroup] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_import_enum: Optional[ImportEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_message: Optional[TestAllTypes.NestedMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeatedgroup: Optional[Iterable[TestAllTypes.RepeatedGroup]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_import_enum: Optional[Iterable[ImportEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + default_int32: Optional[int] = ..., + default_int64: Optional[int] = ..., + default_uint32: Optional[int] = ..., + default_uint64: Optional[int] = ..., + default_sint32: Optional[int] = ..., + default_sint64: Optional[int] = ..., + default_fixed32: Optional[int] = ..., + default_fixed64: Optional[int] = ..., + default_sfixed32: Optional[int] = ..., + default_sfixed64: Optional[int] = ..., + default_float: Optional[float] = ..., + default_double: Optional[float] = ..., + default_bool: Optional[bool] = ..., + default_string: Optional[Text] = ..., + default_bytes: Optional[bytes] = ..., + default_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + default_foreign_enum: Optional[ForeignEnum] = ..., + default_import_enum: Optional[ImportEnum] = ..., + default_string_piece: Optional[Text] = ..., + default_cord: Optional[Text] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + lazy_oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestNoArenaMessage(Message): + + @property + def arena_message(self) -> ArenaMessage: ... + + def __init__(self, + arena_message: Optional[ArenaMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNoArenaMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi new file mode 100644 index 0000000..b65863b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi @@ -0,0 +1,40 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + List, + Optional, + Tuple, + cast, +) + + +class TestEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestEnum]]: ... + + +FOO: TestEnum + + +class TestMessage(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi new file mode 100644 index 0000000..7f05257 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi @@ -0,0 +1,1777 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnum, + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestEnumWithDupValue(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestEnumWithDupValue: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestEnumWithDupValue]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestEnumWithDupValue]]: ... + + +FOO1: TestEnumWithDupValue +BAR1: TestEnumWithDupValue +BAZ: TestEnumWithDupValue +FOO2: TestEnumWithDupValue +BAR2: TestEnumWithDupValue + + +class TestSparseEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestSparseEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestSparseEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestSparseEnum]]: ... + + +SPARSE_A: TestSparseEnum +SPARSE_B: TestSparseEnum +SPARSE_C: TestSparseEnum +SPARSE_D: TestSparseEnum +SPARSE_E: TestSparseEnum +SPARSE_F: TestSparseEnum +SPARSE_G: TestSparseEnum + + +class TestAllTypes(Message): + class NestedEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.OptionalGroup: ... + + class RepeatedGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.RepeatedGroup: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_import_enum: ImportEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_import_enum: RepeatedScalarFieldContainer[ImportEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + default_int32: int + default_int64: int + default_uint32: int + default_uint64: int + default_sint32: int + default_sint64: int + default_fixed32: int + default_fixed64: int + default_sfixed32: int + default_sfixed64: int + default_float: float + default_double: float + default_bool: bool + default_string: Text + default_bytes: bytes + default_nested_enum: TestAllTypes.NestedEnum + default_foreign_enum: ForeignEnum + default_import_enum: ImportEnum + default_string_piece: Text + default_cord: Text + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optionalgroup(self) -> TestAllTypes.OptionalGroup: ... + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_lazy_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.RepeatedGroup]: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optionalgroup: Optional[TestAllTypes.OptionalGroup] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_import_enum: Optional[ImportEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_lazy_message: Optional[TestAllTypes.NestedMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeatedgroup: Optional[Iterable[TestAllTypes.RepeatedGroup]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_import_enum: Optional[Iterable[ImportEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + default_int32: Optional[int] = ..., + default_int64: Optional[int] = ..., + default_uint32: Optional[int] = ..., + default_uint64: Optional[int] = ..., + default_sint32: Optional[int] = ..., + default_sint64: Optional[int] = ..., + default_fixed32: Optional[int] = ..., + default_fixed64: Optional[int] = ..., + default_sfixed32: Optional[int] = ..., + default_sfixed64: Optional[int] = ..., + default_float: Optional[float] = ..., + default_double: Optional[float] = ..., + default_bool: Optional[bool] = ..., + default_string: Optional[Text] = ..., + default_bytes: Optional[bytes] = ..., + default_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + default_foreign_enum: Optional[ForeignEnum] = ..., + default_import_enum: Optional[ImportEnum] = ..., + default_string_piece: Optional[Text] = ..., + default_cord: Optional[Text] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class NestedTestAllTypes(Message): + + @property + def child(self) -> NestedTestAllTypes: ... + + @property + def payload(self) -> TestAllTypes: ... + + @property + def repeated_child( + self) -> RepeatedCompositeFieldContainer[NestedTestAllTypes]: ... + + def __init__(self, + child: Optional[NestedTestAllTypes] = ..., + payload: Optional[TestAllTypes] = ..., + repeated_child: Optional[Iterable[NestedTestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedTestAllTypes: ... + + +class TestDeprecatedFields(Message): + deprecated_int32: int + deprecated_int32_in_oneof: int + + def __init__(self, + deprecated_int32: Optional[int] = ..., + deprecated_int32_in_oneof: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDeprecatedFields: ... + + +class TestDeprecatedMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDeprecatedMessage: ... + + +class ForeignMessage(Message): + c: int + d: int + + def __init__(self, + c: Optional[int] = ..., + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestReservedFields(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestReservedFields: ... + + +class TestAllExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllExtensions: ... + + +class OptionalGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OptionalGroup_extension: ... + + +class RepeatedGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RepeatedGroup_extension: ... + + +class TestGroup(Message): + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroup.OptionalGroup: ... + optional_foreign_enum: ForeignEnum + + @property + def optionalgroup(self) -> TestGroup.OptionalGroup: ... + + def __init__(self, + optionalgroup: Optional[TestGroup.OptionalGroup] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroup: ... + + +class TestGroupExtension(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroupExtension: ... + + +class TestNestedExtension(Message): + class OptionalGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestNestedExtension.OptionalGroup_extension: ... + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedExtension: ... + + +class TestRequired(Message): + a: int + dummy2: int + b: int + dummy4: int + dummy5: int + dummy6: int + dummy7: int + dummy8: int + dummy9: int + dummy10: int + dummy11: int + dummy12: int + dummy13: int + dummy14: int + dummy15: int + dummy16: int + dummy17: int + dummy18: int + dummy19: int + dummy20: int + dummy21: int + dummy22: int + dummy23: int + dummy24: int + dummy25: int + dummy26: int + dummy27: int + dummy28: int + dummy29: int + dummy30: int + dummy31: int + dummy32: int + c: int + + def __init__(self, + a: int, + b: int, + c: int, + dummy2: Optional[int] = ..., + dummy4: Optional[int] = ..., + dummy5: Optional[int] = ..., + dummy6: Optional[int] = ..., + dummy7: Optional[int] = ..., + dummy8: Optional[int] = ..., + dummy9: Optional[int] = ..., + dummy10: Optional[int] = ..., + dummy11: Optional[int] = ..., + dummy12: Optional[int] = ..., + dummy13: Optional[int] = ..., + dummy14: Optional[int] = ..., + dummy15: Optional[int] = ..., + dummy16: Optional[int] = ..., + dummy17: Optional[int] = ..., + dummy18: Optional[int] = ..., + dummy19: Optional[int] = ..., + dummy20: Optional[int] = ..., + dummy21: Optional[int] = ..., + dummy22: Optional[int] = ..., + dummy23: Optional[int] = ..., + dummy24: Optional[int] = ..., + dummy25: Optional[int] = ..., + dummy26: Optional[int] = ..., + dummy27: Optional[int] = ..., + dummy28: Optional[int] = ..., + dummy29: Optional[int] = ..., + dummy30: Optional[int] = ..., + dummy31: Optional[int] = ..., + dummy32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequired: ... + + +class TestRequiredForeign(Message): + dummy: int + + @property + def optional_message(self) -> TestRequired: ... + + @property + def repeated_message( + self) -> RepeatedCompositeFieldContainer[TestRequired]: ... + + def __init__(self, + optional_message: Optional[TestRequired] = ..., + repeated_message: Optional[Iterable[TestRequired]] = ..., + dummy: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredForeign: ... + + +class TestRequiredMessage(Message): + + @property + def optional_message(self) -> TestRequired: ... + + @property + def repeated_message( + self) -> RepeatedCompositeFieldContainer[TestRequired]: ... + + @property + def required_message(self) -> TestRequired: ... + + def __init__(self, + required_message: TestRequired, + optional_message: Optional[TestRequired] = ..., + repeated_message: Optional[Iterable[TestRequired]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredMessage: ... + + +class TestForeignNested(Message): + + @property + def foreign_nested(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + foreign_nested: Optional[TestAllTypes.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestForeignNested: ... + + +class TestEmptyMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessage: ... + + +class TestEmptyMessageWithExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessageWithExtensions: ... + + +class TestMultipleExtensionRanges(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMultipleExtensionRanges: ... + + +class TestReallyLargeTagNumber(Message): + a: int + bb: int + + def __init__(self, + a: Optional[int] = ..., + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestReallyLargeTagNumber: ... + + +class TestRecursiveMessage(Message): + i: int + + @property + def a(self) -> TestRecursiveMessage: ... + + def __init__(self, + a: Optional[TestRecursiveMessage] = ..., + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMessage: ... + + +class TestMutualRecursionA(Message): + class SubMessage(Message): + + @property + def b(self) -> TestMutualRecursionB: ... + + def __init__(self, + b: Optional[TestMutualRecursionB] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA.SubMessage: ... + + class SubGroup(Message): + + @property + def sub_message(self) -> TestMutualRecursionA.SubMessage: ... + + @property + def not_in_this_scc(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestMutualRecursionA.SubMessage] = ..., + not_in_this_scc: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA.SubGroup: ... + + @property + def bb(self) -> TestMutualRecursionB: ... + + @property + def subgroup(self) -> TestMutualRecursionA.SubGroup: ... + + def __init__(self, + bb: Optional[TestMutualRecursionB] = ..., + subgroup: Optional[TestMutualRecursionA.SubGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA: ... + + +class TestMutualRecursionB(Message): + optional_int32: int + + @property + def a(self) -> TestMutualRecursionA: ... + + def __init__(self, + a: Optional[TestMutualRecursionA] = ..., + optional_int32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionB: ... + + +class TestIsInitialized(Message): + class SubMessage(Message): + class SubGroup(Message): + i: int + + def __init__(self, + i: int, + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestIsInitialized.SubMessage.SubGroup: ... + + @property + def subgroup(self) -> TestIsInitialized.SubMessage.SubGroup: ... + + def __init__(self, + subgroup: Optional[TestIsInitialized.SubMessage.SubGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIsInitialized.SubMessage: ... + + @property + def sub_message(self) -> TestIsInitialized.SubMessage: ... + + def __init__(self, + sub_message: Optional[TestIsInitialized.SubMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIsInitialized: ... + + +class TestDupFieldNumber(Message): + class Foo(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber.Foo: ... + + class Bar(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber.Bar: ... + a: int + + @property + def foo(self) -> TestDupFieldNumber.Foo: ... + + @property + def bar(self) -> TestDupFieldNumber.Bar: ... + + def __init__(self, + a: Optional[int] = ..., + foo: Optional[TestDupFieldNumber.Foo] = ..., + bar: Optional[TestDupFieldNumber.Bar] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber: ... + + +class TestEagerMessage(Message): + + @property + def sub_message(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEagerMessage: ... + + +class TestLazyMessage(Message): + + @property + def sub_message(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestLazyMessage: ... + + +class TestNestedMessageHasBits(Message): + class NestedMessage(Message): + nestedmessage_repeated_int32: RepeatedScalarFieldContainer[int] + + @property + def nestedmessage_repeated_foreignmessage( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + def __init__(self, + nestedmessage_repeated_int32: Optional[Iterable[int]] = ..., + nestedmessage_repeated_foreignmessage: Optional[Iterable[ForeignMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestNestedMessageHasBits.NestedMessage: ... + + @property + def optional_nested_message( + self) -> TestNestedMessageHasBits.NestedMessage: ... + + def __init__(self, + optional_nested_message: Optional[TestNestedMessageHasBits.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMessageHasBits: ... + + +class TestCamelCaseFieldNames(Message): + PrimitiveField: int + StringField: Text + EnumField: ForeignEnum + StringPieceField: Text + CordField: Text + RepeatedPrimitiveField: RepeatedScalarFieldContainer[int] + RepeatedStringField: RepeatedScalarFieldContainer[Text] + RepeatedEnumField: RepeatedScalarFieldContainer[ForeignEnum] + RepeatedStringPieceField: RepeatedScalarFieldContainer[Text] + RepeatedCordField: RepeatedScalarFieldContainer[Text] + + @property + def MessageField(self) -> ForeignMessage: ... + + @property + def RepeatedMessageField( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + def __init__(self, + PrimitiveField: Optional[int] = ..., + StringField: Optional[Text] = ..., + EnumField: Optional[ForeignEnum] = ..., + MessageField: Optional[ForeignMessage] = ..., + StringPieceField: Optional[Text] = ..., + CordField: Optional[Text] = ..., + RepeatedPrimitiveField: Optional[Iterable[int]] = ..., + RepeatedStringField: Optional[Iterable[Text]] = ..., + RepeatedEnumField: Optional[Iterable[ForeignEnum]] = ..., + RepeatedMessageField: Optional[Iterable[ForeignMessage]] = ..., + RepeatedStringPieceField: Optional[Iterable[Text]] = ..., + RepeatedCordField: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCamelCaseFieldNames: ... + + +class TestFieldOrderings(Message): + class NestedMessage(Message): + oo: int + bb: int + + def __init__(self, + oo: Optional[int] = ..., + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldOrderings.NestedMessage: ... + my_string: Text + my_int: int + my_float: float + + @property + def optional_nested_message(self) -> TestFieldOrderings.NestedMessage: ... + + def __init__(self, + my_string: Optional[Text] = ..., + my_int: Optional[int] = ..., + my_float: Optional[float] = ..., + optional_nested_message: Optional[TestFieldOrderings.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldOrderings: ... + + +class TestExtensionOrderings1(Message): + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionOrderings1: ... + + +class TestExtensionOrderings2(Message): + class TestExtensionOrderings3(Message): + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestExtensionOrderings2.TestExtensionOrderings3: ... + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionOrderings2: ... + + +class TestExtremeDefaultValues(Message): + escaped_bytes: bytes + large_uint32: int + large_uint64: int + small_int32: int + small_int64: int + really_small_int32: int + really_small_int64: int + utf8_string: Text + zero_float: float + one_float: float + small_float: float + negative_one_float: float + negative_float: float + large_float: float + small_negative_float: float + inf_double: float + neg_inf_double: float + nan_double: float + inf_float: float + neg_inf_float: float + nan_float: float + cpp_trigraph: Text + string_with_zero: Text + bytes_with_zero: bytes + string_piece_with_zero: Text + cord_with_zero: Text + replacement_string: Text + + def __init__(self, + escaped_bytes: Optional[bytes] = ..., + large_uint32: Optional[int] = ..., + large_uint64: Optional[int] = ..., + small_int32: Optional[int] = ..., + small_int64: Optional[int] = ..., + really_small_int32: Optional[int] = ..., + really_small_int64: Optional[int] = ..., + utf8_string: Optional[Text] = ..., + zero_float: Optional[float] = ..., + one_float: Optional[float] = ..., + small_float: Optional[float] = ..., + negative_one_float: Optional[float] = ..., + negative_float: Optional[float] = ..., + large_float: Optional[float] = ..., + small_negative_float: Optional[float] = ..., + inf_double: Optional[float] = ..., + neg_inf_double: Optional[float] = ..., + nan_double: Optional[float] = ..., + inf_float: Optional[float] = ..., + neg_inf_float: Optional[float] = ..., + nan_float: Optional[float] = ..., + cpp_trigraph: Optional[Text] = ..., + string_with_zero: Optional[Text] = ..., + bytes_with_zero: Optional[bytes] = ..., + string_piece_with_zero: Optional[Text] = ..., + cord_with_zero: Optional[Text] = ..., + replacement_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtremeDefaultValues: ... + + +class SparseEnumMessage(Message): + sparse_enum: TestSparseEnum + + def __init__(self, + sparse_enum: Optional[TestSparseEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SparseEnumMessage: ... + + +class OneString(Message): + data: Text + + def __init__(self, + data: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneString: ... + + +class MoreString(Message): + data: RepeatedScalarFieldContainer[Text] + + def __init__(self, + data: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MoreString: ... + + +class OneBytes(Message): + data: bytes + + def __init__(self, + data: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneBytes: ... + + +class MoreBytes(Message): + data: RepeatedScalarFieldContainer[bytes] + + def __init__(self, + data: Optional[Iterable[bytes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MoreBytes: ... + + +class Int32Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int32Message: ... + + +class Uint32Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Uint32Message: ... + + +class Int64Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int64Message: ... + + +class Uint64Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Uint64Message: ... + + +class BoolMessage(Message): + data: bool + + def __init__(self, + data: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BoolMessage: ... + + +class TestOneof(Message): + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof.FooGroup: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestAllTypes: ... + + @property + def foogroup(self) -> TestOneof.FooGroup: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestAllTypes] = ..., + foogroup: Optional[TestOneof.FooGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof: ... + + +class TestOneofBackwardsCompatible(Message): + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestOneofBackwardsCompatible.FooGroup: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestAllTypes: ... + + @property + def foogroup(self) -> TestOneofBackwardsCompatible.FooGroup: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestAllTypes] = ..., + foogroup: Optional[TestOneofBackwardsCompatible.FooGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneofBackwardsCompatible: ... + + +class TestOneof2(Message): + class NestedEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestOneof2.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestOneof2.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestOneof2.NestedEnum]]: ... + FOO: TestOneof2.NestedEnum + BAR: TestOneof2.NestedEnum + BAZ: TestOneof2.NestedEnum + + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2.FooGroup: ... + + class NestedMessage(Message): + qux_int: int + corge_int: RepeatedScalarFieldContainer[int] + + def __init__(self, + qux_int: Optional[int] = ..., + corge_int: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2.NestedMessage: ... + foo_int: int + foo_string: Text + foo_cord: Text + foo_string_piece: Text + foo_bytes: bytes + foo_enum: TestOneof2.NestedEnum + bar_int: int + bar_string: Text + bar_cord: Text + bar_string_piece: Text + bar_bytes: bytes + bar_enum: TestOneof2.NestedEnum + baz_int: int + baz_string: Text + + @property + def foo_message(self) -> TestOneof2.NestedMessage: ... + + @property + def foogroup(self) -> TestOneof2.FooGroup: ... + + @property + def foo_lazy_message(self) -> TestOneof2.NestedMessage: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_cord: Optional[Text] = ..., + foo_string_piece: Optional[Text] = ..., + foo_bytes: Optional[bytes] = ..., + foo_enum: Optional[TestOneof2.NestedEnum] = ..., + foo_message: Optional[TestOneof2.NestedMessage] = ..., + foogroup: Optional[TestOneof2.FooGroup] = ..., + foo_lazy_message: Optional[TestOneof2.NestedMessage] = ..., + bar_int: Optional[int] = ..., + bar_string: Optional[Text] = ..., + bar_cord: Optional[Text] = ..., + bar_string_piece: Optional[Text] = ..., + bar_bytes: Optional[bytes] = ..., + bar_enum: Optional[TestOneof2.NestedEnum] = ..., + baz_int: Optional[int] = ..., + baz_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2: ... + + +class TestRequiredOneof(Message): + class NestedMessage(Message): + required_double: float + + def __init__(self, + required_double: float, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredOneof.NestedMessage: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestRequiredOneof.NestedMessage: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestRequiredOneof.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredOneof: ... + + +class TestPackedTypes(Message): + packed_int32: RepeatedScalarFieldContainer[int] + packed_int64: RepeatedScalarFieldContainer[int] + packed_uint32: RepeatedScalarFieldContainer[int] + packed_uint64: RepeatedScalarFieldContainer[int] + packed_sint32: RepeatedScalarFieldContainer[int] + packed_sint64: RepeatedScalarFieldContainer[int] + packed_fixed32: RepeatedScalarFieldContainer[int] + packed_fixed64: RepeatedScalarFieldContainer[int] + packed_sfixed32: RepeatedScalarFieldContainer[int] + packed_sfixed64: RepeatedScalarFieldContainer[int] + packed_float: RepeatedScalarFieldContainer[float] + packed_double: RepeatedScalarFieldContainer[float] + packed_bool: RepeatedScalarFieldContainer[bool] + packed_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + packed_int32: Optional[Iterable[int]] = ..., + packed_int64: Optional[Iterable[int]] = ..., + packed_uint32: Optional[Iterable[int]] = ..., + packed_uint64: Optional[Iterable[int]] = ..., + packed_sint32: Optional[Iterable[int]] = ..., + packed_sint64: Optional[Iterable[int]] = ..., + packed_fixed32: Optional[Iterable[int]] = ..., + packed_fixed64: Optional[Iterable[int]] = ..., + packed_sfixed32: Optional[Iterable[int]] = ..., + packed_sfixed64: Optional[Iterable[int]] = ..., + packed_float: Optional[Iterable[float]] = ..., + packed_double: Optional[Iterable[float]] = ..., + packed_bool: Optional[Iterable[bool]] = ..., + packed_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedTypes: ... + + +class TestUnpackedTypes(Message): + unpacked_int32: RepeatedScalarFieldContainer[int] + unpacked_int64: RepeatedScalarFieldContainer[int] + unpacked_uint32: RepeatedScalarFieldContainer[int] + unpacked_uint64: RepeatedScalarFieldContainer[int] + unpacked_sint32: RepeatedScalarFieldContainer[int] + unpacked_sint64: RepeatedScalarFieldContainer[int] + unpacked_fixed32: RepeatedScalarFieldContainer[int] + unpacked_fixed64: RepeatedScalarFieldContainer[int] + unpacked_sfixed32: RepeatedScalarFieldContainer[int] + unpacked_sfixed64: RepeatedScalarFieldContainer[int] + unpacked_float: RepeatedScalarFieldContainer[float] + unpacked_double: RepeatedScalarFieldContainer[float] + unpacked_bool: RepeatedScalarFieldContainer[bool] + unpacked_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + unpacked_int32: Optional[Iterable[int]] = ..., + unpacked_int64: Optional[Iterable[int]] = ..., + unpacked_uint32: Optional[Iterable[int]] = ..., + unpacked_uint64: Optional[Iterable[int]] = ..., + unpacked_sint32: Optional[Iterable[int]] = ..., + unpacked_sint64: Optional[Iterable[int]] = ..., + unpacked_fixed32: Optional[Iterable[int]] = ..., + unpacked_fixed64: Optional[Iterable[int]] = ..., + unpacked_sfixed32: Optional[Iterable[int]] = ..., + unpacked_sfixed64: Optional[Iterable[int]] = ..., + unpacked_float: Optional[Iterable[float]] = ..., + unpacked_double: Optional[Iterable[float]] = ..., + unpacked_bool: Optional[Iterable[bool]] = ..., + unpacked_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedTypes: ... + + +class TestPackedExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedExtensions: ... + + +class TestUnpackedExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedExtensions: ... + + +class TestDynamicExtensions(Message): + class DynamicEnumType(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestDynamicExtensions.DynamicEnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestDynamicExtensions.DynamicEnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + TestDynamicExtensions.DynamicEnumType]]: ... + DYNAMIC_FOO: TestDynamicExtensions.DynamicEnumType + DYNAMIC_BAR: TestDynamicExtensions.DynamicEnumType + DYNAMIC_BAZ: TestDynamicExtensions.DynamicEnumType + + class DynamicMessageType(Message): + dynamic_field: int + + def __init__(self, + dynamic_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestDynamicExtensions.DynamicMessageType: ... + scalar_extension: int + enum_extension: ForeignEnum + dynamic_enum_extension: TestDynamicExtensions.DynamicEnumType + repeated_extension: RepeatedScalarFieldContainer[Text] + packed_extension: RepeatedScalarFieldContainer[int] + + @property + def message_extension(self) -> ForeignMessage: ... + + @property + def dynamic_message_extension( + self) -> TestDynamicExtensions.DynamicMessageType: ... + + def __init__(self, + scalar_extension: Optional[int] = ..., + enum_extension: Optional[ForeignEnum] = ..., + dynamic_enum_extension: Optional[TestDynamicExtensions.DynamicEnumType] = ..., + message_extension: Optional[ForeignMessage] = ..., + dynamic_message_extension: Optional[TestDynamicExtensions.DynamicMessageType] = ..., + repeated_extension: Optional[Iterable[Text]] = ..., + packed_extension: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDynamicExtensions: ... + + +class TestRepeatedScalarDifferentTagSizes(Message): + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_uint64: RepeatedScalarFieldContainer[int] + + def __init__(self, + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRepeatedScalarDifferentTagSizes: ... + + +class TestParsingMerge(Message): + class RepeatedFieldsGenerator(Message): + class Group1(Message): + + @property + def field1(self) -> TestAllTypes: ... + + def __init__(self, + field1: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator.Group1: ... + + class Group2(Message): + + @property + def field1(self) -> TestAllTypes: ... + + def __init__(self, + field1: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator.Group2: ... + + @property + def field1(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def field2(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def field3(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def group1( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedFieldsGenerator.Group1]: ... + + @property + def group2( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedFieldsGenerator.Group2]: ... + + @property + def ext1(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def ext2(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + def __init__(self, + field1: Optional[Iterable[TestAllTypes]] = ..., + field2: Optional[Iterable[TestAllTypes]] = ..., + field3: Optional[Iterable[TestAllTypes]] = ..., + group1: Optional[Iterable[TestParsingMerge.RepeatedFieldsGenerator.Group1]] = ..., + group2: Optional[Iterable[TestParsingMerge.RepeatedFieldsGenerator.Group2]] = ..., + ext1: Optional[Iterable[TestAllTypes]] = ..., + ext2: Optional[Iterable[TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator: ... + + class OptionalGroup(Message): + + @property + def optional_group_all_types(self) -> TestAllTypes: ... + + def __init__(self, + optional_group_all_types: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge.OptionalGroup: ... + + class RepeatedGroup(Message): + + @property + def repeated_group_all_types(self) -> TestAllTypes: ... + + def __init__(self, + repeated_group_all_types: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge.RepeatedGroup: ... + + @property + def required_all_types(self) -> TestAllTypes: ... + + @property + def optional_all_types(self) -> TestAllTypes: ... + + @property + def repeated_all_types( + self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def optionalgroup(self) -> TestParsingMerge.OptionalGroup: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedGroup]: ... + + def __init__(self, + required_all_types: TestAllTypes, + optional_all_types: Optional[TestAllTypes] = ..., + repeated_all_types: Optional[Iterable[TestAllTypes]] = ..., + optionalgroup: Optional[TestParsingMerge.OptionalGroup] = ..., + repeatedgroup: Optional[Iterable[TestParsingMerge.RepeatedGroup]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge: ... + + +class TestCommentInjectionMessage(Message): + a: Text + + def __init__(self, + a: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCommentInjectionMessage: ... + + +class FooRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooRequest: ... + + +class FooResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooResponse: ... + + +class FooClientMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooClientMessage: ... + + +class FooServerMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooServerMessage: ... + + +class BarRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BarRequest: ... + + +class BarResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BarResponse: ... + + +class TestJsonName(Message): + field_name1: int + fieldName2: int + FieldName3: int + _field_name4: int + FIELD_NAME5: int + field_name6: int + + def __init__(self, + field_name1: Optional[int] = ..., + fieldName2: Optional[int] = ..., + FieldName3: Optional[int] = ..., + _field_name4: Optional[int] = ..., + FIELD_NAME5: Optional[int] = ..., + field_name6: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestJsonName: ... + + +class TestHugeFieldNumbers(Message): + class OptionalGroup(Message): + group_a: int + + def __init__(self, + group_a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestHugeFieldNumbers.OptionalGroup: ... + + class StringStringMapEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestHugeFieldNumbers.StringStringMapEntry: ... + optional_int32: int + fixed_32: int + repeated_int32: RepeatedScalarFieldContainer[int] + packed_int32: RepeatedScalarFieldContainer[int] + optional_enum: ForeignEnum + optional_string: Text + optional_bytes: bytes + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optional_message(self) -> ForeignMessage: ... + + @property + def optionalgroup(self) -> TestHugeFieldNumbers.OptionalGroup: ... + + @property + def string_string_map(self) -> MutableMapping[Text, Text]: ... + + @property + def oneof_test_all_types(self) -> TestAllTypes: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + fixed_32: Optional[int] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + packed_int32: Optional[Iterable[int]] = ..., + optional_enum: Optional[ForeignEnum] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_message: Optional[ForeignMessage] = ..., + optionalgroup: Optional[TestHugeFieldNumbers.OptionalGroup] = ..., + string_string_map: Optional[Mapping[Text, Text]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_test_all_types: Optional[TestAllTypes] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestHugeFieldNumbers: ... + + +class TestExtensionInsideTable(Message): + field1: int + field2: int + field3: int + field4: int + field6: int + field7: int + field8: int + field9: int + field10: int + + def __init__(self, + field1: Optional[int] = ..., + field2: Optional[int] = ..., + field3: Optional[int] = ..., + field4: Optional[int] = ..., + field6: Optional[int] = ..., + field7: Optional[int] = ..., + field8: Optional[int] = ..., + field9: Optional[int] = ..., + field10: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionInsideTable: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi new file mode 100644 index 0000000..9464062 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi @@ -0,0 +1,332 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_ZERO: ForeignEnum +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypes(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + ZERO: TestAllTypes.NestedEnum + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_lazy_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_lazy_import_message(self) -> ImportMessage: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_lazy_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_lazy_import_message: Optional[ImportMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class TestPackedTypes(Message): + packed_int32: RepeatedScalarFieldContainer[int] + packed_int64: RepeatedScalarFieldContainer[int] + packed_uint32: RepeatedScalarFieldContainer[int] + packed_uint64: RepeatedScalarFieldContainer[int] + packed_sint32: RepeatedScalarFieldContainer[int] + packed_sint64: RepeatedScalarFieldContainer[int] + packed_fixed32: RepeatedScalarFieldContainer[int] + packed_fixed64: RepeatedScalarFieldContainer[int] + packed_sfixed32: RepeatedScalarFieldContainer[int] + packed_sfixed64: RepeatedScalarFieldContainer[int] + packed_float: RepeatedScalarFieldContainer[float] + packed_double: RepeatedScalarFieldContainer[float] + packed_bool: RepeatedScalarFieldContainer[bool] + packed_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + packed_int32: Optional[Iterable[int]] = ..., + packed_int64: Optional[Iterable[int]] = ..., + packed_uint32: Optional[Iterable[int]] = ..., + packed_uint64: Optional[Iterable[int]] = ..., + packed_sint32: Optional[Iterable[int]] = ..., + packed_sint64: Optional[Iterable[int]] = ..., + packed_fixed32: Optional[Iterable[int]] = ..., + packed_fixed64: Optional[Iterable[int]] = ..., + packed_sfixed32: Optional[Iterable[int]] = ..., + packed_sfixed64: Optional[Iterable[int]] = ..., + packed_float: Optional[Iterable[float]] = ..., + packed_double: Optional[Iterable[float]] = ..., + packed_bool: Optional[Iterable[bool]] = ..., + packed_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedTypes: ... + + +class TestUnpackedTypes(Message): + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + + def __init__(self, + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedTypes: ... + + +class NestedTestAllTypes(Message): + + @property + def child(self) -> NestedTestAllTypes: ... + + @property + def payload(self) -> TestAllTypes: ... + + @property + def repeated_child( + self) -> RepeatedCompositeFieldContainer[NestedTestAllTypes]: ... + + def __init__(self, + child: Optional[NestedTestAllTypes] = ..., + payload: Optional[TestAllTypes] = ..., + repeated_child: Optional[Iterable[NestedTestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedTestAllTypes: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestEmptyMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi new file mode 100644 index 0000000..0462313 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi @@ -0,0 +1,659 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.duration_pb2 import ( + Duration, +) +from google.protobuf.field_mask_pb2 import ( + FieldMask, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.struct_pb2 import ( + ListValue, + Struct, + Value, +) +from google.protobuf.timestamp_pb2 import ( + Timestamp, +) +from google.protobuf.unittest_pb2 import ( + TestAllExtensions, +) +from google.protobuf.wrappers_pb2 import ( + BoolValue, + BytesValue, + DoubleValue, + FloatValue, + Int32Value, + Int64Value, + StringValue, + UInt32Value, + UInt64Value, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class EnumType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> EnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[EnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, EnumType]]: ... + + +FOO: EnumType +BAR: EnumType + + +class MessageType(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageType: ... + + +class TestMessage(Message): + bool_value: bool + int32_value: int + int64_value: int + uint32_value: int + uint64_value: int + float_value: float + double_value: float + string_value: Text + bytes_value: bytes + enum_value: EnumType + repeated_bool_value: RepeatedScalarFieldContainer[bool] + repeated_int32_value: RepeatedScalarFieldContainer[int] + repeated_int64_value: RepeatedScalarFieldContainer[int] + repeated_uint32_value: RepeatedScalarFieldContainer[int] + repeated_uint64_value: RepeatedScalarFieldContainer[int] + repeated_float_value: RepeatedScalarFieldContainer[float] + repeated_double_value: RepeatedScalarFieldContainer[float] + repeated_string_value: RepeatedScalarFieldContainer[Text] + repeated_bytes_value: RepeatedScalarFieldContainer[bytes] + repeated_enum_value: RepeatedScalarFieldContainer[EnumType] + + @property + def message_value(self) -> MessageType: ... + + @property + def repeated_message_value( + self) -> RepeatedCompositeFieldContainer[MessageType]: ... + + def __init__(self, + bool_value: Optional[bool] = ..., + int32_value: Optional[int] = ..., + int64_value: Optional[int] = ..., + uint32_value: Optional[int] = ..., + uint64_value: Optional[int] = ..., + float_value: Optional[float] = ..., + double_value: Optional[float] = ..., + string_value: Optional[Text] = ..., + bytes_value: Optional[bytes] = ..., + enum_value: Optional[EnumType] = ..., + message_value: Optional[MessageType] = ..., + repeated_bool_value: Optional[Iterable[bool]] = ..., + repeated_int32_value: Optional[Iterable[int]] = ..., + repeated_int64_value: Optional[Iterable[int]] = ..., + repeated_uint32_value: Optional[Iterable[int]] = ..., + repeated_uint64_value: Optional[Iterable[int]] = ..., + repeated_float_value: Optional[Iterable[float]] = ..., + repeated_double_value: Optional[Iterable[float]] = ..., + repeated_string_value: Optional[Iterable[Text]] = ..., + repeated_bytes_value: Optional[Iterable[bytes]] = ..., + repeated_enum_value: Optional[Iterable[EnumType]] = ..., + repeated_message_value: Optional[Iterable[MessageType]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessage: ... + + +class TestOneof(Message): + oneof_int32_value: int + oneof_string_value: Text + oneof_bytes_value: bytes + oneof_enum_value: EnumType + + @property + def oneof_message_value(self) -> MessageType: ... + + def __init__(self, + oneof_int32_value: Optional[int] = ..., + oneof_string_value: Optional[Text] = ..., + oneof_bytes_value: Optional[bytes] = ..., + oneof_enum_value: Optional[EnumType] = ..., + oneof_message_value: Optional[MessageType] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof: ... + + +class TestMap(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.BoolMapEntry: ... + + class Int32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Int32MapEntry: ... + + class Int64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Int64MapEntry: ... + + class Uint32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Uint32MapEntry: ... + + class Uint64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Uint64MapEntry: ... + + class StringMapEntry(Message): + key: Text + value: int + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.StringMapEntry: ... + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + @property + def int32_map(self) -> MutableMapping[int, int]: ... + + @property + def int64_map(self) -> MutableMapping[int, int]: ... + + @property + def uint32_map(self) -> MutableMapping[int, int]: ... + + @property + def uint64_map(self) -> MutableMapping[int, int]: ... + + @property + def string_map(self) -> MutableMapping[Text, int]: ... + + def __init__(self, + bool_map: Optional[Mapping[bool, int]] = ..., + int32_map: Optional[Mapping[int, int]] = ..., + int64_map: Optional[Mapping[int, int]] = ..., + uint32_map: Optional[Mapping[int, int]] = ..., + uint64_map: Optional[Mapping[int, int]] = ..., + string_map: Optional[Mapping[Text, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap: ... + + +class TestNestedMap(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.BoolMapEntry: ... + + class Int32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Int32MapEntry: ... + + class Int64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Int64MapEntry: ... + + class Uint32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Uint32MapEntry: ... + + class Uint64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Uint64MapEntry: ... + + class StringMapEntry(Message): + key: Text + value: int + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.StringMapEntry: ... + + class MapMapEntry(Message): + key: Text + + @property + def value(self) -> TestNestedMap: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestNestedMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.MapMapEntry: ... + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + @property + def int32_map(self) -> MutableMapping[int, int]: ... + + @property + def int64_map(self) -> MutableMapping[int, int]: ... + + @property + def uint32_map(self) -> MutableMapping[int, int]: ... + + @property + def uint64_map(self) -> MutableMapping[int, int]: ... + + @property + def string_map(self) -> MutableMapping[Text, int]: ... + + @property + def map_map(self) -> MutableMapping[Text, TestNestedMap]: ... + + def __init__(self, + bool_map: Optional[Mapping[bool, int]] = ..., + int32_map: Optional[Mapping[int, int]] = ..., + int64_map: Optional[Mapping[int, int]] = ..., + uint32_map: Optional[Mapping[int, int]] = ..., + uint64_map: Optional[Mapping[int, int]] = ..., + string_map: Optional[Mapping[Text, int]] = ..., + map_map: Optional[Mapping[Text, TestNestedMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap: ... + + +class TestWrapper(Message): + + @property + def bool_value(self) -> BoolValue: ... + + @property + def int32_value(self) -> Int32Value: ... + + @property + def int64_value(self) -> Int64Value: ... + + @property + def uint32_value(self) -> UInt32Value: ... + + @property + def uint64_value(self) -> UInt64Value: ... + + @property + def float_value(self) -> FloatValue: ... + + @property + def double_value(self) -> DoubleValue: ... + + @property + def string_value(self) -> StringValue: ... + + @property + def bytes_value(self) -> BytesValue: ... + + @property + def repeated_bool_value( + self) -> RepeatedCompositeFieldContainer[BoolValue]: ... + + @property + def repeated_int32_value( + self) -> RepeatedCompositeFieldContainer[Int32Value]: ... + + @property + def repeated_int64_value( + self) -> RepeatedCompositeFieldContainer[Int64Value]: ... + + @property + def repeated_uint32_value( + self) -> RepeatedCompositeFieldContainer[UInt32Value]: ... + + @property + def repeated_uint64_value( + self) -> RepeatedCompositeFieldContainer[UInt64Value]: ... + + @property + def repeated_float_value( + self) -> RepeatedCompositeFieldContainer[FloatValue]: ... + + @property + def repeated_double_value( + self) -> RepeatedCompositeFieldContainer[DoubleValue]: ... + + @property + def repeated_string_value( + self) -> RepeatedCompositeFieldContainer[StringValue]: ... + + @property + def repeated_bytes_value( + self) -> RepeatedCompositeFieldContainer[BytesValue]: ... + + def __init__(self, + bool_value: Optional[BoolValue] = ..., + int32_value: Optional[Int32Value] = ..., + int64_value: Optional[Int64Value] = ..., + uint32_value: Optional[UInt32Value] = ..., + uint64_value: Optional[UInt64Value] = ..., + float_value: Optional[FloatValue] = ..., + double_value: Optional[DoubleValue] = ..., + string_value: Optional[StringValue] = ..., + bytes_value: Optional[BytesValue] = ..., + repeated_bool_value: Optional[Iterable[BoolValue]] = ..., + repeated_int32_value: Optional[Iterable[Int32Value]] = ..., + repeated_int64_value: Optional[Iterable[Int64Value]] = ..., + repeated_uint32_value: Optional[Iterable[UInt32Value]] = ..., + repeated_uint64_value: Optional[Iterable[UInt64Value]] = ..., + repeated_float_value: Optional[Iterable[FloatValue]] = ..., + repeated_double_value: Optional[Iterable[DoubleValue]] = ..., + repeated_string_value: Optional[Iterable[StringValue]] = ..., + repeated_bytes_value: Optional[Iterable[BytesValue]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestWrapper: ... + + +class TestTimestamp(Message): + + @property + def value(self) -> Timestamp: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Timestamp]: ... + + def __init__(self, + value: Optional[Timestamp] = ..., + repeated_value: Optional[Iterable[Timestamp]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestTimestamp: ... + + +class TestDuration(Message): + + @property + def value(self) -> Duration: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Duration]: ... + + def __init__(self, + value: Optional[Duration] = ..., + repeated_value: Optional[Iterable[Duration]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDuration: ... + + +class TestFieldMask(Message): + + @property + def value(self) -> FieldMask: ... + + def __init__(self, + value: Optional[FieldMask] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldMask: ... + + +class TestStruct(Message): + + @property + def value(self) -> Struct: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Struct]: ... + + def __init__(self, + value: Optional[Struct] = ..., + repeated_value: Optional[Iterable[Struct]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestStruct: ... + + +class TestAny(Message): + + @property + def value(self) -> Any: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Any]: ... + + def __init__(self, + value: Optional[Any] = ..., + repeated_value: Optional[Iterable[Any]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAny: ... + + +class TestValue(Message): + + @property + def value(self) -> Value: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + value: Optional[Value] = ..., + repeated_value: Optional[Iterable[Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestValue: ... + + +class TestListValue(Message): + + @property + def value(self) -> ListValue: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[ListValue]: ... + + def __init__(self, + value: Optional[ListValue] = ..., + repeated_value: Optional[Iterable[ListValue]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestListValue: ... + + +class TestBoolValue(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestBoolValue.BoolMapEntry: ... + bool_value: bool + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + def __init__(self, + bool_value: Optional[bool] = ..., + bool_map: Optional[Mapping[bool, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestBoolValue: ... + + +class TestCustomJsonName(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCustomJsonName: ... + + +class TestExtensions(Message): + + @property + def extensions(self) -> TestAllExtensions: ... + + def __init__(self, + extensions: Optional[TestAllExtensions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensions: ... + + +class TestEnumValue(Message): + enum_value1: EnumType + enum_value2: EnumType + enum_value3: EnumType + + def __init__(self, + enum_value1: Optional[EnumType] = ..., + enum_value2: Optional[EnumType] = ..., + enum_value3: Optional[EnumType] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi new file mode 100644 index 0000000..6ff865d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi @@ -0,0 +1,106 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, + Text, +) + + +class DoubleValue(Message): + value: float + + def __init__(self, + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DoubleValue: ... + + +class FloatValue(Message): + value: float + + def __init__(self, + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FloatValue: ... + + +class Int64Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int64Value: ... + + +class UInt64Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UInt64Value: ... + + +class Int32Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int32Value: ... + + +class UInt32Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UInt32Value: ... + + +class BoolValue(Message): + value: bool + + def __init__(self, + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BoolValue: ... + + +class StringValue(Message): + value: Text + + def __init__(self, + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> StringValue: ... + + +class BytesValue(Message): + value: bytes + + def __init__(self, + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BytesValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi new file mode 100644 index 0000000..32bbf2b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi @@ -0,0 +1,153 @@ +from datetime import datetime +from typing import Any, Callable, IO, Mapping, MutableMapping, Optional, Tuple, Union, Text, Generator + +_serializer = Any # must be an object that has "dumps" and "loads" attributes (e.g. the json module) + +def want_bytes(s: Union[Text, bytes], encoding: Text = ..., errors: Text = ...) -> bytes: ... + +class BadData(Exception): + message: str + def __init__(self, message: str) -> None: ... + +class BadPayload(BadData): + original_error: Optional[Exception] + def __init__(self, message: str, original_error: Optional[Exception] = ...) -> None: ... + +class BadSignature(BadData): + payload: Optional[Any] + def __init__(self, message: str, payload: Optional[Any] = ...) -> None: ... + +class BadTimeSignature(BadSignature): + date_signed: Optional[int] + def __init__(self, message: str, payload: Optional[Any] = ..., date_signed: Optional[int] = ...) -> None: ... + +class BadHeader(BadSignature): + header: Any + original_error: Any + def __init__(self, message, payload: Optional[Any] = ..., header: Optional[Any] = ..., original_error: Optional[Any] = ...) -> None: ... + +class SignatureExpired(BadTimeSignature): ... + +def base64_encode(string: Union[Text, bytes]) -> bytes: ... +def base64_decode(string: Union[Text, bytes]) -> bytes: ... + +class SigningAlgorithm(object): + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool: ... + +class NoneAlgorithm(SigningAlgorithm): + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + +class HMACAlgorithm(SigningAlgorithm): + default_digest_method: Callable + digest_method: Callable + def __init__(self, digest_method: Optional[Callable] = ...) -> None: ... + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + +class Signer(object): + default_digest_method: Callable = ... + default_key_derivation: str = ... + + secret_key: bytes + sep: bytes + salt: Union[Text, bytes] + key_derivation: str + digest_method: Callable + algorithm: SigningAlgorithm + + def __init__(self, + secret_key: Union[Text, bytes], + salt: Optional[Union[Text, bytes]] = ..., + sep: Optional[Union[Text, bytes]] = ..., + key_derivation: Optional[str] = ..., + digest_method: Optional[Callable] = ..., + algorithm: Optional[SigningAlgorithm] = ...) -> None: ... + def derive_key(self) -> bytes: ... + def get_signature(self, value: Union[Text, bytes]) -> bytes: ... + def sign(self, value: Union[Text, bytes]) -> bytes: ... + def verify_signature(self, value: bytes, sig: Union[Text, bytes]) -> bool: ... + def unsign(self, signed_value: Union[Text, bytes]) -> bytes: ... + def validate(self, signed_value: Union[Text, bytes]) -> bool: ... + +class TimestampSigner(Signer): + def get_timestamp(self) -> int: ... + def timestamp_to_datetime(self, ts: float) -> datetime: ... + def sign(self, value: Union[Text, bytes]) -> bytes: ... + def unsign(self, value: Union[Text, bytes], max_age: Optional[int] = ..., + return_timestamp: bool = ...) -> Any: ... # morally -> Union[bytes, Tuple[bytes, datetime]] + def validate(self, signed_value: Union[Text, bytes], max_age: Optional[int] = ...) -> bool: ... + +class Serializer(object): + default_serializer: _serializer = ... + default_signer: Callable[..., Signer] = ... + + secret_key: bytes + salt: bytes + serializer: _serializer + is_text_serializer: bool + signer: Callable[..., Signer] + signer_kwargs: MutableMapping[str, Any] + + def __init__(self, secret_key: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ...) -> None: ... + def load_payload(self, payload: bytes, serializer: Optional[_serializer] = ...) -> Any: ... + def dump_payload(self, obj: Any) -> bytes: ... + def make_signer(self, salt: Optional[Union[Text, bytes]] = ...) -> Signer: ... + def iter_unsigners(self, salt: Optional[Union[Text, bytes]] = ...) -> Generator[Any, None, None]: ... + def dumps(self, obj: Any, salt: Optional[Union[Text, bytes]] = ...) -> Any: ... # morally -> Union[str, bytes] + def dump(self, obj: Any, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...) -> None: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ...) -> Any: ... + def load(self, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...): ... + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ...) -> Tuple[bool, Optional[Any]]: ... + def load_unsafe(self, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...) -> Tuple[bool, Optional[Any]]: ... + +class TimedSerializer(Serializer): + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., max_age: Optional[int] = ..., + return_timestamp: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, datetime]] + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + max_age: Optional[int] = ...) -> Tuple[bool, Any]: ... + +class JSONWebSignatureSerializer(Serializer): + jws_algorithms: MutableMapping[Text, SigningAlgorithm] = ... + default_algorithm: Text = ... + default_serializer: Any = ... + + algorithm_name: Text + algorithm: SigningAlgorithm + + def __init__(self, secret_key: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ..., algorithm_name: Optional[Text] = ...) -> None: ... + def load_payload(self, payload: Union[Text, bytes], serializer: Optional[_serializer] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def dump_payload(self, header: Mapping[str, Any], obj: Any) -> bytes: ... # type: ignore + def make_algorithm(self, algorithm_name: Text) -> SigningAlgorithm: ... + def make_signer(self, salt: Optional[Union[Text, bytes]] = ..., algorithm: SigningAlgorithm = ...) -> Signer: ... + def make_header(self, header_fields: Optional[Mapping[str, Any]]) -> MutableMapping[str, Any]: ... + def dumps(self, obj: Any, salt: Optional[Union[Text, bytes]] = ..., + header_fields: Optional[Mapping[str, Any]] = ...) -> str: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Tuple[bool, Any]: ... + +class TimedJSONWebSignatureSerializer(JSONWebSignatureSerializer): + DEFAULT_EXPIRES_IN: int = ... + expires_in: int + def __init__(self, secret_key: Union[Text, bytes], expires_in: Optional[int] = ..., salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ..., algorithm_name: Optional[Text] = ...) -> None: ... + def make_header(self, header_fields: Optional[Mapping[str, Any]]) -> MutableMapping[str, Any]: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def get_issue_date(self, header: Mapping[str, Any]) -> Optional[datetime]: ... + def now(self) -> int: ... + +class _URLSafeSerializerMixin(object): + default_serializer: _serializer = ... + def load_payload(self, payload: bytes, serializer: Optional[_serializer] = ...) -> Any: ... + def dump_payload(self, obj: Any) -> bytes: ... + +class URLSafeSerializer(_URLSafeSerializerMixin, Serializer): ... +class URLSafeTimedSerializer(_URLSafeSerializerMixin, TimedSerializer): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi new file mode 100644 index 0000000..063f73d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi @@ -0,0 +1,7 @@ +from jinja2.environment import Environment as Environment, Template as Template +from jinja2.loaders import BaseLoader as BaseLoader, FileSystemLoader as FileSystemLoader, PackageLoader as PackageLoader, DictLoader as DictLoader, FunctionLoader as FunctionLoader, PrefixLoader as PrefixLoader, ChoiceLoader as ChoiceLoader, ModuleLoader as ModuleLoader +from jinja2.bccache import BytecodeCache as BytecodeCache, FileSystemBytecodeCache as FileSystemBytecodeCache, MemcachedBytecodeCache as MemcachedBytecodeCache +from jinja2.runtime import Undefined as Undefined, DebugUndefined as DebugUndefined, StrictUndefined as StrictUndefined, make_logging_undefined as make_logging_undefined +from jinja2.exceptions import TemplateError as TemplateError, UndefinedError as UndefinedError, TemplateNotFound as TemplateNotFound, TemplatesNotFound as TemplatesNotFound, TemplateSyntaxError as TemplateSyntaxError, TemplateAssertionError as TemplateAssertionError +from jinja2.filters import environmentfilter as environmentfilter, contextfilter as contextfilter, evalcontextfilter as evalcontextfilter +from jinja2.utils import Markup as Markup, escape as escape, clear_caches as clear_caches, environmentfunction as environmentfunction, evalcontextfunction as evalcontextfunction, contextfunction as contextfunction, is_undefined as is_undefined, select_autoescape as select_autoescape diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi new file mode 100644 index 0000000..1e37a7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi @@ -0,0 +1,34 @@ +from typing import Any, Optional +import sys + +if sys.version_info[0] >= 3: + from io import BytesIO + from urllib.parse import quote_from_bytes as url_quote +else: + from cStringIO import StringIO as BytesIO + from urllib import quote as url_quote + +PY2: Any +PYPY: Any +unichr: Any +range_type: Any +text_type: Any +string_types: Any +integer_types: Any +iterkeys: Any +itervalues: Any +iteritems: Any +NativeStringIO: Any + +def reraise(tp, value, tb: Optional[Any] = ...): ... + +ifilter: Any +imap: Any +izip: Any +intern: Any +implements_iterator: Any +implements_to_string: Any +encode_filename: Any +get_next: Any + +def with_metaclass(meta, *bases): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi new file mode 100644 index 0000000..060f888 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi @@ -0,0 +1,40 @@ +from typing import Any + +Cc: str +Cf: str +Cn: str +Co: str +Cs: Any +Ll: str +Lm: str +Lo: str +Lt: str +Lu: str +Mc: str +Me: str +Mn: str +Nd: str +Nl: str +No: str +Pc: str +Pd: str +Pe: str +Pf: str +Pi: str +Po: str +Ps: str +Sc: str +Sk: str +Sm: str +So: str +Zl: str +Zp: str +Zs: str +cats: Any + +def combine(*args): ... + +xid_start: str +xid_continue: str + +def allexcept(*args): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi new file mode 100644 index 0000000..754736a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi @@ -0,0 +1,44 @@ +from typing import Any, Optional + +marshal_dump: Any +marshal_load: Any +bc_version: int +bc_magic: Any + +class Bucket: + environment: Any + key: Any + checksum: Any + def __init__(self, environment, key, checksum) -> None: ... + code: Any + def reset(self): ... + def load_bytecode(self, f): ... + def write_bytecode(self, f): ... + def bytecode_from_string(self, string): ... + def bytecode_to_string(self): ... + +class BytecodeCache: + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... + def clear(self): ... + def get_cache_key(self, name, filename: Optional[Any] = ...): ... + def get_source_checksum(self, source): ... + def get_bucket(self, environment, name, filename, source): ... + def set_bucket(self, bucket): ... + +class FileSystemBytecodeCache(BytecodeCache): + directory: Any + pattern: Any + def __init__(self, directory: Optional[Any] = ..., pattern: str = ...) -> None: ... + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... + def clear(self): ... + +class MemcachedBytecodeCache(BytecodeCache): + client: Any + prefix: Any + timeout: Any + ignore_memcache_errors: Any + def __init__(self, client, prefix: str = ..., timeout: Optional[Any] = ..., ignore_memcache_errors: bool = ...) -> None: ... + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi new file mode 100644 index 0000000..7b1a537 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi @@ -0,0 +1,176 @@ +from typing import Any, Optional +from keyword import iskeyword as is_python_keyword +from jinja2.visitor import NodeVisitor + +operators: Any +dict_item_iter: str + +unoptimize_before_dead_code: bool + +def generate(node, environment, name, filename, stream: Optional[Any] = ..., defer_init: bool = ...): ... +def has_safe_repr(value): ... +def find_undeclared(nodes, names): ... + +class Identifiers: + declared: Any + outer_undeclared: Any + undeclared: Any + declared_locally: Any + declared_parameter: Any + def __init__(self) -> None: ... + def add_special(self, name): ... + def is_declared(self, name): ... + def copy(self): ... + +class Frame: + eval_ctx: Any + identifiers: Any + toplevel: bool + rootlevel: bool + require_output_check: Any + buffer: Any + block: Any + assigned_names: Any + parent: Any + def __init__(self, eval_ctx, parent: Optional[Any] = ...) -> None: ... + def copy(self): ... + def inspect(self, nodes): ... + def find_shadowed(self, extra: Any = ...): ... + def inner(self): ... + def soft(self): ... + __copy__: Any + +class VisitorExit(RuntimeError): ... + +class DependencyFinderVisitor(NodeVisitor): + filters: Any + tests: Any + def __init__(self) -> None: ... + def visit_Filter(self, node): ... + def visit_Test(self, node): ... + def visit_Block(self, node): ... + +class UndeclaredNameVisitor(NodeVisitor): + names: Any + undeclared: Any + def __init__(self, names) -> None: ... + def visit_Name(self, node): ... + def visit_Block(self, node): ... + +class FrameIdentifierVisitor(NodeVisitor): + identifiers: Any + def __init__(self, identifiers) -> None: ... + def visit_Name(self, node): ... + def visit_If(self, node): ... + def visit_Macro(self, node): ... + def visit_Import(self, node): ... + def visit_FromImport(self, node): ... + def visit_Assign(self, node): ... + def visit_For(self, node): ... + def visit_CallBlock(self, node): ... + def visit_FilterBlock(self, node): ... + def visit_AssignBlock(self, node): ... + def visit_Scope(self, node): ... + def visit_Block(self, node): ... + +class CompilerExit(Exception): ... + +class CodeGenerator(NodeVisitor): + environment: Any + name: Any + filename: Any + stream: Any + created_block_context: bool + defer_init: Any + import_aliases: Any + blocks: Any + extends_so_far: int + has_known_extends: bool + code_lineno: int + tests: Any + filters: Any + debug_info: Any + def __init__(self, environment, name, filename, stream: Optional[Any] = ..., defer_init: bool = ...) -> None: ... + def fail(self, msg, lineno): ... + def temporary_identifier(self): ... + def buffer(self, frame): ... + def return_buffer_contents(self, frame): ... + def indent(self): ... + def outdent(self, step: int = ...): ... + def start_write(self, frame, node: Optional[Any] = ...): ... + def end_write(self, frame): ... + def simple_write(self, s, frame, node: Optional[Any] = ...): ... + def blockvisit(self, nodes, frame): ... + def write(self, x): ... + def writeline(self, x, node: Optional[Any] = ..., extra: int = ...): ... + def newline(self, node: Optional[Any] = ..., extra: int = ...): ... + def signature(self, node, frame, extra_kwargs: Optional[Any] = ...): ... + def pull_locals(self, frame): ... + def pull_dependencies(self, nodes): ... + def unoptimize_scope(self, frame): ... + def push_scope(self, frame, extra_vars: Any = ...): ... + def pop_scope(self, aliases, frame): ... + def function_scoping(self, node, frame, children: Optional[Any] = ..., find_special: bool = ...): ... + def macro_body(self, node, frame, children: Optional[Any] = ...): ... + def macro_def(self, node, frame): ... + def position(self, node): ... + def visit_Template(self, node, frame: Optional[Any] = ...): ... + def visit_Block(self, node, frame): ... + def visit_Extends(self, node, frame): ... + def visit_Include(self, node, frame): ... + def visit_Import(self, node, frame): ... + def visit_FromImport(self, node, frame): ... + def visit_For(self, node, frame): ... + def visit_If(self, node, frame): ... + def visit_Macro(self, node, frame): ... + def visit_CallBlock(self, node, frame): ... + def visit_FilterBlock(self, node, frame): ... + def visit_ExprStmt(self, node, frame): ... + def visit_Output(self, node, frame): ... + def make_assignment_frame(self, frame): ... + def export_assigned_vars(self, frame, assignment_frame): ... + def visit_Assign(self, node, frame): ... + def visit_AssignBlock(self, node, frame): ... + def visit_Name(self, node, frame): ... + def visit_Const(self, node, frame): ... + def visit_TemplateData(self, node, frame): ... + def visit_Tuple(self, node, frame): ... + def visit_List(self, node, frame): ... + def visit_Dict(self, node, frame): ... + def binop(self, interceptable: bool = ...): ... + def uaop(self, interceptable: bool = ...): ... + visit_Add: Any + visit_Sub: Any + visit_Mul: Any + visit_Div: Any + visit_FloorDiv: Any + visit_Pow: Any + visit_Mod: Any + visit_And: Any + visit_Or: Any + visit_Pos: Any + visit_Neg: Any + visit_Not: Any + def visit_Concat(self, node, frame): ... + def visit_Compare(self, node, frame): ... + def visit_Operand(self, node, frame): ... + def visit_Getattr(self, node, frame): ... + def visit_Getitem(self, node, frame): ... + def visit_Slice(self, node, frame): ... + def visit_Filter(self, node, frame): ... + def visit_Test(self, node, frame): ... + def visit_CondExpr(self, node, frame): ... + def visit_Call(self, node, frame, forward_caller: bool = ...): ... + def visit_Keyword(self, node, frame): ... + def visit_MarkSafe(self, node, frame): ... + def visit_MarkSafeIfAutoescape(self, node, frame): ... + def visit_EnvironmentAttribute(self, node, frame): ... + def visit_ExtensionAttribute(self, node, frame): ... + def visit_ImportedName(self, node, frame): ... + def visit_InternalName(self, node, frame): ... + def visit_ContextReference(self, node, frame): ... + def visit_Continue(self, node, frame): ... + def visit_Break(self, node, frame): ... + def visit_Scope(self, node, frame): ... + def visit_EvalContextModifier(self, node, frame): ... + def visit_ScopedEvalContextModifier(self, node, frame): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi new file mode 100644 index 0000000..55ea3ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi @@ -0,0 +1 @@ +LOREM_IPSUM_WORDS: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi new file mode 100644 index 0000000..f495a4d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi @@ -0,0 +1,37 @@ +from typing import Any, Optional + +tproxy: Any +raise_helper: str + +class TracebackFrameProxy: + tb: Any + def __init__(self, tb) -> None: ... + @property + def tb_next(self): ... + def set_next(self, next): ... + @property + def is_jinja_frame(self): ... + def __getattr__(self, name): ... + +def make_frame_proxy(frame): ... + +class ProcessedTraceback: + exc_type: Any + exc_value: Any + frames: Any + def __init__(self, exc_type, exc_value, frames) -> None: ... + def render_as_text(self, limit: Optional[Any] = ...): ... + def render_as_html(self, full: bool = ...): ... + @property + def is_template_syntax_error(self): ... + @property + def exc_info(self): ... + @property + def standard_exc_info(self): ... + +def make_traceback(exc_info, source_hint: Optional[Any] = ...): ... +def translate_syntax_error(error, source: Optional[Any] = ...): ... +def translate_exception(exc_info, initial_skip: int = ...): ... +def fake_exc_info(exc_info, filename, lineno): ... + +tb_set_next: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi new file mode 100644 index 0000000..e89d3ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi @@ -0,0 +1,21 @@ +from typing import Any +from jinja2.filters import FILTERS as DEFAULT_FILTERS +from jinja2.tests import TESTS as DEFAULT_TESTS + +BLOCK_START_STRING: str +BLOCK_END_STRING: str +VARIABLE_START_STRING: str +VARIABLE_END_STRING: str +COMMENT_START_STRING: str +COMMENT_END_STRING: str +LINE_STATEMENT_PREFIX: Any +LINE_COMMENT_PREFIX: Any +TRIM_BLOCKS: bool +LSTRIP_BLOCKS: bool +NEWLINE_SEQUENCE: str +KEEP_TRAILING_NEWLINE: bool +DEFAULT_NAMESPACE: Any + +# Names in __all__ with no definition: +# DEFAULT_FILTERS +# DEFAULT_TESTS diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi new file mode 100644 index 0000000..f5997a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi @@ -0,0 +1,125 @@ +import sys +from typing import Any, Callable, Dict, Iterator, List, Optional, Text, Type, Union + +from .bccache import BytecodeCache +from .loaders import BaseLoader +from .runtime import Context, Undefined + +if sys.version_info >= (3, 6): + from typing import Awaitable, AsyncIterator + +def get_spontaneous_environment(*args): ... +def create_cache(size): ... +def copy_cache(cache): ... +def load_extensions(environment, extensions): ... + +class Environment: + sandboxed: bool + overlayed: bool + linked_to: Any + shared: bool + exception_handler: Any + exception_formatter: Any + code_generator_class: Any + context_class: Any + block_start_string: Text + block_end_string: Text + variable_start_string: Text + variable_end_string: Text + comment_start_string: Text + comment_end_string: Text + line_statement_prefix: Text + line_comment_prefix: Text + trim_blocks: bool + lstrip_blocks: Any + newline_sequence: Text + keep_trailing_newline: bool + undefined: Type[Undefined] + optimized: bool + finalize: Callable + autoescape: Any + filters: Any + tests: Any + globals: Dict[str, Any] + loader: BaseLoader + cache: Any + bytecode_cache: BytecodeCache + auto_reload: bool + extensions: List + def __init__(self, block_start_string: Text = ..., block_end_string: Text = ..., variable_start_string: Text = ..., variable_end_string: Text = ..., comment_start_string: Any = ..., comment_end_string: Text = ..., line_statement_prefix: Text = ..., line_comment_prefix: Text = ..., trim_blocks: bool = ..., lstrip_blocks: bool = ..., newline_sequence: Text = ..., keep_trailing_newline: bool = ..., extensions: List = ..., optimized: bool = ..., undefined: Type[Undefined] = ..., finalize: Optional[Callable] = ..., autoescape: Union[bool, Callable[[str], bool]] = ..., loader: Optional[BaseLoader] = ..., cache_size: int = ..., auto_reload: bool = ..., bytecode_cache: Optional[BytecodeCache] = ..., enable_async: bool = ...) -> None: ... + def add_extension(self, extension): ... + def extend(self, **attributes): ... + def overlay(self, block_start_string: Text = ..., block_end_string: Text = ..., variable_start_string: Text = ..., variable_end_string: Text = ..., comment_start_string: Any = ..., comment_end_string: Text = ..., line_statement_prefix: Text = ..., line_comment_prefix: Text = ..., trim_blocks: bool = ..., lstrip_blocks: bool = ..., extensions: List = ..., optimized: bool = ..., undefined: Type[Undefined] = ..., finalize: Callable = ..., autoescape: bool = ..., loader: Optional[BaseLoader] = ..., cache_size: int = ..., auto_reload: bool = ..., bytecode_cache: Optional[BytecodeCache] = ...): ... + lexer: Any + def iter_extensions(self): ... + def getitem(self, obj, argument): ... + def getattr(self, obj, attribute): ... + def call_filter(self, name, value, args: Optional[Any] = ..., kwargs: Optional[Any] = ..., context: Optional[Any] = ..., eval_ctx: Optional[Any] = ...): ... + def call_test(self, name, value, args: Optional[Any] = ..., kwargs: Optional[Any] = ...): ... + def parse(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def lex(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def preprocess(self, source: Text, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def compile(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., raw: bool = ..., defer_init: bool = ...): ... + def compile_expression(self, source: Text, undefined_to_none: bool = ...): ... + def compile_templates(self, target, extensions: Optional[Any] = ..., filter_func: Optional[Any] = ..., zip: str = ..., log_function: Optional[Any] = ..., ignore_errors: bool = ..., py_compile: bool = ...): ... + def list_templates(self, extensions: Optional[Any] = ..., filter_func: Optional[Any] = ...): ... + def handle_exception(self, exc_info: Optional[Any] = ..., rendered: bool = ..., source_hint: Optional[Any] = ...): ... + def join_path(self, template: Union[Template, Text], parent: Text) -> Text: ... + def get_template(self, name: Union[Template, Text], parent: Optional[Text] = ..., globals: Optional[Any] = ...) -> Template: ... + def select_template(self, names: List[Union[Template, Text]], parent: Optional[Text] = ..., globals: Optional[Dict[str, Any]] = ...) -> Template: ... + def get_or_select_template(self, template_name_or_list: Union[Union[Template, Text], List[Union[Template, Text]]], parent: Optional[Text] = ..., globals: Optional[Dict[str, Any]] = ...) -> Template: ... + def from_string(self, source: Text, globals: Optional[Dict[str, Any]] = ..., template_class: Optional[Type[Template]] = ...) -> Template: ... + def make_globals(self, d: Optional[Dict[str, Any]]) -> Dict[str, Any]: ... + + # Frequently added extensions are included here: + # from InternationalizationExtension: + def install_gettext_translations(self, translations: Any, newstyle: Optional[bool]): ... + def install_null_translations(self, newstyle: Optional[bool]): ... + def install_gettext_callables(self, gettext: Callable, ngettext: Callable, + newstyle: Optional[bool]): ... + def uninstall_gettext_translations(self, translations: Any): ... + def extract_translations(self, source: Any, gettext_functions: Any): ... + newstyle_gettext: bool + +class Template: + def __new__(cls, source, block_start_string: Any = ..., block_end_string: Any = ..., variable_start_string: Any = ..., variable_end_string: Any = ..., comment_start_string: Any = ..., comment_end_string: Any = ..., line_statement_prefix: Any = ..., line_comment_prefix: Any = ..., trim_blocks: Any = ..., lstrip_blocks: Any = ..., newline_sequence: Any = ..., keep_trailing_newline: Any = ..., extensions: Any = ..., optimized: bool = ..., undefined: Any = ..., finalize: Optional[Any] = ..., autoescape: bool = ...): ... + environment: Environment = ... + @classmethod + def from_code(cls, environment, code, globals, uptodate: Optional[Any] = ...): ... + @classmethod + def from_module_dict(cls, environment, module_dict, globals): ... + def render(self, *args, **kwargs) -> Text: ... + def stream(self, *args, **kwargs) -> TemplateStream: ... + def generate(self, *args, **kwargs) -> Iterator[Text]: ... + def new_context(self, vars: Optional[Dict[str, Any]] = ..., shared: bool = ..., locals: Optional[Dict[str, Any]] = ...) -> Context: ... + def make_module(self, vars: Optional[Dict[str, Any]] = ..., shared: bool = ..., locals: Optional[Dict[str, Any]] = ...) -> Context: ... + @property + def module(self) -> Any: ... + def get_corresponding_lineno(self, lineno): ... + @property + def is_up_to_date(self) -> bool: ... + @property + def debug_info(self): ... + + if sys.version_info >= (3, 6): + def render_async(self, *args, **kwargs) -> Awaitable[Text]: ... + def generate_async(self, *args, **kwargs) -> AsyncIterator[Text]: ... + + +class TemplateModule: + __name__: Any + def __init__(self, template, context) -> None: ... + def __html__(self): ... + +class TemplateExpression: + def __init__(self, template, undefined_to_none) -> None: ... + def __call__(self, *args, **kwargs): ... + +class TemplateStream: + def __init__(self, gen) -> None: ... + def dump(self, fp, encoding: Optional[Text] = ..., errors: Text = ...): ... + buffered: bool + def disable_buffering(self) -> None: ... + def enable_buffering(self, size: int = ...) -> None: ... + def __iter__(self): ... + def __next__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi new file mode 100644 index 0000000..8f6be75 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi @@ -0,0 +1,31 @@ +from typing import Any, Optional, Text + +class TemplateError(Exception): + def __init__(self, message: Optional[Text] = ...) -> None: ... + @property + def message(self): ... + def __unicode__(self): ... + +class TemplateNotFound(IOError, LookupError, TemplateError): + message: Any + name: Any + templates: Any + def __init__(self, name, message: Optional[Text] = ...) -> None: ... + +class TemplatesNotFound(TemplateNotFound): + templates: Any + def __init__(self, names: Any = ..., message: Optional[Text] = ...) -> None: ... + +class TemplateSyntaxError(TemplateError): + lineno: int + name: Text + filename: Text + source: Text + translated: bool + def __init__(self, message: Text, lineno: int, name: Optional[Text] = ..., filename: Optional[Text] = ...) -> None: ... + +class TemplateAssertionError(TemplateSyntaxError): ... +class TemplateRuntimeError(TemplateError): ... +class UndefinedError(TemplateRuntimeError): ... +class SecurityError(TemplateRuntimeError): ... +class FilterArgumentError(TemplateRuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi new file mode 100644 index 0000000..2835860 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi @@ -0,0 +1,58 @@ +from typing import Any, Optional + +GETTEXT_FUNCTIONS: Any + +class ExtensionRegistry(type): + def __new__(cls, name, bases, d): ... + +class Extension: + tags: Any + priority: int + environment: Any + def __init__(self, environment) -> None: ... + def bind(self, environment): ... + def preprocess(self, source, name, filename: Optional[Any] = ...): ... + def filter_stream(self, stream): ... + def parse(self, parser): ... + def attr(self, name, lineno: Optional[Any] = ...): ... + def call_method(self, name, args: Optional[Any] = ..., kwargs: Optional[Any] = ..., dyn_args: Optional[Any] = ..., dyn_kwargs: Optional[Any] = ..., lineno: Optional[Any] = ...): ... + +class InternationalizationExtension(Extension): + tags: Any + def __init__(self, environment) -> None: ... + def parse(self, parser): ... + +class ExprStmtExtension(Extension): + tags: Any + def parse(self, parser): ... + +class LoopControlExtension(Extension): + tags: Any + def parse(self, parser): ... + +class WithExtension(Extension): + tags: Any + def parse(self, parser): ... + +class AutoEscapeExtension(Extension): + tags: Any + def parse(self, parser): ... + +def extract_from_ast(node, gettext_functions: Any = ..., babel_style: bool = ...): ... + +class _CommentFinder: + tokens: Any + comment_tags: Any + offset: int + last_lineno: int + def __init__(self, tokens, comment_tags) -> None: ... + def find_backwards(self, offset): ... + def find_comments(self, lineno): ... + +def babel_extract(fileobj, keywords, comment_tags, options): ... + +i18n: Any +do: Any +loopcontrols: Any +with_: Any +autoescape: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi new file mode 100644 index 0000000..e0d9c8e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi @@ -0,0 +1,57 @@ +from typing import Any, Optional + +def contextfilter(f): ... +def evalcontextfilter(f): ... +def environmentfilter(f): ... +def make_attrgetter(environment, attribute): ... +def do_forceescape(value): ... +def do_urlencode(value): ... +def do_replace(eval_ctx, s, old, new, count: Optional[Any] = ...): ... +def do_upper(s): ... +def do_lower(s): ... +def do_xmlattr(_eval_ctx, d, autospace: bool = ...): ... +def do_capitalize(s): ... +def do_title(s): ... +def do_dictsort(value, case_sensitive: bool = ..., by: str = ...): ... +def do_sort(environment, value, reverse: bool = ..., case_sensitive: bool = ..., attribute: Optional[Any] = ...): ... +def do_default(value, default_value: str = ..., boolean: bool = ...): ... +def do_join(eval_ctx, value, d: str = ..., attribute: Optional[Any] = ...): ... +def do_center(value, width: int = ...): ... +def do_first(environment, seq): ... +def do_last(environment, seq): ... +def do_random(environment, seq): ... +def do_filesizeformat(value, binary: bool = ...): ... +def do_pprint(value, verbose: bool = ...): ... +def do_urlize(eval_ctx, value, trim_url_limit: Optional[Any] = ..., nofollow: bool = ..., target: Optional[Any] = ...): ... +def do_indent(s, width: int = ..., indentfirst: bool = ...): ... +def do_truncate(s, length: int = ..., killwords: bool = ..., end: str = ...): ... +def do_wordwrap(environment, s, width: int = ..., break_long_words: bool = ..., wrapstring: Optional[Any] = ...): ... +def do_wordcount(s): ... +def do_int(value, default: int = ..., base: int = ...): ... +def do_float(value, default: float = ...): ... +def do_format(value, *args, **kwargs): ... +def do_trim(value): ... +def do_striptags(value): ... +def do_slice(value, slices, fill_with: Optional[Any] = ...): ... +def do_batch(value, linecount, fill_with: Optional[Any] = ...): ... +def do_round(value, precision: int = ..., method: str = ...): ... +def do_groupby(environment, value, attribute): ... + +class _GroupTuple(tuple): + grouper: Any + list: Any + def __new__(cls, xxx_todo_changeme): ... + +def do_sum(environment, iterable, attribute: Optional[Any] = ..., start: int = ...): ... +def do_list(value): ... +def do_mark_safe(value): ... +def do_mark_unsafe(value): ... +def do_reverse(value): ... +def do_attr(environment, obj, name): ... +def do_map(*args, **kwargs): ... +def do_select(*args, **kwargs): ... +def do_reject(*args, **kwargs): ... +def do_selectattr(*args, **kwargs): ... +def do_rejectattr(*args, **kwargs): ... + +FILTERS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi new file mode 100644 index 0000000..182a2fb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi @@ -0,0 +1,117 @@ +from typing import Any, Optional + +whitespace_re: Any +string_re: Any +integer_re: Any +name_re: Any +float_re: Any +newline_re: Any +TOKEN_ADD: Any +TOKEN_ASSIGN: Any +TOKEN_COLON: Any +TOKEN_COMMA: Any +TOKEN_DIV: Any +TOKEN_DOT: Any +TOKEN_EQ: Any +TOKEN_FLOORDIV: Any +TOKEN_GT: Any +TOKEN_GTEQ: Any +TOKEN_LBRACE: Any +TOKEN_LBRACKET: Any +TOKEN_LPAREN: Any +TOKEN_LT: Any +TOKEN_LTEQ: Any +TOKEN_MOD: Any +TOKEN_MUL: Any +TOKEN_NE: Any +TOKEN_PIPE: Any +TOKEN_POW: Any +TOKEN_RBRACE: Any +TOKEN_RBRACKET: Any +TOKEN_RPAREN: Any +TOKEN_SEMICOLON: Any +TOKEN_SUB: Any +TOKEN_TILDE: Any +TOKEN_WHITESPACE: Any +TOKEN_FLOAT: Any +TOKEN_INTEGER: Any +TOKEN_NAME: Any +TOKEN_STRING: Any +TOKEN_OPERATOR: Any +TOKEN_BLOCK_BEGIN: Any +TOKEN_BLOCK_END: Any +TOKEN_VARIABLE_BEGIN: Any +TOKEN_VARIABLE_END: Any +TOKEN_RAW_BEGIN: Any +TOKEN_RAW_END: Any +TOKEN_COMMENT_BEGIN: Any +TOKEN_COMMENT_END: Any +TOKEN_COMMENT: Any +TOKEN_LINESTATEMENT_BEGIN: Any +TOKEN_LINESTATEMENT_END: Any +TOKEN_LINECOMMENT_BEGIN: Any +TOKEN_LINECOMMENT_END: Any +TOKEN_LINECOMMENT: Any +TOKEN_DATA: Any +TOKEN_INITIAL: Any +TOKEN_EOF: Any +operators: Any +reverse_operators: Any +operator_re: Any +ignored_tokens: Any +ignore_if_empty: Any + +def describe_token(token): ... +def describe_token_expr(expr): ... +def count_newlines(value): ... +def compile_rules(environment): ... + +class Failure: + message: Any + error_class: Any + def __init__(self, message, cls: Any = ...) -> None: ... + def __call__(self, lineno, filename): ... + +class Token(tuple): + lineno: Any + type: Any + value: Any + def __new__(cls, lineno, type, value): ... + def test(self, expr): ... + def test_any(self, *iterable): ... + +class TokenStreamIterator: + stream: Any + def __init__(self, stream) -> None: ... + def __iter__(self): ... + def __next__(self): ... + +class TokenStream: + name: Any + filename: Any + closed: bool + current: Any + def __init__(self, generator, name, filename) -> None: ... + def __iter__(self): ... + def __bool__(self): ... + __nonzero__: Any + eos: Any + def push(self, token): ... + def look(self): ... + def skip(self, n: int = ...): ... + def next_if(self, expr): ... + def skip_if(self, expr): ... + def __next__(self): ... + def close(self): ... + def expect(self, expr): ... + +def get_lexer(environment): ... + +class Lexer: + newline_sequence: Any + keep_trailing_newline: Any + rules: Any + def __init__(self, environment) -> None: ... + def tokenize(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., state: Optional[Any] = ...): ... + def wrap(self, stream, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def tokeniter(self, source, name, filename: Optional[Any] = ..., state: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi new file mode 100644 index 0000000..330de41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi @@ -0,0 +1,70 @@ +from typing import Any, Callable, Iterable, List, Optional, Text, Tuple, Union +from types import ModuleType + +from .environment import Environment + +def split_template_path(template: Text) -> List[Text]: ... + +class BaseLoader: + has_source_access: bool + def get_source(self, environment, template): ... + def list_templates(self): ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + +class FileSystemLoader(BaseLoader): + searchpath: Text + encoding: Any + followlinks: Any + def __init__(self, searchpath: Union[Text, Iterable[Text]], encoding: Text = ..., followlinks: bool = ...) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class PackageLoader(BaseLoader): + encoding: Text + manager: Any + filesystem_bound: Any + provider: Any + package_path: Any + def __init__(self, package_name: Text, package_path: Text = ..., encoding: Text = ...) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class DictLoader(BaseLoader): + mapping: Any + def __init__(self, mapping) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class FunctionLoader(BaseLoader): + load_func: Any + def __init__(self, load_func) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Optional[Text], Optional[Callable]]: ... + +class PrefixLoader(BaseLoader): + mapping: Any + delimiter: Any + def __init__(self, mapping, delimiter: str = ...) -> None: ... + def get_loader(self, template): ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + def list_templates(self): ... + +class ChoiceLoader(BaseLoader): + loaders: Any + def __init__(self, loaders) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + def list_templates(self): ... + +class _TemplateModule(ModuleType): ... + +class ModuleLoader(BaseLoader): + has_source_access: bool + module: Any + package_name: Any + def __init__(self, path) -> None: ... + @staticmethod + def get_template_key(name): ... + @staticmethod + def get_module_filename(name): ... + def load(self, environment, name, globals: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi new file mode 100644 index 0000000..46ca83b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi @@ -0,0 +1,11 @@ +from typing import Any +from jinja2.compiler import CodeGenerator + +class TrackingCodeGenerator(CodeGenerator): + undeclared_identifiers: Any + def __init__(self, environment) -> None: ... + def write(self, x): ... + def pull_locals(self, frame): ... + +def find_undeclared_variables(ast): ... +def find_referenced_templates(ast): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi new file mode 100644 index 0000000..4fb410d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi @@ -0,0 +1,250 @@ +from typing import Any, Optional + +class Impossible(Exception): ... + +class NodeType(type): + def __new__(cls, name, bases, d): ... + +class EvalContext: + environment: Any + autoescape: Any + volatile: bool + def __init__(self, environment, template_name: Optional[Any] = ...) -> None: ... + def save(self): ... + def revert(self, old): ... + +def get_eval_context(node, ctx): ... + +class Node: + fields: Any + attributes: Any + abstract: bool + def __init__(self, *fields, **attributes) -> None: ... + def iter_fields(self, exclude: Optional[Any] = ..., only: Optional[Any] = ...): ... + def iter_child_nodes(self, exclude: Optional[Any] = ..., only: Optional[Any] = ...): ... + def find(self, node_type): ... + def find_all(self, node_type): ... + def set_ctx(self, ctx): ... + def set_lineno(self, lineno, override: bool = ...): ... + def set_environment(self, environment): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + __hash__: Any + +class Stmt(Node): + abstract: bool + +class Helper(Node): + abstract: bool + +class Template(Node): + fields: Any + +class Output(Stmt): + fields: Any + +class Extends(Stmt): + fields: Any + +class For(Stmt): + fields: Any + +class If(Stmt): + fields: Any + +class Macro(Stmt): + fields: Any + +class CallBlock(Stmt): + fields: Any + +class FilterBlock(Stmt): + fields: Any + +class Block(Stmt): + fields: Any + +class Include(Stmt): + fields: Any + +class Import(Stmt): + fields: Any + +class FromImport(Stmt): + fields: Any + +class ExprStmt(Stmt): + fields: Any + +class Assign(Stmt): + fields: Any + +class AssignBlock(Stmt): + fields: Any + +class Expr(Node): + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class BinExpr(Expr): + fields: Any + operator: Any + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class UnaryExpr(Expr): + fields: Any + operator: Any + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Name(Expr): + fields: Any + def can_assign(self): ... + +class Literal(Expr): + abstract: bool + +class Const(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + @classmethod + def from_untrusted(cls, value, lineno: Optional[Any] = ..., environment: Optional[Any] = ...): ... + +class TemplateData(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Tuple(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class List(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Dict(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Pair(Helper): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Keyword(Helper): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class CondExpr(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Filter(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Test(Expr): + fields: Any + +class Call(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Getitem(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class Getattr(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class Slice(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Concat(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Compare(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Operand(Helper): + fields: Any + +class Mul(BinExpr): + operator: str + +class Div(BinExpr): + operator: str + +class FloorDiv(BinExpr): + operator: str + +class Add(BinExpr): + operator: str + +class Sub(BinExpr): + operator: str + +class Mod(BinExpr): + operator: str + +class Pow(BinExpr): + operator: str + +class And(BinExpr): + operator: str + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Or(BinExpr): + operator: str + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Not(UnaryExpr): + operator: str + +class Neg(UnaryExpr): + operator: str + +class Pos(UnaryExpr): + operator: str + +class EnvironmentAttribute(Expr): + fields: Any + +class ExtensionAttribute(Expr): + fields: Any + +class ImportedName(Expr): + fields: Any + +class InternalName(Expr): + fields: Any + def __init__(self) -> None: ... + +class MarkSafe(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class MarkSafeIfAutoescape(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class ContextReference(Expr): ... +class Continue(Stmt): ... +class Break(Stmt): ... + +class Scope(Stmt): + fields: Any + +class EvalContextModifier(Stmt): + fields: Any + +class ScopedEvalContextModifier(EvalContextModifier): + fields: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi new file mode 100644 index 0000000..b55b08a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi @@ -0,0 +1,29 @@ +from typing import Any +from jinja2.visitor import NodeTransformer + +def optimize(node, environment): ... + +class Optimizer(NodeTransformer): + environment: Any + def __init__(self, environment) -> None: ... + def visit_If(self, node): ... + def fold(self, node): ... + visit_Add: Any + visit_Sub: Any + visit_Mul: Any + visit_Div: Any + visit_FloorDiv: Any + visit_Pow: Any + visit_Mod: Any + visit_And: Any + visit_Or: Any + visit_Pos: Any + visit_Neg: Any + visit_Not: Any + visit_Compare: Any + visit_Getitem: Any + visit_Getattr: Any + visit_Call: Any + visit_Filter: Any + visit_Test: Any + visit_CondExpr: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi new file mode 100644 index 0000000..a16ae8d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi @@ -0,0 +1,60 @@ +from typing import Any, Optional + +class Parser: + environment: Any + stream: Any + name: Any + filename: Any + closed: bool + extensions: Any + def __init__(self, environment, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., state: Optional[Any] = ...) -> None: ... + def fail(self, msg, lineno: Optional[Any] = ..., exc: Any = ...): ... + def fail_unknown_tag(self, name, lineno: Optional[Any] = ...): ... + def fail_eof(self, end_tokens: Optional[Any] = ..., lineno: Optional[Any] = ...): ... + def is_tuple_end(self, extra_end_rules: Optional[Any] = ...): ... + def free_identifier(self, lineno: Optional[Any] = ...): ... + def parse_statement(self): ... + def parse_statements(self, end_tokens, drop_needle: bool = ...): ... + def parse_set(self): ... + def parse_for(self): ... + def parse_if(self): ... + def parse_block(self): ... + def parse_extends(self): ... + def parse_import_context(self, node, default): ... + def parse_include(self): ... + def parse_import(self): ... + def parse_from(self): ... + def parse_signature(self, node): ... + def parse_call_block(self): ... + def parse_filter_block(self): ... + def parse_macro(self): ... + def parse_print(self): ... + def parse_assign_target(self, with_tuple: bool = ..., name_only: bool = ..., extra_end_rules: Optional[Any] = ...): ... + def parse_expression(self, with_condexpr: bool = ...): ... + def parse_condexpr(self): ... + def parse_or(self): ... + def parse_and(self): ... + def parse_not(self): ... + def parse_compare(self): ... + def parse_add(self): ... + def parse_sub(self): ... + def parse_concat(self): ... + def parse_mul(self): ... + def parse_div(self): ... + def parse_floordiv(self): ... + def parse_mod(self): ... + def parse_pow(self): ... + def parse_unary(self, with_filter: bool = ...): ... + def parse_primary(self): ... + def parse_tuple(self, simplified: bool = ..., with_condexpr: bool = ..., extra_end_rules: Optional[Any] = ..., explicit_parentheses: bool = ...): ... + def parse_list(self): ... + def parse_dict(self): ... + def parse_postfix(self, node): ... + def parse_filter_expr(self, node): ... + def parse_subscript(self, node): ... + def parse_subscribed(self): ... + def parse_call(self, node): ... + def parse_filter(self, node, start_inline: bool = ...): ... + def parse_test(self, node): ... + def subparse(self, end_tokens: Optional[Any] = ...): ... + def parse(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi new file mode 100644 index 0000000..271c0ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi @@ -0,0 +1,130 @@ +from typing import Any, Dict, Optional, Text, Union +from jinja2.utils import Markup as Markup, escape as escape, missing as missing, concat as concat +from jinja2.exceptions import TemplateRuntimeError as TemplateRuntimeError, TemplateNotFound as TemplateNotFound + +from jinja2.environment import Environment + +to_string: Any +identity: Any + +def markup_join(seq): ... +def unicode_join(seq): ... + +class TemplateReference: + def __init__(self, context) -> None: ... + def __getitem__(self, name): ... + +class Context: + parent: Union[Context, Dict[str, Any]] + vars: Dict[str, Any] + environment: Environment + eval_ctx: Any + exported_vars: Any + name: Text + blocks: Dict[str, Any] + def __init__(self, environment: Environment, parent: Union[Context, Dict[str, Any]], name: Text, blocks: Dict[str, Any]) -> None: ... + def super(self, name, current): ... + def get(self, key, default: Optional[Any] = ...): ... + def resolve(self, key): ... + def get_exported(self): ... + def get_all(self): ... + def call(__self, __obj, *args, **kwargs): ... + def derived(self, locals: Optional[Any] = ...): ... + keys: Any + values: Any + items: Any + iterkeys: Any + itervalues: Any + iteritems: Any + def __contains__(self, name): ... + def __getitem__(self, key): ... + +class BlockReference: + name: Any + def __init__(self, name, context, stack, depth) -> None: ... + @property + def super(self): ... + def __call__(self): ... + +class LoopContext: + index0: int + depth0: Any + def __init__(self, iterable, recurse: Optional[Any] = ..., depth0: int = ...) -> None: ... + def cycle(self, *args): ... + first: Any + last: Any + index: Any + revindex: Any + revindex0: Any + depth: Any + def __len__(self): ... + def __iter__(self): ... + def loop(self, iterable): ... + __call__: Any + @property + def length(self): ... + +class LoopContextIterator: + context: Any + def __init__(self, context) -> None: ... + def __iter__(self): ... + def __next__(self): ... + +class Macro: + name: Any + arguments: Any + defaults: Any + catch_kwargs: Any + catch_varargs: Any + caller: Any + def __init__(self, environment, func, name, arguments, defaults, catch_kwargs, catch_varargs, caller) -> None: ... + def __call__(self, *args, **kwargs): ... + +class Undefined: + def __init__(self, hint: Optional[Any] = ..., obj: Any = ..., name: Optional[Any] = ..., exc: Any = ...) -> None: ... + def __getattr__(self, name): ... + __add__: Any + __radd__: Any + __mul__: Any + __rmul__: Any + __div__: Any + __rdiv__: Any + __truediv__: Any + __rtruediv__: Any + __floordiv__: Any + __rfloordiv__: Any + __mod__: Any + __rmod__: Any + __pos__: Any + __neg__: Any + __call__: Any + __getitem__: Any + __lt__: Any + __le__: Any + __gt__: Any + __ge__: Any + __int__: Any + __float__: Any + __complex__: Any + __pow__: Any + __rpow__: Any + def __eq__(self, other): ... + def __ne__(self, other): ... + def __hash__(self): ... + def __len__(self): ... + def __iter__(self): ... + def __nonzero__(self): ... + __bool__: Any + +def make_logging_undefined(logger: Optional[Any] = ..., base: Optional[Any] = ...): ... + +class DebugUndefined(Undefined): ... + +class StrictUndefined(Undefined): + __iter__: Any + __len__: Any + __nonzero__: Any + __eq__: Any + __ne__: Any + __bool__: Any + __hash__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi new file mode 100644 index 0000000..518deca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi @@ -0,0 +1,34 @@ +from typing import Any +from jinja2.environment import Environment + +MAX_RANGE: int +UNSAFE_FUNCTION_ATTRIBUTES: Any +UNSAFE_METHOD_ATTRIBUTES: Any +UNSAFE_GENERATOR_ATTRIBUTES: Any + +def safe_range(*args): ... +def unsafe(f): ... +def is_internal_attribute(obj, attr): ... +def modifies_known_mutable(obj, attr): ... + +class SandboxedEnvironment(Environment): + sandboxed: bool + default_binop_table: Any + default_unop_table: Any + intercepted_binops: Any + intercepted_unops: Any + def intercept_unop(self, operator): ... + binop_table: Any + unop_table: Any + def __init__(self, *args, **kwargs) -> None: ... + def is_safe_attribute(self, obj, attr, value): ... + def is_safe_callable(self, obj): ... + def call_binop(self, context, operator, left, right): ... + def call_unop(self, context, operator, arg): ... + def getitem(self, obj, argument): ... + def getattr(self, obj, attribute): ... + def unsafe_undefined(self, obj, attribute): ... + def call(__self, __context, __obj, *args, **kwargs): ... + +class ImmutableSandboxedEnvironment(SandboxedEnvironment): + def is_safe_attribute(self, obj, attr, value): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi new file mode 100644 index 0000000..2645fe9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi @@ -0,0 +1,24 @@ +from typing import Any + +number_re: Any +regex_type: Any +test_callable: Any + +def test_odd(value): ... +def test_even(value): ... +def test_divisibleby(value, num): ... +def test_defined(value): ... +def test_undefined(value): ... +def test_none(value): ... +def test_lower(value): ... +def test_upper(value): ... +def test_string(value): ... +def test_mapping(value): ... +def test_number(value): ... +def test_sequence(value): ... +def test_equalto(value, other): ... +def test_sameas(value, other): ... +def test_iterable(value): ... +def test_escaped(value): ... + +TESTS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi new file mode 100644 index 0000000..bf5ff83 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi @@ -0,0 +1,61 @@ +from typing import Any, Callable, Iterable, Optional + +from markupsafe import Markup as Markup, escape as escape, soft_unicode as soft_unicode + +missing: Any +internal_code: Any +concat: Any + +def contextfunction(f): ... +def evalcontextfunction(f): ... +def environmentfunction(f): ... +def internalcode(f): ... +def is_undefined(obj): ... +def select_autoescape(enabled_extensions: Iterable[str] = ..., disabled_extensions: Iterable[str] = ..., default_for_string: bool = ..., default: bool = ...) -> Callable[[str], bool]: ... +def consume(iterable): ... +def clear_caches(): ... +def import_string(import_name, silent: bool = ...): ... +def open_if_exists(filename, mode: str = ...): ... +def object_type_repr(obj): ... +def pformat(obj, verbose: bool = ...): ... +def urlize(text, trim_url_limit: Optional[Any] = ..., nofollow: bool = ..., target: Optional[Any] = ...): ... +def generate_lorem_ipsum(n: int = ..., html: bool = ..., min: int = ..., max: int = ...): ... +def unicode_urlencode(obj, charset: str = ..., for_qs: bool = ...): ... + +class LRUCache: + capacity: Any + def __init__(self, capacity) -> None: ... + def __getnewargs__(self): ... + def copy(self): ... + def get(self, key, default: Optional[Any] = ...): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def clear(self): ... + def __contains__(self, key): ... + def __len__(self): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def items(self): ... + def iteritems(self): ... + def values(self): ... + def itervalue(self): ... + def keys(self): ... + def iterkeys(self): ... + __iter__: Any + def __reversed__(self): ... + __copy__: Any + +class Cycler: + items: Any + def __init__(self, *items) -> None: ... + pos: int + def reset(self): ... + @property + def current(self): ... + def __next__(self): ... + +class Joiner: + sep: Any + used: bool + def __init__(self, sep: str = ...) -> None: ... + def __call__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi new file mode 100644 index 0000000..ef34328 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi @@ -0,0 +1,8 @@ +class NodeVisitor: + def get_visitor(self, node): ... + def visit(self, node, *args, **kwargs): ... + def generic_visit(self, node, *args, **kwargs): ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node, *args, **kwargs): ... + def visit_list(self, node, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi new file mode 100644 index 0000000..44d15da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi @@ -0,0 +1,53 @@ +import sys + +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Text, Tuple, Union +from collections import Mapping +from markupsafe._compat import text_type +import string +from markupsafe._native import escape as escape, escape_silent as escape_silent, soft_unicode as soft_unicode + +class Markup(text_type): + def __new__(cls, base: Text = ..., encoding: Optional[Text] = ..., errors: Text = ...) -> Markup: ... + def __html__(self) -> Markup: ... + def __add__(self, other: text_type) -> Markup: ... + def __radd__(self, other: text_type) -> Markup: ... + def __mul__(self, num: int) -> Markup: ... + def __rmul__(self, num: int) -> Markup: ... + def __mod__(self, *args: Any) -> Markup: ... + def join(self, seq: Iterable[text_type]): ... + def split(self, sep: Optional[text_type] = ..., maxsplit: int = ...) -> List[text_type]: ... + def rsplit(self, sep: Optional[text_type] = ..., maxsplit: int = ...) -> List[text_type]: ... + def splitlines(self, keepends: bool = ...) -> List[text_type]: ... + def unescape(self) -> Text: ... + def striptags(self) -> Text: ... + @classmethod + def escape(cls, s: text_type) -> Markup: ... + def partition(self, sep: text_type) -> Tuple[Markup, Markup, Markup]: ... + def rpartition(self, sep: text_type) -> Tuple[Markup, Markup, Markup]: ... + def format(self, *args, **kwargs) -> Markup: ... + def __html_format__(self, format_spec) -> Markup: ... + def __getslice__(self, start: int, stop: int) -> Markup: ... + def __getitem__(self, i: Union[int, slice]) -> Markup: ... + def capitalize(self) -> Markup: ... + def title(self) -> Markup: ... + def lower(self) -> Markup: ... + def upper(self) -> Markup: ... + def swapcase(self) -> Markup: ... + def replace(self, old: text_type, new: text_type, count: int = ...) -> Markup: ... + def ljust(self, width: int, fillchar: text_type = ...) -> Markup: ... + def rjust(self, width: int, fillchar: text_type = ...) -> Markup: ... + def lstrip(self, chars: Optional[text_type] = ...) -> Markup: ... + def rstrip(self, chars: Optional[text_type] = ...) -> Markup: ... + def strip(self, chars: Optional[text_type] = ...) -> Markup: ... + def center(self, width: int, fillchar: text_type = ...) -> Markup: ... + def zfill(self, width: int) -> Markup: ... + def translate(self, table: Union[Mapping[int, Union[int, text_type, None]], Sequence[Union[int, text_type, None]]]) -> Markup: ... + def expandtabs(self, tabsize: int = ...) -> Markup: ... + +class EscapeFormatter(string.Formatter): + escape: Callable[[text_type], Markup] + def __init__(self, escape: Callable[[text_type], Markup]) -> None: ... + def format_field(self, value: text_type, format_spec: text_type) -> Markup: ... + +if sys.version_info[0] >= 3: + soft_str = soft_unicode diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi new file mode 100644 index 0000000..7257425 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi @@ -0,0 +1,19 @@ +import sys + +from typing import Any, Iterator, Mapping, Text, Tuple, TypeVar + +_K = TypeVar('_K') +_V = TypeVar('_V') + +PY2: bool +def iteritems(d: Mapping[_K, _V]) -> Iterator[Tuple[_K, _V]]: ... +if sys.version_info[0] >= 3: + text_type = str + string_types = str, + unichr = chr + int_types = int, +else: + from __builtin__ import unichr as unichr + text_type = unicode + string_types = (str, unicode) + int_types = (int, long) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi new file mode 100644 index 0000000..a0d67ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi @@ -0,0 +1,3 @@ +from typing import Any, Dict, Text + +HTML_ENTITIES: Dict[Text, int] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi new file mode 100644 index 0000000..ecf20c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi @@ -0,0 +1,7 @@ +from . import Markup +from ._compat import text_type, string_types +from typing import Union, Text + +def escape(s: Union[Markup, Text]) -> Markup: ... +def escape_silent(s: Union[None, Markup, Text]) -> Markup: ... +def soft_unicode(s: Text) -> text_type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi new file mode 100644 index 0000000..ecf20c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi @@ -0,0 +1,7 @@ +from . import Markup +from ._compat import text_type, string_types +from typing import Union, Text + +def escape(s: Union[Markup, Text]) -> Markup: ... +def escape_silent(s: Union[None, Markup, Text]) -> Markup: ... +def soft_unicode(s: Text) -> text_type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mock.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mock.pyi new file mode 100644 index 0000000..cb3db61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mock.pyi @@ -0,0 +1,146 @@ +# Stubs for mock + +import sys +from typing import Any, Optional, Text, Type + +FILTER_DIR: Any + +class _slotted: ... + +class _SentinelObject: + name: Any + def __init__(self, name: Any) -> None: ... + +class _Sentinel: + def __init__(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +sentinel: Any +DEFAULT: Any + +class _CallList(list): + def __contains__(self, value: Any) -> bool: ... + +class _MockIter: + obj: Any + def __init__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __next__(self) -> Any: ... + +class Base: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + +# TODO: Defining this and other mock classes as classes in this stub causes +# many false positives with mypy and production code. See if we can +# improve mypy somehow and use a class with an "Any" base class. +NonCallableMock: Any + +class CallableMixin(Base): + side_effect: Any + def __init__(self, spec: Optional[Any] = ..., side_effect: Optional[Any] = ..., return_value: Any = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., **kwargs: Any) -> None: ... + def __call__(_mock_self, *args: Any, **kwargs: Any) -> Any: ... + +Mock: Any + +class _patch: + attribute_name: Any + getter: Any + attribute: Any + new: Any + new_callable: Any + spec: Any + create: bool + has_local: Any + spec_set: Any + autospec: Any + kwargs: Any + additional_patchers: Any + def __init__(self, getter: Any, attribute: Any, new: Any, spec: Any, create: Any, spec_set: Any, autospec: Any, new_callable: Any, kwargs: Any) -> None: ... + def copy(self) -> Any: ... + def __call__(self, func: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def decorate_callable(self, func: Any) -> Any: ... + def get_original(self) -> Any: ... + target: Any + temp_original: Any + is_local: Any + def __enter__(self) -> Any: ... + def __exit__(self, *exc_info: Any) -> Any: ... + def start(self) -> Any: ... + def stop(self) -> Any: ... + +class _patch_dict: + in_dict: Any + values: Any + clear: Any + def __init__(self, in_dict: Any, values: Any = ..., clear: Any = ..., **kwargs: Any) -> None: ... + def __call__(self, f: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def __enter__(self) -> Any: ... + def __exit__(self, *args: Any) -> Any: ... + start: Any + stop: Any + +class _patcher: + TEST_PREFIX: str + dict: Type[_patch_dict] + def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def object(self, target: Any, attribute: Text, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def stopall(self) -> None: ... + +patch: _patcher + +class MagicMixin: + def __init__(self, *args: Any, **kw: Any) -> None: ... + +NonCallableMagicMock: Any +MagicMock: Any + +class MagicProxy: + name: Any + parent: Any + def __init__(self, name: Any, parent: Any) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def create_mock(self) -> Any: ... + def __get__(self, obj: Any, _type: Optional[Any] = ...) -> Any: ... + +class _ANY: + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +ANY: Any + +class _Call(tuple): + def __new__(cls, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> Any: ... + name: Any + parent: Any + from_kall: Any + def __init__(self, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> None: ... + def __eq__(self, other: Any) -> bool: ... + __ne__: Any + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __getattr__(self, attr: Any) -> Any: ... + def count(self, *args: Any, **kwargs: Any) -> Any: ... + def index(self, *args: Any, **kwargs: Any) -> Any: ... + def call_list(self) -> Any: ... + +call: Any + +def create_autospec(spec: Any, spec_set: Any = ..., instance: Any = ..., _parent: Optional[Any] = ..., _name: Optional[Any] = ..., **kwargs: Any) -> Any: ... + +class _SpecState: + spec: Any + ids: Any + spec_set: Any + parent: Any + instance: Any + name: Any + def __init__(self, spec: Any, spec_set: Any = ..., parent: Optional[Any] = ..., name: Optional[Any] = ..., ids: Optional[Any] = ..., instance: Any = ...) -> None: ... + +def mock_open(mock: Optional[Any] = ..., read_data: Any = ...) -> Any: ... + +PropertyMock: Any + +if sys.version_info >= (3, 7): + def seal(mock: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi new file mode 100644 index 0000000..f9c9ff6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi @@ -0,0 +1,44 @@ +import abc +import sys +from typing import ( + Dict, Type, TypeVar, Optional, Union, Any, Generic, Mapping, ItemsView, KeysView, ValuesView +) + +_T = TypeVar('_T') +_U = TypeVar('_U') + +# Internal mypy fallback type for all typed dicts (does not exist at runtime) +class _TypedDict(Mapping[str, object], metaclass=abc.ABCMeta): + def copy(self: _T) -> _T: ... + # Using NoReturn so that only calls using mypy plugin hook that specialize the signature + # can go through. + def setdefault(self, k: NoReturn, default: object) -> object: ... + # Mypy plugin hook for 'pop' expects that 'default' has a type variable type. + def pop(self, k: NoReturn, default: _T = ...) -> object: ... + def update(self: _T, __m: _T) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, k: str) -> bool: ... + def viewitems(self) -> ItemsView[str, object]: ... + def viewkeys(self) -> KeysView[str]: ... + def viewvalues(self) -> ValuesView[object]: ... + def __delitem__(self, k: NoReturn) -> None: ... + +def TypedDict(typename: str, fields: Dict[str, Type[_T]], total: bool = ...) -> Type[dict]: ... + +def Arg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def DefaultArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def NamedArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def DefaultNamedArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def VarArg(type: _T = ...) -> _T: ... +def KwArg(type: _T = ...) -> _T: ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] # Deprecated: Use typing.NoReturn instead. + +# This is intended as a class decorator, but mypy rejects abstract classes +# when a Type[_T] is expected, so we can't give it the type we want +def trait(cls: Any) -> Any: ... + +class FlexibleAlias(Generic[_T, _U]): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi new file mode 100644 index 0000000..0d9da02 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi @@ -0,0 +1,605 @@ +# TODO(MichalPokorny): more precise types + +from typing import Any, Tuple + +GLOBAL_ACK_EINTR: int +GLOBAL_ALL: int +GLOBAL_DEFAULT: int +GLOBAL_NOTHING: int +GLOBAL_SSL: int +GLOBAL_WIN32: int + +def global_init(option: int) -> None: ... +def global_cleanup() -> None: ... + +version: str + +def version_info() -> Tuple[int, str, int, str, int, str, + int, str, tuple, Any, int, Any]: ... + +class error(Exception): ... + +class Curl(object): + def close(self) -> None: ... + def setopt(self, option: int, value: Any) -> None: ... + def perform(self) -> None: ... + def getinfo(self, info: Any) -> Any: ... + def reset(self) -> None: ... + def unsetopt(self, option: int) -> Any: ... + def pause(self, bitmask: Any) -> Any: ... + def errstr(self) -> str: ... + + # TODO(MichalPokorny): wat? + USERPWD: int + +class CurlMulti(object): + def close(self) -> None: ... + def add_handle(self, obj: Curl) -> None: ... + def remove_handle(self, obj: Curl) -> None: ... + def perform(self) -> Tuple[Any, int]: ... + def fdset(self) -> tuple: ... + def select(self, timeout: float = ...) -> int: ... + def info_read(self, max_objects: int = ...) -> tuple: ... + +class CurlShare(object): + def close(self) -> None: ... + def setopt(self, option: int, value: Any) -> Any: ... + +ACCEPTTIMEOUT_MS: int +ACCEPT_ENCODING: int +ADDRESS_SCOPE: int +APPCONNECT_TIME: int +APPEND: int +AUTOREFERER: int +BUFFERSIZE: int +CAINFO: int +CAPATH: int +CLOSESOCKETFUNCTION: int +COMPILE_DATE: str +COMPILE_LIBCURL_VERSION_NUM: int +COMPILE_PY_VERSION_HEX: int +CONDITION_UNMET: int +CONNECTTIMEOUT: int +CONNECTTIMEOUT_MS: int +CONNECT_ONLY: int +CONNECT_TIME: int +CONTENT_LENGTH_DOWNLOAD: int +CONTENT_LENGTH_UPLOAD: int +CONTENT_TYPE: int +COOKIE: int +COOKIEFILE: int +COOKIEJAR: int +COOKIELIST: int +COOKIESESSION: int +COPYPOSTFIELDS: int +CRLF: int +CRLFILE: int +CSELECT_ERR: int +CSELECT_IN: int +CSELECT_OUT: int +CURL_HTTP_VERSION_1_0: int +CURL_HTTP_VERSION_1_1: int +CURL_HTTP_VERSION_2: int +CURL_HTTP_VERSION_2_0: int +CURL_HTTP_VERSION_LAST: int +CURL_HTTP_VERSION_NONE: int +CUSTOMREQUEST: int +DEBUGFUNCTION: int +DIRLISTONLY: int +DNS_CACHE_TIMEOUT: int +DNS_SERVERS: int +DNS_USE_GLOBAL_CACHE: int +EFFECTIVE_URL: int +EGDSOCKET: int +ENCODING: int +EXPECT_100_TIMEOUT_MS: int +FAILONERROR: int +FILE: int +FOLLOWLOCATION: int +FORBID_REUSE: int +FORM_BUFFER: int +FORM_BUFFERPTR: int +FORM_CONTENTS: int +FORM_CONTENTTYPE: int +FORM_FILE: int +FORM_FILENAME: int +FRESH_CONNECT: int +FTPAPPEND: int +FTPAUTH_DEFAULT: int +FTPAUTH_SSL: int +FTPAUTH_TLS: int +FTPLISTONLY: int +FTPMETHOD_DEFAULT: int +FTPMETHOD_MULTICWD: int +FTPMETHOD_NOCWD: int +FTPMETHOD_SINGLECWD: int +FTPPORT: int +FTPSSLAUTH: int +FTPSSL_ALL: int +FTPSSL_CONTROL: int +FTPSSL_NONE: int +FTPSSL_TRY: int +FTP_ACCOUNT: int +FTP_ALTERNATIVE_TO_USER: int +FTP_CREATE_MISSING_DIRS: int +FTP_ENTRY_PATH: int +FTP_FILEMETHOD: int +FTP_RESPONSE_TIMEOUT: int +FTP_SKIP_PASV_IP: int +FTP_SSL: int +FTP_SSL_CCC: int +FTP_USE_EPRT: int +FTP_USE_EPSV: int +FTP_USE_PRET: int +GSSAPI_DELEGATION: int +GSSAPI_DELEGATION_FLAG: int +GSSAPI_DELEGATION_NONE: int +GSSAPI_DELEGATION_POLICY_FLAG: int +HEADER: int +HEADERFUNCTION: int +HEADEROPT: int +HEADER_SEPARATE: int +HEADER_SIZE: int +HEADER_UNIFIED: int +HTTP200ALIASES: int +HTTPAUTH: int +HTTPAUTH_ANY: int +HTTPAUTH_ANYSAFE: int +HTTPAUTH_AVAIL: int +HTTPAUTH_BASIC: int +HTTPAUTH_DIGEST: int +HTTPAUTH_DIGEST_IE: int +HTTPAUTH_GSSNEGOTIATE: int +HTTPAUTH_NEGOTIATE: int +HTTPAUTH_NONE: int +HTTPAUTH_NTLM: int +HTTPAUTH_NTLM_WB: int +HTTPAUTH_ONLY: int +HTTPGET: int +HTTPHEADER: int +HTTPPOST: int +HTTPPROXYTUNNEL: int +HTTP_CODE: int +HTTP_CONNECTCODE: int +HTTP_CONTENT_DECODING: int +HTTP_TRANSFER_DECODING: int +HTTP_VERSION: int +IGNORE_CONTENT_LENGTH: int +INFILE: int +INFILESIZE: int +INFILESIZE_LARGE: int +INFOTYPE_DATA_IN: int +INFOTYPE_DATA_OUT: int +INFOTYPE_HEADER_IN: int +INFOTYPE_HEADER_OUT: int +INFOTYPE_SSL_DATA_IN: int +INFOTYPE_SSL_DATA_OUT: int +INFOTYPE_TEXT: int +INFO_CERTINFO: int +INFO_COOKIELIST: int +INFO_FILETIME: int +INFO_RTSP_CLIENT_CSEQ: int +INFO_RTSP_CSEQ_RECV: int +INFO_RTSP_SERVER_CSEQ: int +INFO_RTSP_SESSION_ID: int +INTERFACE: int +IOCMD_NOP: int +IOCMD_RESTARTREAD: int +IOCTLDATA: int +IOCTLFUNCTION: int +IOE_FAILRESTART: int +IOE_OK: int +IOE_UNKNOWNCMD: int +IPRESOLVE: int +IPRESOLVE_V4: int +IPRESOLVE_V6: int +IPRESOLVE_WHATEVER: int +ISSUERCERT: int +KEYPASSWD: int +KHMATCH_MISMATCH: int +KHMATCH_MISSING: int +KHMATCH_OK: int +KHSTAT_DEFER: int +KHSTAT_FINE: int +KHSTAT_FINE_ADD_TO_FILE: int +KHSTAT_REJECT: int +KHTYPE_DSS: int +KHTYPE_RSA: int +KHTYPE_RSA1: int +KHTYPE_UNKNOWN: int +KRB4LEVEL: int +KRBLEVEL: int +LASTSOCKET: int +LOCALPORT: int +LOCALPORTRANGE: int +LOCAL_IP: int +LOCAL_PORT: int +LOCK_DATA_COOKIE: int +LOCK_DATA_DNS: int +LOCK_DATA_SSL_SESSION: int +LOGIN_OPTIONS: int +LOW_SPEED_LIMIT: int +LOW_SPEED_TIME: int +MAIL_AUTH: int +MAIL_FROM: int +MAIL_RCPT: int +MAXCONNECTS: int +MAXFILESIZE: int +MAXFILESIZE_LARGE: int +MAXREDIRS: int +MAX_RECV_SPEED_LARGE: int +MAX_SEND_SPEED_LARGE: int +M_CHUNK_LENGTH_PENALTY_SIZE: int +M_CONTENT_LENGTH_PENALTY_SIZE: int +M_MAXCONNECTS: int +M_MAX_HOST_CONNECTIONS: int +M_MAX_PIPELINE_LENGTH: int +M_MAX_TOTAL_CONNECTIONS: int +M_PIPELINING: int +M_PIPELINING_SERVER_BL: int +M_PIPELINING_SITE_BL: int +M_SOCKETFUNCTION: int +M_TIMERFUNCTION: int +NAMELOOKUP_TIME: int +NETRC: int +NETRC_FILE: int +NETRC_IGNORED: int +NETRC_OPTIONAL: int +NETRC_REQUIRED: int +NEW_DIRECTORY_PERMS: int +NEW_FILE_PERMS: int +NOBODY: int +NOPROGRESS: int +NOPROXY: int +NOSIGNAL: int +NUM_CONNECTS: int +OPENSOCKETFUNCTION: int +OPT_CERTINFO: int +OPT_FILETIME: int +OS_ERRNO: int +PASSWORD: int +PATH_AS_IS: int +PAUSE_ALL: int +PAUSE_CONT: int +PAUSE_RECV: int +PAUSE_SEND: int +PINNEDPUBLICKEY: int +PIPEWAIT: int +PIPE_HTTP1: int +PIPE_MULTIPLEX: int +PIPE_NOTHING: int +POLL_IN: int +POLL_INOUT: int +POLL_NONE: int +POLL_OUT: int +POLL_REMOVE: int +PORT: int +POST: int +POST301: int +POSTFIELDS: int +POSTFIELDSIZE: int +POSTFIELDSIZE_LARGE: int +POSTQUOTE: int +POSTREDIR: int +PREQUOTE: int +PRETRANSFER_TIME: int +PRIMARY_IP: int +PRIMARY_PORT: int +PROGRESSFUNCTION: int +PROTOCOLS: int +PROTO_ALL: int +PROTO_DICT: int +PROTO_FILE: int +PROTO_FTP: int +PROTO_FTPS: int +PROTO_GOPHER: int +PROTO_HTTP: int +PROTO_HTTPS: int +PROTO_IMAP: int +PROTO_IMAPS: int +PROTO_LDAP: int +PROTO_LDAPS: int +PROTO_POP3: int +PROTO_POP3S: int +PROTO_RTMP: int +PROTO_RTMPE: int +PROTO_RTMPS: int +PROTO_RTMPT: int +PROTO_RTMPTE: int +PROTO_RTMPTS: int +PROTO_RTSP: int +PROTO_SCP: int +PROTO_SFTP: int +PROTO_SMB: int +PROTO_SMBS: int +PROTO_SMTP: int +PROTO_SMTPS: int +PROTO_TELNET: int +PROTO_TFTP: int +PROXY: int +PROXYAUTH: int +PROXYAUTH_AVAIL: int +PROXYHEADER: int +PROXYPASSWORD: int +PROXYPORT: int +PROXYTYPE: int +PROXYTYPE_HTTP: int +PROXYTYPE_HTTP_1_0: int +PROXYTYPE_SOCKS4: int +PROXYTYPE_SOCKS4A: int +PROXYTYPE_SOCKS5: int +PROXYTYPE_SOCKS5_HOSTNAME: int +PROXYUSERNAME: int +PROXYUSERPWD: int +PROXY_SERVICE_NAME: int +PROXY_TRANSFER_MODE: int +PUT: int +QUOTE: int +RANDOM_FILE: int +RANGE: int +READDATA: int +READFUNCTION: int +READFUNC_ABORT: int +READFUNC_PAUSE: int +REDIRECT_COUNT: int +REDIRECT_TIME: int +REDIRECT_URL: int +REDIR_POST_301: int +REDIR_POST_302: int +REDIR_POST_303: int +REDIR_POST_ALL: int +REDIR_PROTOCOLS: int +REFERER: int +REQUEST_SIZE: int +RESOLVE: int +RESPONSE_CODE: int +RESUME_FROM: int +RESUME_FROM_LARGE: int +SASL_IR: int +SEEKFUNCTION: int +SEEKFUNC_CANTSEEK: int +SEEKFUNC_FAIL: int +SEEKFUNC_OK: int +SERVICE_NAME: int +SHARE: int +SH_SHARE: int +SH_UNSHARE: int +SIZE_DOWNLOAD: int +SIZE_UPLOAD: int +SOCKET_TIMEOUT: int +SOCKOPTFUNCTION: int +SOCKOPT_ALREADY_CONNECTED: int +SOCKOPT_ERROR: int +SOCKOPT_OK: int +SOCKS5_GSSAPI_NEC: int +SOCKS5_GSSAPI_SERVICE: int +SOCKTYPE_ACCEPT: int +SOCKTYPE_IPCXN: int +SPEED_DOWNLOAD: int +SPEED_UPLOAD: int +SSH_AUTH_ANY: int +SSH_AUTH_DEFAULT: int +SSH_AUTH_HOST: int +SSH_AUTH_KEYBOARD: int +SSH_AUTH_NONE: int +SSH_AUTH_PASSWORD: int +SSH_AUTH_PUBLICKEY: int +SSH_AUTH_TYPES: int +SSH_HOST_PUBLIC_KEY_MD5: int +SSH_KEYFUNCTION: int +SSH_KNOWNHOSTS: int +SSH_PRIVATE_KEYFILE: int +SSH_PUBLIC_KEYFILE: int +SSLCERT: int +SSLCERTPASSWD: int +SSLCERTTYPE: int +SSLENGINE: int +SSLENGINE_DEFAULT: int +SSLKEY: int +SSLKEYPASSWD: int +SSLKEYTYPE: int +SSLOPT_ALLOW_BEAST: int +SSLVERSION: int +SSLVERSION_DEFAULT: int +SSLVERSION_SSLv2: int +SSLVERSION_SSLv3: int +SSLVERSION_TLSv1: int +SSLVERSION_TLSv1_0: int +SSLVERSION_TLSv1_1: int +SSLVERSION_TLSv1_2: int +SSL_CIPHER_LIST: int +SSL_ENABLE_ALPN: int +SSL_ENABLE_NPN: int +SSL_ENGINES: int +SSL_FALSESTART: int +SSL_OPTIONS: int +SSL_SESSIONID_CACHE: int +SSL_VERIFYHOST: int +SSL_VERIFYPEER: int +SSL_VERIFYRESULT: int +SSL_VERIFYSTATUS: int +STARTTRANSFER_TIME: int +STDERR: int +TCP_KEEPALIVE: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_NODELAY: int +TELNETOPTIONS: int +TFTP_BLKSIZE: int +TIMECONDITION: int +TIMECONDITION_IFMODSINCE: int +TIMECONDITION_IFUNMODSINCE: int +TIMECONDITION_LASTMOD: int +TIMECONDITION_NONE: int +TIMEOUT: int +TIMEOUT_MS: int +TIMEVALUE: int +TLSAUTH_PASSWORD: int +TLSAUTH_TYPE: int +TLSAUTH_USERNAME: int +TOTAL_TIME: int +TRANSFERTEXT: int +TRANSFER_ENCODING: int +UNIX_SOCKET_PATH: int +UNRESTRICTED_AUTH: int +UPLOAD: int +URL: int +USERAGENT: int +USERNAME: int +USERPWD: int +USESSL_ALL: int +USESSL_CONTROL: int +USESSL_NONE: int +USESSL_TRY: int +USE_SSL: int +VERBOSE: int +VERSION_ASYNCHDNS: int +VERSION_CONV: int +VERSION_CURLDEBUG: int +VERSION_DEBUG: int +VERSION_GSSAPI: int +VERSION_GSSNEGOTIATE: int +VERSION_HTTP2: int +VERSION_IDN: int +VERSION_IPV6: int +VERSION_KERBEROS4: int +VERSION_KERBEROS5: int +VERSION_LARGEFILE: int +VERSION_LIBZ: int +VERSION_NTLM: int +VERSION_NTLM_WB: int +VERSION_SPNEGO: int +VERSION_SSL: int +VERSION_SSPI: int +VERSION_TLSAUTH_SRP: int +VERSION_UNIX_SOCKETS: int +WILDCARDMATCH: int +WRITEDATA: int +WRITEFUNCTION: int +WRITEFUNC_PAUSE: int +WRITEHEADER: int +XFERINFOFUNCTION: int +XOAUTH2_BEARER: int + +E_ABORTED_BY_CALLBACK: int +E_AGAIN: int +E_ALREADY_COMPLETE: int +E_BAD_CALLING_ORDER: int +E_BAD_CONTENT_ENCODING: int +E_BAD_DOWNLOAD_RESUME: int +E_BAD_FUNCTION_ARGUMENT: int +E_BAD_PASSWORD_ENTERED: int +E_CALL_MULTI_PERFORM: int +E_CHUNK_FAILED: int +E_CONV_FAILED: int +E_CONV_REQD: int +E_COULDNT_CONNECT: int +E_COULDNT_RESOLVE_HOST: int +E_COULDNT_RESOLVE_PROXY: int +E_FAILED_INIT: int +E_FILESIZE_EXCEEDED: int +E_FILE_COULDNT_READ_FILE: int +E_FTP_ACCEPT_FAILED: int +E_FTP_ACCEPT_TIMEOUT: int +E_FTP_ACCESS_DENIED: int +E_FTP_BAD_DOWNLOAD_RESUME: int +E_FTP_BAD_FILE_LIST: int +E_FTP_CANT_GET_HOST: int +E_FTP_CANT_RECONNECT: int +E_FTP_COULDNT_GET_SIZE: int +E_FTP_COULDNT_RETR_FILE: int +E_FTP_COULDNT_SET_ASCII: int +E_FTP_COULDNT_SET_BINARY: int +E_FTP_COULDNT_SET_TYPE: int +E_FTP_COULDNT_STOR_FILE: int +E_FTP_COULDNT_USE_REST: int +E_FTP_PARTIAL_FILE: int +E_FTP_PORT_FAILED: int +E_FTP_PRET_FAILED: int +E_FTP_QUOTE_ERROR: int +E_FTP_SSL_FAILED: int +E_FTP_USER_PASSWORD_INCORRECT: int +E_FTP_WEIRD_227_FORMAT: int +E_FTP_WEIRD_PASS_REPLY: int +E_FTP_WEIRD_PASV_REPLY: int +E_FTP_WEIRD_SERVER_REPLY: int +E_FTP_WEIRD_USER_REPLY: int +E_FTP_WRITE_ERROR: int +E_FUNCTION_NOT_FOUND: int +E_GOT_NOTHING: int +E_HTTP2: int +E_HTTP_NOT_FOUND: int +E_HTTP_PORT_FAILED: int +E_HTTP_POST_ERROR: int +E_HTTP_RANGE_ERROR: int +E_HTTP_RETURNED_ERROR: int +E_INTERFACE_FAILED: int +E_LDAP_CANNOT_BIND: int +E_LDAP_INVALID_URL: int +E_LDAP_SEARCH_FAILED: int +E_LIBRARY_NOT_FOUND: int +E_LOGIN_DENIED: int +E_MALFORMAT_USER: int +E_MULTI_ADDED_ALREADY: int +E_MULTI_BAD_EASY_HANDLE: int +E_MULTI_BAD_HANDLE: int +E_MULTI_BAD_SOCKET: int +E_MULTI_CALL_MULTI_PERFORM: int +E_MULTI_CALL_MULTI_SOCKET: int +E_MULTI_INTERNAL_ERROR: int +E_MULTI_OK: int +E_MULTI_OUT_OF_MEMORY: int +E_MULTI_UNKNOWN_OPTION: int +E_NOT_BUILT_IN: int +E_NO_CONNECTION_AVAILABLE: int +E_OK: int +E_OPERATION_TIMEDOUT: int +E_OPERATION_TIMEOUTED: int +E_OUT_OF_MEMORY: int +E_PARTIAL_FILE: int +E_PEER_FAILED_VERIFICATION: int +E_QUOTE_ERROR: int +E_RANGE_ERROR: int +E_READ_ERROR: int +E_RECV_ERROR: int +E_REMOTE_ACCESS_DENIED: int +E_REMOTE_DISK_FULL: int +E_REMOTE_FILE_EXISTS: int +E_REMOTE_FILE_NOT_FOUND: int +E_RTSP_CSEQ_ERROR: int +E_RTSP_SESSION_ERROR: int +E_SEND_ERROR: int +E_SEND_FAIL_REWIND: int +E_SHARE_IN_USE: int +E_SSH: int +E_SSL_CACERT: int +E_SSL_CACERT_BADFILE: int +E_SSL_CERTPROBLEM: int +E_SSL_CIPHER: int +E_SSL_CONNECT_ERROR: int +E_SSL_CRL_BADFILE: int +E_SSL_ENGINE_INITFAILED: int +E_SSL_ENGINE_NOTFOUND: int +E_SSL_ENGINE_SETFAILED: int +E_SSL_INVALIDCERTSTATUS: int +E_SSL_ISSUER_ERROR: int +E_SSL_PEER_CERTIFICATE: int +E_SSL_PINNEDPUBKEYNOTMATCH: int +E_SSL_SHUTDOWN_FAILED: int +E_TELNET_OPTION_SYNTAX: int +E_TFTP_DISKFULL: int +E_TFTP_EXISTS: int +E_TFTP_ILLEGAL: int +E_TFTP_NOSUCHUSER: int +E_TFTP_NOTFOUND: int +E_TFTP_PERM: int +E_TFTP_UNKNOWNID: int +E_TOO_MANY_REDIRECTS: int +E_UNKNOWN_OPTION: int +E_UNKNOWN_TELNET_OPTION: int +E_UNSUPPORTED_PROTOCOL: int +E_UPLOAD_FAILED: int +E_URL_MALFORMAT: int +E_URL_MALFORMAT_USER: int +E_USE_SSL_FAILED: int +E_WRITE_ERROR: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi new file mode 100644 index 0000000..523c601 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi @@ -0,0 +1,61 @@ +import sys +from typing import Union, Tuple, Callable, FrozenSet + +from .connections import Connection as _Connection +from .constants import FIELD_TYPE as FIELD_TYPE +from .converters import escape_dict as escape_dict, escape_sequence as escape_sequence, escape_string as escape_string +from .err import ( + Warning as Warning, + Error as Error, + InterfaceError as InterfaceError, + DataError as DataError, + DatabaseError as DatabaseError, + OperationalError as OperationalError, + IntegrityError as IntegrityError, + InternalError as InternalError, + NotSupportedError as NotSupportedError, + ProgrammingError as ProgrammingError, + MySQLError as MySQLError, +) +from .times import ( + Date as Date, + Time as Time, + Timestamp as Timestamp, + DateFromTicks as DateFromTicks, + TimeFromTicks as TimeFromTicks, + TimestampFromTicks as TimestampFromTicks, +) + +threadsafety: int +apilevel: str +paramstyle: str + +class DBAPISet(FrozenSet[int]): + def __ne__(self, other) -> bool: ... + def __eq__(self, other) -> bool: ... + def __hash__(self) -> int: ... + +STRING: DBAPISet +BINARY: DBAPISet +NUMBER: DBAPISet +DATE: DBAPISet +TIME: DBAPISet +TIMESTAMP: DBAPISet +DATETIME: DBAPISet +ROWID: DBAPISet + +if sys.version_info >= (3, 0): + def Binary(x) -> bytes: ... +else: + def Binary(x) -> bytearray: ... +def Connect(*args, **kwargs) -> _Connection: ... +def get_client_info() -> str: ... + +connect: Callable[..., _Connection] +Connection: Callable[..., _Connection] +__version__: str +version_info: Tuple[int, int, int, str, int] +NULL: str + +def thread_safe() -> bool: ... +def install_as_MySQLdb() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi new file mode 100644 index 0000000..c47679a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi @@ -0,0 +1,16 @@ +from typing import Any + +MBLENGTH: Any + +class Charset: + is_default: Any + def __init__(self, id, name, collation, is_default): ... + +class Charsets: + def __init__(self): ... + def add(self, c): ... + def by_id(self, id): ... + def by_name(self, name): ... + +def charset_by_name(name): ... +def charset_by_id(id): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi new file mode 100644 index 0000000..4f1cd04 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi @@ -0,0 +1,145 @@ +from typing import Any, Optional, Type +from .charset import MBLENGTH as MBLENGTH, charset_by_name as charset_by_name, charset_by_id as charset_by_id +from .cursors import Cursor as Cursor +from .constants import FIELD_TYPE as FIELD_TYPE, FLAG as FLAG +from .constants import SERVER_STATUS as SERVER_STATUS +from .constants import CLIENT as CLIENT +from .constants import COMMAND as COMMAND +from .util import join_bytes as join_bytes, byte2int as byte2int, int2byte as int2byte +from .converters import escape_item as escape_item, encoders as encoders, decoders as decoders +from .err import raise_mysql_exception as raise_mysql_exception, Warning as Warning, Error as Error, InterfaceError as InterfaceError, DataError as DataError, DatabaseError as DatabaseError, OperationalError as OperationalError, IntegrityError as IntegrityError, InternalError as InternalError, NotSupportedError as NotSupportedError, ProgrammingError as ProgrammingError + +sha_new: Any +SSL_ENABLED: Any +DEFAULT_USER: Any +DEBUG: Any +NULL_COLUMN: Any +UNSIGNED_CHAR_COLUMN: Any +UNSIGNED_SHORT_COLUMN: Any +UNSIGNED_INT24_COLUMN: Any +UNSIGNED_INT64_COLUMN: Any +UNSIGNED_CHAR_LENGTH: Any +UNSIGNED_SHORT_LENGTH: Any +UNSIGNED_INT24_LENGTH: Any +UNSIGNED_INT64_LENGTH: Any +DEFAULT_CHARSET: Any + +def dump_packet(data): ... + +SCRAMBLE_LENGTH_323: Any + +class RandStruct_323: + max_value: Any + seed1: Any + seed2: Any + def __init__(self, seed1, seed2): ... + def my_rnd(self): ... + +def pack_int24(n): ... +def unpack_uint16(n): ... +def unpack_int24(n): ... +def unpack_int32(n): ... +def unpack_int64(n): ... +def defaulterrorhandler(connection, cursor, errorclass, errorvalue): ... + +class MysqlPacket: + connection: Any + def __init__(self, connection): ... + def packet_number(self): ... + def get_all_data(self): ... + def read(self, size): ... + def read_all(self): ... + def advance(self, length): ... + def rewind(self, position: int = ...): ... + def peek(self, size): ... + def get_bytes(self, position, length: int = ...): ... + def read_length_coded_binary(self): ... + def read_length_coded_string(self): ... + def is_ok_packet(self): ... + def is_eof_packet(self): ... + def is_resultset_packet(self): ... + def is_error_packet(self): ... + def check_error(self): ... + def dump(self): ... + +class FieldDescriptorPacket(MysqlPacket): + def __init__(self, *args): ... + def description(self): ... + def get_column_length(self): ... + +class Connection: + errorhandler: Any + ssl: Any + host: Any + port: Any + user: Any + password: Any + db: Any + unix_socket: Any + charset: Any + use_unicode: Any + client_flag: Any + cursorclass: Any + connect_timeout: Any + messages: Any + encoders: Any + decoders: Any + host_info: Any + def __init__(self, host: str = ..., user: Optional[Any] = ..., passwd: str = ..., db: Optional[Any] = ..., + port: int = ..., unix_socket: Optional[Any] = ..., charset: str = ..., sql_mode: Optional[Any] = ..., + read_default_file: Optional[Any] = ..., conv=..., use_unicode: Optional[Any] = ..., client_flag: int = ..., + cursorclass=..., init_command: Optional[Any] = ..., connect_timeout: Optional[Any] = ..., + ssl: Optional[Any] = ..., read_default_group: Optional[Any] = ..., compress: Optional[Any] = ..., + named_pipe: Optional[Any] = ...): ... + socket: Any + rfile: Any + wfile: Any + def close(self): ... + def autocommit(self, value): ... + def commit(self): ... + def begin(self) -> None: ... + def rollback(self): ... + def escape(self, obj): ... + def literal(self, obj): ... + def cursor(self, cursor: Optional[Type[Cursor]] = ...): ... + def __enter__(self): ... + def __exit__(self, exc, value, traceback): ... + def query(self, sql): ... + def next_result(self, unbuffered: bool = ...): ... + def affected_rows(self): ... + def kill(self, thread_id): ... + def ping(self, reconnect: bool = ...): ... + def set_charset(self, charset): ... + def read_packet(self, packet_type=...): ... + def insert_id(self): ... + def thread_id(self): ... + def character_set_name(self): ... + def get_host_info(self): ... + def get_proto_info(self): ... + def get_server_info(self): ... + def show_warnings(self): ... + Warning: Any + Error: Any + InterfaceError: Any + DatabaseError: Any + DataError: Any + OperationalError: Any + IntegrityError: Any + InternalError: Any + ProgrammingError: Any + NotSupportedError: Any + +class MySQLResult: + connection: Any + affected_rows: Any + insert_id: Any + server_status: Any + warning_count: Any + message: Any + field_count: Any + description: Any + rows: Any + has_next: Any + def __init__(self, connection): ... + first_packet: Any + def read(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi new file mode 100644 index 0000000..ac8fb55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi @@ -0,0 +1,18 @@ +LONG_PASSWORD: int +FOUND_ROWS: int +LONG_FLAG: int +CONNECT_WITH_DB: int +NO_SCHEMA: int +COMPRESS: int +ODBC: int +LOCAL_FILES: int +IGNORE_SPACE: int +PROTOCOL_41: int +INTERACTIVE: int +SSL: int +IGNORE_SIGPIPE: int +TRANSACTIONS: int +SECURE_CONNECTION: int +MULTI_STATEMENTS: int +MULTI_RESULTS: int +CAPABILITIES: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi new file mode 100644 index 0000000..1163e6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi @@ -0,0 +1,22 @@ +COM_SLEEP: int +COM_QUIT: int +COM_INIT_DB: int +COM_QUERY: int +COM_FIELD_LIST: int +COM_CREATE_DB: int +COM_DROP_DB: int +COM_REFRESH: int +COM_SHUTDOWN: int +COM_STATISTICS: int +COM_PROCESS_INFO: int +COM_CONNECT: int +COM_PROCESS_KILL: int +COM_DEBUG: int +COM_PING: int +COM_TIME: int +COM_DELAYED_INSERT: int +COM_CHANGE_USER: int +COM_BINLOG_DUMP: int +COM_TABLE_DUMP: int +COM_CONNECT_OUT: int +COM_REGISTER_SLAVE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi new file mode 100644 index 0000000..5f0a432 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi @@ -0,0 +1,471 @@ +ERROR_FIRST: int +HASHCHK: int +NISAMCHK: int +NO: int +YES: int +CANT_CREATE_FILE: int +CANT_CREATE_TABLE: int +CANT_CREATE_DB: int +DB_CREATE_EXISTS: int +DB_DROP_EXISTS: int +DB_DROP_DELETE: int +DB_DROP_RMDIR: int +CANT_DELETE_FILE: int +CANT_FIND_SYSTEM_REC: int +CANT_GET_STAT: int +CANT_GET_WD: int +CANT_LOCK: int +CANT_OPEN_FILE: int +FILE_NOT_FOUND: int +CANT_READ_DIR: int +CANT_SET_WD: int +CHECKREAD: int +DISK_FULL: int +DUP_KEY: int +ERROR_ON_CLOSE: int +ERROR_ON_READ: int +ERROR_ON_RENAME: int +ERROR_ON_WRITE: int +FILE_USED: int +FILSORT_ABORT: int +FORM_NOT_FOUND: int +GET_ERRNO: int +ILLEGAL_HA: int +KEY_NOT_FOUND: int +NOT_FORM_FILE: int +NOT_KEYFILE: int +OLD_KEYFILE: int +OPEN_AS_READONLY: int +OUTOFMEMORY: int +OUT_OF_SORTMEMORY: int +UNEXPECTED_EOF: int +CON_COUNT_ERROR: int +OUT_OF_RESOURCES: int +BAD_HOST_ERROR: int +HANDSHAKE_ERROR: int +DBACCESS_DENIED_ERROR: int +ACCESS_DENIED_ERROR: int +NO_DB_ERROR: int +UNKNOWN_COM_ERROR: int +BAD_NULL_ERROR: int +BAD_DB_ERROR: int +TABLE_EXISTS_ERROR: int +BAD_TABLE_ERROR: int +NON_UNIQ_ERROR: int +SERVER_SHUTDOWN: int +BAD_FIELD_ERROR: int +WRONG_FIELD_WITH_GROUP: int +WRONG_GROUP_FIELD: int +WRONG_SUM_SELECT: int +WRONG_VALUE_COUNT: int +TOO_LONG_IDENT: int +DUP_FIELDNAME: int +DUP_KEYNAME: int +DUP_ENTRY: int +WRONG_FIELD_SPEC: int +PARSE_ERROR: int +EMPTY_QUERY: int +NONUNIQ_TABLE: int +INVALID_DEFAULT: int +MULTIPLE_PRI_KEY: int +TOO_MANY_KEYS: int +TOO_MANY_KEY_PARTS: int +TOO_LONG_KEY: int +KEY_COLUMN_DOES_NOT_EXITS: int +BLOB_USED_AS_KEY: int +TOO_BIG_FIELDLENGTH: int +WRONG_AUTO_KEY: int +READY: int +NORMAL_SHUTDOWN: int +GOT_SIGNAL: int +SHUTDOWN_COMPLETE: int +FORCING_CLOSE: int +IPSOCK_ERROR: int +NO_SUCH_INDEX: int +WRONG_FIELD_TERMINATORS: int +BLOBS_AND_NO_TERMINATED: int +TEXTFILE_NOT_READABLE: int +FILE_EXISTS_ERROR: int +LOAD_INFO: int +ALTER_INFO: int +WRONG_SUB_KEY: int +CANT_REMOVE_ALL_FIELDS: int +CANT_DROP_FIELD_OR_KEY: int +INSERT_INFO: int +UPDATE_TABLE_USED: int +NO_SUCH_THREAD: int +KILL_DENIED_ERROR: int +NO_TABLES_USED: int +TOO_BIG_SET: int +NO_UNIQUE_LOGFILE: int +TABLE_NOT_LOCKED_FOR_WRITE: int +TABLE_NOT_LOCKED: int +BLOB_CANT_HAVE_DEFAULT: int +WRONG_DB_NAME: int +WRONG_TABLE_NAME: int +TOO_BIG_SELECT: int +UNKNOWN_ERROR: int +UNKNOWN_PROCEDURE: int +WRONG_PARAMCOUNT_TO_PROCEDURE: int +WRONG_PARAMETERS_TO_PROCEDURE: int +UNKNOWN_TABLE: int +FIELD_SPECIFIED_TWICE: int +INVALID_GROUP_FUNC_USE: int +UNSUPPORTED_EXTENSION: int +TABLE_MUST_HAVE_COLUMNS: int +RECORD_FILE_FULL: int +UNKNOWN_CHARACTER_SET: int +TOO_MANY_TABLES: int +TOO_MANY_FIELDS: int +TOO_BIG_ROWSIZE: int +STACK_OVERRUN: int +WRONG_OUTER_JOIN: int +NULL_COLUMN_IN_INDEX: int +CANT_FIND_UDF: int +CANT_INITIALIZE_UDF: int +UDF_NO_PATHS: int +UDF_EXISTS: int +CANT_OPEN_LIBRARY: int +CANT_FIND_DL_ENTRY: int +FUNCTION_NOT_DEFINED: int +HOST_IS_BLOCKED: int +HOST_NOT_PRIVILEGED: int +PASSWORD_ANONYMOUS_USER: int +PASSWORD_NOT_ALLOWED: int +PASSWORD_NO_MATCH: int +UPDATE_INFO: int +CANT_CREATE_THREAD: int +WRONG_VALUE_COUNT_ON_ROW: int +CANT_REOPEN_TABLE: int +INVALID_USE_OF_NULL: int +REGEXP_ERROR: int +MIX_OF_GROUP_FUNC_AND_FIELDS: int +NONEXISTING_GRANT: int +TABLEACCESS_DENIED_ERROR: int +COLUMNACCESS_DENIED_ERROR: int +ILLEGAL_GRANT_FOR_TABLE: int +GRANT_WRONG_HOST_OR_USER: int +NO_SUCH_TABLE: int +NONEXISTING_TABLE_GRANT: int +NOT_ALLOWED_COMMAND: int +SYNTAX_ERROR: int +DELAYED_CANT_CHANGE_LOCK: int +TOO_MANY_DELAYED_THREADS: int +ABORTING_CONNECTION: int +NET_PACKET_TOO_LARGE: int +NET_READ_ERROR_FROM_PIPE: int +NET_FCNTL_ERROR: int +NET_PACKETS_OUT_OF_ORDER: int +NET_UNCOMPRESS_ERROR: int +NET_READ_ERROR: int +NET_READ_INTERRUPTED: int +NET_ERROR_ON_WRITE: int +NET_WRITE_INTERRUPTED: int +TOO_LONG_STRING: int +TABLE_CANT_HANDLE_BLOB: int +TABLE_CANT_HANDLE_AUTO_INCREMENT: int +DELAYED_INSERT_TABLE_LOCKED: int +WRONG_COLUMN_NAME: int +WRONG_KEY_COLUMN: int +WRONG_MRG_TABLE: int +DUP_UNIQUE: int +BLOB_KEY_WITHOUT_LENGTH: int +PRIMARY_CANT_HAVE_NULL: int +TOO_MANY_ROWS: int +REQUIRES_PRIMARY_KEY: int +NO_RAID_COMPILED: int +UPDATE_WITHOUT_KEY_IN_SAFE_MODE: int +KEY_DOES_NOT_EXITS: int +CHECK_NO_SUCH_TABLE: int +CHECK_NOT_IMPLEMENTED: int +CANT_DO_THIS_DURING_AN_TRANSACTION: int +ERROR_DURING_COMMIT: int +ERROR_DURING_ROLLBACK: int +ERROR_DURING_FLUSH_LOGS: int +ERROR_DURING_CHECKPOINT: int +NEW_ABORTING_CONNECTION: int +DUMP_NOT_IMPLEMENTED: int +FLUSH_MASTER_BINLOG_CLOSED: int +INDEX_REBUILD: int +MASTER: int +MASTER_NET_READ: int +MASTER_NET_WRITE: int +FT_MATCHING_KEY_NOT_FOUND: int +LOCK_OR_ACTIVE_TRANSACTION: int +UNKNOWN_SYSTEM_VARIABLE: int +CRASHED_ON_USAGE: int +CRASHED_ON_REPAIR: int +WARNING_NOT_COMPLETE_ROLLBACK: int +TRANS_CACHE_FULL: int +SLAVE_MUST_STOP: int +SLAVE_NOT_RUNNING: int +BAD_SLAVE: int +MASTER_INFO: int +SLAVE_THREAD: int +TOO_MANY_USER_CONNECTIONS: int +SET_CONSTANTS_ONLY: int +LOCK_WAIT_TIMEOUT: int +LOCK_TABLE_FULL: int +READ_ONLY_TRANSACTION: int +DROP_DB_WITH_READ_LOCK: int +CREATE_DB_WITH_READ_LOCK: int +WRONG_ARGUMENTS: int +NO_PERMISSION_TO_CREATE_USER: int +UNION_TABLES_IN_DIFFERENT_DIR: int +LOCK_DEADLOCK: int +TABLE_CANT_HANDLE_FT: int +CANNOT_ADD_FOREIGN: int +NO_REFERENCED_ROW: int +ROW_IS_REFERENCED: int +CONNECT_TO_MASTER: int +QUERY_ON_MASTER: int +ERROR_WHEN_EXECUTING_COMMAND: int +WRONG_USAGE: int +WRONG_NUMBER_OF_COLUMNS_IN_SELECT: int +CANT_UPDATE_WITH_READLOCK: int +MIXING_NOT_ALLOWED: int +DUP_ARGUMENT: int +USER_LIMIT_REACHED: int +SPECIFIC_ACCESS_DENIED_ERROR: int +LOCAL_VARIABLE: int +GLOBAL_VARIABLE: int +NO_DEFAULT: int +WRONG_VALUE_FOR_VAR: int +WRONG_TYPE_FOR_VAR: int +VAR_CANT_BE_READ: int +CANT_USE_OPTION_HERE: int +NOT_SUPPORTED_YET: int +MASTER_FATAL_ERROR_READING_BINLOG: int +SLAVE_IGNORED_TABLE: int +INCORRECT_GLOBAL_LOCAL_VAR: int +WRONG_FK_DEF: int +KEY_REF_DO_NOT_MATCH_TABLE_REF: int +OPERAND_COLUMNS: int +SUBQUERY_NO_1_ROW: int +UNKNOWN_STMT_HANDLER: int +CORRUPT_HELP_DB: int +CYCLIC_REFERENCE: int +AUTO_CONVERT: int +ILLEGAL_REFERENCE: int +DERIVED_MUST_HAVE_ALIAS: int +SELECT_REDUCED: int +TABLENAME_NOT_ALLOWED_HERE: int +NOT_SUPPORTED_AUTH_MODE: int +SPATIAL_CANT_HAVE_NULL: int +COLLATION_CHARSET_MISMATCH: int +SLAVE_WAS_RUNNING: int +SLAVE_WAS_NOT_RUNNING: int +TOO_BIG_FOR_UNCOMPRESS: int +ZLIB_Z_MEM_ERROR: int +ZLIB_Z_BUF_ERROR: int +ZLIB_Z_DATA_ERROR: int +CUT_VALUE_GROUP_CONCAT: int +WARN_TOO_FEW_RECORDS: int +WARN_TOO_MANY_RECORDS: int +WARN_NULL_TO_NOTNULL: int +WARN_DATA_OUT_OF_RANGE: int +WARN_DATA_TRUNCATED: int +WARN_USING_OTHER_HANDLER: int +CANT_AGGREGATE_2COLLATIONS: int +DROP_USER: int +REVOKE_GRANTS: int +CANT_AGGREGATE_3COLLATIONS: int +CANT_AGGREGATE_NCOLLATIONS: int +VARIABLE_IS_NOT_STRUCT: int +UNKNOWN_COLLATION: int +SLAVE_IGNORED_SSL_PARAMS: int +SERVER_IS_IN_SECURE_AUTH_MODE: int +WARN_FIELD_RESOLVED: int +BAD_SLAVE_UNTIL_COND: int +MISSING_SKIP_SLAVE: int +UNTIL_COND_IGNORED: int +WRONG_NAME_FOR_INDEX: int +WRONG_NAME_FOR_CATALOG: int +WARN_QC_RESIZE: int +BAD_FT_COLUMN: int +UNKNOWN_KEY_CACHE: int +WARN_HOSTNAME_WONT_WORK: int +UNKNOWN_STORAGE_ENGINE: int +WARN_DEPRECATED_SYNTAX: int +NON_UPDATABLE_TABLE: int +FEATURE_DISABLED: int +OPTION_PREVENTS_STATEMENT: int +DUPLICATED_VALUE_IN_TYPE: int +TRUNCATED_WRONG_VALUE: int +TOO_MUCH_AUTO_TIMESTAMP_COLS: int +INVALID_ON_UPDATE: int +UNSUPPORTED_PS: int +GET_ERRMSG: int +GET_TEMPORARY_ERRMSG: int +UNKNOWN_TIME_ZONE: int +WARN_INVALID_TIMESTAMP: int +INVALID_CHARACTER_STRING: int +WARN_ALLOWED_PACKET_OVERFLOWED: int +CONFLICTING_DECLARATIONS: int +SP_NO_RECURSIVE_CREATE: int +SP_ALREADY_EXISTS: int +SP_DOES_NOT_EXIST: int +SP_DROP_FAILED: int +SP_STORE_FAILED: int +SP_LILABEL_MISMATCH: int +SP_LABEL_REDEFINE: int +SP_LABEL_MISMATCH: int +SP_UNINIT_VAR: int +SP_BADSELECT: int +SP_BADRETURN: int +SP_BADSTATEMENT: int +UPDATE_LOG_DEPRECATED_IGNORED: int +UPDATE_LOG_DEPRECATED_TRANSLATED: int +QUERY_INTERRUPTED: int +SP_WRONG_NO_OF_ARGS: int +SP_COND_MISMATCH: int +SP_NORETURN: int +SP_NORETURNEND: int +SP_BAD_CURSOR_QUERY: int +SP_BAD_CURSOR_SELECT: int +SP_CURSOR_MISMATCH: int +SP_CURSOR_ALREADY_OPEN: int +SP_CURSOR_NOT_OPEN: int +SP_UNDECLARED_VAR: int +SP_WRONG_NO_OF_FETCH_ARGS: int +SP_FETCH_NO_DATA: int +SP_DUP_PARAM: int +SP_DUP_VAR: int +SP_DUP_COND: int +SP_DUP_CURS: int +SP_CANT_ALTER: int +SP_SUBSELECT_NYI: int +STMT_NOT_ALLOWED_IN_SF_OR_TRG: int +SP_VARCOND_AFTER_CURSHNDLR: int +SP_CURSOR_AFTER_HANDLER: int +SP_CASE_NOT_FOUND: int +FPARSER_TOO_BIG_FILE: int +FPARSER_BAD_HEADER: int +FPARSER_EOF_IN_COMMENT: int +FPARSER_ERROR_IN_PARAMETER: int +FPARSER_EOF_IN_UNKNOWN_PARAMETER: int +VIEW_NO_EXPLAIN: int +FRM_UNKNOWN_TYPE: int +WRONG_OBJECT: int +NONUPDATEABLE_COLUMN: int +VIEW_SELECT_DERIVED: int +VIEW_SELECT_CLAUSE: int +VIEW_SELECT_VARIABLE: int +VIEW_SELECT_TMPTABLE: int +VIEW_WRONG_LIST: int +WARN_VIEW_MERGE: int +WARN_VIEW_WITHOUT_KEY: int +VIEW_INVALID: int +SP_NO_DROP_SP: int +SP_GOTO_IN_HNDLR: int +TRG_ALREADY_EXISTS: int +TRG_DOES_NOT_EXIST: int +TRG_ON_VIEW_OR_TEMP_TABLE: int +TRG_CANT_CHANGE_ROW: int +TRG_NO_SUCH_ROW_IN_TRG: int +NO_DEFAULT_FOR_FIELD: int +DIVISION_BY_ZERO: int +TRUNCATED_WRONG_VALUE_FOR_FIELD: int +ILLEGAL_VALUE_FOR_TYPE: int +VIEW_NONUPD_CHECK: int +VIEW_CHECK_FAILED: int +PROCACCESS_DENIED_ERROR: int +RELAY_LOG_FAIL: int +PASSWD_LENGTH: int +UNKNOWN_TARGET_BINLOG: int +IO_ERR_LOG_INDEX_READ: int +BINLOG_PURGE_PROHIBITED: int +FSEEK_FAIL: int +BINLOG_PURGE_FATAL_ERR: int +LOG_IN_USE: int +LOG_PURGE_UNKNOWN_ERR: int +RELAY_LOG_INIT: int +NO_BINARY_LOGGING: int +RESERVED_SYNTAX: int +WSAS_FAILED: int +DIFF_GROUPS_PROC: int +NO_GROUP_FOR_PROC: int +ORDER_WITH_PROC: int +LOGGING_PROHIBIT_CHANGING_OF: int +NO_FILE_MAPPING: int +WRONG_MAGIC: int +PS_MANY_PARAM: int +KEY_PART_0: int +VIEW_CHECKSUM: int +VIEW_MULTIUPDATE: int +VIEW_NO_INSERT_FIELD_LIST: int +VIEW_DELETE_MERGE_VIEW: int +CANNOT_USER: int +XAER_NOTA: int +XAER_INVAL: int +XAER_RMFAIL: int +XAER_OUTSIDE: int +XAER_RMERR: int +XA_RBROLLBACK: int +NONEXISTING_PROC_GRANT: int +PROC_AUTO_GRANT_FAIL: int +PROC_AUTO_REVOKE_FAIL: int +DATA_TOO_LONG: int +SP_BAD_SQLSTATE: int +STARTUP: int +LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR: int +CANT_CREATE_USER_WITH_GRANT: int +WRONG_VALUE_FOR_TYPE: int +TABLE_DEF_CHANGED: int +SP_DUP_HANDLER: int +SP_NOT_VAR_ARG: int +SP_NO_RETSET: int +CANT_CREATE_GEOMETRY_OBJECT: int +FAILED_ROUTINE_BREAK_BINLOG: int +BINLOG_UNSAFE_ROUTINE: int +BINLOG_CREATE_ROUTINE_NEED_SUPER: int +EXEC_STMT_WITH_OPEN_CURSOR: int +STMT_HAS_NO_OPEN_CURSOR: int +COMMIT_NOT_ALLOWED_IN_SF_OR_TRG: int +NO_DEFAULT_FOR_VIEW_FIELD: int +SP_NO_RECURSION: int +TOO_BIG_SCALE: int +TOO_BIG_PRECISION: int +M_BIGGER_THAN_D: int +WRONG_LOCK_OF_SYSTEM_TABLE: int +CONNECT_TO_FOREIGN_DATA_SOURCE: int +QUERY_ON_FOREIGN_DATA_SOURCE: int +FOREIGN_DATA_SOURCE_DOESNT_EXIST: int +FOREIGN_DATA_STRING_INVALID_CANT_CREATE: int +FOREIGN_DATA_STRING_INVALID: int +CANT_CREATE_FEDERATED_TABLE: int +TRG_IN_WRONG_SCHEMA: int +STACK_OVERRUN_NEED_MORE: int +TOO_LONG_BODY: int +WARN_CANT_DROP_DEFAULT_KEYCACHE: int +TOO_BIG_DISPLAYWIDTH: int +XAER_DUPID: int +DATETIME_FUNCTION_OVERFLOW: int +CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG: int +VIEW_PREVENT_UPDATE: int +PS_NO_RECURSION: int +SP_CANT_SET_AUTOCOMMIT: int +MALFORMED_DEFINER: int +VIEW_FRM_NO_USER: int +VIEW_OTHER_USER: int +NO_SUCH_USER: int +FORBID_SCHEMA_CHANGE: int +ROW_IS_REFERENCED_2: int +NO_REFERENCED_ROW_2: int +SP_BAD_VAR_SHADOW: int +TRG_NO_DEFINER: int +OLD_FILE_FORMAT: int +SP_RECURSION_LIMIT: int +SP_PROC_TABLE_CORRUPT: int +SP_WRONG_NAME: int +TABLE_NEEDS_UPGRADE: int +SP_NO_AGGREGATE: int +MAX_PREPARED_STMT_COUNT_REACHED: int +VIEW_RECURSIVE: int +NON_GROUPING_FIELD_USED: int +TABLE_CANT_HANDLE_SPKEYS: int +NO_TRIGGERS_ON_SYSTEM_SCHEMA: int +USERNAME: int +HOSTNAME: int +WRONG_STRING_LENGTH: int +ERROR_LAST: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi new file mode 100644 index 0000000..f1938b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi @@ -0,0 +1,29 @@ +DECIMAL: int +TINY: int +SHORT: int +LONG: int +FLOAT: int +DOUBLE: int +NULL: int +TIMESTAMP: int +LONGLONG: int +INT24: int +DATE: int +TIME: int +DATETIME: int +YEAR: int +NEWDATE: int +VARCHAR: int +BIT: int +NEWDECIMAL: int +ENUM: int +SET: int +TINY_BLOB: int +MEDIUM_BLOB: int +LONG_BLOB: int +BLOB: int +VAR_STRING: int +STRING: int +GEOMETRY: int +CHAR: int +INTERVAL: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi new file mode 100644 index 0000000..04b99fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi @@ -0,0 +1,17 @@ +from typing import Any + +NOT_NULL: Any +PRI_KEY: Any +UNIQUE_KEY: Any +MULTIPLE_KEY: Any +BLOB: Any +UNSIGNED: Any +ZEROFILL: Any +BINARY: Any +ENUM: Any +AUTO_INCREMENT: Any +TIMESTAMP: Any +SET: Any +PART_KEY: Any +GROUP: Any +UNIQUE: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi new file mode 100644 index 0000000..437b893 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi @@ -0,0 +1,10 @@ +SERVER_STATUS_IN_TRANS: int +SERVER_STATUS_AUTOCOMMIT: int +SERVER_MORE_RESULTS_EXISTS: int +SERVER_QUERY_NO_GOOD_INDEX_USED: int +SERVER_QUERY_NO_INDEX_USED: int +SERVER_STATUS_CURSOR_EXISTS: int +SERVER_STATUS_LAST_ROW_SENT: int +SERVER_STATUS_DB_DROPPED: int +SERVER_STATUS_NO_BACKSLASH_ESCAPES: int +SERVER_STATUS_METADATA_CHANGED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi new file mode 100644 index 0000000..fdd7602 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi @@ -0,0 +1,46 @@ +from typing import Any +from .constants import FIELD_TYPE as FIELD_TYPE, FLAG as FLAG +from .charset import charset_by_id as charset_by_id + +PYTHON3: Any +ESCAPE_REGEX: Any +ESCAPE_MAP: Any + +def escape_item(val, charset): ... +def escape_dict(val, charset): ... +def escape_sequence(val, charset): ... +def escape_set(val, charset): ... +def escape_bool(value): ... +def escape_object(value): ... + +escape_int: Any + +escape_long: Any + +def escape_float(value): ... +def escape_string(value): ... +def escape_unicode(value): ... +def escape_None(value): ... +def escape_timedelta(obj): ... +def escape_time(obj): ... +def escape_datetime(obj): ... +def escape_date(obj): ... +def escape_struct_time(obj): ... +def convert_datetime(connection, field, obj): ... +def convert_timedelta(connection, field, obj): ... +def convert_time(connection, field, obj): ... +def convert_date(connection, field, obj): ... +def convert_mysql_timestamp(connection, field, timestamp): ... +def convert_set(s): ... +def convert_bit(connection, field, b): ... +def convert_characters(connection, field, data): ... +def convert_int(connection, field, data): ... +def convert_long(connection, field, data): ... +def convert_float(connection, field, data): ... + +encoders: Any +decoders: Any +conversions: Any + +def convert_decimal(connection, field, data): ... +def escape_decimal(obj): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi new file mode 100644 index 0000000..e080085 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi @@ -0,0 +1,46 @@ +from typing import Union, Tuple, Any, Dict, Optional, Text, Iterator, List +from .connections import Connection + +Gen = Union[Tuple[Any, ...], Dict[str, Any]] + +class Cursor: + connection: Connection + description: Tuple[Text, ...] + rownumber: int + rowcount: int + arraysize: int + messages: Any + errorhandler: Any + lastrowid: int + def __init__(self, connection: Connection) -> None: ... + def __del__(self) -> None: ... + def close(self) -> None: ... + def setinputsizes(self, *args): ... + def setoutputsizes(self, *args): ... + def nextset(self): ... + def execute(self, query: str, args: Optional[Any] = ...) -> int: ... + def executemany(self, query: str, args) -> int: ... + def callproc(self, procname, args=...): ... + def fetchone(self) -> Optional[Gen]: ... + def fetchmany(self, size: Optional[int] = ...) -> Union[Optional[Gen], List[Gen]]: ... + def fetchall(self) -> Optional[Tuple[Gen, ...]]: ... + def scroll(self, value: int, mode: str = ...): ... + def __iter__(self): ... + +class DictCursor(Cursor): + def fetchone(self) -> Optional[Dict[str, Any]]: ... + def fetchmany(self, size: Optional[int] = ...) -> Optional[Tuple[Dict[str, Any], ...]]: ... + def fetchall(self) -> Optional[Tuple[Dict[str, Any], ...]]: ... + +class DictCursorMixin: + dict_type: Any + +class SSCursor(Cursor): + # fetchall return type is incompatible with the supertype. + def fetchall(self) -> List[Gen]: ... # type: ignore + def fetchall_unbuffered(self) -> Iterator[Tuple[Gen, ...]]: ... + def __iter__(self) -> Iterator[Tuple[Gen, ...]]: ... + def fetchmany(self, size: Optional[int] = ...) -> List[Gen]: ... + def scroll(self, value: int, mode: str = ...) -> None: ... + +class SSDictCursor(DictCursorMixin, SSCursor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi new file mode 100644 index 0000000..29d4f55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi @@ -0,0 +1,18 @@ +from typing import Dict +from .constants import ER as ER + +class MySQLError(Exception): ... +class Warning(MySQLError): ... +class Error(MySQLError): ... +class InterfaceError(Error): ... +class DatabaseError(Error): ... +class DataError(DatabaseError): ... +class OperationalError(DatabaseError): ... +class IntegrityError(DatabaseError): ... +class InternalError(DatabaseError): ... +class ProgrammingError(DatabaseError): ... +class NotSupportedError(DatabaseError): ... + +error_map: Dict + +def raise_mysql_exception(data) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi new file mode 100644 index 0000000..c798e65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi @@ -0,0 +1,10 @@ +from typing import Any + +Date: Any +Time: Any +TimeDelta: Any +Timestamp: Any + +def DateFromTicks(ticks): ... +def TimeFromTicks(ticks): ... +def TimestampFromTicks(ticks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi new file mode 100644 index 0000000..3d9a65b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi @@ -0,0 +1,3 @@ +def byte2int(b): ... +def int2byte(i): ... +def join_bytes(bs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi new file mode 100644 index 0000000..83e691d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi @@ -0,0 +1 @@ +__license__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi new file mode 100644 index 0000000..3c82474 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi @@ -0,0 +1,96 @@ +from typing import Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Text, Type, TypeVar, Union, Set + +from datetime import datetime + +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_MT = TypeVar('_MT', bound='MapAttribute') + +class Attribute(Generic[_T]): + attr_name: Optional[Text] + attr_type: Text + null: bool + default: Any + is_hash_key: bool + is_range_key: bool + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[_T, Callable[..., _T]]] = ..., attr_name: Optional[Text] = ...) -> None: ... + def __set__(self, instance: Any, value: Optional[_T]) -> None: ... + def serialize(self, value: Any) -> Any: ... + def deserialize(self, value: Any) -> Any: ... + def get_value(self, value: Any) -> Any: ... + def between(self, lower: Any, upper: Any) -> Any: ... + def is_in(self, *values: Any) -> Any: ... + def exists(self) -> Any: ... + def does_not_exist(self) -> Any: ... + def is_type(self) -> Any: ... + def startswith(self, prefix: str) -> Any: ... + def contains(self, item: Any) -> Any: ... + def append(self, other: Any) -> Any: ... + def prepend(self, other: Any) -> Any: ... + def set(self, value: Any) -> Any: ... + def remove(self) -> Any: ... + def add(self, *values: Any) -> Any: ... + def delete(self, *values: Any) -> Any: ... + +class SetMixin(object): + def serialize(self, value): ... + def deserialize(self, value): ... + +class BinaryAttribute(Attribute[bytes]): + def __get__(self, instance: Any, owner: Any) -> bytes: ... + +class BinarySetAttribute(SetMixin, Attribute[Set[bytes]]): + def __get__(self, instance: Any, owner: Any) -> Set[bytes]: ... + +class UnicodeSetAttribute(SetMixin, Attribute[Set[Text]]): + def element_serialize(self, value: Any) -> Any: ... + def element_deserialize(self, value: Any) -> Any: ... + def __get__(self, instance: Any, owner: Any) -> Set[Text]: ... + +class UnicodeAttribute(Attribute[Text]): + def __get__(self, instance: Any, owner: Any) -> Text: ... + +class JSONAttribute(Attribute[Any]): + def __get__(self, instance: Any, owner: Any) -> Any: ... + +class LegacyBooleanAttribute(Attribute[bool]): + def __get__(self, instance: Any, owner: Any) -> bool: ... + +class BooleanAttribute(Attribute[bool]): + def __get__(self, instance: Any, owner: Any) -> bool: ... + +class NumberSetAttribute(SetMixin, Attribute[Set[float]]): + def __get__(self, instance: Any, owner: Any) -> Set[float]: ... + +class NumberAttribute(Attribute[float]): + def __get__(self, instance: Any, owner: Any) -> float: ... + +class UTCDateTimeAttribute(Attribute[datetime]): + def __get__(self, instance: Any, owner: Any) -> datetime: ... + +class NullAttribute(Attribute[None]): + def __get__(self, instance: Any, owner: Any) -> None: ... + +class MapAttributeMeta(type): + def __init__(self, name, bases, attrs) -> None: ... + +class MapAttribute(Generic[_KT, _VT], Attribute[Mapping[_KT, _VT]], metaclass=MapAttributeMeta): + attribute_values: Any + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[Any, Callable[..., Any]]] = ..., attr_name: Optional[Text] = ..., **attrs) -> None: ... + def __iter__(self) -> Iterable[_VT]: ... + def __getattr__(self, attr: str) -> _VT: ... + def __getitem__(self, item: _KT) -> _VT: ... + def __set__(self, instance: Any, value: Union[None, MapAttribute[_KT, _VT], Mapping[_KT, _VT]]) -> None: ... + def __get__(self: _MT, instance: Any, owner: Any) -> _MT: ... + def is_type_safe(self, key: Any, value: Any) -> bool: ... + def validate(self) -> bool: ... + +class ListAttribute(Generic[_T], Attribute[List[_T]]): + element_type: Any + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[Any, Callable[..., Any]]] = ..., attr_name: Optional[Text] = ..., of: Optional[Type[_T]] = ...) -> None: ... + def __get__(self, instance: Any, owner: Any) -> List[_T]: ... + +DESERIALIZE_CLASS_MAP: Dict[Text, Attribute] +SERIALIZE_CLASS_MAP: Dict[Type, Attribute] +SERIALIZE_KEY_MAP: Dict[Type, Text] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi new file mode 100644 index 0000000..1860736 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi @@ -0,0 +1,2 @@ +from pynamodb.connection.base import Connection as Connection +from pynamodb.connection.table import TableConnection as TableConnection diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi new file mode 100644 index 0000000..9c75150 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi @@ -0,0 +1,78 @@ +from typing import Any, Dict, Optional, Text + +BOTOCORE_EXCEPTIONS: Any +log: Any + +class MetaTable: + data: Dict + def __init__(self, data: Dict) -> None: ... + @property + def range_keyname(self) -> Optional[Text]: ... + @property + def hash_keyname(self) -> Text: ... + def get_index_hash_keyname(self, index_name: Text) -> Optional[Text]: ... + def get_item_attribute_map(self, attributes, item_key: Any = ..., pythonic_key: bool = ...): ... + def get_attribute_type(self, attribute_name, value: Optional[Any] = ...): ... + def get_identifier_map(self, hash_key, range_key: Optional[Any] = ..., key: Any = ...): ... + def get_exclusive_start_key_map(self, exclusive_start_key): ... + +class Connection: + host: Any + region: Any + session_cls: Any + def __init__(self, region: Optional[Any] = ..., host: Optional[Any] = ..., session_cls: Optional[Any] = ..., + request_timeout_seconds: Optional[Any] = ..., max_retry_attempts: Optional[Any] = ..., + base_backoff_ms: Optional[Any] = ...) -> None: ... + def dispatch(self, operation_name, operation_kwargs): ... + @property + def session(self): ... + @property + def requests_session(self): ... + @property + def client(self): ... + def get_meta_table(self, table_name: Text, refresh: bool = ...): ... + def create_table(self, table_name: Text, attribute_definitions: Optional[Any] = ..., key_schema: Optional[Any] = ..., + read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., + global_secondary_indexes: Optional[Any] = ..., local_secondary_indexes: Optional[Any] = ..., + stream_specification: Optional[Any] = ...): ... + def delete_table(self, table_name: Text): ... + def update_table(self, table_name: Text, read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., + global_secondary_index_updates: Optional[Any] = ...): ... + def list_tables(self, exclusive_start_table_name: Optional[Any] = ..., limit: Optional[Any] = ...): ... + def describe_table(self, table_name: Text): ... + def get_conditional_operator(self, operator): ... + def get_item_attribute_map(self, table_name: Text, attributes, item_key: Any = ..., pythonic_key: bool = ...): ... + def get_expected_map(self, table_name: Text, expected): ... + def parse_attribute(self, attribute, return_type: bool = ...): ... + def get_attribute_type(self, table_name: Text, attribute_name, value: Optional[Any] = ...): ... + def get_identifier_map(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., key: Any = ...): ... + def get_query_filter_map(self, table_name: Text, query_filters): ... + def get_consumed_capacity_map(self, return_consumed_capacity): ... + def get_return_values_map(self, return_values): ... + def get_item_collection_map(self, return_item_collection_metrics): ... + def get_exclusive_start_key_map(self, table_name: Text, exclusive_start_key): ... + def delete_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., expected: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def update_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., attribute_updates: Optional[Any] = ..., + expected: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ..., + return_values: Optional[Any] = ...): ... + def put_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., attributes: Optional[Any] = ..., + expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_write_item(self, table_name: Text, put_items: Optional[Any] = ..., delete_items: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_get_item(self, table_name: Text, keys, consistent_read: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., attributes_to_get: Optional[Any] = ...): ... + def get_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., consistent_read: bool = ..., + attributes_to_get: Optional[Any] = ...): ... + def scan(self, table_name: Text, attributes_to_get: Optional[Any] = ..., limit: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., scan_filter: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., exclusive_start_key: Optional[Any] = ..., + segment: Optional[Any] = ..., total_segments: Optional[Any] = ...): ... + def query(self, table_name: Text, hash_key, attributes_to_get: Optional[Any] = ..., consistent_read: bool = ..., + exclusive_start_key: Optional[Any] = ..., index_name: Optional[Any] = ..., key_conditions: Optional[Any] = ..., + query_filters: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., limit: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., scan_index_forward: Optional[Any] = ..., + select: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi new file mode 100644 index 0000000..0f820af --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi @@ -0,0 +1,18 @@ +from typing import Any, Optional + +class TableConnection: + table_name: Any + connection: Any + def __init__(self, table_name, region: Optional[Any] = ..., host: Optional[Any] = ..., session_cls: Optional[Any] = ..., request_timeout_seconds: Optional[Any] = ..., max_retry_attempts: Optional[Any] = ..., base_backoff_ms: Optional[Any] = ...) -> None: ... + def delete_item(self, hash_key, range_key: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def update_item(self, hash_key, range_key: Optional[Any] = ..., attribute_updates: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ..., return_values: Optional[Any] = ...): ... + def put_item(self, hash_key, range_key: Optional[Any] = ..., attributes: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_write_item(self, put_items: Optional[Any] = ..., delete_items: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_get_item(self, keys, consistent_read: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., attributes_to_get: Optional[Any] = ...): ... + def get_item(self, hash_key, range_key: Optional[Any] = ..., consistent_read: bool = ..., attributes_to_get: Optional[Any] = ...): ... + def scan(self, attributes_to_get: Optional[Any] = ..., limit: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., scan_filter: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., segment: Optional[Any] = ..., total_segments: Optional[Any] = ..., exclusive_start_key: Optional[Any] = ...): ... + def query(self, hash_key, attributes_to_get: Optional[Any] = ..., consistent_read: bool = ..., exclusive_start_key: Optional[Any] = ..., index_name: Optional[Any] = ..., key_conditions: Optional[Any] = ..., query_filters: Optional[Any] = ..., limit: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., scan_index_forward: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., select: Optional[Any] = ...): ... + def describe_table(self): ... + def delete_table(self): ... + def update_table(self, read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., global_secondary_index_updates: Optional[Any] = ...): ... + def create_table(self, attribute_definitions: Optional[Any] = ..., key_schema: Optional[Any] = ..., read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., global_secondary_indexes: Optional[Any] = ..., local_secondary_indexes: Optional[Any] = ..., stream_specification: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi new file mode 100644 index 0000000..20635c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi @@ -0,0 +1,3 @@ +from typing import Text + +def pythonic(var_name: Text) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi new file mode 100644 index 0000000..7c26cd6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi @@ -0,0 +1,166 @@ +from typing import Any + +BATCH_WRITE_ITEM: str +DESCRIBE_TABLE: str +BATCH_GET_ITEM: str +CREATE_TABLE: str +UPDATE_TABLE: str +DELETE_TABLE: str +LIST_TABLES: str +UPDATE_ITEM: str +DELETE_ITEM: str +GET_ITEM: str +PUT_ITEM: str +QUERY: str +SCAN: str +GLOBAL_SECONDARY_INDEX_UPDATES: str +RETURN_ITEM_COLL_METRICS: str +EXCLUSIVE_START_TABLE_NAME: str +RETURN_CONSUMED_CAPACITY: str +COMPARISON_OPERATOR: str +SCAN_INDEX_FORWARD: str +ATTR_DEFINITIONS: str +ATTR_VALUE_LIST: str +TABLE_DESCRIPTION: str +UNPROCESSED_KEYS: str +UNPROCESSED_ITEMS: str +CONSISTENT_READ: str +DELETE_REQUEST: str +RETURN_VALUES: str +REQUEST_ITEMS: str +ATTRS_TO_GET: str +ATTR_UPDATES: str +TABLE_STATUS: str +SCAN_FILTER: str +TABLE_NAME: str +KEY_SCHEMA: str +ATTR_NAME: str +ATTR_TYPE: str +ITEM_COUNT: str +CAMEL_COUNT: str +PUT_REQUEST: str +INDEX_NAME: str +ATTRIBUTES: str +TABLE_KEY: str +RESPONSES: str +RANGE_KEY: str +KEY_TYPE: str +ACTION: str +UPDATE: str +EXISTS: str +SELECT: str +ACTIVE: str +LIMIT: str +ITEMS: str +ITEM: str +KEYS: str +UTC: str +KEY: str +DEFAULT_ENCODING: str +DEFAULT_REGION: str +DATETIME_FORMAT: str +SERVICE_NAME: str +HTTP_OK: int +HTTP_BAD_REQUEST: int +PROVISIONED_THROUGHPUT: str +READ_CAPACITY_UNITS: str +WRITE_CAPACITY_UNITS: str +STRING_SHORT: str +STRING_SET_SHORT: str +NUMBER_SHORT: str +NUMBER_SET_SHORT: str +BINARY_SHORT: str +BINARY_SET_SHORT: str +MAP_SHORT: str +LIST_SHORT: str +BOOLEAN: str +BOOLEAN_SHORT: str +STRING: str +STRING_SET: str +NUMBER: str +NUMBER_SET: str +BINARY: str +BINARY_SET: str +MAP: str +LIST: str +SHORT_ATTR_TYPES: Any +ATTR_TYPE_MAP: Any +LOCAL_SECONDARY_INDEX: str +LOCAL_SECONDARY_INDEXES: str +GLOBAL_SECONDARY_INDEX: str +GLOBAL_SECONDARY_INDEXES: str +PROJECTION: str +PROJECTION_TYPE: str +NON_KEY_ATTRIBUTES: str +KEYS_ONLY: str +ALL: str +INCLUDE: str +STREAM_VIEW_TYPE: str +STREAM_SPECIFICATION: str +STREAM_ENABLED: str +STREAM_NEW_IMAGE: str +STREAM_OLD_IMAGE: str +STREAM_NEW_AND_OLD_IMAGE: str +STREAM_KEYS_ONLY: str +EXCLUSIVE_START_KEY: str +LAST_EVALUATED_KEY: str +QUERY_FILTER: str +BEGINS_WITH: str +BETWEEN: str +EQ: str +NE: str +LE: str +LT: str +GE: str +GT: str +IN: str +KEY_CONDITIONS: str +COMPARISON_OPERATOR_VALUES: Any +QUERY_OPERATOR_MAP: Any +NOT_NULL: str +NULL: str +CONTAINS: str +NOT_CONTAINS: str +ALL_ATTRIBUTES: str +ALL_PROJECTED_ATTRIBUTES: str +SPECIFIC_ATTRIBUTES: str +COUNT: str +SELECT_VALUES: Any +SCAN_OPERATOR_MAP: Any +QUERY_FILTER_OPERATOR_MAP: Any +DELETE_FILTER_OPERATOR_MAP: Any +UPDATE_FILTER_OPERATOR_MAP: Any +PUT_FILTER_OPERATOR_MAP: Any +SEGMENT: str +TOTAL_SEGMENTS: str +SCAN_FILTER_VALUES: Any +QUERY_FILTER_VALUES: Any +DELETE_FILTER_VALUES: Any +VALUE: str +EXPECTED: str +CONSUMED_CAPACITY: str +CAPACITY_UNITS: str +INDEXES: str +TOTAL: str +NONE: str +RETURN_CONSUMED_CAPACITY_VALUES: Any +SIZE: str +RETURN_ITEM_COLL_METRICS_VALUES: Any +ALL_OLD: str +UPDATED_OLD: str +ALL_NEW: str +UPDATED_NEW: str +RETURN_VALUES_VALUES: Any +PUT: str +DELETE: str +ADD: str +ATTR_UPDATE_ACTIONS: Any +BATCH_GET_PAGE_LIMIT: int +BATCH_WRITE_PAGE_LIMIT: int +META_CLASS_NAME: str +REGION: str +HOST: str +CONDITIONAL_OPERATOR: str +AND: str +OR: str +CONDITIONAL_OPERATORS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi new file mode 100644 index 0000000..728db4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi @@ -0,0 +1,23 @@ +from typing import Any, Optional, Text + +class PynamoDBException(Exception): + msg: str + cause: Any + def __init__(self, msg: Optional[Text] = ..., cause: Optional[Exception] = ...) -> None: ... + +class PynamoDBConnectionError(PynamoDBException): ... +class DeleteError(PynamoDBConnectionError): ... +class QueryError(PynamoDBConnectionError): ... +class ScanError(PynamoDBConnectionError): ... +class PutError(PynamoDBConnectionError): ... +class UpdateError(PynamoDBConnectionError): ... +class GetError(PynamoDBConnectionError): ... +class TableError(PynamoDBConnectionError): ... +class DoesNotExist(PynamoDBException): ... + +class TableDoesNotExist(PynamoDBException): + def __init__(self, table_name) -> None: ... + +class VerboseClientError(Exception): + MSG_TEMPLATE: Any + def __init__(self, error_response, operation_name, verbose_properties: Optional[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi new file mode 100644 index 0000000..66e8ae7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi @@ -0,0 +1,30 @@ +from typing import Any, Optional + +class IndexMeta(type): + def __init__(self, name, bases, attrs) -> None: ... + +class Index(metaclass=IndexMeta): + Meta: Any + def __init__(self) -> None: ... + @classmethod + def count(cls, hash_key, consistent_read: bool = ..., **filters) -> int: ... + @classmethod + def query(self, hash_key, scan_index_forward: Optional[Any] = ..., consistent_read: bool = ..., limit: Optional[Any] = ..., last_evaluated_key: Optional[Any] = ..., attributes_to_get: Optional[Any] = ..., **filters): ... + +class GlobalSecondaryIndex(Index): ... +class LocalSecondaryIndex(Index): ... + +class Projection(object): + projection_type: Any + non_key_attributes: Any + +class KeysOnlyProjection(Projection): + projection_type: Any + +class IncludeProjection(Projection): + projection_type: Any + non_key_attributes: Any + def __init__(self, non_attr_keys: Optional[Any] = ...) -> None: ... + +class AllProjection(Projection): + projection_type: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi new file mode 100644 index 0000000..5943a58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi @@ -0,0 +1,107 @@ +from .attributes import Attribute +from .exceptions import DoesNotExist as DoesNotExist +from typing import Any, Dict, Generic, Iterable, Iterator, List, Optional, Sequence, Tuple, Type, TypeVar, Text, Union + +log: Any + +class DefaultMeta: ... + +class ResultSet(Iterable): + results: Any + operation: Any + arguments: Any + def __init__(self, results, operation, arguments) -> None: ... + def __iter__(self): ... + +class MetaModel(type): + def __init__(self, name: Text, bases: Tuple[type, ...], attrs: Dict[Any, Any]) -> None: ... + +_T = TypeVar('_T', bound='Model') +KeyType = Union[Text, bytes, float, int, Tuple] + +class Model(metaclass=MetaModel): + DoesNotExist = DoesNotExist + attribute_values: Dict[Text, Any] + def __init__(self, hash_key: Optional[KeyType] = ..., range_key: Optional[Any] = ..., **attrs) -> None: ... + @classmethod + def has_map_or_list_attributes(cls: Type[_T]) -> bool: ... + @classmethod + def batch_get(cls: Type[_T], items: Iterable[Union[KeyType, Iterable[KeyType]]], consistent_read: Optional[bool] = ..., attributes_to_get: Optional[Sequence[Text]] = ...) -> Iterator[_T]: ... + @classmethod + def batch_write(cls: Type[_T], auto_commit: bool = ...) -> BatchWrite[_T]: ... + def delete(self, condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Any: ... + def update(self, attributes: Optional[Dict[Text, Dict[Text, Any]]] = ..., actions: Optional[List[Any]] = ..., condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Any: ... + def update_item(self, attribute: Text, value: Optional[Any] = ..., action: Optional[Text] = ..., conditional_operator: Optional[Text] = ..., **expected_values): ... + def save(self, condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Dict[str, Any]: ... + def refresh(self, consistent_read: bool = ...): ... + @classmethod + def get(cls: Type[_T], hash_key: KeyType, range_key: Optional[KeyType] = ..., consistent_read: bool = ...) -> _T: ... + @classmethod + def from_raw_data(cls: Type[_T], data) -> _T: ... + @classmethod + def count(cls: Type[_T], hash_key: Optional[KeyType] = ..., consistent_read: bool = ..., index_name: Optional[Text] = ..., limit: Optional[int] = ..., **filters) -> int: ... + @classmethod + def query(cls: Type[_T], hash_key: KeyType, consistent_read: bool = ..., index_name: Optional[Text] = ..., scan_index_forward: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., limit: Optional[int] = ..., last_evaluated_key: Optional[Any] = ..., attributes_to_get: Optional[Iterable[Text]] = ..., page_size: Optional[int] = ..., **filters) -> Iterator[_T]: ... + @classmethod + def rate_limited_scan( + cls: Type[_T], + # TODO: annotate Condition class + filter_condition: Optional[Any] = ..., + attributes_to_get: Optional[Sequence[Text]] = ..., + segment: Optional[int] = ..., + total_segments: Optional[int] = ..., + limit: Optional[int] = ..., + conditional_operator: Optional[Text] = ..., + last_evaluated_key: Optional[Any] = ..., + page_size: Optional[int] = ..., + timeout_seconds: Optional[int] = ..., + read_capacity_to_consume_per_second: int = ..., + allow_rate_limited_scan_without_consumed_capacity: Optional[bool] = ..., + max_sleep_between_retry: int = ..., + max_consecutive_exceptions: int = ..., + consistent_read: Optional[bool] = ..., + index_name: Optional[str] = ..., + **filters: Any + ) -> Iterator[_T]: ... + @classmethod + def scan(cls: Type[_T], segment: Optional[int] = ..., total_segments: Optional[int] = ..., limit: Optional[int] = ..., conditional_operator: Optional[Text] = ..., last_evaluated_key: Optional[Any] = ..., page_size: Optional[int] = ..., **filters) -> Iterator[_T]: ... + @classmethod + def exists(cls: Type[_T]) -> bool: ... + @classmethod + def delete_table(cls): ... + @classmethod + def describe_table(cls): ... + @classmethod + def create_table(cls: Type[_T], wait: bool = ..., read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ...): ... + @classmethod + def dumps(cls): ... + @classmethod + def dump(cls, filename): ... + @classmethod + def loads(cls, data): ... + @classmethod + def load(cls, filename): ... + @classmethod + def add_throttle_record(cls, records): ... + @classmethod + def get_throttle(cls): ... + @classmethod + def get_attributes(cls) -> Dict[str, Attribute]: ... + @classmethod + def _get_attributes(cls) -> Dict[str, Attribute]: ... + +class ModelContextManager(Generic[_T]): + model: Type[_T] + auto_commit: bool + max_operations: int + pending_operations: List[Dict[Text, Any]] + def __init__(self, model: Type[_T], auto_commit: bool = ...) -> None: ... + def __enter__(self) -> ModelContextManager[_T]: ... + +class BatchWrite(Generic[_T], ModelContextManager[_T]): + def save(self, put_item: _T) -> None: ... + def delete(self, del_item: _T) -> None: ... + def __enter__(self) -> BatchWrite[_T]: ... + def __exit__(self, exc_type, exc_val, exc_tb) -> None: ... + pending_operations: Any + def commit(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi new file mode 100644 index 0000000..76fc417 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi @@ -0,0 +1,8 @@ +from typing import Any + +log: Any +default_settings_dict: Any +OVERRIDE_SETTINGS_PATH: Any +override_settings: Any + +def get_settings_value(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi new file mode 100644 index 0000000..6948b68 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +log: Any + +class ThrottleBase: + capacity: Any + window: Any + records: Any + sleep_interval: Any + def __init__(self, capacity, window: int = ..., initial_sleep: Optional[Any] = ...) -> None: ... + def add_record(self, record): ... + def throttle(self): ... + +class NoThrottle(ThrottleBase): + def __init__(self) -> None: ... + def add_record(self, record): ... + +class Throttle(ThrottleBase): + def throttle(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi new file mode 100644 index 0000000..14195f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi @@ -0,0 +1,5 @@ +STRING: str +NUMBER: str +BINARY: str +HASH: str +RANGE: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi new file mode 100644 index 0000000..20655d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi @@ -0,0 +1,41 @@ +from typing import Optional, List, Set, Mapping, Union +import datetime + +class BaseTzInfo(datetime.tzinfo): + zone: str = ... + def localize(self, dt: datetime.datetime, is_dst: bool = ...) -> datetime.datetime: ... + def normalize(self, dt: datetime.datetime) -> datetime.datetime: ... + +class _UTCclass(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> datetime.timedelta: ... + def dst(self, dt: Optional[datetime.datetime]) -> datetime.timedelta: ... + +class _StaticTzInfo(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> datetime.timedelta: ... + def dst(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> datetime.timedelta: ... + +class _DstTzInfo(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> Optional[datetime.timedelta]: ... + +class UnknownTimeZoneError(KeyError): ... +class InvalidTimeError(Exception): ... +class AmbiguousTimeError(InvalidTimeError): ... +class NonExistentTimeError(InvalidTimeError): ... + +utc: _UTCclass +UTC: _UTCclass +def timezone(zone: str) -> Union[_UTCclass, _StaticTzInfo, _DstTzInfo]: ... + +all_timezones: List[str] +all_timezones_set: Set[str] +common_timezones: List[str] +common_timezones_set: Set[str] +country_timezones: Mapping[str, List[str]] +country_names: Mapping[str, str] +ZERO: datetime.timedelta +HOUR: datetime.timedelta +VERSION: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi new file mode 100644 index 0000000..7705d78 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi @@ -0,0 +1,40 @@ +# Stubs for requests (based on version 2.6.0, Python 3) + +from typing import Any +from . import models +from . import api +from . import sessions +from . import status_codes +from . import exceptions +from . import packages +import logging + +__title__: Any +__build__: Any +__license__: Any +__copyright__: Any +__version__: Any + +Request = models.Request +Response = models.Response +PreparedRequest = models.PreparedRequest +request = api.request +get = api.get +head = api.head +post = api.post +patch = api.patch +put = api.put +delete = api.delete +options = api.options +session = sessions.session +Session = sessions.Session +codes = status_codes.codes +RequestException = exceptions.RequestException +Timeout = exceptions.Timeout +URLRequired = exceptions.URLRequired +TooManyRedirects = exceptions.TooManyRedirects +HTTPError = exceptions.HTTPError +ConnectionError = exceptions.ConnectionError + +class NullHandler(logging.Handler): + def emit(self, record): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi new file mode 100644 index 0000000..1900567 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi @@ -0,0 +1,79 @@ +# Stubs for requests.adapters (Python 3) + +from typing import Any, Container, Union, Text, Tuple, Optional, Mapping +from . import models +from .packages.urllib3 import poolmanager +from .packages.urllib3 import response +from .packages.urllib3.util import retry +from . import compat +from . import utils +from . import structures +from .packages.urllib3 import exceptions as urllib3_exceptions +from . import cookies +from . import exceptions +from . import auth + +PreparedRequest = models.PreparedRequest +Response = models.Response +PoolManager = poolmanager.PoolManager +proxy_from_url = poolmanager.proxy_from_url +HTTPResponse = response.HTTPResponse +Retry = retry.Retry +DEFAULT_CA_BUNDLE_PATH = utils.DEFAULT_CA_BUNDLE_PATH +get_encoding_from_headers = utils.get_encoding_from_headers +prepend_scheme_if_needed = utils.prepend_scheme_if_needed +get_auth_from_url = utils.get_auth_from_url +urldefragauth = utils.urldefragauth +CaseInsensitiveDict = structures.CaseInsensitiveDict +ConnectTimeoutError = urllib3_exceptions.ConnectTimeoutError +MaxRetryError = urllib3_exceptions.MaxRetryError +ProtocolError = urllib3_exceptions.ProtocolError +ReadTimeoutError = urllib3_exceptions.ReadTimeoutError +ResponseError = urllib3_exceptions.ResponseError +extract_cookies_to_jar = cookies.extract_cookies_to_jar +ConnectionError = exceptions.ConnectionError +ConnectTimeout = exceptions.ConnectTimeout +ReadTimeout = exceptions.ReadTimeout +SSLError = exceptions.SSLError +ProxyError = exceptions.ProxyError +RetryError = exceptions.RetryError + +DEFAULT_POOLBLOCK: Any +DEFAULT_POOLSIZE: Any +DEFAULT_RETRIES: Any + +class BaseAdapter: + def __init__(self) -> None: ... + def send(self, + request: PreparedRequest, + stream: bool = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + verify: Union[bool, str] = ..., + cert: Union[None, Union[bytes, Text], Container[Union[bytes, Text]]] = ..., + proxies: Optional[Mapping[str, str]] = ...) -> Response: ... + def close(self) -> None: ... + +class HTTPAdapter(BaseAdapter): + __attrs__: Any + max_retries: Any + config: Any + proxy_manager: Any + def __init__(self, pool_connections=..., pool_maxsize=..., max_retries=..., + pool_block=...) -> None: ... + poolmanager: Any + def init_poolmanager(self, connections, maxsize, block=..., **pool_kwargs): ... + def proxy_manager_for(self, proxy, **proxy_kwargs): ... + def cert_verify(self, conn, url, verify, cert): ... + def build_response(self, req, resp): ... + def get_connection(self, url, proxies=...): ... + def close(self): ... + def request_url(self, request, proxies): ... + def add_headers(self, request, **kwargs): ... + def proxy_headers(self, proxy): ... + def send(self, + request: PreparedRequest, + stream: bool = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + verify: Union[bool, str] = ..., + cert: Union[None, Union[bytes, Text], Container[Union[bytes, Text]]] = ..., + proxies: Optional[Mapping[str, str]] = ...) -> Response: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi new file mode 100644 index 0000000..df3003c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi @@ -0,0 +1,40 @@ +# Stubs for requests.api (Python 3) + +import sys +from typing import Optional, Union, Any, Iterable, Mapping, MutableMapping, Tuple, IO, Text + +from .models import Response + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, Text] + +_ParamsMappingValueType = Union[_Text, bytes, int, float, Iterable[Union[_Text, bytes, int, float]]] +_Data = Union[ + None, + _Text, + bytes, + MutableMapping[str, Any], + MutableMapping[Text, Any], + Iterable[Tuple[_Text, Optional[_Text]]], + IO +] + +def request(method: str, url: str, **kwargs) -> Response: ... +def get(url: Union[_Text, bytes], + params: Optional[ + Union[Mapping[Union[_Text, bytes, int, float], _ParamsMappingValueType], + Union[_Text, bytes], + Tuple[Union[_Text, bytes, int, float], _ParamsMappingValueType], + Mapping[_Text, _ParamsMappingValueType], + Mapping[bytes, _ParamsMappingValueType], + Mapping[int, _ParamsMappingValueType], + Mapping[float, _ParamsMappingValueType]]] = ..., + **kwargs) -> Response: ... +def options(url: _Text, **kwargs) -> Response: ... +def head(url: _Text, **kwargs) -> Response: ... +def post(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def put(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def patch(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def delete(url: _Text, **kwargs) -> Response: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi new file mode 100644 index 0000000..48d4b08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi @@ -0,0 +1,44 @@ +# Stubs for requests.auth (Python 3) + +from typing import Any, Text, Union +from . import compat +from . import cookies +from . import models +from . import utils +from . import status_codes + +extract_cookies_to_jar = cookies.extract_cookies_to_jar +parse_dict_header = utils.parse_dict_header +to_native_string = utils.to_native_string +codes = status_codes.codes + +CONTENT_TYPE_FORM_URLENCODED: Any +CONTENT_TYPE_MULTI_PART: Any + +def _basic_auth_str(username: Union[bytes, Text], password: Union[bytes, Text]) -> str: ... + +class AuthBase: + def __call__(self, r: models.PreparedRequest) -> models.PreparedRequest: ... + +class HTTPBasicAuth(AuthBase): + username: Any + password: Any + def __init__(self, username, password) -> None: ... + def __call__(self, r): ... + +class HTTPProxyAuth(HTTPBasicAuth): + def __call__(self, r): ... + +class HTTPDigestAuth(AuthBase): + username: Any + password: Any + last_nonce: Any + nonce_count: Any + chal: Any + pos: Any + num_401_calls: Any + def __init__(self, username, password) -> None: ... + def build_digest_header(self, method, url): ... + def handle_redirect(self, r, **kwargs): ... + def handle_401(self, r, **kwargs): ... + def __call__(self, r): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi new file mode 100644 index 0000000..63b92f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi @@ -0,0 +1,6 @@ +# Stubs for requests.compat (Python 3.4) + +from typing import Any +import collections + +OrderedDict = collections.OrderedDict diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi new file mode 100644 index 0000000..1208dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi @@ -0,0 +1,67 @@ +# Stubs for requests.cookies (Python 3) + +import sys +from typing import Any, MutableMapping +import collections +from . import compat + +if sys.version_info < (3, 0): + from cookielib import CookieJar +else: + from http.cookiejar import CookieJar + +class MockRequest: + type: Any + def __init__(self, request) -> None: ... + def get_type(self): ... + def get_host(self): ... + def get_origin_req_host(self): ... + def get_full_url(self): ... + def is_unverifiable(self): ... + def has_header(self, name): ... + def get_header(self, name, default=...): ... + def add_header(self, key, val): ... + def add_unredirected_header(self, name, value): ... + def get_new_headers(self): ... + @property + def unverifiable(self): ... + @property + def origin_req_host(self): ... + @property + def host(self): ... + +class MockResponse: + def __init__(self, headers) -> None: ... + def info(self): ... + def getheaders(self, name): ... + +def extract_cookies_to_jar(jar, request, response): ... +def get_cookie_header(jar, request): ... +def remove_cookie_by_name(cookiejar, name, domain=..., path=...): ... + +class CookieConflictError(RuntimeError): ... + +class RequestsCookieJar(CookieJar, MutableMapping): + def get(self, name, default=..., domain=..., path=...): ... + def set(self, name, value, **kwargs): ... + def iterkeys(self): ... + def keys(self): ... + def itervalues(self): ... + def values(self): ... + def iteritems(self): ... + def items(self): ... + def list_domains(self): ... + def list_paths(self): ... + def multiple_domains(self): ... + def get_dict(self, domain=..., path=...): ... + def __getitem__(self, name): ... + def __setitem__(self, name, value): ... + def __delitem__(self, name): ... + def set_cookie(self, cookie, *args, **kwargs): ... + def update(self, other): ... + def copy(self): ... + +def create_cookie(name, value, **kwargs): ... +def morsel_to_cookie(morsel): ... +def cookiejar_from_dict(cookie_dict, cookiejar=..., overwrite=...): ... +def merge_cookies(cookiejar, cookies): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi new file mode 100644 index 0000000..3669692 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi @@ -0,0 +1,26 @@ +# Stubs for requests.exceptions (Python 3) + +from typing import Any +from .packages.urllib3.exceptions import HTTPError as BaseHTTPError + +class RequestException(IOError): + response: Any + request: Any + def __init__(self, *args, **kwargs) -> None: ... + +class HTTPError(RequestException): ... +class ConnectionError(RequestException): ... +class ProxyError(ConnectionError): ... +class SSLError(ConnectionError): ... +class Timeout(RequestException): ... +class ConnectTimeout(ConnectionError, Timeout): ... +class ReadTimeout(Timeout): ... +class URLRequired(RequestException): ... +class TooManyRedirects(RequestException): ... +class MissingSchema(RequestException, ValueError): ... +class InvalidSchema(RequestException, ValueError): ... +class InvalidURL(RequestException, ValueError): ... +class ChunkedEncodingError(RequestException): ... +class ContentDecodingError(RequestException, BaseHTTPError): ... +class StreamConsumedError(RequestException, TypeError): ... +class RetryError(RequestException): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi new file mode 100644 index 0000000..278076a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi @@ -0,0 +1,8 @@ +# Stubs for requests.hooks (Python 3) + +from typing import Any + +HOOKS: Any + +def default_hooks(): ... +def dispatch_hook(key, hooks, hook_data, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi new file mode 100644 index 0000000..2bcea94 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi @@ -0,0 +1,142 @@ +# Stubs for requests.models (Python 3) + +from typing import (Any, Dict, Iterator, List, MutableMapping, Optional, Text, + Union) +import datetime +import types + +from . import hooks +from . import structures +from . import auth +from . import cookies +from .cookies import RequestsCookieJar +from .packages.urllib3 import fields +from .packages.urllib3 import filepost +from .packages.urllib3 import util +from .packages.urllib3 import exceptions as urllib3_exceptions +from . import exceptions +from . import utils +from . import compat +from . import status_codes + + +default_hooks = hooks.default_hooks +CaseInsensitiveDict = structures.CaseInsensitiveDict +HTTPBasicAuth = auth.HTTPBasicAuth +cookiejar_from_dict = cookies.cookiejar_from_dict +get_cookie_header = cookies.get_cookie_header +RequestField = fields.RequestField +encode_multipart_formdata = filepost.encode_multipart_formdata +parse_url = util.parse_url +DecodeError = urllib3_exceptions.DecodeError +ReadTimeoutError = urllib3_exceptions.ReadTimeoutError +ProtocolError = urllib3_exceptions.ProtocolError +LocationParseError = urllib3_exceptions.LocationParseError +HTTPError = exceptions.HTTPError +MissingSchema = exceptions.MissingSchema +InvalidURL = exceptions.InvalidURL +ChunkedEncodingError = exceptions.ChunkedEncodingError +ContentDecodingError = exceptions.ContentDecodingError +ConnectionError = exceptions.ConnectionError +StreamConsumedError = exceptions.StreamConsumedError +guess_filename = utils.guess_filename +get_auth_from_url = utils.get_auth_from_url +requote_uri = utils.requote_uri +stream_decode_response_unicode = utils.stream_decode_response_unicode +to_key_val_list = utils.to_key_val_list +parse_header_links = utils.parse_header_links +iter_slices = utils.iter_slices +guess_json_utf = utils.guess_json_utf +super_len = utils.super_len +to_native_string = utils.to_native_string +codes = status_codes.codes + +REDIRECT_STATI: Any +DEFAULT_REDIRECT_LIMIT: Any +CONTENT_CHUNK_SIZE: Any +ITER_CHUNK_SIZE: Any +json_dumps: Any + +class RequestEncodingMixin: + @property + def path_url(self): ... + +class RequestHooksMixin: + def register_hook(self, event, hook): ... + def deregister_hook(self, event, hook): ... + +class Request(RequestHooksMixin): + hooks: Any + method: Any + url: Any + headers: Any + files: Any + data: Any + json: Any + params: Any + auth: Any + cookies: Any + def __init__(self, method=..., url=..., headers=..., files=..., data=..., params=..., + auth=..., cookies=..., hooks=..., json=...) -> None: ... + def prepare(self): ... + +class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): + method: Optional[Union[str, Text]] + url: Optional[Union[str, Text]] + headers: CaseInsensitiveDict + body: Optional[Union[bytes, Text]] + hooks: Any + def __init__(self) -> None: ... + def prepare(self, method=..., url=..., headers=..., files=..., data=..., params=..., + auth=..., cookies=..., hooks=..., json=...): ... + def copy(self): ... + def prepare_method(self, method): ... + def prepare_url(self, url, params): ... + def prepare_headers(self, headers): ... + def prepare_body(self, data, files, json=...): ... + def prepare_content_length(self, body): ... + def prepare_auth(self, auth, url=...): ... + def prepare_cookies(self, cookies): ... + def prepare_hooks(self, hooks): ... + +class Response: + __attrs__: Any + status_code: int + headers: MutableMapping[str, str] + raw: Any + url: str + encoding: str + history: List[Response] + reason: str + cookies: RequestsCookieJar + elapsed: datetime.timedelta + request: PreparedRequest + def __init__(self) -> None: ... + def __bool__(self) -> bool: ... + def __nonzero__(self) -> bool: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> Response: ... + def __exit__(self, *args: Any) -> None: ... + @property + def ok(self) -> bool: ... + @property + def is_redirect(self) -> bool: ... + @property + def is_permanent_redirect(self) -> bool: ... + @property + def apparent_encoding(self) -> str: ... + def iter_content(self, chunk_size: Optional[int] = ..., + decode_unicode: bool = ...) -> Iterator[Any]: ... + def iter_lines(self, + chunk_size: Optional[int] = ..., + decode_unicode: bool = ..., + delimiter: Union[Text, bytes] = ...) -> Iterator[Any]: ... + @property + def content(self) -> bytes: ... + @property + def text(self) -> str: ... + def json(self, **kwargs) -> Any: ... + @property + def links(self) -> Dict[Any, Any]: ... + def raise_for_status(self) -> None: ... + def close(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi new file mode 100644 index 0000000..b50dba3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi @@ -0,0 +1,4 @@ +class VendorAlias: + def __init__(self, package_names) -> None: ... + def find_module(self, fullname, path=...): ... + def load_module(self, name): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi new file mode 100644 index 0000000..f575800 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi @@ -0,0 +1,31 @@ +from typing import Any +from . import connectionpool +from . import filepost +from . import poolmanager +from . import response +from .util import request as _request +from .util import url +from .util import timeout +from .util import retry +import logging + +__license__: Any + +HTTPConnectionPool = connectionpool.HTTPConnectionPool +HTTPSConnectionPool = connectionpool.HTTPSConnectionPool +connection_from_url = connectionpool.connection_from_url +encode_multipart_formdata = filepost.encode_multipart_formdata +PoolManager = poolmanager.PoolManager +ProxyManager = poolmanager.ProxyManager +proxy_from_url = poolmanager.proxy_from_url +HTTPResponse = response.HTTPResponse +make_headers = _request.make_headers +get_host = url.get_host +Timeout = timeout.Timeout +Retry = retry.Retry + +class NullHandler(logging.Handler): + def emit(self, record): ... + +def add_stderr_logger(level=...): ... +def disable_warnings(category=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi new file mode 100644 index 0000000..64e3d22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi @@ -0,0 +1,47 @@ +from typing import Any +from collections import MutableMapping + +class RLock: + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, traceback): ... + +class RecentlyUsedContainer(MutableMapping): + ContainerCls: Any + dispose_func: Any + lock: Any + def __init__(self, maxsize=..., dispose_func=...) -> None: ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def __len__(self): ... + def __iter__(self): ... + def clear(self): ... + def keys(self): ... + +class HTTPHeaderDict(dict): + def __init__(self, headers=..., **kwargs) -> None: ... + def __setitem__(self, key, val): ... + def __getitem__(self, key): ... + def __delitem__(self, key): ... + def __contains__(self, key): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + values: Any + get: Any + update: Any + iterkeys: Any + itervalues: Any + def pop(self, key, default=...): ... + def discard(self, key): ... + def add(self, key, val): ... + def extend(self, *args, **kwargs): ... + def getlist(self, key): ... + getheaders: Any + getallmatchingheaders: Any + iget: Any + def copy(self): ... + def iteritems(self): ... + def itermerged(self): ... + def items(self): ... + @classmethod + def from_httplib(cls, message, duplicates=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi new file mode 100644 index 0000000..99af027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi @@ -0,0 +1,71 @@ +# Stubs for requests.packages.urllib3.connection (Python 3.4) + +import sys +from typing import Any +from . import packages +import ssl +from . import exceptions +from .packages import ssl_match_hostname +from .util import ssl_ +from . import util + +if sys.version_info < (3, 0): + from httplib import HTTPConnection as _HTTPConnection + from httplib import HTTPException as HTTPException + + class ConnectionError(Exception): ... +else: + from http.client import HTTPConnection as _HTTPConnection + from http.client import HTTPException as HTTPException + from builtins import ConnectionError as ConnectionError + + +class DummyConnection: ... + +BaseSSLError = ssl.SSLError + +ConnectTimeoutError = exceptions.ConnectTimeoutError +SystemTimeWarning = exceptions.SystemTimeWarning +SecurityWarning = exceptions.SecurityWarning +match_hostname = ssl_match_hostname.match_hostname +resolve_cert_reqs = ssl_.resolve_cert_reqs +resolve_ssl_version = ssl_.resolve_ssl_version +ssl_wrap_socket = ssl_.ssl_wrap_socket +assert_fingerprint = ssl_.assert_fingerprint +connection = util.connection + +port_by_scheme: Any +RECENT_DATE: Any + +class HTTPConnection(_HTTPConnection): + default_port: Any + default_socket_options: Any + is_verified: Any + source_address: Any + socket_options: Any + def __init__(self, *args, **kw) -> None: ... + def connect(self): ... + +class HTTPSConnection(HTTPConnection): + default_port: Any + key_file: Any + cert_file: Any + def __init__(self, host, port=..., key_file=..., cert_file=..., strict=..., timeout=..., **kw) -> None: ... + sock: Any + def connect(self): ... + +class VerifiedHTTPSConnection(HTTPSConnection): + cert_reqs: Any + ca_certs: Any + ssl_version: Any + assert_fingerprint: Any + key_file: Any + cert_file: Any + assert_hostname: Any + def set_cert(self, key_file=..., cert_file=..., cert_reqs=..., ca_certs=..., assert_hostname=..., assert_fingerprint=...): ... + sock: Any + auto_open: Any + is_verified: Any + def connect(self): ... + +UnverifiedHTTPSConnection = HTTPSConnection diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi new file mode 100644 index 0000000..a4e8ac1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi @@ -0,0 +1,85 @@ +from typing import Any +from . import exceptions +from .packages import ssl_match_hostname +from . import packages +from .connection import ( + HTTPException as HTTPException, + BaseSSLError as BaseSSLError, + ConnectionError as ConnectionError, +) +from . import request +from . import response +from . import connection +from .util import connection as _connection +from .util import retry +from .util import timeout +from .util import url + +ClosedPoolError = exceptions.ClosedPoolError +ProtocolError = exceptions.ProtocolError +EmptyPoolError = exceptions.EmptyPoolError +HostChangedError = exceptions.HostChangedError +LocationValueError = exceptions.LocationValueError +MaxRetryError = exceptions.MaxRetryError +ProxyError = exceptions.ProxyError +ReadTimeoutError = exceptions.ReadTimeoutError +SSLError = exceptions.SSLError +TimeoutError = exceptions.TimeoutError +InsecureRequestWarning = exceptions.InsecureRequestWarning +CertificateError = ssl_match_hostname.CertificateError +port_by_scheme = connection.port_by_scheme +DummyConnection = connection.DummyConnection +HTTPConnection = connection.HTTPConnection +HTTPSConnection = connection.HTTPSConnection +VerifiedHTTPSConnection = connection.VerifiedHTTPSConnection +RequestMethods = request.RequestMethods +HTTPResponse = response.HTTPResponse +is_connection_dropped = _connection.is_connection_dropped +Retry = retry.Retry +Timeout = timeout.Timeout +get_host = url.get_host + +xrange: Any +log: Any + +class ConnectionPool: + scheme: Any + QueueCls: Any + host: Any + port: Any + def __init__(self, host, port=...) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + def close(self): ... + +class HTTPConnectionPool(ConnectionPool, RequestMethods): + scheme: Any + ConnectionCls: Any + strict: Any + timeout: Any + retries: Any + pool: Any + block: Any + proxy: Any + proxy_headers: Any + num_connections: Any + num_requests: Any + conn_kw: Any + def __init__(self, host, port=..., strict=..., timeout=..., maxsize=..., block=..., headers=..., retries=..., _proxy=..., _proxy_headers=..., **conn_kw) -> None: ... + def close(self): ... + def is_same_host(self, url): ... + def urlopen(self, method, url, body=..., headers=..., retries=..., redirect=..., assert_same_host=..., timeout=..., pool_timeout=..., release_conn=..., **response_kw): ... + +class HTTPSConnectionPool(HTTPConnectionPool): + scheme: Any + ConnectionCls: Any + key_file: Any + cert_file: Any + cert_reqs: Any + ca_certs: Any + ssl_version: Any + assert_hostname: Any + assert_fingerprint: Any + def __init__(self, host, port=..., strict=..., timeout=..., maxsize=..., block=..., headers=..., retries=..., _proxy=..., _proxy_headers=..., key_file=..., cert_file=..., cert_reqs=..., ca_certs=..., ssl_version=..., assert_hostname=..., assert_fingerprint=..., **conn_kw) -> None: ... + +def connection_from_url(url, **kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi new file mode 100644 index 0000000..ddb4e83 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi @@ -0,0 +1,50 @@ +from typing import Any + +class HTTPError(Exception): ... +class HTTPWarning(Warning): ... + +class PoolError(HTTPError): + pool: Any + def __init__(self, pool, message) -> None: ... + def __reduce__(self): ... + +class RequestError(PoolError): + url: Any + def __init__(self, pool, url, message) -> None: ... + def __reduce__(self): ... + +class SSLError(HTTPError): ... +class ProxyError(HTTPError): ... +class DecodeError(HTTPError): ... +class ProtocolError(HTTPError): ... + +ConnectionError: Any + +class MaxRetryError(RequestError): + reason: Any + def __init__(self, pool, url, reason=...) -> None: ... + +class HostChangedError(RequestError): + retries: Any + def __init__(self, pool, url, retries=...) -> None: ... + +class TimeoutStateError(HTTPError): ... +class TimeoutError(HTTPError): ... +class ReadTimeoutError(TimeoutError, RequestError): ... +class ConnectTimeoutError(TimeoutError): ... +class EmptyPoolError(PoolError): ... +class ClosedPoolError(PoolError): ... +class LocationValueError(ValueError, HTTPError): ... + +class LocationParseError(LocationValueError): + location: Any + def __init__(self, location) -> None: ... + +class ResponseError(HTTPError): + GENERIC_ERROR: Any + SPECIFIC_ERROR: Any + +class SecurityWarning(HTTPWarning): ... +class InsecureRequestWarning(SecurityWarning): ... +class SystemTimeWarning(SecurityWarning): ... +class InsecurePlatformWarning(SecurityWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi new file mode 100644 index 0000000..9d691dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi @@ -0,0 +1,16 @@ +# Stubs for requests.packages.urllib3.fields (Python 3.4) + +from typing import Any +from . import packages + +def guess_content_type(filename, default=...): ... +def format_header_param(name, value): ... + +class RequestField: + data: Any + headers: Any + def __init__(self, name, data, filename=..., headers=...) -> None: ... + @classmethod + def from_tuples(cls, fieldname, value): ... + def render_headers(self): ... + def make_multipart(self, content_disposition=..., content_type=..., content_location=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi new file mode 100644 index 0000000..afcc837 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi @@ -0,0 +1,15 @@ +from typing import Any +from . import packages +# from .packages import six +from . import fields + +# six = packages.six +# b = six.b +RequestField = fields.RequestField + +writer: Any + +def choose_boundary(): ... +def iter_field_objects(fields): ... +def iter_fields(fields): ... +def encode_multipart_formdata(fields, boundary=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi new file mode 100644 index 0000000..1915c0e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi @@ -0,0 +1,4 @@ +import ssl + +CertificateError = ssl.CertificateError +match_hostname = ssl.match_hostname diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi new file mode 100644 index 0000000..c219980 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi @@ -0,0 +1,3 @@ +class CertificateError(ValueError): ... + +def match_hostname(cert, hostname): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi new file mode 100644 index 0000000..9568488 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi @@ -0,0 +1,27 @@ +from typing import Any +from .request import RequestMethods + +class PoolManager(RequestMethods): + proxy: Any + connection_pool_kw: Any + pools: Any + def __init__(self, num_pools=..., headers=..., **connection_pool_kw) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + def clear(self): ... + def connection_from_host(self, host, port=..., scheme=...): ... + def connection_from_url(self, url): ... + # TODO: This was the original signature -- copied another one from base class to fix complaint. + # def urlopen(self, method, url, redirect=True, **kw): ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + +class ProxyManager(PoolManager): + proxy: Any + proxy_headers: Any + def __init__(self, proxy_url, num_pools=..., headers=..., proxy_headers=..., **connection_pool_kw) -> None: ... + def connection_from_host(self, host, port=..., scheme=...): ... + # TODO: This was the original signature -- copied another one from base class to fix complaint. + # def urlopen(self, method, url, redirect=True, **kw): ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + +def proxy_from_url(url, **kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi new file mode 100644 index 0000000..fd79126 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi @@ -0,0 +1,9 @@ +from typing import Any + +class RequestMethods: + headers: Any + def __init__(self, headers=...) -> None: ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + def request(self, method, url, fields=..., headers=..., **urlopen_kw): ... + def request_encode_url(self, method, url, fields=..., **urlopen_kw): ... + def request_encode_body(self, method, url, fields=..., headers=..., encode_multipart=..., multipart_boundary=..., **urlopen_kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi new file mode 100644 index 0000000..de0aa33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi @@ -0,0 +1,53 @@ +from typing import Any +import io +from . import _collections +from . import exceptions +from .connection import HTTPException as HTTPException, BaseSSLError as BaseSSLError +from .util import response + +HTTPHeaderDict = _collections.HTTPHeaderDict +ProtocolError = exceptions.ProtocolError +DecodeError = exceptions.DecodeError +ReadTimeoutError = exceptions.ReadTimeoutError +binary_type = bytes # six.binary_type +PY3 = True # six.PY3 +is_fp_closed = response.is_fp_closed + +class DeflateDecoder: + def __init__(self) -> None: ... + def __getattr__(self, name): ... + def decompress(self, data): ... + +class GzipDecoder: + def __init__(self) -> None: ... + def __getattr__(self, name): ... + def decompress(self, data): ... + +class HTTPResponse(io.IOBase): + CONTENT_DECODERS: Any + REDIRECT_STATUSES: Any + headers: Any + status: Any + version: Any + reason: Any + strict: Any + decode_content: Any + def __init__(self, body=..., headers=..., status=..., version=..., reason=..., strict=..., preload_content=..., decode_content=..., original_response=..., pool=..., connection=...) -> None: ... + def get_redirect_location(self): ... + def release_conn(self): ... + @property + def data(self): ... + def tell(self): ... + def read(self, amt=..., decode_content=..., cache_content=...): ... + def stream(self, amt=..., decode_content=...): ... + @classmethod + def from_httplib(cls, r, **response_kw): ... + def getheaders(self): ... + def getheader(self, name, default=...): ... + def close(self): ... + @property + def closed(self): ... + def fileno(self): ... + def flush(self): ... + def readable(self): ... + def readinto(self, b): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi new file mode 100644 index 0000000..53bdac9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi @@ -0,0 +1,25 @@ +from . import connection +from . import request +from . import response +from . import ssl_ +from . import timeout +from . import retry +from . import url +import ssl + +is_connection_dropped = connection.is_connection_dropped +make_headers = request.make_headers +is_fp_closed = response.is_fp_closed +SSLContext = ssl.SSLContext +HAS_SNI = ssl_.HAS_SNI +assert_fingerprint = ssl_.assert_fingerprint +resolve_cert_reqs = ssl_.resolve_cert_reqs +resolve_ssl_version = ssl_.resolve_ssl_version +ssl_wrap_socket = ssl_.ssl_wrap_socket +current_time = timeout.current_time +Timeout = timeout.Timeout +Retry = retry.Retry +get_host = url.get_host +parse_url = url.parse_url +split_first = url.split_first +Url = url.Url diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi new file mode 100644 index 0000000..db77bd0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi @@ -0,0 +1,8 @@ +from typing import Any + +poll: Any +select: Any +HAS_IPV6: bool + +def is_connection_dropped(conn): ... +def create_connection(address, timeout=..., source_address=..., socket_options=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi new file mode 100644 index 0000000..a7e112f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi @@ -0,0 +1,8 @@ +from typing import Any +# from ..packages import six + +# b = six.b + +ACCEPT_ENCODING: Any + +def make_headers(keep_alive=..., accept_encoding=..., user_agent=..., basic_auth=..., proxy_basic_auth=..., disable_cache=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi new file mode 100644 index 0000000..30463da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi @@ -0,0 +1 @@ +def is_fp_closed(obj): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi new file mode 100644 index 0000000..c7c2178 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi @@ -0,0 +1,32 @@ +from typing import Any +from .. import exceptions +from .. import packages + +ConnectTimeoutError = exceptions.ConnectTimeoutError +MaxRetryError = exceptions.MaxRetryError +ProtocolError = exceptions.ProtocolError +ReadTimeoutError = exceptions.ReadTimeoutError +ResponseError = exceptions.ResponseError + +log: Any + +class Retry: + DEFAULT_METHOD_WHITELIST: Any + BACKOFF_MAX: Any + total: Any + connect: Any + read: Any + redirect: Any + status_forcelist: Any + method_whitelist: Any + backoff_factor: Any + raise_on_redirect: Any + def __init__(self, total=..., connect=..., read=..., redirect=..., method_whitelist=..., status_forcelist=..., backoff_factor=..., raise_on_redirect=..., _observed_errors=...) -> None: ... + def new(self, **kw): ... + @classmethod + def from_int(cls, retries, redirect=..., default=...): ... + def get_backoff_time(self): ... + def sleep(self): ... + def is_forced_retry(self, method, status_code): ... + def is_exhausted(self): ... + def increment(self, method=..., url=..., response=..., error=..., _pool=..., _stacktrace=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi new file mode 100644 index 0000000..fe1a3a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi @@ -0,0 +1,20 @@ +from typing import Any +from .. import exceptions +import ssl + +SSLError = exceptions.SSLError +InsecurePlatformWarning = exceptions.InsecurePlatformWarning +SSLContext = ssl.SSLContext + +HAS_SNI: Any +create_default_context: Any +OP_NO_SSLv2: Any +OP_NO_SSLv3: Any +OP_NO_COMPRESSION: Any + +def assert_fingerprint(cert, fingerprint): ... +def resolve_cert_reqs(candidate): ... +def resolve_ssl_version(candidate): ... +def create_urllib3_context(ssl_version=..., cert_reqs=..., options=..., ciphers=...): ... +def ssl_wrap_socket(sock, keyfile=..., certfile=..., cert_reqs=..., ca_certs=..., + server_hostname=..., ssl_version=..., ciphers=..., ssl_context=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi new file mode 100644 index 0000000..0f3c97c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi @@ -0,0 +1,20 @@ +from typing import Any +from .. import exceptions + +TimeoutStateError = exceptions.TimeoutStateError + +def current_time(): ... + +class Timeout: + DEFAULT_TIMEOUT: Any + total: Any + def __init__(self, total=..., connect=..., read=...) -> None: ... + @classmethod + def from_float(cls, timeout): ... + def clone(self): ... + def start_connect(self): ... + def get_connect_duration(self): ... + @property + def connect_timeout(self): ... + @property + def read_timeout(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi new file mode 100644 index 0000000..0e40ba5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi @@ -0,0 +1,22 @@ +from typing import Any +from .. import exceptions + +LocationParseError = exceptions.LocationParseError + +url_attrs: Any + +class Url: + slots: Any + def __new__(cls, scheme=..., auth=..., host=..., port=..., path=..., query=..., fragment=...): ... + @property + def hostname(self): ... + @property + def request_uri(self): ... + @property + def netloc(self): ... + @property + def url(self): ... + +def split_first(s, delims): ... +def parse_url(url): ... +def get_host(url): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi new file mode 100644 index 0000000..33c7b79 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi @@ -0,0 +1,113 @@ +# Stubs for requests.sessions (Python 3) + +from typing import Any, Union, List, MutableMapping, Text, Optional, IO, Tuple, Callable, Iterable +from . import adapters +from . import auth as _auth +from . import compat +from . import cookies +from . import models +from .models import Response +from . import hooks +from . import utils +from . import exceptions +from .packages.urllib3 import _collections +from . import structures +from . import status_codes + +BaseAdapter = adapters.BaseAdapter +OrderedDict = compat.OrderedDict +cookiejar_from_dict = cookies.cookiejar_from_dict +extract_cookies_to_jar = cookies.extract_cookies_to_jar +RequestsCookieJar = cookies.RequestsCookieJar +merge_cookies = cookies.merge_cookies +Request = models.Request +PreparedRequest = models.PreparedRequest +DEFAULT_REDIRECT_LIMIT = models.DEFAULT_REDIRECT_LIMIT +default_hooks = hooks.default_hooks +dispatch_hook = hooks.dispatch_hook +to_key_val_list = utils.to_key_val_list +default_headers = utils.default_headers +to_native_string = utils.to_native_string +TooManyRedirects = exceptions.TooManyRedirects +InvalidSchema = exceptions.InvalidSchema +ChunkedEncodingError = exceptions.ChunkedEncodingError +ContentDecodingError = exceptions.ContentDecodingError +RecentlyUsedContainer = _collections.RecentlyUsedContainer +CaseInsensitiveDict = structures.CaseInsensitiveDict +HTTPAdapter = adapters.HTTPAdapter +requote_uri = utils.requote_uri +get_environ_proxies = utils.get_environ_proxies +get_netrc_auth = utils.get_netrc_auth +should_bypass_proxies = utils.should_bypass_proxies +get_auth_from_url = utils.get_auth_from_url +codes = status_codes.codes +REDIRECT_STATI = models.REDIRECT_STATI + +REDIRECT_CACHE_SIZE: Any + +def merge_setting(request_setting, session_setting, dict_class=...): ... +def merge_hooks(request_hooks, session_hooks, dict_class=...): ... + +class SessionRedirectMixin: + def resolve_redirects(self, resp, req, stream=..., timeout=..., verify=..., cert=..., + proxies=...): ... + def rebuild_auth(self, prepared_request, response): ... + def rebuild_proxies(self, prepared_request, proxies): ... + +_Data = Union[None, bytes, MutableMapping[Text, Text], IO] + +_Hook = Callable[[Response], Any] +_Hooks = MutableMapping[Text, List[_Hook]] +_HooksInput = MutableMapping[Text, Union[Iterable[_Hook], _Hook]] + +class Session(SessionRedirectMixin): + __attrs__: Any + headers: MutableMapping[Text, Text] + auth: Union[None, Tuple[Text, Text], _auth.AuthBase, Callable[[Request], Request]] + proxies: MutableMapping[Text, Text] + hooks: _Hooks + params: Union[bytes, MutableMapping[Text, Text]] + stream: bool + verify: Union[None, bool, Text] + cert: Union[None, Text, Tuple[Text, Text]] + max_redirects: int + trust_env: bool + cookies: RequestsCookieJar + adapters: MutableMapping + redirect_cache: RecentlyUsedContainer + def __init__(self) -> None: ... + def __enter__(self) -> Session: ... + def __exit__(self, *args) -> None: ... + def prepare_request(self, request): ... + def request(self, method: str, url: str, + params: Union[None, bytes, MutableMapping[Text, Text]] = ..., + data: _Data = ..., + headers: Optional[MutableMapping[Text, Text]] = ..., + cookies: Union[None, RequestsCookieJar, MutableMapping[Text, Text]] = ..., + files: Optional[MutableMapping[Text, IO]] = ..., + auth: Union[None, Tuple[Text, Text], _auth.AuthBase, Callable[[Request], Request]] = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + allow_redirects: Optional[bool] = ..., + proxies: Optional[MutableMapping[Text, Text]] = ..., + hooks: Optional[_HooksInput] = ..., + stream: Optional[bool] = ..., + verify: Union[None, bool, Text] = ..., + cert: Union[Text, Tuple[Text, Text], None] = ..., + json: Optional[Any] = ..., + ) -> Response: ... + def get(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def options(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def head(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def post(self, url: Union[Text, bytes], data: _Data = ..., json: Optional[Any] = ..., **kwargs) -> Response: ... + def put(self, url: Union[Text, bytes], data: _Data = ..., **kwargs) -> Response: ... + def patch(self, url: Union[Text, bytes], data: _Data = ..., **kwargs) -> Response: ... + def delete(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def send(self, request, **kwargs): ... + def merge_environment_settings(self, url, proxies, stream, verify, cert): ... + def get_adapter(self, url): ... + def close(self) -> None: ... + def mount(self, prefix: + Union[Text, bytes], + adapter: BaseAdapter) -> None: ... + +def session() -> Session: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi new file mode 100644 index 0000000..f9bf820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi @@ -0,0 +1,4 @@ +from typing import Any +from .structures import LookupDict + +codes: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi new file mode 100644 index 0000000..92cf27a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi @@ -0,0 +1,19 @@ +from typing import Any, Dict, Iterable, Iterator, Mapping, MutableMapping, Optional, Tuple, TypeVar, Union, Generic + +_VT = TypeVar('_VT') + +class CaseInsensitiveDict(MutableMapping[str, _VT], Generic[_VT]): + def __init__(self, data: Optional[Union[Mapping[str, _VT], Iterable[Tuple[str, _VT]]]] = ..., **kwargs: _VT) -> None: ... + def lower_items(self) -> Iterator[Tuple[str, _VT]]: ... + def __setitem__(self, key: str, value: _VT) -> None: ... + def __getitem__(self, key: str) -> _VT: ... + def __delitem__(self, key: str) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + +class LookupDict(Dict[str, _VT]): + name: Any + def __init__(self, name: Any = ...) -> None: ... + def __getitem__(self, key: str) -> Optional[_VT]: ... # type: ignore + def __getattr__(self, attr: str) -> _VT: ... + def __setattr__(self, attr: str, value: _VT) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi new file mode 100644 index 0000000..396a374 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi @@ -0,0 +1,53 @@ +# Stubs for requests.utils (Python 3) + +from typing import Any +from . import compat +from . import cookies +from . import structures +from . import exceptions + +OrderedDict = compat.OrderedDict +RequestsCookieJar = cookies.RequestsCookieJar +cookiejar_from_dict = cookies.cookiejar_from_dict +CaseInsensitiveDict = structures.CaseInsensitiveDict +InvalidURL = exceptions.InvalidURL + +NETRC_FILES: Any +DEFAULT_CA_BUNDLE_PATH: Any + +def dict_to_sequence(d): ... +def super_len(o): ... +def get_netrc_auth(url): ... +def guess_filename(obj): ... +def from_key_val_list(value): ... +def to_key_val_list(value): ... +def parse_list_header(value): ... +def parse_dict_header(value): ... +def unquote_header_value(value, is_filename=...): ... +def dict_from_cookiejar(cj): ... +def add_dict_to_cookiejar(cj, cookie_dict): ... +def get_encodings_from_content(content): ... +def get_encoding_from_headers(headers): ... +def stream_decode_response_unicode(iterator, r): ... +def iter_slices(string, slice_length): ... +def get_unicode_from_response(r): ... + +UNRESERVED_SET: Any + +def unquote_unreserved(uri): ... +def requote_uri(uri): ... +def address_in_network(ip, net): ... +def dotted_netmask(mask): ... +def is_ipv4_address(string_ip): ... +def is_valid_cidr(string_network): ... +def set_environ(env_name, value): ... +def should_bypass_proxies(url): ... +def get_environ_proxies(url): ... +def default_user_agent(name=...): ... +def default_headers(): ... +def parse_header_links(value): ... +def guess_json_utf(data): ... +def prepend_scheme_if_needed(url, new_scheme): ... +def get_auth_from_url(url): ... +def to_native_string(string, encoding=...): ... +def urldefragauth(url): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi new file mode 100644 index 0000000..6221b4e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi @@ -0,0 +1,13 @@ +from typing import Any, IO, Text, Union + +from simplejson.scanner import JSONDecodeError as JSONDecodeError +from simplejson.decoder import JSONDecoder as JSONDecoder +from simplejson.encoder import JSONEncoder as JSONEncoder, JSONEncoderForHTML as JSONEncoderForHTML + +_LoadsString = Union[Text, bytes, bytearray] + + +def dumps(obj: Any, *args: Any, **kwds: Any) -> str: ... +def dump(obj: Any, fp: IO[str], *args: Any, **kwds: Any) -> None: ... +def loads(s: _LoadsString, **kwds: Any) -> Any: ... +def load(fp: IO[str], **kwds: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi new file mode 100644 index 0000000..59111ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi @@ -0,0 +1,6 @@ +from typing import Any, Match + +class JSONDecoder(object): + def __init__(self, **kwargs): ... + def decode(self, s: str, _w: Match[str], _PY3: bool): ... + def raw_decode(self, s: str, idx: int, _w: Match[str], _PY3: bool): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi new file mode 100644 index 0000000..0e31806 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi @@ -0,0 +1,9 @@ +from typing import Any, IO + +class JSONEncoder(object): + def __init__(self, *args, **kwargs): ... + def encode(self, o: Any): ... + def default(self, o: Any): ... + def iterencode(self, o: Any, _one_shot: bool): ... + +class JSONEncoderForHTML(JSONEncoder): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi new file mode 100644 index 0000000..5de484a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi @@ -0,0 +1,11 @@ +from typing import Optional + +class JSONDecodeError(ValueError): + msg: str = ... + doc: str = ... + pos: int = ... + end: Optional[int] = ... + lineno: int = ... + colno: int = ... + endlineno: Optional[int] = ... + endcolno: Optional[int] = ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi new file mode 100644 index 0000000..e89ac12 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Generic, Mapping, Optional, TypeVar, overload + + +_T = TypeVar("_T") + + +class _SingleDispatchCallable(Generic[_T]): + registry: Mapping[Any, Callable[..., _T]] + def dispatch(self, cls: Any) -> Callable[..., _T]: ... + @overload + def register(self, cls: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + @overload + def register(self, cls: Any, func: Callable[..., _T]) -> Callable[..., _T]: ... + def _clear_cache(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + +def singledispatch(func: Callable[..., _T]) -> _SingleDispatchCallable[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi new file mode 100644 index 0000000..a360515 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi @@ -0,0 +1,18 @@ +# Stub for tabulate: https://bitbucket.org/astanin/python-tabulate +from typing import Any, Dict, Iterable, Sequence, Union + + +def __getattr__(name: str) -> Any: ... + +def tabulate( + tabular_data: Iterable[Iterable[Any]], + headers: Union[str, Dict[str, str], Sequence[str]] = ..., + tablefmt: str = ..., + floatfmt: str = ..., + numalign: str = ..., + stralign: str = ..., + missingval: str = ..., + showindex: str = ..., + disable_numparse: bool = ... +) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi new file mode 100644 index 0000000..e1ad18b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi @@ -0,0 +1,21 @@ +# Stub for termcolor: https://pypi.python.org/pypi/termcolor +from typing import Any, Iterable, Optional, Text + + +def colored( + text: Text, + color: Optional[Text] = ..., + on_color: Optional[Text] = ..., + attrs: Optional[Iterable[Text]] = ..., +) -> Text: + ... + + +def cprint( + text: Text, + color: Optional[Text] = ..., + on_color: Optional[Text] = ..., + attrs: Optional[Iterable[Text]] = ..., + **kwargs: Any, +) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/toml.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/toml.pyi new file mode 100644 index 0000000..2639178 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/toml.pyi @@ -0,0 +1,24 @@ +from typing import Any, IO, List, Mapping, MutableMapping, Optional, Protocol, Text, Type, Union +import datetime +import sys + +if sys.version_info >= (3, 4): + import pathlib + if sys.version_info >= (3, 6): + import os + _PathLike = Union[Text, pathlib.PurePath, os.PathLike] + else: + _PathLike = Union[Text, pathlib.PurePath] +else: + _PathLike = Text + +class _Writable(Protocol): + def write(self, obj: str) -> Any: ... + +class TomlDecodeError(Exception): ... + +def load(f: Union[_PathLike, List[Text], IO[str]], _dict: Type[MutableMapping[str, Any]] = ...) -> MutableMapping[str, Any]: ... +def loads(s: Text, _dict: Type[MutableMapping[str, Any]] = ...) -> MutableMapping[str, Any]: ... + +def dump(o: Mapping[str, Any], f: _Writable) -> str: ... +def dumps(o: Mapping[str, Any]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi new file mode 100644 index 0000000..fdc9d87 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi @@ -0,0 +1,58 @@ +import abc +import sys +from typing import Callable +from typing import ClassVar as ClassVar +from typing import ContextManager as ContextManager +from typing import Counter as Counter +from typing import DefaultDict as DefaultDict +from typing import Deque as Deque +from typing import NewType as NewType +from typing import NoReturn as NoReturn +from typing import overload as overload +from typing import Text as Text +from typing import Type as Type +from typing import TYPE_CHECKING as TYPE_CHECKING +from typing import TypeVar, Any, Mapping, ItemsView, KeysView, ValuesView, Dict, Type + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) +_TC = TypeVar('_TC', bound=Type[object]) +class _SpecialForm: + def __getitem__(self, typeargs: Any) -> Any: ... +def runtime(cls: _TC) -> _TC: ... +Protocol: _SpecialForm = ... +Final: _SpecialForm = ... +def final(f: _F) -> _F: ... +Literal: _SpecialForm = ... + +# Internal mypy fallback type for all typed dicts (does not exist at runtime) +class _TypedDict(Mapping[str, object], metaclass=abc.ABCMeta): + def copy(self: _T) -> _T: ... + # Using NoReturn so that only calls using mypy plugin hook that specialize the signature + # can go through. + def setdefault(self, k: NoReturn, default: object) -> object: ... + # Mypy plugin hook for 'pop' expects that 'default' has a type variable type. + def pop(self, k: NoReturn, default: _T = ...) -> object: ... + def update(self: _T, __m: _T) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, k: str) -> bool: ... + def viewitems(self) -> ItemsView[str, object]: ... + def viewkeys(self) -> KeysView[str]: ... + def viewvalues(self) -> ValuesView[object]: ... + def __delitem__(self, k: NoReturn) -> None: ... + +# TypedDict is a (non-subscriptable) special form. +TypedDict: object = ... + +if sys.version_info >= (3, 3): + from typing import ChainMap as ChainMap + +if sys.version_info >= (3, 5): + from typing import AsyncIterable as AsyncIterable + from typing import AsyncIterator as AsyncIterator + from typing import AsyncContextManager as AsyncContextManager + from typing import Awaitable as Awaitable + from typing import Coroutine as Coroutine + +if sys.version_info >= (3, 6): + from typing import AsyncGenerator as AsyncGenerator diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/ujson.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/ujson.pyi new file mode 100644 index 0000000..7e00659 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/ujson.pyi @@ -0,0 +1,51 @@ +# Stubs for ujson +# See: https://pypi.python.org/pypi/ujson +from typing import Any, AnyStr, IO, Optional + +__version__: str + +def encode( + obj: Any, + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> str: ... + +def dumps( + obj: Any, + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> str: ... + +def dump( + obj: Any, + fp: IO[str], + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> None: ... + +def decode( + s: AnyStr, + precise_float: bool = ..., +) -> Any: ... + +def loads( + s: AnyStr, + precise_float: bool = ..., +) -> Any: ... + +def load( + fp: IO[AnyStr], + precise_float: bool = ..., +) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi new file mode 100644 index 0000000..2de398a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi @@ -0,0 +1,150 @@ +from types import ModuleType +from typing import Any + +from werkzeug import _internal +from werkzeug import datastructures +from werkzeug import debug +from werkzeug import exceptions +from werkzeug import formparser +from werkzeug import http +from werkzeug import local +from werkzeug import security +from werkzeug import serving +from werkzeug import test +from werkzeug import testapp +from werkzeug import urls +from werkzeug import useragents +from werkzeug import utils +from werkzeug import wrappers +from werkzeug import wsgi + +class module(ModuleType): + def __getattr__(self, name): ... + def __dir__(self): ... + + +__version__: Any + +run_simple = serving.run_simple +test_app = testapp.test_app +UserAgent = useragents.UserAgent +_easteregg = _internal._easteregg +DebuggedApplication = debug.DebuggedApplication +MultiDict = datastructures.MultiDict +CombinedMultiDict = datastructures.CombinedMultiDict +Headers = datastructures.Headers +EnvironHeaders = datastructures.EnvironHeaders +ImmutableList = datastructures.ImmutableList +ImmutableDict = datastructures.ImmutableDict +ImmutableMultiDict = datastructures.ImmutableMultiDict +TypeConversionDict = datastructures.TypeConversionDict +ImmutableTypeConversionDict = datastructures.ImmutableTypeConversionDict +Accept = datastructures.Accept +MIMEAccept = datastructures.MIMEAccept +CharsetAccept = datastructures.CharsetAccept +LanguageAccept = datastructures.LanguageAccept +RequestCacheControl = datastructures.RequestCacheControl +ResponseCacheControl = datastructures.ResponseCacheControl +ETags = datastructures.ETags +HeaderSet = datastructures.HeaderSet +WWWAuthenticate = datastructures.WWWAuthenticate +Authorization = datastructures.Authorization +FileMultiDict = datastructures.FileMultiDict +CallbackDict = datastructures.CallbackDict +FileStorage = datastructures.FileStorage +OrderedMultiDict = datastructures.OrderedMultiDict +ImmutableOrderedMultiDict = datastructures.ImmutableOrderedMultiDict +escape = utils.escape +environ_property = utils.environ_property +append_slash_redirect = utils.append_slash_redirect +redirect = utils.redirect +cached_property = utils.cached_property +import_string = utils.import_string +dump_cookie = http.dump_cookie +parse_cookie = http.parse_cookie +unescape = utils.unescape +format_string = utils.format_string +find_modules = utils.find_modules +header_property = utils.header_property +html = utils.html +xhtml = utils.xhtml +HTMLBuilder = utils.HTMLBuilder +validate_arguments = utils.validate_arguments +ArgumentValidationError = utils.ArgumentValidationError +bind_arguments = utils.bind_arguments +secure_filename = utils.secure_filename +BaseResponse = wrappers.BaseResponse +BaseRequest = wrappers.BaseRequest +Request = wrappers.Request +Response = wrappers.Response +AcceptMixin = wrappers.AcceptMixin +ETagRequestMixin = wrappers.ETagRequestMixin +ETagResponseMixin = wrappers.ETagResponseMixin +ResponseStreamMixin = wrappers.ResponseStreamMixin +CommonResponseDescriptorsMixin = wrappers.CommonResponseDescriptorsMixin +UserAgentMixin = wrappers.UserAgentMixin +AuthorizationMixin = wrappers.AuthorizationMixin +WWWAuthenticateMixin = wrappers.WWWAuthenticateMixin +CommonRequestDescriptorsMixin = wrappers.CommonRequestDescriptorsMixin +Local = local.Local +LocalManager = local.LocalManager +LocalProxy = local.LocalProxy +LocalStack = local.LocalStack +release_local = local.release_local +generate_password_hash = security.generate_password_hash +check_password_hash = security.check_password_hash +Client = test.Client +EnvironBuilder = test.EnvironBuilder +create_environ = test.create_environ +run_wsgi_app = test.run_wsgi_app +get_current_url = wsgi.get_current_url +get_host = wsgi.get_host +pop_path_info = wsgi.pop_path_info +peek_path_info = wsgi.peek_path_info +SharedDataMiddleware = wsgi.SharedDataMiddleware +DispatcherMiddleware = wsgi.DispatcherMiddleware +ClosingIterator = wsgi.ClosingIterator +FileWrapper = wsgi.FileWrapper +make_line_iter = wsgi.make_line_iter +LimitedStream = wsgi.LimitedStream +responder = wsgi.responder +wrap_file = wsgi.wrap_file +extract_path_info = wsgi.extract_path_info +parse_etags = http.parse_etags +parse_date = http.parse_date +http_date = http.http_date +cookie_date = http.cookie_date +parse_cache_control_header = http.parse_cache_control_header +is_resource_modified = http.is_resource_modified +parse_accept_header = http.parse_accept_header +parse_set_header = http.parse_set_header +quote_etag = http.quote_etag +unquote_etag = http.unquote_etag +generate_etag = http.generate_etag +dump_header = http.dump_header +parse_list_header = http.parse_list_header +parse_dict_header = http.parse_dict_header +parse_authorization_header = http.parse_authorization_header +parse_www_authenticate_header = http.parse_www_authenticate_header +remove_entity_headers = http.remove_entity_headers +is_entity_header = http.is_entity_header +remove_hop_by_hop_headers = http.remove_hop_by_hop_headers +parse_options_header = http.parse_options_header +dump_options_header = http.dump_options_header +is_hop_by_hop_header = http.is_hop_by_hop_header +unquote_header_value = http.unquote_header_value +quote_header_value = http.quote_header_value +HTTP_STATUS_CODES = http.HTTP_STATUS_CODES +url_decode = urls.url_decode +url_encode = urls.url_encode +url_quote = urls.url_quote +url_quote_plus = urls.url_quote_plus +url_unquote = urls.url_unquote +url_unquote_plus = urls.url_unquote_plus +url_fix = urls.url_fix +Href = urls.Href +iri_to_uri = urls.iri_to_uri +uri_to_iri = urls.uri_to_iri +parse_form_data = formparser.parse_form_data +abort = exceptions.Aborter +Aborter = exceptions.Aborter diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi new file mode 100644 index 0000000..bc4340d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi @@ -0,0 +1,48 @@ +import sys +from typing import Any, Optional, Text + +if sys.version_info < (3,): + import StringIO as BytesIO +else: + from io import StringIO as BytesIO + +PY2: Any +WIN: Any +unichr: Any +text_type: Any +string_types: Any +integer_types: Any +iterkeys: Any +itervalues: Any +iteritems: Any +iterlists: Any +iterlistvalues: Any +int_to_byte: Any +iter_bytes: Any + +def fix_tuple_repr(obj): ... +def implements_iterator(cls): ... +def implements_to_string(cls): ... +def native_string_result(func): ... +def implements_bool(cls): ... + +range_type: Any +NativeStringIO: Any + +def make_literal_wrapper(reference): ... +def normalize_string_tuple(tup): ... +def try_coerce_native(s): ... + +wsgi_get_bytes: Any + +def wsgi_decoding_dance(s, charset: Text = ..., errors: Text = ...): ... +def wsgi_encoding_dance(s, charset: Text = ..., errors: Text = ...): ... +def to_bytes(x, charset: Text = ..., errors: Text = ...): ... +def to_native(x, charset: Text = ..., errors: Text = ...): ... +def reraise(tp, value, tb: Optional[Any] = ...): ... + +imap: Any +izip: Any +ifilter: Any + +def to_unicode(x, charset: Text = ..., errors: Text = ..., allow_none_charset: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi new file mode 100644 index 0000000..64f63a1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +class _Missing: + def __reduce__(self): ... + +class _DictAccessorProperty: + read_only: Any + name: Any + default: Any + load_func: Any + dump_func: Any + __doc__: Any + def __init__(self, name, default: Optional[Any] = ..., load_func: Optional[Any] = ..., dump_func: Optional[Any] = ..., + read_only: Optional[Any] = ..., doc: Optional[Any] = ...): ... + def __get__(self, obj, type: Optional[Any] = ...): ... + def __set__(self, obj, value): ... + def __delete__(self, obj): ... + +def _easteregg(app: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi new file mode 100644 index 0000000..be23222 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi @@ -0,0 +1,29 @@ +from typing import Any, Optional + +class ReloaderLoop: + name: Any + extra_files: Any + interval: float + def __init__(self, extra_files: Optional[Any] = ..., interval: float = ...): ... + def run(self): ... + def restart_with_reloader(self): ... + def trigger_reload(self, filename): ... + def log_reload(self, filename): ... + +class StatReloaderLoop(ReloaderLoop): + name: Any + def run(self): ... + +class WatchdogReloaderLoop(ReloaderLoop): + observable_paths: Any + name: Any + observer_class: Any + event_handler: Any + should_reload: Any + def __init__(self, *args, **kwargs): ... + def trigger_reload(self, filename): ... + def run(self): ... + +reloader_loops: Any + +def run_with_reloader(main_func, extra_files: Optional[Any] = ..., interval: float = ..., reloader_type: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi new file mode 100644 index 0000000..d02a482 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi @@ -0,0 +1,50 @@ +from typing import Any, Optional + +XHTML_NAMESPACE: Any + +def format_iso8601(obj): ... + +class AtomFeed: + default_generator: Any + title: Any + title_type: Any + url: Any + feed_url: Any + id: Any + updated: Any + author: Any + icon: Any + logo: Any + rights: Any + rights_type: Any + subtitle: Any + subtitle_type: Any + generator: Any + links: Any + entries: Any + def __init__(self, title: Optional[Any] = ..., entries: Optional[Any] = ..., **kwargs): ... + def add(self, *args, **kwargs): ... + def generate(self): ... + def to_string(self): ... + def get_response(self): ... + def __call__(self, environ, start_response): ... + +class FeedEntry: + title: Any + title_type: Any + content: Any + content_type: Any + url: Any + id: Any + updated: Any + summary: Any + summary_type: Any + author: Any + published: Any + rights: Any + links: Any + categories: Any + xml_base: Any + def __init__(self, title: Optional[Any] = ..., content: Optional[Any] = ..., feed_url: Optional[Any] = ..., **kwargs): ... + def generate(self): ... + def to_string(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi new file mode 100644 index 0000000..9ef76da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi @@ -0,0 +1,84 @@ +from typing import Any, Optional + +class BaseCache: + default_timeout: float + def __init__(self, default_timeout: float = ...): ... + def get(self, key): ... + def delete(self, key): ... + def get_many(self, *keys): ... + def get_dict(self, *keys): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + +class NullCache(BaseCache): ... + +class SimpleCache(BaseCache): + clear: Any + def __init__(self, threshold: int = ..., default_timeout: float = ...): ... + def get(self, key): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def has(self, key): ... + +class MemcachedCache(BaseCache): + key_prefix: Any + def __init__(self, servers: Optional[Any] = ..., default_timeout: float = ..., key_prefix: Optional[Any] = ...): ... + def get(self, key): ... + def get_dict(self, *keys): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def get_many(self, *keys): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + def import_preferred_memcache_lib(self, servers): ... + +GAEMemcachedCache: Any + +class RedisCache(BaseCache): + key_prefix: Any + def __init__(self, host: str = ..., port: int = ..., password: Optional[Any] = ..., db: int = ..., + default_timeout: float = ..., key_prefix: Optional[Any] = ..., **kwargs): ... + def dump_object(self, value): ... + def load_object(self, value): ... + def get(self, key): ... + def get_many(self, *keys): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + +class FileSystemCache(BaseCache): + def __init__(self, cache_dir, threshold: int = ..., default_timeout: float = ..., mode: int = ...): ... + def clear(self): ... + def get(self, key): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def has(self, key): ... + +class UWSGICache(BaseCache): + cache: Any + def __init__(self, default_timeout: float = ..., cache: str = ...): ... + def get(self, key): ... + def delete(self, key): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def clear(self): ... + def has(self, key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi new file mode 100644 index 0000000..97c6e56 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi @@ -0,0 +1,38 @@ +from typing import Any, Sequence, Optional, Iterable +from wsgiref.types import WSGIApplication, WSGIEnvironment, StartResponse + +class CGIRootFix: + app: Any + app_root: Any + def __init__(self, app, app_root: str = ...): ... + def __call__(self, environ, start_response): ... + +LighttpdCGIRootFix: Any + +class PathInfoFromRequestUriFix: + app: Any + def __init__(self, app): ... + def __call__(self, environ, start_response): ... + +class ProxyFix(object): + app: WSGIApplication + num_proxies: int + def __init__(self, app: WSGIApplication, num_proxies: int = ...) -> None: ... + def get_remote_addr(self, forwarded_for: Sequence[str]) -> Optional[str]: ... + def __call__(self, environ: WSGIEnvironment, start_response: StartResponse) -> Iterable[bytes]: ... + +class HeaderRewriterFix: + app: Any + remove_headers: Any + add_headers: Any + def __init__(self, app, remove_headers: Optional[Any] = ..., add_headers: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +class InternetExplorerFix: + app: Any + fix_vary: Any + fix_attach: Any + def __init__(self, app, fix_vary: bool = ..., fix_attach: bool = ...): ... + def fix_headers(self, environ, headers, status: Optional[Any] = ...): ... + def run_fixed(self, environ, start_response): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi new file mode 100644 index 0000000..c7ce70c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi @@ -0,0 +1,39 @@ +from typing import Any, Optional, Text, Union + +greenlet: Any + +class IterIO: + def __new__(cls, obj, sentinel: Union[Text, bytes] = ...): ... + def __iter__(self): ... + def tell(self): ... + def isatty(self): ... + def seek(self, pos, mode: int = ...): ... + def truncate(self, size: Optional[Any] = ...): ... + def write(self, s): ... + def writelines(self, list): ... + def read(self, n: int = ...): ... + def readlines(self, sizehint: int = ...): ... + def readline(self, length: Optional[Any] = ...): ... + def flush(self): ... + def __next__(self): ... + +class IterI(IterIO): + sentinel: Any + def __new__(cls, func, sentinel: Union[Text, bytes] = ...): ... + closed: Any + def close(self): ... + def write(self, s): ... + def writelines(self, list): ... + def flush(self): ... + +class IterO(IterIO): + sentinel: Any + closed: Any + pos: Any + def __new__(cls, gen, sentinel: Union[Text, bytes] = ...): ... + def __iter__(self): ... + def close(self): ... + def seek(self, pos, mode: int = ...): ... + def read(self, n: int = ...): ... + def readline(self, length: Optional[Any] = ...): ... + def readlines(self, sizehint: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi new file mode 100644 index 0000000..46f1972 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi @@ -0,0 +1,10 @@ +from typing import Any + +def dumps(*args): ... +def render_template(name_parts, rules, converters): ... +def generate_map(map, name: str = ...): ... +def generate_adapter(adapter, name: str = ..., map_name: str = ...): ... +def js_to_url_function(converter): ... +def NumberConverter_js_to_url(conv): ... + +js_to_url_functions: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi new file mode 100644 index 0000000..0734a24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi @@ -0,0 +1,7 @@ +from typing import Any + +class StreamLimitMiddleware: + app: Any + maximum_size: Any + def __init__(self, app, maximum_size=...): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi new file mode 100644 index 0000000..7fd7c6a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi @@ -0,0 +1,43 @@ +from typing import Any + +class WSGIWarning(Warning): ... +class HTTPWarning(Warning): ... + +def check_string(context, obj, stacklevel: int = ...): ... + +class InputStream: + def __init__(self, stream): ... + def read(self, *args): ... + def readline(self, *args): ... + def __iter__(self): ... + def close(self): ... + +class ErrorStream: + def __init__(self, stream): ... + def write(self, s): ... + def flush(self): ... + def writelines(self, seq): ... + def close(self): ... + +class GuardedWrite: + def __init__(self, write, chunks): ... + def __call__(self, s): ... + +class GuardedIterator: + closed: Any + headers_set: Any + chunks: Any + def __init__(self, iterator, headers_set, chunks): ... + def __iter__(self): ... + def next(self): ... + def close(self): ... + def __del__(self): ... + +class LintMiddleware: + app: Any + def __init__(self, app): ... + def check_environ(self, environ): ... + def check_start_response(self, status, headers, exc_info): ... + def check_headers(self, headers): ... + def check_iterator(self, app_iter): ... + def __call__(self, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi new file mode 100644 index 0000000..601c4f1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi @@ -0,0 +1,15 @@ +from typing import Any, Optional + +available: Any + +class MergeStream: + streams: Any + def __init__(self, *streams): ... + def write(self, data): ... + +class ProfilerMiddleware: + def __init__(self, app, stream: Optional[Any] = ..., sort_by=..., restrictions=..., profile_dir: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +def make_action(app_factory, hostname: str = ..., port: int = ..., threaded: bool = ..., processes: int = ..., + stream: Optional[Any] = ..., sort_by=..., restrictions=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi new file mode 100644 index 0000000..009ad2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi @@ -0,0 +1,28 @@ +from typing import Any, Optional +from hmac import new as hmac +from hashlib import sha1 as _default_hash +from werkzeug.contrib.sessions import ModificationTrackingDict + +class UnquoteError(Exception): ... + +class SecureCookie(ModificationTrackingDict): + hash_method: Any + serialization_method: Any + quote_base64: Any + secret_key: Any + new: Any + def __init__(self, data: Optional[Any] = ..., secret_key: Optional[Any] = ..., new: bool = ...): ... + @property + def should_save(self): ... + @classmethod + def quote(cls, value): ... + @classmethod + def unquote(cls, value): ... + def serialize(self, expires: Optional[Any] = ...): ... + @classmethod + def unserialize(cls, string, secret_key): ... + @classmethod + def load_cookie(cls, request, key: str = ..., secret_key: Optional[Any] = ...): ... + def save_cookie(self, response, key: str = ..., expires: Optional[Any] = ..., session_expires: Optional[Any] = ..., + max_age: Optional[Any] = ..., path: str = ..., domain: Optional[Any] = ..., secure: Optional[Any] = ..., + httponly: bool = ..., force: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi new file mode 100644 index 0000000..b4b4ec2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi @@ -0,0 +1,57 @@ +from typing import Any, Optional, Text +from werkzeug.datastructures import CallbackDict + +def generate_key(salt: Optional[Any] = ...): ... + +class ModificationTrackingDict(CallbackDict): + modified: Any + def __init__(self, *args, **kwargs): ... + def copy(self): ... + def __copy__(self): ... + +class Session(ModificationTrackingDict): + sid: Any + new: Any + def __init__(self, data, sid, new: bool = ...): ... + @property + def should_save(self): ... + +class SessionStore: + session_class: Any + def __init__(self, session_class: Optional[Any] = ...): ... + def is_valid_key(self, key): ... + def generate_key(self, salt: Optional[Any] = ...): ... + def new(self): ... + def save(self, session): ... + def save_if_modified(self, session): ... + def delete(self, session): ... + def get(self, sid): ... + +class FilesystemSessionStore(SessionStore): + path: Any + filename_template: str + renew_missing: Any + mode: Any + def __init__(self, path: Optional[Any] = ..., filename_template: Text = ..., session_class: Optional[Any] = ..., + renew_missing: bool = ..., mode: int = ...): ... + def get_session_filename(self, sid): ... + def save(self, session): ... + def delete(self, session): ... + def get(self, sid): ... + def list(self): ... + +class SessionMiddleware: + app: Any + store: Any + cookie_name: Any + cookie_age: Any + cookie_expires: Any + cookie_path: Any + cookie_domain: Any + cookie_secure: Any + cookie_httponly: Any + environ_key: Any + def __init__(self, app, store, cookie_name: str = ..., cookie_age: Optional[Any] = ..., cookie_expires: Optional[Any] = ..., + cookie_path: str = ..., cookie_domain: Optional[Any] = ..., cookie_secure: Optional[Any] = ..., + cookie_httponly: bool = ..., environ_key: str = ...): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi new file mode 100644 index 0000000..860ebb7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi @@ -0,0 +1,9 @@ +from typing import Any +from werkzeug.wrappers import Response + +class ContentAccessors: + def xml(self): ... + def lxml(self): ... + def json(self): ... + +class TestResponse(Response, ContentAccessors): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi new file mode 100644 index 0000000..683eda0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi @@ -0,0 +1,27 @@ +from typing import Any + +def is_known_charset(charset): ... + +class JSONRequestMixin: + def json(self): ... + +class ProtobufRequestMixin: + protobuf_check_initialization: Any + def parse_protobuf(self, proto_type): ... + +class RoutingArgsRequestMixin: + routing_args: Any + routing_vars: Any + +class ReverseSlashBehaviorRequestMixin: + def path(self): ... + def script_root(self): ... + +class DynamicCharsetRequestMixin: + default_charset: Any + def unknown_charset(self, charset): ... + def charset(self): ... + +class DynamicCharsetResponseMixin: + default_charset: Any + charset: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi new file mode 100644 index 0000000..f10665f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi @@ -0,0 +1,425 @@ +import collections +from typing import Any, Optional, Mapping, Dict, TypeVar, Callable, Union, overload, Text +from collections import Container, Iterable, MutableSet + +_K = TypeVar("_K") +_V = TypeVar("_V") +_R = TypeVar("_R") +_D = TypeVar("_D") + +def is_immutable(self): ... +def iter_multi_items(mapping): ... +def native_itermethods(names): ... + +class ImmutableListMixin: + def __hash__(self): ... + def __reduce_ex__(self, protocol): ... + def __delitem__(self, key): ... + def __delslice__(self, i, j): ... + def __iadd__(self, other): ... + __imul__: Any + def __setitem__(self, key, value): ... + def __setslice__(self, i, j, value): ... + def append(self, item): ... + remove: Any + def extend(self, iterable): ... + def insert(self, pos, value): ... + def pop(self, index: int = ...): ... + def reverse(self): ... + def sort(self, cmp: Optional[Any] = ..., key: Optional[Any] = ..., reverse: Optional[Any] = ...): ... + +class ImmutableList(ImmutableListMixin, list): ... + +class ImmutableDictMixin: + @classmethod + def fromkeys(cls, *args, **kwargs): ... + def __reduce_ex__(self, protocol): ... + def __hash__(self): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def update(self, *args, **kwargs): ... + def pop(self, key, default: Optional[Any] = ...): ... + def popitem(self): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def clear(self): ... + +class ImmutableMultiDictMixin(ImmutableDictMixin): + def __reduce_ex__(self, protocol): ... + def add(self, key, value): ... + def popitemlist(self): ... + def poplist(self, key): ... + def setlist(self, key, new_list): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + +class UpdateDictMixin: + on_update: Any + def setdefault(self, key, default: Optional[Any] = ...): ... + def pop(self, key, default=...): ... + __setitem__: Any + __delitem__: Any + clear: Any + popitem: Any + update: Any + +class TypeConversionDict(Dict[_K, _V]): + @overload + def get(self, key: _K, *, type: None = ...) -> Optional[_V]: ... + @overload + def get(self, key: _K, default: _D, type: None = ...) -> Union[_V, _D]: ... + @overload + def get(self, key: _K, *, type: Callable[[_V], _R]) -> Optional[_R]: ... + @overload + def get(self, key: _K, default: _D, type: Callable[[_V], _R]) -> Union[_R, _D]: ... + +class ImmutableTypeConversionDict(ImmutableDictMixin, TypeConversionDict[_K, _V]): + def copy(self) -> TypeConversionDict[_K, _V]: ... + def __copy__(self) -> ImmutableTypeConversionDict[_K, _V]: ... + +class ViewItems: + def __init__(self, multi_dict, method, repr_name, *a, **kw): ... + def __iter__(self): ... + +class MultiDict(TypeConversionDict): + def __init__(self, mapping: Optional[Any] = ...): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def add(self, key, value): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def setlist(self, key, new_list): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + def items(self, multi: bool = ...): ... + def lists(self): ... + def keys(self): ... + __iter__: Any + def values(self): ... + def listvalues(self): ... + def copy(self): ... + def deepcopy(self, memo: Optional[Any] = ...): ... + def to_dict(self, flat: bool = ...): ... + def update(self, other_dict): ... + def pop(self, key, default=...): ... + def popitem(self): ... + def poplist(self, key): ... + def popitemlist(self): ... + def __copy__(self): ... + def __deepcopy__(self, memo): ... + +class _omd_bucket: + prev: Any + key: Any + value: Any + next: Any + def __init__(self, omd, key, value): ... + def unlink(self, omd): ... + +class OrderedMultiDict(MultiDict): + def __init__(self, mapping: Optional[Any] = ...): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __reduce_ex__(self, protocol): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def keys(self): ... + __iter__: Any + def values(self): ... + def items(self, multi: bool = ...): ... + def lists(self): ... + def listvalues(self): ... + def add(self, key, value): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def setlist(self, key, new_list): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + def update(self, mapping): ... + def poplist(self, key): ... + def pop(self, key, default=...): ... + def popitem(self): ... + def popitemlist(self): ... + +class Headers(collections.Mapping): + def __init__(self, defaults: Optional[Any] = ...): ... + def __getitem__(self, key, _get_mode: bool = ...): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + @overload + def get(self, key: str, *, type: None = ...) -> Optional[str]: ... + @overload + def get(self, key: str, default: _D, type: None = ...) -> Union[str, _D]: ... + @overload + def get(self, key: str, *, type: Callable[[str], _R]) -> Optional[_R]: ... + @overload + def get(self, key: str, default: _D, type: Callable[[str], _R]) -> Union[_R, _D]: ... + @overload + def get(self, key: str, *, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, *, type: None, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, *, type: Callable[[Any], _R], as_bytes: bool) -> Optional[_R]: ... + @overload + def get(self, key: str, default: Any, type: None, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, default: _D, type: Callable[[Any], _R], as_bytes: bool) -> Union[_R, _D]: ... + def getlist(self, key, type: Optional[Any] = ..., as_bytes: bool = ...): ... + def get_all(self, name): ... + def items(self, lower: bool = ...): ... + def keys(self, lower: bool = ...): ... + def values(self): ... + def extend(self, iterable): ... + def __delitem__(self, key: Any) -> None: ... + def remove(self, key): ... + def pop(self, **kwargs): ... + def popitem(self): ... + def __contains__(self, key): ... + has_key: Any + def __iter__(self): ... + def __len__(self): ... + def add(self, _key, _value, **kw): ... + def add_header(self, _key, _value, **_kw): ... + def clear(self): ... + def set(self, _key, _value, **kw): ... + def setdefault(self, key, value): ... + def __setitem__(self, key, value): ... + def to_list(self, charset: Text = ...): ... + def to_wsgi_list(self): ... + def copy(self): ... + def __copy__(self): ... + +class ImmutableHeadersMixin: + def __delitem__(self, key: str) -> None: ... + def __setitem__(self, key, value): ... + set: Any + def add(self, *args, **kwargs): ... + remove: Any + add_header: Any + def extend(self, iterable): ... + def insert(self, pos, value): ... + def pop(self, **kwargs): ... + def popitem(self): ... + def setdefault(self, key, default): ... + +class EnvironHeaders(ImmutableHeadersMixin, Headers): + environ: Any + def __init__(self, environ): ... + def __eq__(self, other): ... + def __getitem__(self, key, _get_mode: bool = ...): ... + def __len__(self): ... + def __iter__(self): ... + def copy(self): ... + +class CombinedMultiDict(ImmutableMultiDictMixin, MultiDict): + def __reduce_ex__(self, protocol): ... + dicts: Any + def __init__(self, dicts: Optional[Any] = ...): ... + @classmethod + def fromkeys(cls): ... + def __getitem__(self, key): ... + def get(self, key, default: Optional[Any] = ..., type: Optional[Any] = ...): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def keys(self): ... + __iter__: Any + def items(self, multi: bool = ...): ... + def values(self): ... + def lists(self): ... + def listvalues(self): ... + def copy(self): ... + def to_dict(self, flat: bool = ...): ... + def __len__(self): ... + def __contains__(self, key): ... + has_key: Any + +class FileMultiDict(MultiDict): + def add_file(self, name, file, filename: Optional[Any] = ..., content_type: Optional[Any] = ...): ... + +class ImmutableDict(ImmutableDictMixin, dict): + def copy(self): ... + def __copy__(self): ... + +class ImmutableMultiDict(ImmutableMultiDictMixin, MultiDict): + def copy(self): ... + def __copy__(self): ... + +class ImmutableOrderedMultiDict(ImmutableMultiDictMixin, OrderedMultiDict): + def copy(self): ... + def __copy__(self): ... + +class Accept(ImmutableList): + provided: Any + def __init__(self, values=...): ... + def __getitem__(self, key): ... + def quality(self, key): ... + def __contains__(self, value): ... + def index(self, key): ... + def find(self, key): ... + def values(self): ... + def to_header(self): ... + def best_match(self, matches, default: Optional[Any] = ...): ... + @property + def best(self): ... + +class MIMEAccept(Accept): + @property + def accept_html(self): ... + @property + def accept_xhtml(self): ... + @property + def accept_json(self): ... + +class LanguageAccept(Accept): ... +class CharsetAccept(Accept): ... + +def cache_property(key, empty, type): ... + +class _CacheControl(UpdateDictMixin, dict): + no_cache: Any + no_store: Any + max_age: Any + no_transform: Any + on_update: Any + provided: Any + def __init__(self, values=..., on_update: Optional[Any] = ...): ... + def to_header(self): ... + +class RequestCacheControl(ImmutableDictMixin, _CacheControl): + max_stale: Any + min_fresh: Any + no_transform: Any + only_if_cached: Any + +class ResponseCacheControl(_CacheControl): + public: Any + private: Any + must_revalidate: Any + proxy_revalidate: Any + s_maxage: Any + +class CallbackDict(UpdateDictMixin, dict): + on_update: Any + def __init__(self, initial: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + +class HeaderSet(MutableSet): + on_update: Any + def __init__(self, headers: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def add(self, header): ... + def remove(self, header): ... + def update(self, iterable): ... + def discard(self, header): ... + def find(self, header): ... + def index(self, header): ... + def clear(self): ... + def as_set(self, preserve_casing: bool = ...): ... + def to_header(self): ... + def __getitem__(self, idx): ... + def __delitem__(self, idx): ... + def __setitem__(self, idx, value): ... + def __contains__(self, header): ... + def __len__(self): ... + def __iter__(self): ... + def __nonzero__(self): ... + +class ETags(Container, Iterable): + star_tag: Any + def __init__(self, strong_etags: Optional[Any] = ..., weak_etags: Optional[Any] = ..., star_tag: bool = ...): ... + def as_set(self, include_weak: bool = ...): ... + def is_weak(self, etag): ... + def contains_weak(self, etag): ... + def contains(self, etag): ... + def contains_raw(self, etag): ... + def to_header(self): ... + def __call__(self, etag: Optional[Any] = ..., data: Optional[Any] = ..., include_weak: bool = ...): ... + def __bool__(self): ... + __nonzero__: Any + def __iter__(self): ... + def __contains__(self, etag): ... + +class IfRange: + etag: Any + date: Any + def __init__(self, etag: Optional[Any] = ..., date: Optional[Any] = ...): ... + def to_header(self): ... + +class Range: + units: Any + ranges: Any + def __init__(self, units, ranges): ... + def range_for_length(self, length): ... + def make_content_range(self, length): ... + def to_header(self): ... + def to_content_range_header(self, length): ... + +class ContentRange: + on_update: Any + units: Optional[str] + start: Any + stop: Any + length: Any + def __init__(self, units: Optional[str], start, stop, length: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def set(self, start, stop, length: Optional[Any] = ..., units: Optional[str] = ...): ... + def unset(self) -> None: ... + def to_header(self): ... + def __nonzero__(self): ... + __bool__: Any + +class Authorization(ImmutableDictMixin, Dict[str, Any]): + type: str + def __init__(self, auth_type: str, data: Optional[Mapping[str, Any]] = ...) -> None: ... + @property + def username(self) -> Optional[str]: ... + @property + def password(self) -> Optional[str]: ... + @property + def realm(self) -> Optional[str]: ... + @property + def nonce(self) -> Optional[str]: ... + @property + def uri(self) -> Optional[str]: ... + @property + def nc(self) -> Optional[str]: ... + @property + def cnonce(self) -> Optional[str]: ... + @property + def response(self) -> Optional[str]: ... + @property + def opaque(self) -> Optional[str]: ... + @property + def qop(self) -> Optional[str]: ... + +class WWWAuthenticate(UpdateDictMixin, dict): + on_update: Any + def __init__(self, auth_type: Optional[Any] = ..., values: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def set_basic(self, realm: str = ...): ... + def set_digest(self, realm, nonce, qop=..., opaque: Optional[Any] = ..., algorithm: Optional[Any] = ..., + stale: bool = ...): ... + def to_header(self): ... + @staticmethod + def auth_property(name, doc: Optional[Any] = ...): ... + type: Any + realm: Any + domain: Any + nonce: Any + opaque: Any + algorithm: Any + qop: Any + stale: Any + +class FileStorage: + name: Any + stream: Any + filename: Any + headers: Any + def __init__(self, stream: Optional[Any] = ..., filename: Optional[Any] = ..., name: Optional[Any] = ..., + content_type: Optional[Any] = ..., content_length: Optional[Any] = ..., headers: Optional[Any] = ...): ... + @property + def content_type(self): ... + @property + def content_length(self): ... + @property + def mimetype(self): ... + @property + def mimetype_params(self): ... + def save(self, dst, buffer_size: int = ...): ... + def close(self): ... + def __nonzero__(self): ... + __bool__: Any + def __getattr__(self, name): ... + def __iter__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi new file mode 100644 index 0000000..d920ed0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi @@ -0,0 +1,41 @@ +from typing import Any, Optional +from werkzeug.wrappers import BaseRequest as Request, BaseResponse as Response + +PIN_TIME: Any + +def hash_pin(pin): ... +def get_machine_id(): ... + +class _ConsoleFrame: + console: Any + id: Any + def __init__(self, namespace): ... + +def get_pin_and_cookie_name(app): ... + +class DebuggedApplication: + app: Any + evalex: Any + frames: Any + tracebacks: Any + request_key: Any + console_path: Any + console_init_func: Any + show_hidden_frames: Any + secret: Any + pin_logging: Any + pin: Any + def __init__(self, app, evalex: bool = ..., request_key: str = ..., console_path: str = ..., + console_init_func: Optional[Any] = ..., show_hidden_frames: bool = ..., lodgeit_url: Optional[Any] = ..., + pin_security: bool = ..., pin_logging: bool = ...): ... + @property + def pin_cookie_name(self): ... + def debug_application(self, environ, start_response): ... + def execute_command(self, request, command, frame): ... + def display_console(self, request): ... + def paste_traceback(self, request, traceback): ... + def get_resource(self, request, filename): ... + def check_pin_trust(self, environ): ... + def pin_auth(self, request): ... + def log_pin_request(self): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi new file mode 100644 index 0000000..0323377 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi @@ -0,0 +1,44 @@ +from typing import Any, Optional +import code + +class HTMLStringO: + def __init__(self): ... + def isatty(self): ... + def close(self): ... + def flush(self): ... + def seek(self, n, mode: int = ...): ... + def readline(self): ... + def reset(self): ... + def write(self, x): ... + def writelines(self, x): ... + +class ThreadedStream: + @staticmethod + def push(): ... + @staticmethod + def fetch(): ... + @staticmethod + def displayhook(obj): ... + def __setattr__(self, name, value): ... + def __dir__(self): ... + def __getattribute__(self, name): ... + +class _ConsoleLoader: + def __init__(self): ... + def register(self, code, source): ... + def get_source_by_code(self, code): ... + +class _InteractiveConsole(code.InteractiveInterpreter): + globals: Any + more: Any + buffer: Any + def __init__(self, globals, locals): ... + def runsource(self, source): ... + def runcode(self, code): ... + def showtraceback(self): ... + def showsyntaxerror(self, filename: Optional[Any] = ...): ... + def write(self, data): ... + +class Console: + def __init__(self, globals: Optional[Any] = ..., locals: Optional[Any] = ...): ... + def eval(self, code): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi new file mode 100644 index 0000000..4955919 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi @@ -0,0 +1,33 @@ +from typing import Any, Optional + +deque: Any +missing: Any +RegexType: Any +HELP_HTML: Any +OBJECT_DUMP_HTML: Any + +def debug_repr(obj): ... +def dump(obj=...): ... + +class _Helper: + def __call__(self, topic: Optional[Any] = ...): ... + +helper: Any + +class DebugReprGenerator: + def __init__(self): ... + list_repr: Any + tuple_repr: Any + set_repr: Any + frozenset_repr: Any + deque_repr: Any + def regex_repr(self, obj): ... + def string_repr(self, obj, limit: int = ...): ... + def dict_repr(self, d, recursive, limit: int = ...): ... + def object_repr(self, obj): ... + def dispatch_repr(self, obj, recursive): ... + def fallback_repr(self): ... + def repr(self, obj): ... + def dump_object(self, obj): ... + def dump_locals(self, d): ... + def render_object_dump(self, items, title, repr: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi new file mode 100644 index 0000000..90beed9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi @@ -0,0 +1,63 @@ +from typing import Any, Optional + +UTF8_COOKIE: Any +system_exceptions: Any +HEADER: Any +FOOTER: Any +PAGE_HTML: Any +CONSOLE_HTML: Any +SUMMARY_HTML: Any +FRAME_HTML: Any +SOURCE_LINE_HTML: Any + +def render_console_html(secret, evalex_trusted: bool = ...): ... +def get_current_traceback(ignore_system_exceptions: bool = ..., show_hidden_frames: bool = ..., skip: int = ...): ... + +class Line: + lineno: Any + code: Any + in_frame: Any + current: Any + def __init__(self, lineno, code): ... + def classes(self): ... + def render(self): ... + +class Traceback: + exc_type: Any + exc_value: Any + exception_type: Any + frames: Any + def __init__(self, exc_type, exc_value, tb): ... + def filter_hidden_frames(self): ... + def is_syntax_error(self): ... + def exception(self): ... + def log(self, logfile: Optional[Any] = ...): ... + def paste(self): ... + def render_summary(self, include_title: bool = ...): ... + def render_full(self, evalex: bool = ..., secret: Optional[Any] = ..., evalex_trusted: bool = ...): ... + def generate_plaintext_traceback(self): ... + def plaintext(self): ... + id: Any + +class Frame: + lineno: Any + function_name: Any + locals: Any + globals: Any + filename: Any + module: Any + loader: Any + code: Any + hide: Any + info: Any + def __init__(self, exc_type, exc_value, tb): ... + def render(self): ... + def render_line_context(self): ... + def get_annotated_lines(self): ... + def eval(self, code, mode: str = ...): ... + def sourcelines(self): ... + def get_context_lines(self, context: int = ...): ... + @property + def current_line(self): ... + def console(self): ... + id: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi new file mode 100644 index 0000000..3686046 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi @@ -0,0 +1,161 @@ +from typing import Any, Dict, Tuple, List, Text, NoReturn, Optional, Protocol, Type, Union, Iterable + +from wsgiref.types import WSGIEnvironment, StartResponse +from werkzeug.wrappers import Response + +class _EnvironContainer(Protocol): + @property + def environ(self) -> WSGIEnvironment: ... + +class HTTPException(Exception): + code: Optional[int] + description: Optional[str] + response: Optional[Response] + def __init__(self, description: Optional[str] = ..., response: Optional[Response] = ...) -> None: ... + @classmethod + def wrap(cls, exception: Type[Exception], name: Optional[str] = ...) -> Any: ... + @property + def name(self) -> str: ... + def get_description(self, environ: Optional[WSGIEnvironment] = ...) -> Text: ... + def get_body(self, environ: Optional[WSGIEnvironment] = ...) -> Text: ... + def get_headers(self, environ: Optional[WSGIEnvironment] = ...) -> List[Tuple[str, str]]: ... + def get_response(self, environ: Optional[Union[WSGIEnvironment, _EnvironContainer]] = ...) -> Response: ... + def __call__(self, environ: WSGIEnvironment, start_response: StartResponse) -> Iterable[bytes]: ... + +default_exceptions: Dict[int, Type[HTTPException]] + +class BadRequest(HTTPException): + code: int + description: str + +class ClientDisconnected(BadRequest): ... +class SecurityError(BadRequest): ... +class BadHost(BadRequest): ... + +class Unauthorized(HTTPException): + code: int + description: str + +class Forbidden(HTTPException): + code: int + description: str + +class NotFound(HTTPException): + code: int + description: str + +class MethodNotAllowed(HTTPException): + code: int + description: str + valid_methods: Any + def __init__(self, valid_methods: Optional[Any] = ..., description: Optional[Any] = ...): ... + def get_headers(self, environ): ... + +class NotAcceptable(HTTPException): + code: int + description: str + +class RequestTimeout(HTTPException): + code: int + description: str + +class Conflict(HTTPException): + code: int + description: str + +class Gone(HTTPException): + code: int + description: str + +class LengthRequired(HTTPException): + code: int + description: str + +class PreconditionFailed(HTTPException): + code: int + description: str + +class RequestEntityTooLarge(HTTPException): + code: int + description: str + +class RequestURITooLarge(HTTPException): + code: int + description: str + +class UnsupportedMediaType(HTTPException): + code: int + description: str + +class RequestedRangeNotSatisfiable(HTTPException): + code: int + description: str + length: Any + units: str + def __init__(self, length: Optional[Any] = ..., units: str = ..., description: Optional[Any] = ...): ... + def get_headers(self, environ): ... + +class ExpectationFailed(HTTPException): + code: int + description: str + +class ImATeapot(HTTPException): + code: int + description: str + +class UnprocessableEntity(HTTPException): + code: int + description: str + +class Locked(HTTPException): + code: int + description: str + +class PreconditionRequired(HTTPException): + code: int + description: str + +class TooManyRequests(HTTPException): + code: int + description: str + +class RequestHeaderFieldsTooLarge(HTTPException): + code: int + description: str + +class UnavailableForLegalReasons(HTTPException): + code: int + description: str + +class InternalServerError(HTTPException): + code: int + description: str + +class NotImplemented(HTTPException): + code: int + description: str + +class BadGateway(HTTPException): + code: int + description: str + +class ServiceUnavailable(HTTPException): + code: int + description: str + +class GatewayTimeout(HTTPException): + code: int + description: str + +class HTTPVersionNotSupported(HTTPException): + code: int + description: str + +class Aborter: + mapping: Any + def __init__(self, mapping: Optional[Any] = ..., extra: Optional[Any] = ...) -> None: ... + def __call__(self, code: Union[int, Response], *args: Any, **kwargs: Any) -> NoReturn: ... + +def abort(status: Union[int, Response], *args: Any, **kwargs: Any) -> NoReturn: ... + +class BadRequestKeyError(BadRequest, KeyError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi new file mode 100644 index 0000000..58695fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi @@ -0,0 +1,7 @@ +from typing import Any + +has_likely_buggy_unicode_filesystem: Any + +class BrokenFilesystemWarning(RuntimeWarning, UnicodeWarning): ... + +def get_filesystem_encoding(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi new file mode 100644 index 0000000..d0e6a73 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional, Text + +def default_stream_factory(total_content_length, filename, content_type, content_length: Optional[Any] = ...): ... +def parse_form_data(environ, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., max_content_length: Optional[Any] = ..., + cls: Optional[Any] = ..., silent: bool = ...): ... +def exhaust_stream(f): ... + +class FormDataParser: + stream_factory: Any + charset: Text + errors: Text + max_form_memory_size: Any + max_content_length: Any + cls: Any + silent: Any + def __init__(self, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., max_content_length: Optional[Any] = ..., cls: Optional[Any] = ..., + silent: bool = ...): ... + def get_parse_func(self, mimetype, options): ... + def parse_from_environ(self, environ): ... + def parse(self, stream, mimetype, content_length, options: Optional[Any] = ...): ... + parse_functions: Any + +def is_valid_multipart_boundary(boundary): ... +def parse_multipart_headers(iterable): ... + +class MultiPartParser: + charset: Text + errors: Text + max_form_memory_size: Any + stream_factory: Any + cls: Any + buffer_size: Any + def __init__(self, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., cls: Optional[Any] = ..., buffer_size=...): ... + def fail(self, message): ... + def get_part_encoding(self, headers): ... + def get_part_charset(self, headers) -> Text: ... + def start_file_streaming(self, filename, headers, total_content_length): ... + def in_memory_threshold_reached(self, bytes): ... + def validate_boundary(self, boundary): ... + def parse_lines(self, file, boundary, content_length, cap_at_buffer: bool = ...): ... + def parse_parts(self, file, boundary, content_length): ... + def parse(self, file, boundary, content_length): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi new file mode 100644 index 0000000..2e078ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi @@ -0,0 +1,92 @@ +import sys +from datetime import datetime, timedelta +from typing import ( + Dict, Text, Union, Tuple, Any, Optional, Mapping, Iterable, Callable, List, Type, + TypeVar, Protocol, overload, SupportsInt, +) +from wsgiref.types import WSGIEnvironment + +from .datastructures import ( + Headers, Accept, RequestCacheControl, HeaderSet, Authorization, WWWAuthenticate, + IfRange, Range, ContentRange, ETags, TypeConversionDict, +) + +if sys.version_info < (3,): + _Str = TypeVar('_Str', str, unicode) + _ToBytes = Union[bytes, bytearray, buffer, unicode] + _ETagData = Union[str, unicode, bytearray, buffer, memoryview] +else: + _Str = str + _ToBytes = Union[bytes, bytearray, memoryview, str] + _ETagData = Union[bytes, bytearray, memoryview] + +_T = TypeVar("_T") +_U = TypeVar("_U") + +HTTP_STATUS_CODES: Dict[int, str] + +def wsgi_to_bytes(data: Union[bytes, Text]) -> bytes: ... +def bytes_to_wsgi(data: bytes) -> str: ... +def quote_header_value(value: Any, extra_chars: str = ..., allow_token: bool = ...) -> str: ... +def unquote_header_value(value: _Str, is_filename: bool = ...) -> _Str: ... +def dump_options_header(header: Optional[_Str], options: Mapping[_Str, Any]) -> _Str: ... +def dump_header(iterable: Union[Iterable[Any], Dict[_Str, Any]], allow_token: bool = ...) -> _Str: ... +def parse_list_header(value: _Str) -> List[_Str]: ... +@overload +def parse_dict_header(value: Union[bytes, Text]) -> Dict[Text, Optional[Text]]: ... +@overload +def parse_dict_header(value: Union[bytes, Text], cls: Type[_T]) -> _T: ... +@overload +def parse_options_header(value: None, multiple: bool = ...) -> Tuple[str, Dict[str, Optional[str]]]: ... +@overload +def parse_options_header(value: _Str) -> Tuple[_Str, Dict[_Str, Optional[_Str]]]: ... +# actually returns Tuple[_Str, Dict[_Str, Optional[_Str]], ...] +@overload +def parse_options_header(value: _Str, multiple: bool = ...) -> Tuple[Any, ...]: ... +@overload +def parse_accept_header(value: Optional[Text]) -> Accept: ... +@overload +def parse_accept_header(value: Optional[_Str], cls: Callable[[Optional[_Str]], _T]) -> _T: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], + on_update: Optional[Callable[[RequestCacheControl], Any]] = ...) -> RequestCacheControl: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], on_update: _T, + cls: Callable[[Dict[Text, Optional[Text]], _T], _U]) -> _U: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], *, + cls: Callable[[Dict[Text, Optional[Text]], None], _U]) -> _U: ... +def parse_set_header(value: Text, on_update: Optional[Callable[[HeaderSet], Any]] = ...) -> HeaderSet: ... +def parse_authorization_header(value: Union[None, bytes, Text]) -> Optional[Authorization]: ... +def parse_www_authenticate_header(value: Union[None, bytes, Text], + on_update: Optional[Callable[[WWWAuthenticate], Any]] = ...) -> WWWAuthenticate: ... +def parse_if_range_header(value: Optional[Text]) -> IfRange: ... +def parse_range_header(value: Optional[Text], make_inclusive: bool = ...) -> Optional[Range]: ... +def parse_content_range_header(value: Optional[Text], + on_update: Optional[Callable[[ContentRange], Any]] = ...) -> Optional[ContentRange]: ... +def quote_etag(etag: _Str, weak: bool = ...) -> _Str: ... +def unquote_etag(etag: Optional[_Str]) -> Tuple[Optional[_Str], Optional[_Str]]: ... +def parse_etags(value: Optional[Text]) -> ETags: ... +def generate_etag(data: _ETagData) -> str: ... +def parse_date(value: Optional[str]) -> Optional[datetime]: ... +def cookie_date(expires: Union[None, float, datetime] = ...) -> str: ... +def http_date(timestamp: Union[None, float, datetime] = ...) -> str: ... +def parse_age(value: Optional[SupportsInt] = ...) -> Optional[timedelta]: ... +def dump_age(age: Union[None, timedelta, SupportsInt]) -> Optional[str]: ... +def is_resource_modified(environ: WSGIEnvironment, etag: Optional[Text] = ..., data: Optional[_ETagData] = ..., + last_modified: Union[None, Text, datetime] = ..., ignore_if_range: bool = ...) -> bool: ... +def remove_entity_headers(headers: Union[List[Tuple[Text, Text]], Headers], allowed: Iterable[Text] = ...) -> None: ... +def remove_hop_by_hop_headers(headers: Union[List[Tuple[Text, Text]], Headers]) -> None: ... +def is_entity_header(header: Text) -> bool: ... +def is_hop_by_hop_header(header: Text) -> bool: ... +@overload +def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., + errors: Text = ...) -> TypeConversionDict: ... +@overload +def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., + errors: Text = ..., cls: Optional[Callable[[Iterable[Tuple[Text, Text]]], _T]] = ...) -> _T: ... +def dump_cookie(key: _ToBytes, value: _ToBytes = ..., max_age: Union[None, float, timedelta] = ..., + expires: Union[None, Text, float, datetime] = ..., path: Union[None, tuple, str, bytes] = ..., + domain: Union[None, str, bytes] = ..., secure: bool = ..., httponly: bool = ..., charset: Text = ..., + sync_expires: bool = ...) -> str: ... +def is_byte_range_valid(start: Optional[int], stop: Optional[int], length: Optional[int]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi new file mode 100644 index 0000000..0fe642d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi @@ -0,0 +1,100 @@ +from typing import Any, Optional + +def release_local(local): ... + +class Local: + def __init__(self): ... + def __iter__(self): ... + def __call__(self, proxy): ... + def __release_local__(self): ... + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def __delattr__(self, name): ... + +class LocalStack: + def __init__(self): ... + def __release_local__(self): ... + def _get__ident_func__(self): ... + def _set__ident_func__(self, value): ... + __ident_func__: Any + def __call__(self): ... + def push(self, obj): ... + def pop(self): ... + @property + def top(self): ... + +class LocalManager: + locals: Any + ident_func: Any + def __init__(self, locals: Optional[Any] = ..., ident_func: Optional[Any] = ...): ... + def get_ident(self): ... + def cleanup(self): ... + def make_middleware(self, app): ... + def middleware(self, func): ... + +class LocalProxy: + def __init__(self, local, name: Optional[Any] = ...): ... + @property + def __dict__(self): ... + def __bool__(self): ... + def __unicode__(self): ... + def __dir__(self): ... + def __getattr__(self, name): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + __getslice__: Any + def __setslice__(self, i, j, seq): ... + def __delslice__(self, i, j): ... + __setattr__: Any + __delattr__: Any + __lt__: Any + __le__: Any + __eq__: Any + __ne__: Any + __gt__: Any + __ge__: Any + __cmp__: Any + __hash__: Any + __call__: Any + __len__: Any + __getitem__: Any + __iter__: Any + __contains__: Any + __add__: Any + __sub__: Any + __mul__: Any + __floordiv__: Any + __mod__: Any + __divmod__: Any + __pow__: Any + __lshift__: Any + __rshift__: Any + __and__: Any + __xor__: Any + __or__: Any + __div__: Any + __truediv__: Any + __neg__: Any + __pos__: Any + __abs__: Any + __invert__: Any + __complex__: Any + __int__: Any + __long__: Any + __float__: Any + __oct__: Any + __hex__: Any + __index__: Any + __coerce__: Any + __enter__: Any + __exit__: Any + __radd__: Any + __rsub__: Any + __rmul__: Any + __rdiv__: Any + __rtruediv__: Any + __rfloordiv__: Any + __rmod__: Any + __rdivmod__: Any + __copy__: Any + __deepcopy__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi new file mode 100644 index 0000000..f666929 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi @@ -0,0 +1,7 @@ +from typing import Any +from ._compat import to_unicode as to_unicode +from .filesystem import get_filesystem_encoding as get_filesystem_encoding + +can_rename_open_file: Any + +def rename(src, dst): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi new file mode 100644 index 0000000..347af55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi @@ -0,0 +1,189 @@ +from typing import Any, Optional, Text +from werkzeug.exceptions import HTTPException + +def parse_converter_args(argstr): ... +def parse_rule(rule): ... + +class RoutingException(Exception): ... + +class RequestRedirect(HTTPException, RoutingException): + code: Any + new_url: Any + def __init__(self, new_url): ... + def get_response(self, environ): ... + +class RequestSlash(RoutingException): ... + +class RequestAliasRedirect(RoutingException): + matched_values: Any + def __init__(self, matched_values): ... + +class BuildError(RoutingException, LookupError): + endpoint: Any + values: Any + method: Any + adapter: Optional[MapAdapter] + def __init__(self, endpoint, values, method, adapter: Optional[MapAdapter] = ...) -> None: ... + @property + def suggested(self) -> Optional[Rule]: ... + def closest_rule(self, adapter: Optional[MapAdapter]) -> Optional[Rule]: ... + +class ValidationError(ValueError): ... + +class RuleFactory: + def get_rules(self, map): ... + +class Subdomain(RuleFactory): + subdomain: Any + rules: Any + def __init__(self, subdomain, rules): ... + def get_rules(self, map): ... + +class Submount(RuleFactory): + path: Any + rules: Any + def __init__(self, path, rules): ... + def get_rules(self, map): ... + +class EndpointPrefix(RuleFactory): + prefix: Any + rules: Any + def __init__(self, prefix, rules): ... + def get_rules(self, map): ... + +class RuleTemplate: + rules: Any + def __init__(self, rules): ... + def __call__(self, *args, **kwargs): ... + +class RuleTemplateFactory(RuleFactory): + rules: Any + context: Any + def __init__(self, rules, context): ... + def get_rules(self, map): ... + +class Rule(RuleFactory): + rule: Any + is_leaf: Any + map: Any + strict_slashes: Any + subdomain: Any + host: Any + defaults: Any + build_only: Any + alias: Any + methods: Any + endpoint: Any + redirect_to: Any + arguments: Any + def __init__(self, string, defaults: Optional[Any] = ..., subdomain: Optional[Any] = ..., methods: Optional[Any] = ..., + build_only: bool = ..., endpoint: Optional[Any] = ..., strict_slashes: Optional[Any] = ..., + redirect_to: Optional[Any] = ..., alias: bool = ..., host: Optional[Any] = ...): ... + def empty(self): ... + def get_empty_kwargs(self): ... + def get_rules(self, map): ... + def refresh(self): ... + def bind(self, map, rebind: bool = ...): ... + def get_converter(self, variable_name, converter_name, args, kwargs): ... + def compile(self): ... + def match(self, path, method: Optional[Any] = ...): ... + def build(self, values, append_unknown: bool = ...): ... + def provides_defaults_for(self, rule): ... + def suitable_for(self, values, method: Optional[Any] = ...): ... + def match_compare_key(self): ... + def build_compare_key(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class BaseConverter: + regex: Any + weight: Any + map: Any + def __init__(self, map): ... + def to_python(self, value): ... + def to_url(self, value): ... + +class UnicodeConverter(BaseConverter): + regex: Any + def __init__(self, map, minlength: int = ..., maxlength: Optional[Any] = ..., length: Optional[Any] = ...): ... + +class AnyConverter(BaseConverter): + regex: Any + def __init__(self, map, *items): ... + +class PathConverter(BaseConverter): + regex: Any + weight: Any + +class NumberConverter(BaseConverter): + weight: Any + fixed_digits: Any + min: Any + max: Any + def __init__(self, map, fixed_digits: int = ..., min: Optional[Any] = ..., max: Optional[Any] = ...): ... + def to_python(self, value): ... + def to_url(self, value): ... + +class IntegerConverter(NumberConverter): + regex: Any + num_convert: Any + +class FloatConverter(NumberConverter): + regex: Any + num_convert: Any + def __init__(self, map, min: Optional[Any] = ..., max: Optional[Any] = ...): ... + +class UUIDConverter(BaseConverter): + regex: Any + def to_python(self, value): ... + def to_url(self, value): ... + +DEFAULT_CONVERTERS: Any + +class Map: + default_converters: Any + default_subdomain: Any + charset: Text + encoding_errors: Text + strict_slashes: Any + redirect_defaults: Any + host_matching: Any + converters: Any + sort_parameters: Any + sort_key: Any + def __init__(self, rules: Optional[Any] = ..., default_subdomain: str = ..., charset: Text = ..., + strict_slashes: bool = ..., redirect_defaults: bool = ..., converters: Optional[Any] = ..., + sort_parameters: bool = ..., sort_key: Optional[Any] = ..., encoding_errors: Text = ..., + host_matching: bool = ...): ... + def is_endpoint_expecting(self, endpoint, *arguments): ... + def iter_rules(self, endpoint: Optional[Any] = ...): ... + def add(self, rulefactory): ... + def bind(self, server_name, script_name: Optional[Any] = ..., subdomain: Optional[Any] = ..., url_scheme: str = ..., + default_method: str = ..., path_info: Optional[Any] = ..., query_args: Optional[Any] = ...): ... + def bind_to_environ(self, environ, server_name: Optional[Any] = ..., subdomain: Optional[Any] = ...): ... + def update(self): ... + +class MapAdapter: + map: Any + server_name: Any + script_name: Any + subdomain: Any + url_scheme: Any + path_info: Any + default_method: Any + query_args: Any + def __init__(self, map, server_name, script_name, subdomain, url_scheme, path_info, default_method, + query_args: Optional[Any] = ...): ... + def dispatch(self, view_func, path_info: Optional[Any] = ..., method: Optional[Any] = ..., + catch_http_exceptions: bool = ...): ... + def match(self, path_info: Optional[Any] = ..., method: Optional[Any] = ..., return_rule: bool = ..., + query_args: Optional[Any] = ...): ... + def test(self, path_info: Optional[Any] = ..., method: Optional[Any] = ...): ... + def allowed_methods(self, path_info: Optional[Any] = ...): ... + def get_host(self, domain_part): ... + def get_default_redirect(self, rule, method, values, query_args): ... + def encode_query_args(self, query_args): ... + def make_redirect_url(self, path_info, query_args: Optional[Any] = ..., domain_part: Optional[Any] = ...): ... + def make_alias_redirect_url(self, path, endpoint, values, method, query_args): ... + def build(self, endpoint, values: Optional[Any] = ..., method: Optional[Any] = ..., force_external: bool = ..., + append_unknown: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi new file mode 100644 index 0000000..b9db97a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi @@ -0,0 +1,14 @@ +from typing import Any, Optional + +argument_types: Any +converters: Any + +def run(namespace: Optional[Any] = ..., action_prefix: str = ..., args: Optional[Any] = ...): ... +def fail(message, code: int = ...): ... +def find_actions(namespace, action_prefix): ... +def print_usage(actions): ... +def analyse_action(func): ... +def make_shell(init_func: Optional[Any] = ..., banner: Optional[Any] = ..., use_ipython: bool = ...): ... +def make_runserver(app_factory, hostname: str = ..., port: int = ..., use_reloader: bool = ..., use_debugger: bool = ..., + use_evalex: bool = ..., threaded: bool = ..., processes: int = ..., static_files: Optional[Any] = ..., + extra_files: Optional[Any] = ..., ssl_context: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi new file mode 100644 index 0000000..fcb2652 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi @@ -0,0 +1,12 @@ +from typing import Any, Optional + +SALT_CHARS: Any +DEFAULT_PBKDF2_ITERATIONS: Any + +def pbkdf2_hex(data, salt, iterations=..., keylen: Optional[Any] = ..., hashfunc: Optional[Any] = ...): ... +def pbkdf2_bin(data, salt, iterations=..., keylen: Optional[Any] = ..., hashfunc: Optional[Any] = ...): ... +def safe_str_cmp(a, b): ... +def gen_salt(length): ... +def generate_password_hash(password, method: str = ..., salt_length: int = ...): ... +def check_password_hash(pwhash, password): ... +def safe_join(directory, filename): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi new file mode 100644 index 0000000..54bce97 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi @@ -0,0 +1,93 @@ +import sys +from typing import Any, Optional + +if sys.version_info < (3,): + from SocketServer import ThreadingMixIn, ForkingMixIn + from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler +else: + from socketserver import ThreadingMixIn, ForkingMixIn + from http.server import HTTPServer, BaseHTTPRequestHandler + +class _SslDummy: + def __getattr__(self, name): ... + +ssl: Any +LISTEN_QUEUE: Any +can_open_by_fd: Any + +class WSGIRequestHandler(BaseHTTPRequestHandler): + @property + def server_version(self): ... + def make_environ(self): ... + environ: Any + close_connection: Any + def run_wsgi(self): ... + def handle(self): ... + def initiate_shutdown(self): ... + def connection_dropped(self, error, environ: Optional[Any] = ...): ... + raw_requestline: Any + def handle_one_request(self): ... + def send_response(self, code, message: Optional[Any] = ...): ... + def version_string(self): ... + def address_string(self): ... + def port_integer(self): ... + def log_request(self, code: object = ..., size: object = ...) -> None: ... + def log_error(self, *args): ... + def log_message(self, format, *args): ... + def log(self, type, message, *args): ... + +BaseRequestHandler: Any + +def generate_adhoc_ssl_pair(cn: Optional[Any] = ...): ... +def make_ssl_devcert(base_path, host: Optional[Any] = ..., cn: Optional[Any] = ...): ... +def generate_adhoc_ssl_context(): ... +def load_ssl_context(cert_file, pkey_file: Optional[Any] = ..., protocol: Optional[Any] = ...): ... + +class _SSLContext: + def __init__(self, protocol): ... + def load_cert_chain(self, certfile, keyfile: Optional[Any] = ..., password: Optional[Any] = ...): ... + def wrap_socket(self, sock, **kwargs): ... + +def is_ssl_error(error: Optional[Any] = ...): ... +def select_ip_version(host, port): ... + +class BaseWSGIServer(HTTPServer): + multithread: Any + multiprocess: Any + request_queue_size: Any + address_family: Any + app: Any + passthrough_errors: Any + shutdown_signal: Any + host: Any + port: Any + socket: Any + server_address: Any + ssl_context: Any + def __init__(self, host, port, app, handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... + def log(self, type, message, *args): ... + def serve_forever(self): ... + def handle_error(self, request, client_address): ... + def get_request(self): ... + +class ThreadedWSGIServer(ThreadingMixIn, BaseWSGIServer): + multithread: Any + daemon_threads: Any + +class ForkingWSGIServer(ForkingMixIn, BaseWSGIServer): + multiprocess: Any + max_children: Any + def __init__(self, host, port, app, processes: int = ..., handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... + +def make_server(host: Optional[Any] = ..., port: Optional[Any] = ..., app: Optional[Any] = ..., threaded: bool = ..., + processes: int = ..., request_handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... +def is_running_from_reloader(): ... +def run_simple(hostname, port, application, use_reloader: bool = ..., use_debugger: bool = ..., use_evalex: bool = ..., + extra_files: Optional[Any] = ..., reloader_interval: int = ..., reloader_type: str = ..., threaded: bool = ..., + processes: int = ..., request_handler: Optional[Any] = ..., static_files: Optional[Any] = ..., + passthrough_errors: bool = ..., ssl_context: Optional[Any] = ...): ... +def run_with_reloader(*args, **kwargs): ... +def main(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi new file mode 100644 index 0000000..c67189e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi @@ -0,0 +1,94 @@ +import sys +from typing import Any, Optional, Text + +if sys.version_info < (3,): + from urllib2 import Request as U2Request + from cookielib import CookieJar +else: + from urllib.request import Request as U2Request + from http.cookiejar import CookieJar + +def stream_encode_multipart(values, use_tempfile: int = ..., threshold=..., boundary: Optional[Any] = ..., + charset: Text = ...): ... +def encode_multipart(values, boundary: Optional[Any] = ..., charset: Text = ...): ... +def File(fd, filename: Optional[Any] = ..., mimetype: Optional[Any] = ...): ... + +class _TestCookieHeaders: + headers: Any + def __init__(self, headers): ... + def getheaders(self, name): ... + def get_all(self, name, default: Optional[Any] = ...): ... + +class _TestCookieResponse: + headers: Any + def __init__(self, headers): ... + def info(self): ... + +class _TestCookieJar(CookieJar): + def inject_wsgi(self, environ): ... + def extract_wsgi(self, environ, headers): ... + +class EnvironBuilder: + server_protocol: Any + wsgi_version: Any + request_class: Any + charset: Text + path: Any + base_url: Any + query_string: Any + args: Any + method: Any + headers: Any + content_type: Any + errors_stream: Any + multithread: Any + multiprocess: Any + run_once: Any + environ_base: Any + environ_overrides: Any + input_stream: Any + content_length: Any + closed: Any + def __init__(self, path: str = ..., base_url: Optional[Any] = ..., query_string: Optional[Any] = ..., + method: str = ..., input_stream: Optional[Any] = ..., content_type: Optional[Any] = ..., + content_length: Optional[Any] = ..., errors_stream: Optional[Any] = ..., multithread: bool = ..., + multiprocess: bool = ..., run_once: bool = ..., headers: Optional[Any] = ..., data: Optional[Any] = ..., + environ_base: Optional[Any] = ..., environ_overrides: Optional[Any] = ..., charset: Text = ...): ... + form: Any + files: Any + @property + def server_name(self): ... + @property + def server_port(self): ... + def __del__(self): ... + def close(self): ... + def get_environ(self): ... + def get_request(self, cls: Optional[Any] = ...): ... + +class ClientRedirectError(Exception): ... + +class Client: + application: Any + response_wrapper: Any + cookie_jar: Any + allow_subdomain_redirects: Any + def __init__(self, application, response_wrapper: Optional[Any] = ..., use_cookies: bool = ..., + allow_subdomain_redirects: bool = ...): ... + def set_cookie(self, server_name, key, value: str = ..., max_age: Optional[Any] = ..., expires: Optional[Any] = ..., + path: str = ..., domain: Optional[Any] = ..., secure: Optional[Any] = ..., httponly: bool = ..., + charset: Text = ...): ... + def delete_cookie(self, server_name, key, path: str = ..., domain: Optional[Any] = ...): ... + def run_wsgi_app(self, environ, buffered: bool = ...): ... + def resolve_redirect(self, response, new_location, environ, buffered: bool = ...): ... + def open(self, *args, **kwargs): ... + def get(self, *args, **kw): ... + def patch(self, *args, **kw): ... + def post(self, *args, **kw): ... + def head(self, *args, **kw): ... + def put(self, *args, **kw): ... + def delete(self, *args, **kw): ... + def options(self, *args, **kw): ... + def trace(self, *args, **kw): ... + +def create_environ(*args, **kwargs): ... +def run_wsgi_app(app, environ, buffered: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi new file mode 100644 index 0000000..e45ea4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi @@ -0,0 +1,9 @@ +from typing import Any +from werkzeug.wrappers import BaseRequest as Request, BaseResponse as Response + +logo: Any +TEMPLATE: Any + +def iter_sys_path(): ... +def render_testapp(req): ... +def test_app(environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi new file mode 100644 index 0000000..e0b1306 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi @@ -0,0 +1,72 @@ +from collections import namedtuple +from typing import Any, Optional, Text + + +_URLTuple = namedtuple( + '_URLTuple', + ['scheme', 'netloc', 'path', 'query', 'fragment'] +) + + +class BaseURL(_URLTuple): + def replace(self, **kwargs): ... + @property + def host(self): ... + @property + def ascii_host(self): ... + @property + def port(self): ... + @property + def auth(self): ... + @property + def username(self): ... + @property + def raw_username(self): ... + @property + def password(self): ... + @property + def raw_password(self): ... + def decode_query(self, *args, **kwargs): ... + def join(self, *args, **kwargs): ... + def to_url(self): ... + def decode_netloc(self): ... + def to_uri_tuple(self): ... + def to_iri_tuple(self): ... + def get_file_location(self, pathformat: Optional[Any] = ...): ... + +class URL(BaseURL): + def encode_netloc(self): ... + def encode(self, charset: Text = ..., errors: Text = ...): ... + +class BytesURL(BaseURL): + def encode_netloc(self): ... + def decode(self, charset: Text = ..., errors: Text = ...): ... + +def url_parse(url, scheme: Optional[Any] = ..., allow_fragments: bool = ...): ... +def url_quote(string, charset: Text = ..., errors: Text = ..., safe: str = ..., unsafe: str = ...): ... +def url_quote_plus(string, charset: Text = ..., errors: Text = ..., safe: str = ...): ... +def url_unparse(components): ... +def url_unquote(string, charset: Text = ..., errors: Text = ..., unsafe: str = ...): ... +def url_unquote_plus(s, charset: Text = ..., errors: Text = ...): ... +def url_fix(s, charset: Text = ...): ... +def uri_to_iri(uri, charset: Text = ..., errors: Text = ...): ... +def iri_to_uri(iri, charset: Text = ..., errors: Text = ..., safe_conversion: bool = ...): ... +def url_decode(s, charset: Text = ..., decode_keys: bool = ..., include_empty: bool = ..., errors: Text = ..., + separator: str = ..., cls: Optional[Any] = ...): ... +def url_decode_stream(stream, charset: Text = ..., decode_keys: bool = ..., include_empty: bool = ..., errors: Text = ..., + separator: str = ..., cls: Optional[Any] = ..., limit: Optional[Any] = ..., + return_iterator: bool = ...): ... +def url_encode(obj, charset: Text = ..., encode_keys: bool = ..., sort: bool = ..., key: Optional[Any] = ..., + separator: bytes = ...): ... +def url_encode_stream(obj, stream: Optional[Any] = ..., charset: Text = ..., encode_keys: bool = ..., sort: bool = ..., + key: Optional[Any] = ..., separator: bytes = ...): ... +def url_join(base, url, allow_fragments: bool = ...): ... + +class Href: + base: Any + charset: Text + sort: Any + key: Any + def __init__(self, base: str = ..., charset: Text = ..., sort: bool = ..., key: Optional[Any] = ...): ... + def __getattr__(self, name): ... + def __call__(self, *path, **query): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi new file mode 100644 index 0000000..c7e8363 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi @@ -0,0 +1,14 @@ +from typing import Any + +class UserAgentParser: + platforms: Any + browsers: Any + def __init__(self): ... + def __call__(self, user_agent): ... + +class UserAgent: + string: Any + def __init__(self, environ_or_string): ... + def to_header(self): ... + def __nonzero__(self): ... + __bool__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi new file mode 100644 index 0000000..92465ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi @@ -0,0 +1,58 @@ +from typing import Any, Optional, overload, Type, TypeVar +from werkzeug._internal import _DictAccessorProperty +from werkzeug.wrappers import Response + +class cached_property(property): + __name__: Any + __module__: Any + __doc__: Any + func: Any + def __init__(self, func, name: Optional[Any] = ..., doc: Optional[Any] = ...): ... + def __set__(self, obj, value): ... + def __get__(self, obj, type: Optional[Any] = ...): ... + +class environ_property(_DictAccessorProperty): + read_only: Any + def lookup(self, obj): ... + +class header_property(_DictAccessorProperty): + def lookup(self, obj): ... + +class HTMLBuilder: + def __init__(self, dialect): ... + def __call__(self, s): ... + def __getattr__(self, tag): ... + +html: Any +xhtml: Any + +def get_content_type(mimetype, charset): ... +def format_string(string, context): ... +def secure_filename(filename): ... +def escape(s, quote: Optional[Any] = ...): ... +def unescape(s): ... + +# 'redirect' returns a werkzeug Response, unless you give it +# another Response type to use instead. +_RC = TypeVar("_RC", bound=Response) +@overload +def redirect(location, code: int = ..., Response: None = ...) -> Response: ... +@overload +def redirect(location, code: int = ..., Response: Type[_RC] = ...) -> _RC: ... + +def append_slash_redirect(environ, code: int = ...): ... +def import_string(import_name, silent: bool = ...): ... +def find_modules(import_path, include_packages: bool = ..., recursive: bool = ...): ... +def validate_arguments(func, args, kwargs, drop_extra: bool = ...): ... +def bind_arguments(func, args, kwargs): ... + +class ArgumentValidationError(ValueError): + missing: Any + extra: Any + extra_positional: Any + def __init__(self, missing: Optional[Any] = ..., extra: Optional[Any] = ..., extra_positional: Optional[Any] = ...): ... + +class ImportStringError(ImportError): + import_name: Any + exception: Any + def __init__(self, import_name, exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi new file mode 100644 index 0000000..74cb6ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi @@ -0,0 +1,249 @@ +from datetime import datetime +from typing import ( + Any, Callable, Iterable, Iterator, Mapping, MutableMapping, Optional, Sequence, Text, Tuple, Type, TypeVar, Union, +) + +from wsgiref.types import WSGIEnvironment, InputStream + +from .datastructures import ( + Authorization, CombinedMultiDict, EnvironHeaders, Headers, ImmutableMultiDict, + MultiDict, ImmutableTypeConversionDict, HeaderSet, + Accept, MIMEAccept, CharsetAccept, LanguageAccept, +) +from .useragents import UserAgent + +class BaseRequest: + charset: str + encoding_errors: str + max_content_length: Optional[int] + max_form_memory_size: int + parameter_storage_class: Type + list_storage_class: Type + dict_storage_class: Type + form_data_parser_class: Type + trusted_hosts: Optional[Sequence[Text]] + disable_data_descriptor: Any + environ: WSGIEnvironment = ... + shallow: Any + def __init__(self, environ: WSGIEnvironment, populate_request: bool = ..., shallow: bool = ...) -> None: ... + @property + def url_charset(self) -> str: ... + @classmethod + def from_values(cls, *args, **kwargs) -> BaseRequest: ... + @classmethod + def application(cls, f): ... + @property + def want_form_data_parsed(self): ... + def make_form_data_parser(self): ... + def close(self) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, tb): ... + @property + def stream(self) -> InputStream: ... + input_stream: InputStream + args: ImmutableMultiDict + @property + def data(self) -> bytes: ... + # TODO: once Literal types are supported, overload with as_text + def get_data(self, cache: bool = ..., as_text: bool = ..., parse_form_data: bool = ...) -> Any: ... # returns bytes if as_text is False (the default), else Text + form: ImmutableMultiDict + values: CombinedMultiDict + files: MultiDict + @property + def cookies(self) -> ImmutableTypeConversionDict[str, str]: ... + headers: EnvironHeaders + path: Text + full_path: Text + script_root: Text + url: Text + base_url: Text + url_root: Text + host_url: Text + host: Text + query_string: bytes + method: Text + @property + def access_route(self) -> Sequence[str]: ... + @property + def remote_addr(self) -> str: ... + remote_user: Text + scheme: str + is_xhr: bool + is_secure: bool + is_multithread: bool + is_multiprocess: bool + is_run_once: bool + + # These are not preset at runtime but we add them since monkeypatching this + # class is quite common. + def __setattr__(self, name: str, value: Any): ... + def __getattr__(self, name: str): ... + +_OnCloseT = TypeVar('_OnCloseT', bound=Callable[[], Any]) +_SelfT = TypeVar('_SelfT', bound=BaseResponse) + +class BaseResponse: + charset: str + default_status: int + default_mimetype: str + implicit_sequence_conversion: bool + autocorrect_location_header: bool + automatically_set_content_length: bool + headers: Headers + status_code: int + status: str + direct_passthrough: bool + response: Iterable[bytes] + def __init__(self, response: Optional[Union[str, bytes, bytearray, Iterable[str], Iterable[bytes]]] = ..., + status: Optional[Union[Text, int]] = ..., + headers: Optional[Union[Headers, + Mapping[Text, Text], + Sequence[Tuple[Text, Text]]]] = ..., + mimetype: Optional[Text] = ..., + content_type: Optional[Text] = ..., + direct_passthrough: bool = ...) -> None: ... + def call_on_close(self, func: _OnCloseT) -> _OnCloseT: ... + @classmethod + def force_type(cls: Type[_SelfT], response: object, environ: Optional[WSGIEnvironment] = ...) -> _SelfT: ... + @classmethod + def from_app(cls: Type[_SelfT], app: Any, environ: WSGIEnvironment, buffered: bool = ...) -> _SelfT: ... + # TODO: once Literal types are supported, overload with as_text + def get_data(self, as_text: bool = ...) -> Any: ... # returns bytes if as_text is False (the default), else Text + def set_data(self, value: Union[bytes, Text]) -> None: ... + data: Any + def calculate_content_length(self) -> Optional[int]: ... + def make_sequence(self) -> None: ... + def iter_encoded(self) -> Iterator[bytes]: ... + def set_cookie(self, key, value: str = ..., max_age: Optional[Any] = ..., expires: Optional[Any] = ..., + path: str = ..., domain: Optional[Any] = ..., secure: bool = ..., httponly: bool = ...): ... + def delete_cookie(self, key, path: str = ..., domain: Optional[Any] = ...): ... + @property + def is_streamed(self) -> bool: ... + @property + def is_sequence(self) -> bool: ... + def close(self) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, tb): ... + # The no_etag argument if fictional, but required for compatibility with + # ETagResponseMixin + def freeze(self, no_etag: bool = ...) -> None: ... + def get_wsgi_headers(self, environ): ... + def get_app_iter(self, environ): ... + def get_wsgi_response(self, environ): ... + def __call__(self, environ, start_response): ... + +class AcceptMixin(object): + @property + def accept_mimetypes(self) -> MIMEAccept: ... + @property + def accept_charsets(self) -> CharsetAccept: ... + @property + def accept_encodings(self) -> Accept: ... + @property + def accept_languages(self) -> LanguageAccept: ... + +class ETagRequestMixin: + @property + def cache_control(self): ... + @property + def if_match(self): ... + @property + def if_none_match(self): ... + @property + def if_modified_since(self): ... + @property + def if_unmodified_since(self): ... + @property + def if_range(self): ... + @property + def range(self): ... + +class UserAgentMixin: + @property + def user_agent(self) -> UserAgent: ... + +class AuthorizationMixin: + @property + def authorization(self) -> Optional[Authorization]: ... + +class StreamOnlyMixin: + disable_data_descriptor: Any + want_form_data_parsed: Any + +class ETagResponseMixin: + @property + def cache_control(self): ... + status_code: Any + def make_conditional(self, request_or_environ, accept_ranges: bool = ..., complete_length: Optional[Any] = ...): ... + def add_etag(self, overwrite: bool = ..., weak: bool = ...): ... + def set_etag(self, etag, weak: bool = ...): ... + def get_etag(self): ... + def freeze(self, no_etag: bool = ...) -> None: ... + accept_ranges: Any + content_range: Any + +class ResponseStream: + mode: Any + response: Any + closed: Any + def __init__(self, response): ... + def write(self, value): ... + def writelines(self, seq): ... + def close(self): ... + def flush(self): ... + def isatty(self): ... + @property + def encoding(self): ... + +class ResponseStreamMixin: + @property + def stream(self) -> ResponseStream: ... + +class CommonRequestDescriptorsMixin: + @property + def content_type(self) -> Optional[str]: ... + @property + def content_length(self) -> Optional[int]: ... + @property + def content_encoding(self) -> Optional[str]: ... + @property + def content_md5(self) -> Optional[str]: ... + @property + def referrer(self) -> Optional[str]: ... + @property + def date(self) -> Optional[datetime]: ... + @property + def max_forwards(self) -> Optional[int]: ... + @property + def mimetype(self) -> str: ... + @property + def mimetype_params(self) -> Mapping[str, str]: ... + @property + def pragma(self) -> HeaderSet: ... + +class CommonResponseDescriptorsMixin: + mimetype: Optional[str] = ... + @property + def mimetype_params(self) -> MutableMapping[str, str]: ... + location: Optional[str] = ... + age: Any = ... # get: Optional[datetime.timedelta] + content_type: Optional[str] = ... + content_length: Optional[int] = ... + content_location: Optional[str] = ... + content_encoding: Optional[str] = ... + content_md5: Optional[str] = ... + date: Any = ... # get: Optional[datetime.datetime] + expires: Any = ... # get: Optional[datetime.datetime] + last_modified: Any = ... # get: Optional[datetime.datetime] + retry_after: Any = ... # get: Optional[datetime.datetime] + vary: Optional[str] = ... + content_language: Optional[str] = ... + allow: Optional[str] = ... + +class WWWAuthenticateMixin: + @property + def www_authenticate(self): ... + +class Request(BaseRequest, AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthorizationMixin, CommonRequestDescriptorsMixin): ... +class PlainRequest(StreamOnlyMixin, Request): ... +class Response(BaseResponse, ETagResponseMixin, ResponseStreamMixin, CommonResponseDescriptorsMixin, WWWAuthenticateMixin): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi new file mode 100644 index 0000000..87deff4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi @@ -0,0 +1,91 @@ +from typing import Any, Optional, Protocol, Iterable, Text +from wsgiref.types import WSGIEnvironment, InputStream + +def responder(f): ... +def get_current_url(environ, root_only: bool = ..., strip_querystring: bool = ..., host_only: bool = ..., + trusted_hosts: Optional[Any] = ...): ... +def host_is_trusted(hostname, trusted_list): ... +def get_host(environ, trusted_hosts: Optional[Any] = ...): ... +def get_content_length(environ: WSGIEnvironment) -> Optional[int]: ... +def get_input_stream(environ: WSGIEnvironment, safe_fallback: bool = ...) -> InputStream: ... +def get_query_string(environ): ... +def get_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def get_script_name(environ, charset: Text = ..., errors: Text = ...): ... +def pop_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def peek_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def extract_path_info(environ_or_baseurl, path_or_url, charset: Text = ..., errors: Text = ..., + collapse_http_schemes: bool = ...): ... + +class SharedDataMiddleware: + app: Any + exports: Any + cache: Any + cache_timeout: Any + fallback_mimetype: Any + def __init__(self, app, exports, disallow: Optional[Any] = ..., cache: bool = ..., cache_timeout=..., + fallback_mimetype: str = ...): ... + def is_allowed(self, filename): ... + def get_file_loader(self, filename): ... + def get_package_loader(self, package, package_path): ... + def get_directory_loader(self, directory): ... + def generate_etag(self, mtime, file_size, real_filename): ... + def __call__(self, environ, start_response): ... + +class DispatcherMiddleware: + app: Any + mounts: Any + def __init__(self, app, mounts: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +class ClosingIterator: + def __init__(self, iterable, callbacks: Optional[Any] = ...): ... + def __iter__(self): ... + def __next__(self): ... + def close(self): ... + +class _Readable(Protocol): + def read(self, size: int = ...) -> bytes: ... + +def wrap_file(environ: WSGIEnvironment, file: _Readable, buffer_size: int = ...) -> Iterable[bytes]: ... + +class FileWrapper: + file: _Readable + buffer_size: int + def __init__(self, file: _Readable, buffer_size: int = ...) -> None: ... + def close(self) -> None: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> None: ... + def tell(self) -> Optional[int]: ... + def __iter__(self) -> FileWrapper: ... + def __next__(self) -> bytes: ... + +class _RangeWrapper: + iterable: Any + byte_range: Any + start_byte: Any + end_byte: Any + read_length: Any + seekable: Any + end_reached: Any + def __init__(self, iterable, start_byte: int = ..., byte_range: Optional[Any] = ...): ... + def __iter__(self): ... + def __next__(self): ... + def close(self): ... + +def make_line_iter(stream, limit: Optional[Any] = ..., buffer_size=..., cap_at_buffer: bool = ...): ... +def make_chunk_iter(stream, separator, limit: Optional[Any] = ..., buffer_size=..., cap_at_buffer: bool = ...): ... + +class LimitedStream: + limit: Any + def __init__(self, stream, limit): ... + def __iter__(self): ... + @property + def is_exhausted(self): ... + def on_exhausted(self): ... + def on_disconnect(self): ... + def exhaust(self, chunk_size=...): ... + def read(self, size: Optional[Any] = ...): ... + def readline(self, size: Optional[Any] = ...): ... + def readlines(self, size: Optional[Any] = ...): ... + def tell(self): ... + def __next__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi new file mode 100644 index 0000000..c0fc6a9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi @@ -0,0 +1,82 @@ +from typing import Any, IO, Iterator, Optional, overload, Sequence, Text, Union +import sys +from yaml.error import * # noqa: F403 +from yaml.tokens import * # noqa: F403 +from yaml.events import * # noqa: F403 +from yaml.nodes import * # noqa: F403 +from yaml.loader import * # noqa: F403 +from yaml.dumper import * # noqa: F403 +from . import resolver # Help mypy a bit; this is implied by loader and dumper +from .cyaml import * + +if sys.version_info < (3,): + _Str = Union[Text, str] +else: + _Str = str +# FIXME: the functions really return py2:unicode/py3:str if encoding is None, otherwise py2:str/py3:bytes. Waiting for python/mypy#5621 +_Yaml = Any + +__with_libyaml__: Any +__version__: str + +def scan(stream, Loader=...): ... +def parse(stream, Loader=...): ... +def compose(stream, Loader=...): ... +def compose_all(stream, Loader=...): ... +def load(stream: Union[str, IO[str]], Loader=...) -> Any: ... +def load_all(stream: Union[str, IO[str]], Loader=...) -> Iterator[Any]: ... +def full_load(stream: Union[str, IO[str]]) -> Any: ... +def full_load_all(stream: Union[str, IO[str]]) -> Iterator[Any]: ... +def safe_load(stream: Union[str, IO[str]]) -> Any: ... +def safe_load_all(stream: Union[str, IO[str]]) -> Iterator[Any]: ... +def emit(events, stream=..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=...): ... + +@overload +def serialize_all(nodes, stream: IO[str], Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def serialize_all(nodes, stream: None = ..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def serialize(node, stream: IO[str], Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def serialize(node, stream: None = ..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def dump_all(documents: Sequence[Any], stream: IO[str], Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def dump_all(documents: Sequence[Any], stream: None = ..., Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def dump(data: Any, stream: IO[str], Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def dump(data: Any, stream: None = ..., Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def safe_dump_all(documents: Sequence[Any], stream: IO[str], default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def safe_dump_all(documents: Sequence[Any], stream: None = ..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def safe_dump(data: Any, stream: IO[str], default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def safe_dump(data: Any, stream: None = ..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +def add_implicit_resolver(tag, regexp, first=..., Loader=..., Dumper=...): ... +def add_path_resolver(tag, path, kind=..., Loader=..., Dumper=...): ... +def add_constructor(tag, constructor, Loader=...): ... +def add_multi_constructor(tag_prefix, multi_constructor, Loader=...): ... +def add_representer(data_type, representer, Dumper=...): ... +def add_multi_representer(data_type, multi_representer, Dumper=...): ... + +class YAMLObjectMetaclass(type): + def __init__(self, name, bases, kwds) -> None: ... + +class YAMLObject(metaclass=YAMLObjectMetaclass): + yaml_loader: Any + yaml_dumper: Any + yaml_tag: Any + yaml_flow_style: Any + @classmethod + def from_yaml(cls, loader, node): ... + @classmethod + def to_yaml(cls, dumper, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi new file mode 100644 index 0000000..f1e2c03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi @@ -0,0 +1,17 @@ +from typing import Any +from yaml.error import Mark, YAMLError, MarkedYAMLError +from yaml.nodes import Node, ScalarNode, CollectionNode, SequenceNode, MappingNode + +class ComposerError(MarkedYAMLError): ... + +class Composer: + anchors: Any + def __init__(self) -> None: ... + def check_node(self): ... + def get_node(self): ... + def get_single_node(self): ... + def compose_document(self): ... + def compose_node(self, parent, index): ... + def compose_scalar_node(self, anchor): ... + def compose_sequence_node(self, anchor): ... + def compose_mapping_node(self, anchor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi new file mode 100644 index 0000000..27bcdbe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi @@ -0,0 +1,68 @@ +from yaml.error import Mark, YAMLError, MarkedYAMLError +from yaml.nodes import Node, ScalarNode, CollectionNode, SequenceNode, MappingNode + +from typing import Any + +class ConstructorError(MarkedYAMLError): ... + +class BaseConstructor: + yaml_constructors: Any + yaml_multi_constructors: Any + constructed_objects: Any + recursive_objects: Any + state_generators: Any + deep_construct: Any + def __init__(self) -> None: ... + def check_data(self): ... + def get_data(self): ... + def get_single_data(self): ... + def construct_document(self, node): ... + def construct_object(self, node, deep=...): ... + def construct_scalar(self, node): ... + def construct_sequence(self, node, deep=...): ... + def construct_mapping(self, node, deep=...): ... + def construct_pairs(self, node, deep=...): ... + @classmethod + def add_constructor(cls, tag, constructor): ... + @classmethod + def add_multi_constructor(cls, tag_prefix, multi_constructor): ... + +class SafeConstructor(BaseConstructor): + def construct_scalar(self, node): ... + def flatten_mapping(self, node): ... + def construct_mapping(self, node, deep=...): ... + def construct_yaml_null(self, node): ... + bool_values: Any + def construct_yaml_bool(self, node): ... + def construct_yaml_int(self, node): ... + inf_value: Any + nan_value: Any + def construct_yaml_float(self, node): ... + def construct_yaml_binary(self, node): ... + timestamp_regexp: Any + def construct_yaml_timestamp(self, node): ... + def construct_yaml_omap(self, node): ... + def construct_yaml_pairs(self, node): ... + def construct_yaml_set(self, node): ... + def construct_yaml_str(self, node): ... + def construct_yaml_seq(self, node): ... + def construct_yaml_map(self, node): ... + def construct_yaml_object(self, node, cls): ... + def construct_undefined(self, node): ... + +class Constructor(SafeConstructor): + def construct_python_str(self, node): ... + def construct_python_unicode(self, node): ... + def construct_python_long(self, node): ... + def construct_python_complex(self, node): ... + def construct_python_tuple(self, node): ... + def find_python_module(self, name, mark): ... + def find_python_name(self, name, mark): ... + def construct_python_name(self, suffix, node): ... + def construct_python_module(self, suffix, node): ... + class classobj: ... + def make_python_instance(self, suffix, node, args=..., kwds=..., newobj=...): ... + def set_python_instance_state(self, instance, state): ... + def construct_python_object(self, suffix, node): ... + def construct_python_object_apply(self, suffix, node, newobj=...): ... + def construct_python_object_new(self, suffix, node): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi new file mode 100644 index 0000000..0eef815 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi @@ -0,0 +1,47 @@ +from typing import Any, IO, Mapping, Optional, Sequence, Text, Union +from typing_extensions import Protocol + +from yaml.constructor import BaseConstructor, Constructor, SafeConstructor +from yaml.representer import BaseRepresenter, Representer, SafeRepresenter +from yaml.resolver import BaseResolver, Resolver +from yaml.serializer import Serializer + +class _Readable(Protocol): + def read(self, size: int) -> Union[Text, bytes]: ... + +class CParser: + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CBaseLoader(CParser, BaseConstructor, BaseResolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CLoader(CParser, SafeConstructor, Resolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CSafeLoader(CParser, SafeConstructor, Resolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CDangerLoader(CParser, Constructor, Resolver): ... # undocumented + +class CEmitter(object): + def __init__(self, stream: IO[Any], canonical: Optional[Any] = ..., + indent: Optional[int] = ..., width: Optional[int] = ..., + allow_unicode: Optional[Any] = ..., line_break: Optional[str] = ..., + encoding: Optional[Text] = ..., explicit_start: Optional[Any] = ..., + explicit_end: Optional[Any] = ..., version: Optional[Sequence[int]] = ..., + tags: Optional[Mapping[Text, Text]] = ...) -> None: ... + +class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): + def __init__(self, stream: IO[Any], default_style: Optional[str] = ..., + default_flow_style: Optional[bool] = ..., canonical: Optional[Any] = ..., + indent: Optional[int] = ..., width: Optional[int] = ..., + allow_unicode: Optional[Any] = ..., line_break: Optional[str] = ..., + encoding: Optional[Text] = ..., explicit_start: Optional[Any] = ..., + explicit_end: Optional[Any] = ..., version: Optional[Sequence[int]] = ..., + tags: Optional[Mapping[Text, Text]] = ...) -> None: ... + +class CDumper(CEmitter, SafeRepresenter, Resolver): ... + +CSafeDumper = CDumper + +class CDangerDumper(CEmitter, Serializer, Representer, Resolver): ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi new file mode 100644 index 0000000..0586f13 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi @@ -0,0 +1,13 @@ +from yaml.emitter import Emitter +from yaml.serializer import Serializer +from yaml.representer import BaseRepresenter, Representer, SafeRepresenter +from yaml.resolver import BaseResolver, Resolver + +class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + +class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + +class Dumper(Emitter, Serializer, Representer, Resolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi new file mode 100644 index 0000000..5ca9cbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi @@ -0,0 +1,106 @@ +from typing import Any +from yaml.error import YAMLError + +class EmitterError(YAMLError): ... + +class ScalarAnalysis: + scalar: Any + empty: Any + multiline: Any + allow_flow_plain: Any + allow_block_plain: Any + allow_single_quoted: Any + allow_double_quoted: Any + allow_block: Any + def __init__(self, scalar, empty, multiline, allow_flow_plain, allow_block_plain, allow_single_quoted, allow_double_quoted, allow_block) -> None: ... + +class Emitter: + DEFAULT_TAG_PREFIXES: Any + stream: Any + encoding: Any + states: Any + state: Any + events: Any + event: Any + indents: Any + indent: Any + flow_level: Any + root_context: Any + sequence_context: Any + mapping_context: Any + simple_key_context: Any + line: Any + column: Any + whitespace: Any + indention: Any + open_ended: Any + canonical: Any + allow_unicode: Any + best_indent: Any + best_width: Any + best_line_break: Any + tag_prefixes: Any + prepared_anchor: Any + prepared_tag: Any + analysis: Any + style: Any + def __init__(self, stream, canonical=..., indent=..., width=..., allow_unicode=..., line_break=...) -> None: ... + def dispose(self): ... + def emit(self, event): ... + def need_more_events(self): ... + def need_events(self, count): ... + def increase_indent(self, flow=..., indentless=...): ... + def expect_stream_start(self): ... + def expect_nothing(self): ... + def expect_first_document_start(self): ... + def expect_document_start(self, first=...): ... + def expect_document_end(self): ... + def expect_document_root(self): ... + def expect_node(self, root=..., sequence=..., mapping=..., simple_key=...): ... + def expect_alias(self): ... + def expect_scalar(self): ... + def expect_flow_sequence(self): ... + def expect_first_flow_sequence_item(self): ... + def expect_flow_sequence_item(self): ... + def expect_flow_mapping(self): ... + def expect_first_flow_mapping_key(self): ... + def expect_flow_mapping_key(self): ... + def expect_flow_mapping_simple_value(self): ... + def expect_flow_mapping_value(self): ... + def expect_block_sequence(self): ... + def expect_first_block_sequence_item(self): ... + def expect_block_sequence_item(self, first=...): ... + def expect_block_mapping(self): ... + def expect_first_block_mapping_key(self): ... + def expect_block_mapping_key(self, first=...): ... + def expect_block_mapping_simple_value(self): ... + def expect_block_mapping_value(self): ... + def check_empty_sequence(self): ... + def check_empty_mapping(self): ... + def check_empty_document(self): ... + def check_simple_key(self): ... + def process_anchor(self, indicator): ... + def process_tag(self): ... + def choose_scalar_style(self): ... + def process_scalar(self): ... + def prepare_version(self, version): ... + def prepare_tag_handle(self, handle): ... + def prepare_tag_prefix(self, prefix): ... + def prepare_tag(self, tag): ... + def prepare_anchor(self, anchor): ... + def analyze_scalar(self, scalar): ... + def flush_stream(self): ... + def write_stream_start(self): ... + def write_stream_end(self): ... + def write_indicator(self, indicator, need_whitespace, whitespace=..., indention=...): ... + def write_indent(self): ... + def write_line_break(self, data=...): ... + def write_version_directive(self, version_text): ... + def write_tag_directive(self, handle_text, prefix_text): ... + def write_single_quoted(self, text, split=...): ... + ESCAPE_REPLACEMENTS: Any + def write_double_quoted(self, text, split=...): ... + def determine_block_hints(self, text): ... + def write_folded(self, text): ... + def write_literal(self, text): ... + def write_plain(self, text, split=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi new file mode 100644 index 0000000..e567dd0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi @@ -0,0 +1,21 @@ +from typing import Any + +class Mark: + name: Any + index: Any + line: Any + column: Any + buffer: Any + pointer: Any + def __init__(self, name, index, line, column, buffer, pointer) -> None: ... + def get_snippet(self, indent=..., max_length=...): ... + +class YAMLError(Exception): ... + +class MarkedYAMLError(YAMLError): + context: Any + context_mark: Any + problem: Any + problem_mark: Any + note: Any + def __init__(self, context=..., context_mark=..., problem=..., problem_mark=..., note=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi new file mode 100644 index 0000000..7096d15 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi @@ -0,0 +1,62 @@ +from typing import Any + +class Event: + start_mark: Any + end_mark: Any + def __init__(self, start_mark=..., end_mark=...) -> None: ... + +class NodeEvent(Event): + anchor: Any + start_mark: Any + end_mark: Any + def __init__(self, anchor, start_mark=..., end_mark=...) -> None: ... + +class CollectionStartEvent(NodeEvent): + anchor: Any + tag: Any + implicit: Any + start_mark: Any + end_mark: Any + flow_style: Any + def __init__(self, anchor, tag, implicit, start_mark=..., end_mark=..., flow_style=...) -> None: ... + +class CollectionEndEvent(Event): ... + +class StreamStartEvent(Event): + start_mark: Any + end_mark: Any + encoding: Any + def __init__(self, start_mark=..., end_mark=..., encoding=...) -> None: ... + +class StreamEndEvent(Event): ... + +class DocumentStartEvent(Event): + start_mark: Any + end_mark: Any + explicit: Any + version: Any + tags: Any + def __init__(self, start_mark=..., end_mark=..., explicit=..., version=..., tags=...) -> None: ... + +class DocumentEndEvent(Event): + start_mark: Any + end_mark: Any + explicit: Any + def __init__(self, start_mark=..., end_mark=..., explicit=...) -> None: ... + +class AliasEvent(NodeEvent): ... + +class ScalarEvent(NodeEvent): + anchor: Any + tag: Any + implicit: Any + value: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, anchor, tag, implicit, value, start_mark=..., end_mark=..., style=...) -> None: ... + +class SequenceStartEvent(CollectionStartEvent): ... +class SequenceEndEvent(CollectionEndEvent): ... +class MappingStartEvent(CollectionStartEvent): ... +class MappingEndEvent(CollectionEndEvent): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi new file mode 100644 index 0000000..0e9afea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi @@ -0,0 +1,15 @@ +from yaml.reader import Reader +from yaml.scanner import Scanner +from yaml.parser import Parser +from yaml.composer import Composer +from yaml.constructor import BaseConstructor, SafeConstructor, Constructor +from yaml.resolver import BaseResolver, Resolver + +class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver): + def __init__(self, stream) -> None: ... + +class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver): + def __init__(self, stream) -> None: ... + +class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver): + def __init__(self, stream) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi new file mode 100644 index 0000000..f31fa7d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi @@ -0,0 +1,31 @@ +from typing import Any + +class Node: + tag: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, tag, value, start_mark, end_mark) -> None: ... + +class ScalarNode(Node): + id: Any + tag: Any + value: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, tag, value, start_mark=..., end_mark=..., style=...) -> None: ... + +class CollectionNode(Node): + tag: Any + value: Any + start_mark: Any + end_mark: Any + flow_style: Any + def __init__(self, tag, value, start_mark=..., end_mark=..., flow_style=...) -> None: ... + +class SequenceNode(CollectionNode): + id: Any + +class MappingNode(CollectionNode): + id: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi new file mode 100644 index 0000000..4253e11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi @@ -0,0 +1,44 @@ +from typing import Any +from yaml.error import MarkedYAMLError + +class ParserError(MarkedYAMLError): ... + +class Parser: + DEFAULT_TAGS: Any + current_event: Any + yaml_version: Any + tag_handles: Any + states: Any + marks: Any + state: Any + def __init__(self) -> None: ... + def dispose(self): ... + def check_event(self, *choices): ... + def peek_event(self): ... + def get_event(self): ... + def parse_stream_start(self): ... + def parse_implicit_document_start(self): ... + def parse_document_start(self): ... + def parse_document_end(self): ... + def parse_document_content(self): ... + def process_directives(self): ... + def parse_block_node(self): ... + def parse_flow_node(self): ... + def parse_block_node_or_indentless_sequence(self): ... + def parse_node(self, block=..., indentless_sequence=...): ... + def parse_block_sequence_first_entry(self): ... + def parse_block_sequence_entry(self): ... + def parse_indentless_sequence_entry(self): ... + def parse_block_mapping_first_key(self): ... + def parse_block_mapping_key(self): ... + def parse_block_mapping_value(self): ... + def parse_flow_sequence_first_entry(self): ... + def parse_flow_sequence_entry(self, first=...): ... + def parse_flow_sequence_entry_mapping_key(self): ... + def parse_flow_sequence_entry_mapping_value(self): ... + def parse_flow_sequence_entry_mapping_end(self): ... + def parse_flow_mapping_first_key(self): ... + def parse_flow_mapping_key(self, first=...): ... + def parse_flow_mapping_value(self): ... + def parse_flow_mapping_empty_value(self): ... + def process_empty_scalar(self, mark): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi new file mode 100644 index 0000000..05adf0c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi @@ -0,0 +1,34 @@ +from typing import Any +from yaml.error import YAMLError + +class ReaderError(YAMLError): + name: Any + character: Any + position: Any + encoding: Any + reason: Any + def __init__(self, name, position, character, encoding, reason) -> None: ... + +class Reader: + name: Any + stream: Any + stream_pointer: Any + eof: Any + buffer: Any + pointer: Any + raw_buffer: Any + raw_decode: Any + encoding: Any + index: Any + line: Any + column: Any + def __init__(self, stream) -> None: ... + def peek(self, index=...): ... + def prefix(self, length=...): ... + def forward(self, length=...): ... + def get_mark(self): ... + def determine_encoding(self): ... + NON_PRINTABLE: Any + def check_printable(self, data): ... + def update(self, length): ... + def update_raw(self, size=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi new file mode 100644 index 0000000..7d4bbcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi @@ -0,0 +1,54 @@ +from typing import Any +from yaml.error import YAMLError + +class RepresenterError(YAMLError): ... + +class BaseRepresenter: + yaml_representers: Any + yaml_multi_representers: Any + default_style: Any + default_flow_style: Any + represented_objects: Any + object_keeper: Any + alias_key: Any + def __init__(self, default_style=..., default_flow_style=...) -> None: ... + def represent(self, data): ... + def get_classobj_bases(self, cls): ... + def represent_data(self, data): ... + @classmethod + def add_representer(cls, data_type, representer): ... + @classmethod + def add_multi_representer(cls, data_type, representer): ... + def represent_scalar(self, tag, value, style=...): ... + def represent_sequence(self, tag, sequence, flow_style=...): ... + def represent_mapping(self, tag, mapping, flow_style=...): ... + def ignore_aliases(self, data): ... + +class SafeRepresenter(BaseRepresenter): + def ignore_aliases(self, data): ... + def represent_none(self, data): ... + def represent_str(self, data): ... + def represent_unicode(self, data): ... + def represent_bool(self, data): ... + def represent_int(self, data): ... + def represent_long(self, data): ... + inf_value: Any + def represent_float(self, data): ... + def represent_list(self, data): ... + def represent_dict(self, data): ... + def represent_set(self, data): ... + def represent_date(self, data): ... + def represent_datetime(self, data): ... + def represent_yaml_object(self, tag, data, cls, flow_style=...): ... + def represent_undefined(self, data): ... + +class Representer(SafeRepresenter): + def represent_str(self, data): ... + def represent_unicode(self, data): ... + def represent_long(self, data): ... + def represent_complex(self, data): ... + def represent_tuple(self, data): ... + def represent_name(self, data): ... + def represent_module(self, data): ... + def represent_instance(self, data): ... + def represent_object(self, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi new file mode 100644 index 0000000..7297560 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi @@ -0,0 +1,24 @@ +from typing import Any +from yaml.error import YAMLError + +class ResolverError(YAMLError): ... + +class BaseResolver: + DEFAULT_SCALAR_TAG: Any + DEFAULT_SEQUENCE_TAG: Any + DEFAULT_MAPPING_TAG: Any + yaml_implicit_resolvers: Any + yaml_path_resolvers: Any + resolver_exact_paths: Any + resolver_prefix_paths: Any + def __init__(self) -> None: ... + @classmethod + def add_implicit_resolver(cls, tag, regexp, first): ... + @classmethod + def add_path_resolver(cls, tag, path, kind=...): ... + def descend_resolver(self, current_node, current_index): ... + def ascend_resolver(self): ... + def check_resolver_prefix(self, depth, path, kind, current_node, current_index): ... + def resolve(self, kind, value, implicit): ... + +class Resolver(BaseResolver): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi new file mode 100644 index 0000000..33f45da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi @@ -0,0 +1,96 @@ +from typing import Any +from yaml.error import MarkedYAMLError + +class ScannerError(MarkedYAMLError): ... + +class SimpleKey: + token_number: Any + required: Any + index: Any + line: Any + column: Any + mark: Any + def __init__(self, token_number, required, index, line, column, mark) -> None: ... + +class Scanner: + done: Any + flow_level: Any + tokens: Any + tokens_taken: Any + indent: Any + indents: Any + allow_simple_key: Any + possible_simple_keys: Any + def __init__(self) -> None: ... + def check_token(self, *choices): ... + def peek_token(self): ... + def get_token(self): ... + def need_more_tokens(self): ... + def fetch_more_tokens(self): ... + def next_possible_simple_key(self): ... + def stale_possible_simple_keys(self): ... + def save_possible_simple_key(self): ... + def remove_possible_simple_key(self): ... + def unwind_indent(self, column): ... + def add_indent(self, column): ... + def fetch_stream_start(self): ... + def fetch_stream_end(self): ... + def fetch_directive(self): ... + def fetch_document_start(self): ... + def fetch_document_end(self): ... + def fetch_document_indicator(self, TokenClass): ... + def fetch_flow_sequence_start(self): ... + def fetch_flow_mapping_start(self): ... + def fetch_flow_collection_start(self, TokenClass): ... + def fetch_flow_sequence_end(self): ... + def fetch_flow_mapping_end(self): ... + def fetch_flow_collection_end(self, TokenClass): ... + def fetch_flow_entry(self): ... + def fetch_block_entry(self): ... + def fetch_key(self): ... + def fetch_value(self): ... + def fetch_alias(self): ... + def fetch_anchor(self): ... + def fetch_tag(self): ... + def fetch_literal(self): ... + def fetch_folded(self): ... + def fetch_block_scalar(self, style): ... + def fetch_single(self): ... + def fetch_double(self): ... + def fetch_flow_scalar(self, style): ... + def fetch_plain(self): ... + def check_directive(self): ... + def check_document_start(self): ... + def check_document_end(self): ... + def check_block_entry(self): ... + def check_key(self): ... + def check_value(self): ... + def check_plain(self): ... + def scan_to_next_token(self): ... + def scan_directive(self): ... + def scan_directive_name(self, start_mark): ... + def scan_yaml_directive_value(self, start_mark): ... + def scan_yaml_directive_number(self, start_mark): ... + def scan_tag_directive_value(self, start_mark): ... + def scan_tag_directive_handle(self, start_mark): ... + def scan_tag_directive_prefix(self, start_mark): ... + def scan_directive_ignored_line(self, start_mark): ... + def scan_anchor(self, TokenClass): ... + def scan_tag(self): ... + def scan_block_scalar(self, style): ... + def scan_block_scalar_indicators(self, start_mark): ... + def scan_block_scalar_ignored_line(self, start_mark): ... + def scan_block_scalar_indentation(self): ... + def scan_block_scalar_breaks(self, indent): ... + def scan_flow_scalar(self, style): ... + ESCAPE_REPLACEMENTS: Any + ESCAPE_CODES: Any + def scan_flow_scalar_non_spaces(self, double, start_mark): ... + def scan_flow_scalar_spaces(self, double, start_mark): ... + def scan_flow_scalar_breaks(self, double, start_mark): ... + def scan_plain(self): ... + def scan_plain_spaces(self, indent, start_mark): ... + def scan_tag_handle(self, name, start_mark): ... + def scan_tag_uri(self, name, start_mark): ... + def scan_uri_escapes(self, name, start_mark): ... + def scan_line_break(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi new file mode 100644 index 0000000..0c169e8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi @@ -0,0 +1,23 @@ +from typing import Any +from yaml.error import YAMLError + +class SerializerError(YAMLError): ... + +class Serializer: + ANCHOR_TEMPLATE: Any + use_encoding: Any + use_explicit_start: Any + use_explicit_end: Any + use_version: Any + use_tags: Any + serialized_nodes: Any + anchors: Any + last_anchor_id: Any + closed: Any + def __init__(self, encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + def open(self): ... + def close(self): ... + def serialize(self, node): ... + def anchor_node(self, node): ... + def generate_anchor(self, node): ... + def serialize_node(self, node, parent, index): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi new file mode 100644 index 0000000..b258ec7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi @@ -0,0 +1,93 @@ +from typing import Any + +class Token: + start_mark: Any + end_mark: Any + def __init__(self, start_mark, end_mark) -> None: ... + +class DirectiveToken(Token): + id: Any + name: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, name, value, start_mark, end_mark) -> None: ... + +class DocumentStartToken(Token): + id: Any + +class DocumentEndToken(Token): + id: Any + +class StreamStartToken(Token): + id: Any + start_mark: Any + end_mark: Any + encoding: Any + def __init__(self, start_mark=..., end_mark=..., encoding=...) -> None: ... + +class StreamEndToken(Token): + id: Any + +class BlockSequenceStartToken(Token): + id: Any + +class BlockMappingStartToken(Token): + id: Any + +class BlockEndToken(Token): + id: Any + +class FlowSequenceStartToken(Token): + id: Any + +class FlowMappingStartToken(Token): + id: Any + +class FlowSequenceEndToken(Token): + id: Any + +class FlowMappingEndToken(Token): + id: Any + +class KeyToken(Token): + id: Any + +class ValueToken(Token): + id: Any + +class BlockEntryToken(Token): + id: Any + +class FlowEntryToken(Token): + id: Any + +class AliasToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class AnchorToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class TagToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class ScalarToken(Token): + id: Any + value: Any + plain: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, value, plain, start_mark, end_mark, style=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi new file mode 100644 index 0000000..ab2ae9e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi @@ -0,0 +1,30 @@ +from typing import Any, Callable, ClassVar, Generic, Iterator, Mapping, TypeVar, Union + +_T = TypeVar('_T') + +class ContextVar(Generic[_T]): + def __init__(self, name: str, *, default: _T = ...) -> None: ... + @property + def name(self) -> str: ... + def get(self, default: _T = ...) -> _T: ... + def set(self, value: _T) -> Token[_T]: ... + def reset(self, token: Token[_T]) -> None: ... + +class Token(Generic[_T]): + @property + def var(self) -> ContextVar[_T]: ... + @property + def old_value(self) -> Any: ... # returns either _T or MISSING, but that's hard to express + MISSING: ClassVar[object] + +def copy_context() -> Context: ... + +# It doesn't make sense to make this generic, because for most Contexts each ContextVar will have +# a different value. +class Context(Mapping[ContextVar[Any], Any]): + def __init__(self) -> None: ... + def run(self, callable: Callable[..., _T], *args: Any, **kwargs: Any) -> _T: ... + def copy(self) -> Context: ... + def __getitem__(self, key: ContextVar[Any]) -> Any: ... + def __iter__(self) -> Iterator[ContextVar[Any]]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/dataclasses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/dataclasses.pyi new file mode 100644 index 0000000..f8bcd52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/dataclasses.pyi @@ -0,0 +1,71 @@ +from typing import overload, Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Tuple, Type, TypeVar, Union + + +_T = TypeVar('_T') + +class _MISSING_TYPE: ... +MISSING: _MISSING_TYPE + +@overload +def asdict(obj: Any) -> Dict[str, Any]: ... +@overload +def asdict(obj: Any, *, dict_factory: Callable[[List[Tuple[str, Any]]], _T]) -> _T: ... + +@overload +def astuple(obj: Any) -> Tuple[Any, ...]: ... +@overload +def astuple(obj: Any, *, tuple_factory: Callable[[List[Any]], _T]) -> _T: ... + + +@overload +def dataclass(_cls: Type[_T]) -> Type[_T]: ... + +@overload +def dataclass(*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., + unsafe_hash: bool = ..., frozen: bool = ...) -> Callable[[Type[_T]], Type[_T]]: ... + + +class Field(Generic[_T]): + name: str + type: Type[_T] + default: _T + default_factory: Callable[[], _T] + repr: bool + hash: Optional[bool] + init: bool + compare: bool + metadata: Optional[Mapping[str, Any]] + + +# NOTE: Actual return type is 'Field[_T]', but we want to help type checkers +# to understand the magic that happens at runtime. +@overload # `default` and `default_factory` are optional and mutually exclusive. +def field(*, default: _T, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, default_factory: Callable[[], _T], + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> Any: ... + + +def fields(class_or_instance: Any) -> Tuple[Field[Any], ...]: ... + +def is_dataclass(obj: Any) -> bool: ... + +class FrozenInstanceError(AttributeError): ... + +class InitVar(Generic[_T]): ... + +def make_dataclass(cls_name: str, fields: Iterable[Union[str, Tuple[str, type], Tuple[str, type, Field[Any]]]], *, + bases: Tuple[type, ...] = ..., namespace: Optional[Dict[str, Any]] = ..., + init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., hash: bool = ..., + frozen: bool = ...): ... + +def replace(obj: _T, **changes: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi new file mode 100644 index 0000000..ec73a29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi @@ -0,0 +1,5 @@ +from typing import Any + +html_parts: Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi new file mode 100644 index 0000000..382112b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi @@ -0,0 +1,10 @@ +from typing import Any, List + +class reference: + def __init__(self, + rawsource: str = ..., + text: str = ..., + *children: List[Any], + **attributes) -> None: ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi new file mode 100644 index 0000000..58b9cd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi @@ -0,0 +1,12 @@ +import docutils.nodes +import docutils.parsers.rst.states + +from typing import Callable, Any, List, Dict, Tuple + +def register_local_role(name: str, + role_fn: Callable[[str, str, str, int, docutils.parsers.rst.states.Inliner, Dict, List], + Tuple[List[docutils.nodes.reference], List[docutils.nodes.reference]]] + ) -> None: + ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi new file mode 100644 index 0000000..ac00fe1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi @@ -0,0 +1,8 @@ +import typing +from typing import Any + +class Inliner: + def __init__(self) -> None: + ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi new file mode 100644 index 0000000..da8eb40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi @@ -0,0 +1,43 @@ +from typing import Mapping, Any, Optional, Union, Dict + +from . import algorithms + +def decode(jwt: Union[str, bytes], key: Union[str, bytes] = ..., + verify: bool = ..., algorithms: Optional[Any] = ..., + options: Optional[Mapping[Any, Any]] = ..., + **kwargs: Any) -> Dict[str, Any]: ... + +def encode(payload: Mapping[str, Any], key: Union[str, bytes], + algorithm: str = ..., headers: Optional[Mapping[str, Any]] = ..., + json_encoder: Optional[Any] = ...) -> bytes: ... + +def register_algorithm(alg_id: str, + alg_obj: algorithms.Algorithm) -> None: ... + +def unregister_algorithm(alg_id: str) -> None: ... + +class PyJWTError(Exception): ... +class InvalidTokenError(PyJWTError): ... +class DecodeError(InvalidTokenError): ... +class ExpiredSignatureError(InvalidTokenError): ... +class InvalidAudienceError(InvalidTokenError): ... +class InvalidIssuerError(InvalidTokenError): ... +class InvalidIssuedAtError(InvalidTokenError): ... +class ImmatureSignatureError(InvalidTokenError): ... +class InvalidKeyError(PyJWTError): ... +class InvalidAlgorithmError(InvalidTokenError): ... +class MissingRequiredClaimError(InvalidTokenError): ... +class InvalidSignatureError(DecodeError): ... + +# Compatibility aliases (deprecated) +ExpiredSignature = ExpiredSignatureError +InvalidAudience = InvalidAudienceError +InvalidIssuer = InvalidIssuerError + +# These aren't actually documented, but the package +# exports them in __init__.py, so we should at least +# make sure that mypy doesn't raise spurious errors +# if they're used. +get_unverified_header: Any +PyJWT: Any +PyJWS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi new file mode 100644 index 0000000..7177dc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi @@ -0,0 +1,83 @@ +import sys +from hashlib import _Hash +from typing import Any, Set, Dict, Optional, ClassVar, Union, Generic, TypeVar + +requires_cryptography = Set[str] + +def get_default_algorithms() -> Dict[str, Algorithm]: ... + +_K = TypeVar("_K") + +class Algorithm(Generic[_K]): + def prepare_key(self, key: _K) -> _K: ... + def sign(self, msg: bytes, key: _K) -> bytes: ... + def verify(self, msg: bytes, key: _K, sig: bytes) -> bool: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... # should be key_obj: _K, see python/mypy#1337 + @staticmethod + def from_jwk(jwk: str) -> Any: ... # should return _K, see python/mypy#1337 + + +class NoneAlgorithm(Algorithm[None]): + def prepare_key(self, key: Optional[str]) -> None: ... + +class _HashAlg: + def __call__(self, arg: Union[bytes, bytearray, memoryview] = ...) -> _Hash: ... + +if sys.version_info >= (3, 6): + _LoadsString = Union[str, bytes, bytearray] +else: + _LoadsString = str + +class HMACAlgorithm(Algorithm[bytes]): + SHA256: ClassVar[_HashAlg] + SHA384: ClassVar[_HashAlg] + SHA512: ClassVar[_HashAlg] + hash_alg: _HashAlg + def __init__(self, _HashAlg) -> None: ... + def prepare_key(self, key: Union[str, bytes]) -> bytes: ... + @staticmethod + def to_jwk(key_obj: Union[str, bytes]) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> bytes: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class RSAAlgorithm(Algorithm): + SHA256: ClassVar[Any] + SHA384: ClassVar[Any] + SHA512: ClassVar[Any] + hash_alg: Any + def __init__(self, hash_alg: Any) -> None: ... + def prepare_key(self, key: Any) -> Any: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> Any: ... + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class ECAlgorithm(Algorithm): + SHA256: ClassVar[Any] + SHA384: ClassVar[Any] + SHA512: ClassVar[Any] + hash_alg: Any + def __init__(self, hash_alg: Any) -> None: ... + def prepare_key(self, key: Any) -> Any: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> Any: ... + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class RSAPSSAlgorithm(RSAAlgorithm): + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi new file mode 100644 index 0000000..b2bb1f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi @@ -0,0 +1 @@ +from hashlib import _Hash as _HashAlg diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi new file mode 100644 index 0000000..e1342cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi @@ -0,0 +1,10 @@ +from typing import Any +from jwt.algorithms import Algorithm + +from . import _HashAlg + +class ECAlgorithm(Algorithm): + SHA256: _HashAlg + SHA384: _HashAlg + SHA512: _HashAlg + def __init__(self, hash_alg: _HashAlg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi new file mode 100644 index 0000000..763b46a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi @@ -0,0 +1,10 @@ +from typing import Any +from jwt.algorithms import Algorithm + +from . import _HashAlg + +class RSAAlgorithm(Algorithm): + SHA256: _HashAlg + SHA384: _HashAlg + SHA512: _HashAlg + def __init__(self, hash_alg: _HashAlg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/orjson.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/orjson.pyi new file mode 100644 index 0000000..9c1cdc1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/orjson.pyi @@ -0,0 +1,14 @@ +# https://github.com/ijl/orjson/blob/master/orjson.pyi + +from typing import Any, Callable, Optional, Union + +def dumps( + __obj: Any, default: Optional[Callable[[Any], Any]] = ..., option: Optional[int] = ... +) -> bytes: ... +def loads(__obj: Union[bytes, str]) -> Any: ... + +class JSONDecodeError(ValueError): ... +class JSONEncodeError(TypeError): ... + +OPT_STRICT_INTEGER: int +OPT_NAIVE_UTC: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi new file mode 100644 index 0000000..55914e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi @@ -0,0 +1,253 @@ +# Stubs for pkg_resources (Python 3.4) + +from typing import Any, Callable, Dict, IO, Iterable, Generator, Optional, Sequence, Tuple, List, Union, TypeVar, overload +from abc import ABCMeta +import importlib.abc +import types +import zipimport + +_T = TypeVar("_T") +_NestedStr = Union[str, Iterable[Union[str, Iterable[Any]]]] +_InstallerType = Callable[[Requirement], Optional[Distribution]] +_EPDistType = Union[Distribution, Requirement, str] +_MetadataType = Optional[IResourceProvider] +_PkgReqType = Union[str, Requirement] +_DistFinderType = Callable[[str, _Importer, bool], Generator[Distribution, None, None]] +_NSHandlerType = Callable[[_Importer, str, str, types.ModuleType], str] + +def declare_namespace(name: str) -> None: ... +def fixup_namespace_packages(path_item: str) -> None: ... + +class WorkingSet: + entries: List[str] + def __init__(self, entries: Optional[Iterable[str]] = ...) -> None: ... + def require(self, *requirements: _NestedStr) -> Sequence[Distribution]: ... + def run_script(self, requires: str, script_name: str) -> None: ... + def iter_entry_points(self, group: str, name: Optional[str] = ...) -> Generator[EntryPoint, None, None]: ... + def add_entry(self, entry: str) -> None: ... + def __contains__(self, dist: Distribution) -> bool: ... + def __iter__(self) -> Generator[Distribution, None, None]: ... + def find(self, req: Requirement) -> Optional[Distribution]: ... + def resolve( + self, requirements: Sequence[Requirement], env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ... + ) -> List[Distribution]: ... + def add(self, dist: Distribution, entry: Optional[str] = ..., insert: bool = ..., replace: bool = ...) -> None: ... + def subscribe(self, callback: Callable[[Distribution], None]) -> None: ... + def find_plugins( + self, plugin_env: Environment, full_env: Optional[Environment] = ..., fallback: bool = ... + ) -> Tuple[List[Distribution], Dict[Distribution, Exception]]: ... + +working_set: WorkingSet + +def require(*requirements: Union[str, Sequence[str]]) -> Sequence[Distribution]: ... +def run_script(requires: str, script_name: str) -> None: ... +def iter_entry_points(group: str, name: Optional[str] = ...) -> Generator[EntryPoint, None, None]: ... +def add_activation_listener(callback: Callable[[Distribution], None]) -> None: ... + +class Environment: + def __init__( + self, search_path: Optional[Sequence[str]] = ..., platform: Optional[str] = ..., python: Optional[str] = ... + ) -> None: ... + def __getitem__(self, project_name: str) -> List[Distribution]: ... + def __iter__(self) -> Generator[str, None, None]: ... + def add(self, dist: Distribution) -> None: ... + def remove(self, dist: Distribution) -> None: ... + def can_add(self, dist: Distribution) -> bool: ... + def __add__(self, other: Union[Distribution, Environment]) -> Environment: ... + def __iadd__(self, other: Union[Distribution, Environment]) -> Environment: ... + @overload + def best_match(self, req: Requirement, working_set: WorkingSet) -> Distribution: ... + @overload + def best_match(self, req: Requirement, working_set: WorkingSet, installer: Callable[[Requirement], _T] = ...) -> _T: ... + @overload + def obtain(self, requirement: Requirement) -> None: ... + @overload + def obtain(self, requirement: Requirement, installer: Callable[[Requirement], _T] = ...) -> _T: ... + def scan(self, search_path: Optional[Sequence[str]] = ...) -> None: ... + +def parse_requirements(strs: Union[str, Iterable[str]]) -> Generator[Requirement, None, None]: ... + +class Requirement: + unsafe_name: str + project_name: str + key: str + extras: Tuple[str, ...] + specs: List[Tuple[str, str]] + # TODO: change this to Optional[packaging.markers.Marker] once we can import + # packaging.markers + marker: Optional[Any] + @staticmethod + def parse(s: Union[str, Iterable[str]]) -> Requirement: ... + def __contains__(self, item: Union[Distribution, str, Tuple[str, ...]]) -> bool: ... + def __eq__(self, other_requirement: Any) -> bool: ... + +def load_entry_point(dist: _EPDistType, group: str, name: str) -> None: ... +def get_entry_info(dist: _EPDistType, group: str, name: str) -> Optional[EntryPoint]: ... +@overload +def get_entry_map(dist: _EPDistType) -> Dict[str, Dict[str, EntryPoint]]: ... +@overload +def get_entry_map(dist: _EPDistType, group: str) -> Dict[str, EntryPoint]: ... + +class EntryPoint: + name: str + module_name: str + attrs: Tuple[str, ...] + extras: Tuple[str, ...] + dist: Optional[Distribution] + def __init__( + self, + name: str, + module_name: str, + attrs: Tuple[str, ...] = ..., + extras: Tuple[str, ...] = ..., + dist: Optional[Distribution] = ..., + ) -> None: ... + @classmethod + def parse(cls, src: str, dist: Optional[Distribution] = ...) -> EntryPoint: ... + @classmethod + def parse_group( + cls, group: str, lines: Union[str, Sequence[str]], dist: Optional[Distribution] = ... + ) -> Dict[str, EntryPoint]: ... + @classmethod + def parse_map( + cls, data: Union[Dict[str, Union[str, Sequence[str]]], str, Sequence[str]], dist: Optional[Distribution] = ... + ) -> Dict[str, EntryPoint]: ... + def load(self, require: bool = ..., env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ...) -> Any: ... + def require(self, env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ...) -> None: ... + def resolve(self) -> Any: ... + +def find_distributions(path_item: str, only: bool = ...) -> Generator[Distribution, None, None]: ... +def get_distribution(dist: Union[Requirement, str, Distribution]) -> Distribution: ... + +class Distribution(IResourceProvider, IMetadataProvider): + PKG_INFO: str + location: str + project_name: str + key: str + extras: List[str] + version: str + parsed_version: Tuple[str, ...] + py_version: str + platform: Optional[str] + precedence: int + def __init__( + self, + location: Optional[str] = ..., + metadata: Optional[str] = ..., + project_name: Optional[str] = ..., + version: Optional[str] = ..., + py_version: str = ..., + platform: Optional[str] = ..., + precedence: int = ..., + ) -> None: ... + @classmethod + def from_location( + cls, location: str, basename: str, metadata: Optional[str] = ..., **kw: Union[str, None, int] + ) -> Distribution: ... + @classmethod + def from_filename(cls, filename: str, metadata: Optional[str] = ..., **kw: Union[str, None, int]) -> Distribution: ... + def activate(self, path: Optional[List[str]] = ...) -> None: ... + def as_requirement(self) -> Requirement: ... + def requires(self, extras: Tuple[str, ...] = ...) -> List[Requirement]: ... + def clone(self, **kw: Union[str, int, None]) -> Requirement: ... + def egg_name(self) -> str: ... + def __cmp__(self, other: Any) -> bool: ... + def get_entry_info(self, group: str, name: str) -> Optional[EntryPoint]: ... + @overload + def get_entry_map(self) -> Dict[str, Dict[str, EntryPoint]]: ... + @overload + def get_entry_map(self, group: str) -> Dict[str, EntryPoint]: ... + def load_entry_point(self, group: str, name: str) -> None: ... + +EGG_DIST: int +BINARY_DIST: int +SOURCE_DIST: int +CHECKOUT_DIST: int +DEVELOP_DIST: int + +def resource_exists(package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... +def resource_stream(package_or_requirement: _PkgReqType, resource_name: str) -> IO[bytes]: ... +def resource_string(package_or_requirement: _PkgReqType, resource_name: str) -> bytes: ... +def resource_isdir(package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... +def resource_listdir(package_or_requirement: _PkgReqType, resource_name: str) -> List[str]: ... +def resource_filename(package_or_requirement: _PkgReqType, resource_name: str) -> str: ... +def set_extraction_path(path: str) -> None: ... +def cleanup_resources(force: bool = ...) -> List[str]: ... + +class IResourceManager: + def resource_exists(self, package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... + def resource_stream(self, package_or_requirement: _PkgReqType, resource_name: str) -> IO[bytes]: ... + def resource_string(self, package_or_requirement: _PkgReqType, resource_name: str) -> bytes: ... + def resource_isdir(self, package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... + def resource_listdir(self, package_or_requirement: _PkgReqType, resource_name: str) -> List[str]: ... + def resource_filename(self, package_or_requirement: _PkgReqType, resource_name: str) -> str: ... + def set_extraction_path(self, path: str) -> None: ... + def cleanup_resources(self, force: bool = ...) -> List[str]: ... + def get_cache_path(self, archive_name: str, names: Tuple[str, ...] = ...) -> str: ... + def extraction_error(self) -> None: ... + def postprocess(self, tempname: str, filename: str) -> None: ... + +@overload +def get_provider(package_or_requirement: str) -> IResourceProvider: ... +@overload +def get_provider(package_or_requirement: Requirement) -> Distribution: ... + +class IMetadataProvider: + def has_metadata(self, name: str) -> bool: ... + def metadata_isdir(self, name: str) -> bool: ... + def metadata_listdir(self, name: str) -> List[str]: ... + def get_metadata(self, name: str) -> str: ... + def get_metadata_lines(self, name: str) -> Generator[str, None, None]: ... + def run_script(self, script_name: str, namespace: Dict[str, Any]) -> None: ... + +class ResolutionError(Exception): ... +class DistributionNotFound(ResolutionError): ... +class VersionConflict(ResolutionError): ... +class UnknownExtra(ResolutionError): ... + +class ExtractionError(Exception): + manager: IResourceManager + cache_path: str + original_error: Exception + +class _Importer(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader, metaclass=ABCMeta): ... + +def register_finder(importer_type: type, distribution_finder: _DistFinderType) -> None: ... +def register_loader_type(loader_type: type, provider_factory: Callable[[types.ModuleType], IResourceProvider]) -> None: ... +def register_namespace_handler(importer_type: type, namespace_handler: _NSHandlerType) -> None: ... + +class IResourceProvider(IMetadataProvider): ... +class NullProvider: ... +class EggProvider(NullProvider): ... +class DefaultProvider(EggProvider): ... + +class PathMetadata(DefaultProvider, IResourceProvider): + def __init__(self, path: str, egg_info: str) -> None: ... + +class ZipProvider(EggProvider): ... + +class EggMetadata(ZipProvider, IResourceProvider): + def __init__(self, zipimporter: zipimport.zipimporter) -> None: ... + +class EmptyProvider(NullProvider): ... + +empty_provider: EmptyProvider + +class FileMetadata(EmptyProvider, IResourceProvider): + def __init__(self, path_to_pkg_info: str) -> None: ... + +def parse_version(v: str) -> Tuple[str, ...]: ... +def yield_lines(strs: _NestedStr) -> Generator[str, None, None]: ... +def split_sections(strs: _NestedStr) -> Generator[Tuple[Optional[str], str], None, None]: ... +def safe_name(name: str) -> str: ... +def safe_version(version: str) -> str: ... +def safe_extra(extra: str) -> str: ... +def to_filename(name_or_version: str) -> str: ... +def get_build_platform() -> str: ... +def get_platform() -> str: ... +def get_supported_platform() -> str: ... +def compatible_platforms(provided: Optional[str], required: Optional[str]) -> bool: ... +def get_default_cache() -> str: ... +def get_importer(path_item: str) -> _Importer: ... +def ensure_directory(path: str) -> None: ... +def normalize_path(filename: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi new file mode 100644 index 0000000..e7b17a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi @@ -0,0 +1,14 @@ +from typing import Text +import os +import sys + +needs_makedirs: bool + +def _makedirs_31(path: Text, exist_ok: bool = ...) -> None: ... + +# _makedirs_31 has special behavior to handle an edge case that was removed in +# 3.4.1. No one should be using 3.4 instead of 3.4.1, so this should be fine. +if sys.version_info >= (3,): + makedirs = os.makedirs +else: + makedirs = _makedirs_31 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/__init__.pyi new file mode 100644 index 0000000..b785eac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/__init__.pyi @@ -0,0 +1,108 @@ +# Stubs for six (Python 3.5) + +from __future__ import print_function + +from typing import ( + Any, + AnyStr, + Callable, + Dict, + ItemsView, + Iterable, + KeysView, + Mapping, + NoReturn, + Optional, + Pattern, + Text, + Tuple, + Type, + TypeVar, + Union, + ValuesView, + overload, +) +import types +import typing +import unittest + +# Exports +from io import StringIO as StringIO, BytesIO as BytesIO +from builtins import next as next +from functools import wraps as wraps +from . import moves + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + +# TODO make constant, then move this stub to 2and3 +# https://github.com/python/typeshed/issues/17 +PY2 = False +PY3 = True +PY34: bool + +string_types = str, +integer_types = int, +class_types = type, +text_type = str +binary_type = bytes + +MAXSIZE: int + +# def add_move +# def remove_move + +def callable(obj: object) -> bool: ... + +def get_unbound_function(unbound: types.FunctionType) -> types.FunctionType: ... +def create_bound_method(func: types.FunctionType, obj: object) -> types.MethodType: ... +def create_unbound_method(func: types.FunctionType, cls: type) -> types.FunctionType: ... + +Iterator = object + +def get_method_function(meth: types.MethodType) -> types.FunctionType: ... +def get_method_self(meth: types.MethodType) -> Optional[object]: ... +def get_function_closure(fun: types.FunctionType) -> Optional[Tuple[types._Cell, ...]]: ... +def get_function_code(fun: types.FunctionType) -> types.CodeType: ... +def get_function_defaults(fun: types.FunctionType) -> Optional[Tuple[Any, ...]]: ... +def get_function_globals(fun: types.FunctionType) -> Dict[str, Any]: ... + +def iterkeys(d: Mapping[_K, _V]) -> typing.Iterator[_K]: ... +def itervalues(d: Mapping[_K, _V]) -> typing.Iterator[_V]: ... +def iteritems(d: Mapping[_K, _V]) -> typing.Iterator[Tuple[_K, _V]]: ... +# def iterlists + +def viewkeys(d: Mapping[_K, _V]) -> KeysView[_K]: ... +def viewvalues(d: Mapping[_K, _V]) -> ValuesView[_V]: ... +def viewitems(d: Mapping[_K, _V]) -> ItemsView[_K, _V]: ... + +def b(s: str) -> binary_type: ... +def u(s: str) -> text_type: ... + +unichr = chr +def int2byte(i: int) -> bytes: ... +def byte2int(bs: binary_type) -> int: ... +def indexbytes(buf: binary_type, i: int) -> int: ... +def iterbytes(buf: binary_type) -> typing.Iterator[int]: ... + +def assertCountEqual(self: unittest.TestCase, first: Iterable[_T], second: Iterable[_T], msg: Optional[str] = ...) -> None: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, msg: Optional[str] = ...) -> Any: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, callable_obj: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ... +def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], msg: Optional[str] = ...) -> None: ... + +exec_ = exec + +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = ...) -> NoReturn: ... +def raise_from(value: Union[BaseException, Type[BaseException]], from_value: Optional[BaseException]) -> NoReturn: ... + +print_ = print + +def with_metaclass(meta: type, *bases: type) -> type: ... +def add_metaclass(metaclass: type) -> Callable[[_T], _T]: ... +def ensure_binary(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> bytes: ... +def ensure_str(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> str: ... +def ensure_text(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> Text: ... +def python_2_unicode_compatible(klass: _T) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi new file mode 100644 index 0000000..3d6efce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi @@ -0,0 +1,69 @@ +# Stubs for six.moves +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +import sys + +from io import StringIO as cStringIO +from builtins import filter as filter +from itertools import filterfalse as filterfalse +from builtins import input as input +from sys import intern as intern +from builtins import map as map +from os import getcwd as getcwd +from os import getcwdb as getcwdb +from builtins import range as range +from functools import reduce as reduce +from shlex import quote as shlex_quote +from io import StringIO as StringIO +from collections import UserDict as UserDict +from collections import UserList as UserList +from collections import UserString as UserString +from builtins import range as xrange +from builtins import zip as zip +from itertools import zip_longest as zip_longest +from . import builtins +from . import configparser +# import copyreg as copyreg +# import dbm.gnu as dbm_gnu +from . import _dummy_thread +from . import http_cookiejar +from . import http_cookies +from . import html_entities +from . import html_parser +from . import http_client +from . import email_mime_multipart +from . import email_mime_nonmultipart +from . import email_mime_text +from . import email_mime_base +from . import BaseHTTPServer +from . import CGIHTTPServer +from . import SimpleHTTPServer +from . import cPickle +from . import queue +from . import reprlib +from . import socketserver +from . import _thread +from . import tkinter +from . import tkinter_dialog +from . import tkinter_filedialog +# import tkinter.scrolledtext as tkinter_scrolledtext +# import tkinter.simpledialog as tkinter_simpledialog +# import tkinter.tix as tkinter_tix +from . import tkinter_ttk +from . import tkinter_constants +# import tkinter.dnd as tkinter_dnd +# import tkinter.colorchooser as tkinter_colorchooser +from . import tkinter_commondialog +from . import tkinter_tkfiledialog +# import tkinter.font as tkinter_font +# import tkinter.messagebox as tkinter_messagebox +# import tkinter.simpledialog as tkinter_tksimpledialog +from . import urllib_parse +from . import urllib_error +from . import urllib +from . import urllib_robotparser +# import xmlrpc.client as xmlrpc_client +# import xmlrpc.server as xmlrpc_server + +from importlib import reload as reload_module diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi new file mode 100644 index 0000000..2487961 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi @@ -0,0 +1 @@ +from _dummy_thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi new file mode 100644 index 0000000..25952a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi @@ -0,0 +1 @@ +from _thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi new file mode 100644 index 0000000..9596ba0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi @@ -0,0 +1 @@ +from builtins import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi new file mode 100644 index 0000000..2b944b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi @@ -0,0 +1 @@ +from pickle import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi new file mode 100644 index 0000000..044861c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi @@ -0,0 +1 @@ +from configparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi new file mode 100644 index 0000000..4df155c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi @@ -0,0 +1 @@ +from email.mime.base import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi new file mode 100644 index 0000000..4f31241 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi @@ -0,0 +1 @@ +from email.mime.multipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi new file mode 100644 index 0000000..c15c8c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi @@ -0,0 +1 @@ +from email.mime.nonmultipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi new file mode 100644 index 0000000..51e1473 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi @@ -0,0 +1 @@ +from email.mime.text import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi new file mode 100644 index 0000000..c1244dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi @@ -0,0 +1 @@ +from html.entities import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi new file mode 100644 index 0000000..6db6dd8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi @@ -0,0 +1 @@ +from html.parser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi new file mode 100644 index 0000000..36d29b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi @@ -0,0 +1 @@ +from http.client import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi new file mode 100644 index 0000000..88a1aed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi @@ -0,0 +1 @@ +from http.cookiejar import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi new file mode 100644 index 0000000..9c59a53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi @@ -0,0 +1 @@ +from http.cookies import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi new file mode 100644 index 0000000..fe7be53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi @@ -0,0 +1 @@ +from queue import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi new file mode 100644 index 0000000..c329846 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi @@ -0,0 +1 @@ +from reprlib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi new file mode 100644 index 0000000..6101c8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi @@ -0,0 +1 @@ +from socketserver import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi new file mode 100644 index 0000000..fc4d53a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi @@ -0,0 +1 @@ +from tkinter import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi new file mode 100644 index 0000000..34eb419 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi @@ -0,0 +1 @@ +from tkinter.commondialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi new file mode 100644 index 0000000..3c04f6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi @@ -0,0 +1 @@ +from tkinter.constants import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi new file mode 100644 index 0000000..0da73c2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi @@ -0,0 +1 @@ +from tkinter.dialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi new file mode 100644 index 0000000..c4cc7c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi @@ -0,0 +1 @@ +from tkinter.filedialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi new file mode 100644 index 0000000..c4cc7c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi @@ -0,0 +1 @@ +from tkinter.filedialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi new file mode 100644 index 0000000..14576f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi @@ -0,0 +1 @@ +from tkinter.ttk import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi new file mode 100644 index 0000000..d08209c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi @@ -0,0 +1,5 @@ +import six.moves.urllib.error as error +import six.moves.urllib.parse as parse +import six.moves.urllib.request as request +import six.moves.urllib.response as response +import six.moves.urllib.robotparser as robotparser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi new file mode 100644 index 0000000..83f0d22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi @@ -0,0 +1,3 @@ +from urllib.error import URLError as URLError +from urllib.error import HTTPError as HTTPError +from urllib.error import ContentTooShortError as ContentTooShortError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi new file mode 100644 index 0000000..8b4310a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi @@ -0,0 +1,27 @@ +# Stubs for six.moves.urllib.parse +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from urllib.parse import ParseResult as ParseResult +from urllib.parse import SplitResult as SplitResult +from urllib.parse import parse_qs as parse_qs +from urllib.parse import parse_qsl as parse_qsl +from urllib.parse import urldefrag as urldefrag +from urllib.parse import urljoin as urljoin +from urllib.parse import urlparse as urlparse +from urllib.parse import urlsplit as urlsplit +from urllib.parse import urlunparse as urlunparse +from urllib.parse import urlunsplit as urlunsplit +from urllib.parse import quote as quote +from urllib.parse import quote_plus as quote_plus +from urllib.parse import unquote as unquote +from urllib.parse import unquote_plus as unquote_plus +from urllib.parse import urlencode as urlencode +# from urllib.parse import splitquery as splitquery +# from urllib.parse import splittag as splittag +# from urllib.parse import splituser as splituser +from urllib.parse import uses_fragment as uses_fragment +from urllib.parse import uses_netloc as uses_netloc +from urllib.parse import uses_params as uses_params +from urllib.parse import uses_query as uses_query +from urllib.parse import uses_relative as uses_relative diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi new file mode 100644 index 0000000..b01dea7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi @@ -0,0 +1,39 @@ +# Stubs for six.moves.urllib.request +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from urllib.request import urlopen as urlopen +from urllib.request import install_opener as install_opener +from urllib.request import build_opener as build_opener +from urllib.request import pathname2url as pathname2url +from urllib.request import url2pathname as url2pathname +from urllib.request import getproxies as getproxies +from urllib.request import Request as Request +from urllib.request import OpenerDirector as OpenerDirector +from urllib.request import HTTPDefaultErrorHandler as HTTPDefaultErrorHandler +from urllib.request import HTTPRedirectHandler as HTTPRedirectHandler +from urllib.request import HTTPCookieProcessor as HTTPCookieProcessor +from urllib.request import ProxyHandler as ProxyHandler +from urllib.request import BaseHandler as BaseHandler +from urllib.request import HTTPPasswordMgr as HTTPPasswordMgr +from urllib.request import HTTPPasswordMgrWithDefaultRealm as HTTPPasswordMgrWithDefaultRealm +from urllib.request import AbstractBasicAuthHandler as AbstractBasicAuthHandler +from urllib.request import HTTPBasicAuthHandler as HTTPBasicAuthHandler +from urllib.request import ProxyBasicAuthHandler as ProxyBasicAuthHandler +from urllib.request import AbstractDigestAuthHandler as AbstractDigestAuthHandler +from urllib.request import HTTPDigestAuthHandler as HTTPDigestAuthHandler +from urllib.request import ProxyDigestAuthHandler as ProxyDigestAuthHandler +from urllib.request import HTTPHandler as HTTPHandler +from urllib.request import HTTPSHandler as HTTPSHandler +from urllib.request import FileHandler as FileHandler +from urllib.request import FTPHandler as FTPHandler +from urllib.request import CacheFTPHandler as CacheFTPHandler +from urllib.request import UnknownHandler as UnknownHandler +from urllib.request import HTTPErrorProcessor as HTTPErrorProcessor +from urllib.request import urlretrieve as urlretrieve +from urllib.request import urlcleanup as urlcleanup +from urllib.request import URLopener as URLopener +from urllib.request import FancyURLopener as FancyURLopener +# from urllib.request import proxy_bypass as proxy_bypass +from urllib.request import parse_http_list as parse_http_list +from urllib.request import parse_keqv_list as parse_keqv_list diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi new file mode 100644 index 0000000..9f681ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi @@ -0,0 +1,8 @@ +# Stubs for six.moves.urllib.response +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +# from urllib.response import addbase as addbase +# from urllib.response import addclosehook as addclosehook +# from urllib.response import addinfo as addinfo +from urllib.response import addinfourl as addinfourl diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi new file mode 100644 index 0000000..bccda14 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi @@ -0,0 +1 @@ +from urllib.robotparser import RobotFileParser as RobotFileParser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi new file mode 100644 index 0000000..2720072 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi @@ -0,0 +1 @@ +from urllib.error import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi new file mode 100644 index 0000000..b557bbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi @@ -0,0 +1 @@ +from urllib.parse import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi new file mode 100644 index 0000000..dc03dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi @@ -0,0 +1 @@ +from .urllib.request import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi new file mode 100644 index 0000000..bbee522 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi @@ -0,0 +1 @@ +from .urllib.response import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi new file mode 100644 index 0000000..bbf5c3c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi @@ -0,0 +1 @@ +from urllib.robotparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi new file mode 100644 index 0000000..f260032 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi @@ -0,0 +1,2 @@ +# This module is a fork of the CPython 2 and 3 ast modules with PEP 484 support. +# See: https://github.com/python/typed_ast diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi new file mode 100644 index 0000000..c564342 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi @@ -0,0 +1,361 @@ +import typing +from typing import Any, Optional, Union, Generic, Iterator + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> None: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> None: ... + +def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ...) -> AST: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> Optional[bytes]: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +PyCF_ONLY_AST: int + +# ast classes + +identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + type_comment: Optional[str] + +class ClassDef(stmt): + name: identifier + bases: typing.List[expr] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + type_comment: Optional[str] + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class Print(stmt): + dest: Optional[expr] + values: typing.List[expr] + nl: bool + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + context_expr: expr + optional_vars: Optional[expr] + body: typing.List[stmt] + type_comment: Optional[str] + +class Raise(stmt): + type: Optional[expr] + inst: Optional[expr] + tback: Optional[expr] + +class TryExcept(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + +class TryFinally(stmt): + body: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[identifier] + names: typing.List[alias] + level: Optional[int] + +class Exec(stmt): + body: expr + globals: Optional[expr] + locals: Optional[expr] + +class Global(stmt): + names: typing.List[identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + +class Ellipsis(slice): ... + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Yield(expr): + value: Optional[expr] + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + starargs: Optional[expr] + kwargs: Optional[expr] + +class Repr(expr): + value: expr + +class Num(expr): + n: Union[int, float, complex] + +class Str(expr): + s: bytes + kind: str + +class Attribute(expr): + value: expr + attr: identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Name(expr): + id: identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + + +class ExceptHandler(AST): + type: Optional[expr] + name: Optional[expr] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[expr] + vararg: Optional[identifier] + kwarg: Optional[identifier] + defaults: typing.List[expr] + type_comments: typing.List[Optional[str]] + +class keyword(AST): + arg: identifier + value: expr + +class alias(AST): + name: identifier + asname: Optional[identifier] + + +class TypeIgnore(AST): + lineno: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi new file mode 100644 index 0000000..1962b46 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi @@ -0,0 +1,413 @@ +import typing +from typing import Any, Optional, Union, Generic, Iterator + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> None: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> None: ... + +def parse(source: Union[str, bytes], + filename: Union[str, bytes] = ..., + mode: str = ..., + feature_version: int = ...) -> AST: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +PyCF_ONLY_AST: int + +# ast classes + +identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + type_comment: Optional[str] + +class AsyncFunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + type_comment: Optional[str] + +class ClassDef(stmt): + name: identifier + bases: typing.List[expr] + keywords: typing.List[keyword] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + type_comment: Optional[str] + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class AnnAssign(stmt): + target: expr + annotation: expr + value: Optional[expr] + simple: int + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class AsyncFor(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + type_comment: Optional[str] + +class AsyncWith(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + type_comment: Optional[str] + +class Raise(stmt): + exc: Optional[expr] + cause: Optional[expr] + +class Try(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[identifier] + names: typing.List[alias] + level: Optional[int] + +class Global(stmt): + names: typing.List[identifier] + +class Nonlocal(stmt): + names: typing.List[identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Await(expr): + value: expr + +class Yield(expr): + value: Optional[expr] + +class YieldFrom(expr): + value: expr + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + +class Num(expr): + n: Union[float, int, complex] + +class Str(expr): + s: str + kind: str + +class FormattedValue(expr): + value: expr + conversion: typing.Optional[int] + format_spec: typing.Optional[expr] + +class JoinedStr(expr): + values: typing.List[expr] + +class Bytes(expr): + s: bytes + +class NameConstant(expr): + value: Any + +class Ellipsis(expr): ... + +class Attribute(expr): + value: expr + attr: identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Starred(expr): + value: expr + ctx: expr_context + +class Name(expr): + id: identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class MatMult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + is_async: int + + +class ExceptHandler(AST): + type: Optional[expr] + name: Optional[identifier] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[arg] + vararg: Optional[arg] + kwonlyargs: typing.List[arg] + kw_defaults: typing.List[expr] + kwarg: Optional[arg] + defaults: typing.List[expr] + +class arg(AST): + arg: identifier + annotation: Optional[expr] + lineno: int + col_offset: int + type_comment: typing.Optional[str] + +class keyword(AST): + arg: Optional[identifier] + value: expr + +class alias(AST): + name: identifier + asname: Optional[identifier] + +class withitem(AST): + context_expr: expr + optional_vars: Optional[expr] + + +class TypeIgnore(AST): + lineno: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi new file mode 100644 index 0000000..d5f1829 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi @@ -0,0 +1,4 @@ +from . import ast27 +from . import ast3 + +def py2to3(ast: ast27.AST) -> ast3.AST: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/utils.py new file mode 100644 index 0000000..a5cf84b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/build/lib/jedi/utils.py @@ -0,0 +1,134 @@ +""" +Utilities for end-users. +""" + +from __future__ import absolute_import +import __main__ +from collections import namedtuple +import logging +import traceback +import re +import os +import sys + +from jedi import Interpreter + + +READLINE_DEBUG = False + + +def setup_readline(namespace_module=__main__): + """ + Install Jedi completer to :mod:`readline`. + + This function setups :mod:`readline` to use Jedi in Python interactive + shell. If you want to use a custom ``PYTHONSTARTUP`` file (typically + ``$HOME/.pythonrc.py``), you can add this piece of code:: + + try: + from jedi.utils import setup_readline + setup_readline() + except ImportError: + # Fallback to the stdlib readline completer if it is installed. + # Taken from http://docs.python.org/2/library/rlcompleter.html + print("Jedi is not installed, falling back to readline") + try: + import readline + import rlcompleter + readline.parse_and_bind("tab: complete") + except ImportError: + print("Readline is not installed either. No tab completion is enabled.") + + This will fallback to the readline completer if Jedi is not installed. + The readline completer will only complete names in the global namespace, + so for example:: + + ran + + will complete to ``range`` + + with both Jedi and readline, but:: + + range(10).cou + + will show complete to ``range(10).count`` only with Jedi. + + You'll also need to add ``export PYTHONSTARTUP=$HOME/.pythonrc.py`` to + your shell profile (usually ``.bash_profile`` or ``.profile`` if you use + bash). + + """ + if READLINE_DEBUG: + logging.basicConfig( + filename='/tmp/jedi.log', + filemode='a', + level=logging.DEBUG + ) + + class JediRL(object): + def complete(self, text, state): + """ + This complete stuff is pretty weird, a generator would make + a lot more sense, but probably due to backwards compatibility + this is still the way how it works. + + The only important part is stuff in the ``state == 0`` flow, + everything else has been copied from the ``rlcompleter`` std. + library module. + """ + if state == 0: + sys.path.insert(0, os.getcwd()) + # Calling python doesn't have a path, so add to sys.path. + try: + logging.debug("Start REPL completion: " + repr(text)) + interpreter = Interpreter(text, [namespace_module.__dict__]) + + completions = interpreter.completions() + logging.debug("REPL completions: %s", completions) + + self.matches = [ + text[:len(text) - c._like_name_length] + c.name_with_symbols + for c in completions + ] + except: + logging.error("REPL Completion error:\n" + traceback.format_exc()) + raise + finally: + sys.path.pop(0) + try: + return self.matches[state] + except IndexError: + return None + + try: + # Need to import this one as well to make sure it's executed before + # this code. This didn't use to be an issue until 3.3. Starting with + # 3.4 this is different, it always overwrites the completer if it's not + # already imported here. + import rlcompleter # noqa: F401 + import readline + except ImportError: + print("Jedi: Module readline not available.") + else: + readline.set_completer(JediRL().complete) + readline.parse_and_bind("tab: complete") + # jedi itself does the case matching + readline.parse_and_bind("set completion-ignore-case on") + # because it's easier to hit the tab just once + readline.parse_and_bind("set show-all-if-unmodified") + readline.parse_and_bind("set show-all-if-ambiguous on") + # don't repeat all the things written in the readline all the time + readline.parse_and_bind("set completion-prefix-display-length 2") + # No delimiters, Jedi handles that. + readline.set_completer_delims('') + + +def version_info(): + """ + Returns a namedtuple of Jedi's version, similar to Python's + ``sys.version_info``. + """ + Version = namedtuple('Version', 'major, minor, micro') + from jedi import __version__ + tupl = re.findall(r'[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/conftest.py b/vim/bundle/jedi-vim/pythonx/jedi/conftest.py new file mode 100644 index 0000000..765c865 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/conftest.py @@ -0,0 +1,158 @@ +import tempfile +import shutil +import os +from functools import partial + +import pytest + +import jedi +from jedi.api.environment import get_system_environment, InterpreterEnvironment +from jedi._compatibility import py_version + +collect_ignore = [ + 'setup.py', + '__main__.py', + 'jedi/evaluate/compiled/subprocess/__main__.py', + 'build/', + 'test/examples', +] + + +# The following hooks (pytest_configure, pytest_unconfigure) are used +# to modify `jedi.settings.cache_directory` because `clean_jedi_cache` +# has no effect during doctests. Without these hooks, doctests uses +# user's cache (e.g., ~/.cache/jedi/). We should remove this +# workaround once the problem is fixed in pytest. +# +# See: +# - https://github.com/davidhalter/jedi/pull/168 +# - https://bitbucket.org/hpk42/pytest/issue/275/ + +jedi_cache_directory_orig = None +jedi_cache_directory_temp = None + + +def pytest_addoption(parser): + parser.addoption("--jedi-debug", "-D", action='store_true', + help="Enables Jedi's debug output.") + + parser.addoption("--warning-is-error", action='store_true', + help="Warnings are treated as errors.") + + parser.addoption("--env", action='store', + help="Execute the tests in that environment (e.g. 35 for python3.5).") + parser.addoption("--interpreter-env", "-I", action='store_true', + help="Don't use subprocesses to guarantee having safe " + "code execution. Useful for debugging.") + + +def pytest_configure(config): + global jedi_cache_directory_orig, jedi_cache_directory_temp + jedi_cache_directory_orig = jedi.settings.cache_directory + jedi_cache_directory_temp = tempfile.mkdtemp(prefix='jedi-test-') + jedi.settings.cache_directory = jedi_cache_directory_temp + + if config.option.jedi_debug: + jedi.set_debug_function() + + if config.option.warning_is_error: + import warnings + warnings.simplefilter("error") + + +def pytest_unconfigure(config): + global jedi_cache_directory_orig, jedi_cache_directory_temp + jedi.settings.cache_directory = jedi_cache_directory_orig + shutil.rmtree(jedi_cache_directory_temp) + + +@pytest.fixture(scope='session') +def clean_jedi_cache(request): + """ + Set `jedi.settings.cache_directory` to a temporary directory during test. + + Note that you can't use built-in `tmpdir` and `monkeypatch` + fixture here because their scope is 'function', which is not used + in 'session' scope fixture. + + This fixture is activated in ../pytest.ini. + """ + from jedi import settings + old = settings.cache_directory + tmp = tempfile.mkdtemp(prefix='jedi-test-') + settings.cache_directory = tmp + + @request.addfinalizer + def restore(): + settings.cache_directory = old + shutil.rmtree(tmp) + + +@pytest.fixture(scope='session') +def environment(request): + if request.config.option.interpreter_env: + return InterpreterEnvironment() + + version = request.config.option.env + if version is None: + version = os.environ.get('JEDI_TEST_ENVIRONMENT', str(py_version)) + + return get_system_environment(version[0] + '.' + version[1:]) + + +@pytest.fixture(scope='session') +def Script(environment): + return partial(jedi.Script, environment=environment) + + +@pytest.fixture(scope='session') +def names(environment): + return partial(jedi.names, environment=environment) + + +@pytest.fixture(scope='session') +def has_typing(environment): + if environment.version_info >= (3, 5, 0): + # This if is just needed to avoid that tests ever skip way more than + # they should for all Python versions. + return True + + script = jedi.Script('import typing', environment=environment) + return bool(script.goto_definitions()) + + +@pytest.fixture(scope='session') +def jedi_path(): + return os.path.dirname(__file__) + + +@pytest.fixture() +def skip_python2(environment): + if environment.version_info.major == 2: + # This if is just needed to avoid that tests ever skip way more than + # they should for all Python versions. + pytest.skip() + + +@pytest.fixture() +def skip_pre_python38(environment): + if environment.version_info < (3, 8): + # This if is just needed to avoid that tests ever skip way more than + # they should for all Python versions. + pytest.skip() + + +@pytest.fixture() +def skip_pre_python37(environment): + if environment.version_info < (3, 7): + # This if is just needed to avoid that tests ever skip way more than + # they should for all Python versions. + pytest.skip() + + +@pytest.fixture() +def skip_pre_python35(environment): + if environment.version_info < (3, 5): + # This if is just needed to avoid that tests ever skip way more than + # they should for all Python versions. + pytest.skip() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/deploy-master.sh b/vim/bundle/jedi-vim/pythonx/jedi/deploy-master.sh new file mode 100755 index 0000000..eadddfe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/deploy-master.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# The script creates a separate folder in build/ and creates tags there, pushes +# them and then uploads the package to PyPI. + +set -eu -o pipefail + +BASE_DIR=$(dirname $(readlink -f "$0")) +cd $BASE_DIR + +git fetch --tags + +PROJECT_NAME=jedi +BRANCH=master +BUILD_FOLDER=build + +[ -d $BUILD_FOLDER ] || mkdir $BUILD_FOLDER +# Remove the previous deployment first. +# Checkout the right branch +cd $BUILD_FOLDER +rm -rf $PROJECT_NAME +git clone .. $PROJECT_NAME +cd $PROJECT_NAME +git checkout $BRANCH +git submodule update --init + +# Test first. +tox + +# Create tag +tag=v$(python -c "import $PROJECT_NAME; print($PROJECT_NAME.__version__)") + +master_ref=$(git show-ref -s heads/$BRANCH) +tag_ref=$(git show-ref -s $tag || true) +if [[ $tag_ref ]]; then + if [[ $tag_ref != $master_ref ]]; then + echo 'Cannot tag something that has already been tagged with another commit.' + exit 1 + fi +else + git tag -a $tag + git push --tags +fi + +# Package and upload to PyPI +#rm -rf dist/ - Not needed anymore, because the folder is never reused. +echo `pwd` +python setup.py sdist bdist_wheel +# Maybe do a pip install twine before. +twine upload dist/* + +cd $BASE_DIR +# The tags have been pushed to this repo. Push the tags to github, now. +git push --tags diff --git a/vim/bundle/jedi-vim/pythonx/jedi/dist/jedi-0.15.1-py3.6.egg b/vim/bundle/jedi-vim/pythonx/jedi/dist/jedi-0.15.1-py3.6.egg new file mode 100644 index 0000000000000000000000000000000000000000..935e7ef95150175c22576ac0c15316293df9aa42 GIT binary patch literal 1257030 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 u7JjTWP^>R^Sl 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

RU|bu_PAT> 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�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%0AQHiF^R4+tQm@2OYieU(+cx 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

YL>oD3*GD)T7I*L$^HK4Ec{LwFJ`8jCE%s32 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μ>1I9eIz2>!nL%YzwT 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

v;jIL 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 z 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ɼ{8&#~ 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%0Ajd1o;x%}JZPY0Ivp4Kgl4C{f)%B5$~vTUDk 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

  • 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Ⓢ*i*p2L}H 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

    Qm4+tB`p6xtVGjtygmv&Em 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/Makefile b/vim/bundle/jedi-vim/pythonx/jedi/docs/Makefile new file mode 100644 index 0000000..14cfdf4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Jedi.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Jedi.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Jedi" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Jedi" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/README.md b/vim/bundle/jedi-vim/pythonx/jedi/docs/README.md new file mode 100644 index 0000000..5eac8a2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/README.md @@ -0,0 +1,14 @@ +Installation +------------ + +Install the graphviz library:: + + sudo apt-get install graphviz + +Install sphinx:: + + sudo pip install sphinx + +You might also need to install the Python graphviz interface:: + + sudo pip install graphviz diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_complete.png b/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_complete.png new file mode 100644 index 0000000000000000000000000000000000000000..2bafad6a2f7f47cad8f662a3d3846adf91a32267 GIT binary patch literal 17109 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_function.png b/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_function.png new file mode 100644 index 0000000000000000000000000000000000000000..6109703e4af92dd779158256ac380ce137ca99fc GIT binary patch literal 40035 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 NqO71HUny%6@;~sTl^y^9 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_pydoc.png b/vim/bundle/jedi-vim/pythonx/jedi/docs/_screenshots/screenshot_pydoc.png new file mode 100644 index 0000000000000000000000000000000000000000..a399d5f73389b7811c91c4bef352a886818a6d10 GIT binary patch literal 22041 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

    Pxul8DQ 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 z z=YY6fCPIFR)n%%diufE>&c6Eq+4il?ej}JTM^1C1m=Ct0^ajuzX#-uaA;~*Puj$GYZwRhG`1r{C+rVK3uE9>Kt>B*MAi2Cv+6EiT zNfJK((!UkS__6IrTcPQ7=$_~xC)J(YY+D>=k9nx$^KGc-CD5#E16{8o>4^?9q?I1v zP76QtpAW5Q0M0QEBzNFw%b@e$e4w!vmc0($6CI?rr%jKdmw4nu3mSlP@cUSNi?A*4 znXd)iy)CfowWyqP5OiE|bJ_-uUj;m;IlPAROMq3a(3~hbmq*YxebpX19D(EePym1O zfL~i|EhIp2J#?DOPXM&mh7-o;)SYy6TtBqr5yU@7huj@(mB#%Xu-2XzS{W?Y$?4IM zV{!+1a+BdO+Sisx%iB{`zh-3P@2T(toP*2xIQU-q032-%--oQr+e+Nq=yJ+IpxiIv zn2qBv=_Gt5ODR!{FoGebI=1TYu1nJuWVR+r~AL!7Ya3d?1W#pamFG7txI3u6b zAsZuEyA_JrgUhOqwYy+ufv=-OvpIWY*4F!S+<>?r$5QC=t=`wX6KheoI|!VEv)Bzd zPIP&|QSO`Q)LRkfL;E$r%>ph>Z-)+_Yk%?HU836^1nT8-gBQPi-1-b0?Fp}d_}|d6 zkGH2#Gqhc~+&q!NAl{7J?E!Pk_ArhuI9|rF9LH+tZy(}pg|_JRL^lz#C9}uZf^xh} zcP22C@csvPsy>3_EF65ht)X(cgT&6{jVo>g-w*j~5O+ABemdwCII^t}Zu72(+-uq@ zG-RUzeGo?}j<(9jdZ;hXu+$N+E%xKshq^oRRwP)oJwSGDDPPt~2|fh5y%m~nLFbHv z1Y56_dMaQvT65onoy?D$ZR^SoMt%8k5^EqQ9pohLk9^Z}Oal#o~v i2kBn@=WEY#4g7zKv=URK%^~an0000Github + +

    diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_templates/sidebarlogo.html b/vim/bundle/jedi-vim/pythonx/jedi/docs/_templates/sidebarlogo.html new file mode 100644 index 0000000..d9243c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_templates/sidebarlogo.html @@ -0,0 +1,3 @@ +

    diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/LICENSE b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/LICENSE new file mode 100644 index 0000000..8daab7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/LICENSE @@ -0,0 +1,37 @@ +Copyright (c) 2010 by Armin Ronacher. + +Some rights reserved. + +Redistribution and use in source and binary forms of the theme, with or +without modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +* The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +We kindly ask you to only use these themes in an unmodified manner just +for Flask and Flask-related products, not for unrelated projects. If you +like the visual style and want to use it for your own projects, please +consider making some larger changes to the themes (such as changing +font faces, sizes, colors or margins). + +THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/layout.html b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/layout.html new file mode 100644 index 0000000..48cb4d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/layout.html @@ -0,0 +1,27 @@ +{%- extends "basic/layout.html" %} +{%- block extrahead %} + {{ super() }} + {% if theme_touch_icon %} + + {% endif %} + + + Fork me on GitHub + +{% endblock %} +{%- block relbar2 %}{% endblock %} +{% block header %} + {{ super() }} + {% if pagename == 'index' %} +
    + {% endif %} +{% endblock %} +{%- block footer %} + + {% if pagename == 'index' %} +
    + {% endif %} +{%- endblock %} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/relations.html b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/relations.html new file mode 100644 index 0000000..3bbcde8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/relations.html @@ -0,0 +1,19 @@ +

    Related Topics

    + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/flasky.css_t b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/flasky.css_t new file mode 100644 index 0000000..79ab478 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/flasky.css_t @@ -0,0 +1,394 @@ +/* + * flasky.css_t + * ~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + +{% set page_width = '940px' %} +{% set sidebar_width = '220px' %} + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'Georgia', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + width: {{ page_width }}; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 {{ sidebar_width }}; +} + +div.sphinxsidebar { + width: {{ sidebar_width }}; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +img.floatingflask { + padding: 0 0 10px 10px; + float: right; +} + +div.footer { + width: {{ page_width }}; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +div.related { + display: none; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebar { + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0 0 20px 0; + margin: 0; + text-align: center; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: 'Georgia', serif; + font-size: 1em; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +{% if theme_index_logo %} +div.indexwrapper h1 { + text-indent: -999999px; + background: url({{ theme_index_logo }}) no-repeat center center; + height: {{ theme_index_logo_height }}; +} +{% endif %} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #ddd; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + background: #fafafa; + margin: 20px -30px; + padding: 10px 30px; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +img.screenshot { +} + +tt.descname, tt.descclassname { + font-size: 0.95em; +} + +tt.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #eee; + background: #fdfdfd; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #eee; + padding: 7px 30px; + margin: 15px -30px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: -60px; + padding-left: 60px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt { + background: #EEE; +} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/small_flask.css b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/small_flask.css new file mode 100644 index 0000000..1c6df30 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/static/small_flask.css @@ -0,0 +1,70 @@ +/* + * small_flask.css_t + * ~~~~~~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + +body { + margin: 0; + padding: 20px 30px; +} + +div.documentwrapper { + float: none; + background: white; +} + +div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: white; +} + +div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, +div.sphinxsidebar h3 a { + color: white; +} + +div.sphinxsidebar a { + color: #aaa; +} + +div.sphinxsidebar p.logo { + display: none; +} + +div.document { + width: 100%; + margin: 0; +} + +div.related { + display: block; + margin: 0; + padding: 10px 0 20px 0; +} + +div.related ul, +div.related ul li { + margin: 0; + padding: 0; +} + +div.footer { + display: none; +} + +div.bodywrapper { + margin: 0; +} + +div.body { + min-height: 0; + padding: 0; +} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/theme.conf b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/theme.conf new file mode 100644 index 0000000..1d5657f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask/theme.conf @@ -0,0 +1,9 @@ +[theme] +inherit = basic +stylesheet = flasky.css +pygments_style = flask_theme_support.FlaskyStyle + +[options] +index_logo = +index_logo_height = 120px +touch_icon = diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask_theme_support.py b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask_theme_support.py new file mode 100644 index 0000000..d3e33c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/_themes/flask_theme_support.py @@ -0,0 +1,125 @@ +""" +Copyright (c) 2010 by Armin Ronacher. + +Some rights reserved. + +Redistribution and use in source and binary forms of the theme, with or +without modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +* The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +We kindly ask you to only use these themes in an unmodified manner just +for Flask and Flask-related products, not for unrelated projects. If you +like the visual style and want to use it for your own projects, please +consider making some larger changes to the themes (such as changing +font faces, sizes, colors or margins). + +THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" +# flasky extensions. flasky pygments style based on tango style +from pygments.style import Style +from pygments.token import Keyword, Name, Comment, String, Error, \ + Number, Operator, Generic, Whitespace, Punctuation, Other, Literal + + +class FlaskyStyle(Style): + background_color = "#f8f8f8" + default_style = "" + + styles = { + # No corresponding class for the following: + #Text: "", # class: '' + Whitespace: "underline #f8f8f8", # class: 'w' + Error: "#a40000 border:#ef2929", # class: 'err' + Other: "#000000", # class 'x' + + Comment: "italic #8f5902", # class: 'c' + Comment.Preproc: "noitalic", # class: 'cp' + + Keyword: "bold #004461", # class: 'k' + Keyword.Constant: "bold #004461", # class: 'kc' + Keyword.Declaration: "bold #004461", # class: 'kd' + Keyword.Namespace: "bold #004461", # class: 'kn' + Keyword.Pseudo: "bold #004461", # class: 'kp' + Keyword.Reserved: "bold #004461", # class: 'kr' + Keyword.Type: "bold #004461", # class: 'kt' + + Operator: "#582800", # class: 'o' + Operator.Word: "bold #004461", # class: 'ow' - like keywords + + Punctuation: "bold #000000", # class: 'p' + + # because special names such as Name.Class, Name.Function, etc. + # are not recognized as such later in the parsing, we choose them + # to look the same as ordinary variables. + Name: "#000000", # class: 'n' + Name.Attribute: "#c4a000", # class: 'na' - to be revised + Name.Builtin: "#004461", # class: 'nb' + Name.Builtin.Pseudo: "#3465a4", # class: 'bp' + Name.Class: "#000000", # class: 'nc' - to be revised + Name.Constant: "#000000", # class: 'no' - to be revised + Name.Decorator: "#888", # class: 'nd' - to be revised + Name.Entity: "#ce5c00", # class: 'ni' + Name.Exception: "bold #cc0000", # class: 'ne' + Name.Function: "#000000", # class: 'nf' + Name.Property: "#000000", # class: 'py' + Name.Label: "#f57900", # class: 'nl' + Name.Namespace: "#000000", # class: 'nn' - to be revised + Name.Other: "#000000", # class: 'nx' + Name.Tag: "bold #004461", # class: 'nt' - like a keyword + Name.Variable: "#000000", # class: 'nv' - to be revised + Name.Variable.Class: "#000000", # class: 'vc' - to be revised + Name.Variable.Global: "#000000", # class: 'vg' - to be revised + Name.Variable.Instance: "#000000", # class: 'vi' - to be revised + + Number: "#990000", # class: 'm' + + Literal: "#000000", # class: 'l' + Literal.Date: "#000000", # class: 'ld' + + String: "#4e9a06", # class: 's' + String.Backtick: "#4e9a06", # class: 'sb' + String.Char: "#4e9a06", # class: 'sc' + String.Doc: "italic #8f5902", # class: 'sd' - like a comment + String.Double: "#4e9a06", # class: 's2' + String.Escape: "#4e9a06", # class: 'se' + String.Heredoc: "#4e9a06", # class: 'sh' + String.Interpol: "#4e9a06", # class: 'si' + String.Other: "#4e9a06", # class: 'sx' + String.Regex: "#4e9a06", # class: 'sr' + String.Single: "#4e9a06", # class: 's1' + String.Symbol: "#4e9a06", # class: 'ss' + + Generic: "#000000", # class: 'g' + Generic.Deleted: "#a40000", # class: 'gd' + Generic.Emph: "italic #000000", # class: 'ge' + Generic.Error: "#ef2929", # class: 'gr' + Generic.Heading: "bold #000080", # class: 'gh' + Generic.Inserted: "#00A000", # class: 'gi' + Generic.Output: "#888", # class: 'go' + Generic.Prompt: "#745334", # class: 'gp' + Generic.Strong: "bold #000000", # class: 'gs' + Generic.Subheading: "bold #800080", # class: 'gu' + Generic.Traceback: "bold #a40000", # class: 'gt' + } diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/conf.py b/vim/bundle/jedi-vim/pythonx/jedi/docs/conf.py new file mode 100644 index 0000000..4199bca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/conf.py @@ -0,0 +1,291 @@ +# -*- coding: utf-8 -*- +# +# Jedi documentation build configuration file, created by +# sphinx-quickstart on Wed Dec 26 00:11:34 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import datetime + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath('..')) +sys.path.append(os.path.abspath('_themes')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.todo', + 'sphinx.ext.intersphinx', 'sphinx.ext.inheritance_diagram'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'Jedi' +copyright = u'jedi contributors' + +import jedi +from jedi.utils import version_info + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '.'.join(str(x) for x in version_info()[:2]) +# The full version, including alpha/beta/rc tags. +release = jedi.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'flask' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = ['_themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '**': [ + 'sidebarlogo.html', + 'localtoc.html', + #'relations.html', + 'ghbuttons.html', + #'sourcelink.html', + #'searchbox.html' + ] +} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Jedidoc' + +#html_style = 'default.css' # Force usage of default template on RTD + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'Jedi.tex', u'Jedi Documentation', + u'Jedi contributors', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'jedi', u'Jedi Documentation', + [u'Jedi contributors'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'Jedi', u'Jedi Documentation', + u'Jedi contributors', 'Jedi', 'Awesome Python autocompletion library.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# -- Options for todo module --------------------------------------------------- + +todo_include_todos = False + +# -- Options for autodoc module ------------------------------------------------ + +autoclass_content = 'both' +autodoc_member_order = 'bysource' +autodoc_default_flags = [] +#autodoc_default_flags = ['members', 'undoc-members'] + + +# -- Options for intersphinx module -------------------------------------------- + +intersphinx_mapping = { + 'https://docs.python.org/': None, +} + + +def skip_deprecated(app, what, name, obj, skip, options): + """ + All attributes containing a deprecated note shouldn't be documented + anymore. This makes it even clearer that they are not supported anymore. + """ + doc = obj.__doc__ + return skip or doc and '.. deprecated::' in doc + + +def setup(app): + app.connect('autodoc-skip-member', skip_deprecated) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api-classes.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api-classes.rst new file mode 100644 index 0000000..9feec1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api-classes.rst @@ -0,0 +1,10 @@ +.. include:: ../global.rst + +.. _api-classes: + +API Return Classes +------------------ + +.. automodule:: jedi.api.classes + :members: + :undoc-members: diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api.rst new file mode 100644 index 0000000..58c88ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/api.rst @@ -0,0 +1,132 @@ +.. include:: ../global.rst + +API Overview +============ + +.. currentmodule:: jedi + +Note: This documentation is for Plugin developers, who want to improve their +editors/IDE autocompletion + +If you want to use |jedi|, you first need to ``import jedi``. You then have +direct access to the :class:`.Script`. You can then call the functions +documented here. These functions return :ref:`API classes +`. + + +Deprecations +------------ + +The deprecation process is as follows: + +1. A deprecation is announced in the next major/minor release. +2. We wait either at least a year & at least two minor releases until we remove + the deprecated functionality. + + +API Documentation +----------------- + +The API consists of a few different parts: + +- The main starting points for completions/goto: :class:`.Script` and :class:`.Interpreter` +- Helpful functions: :func:`.names`, :func:`.preload_module` and + :func:`.set_debug_function` +- :ref:`API Result Classes ` +- :ref:`Python Versions/Virtualenv Support ` with functions like + :func:`.find_system_environments` and :func:`.find_virtualenvs` + +.. _api: + +Static Analysis Interface +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi + +.. autoclass:: jedi.Script + :members: +.. autoclass:: jedi.Interpreter + :members: +.. autofunction:: jedi.names +.. autofunction:: jedi.preload_module +.. autofunction:: jedi.set_debug_function + +.. _environments: + +Environments +~~~~~~~~~~~~ + +.. automodule:: jedi.api.environment + +.. autofunction:: jedi.find_system_environments +.. autofunction:: jedi.find_virtualenvs +.. autofunction:: jedi.get_system_environment +.. autofunction:: jedi.create_environment +.. autofunction:: jedi.get_default_environment +.. autoexception:: jedi.InvalidPythonEnvironment +.. autoclass:: jedi.api.environment.Environment + :members: + +Examples +-------- + +Completions: + +.. sourcecode:: python + + >>> import jedi + >>> source = '''import json; json.l''' + >>> script = jedi.Script(source, 1, 19, '') + >>> script + + >>> completions = script.completions() + >>> completions + [, ] + >>> completions[1] + + >>> completions[1].complete + 'oads' + >>> completions[1].name + 'loads' + +Definitions / Goto: + +.. sourcecode:: python + + >>> import jedi + >>> source = '''def my_func(): + ... print 'called' + ... + ... alias = my_func + ... my_list = [1, None, alias] + ... inception = my_list[2] + ... + ... inception()''' + >>> script = jedi.Script(source, 8, 1, '') + >>> + >>> script.goto_assignments() + [] + >>> + >>> script.goto_definitions() + [] + +Related names: + +.. sourcecode:: python + + >>> import jedi + >>> source = '''x = 3 + ... if 1 == 2: + ... x = 4 + ... else: + ... del x''' + >>> script = jedi.Script(source, 5, 8, '') + >>> rns = script.related_names() + >>> rns + [, ] + >>> rns[0].start_pos + (3, 4) + >>> rns[0].is_keyword + False + >>> rns[0].text + 'x' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/development.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/development.rst new file mode 100644 index 0000000..1b9e1f5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/development.rst @@ -0,0 +1,222 @@ +.. include:: ../global.rst + +Jedi Development +================ + +.. currentmodule:: jedi + +.. note:: This documentation is for Jedi developers who want to improve Jedi + itself, but have no idea how Jedi works. If you want to use Jedi for + your IDE, look at the `plugin api `_. + It is also important to note that it's a pretty old version and some things + might not apply anymore. + + +Introduction +------------ + +This page tries to address the fundamental demand for documentation of the +|jedi| internals. Understanding a dynamic language is a complex task. Especially +because type inference in Python can be a very recursive task. Therefore |jedi| +couldn't get rid of complexity. I know that **simple is better than complex**, +but unfortunately it sometimes requires complex solutions to understand complex +systems. + +Since most of the Jedi internals have been written by me (David Halter), this +introduction will be written mostly by me, because no one else understands to +the same level how Jedi works. Actually this is also the reason for exactly this +part of the documentation. To make multiple people able to edit the Jedi core. + +In five chapters I'm trying to describe the internals of |jedi|: + +- :ref:`The Jedi Core ` +- :ref:`Core Extensions ` +- :ref:`Imports & Modules ` +- :ref:`Caching & Recursions ` +- :ref:`Helper modules ` + +.. note:: Testing is not documented here, you'll find that + `right here `_. + + +.. _core: + +The Jedi Core +------------- + +The core of Jedi consists of three parts: + +- :ref:`Parser ` +- :ref:`Python code evaluation ` +- :ref:`API ` + +Most people are probably interested in :ref:`code evaluation `, +because that's where all the magic happens. I need to introduce the :ref:`parser +` first, because :mod:`jedi.evaluate` uses it extensively. + +.. _parser: + +Parser +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Jedi used to have it's internal parser, however this is now a separate project +and is called `parso `_. + +The parser creates a syntax tree that |jedi| analyses and tries to understand. +The grammar that this parsers uses is very similar to the official Python +`grammar files `_. + +.. _evaluate: + +Evaluation of python code (evaluate/__init__.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate + +Evaluation Contexts (evaluate/base_context.py) +++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +.. automodule:: jedi.evaluate.base_context + +.. inheritance-diagram:: + jedi.evaluate.context.instance.TreeInstance + jedi.evaluate.context.klass.ClassContext + jedi.evaluate.context.function.FunctionContext + jedi.evaluate.context.function.FunctionExecutionContext + :parts: 1 + + +.. _name_resolution: + +Name resolution (evaluate/finder.py) +++++++++++++++++++++++++++++++++++++ + +.. automodule:: jedi.evaluate.finder + + +.. _dev-api: + +API (api/__init__.py and api/classes.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The API has been designed to be as easy to use as possible. The API +documentation can be found `here `_. The API itself contains +little code that needs to be mentioned here. Generally I'm trying to be +conservative with the API. I'd rather not add new API features if they are not +necessary, because it's much harder to deprecate stuff than to add it later. + + +.. _core-extensions: + +Core Extensions +--------------- + +Core Extensions is a summary of the following topics: + +- :ref:`Iterables & Dynamic Arrays ` +- :ref:`Dynamic Parameters ` +- :ref:`Docstrings ` +- :ref:`Refactoring ` + +These topics are very important to understand what Jedi additionally does, but +they could be removed from Jedi and Jedi would still work. But slower and +without some features. + +.. _iterables: + +Iterables & Dynamic Arrays (evaluate/context/iterable.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To understand Python on a deeper level, |jedi| needs to understand some of the +dynamic features of Python like lists that are filled after creation: + +.. automodule:: jedi.evaluate.context.iterable + + +.. _dynamic: + +Parameter completion (evaluate/dynamic.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate.dynamic + + +.. _docstrings: + +Docstrings (evaluate/docstrings.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate.docstrings + +.. _refactoring: + +Refactoring (evaluate/refactoring.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.refactoring + + +.. _imports-modules: + +Imports & Modules +------------------- + + +- :ref:`Modules ` +- :ref:`Builtin Modules ` +- :ref:`Imports ` + + +.. _builtin: + +Compiled Modules (evaluate/compiled.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate.compiled + + +.. _imports: + +Imports (evaluate/imports.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate.imports + + +.. _caching-recursions: + +Caching & Recursions +-------------------- + + +- :ref:`Caching ` +- :ref:`Recursions ` + +.. _cache: + +Caching (cache.py) +~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.cache + +.. _recursion: + +Recursions (recursion.py) +~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.evaluate.recursion + + +.. _dev-helpers: + +Helper Modules +--------------- + +Most other modules are not really central to how Jedi works. They all contain +relevant code, but you if you understand the modules above, you pretty much +understand Jedi. + +Python 2/3 compatibility (_compatibility.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi._compatibility diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/features.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/features.rst new file mode 100644 index 0000000..d393175 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/features.rst @@ -0,0 +1,236 @@ +.. include:: ../global.rst + +Features and Caveats +==================== + +Jedi obviously supports autocompletion. It's also possible to get it working in +(:ref:`your REPL (IPython, etc.) `). + +Static analysis is also possible by using the command ``jedi.names``. + +Jedi would in theory support refactoring, but we have never publicized it, +because it's not production ready. If you're interested in helping out here, +let me know. With the latest parser changes, it should be very easy to actually +make it work. + + +General Features +---------------- + +- Python 2.7 and 3.4+ support +- Ignores syntax errors and wrong indentation +- Can deal with complex module / function / class structures +- Great Virtualenv support +- Can infer function arguments from sphinx, epydoc and basic numpydoc docstrings, + and PEP0484-style type hints (:ref:`type hinting `) +- Stub files + + +Supported Python Features +------------------------- + +|jedi| supports many of the widely used Python features: + +- builtins +- returns, yields, yield from +- tuple assignments / array indexing / dictionary indexing / star unpacking +- with-statement / exception handling +- ``*args`` / ``**kwargs`` +- decorators / lambdas / closures +- generators / iterators +- some descriptors: property / staticmethod / classmethod +- some magic methods: ``__call__``, ``__iter__``, ``__next__``, ``__get__``, + ``__getitem__``, ``__init__`` +- ``list.append()``, ``set.add()``, ``list.extend()``, etc. +- (nested) list comprehensions / ternary expressions +- relative imports +- ``getattr()`` / ``__getattr__`` / ``__getattribute__`` +- function annotations +- class decorators (py3k feature, are being ignored too, until I find a use + case, that doesn't work with |jedi|) +- simple/usual ``sys.path`` modifications +- ``isinstance`` checks for if/while/assert +- namespace packages (includes ``pkgutil``, ``pkg_resources`` and PEP420 namespaces) +- Django / Flask / Buildout support + + +Not Supported +------------- + +Not yet implemented: + +- manipulations of instances outside the instance variables without using + methods + +Will probably never be implemented: + +- metaclasses (how could an auto-completion ever support this) +- ``setattr()``, ``__import__()`` +- writing to some dicts: ``globals()``, ``locals()``, ``object.__dict__`` +- evaluating ``if`` / ``while`` / ``del`` + + +Caveats +------- + +**Slow Performance** + +Importing ``numpy`` can be quite slow sometimes, as well as loading the +builtins the first time. If you want to speed things up, you could write import +hooks in |jedi|, which preload stuff. However, once loaded, this is not a +problem anymore. The same is true for huge modules like ``PySide``, ``wx``, +etc. + +**Security** + +Security is an important issue for |jedi|. Therefore no Python code is +executed. As long as you write pure Python, everything is evaluated +statically. But: If you use builtin modules (``c_builtin``) there is no other +option than to execute those modules. However: Execute isn't that critical (as +e.g. in pythoncomplete, which used to execute *every* import!), because it +means one import and no more. So basically the only dangerous thing is using +the import itself. If your ``c_builtin`` uses some strange initializations, it +might be dangerous. But if it does you're screwed anyways, because eventually +you're going to execute your code, which executes the import. + + +Recipes +------- + +Here are some tips on how to use |jedi| efficiently. + + +.. _type-hinting: + +Type Hinting +~~~~~~~~~~~~ + +If |jedi| cannot detect the type of a function argument correctly (due to the +dynamic nature of Python), you can help it by hinting the type using +one of the following docstring/annotation syntax styles: + +**PEP-0484 style** + +https://www.python.org/dev/peps/pep-0484/ + +function annotations + +:: + + def myfunction(node: ProgramNode, foo: str) -> None: + """Do something with a ``node``. + + """ + node.| # complete here + + +assignment, for-loop and with-statement type hints (all Python versions). +Note that the type hints must be on the same line as the statement + +:: + + x = foo() # type: int + x, y = 2, 3 # type: typing.Optional[int], typing.Union[int, str] # typing module is mostly supported + for key, value in foo.items(): # type: str, Employee # note that Employee must be in scope + pass + with foo() as f: # type: int + print(f + 3) + +Most of the features in PEP-0484 are supported including the typing module +(for Python < 3.5 you have to do ``pip install typing`` to use these), +and forward references. + +You can also use stub files. + + +**Sphinx style** + +http://www.sphinx-doc.org/en/stable/domains.html#info-field-lists + +:: + + def myfunction(node, foo): + """Do something with a ``node``. + + :type node: ProgramNode + :param str foo: foo parameter description + + """ + node.| # complete here + +**Epydoc** + +http://epydoc.sourceforge.net/manual-fields.html + +:: + + def myfunction(node): + """Do something with a ``node``. + + @type node: ProgramNode + + """ + node.| # complete here + +**Numpydoc** + +https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt + +In order to support the numpydoc format, you need to install the `numpydoc +`__ package. + +:: + + def foo(var1, var2, long_var_name='hi'): + r"""A one-line summary that does not use variable names or the + function name. + + ... + + Parameters + ---------- + var1 : array_like + Array_like means all those objects -- lists, nested lists, + etc. -- that can be converted to an array. We can also + refer to variables like `var1`. + var2 : int + The type above can either refer to an actual Python type + (e.g. ``int``), or describe the type of the variable in more + detail, e.g. ``(N,) ndarray`` or ``array_like``. + long_variable_name : {'hi', 'ho'}, optional + Choices in brackets, default first when optional. + + ... + + """ + var2.| # complete here + +A little history +---------------- + +The Star Wars Jedi are awesome. My Jedi software tries to imitate a little bit +of the precognition the Jedi have. There's even an awesome `scene +`_ of Monty Python Jedis :-). + +But actually the name hasn't so much to do with Star Wars. It's part of my +second name. + +After I explained Guido van Rossum, how some parts of my auto-completion work, +he said (we drank a beer or two): + + *"Oh, that worries me..."* + +When it's finished, I hope he'll like it :-) + +I actually started Jedi, because there were no good solutions available for VIM. +Most auto-completions just didn't work well. The only good solution was PyCharm. +But I like my good old VIM. Rope was never really intended to be an +auto-completion (and also I really hate project folders for my Python scripts). +It's more of a refactoring suite. So I decided to do my own version of a +completion, which would execute non-dangerous code. But I soon realized, that +this wouldn't work. So I built an extremely recursive thing which understands +many of Python's key features. + +By the way, I really tried to program it as understandable as possible. But I +think understanding it might need quite some time, because of its recursive +nature. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/installation.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/installation.rst new file mode 100644 index 0000000..e3e16e9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/installation.rst @@ -0,0 +1,87 @@ +.. include:: ../global.rst + +Installation and Configuration +============================== + +You can either include |jedi| as a submodule in your text editor plugin (like +jedi-vim_ does by default), or you can install it systemwide. + +.. note:: This just installs the |jedi| library, not the :ref:`editor plugins + `. For information about how to make it work with your + editor, refer to the corresponding documentation. + + +The normal way +-------------- + +Most people use Jedi with a :ref:`editor plugins`. Typically +you install Jedi by installing an editor plugin. No necessary steps are needed. +Just take a look at the instructions for the plugin. + + +With pip +-------- + +On any system you can install |jedi| directly from the Python package index +using pip:: + + sudo pip install jedi + +If you want to install the current development version (master branch):: + + sudo pip install -e git://github.com/davidhalter/jedi.git#egg=jedi + + +System-wide installation via a package manager +---------------------------------------------- + +Arch Linux +~~~~~~~~~~ + +You can install |jedi| directly from official Arch Linux packages: + +- `python-jedi `__ + (Python 3) +- `python2-jedi `__ + (Python 2) + +The specified Python version just refers to the *runtime environment* for +|jedi|. Use the Python 2 version if you're running vim (or whatever editor you +use) under Python 2. Otherwise, use the Python 3 version. But whatever version +you choose, both are able to complete both Python 2 and 3 *code*. + +(There is also a packaged version of the vim plugin available: +`vim-jedi at Arch Linux `__.) + +Debian +~~~~~~ + +Debian packages are available in the `unstable repository +`__. + +Others +~~~~~~ + +We are in the discussion of adding |jedi| to the Fedora repositories. + + +Manual installation from GitHub +--------------------------------------------- + +If you prefer not to use an automated package installer, you can clone the source from GitHub and install it manually. To install it, run these commands:: + + git clone --recurse-submodules https://github.com/davidhalter/jedi + cd jedi + sudo python setup.py install + +Inclusion as a submodule +------------------------ + +If you use an editor plugin like jedi-vim_, you can simply include |jedi| as a +git submodule of the plugin directory. Vim plugin managers like Vundle_ or +Pathogen_ make it very easy to keep submodules up to date. + + +.. _jedi-vim: https://github.com/davidhalter/jedi-vim +.. _vundle: https://github.com/gmarik/vundle +.. _pathogen: https://github.com/tpope/vim-pathogen diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/settings.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/settings.rst new file mode 100644 index 0000000..640a110 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/settings.rst @@ -0,0 +1,6 @@ +.. include:: ../global.rst + +Settings +======== + +.. automodule:: jedi.settings diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/testing.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/testing.rst new file mode 100644 index 0000000..0c666a1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/testing.rst @@ -0,0 +1,40 @@ +.. include:: ../global.rst + +Jedi Testing +============ + +The test suite depends on ``tox`` and ``pytest``:: + + pip install tox pytest + +To run the tests for all supported Python versions:: + + tox + +If you want to test only a specific Python version (e.g. Python 2.7), it's as +easy as:: + + tox -e py27 + +Tests are also run automatically on `Travis CI +`_. + +You want to add a test for |jedi|? Great! We love that. Normally you should +write your tests as :ref:`Blackbox Tests `. Most tests would +fit right in there. + +For specific API testing we're using simple unit tests, with a focus on a +simple and readable testing structure. + +.. _blackbox: + +Blackbox Tests (run.py) +~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: test.run + +Refactoring Tests (refactor.py) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: test.refactor + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/usage.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/usage.rst new file mode 100644 index 0000000..bc30af3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/docs/usage.rst @@ -0,0 +1,117 @@ +.. include:: ../global.rst + +End User Usage +============== + +If you are a not an IDE Developer, the odds are that you just want to use +|jedi| as a browser plugin or in the shell. Yes that's :ref:`also possible +`! + +|jedi| is relatively young and can be used in a variety of Plugins and +Software. If your Editor/IDE is not among them, recommend |jedi| to your IDE +developers. + + +.. _editor-plugins: + +Editor Plugins +-------------- + +Vim: + +- jedi-vim_ +- YouCompleteMe_ +- deoplete-jedi_ + +Emacs: + +- Jedi.el_ +- elpy_ +- anaconda-mode_ + +Sublime Text 2/3: + +- SublimeJEDI_ (ST2 & ST3) +- anaconda_ (only ST3) + +SynWrite: + +- SynJedi_ + +TextMate: + +- Textmate_ (Not sure if it's actually working) + +Kate: + +- Kate_ version 4.13+ `supports it natively + `__, + you have to enable it, though. + +Visual Studio Code: + +- `Python Extension`_ + +Atom: + +- autocomplete-python-jedi_ + +GNOME Builder: + +- `GNOME Builder`_ `supports it natively + `__, + and is enabled by default. + +Gedit: + +- gedi_ + +Eric IDE: + +- `Eric IDE`_ (Available as a plugin) + +Web Debugger: + +- wdb_ + +and many more! + +.. _repl-completion: + +Tab Completion in the Python Shell +---------------------------------- + +Starting with Ipython `6.0.0` Jedi is a dependency of IPython. Autocompletion +in IPython is therefore possible without additional configuration. + +There are two different options how you can use Jedi autocompletion in +your Python interpreter. One with your custom ``$HOME/.pythonrc.py`` file +and one that uses ``PYTHONSTARTUP``. + +Using ``PYTHONSTARTUP`` +~~~~~~~~~~~~~~~~~~~~~~~ + +.. automodule:: jedi.api.replstartup + +Using a custom ``$HOME/.pythonrc.py`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. autofunction:: jedi.utils.setup_readline + +.. _jedi-vim: https://github.com/davidhalter/jedi-vim +.. _youcompleteme: https://valloric.github.io/YouCompleteMe/ +.. _deoplete-jedi: https://github.com/zchee/deoplete-jedi +.. _Jedi.el: https://github.com/tkf/emacs-jedi +.. _elpy: https://github.com/jorgenschaefer/elpy +.. _anaconda-mode: https://github.com/proofit404/anaconda-mode +.. _sublimejedi: https://github.com/srusskih/SublimeJEDI +.. _anaconda: https://github.com/DamnWidget/anaconda +.. _SynJedi: http://uvviewsoft.com/synjedi/ +.. _wdb: https://github.com/Kozea/wdb +.. _TextMate: https://github.com/lawrenceakka/python-jedi.tmbundle +.. _kate: https://kate-editor.org/ +.. _autocomplete-python-jedi: https://atom.io/packages/autocomplete-python-jedi +.. _GNOME Builder: https://wiki.gnome.org/Apps/Builder/ +.. _gedi: https://github.com/isamert/gedi +.. _Eric IDE: https://eric-ide.python-projects.org +.. _Python Extension: https://marketplace.visualstudio.com/items?itemName=donjayamanne.python diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/global.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/global.rst new file mode 100644 index 0000000..0279842 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/global.rst @@ -0,0 +1,3 @@ +:orphan: + +.. |jedi| replace:: *Jedi* diff --git a/vim/bundle/jedi-vim/pythonx/jedi/docs/index.rst b/vim/bundle/jedi-vim/pythonx/jedi/docs/index.rst new file mode 100644 index 0000000..57072ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/docs/index.rst @@ -0,0 +1,40 @@ +.. include global.rst + +Jedi - an awesome autocompletion/static analysis library for Python +=================================================================== + +Release v\ |release|. (:doc:`Installation `) + +.. automodule:: jedi + +Autocompletion can look like this (e.g. VIM plugin): + +.. figure:: _screenshots/screenshot_complete.png + + +.. _toc: + +Docs +---- + +.. toctree:: + :maxdepth: 2 + + docs/usage + docs/installation + docs/features + docs/api + docs/api-classes + docs/settings + docs/development + docs/testing + + +.. _resources: + +Resources +--------- + +- `Source Code on Github `_ +- `Travis Testing `_ +- `Python Package Index `_ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/PKG-INFO b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/PKG-INFO new file mode 100644 index 0000000..19f732e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/PKG-INFO @@ -0,0 +1,439 @@ +Metadata-Version: 2.1 +Name: jedi +Version: 0.15.1 +Summary: An autocompletion tool for Python that can be used for text editors. +Home-page: https://github.com/davidhalter/jedi +Author: David Halter +Author-email: davidhalter88@gmail.com +Maintainer: David Halter +Maintainer-email: davidhalter88@gmail.com +License: MIT +Description: ################################################################### + Jedi - an awesome autocompletion/static analysis library for Python + ################################################################### + + .. image:: https://img.shields.io/pypi/v/jedi.svg?style=flat + :target: https://pypi.python.org/pypi/jedi + :alt: PyPI version + + .. image:: https://img.shields.io/pypi/pyversions/jedi.svg + :target: https://pypi.python.org/pypi/jedi + :alt: Supported Python versions + + .. image:: https://travis-ci.org/davidhalter/jedi.svg?branch=master + :target: https://travis-ci.org/davidhalter/jedi + :alt: Linux Tests + + .. image:: https://ci.appveyor.com/api/projects/status/mgva3bbawyma1new/branch/master?svg=true + :target: https://ci.appveyor.com/project/davidhalter/jedi/branch/master + :alt: Windows Tests + + .. image:: https://coveralls.io/repos/davidhalter/jedi/badge.svg?branch=master + :target: https://coveralls.io/r/davidhalter/jedi + :alt: Coverage status + + + *If you have specific questions, please add an issue or ask on* `Stack Overflow + `_ *with the label* ``python-jedi``. + + + Jedi is a static analysis tool for Python that can be used in IDEs/editors. + Jedi has a focus on autocompletion and goto functionality. Jedi is fast and is + very well tested. It understands Python and stubs on a deep level. + + Jedi has support for different goto functions. It's possible to search for + usages and list names in a Python file to get information about them. + + Jedi uses a very simple API to connect with IDE's. There's a reference + implementation as a `VIM-Plugin `_, + which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. + Autocompletion in your REPL is also possible, IPython uses it natively and for + the CPython REPL you have to install it. + + Jedi can currently be used with the following editors/projects: + + - Vim (jedi-vim_, YouCompleteMe_, deoplete-jedi_, completor.vim_) + - Emacs (Jedi.el_, company-mode_, elpy_, anaconda-mode_, ycmd_) + - Sublime Text (SublimeJEDI_ [ST2 + ST3], anaconda_ [only ST3]) + - TextMate_ (Not sure if it's actually working) + - Kate_ version 4.13+ supports it natively, you have to enable it, though. [`proof + `_] + - Atom_ (autocomplete-python-jedi_) + - `GNOME Builder`_ (with support for GObject Introspection) + - `Visual Studio Code`_ (via `Python Extension `_) + - Gedit (gedi_) + - wdb_ - Web Debugger + - `Eric IDE`_ (Available as a plugin) + - `IPython 6.0.0+ `_ + + and many more! + + + Here are some pictures taken from jedi-vim_: + + .. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_complete.png + + Completion for almost anything (Ctrl+Space). + + .. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_function.png + + Display of function/class bodies, docstrings. + + .. image:: https://github.com/davidhalter/jedi/raw/master/docs/_screenshots/screenshot_pydoc.png + + Pydoc support (Shift+k). + + There is also support for goto and renaming. + + Get the latest version from `github `_ + (master branch should always be kind of stable/working). + + Docs are available at `https://jedi.readthedocs.org/en/latest/ + `_. Pull requests with documentation + enhancements and/or fixes are awesome and most welcome. Jedi uses `semantic + versioning `_. + + If you want to stay up-to-date (News / RFCs), please subscribe to this `github + thread `_.: + + + + Installation + ============ + + pip install jedi + + Note: This just installs the Jedi library, not the editor plugins. For + information about how to make it work with your editor, refer to the + corresponding documentation. + + You don't want to use ``pip``? Please refer to the `manual + `_. + + + Feature Support and Caveats + =========================== + + Jedi really understands your Python code. For a comprehensive list what Jedi + understands, see: `Features + `_. A list of + caveats can be found on the same page. + + You can run Jedi on CPython 2.7 or 3.4+ but it should also + understand/parse code older than those versions. Additionally you should be able + to use `Virtualenvs `_ + very well. + + Tips on how to use Jedi efficiently can be found `here + `_. + + API + --- + + You can find the documentation for the `API here `_. + + + Autocompletion / Goto / Pydoc + ----------------------------- + + Please check the API for a good explanation. There are the following commands: + + - ``jedi.Script.goto_assignments`` + - ``jedi.Script.completions`` + - ``jedi.Script.usages`` + + The returned objects are very powerful and really all you might need. + + + Autocompletion in your REPL (IPython, etc.) + ------------------------------------------- + + Starting with IPython `6.0.0` Jedi is a dependency of IPython. Autocompletion + in IPython is therefore possible without additional configuration. + + It's possible to have Jedi autocompletion in REPL modes - `example video `_. + This means that in Python you can enable tab completion in a `REPL + `_. + + + Static Analysis + ------------------------ + + To do all forms of static analysis, please try to use ``jedi.names``. It will + return a list of names that you can use to infer types and so on. + + + Refactoring + ----------- + + Jedi's parser would support refactoring, but there's no API to use it right + now. If you're interested in helping out here, let me know. With the latest + parser changes, it should be very easy to actually make it work. + + + Development + =========== + + There's a pretty good and extensive `development documentation + `_. + + + Testing + ======= + + The test suite depends on ``tox`` and ``pytest``:: + + pip install tox pytest + + To run the tests for all supported Python versions:: + + tox + + If you want to test only a specific Python version (e.g. Python 2.7), it's as + easy as :: + + tox -e py27 + + Tests are also run automatically on `Travis CI + `_. + + For more detailed information visit the `testing documentation + `_. + + + Acknowledgements + ================ + + - Takafumi Arakaki (@tkf) for creating a solid test environment and a lot of + other things. + - Danilo Bargen (@dbrgn) for general housekeeping and being a good friend :). + - Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 + (originally used in lib2to3). + + + + .. _jedi-vim: https://github.com/davidhalter/jedi-vim + .. _youcompleteme: https://github.com/ycm-core/YouCompleteMe + .. _deoplete-jedi: https://github.com/zchee/deoplete-jedi + .. _completor.vim: https://github.com/maralla/completor.vim + .. _Jedi.el: https://github.com/tkf/emacs-jedi + .. _company-mode: https://github.com/syohex/emacs-company-jedi + .. _elpy: https://github.com/jorgenschaefer/elpy + .. _anaconda-mode: https://github.com/proofit404/anaconda-mode + .. _ycmd: https://github.com/abingham/emacs-ycmd + .. _sublimejedi: https://github.com/srusskih/SublimeJEDI + .. _anaconda: https://github.com/DamnWidget/anaconda + .. _wdb: https://github.com/Kozea/wdb + .. _TextMate: https://github.com/lawrenceakka/python-jedi.tmbundle + .. _Kate: https://kate-editor.org + .. _Atom: https://atom.io/ + .. _autocomplete-python-jedi: https://atom.io/packages/autocomplete-python-jedi + .. _GNOME Builder: https://wiki.gnome.org/Apps/Builder + .. _Visual Studio Code: https://code.visualstudio.com/ + .. _gedi: https://github.com/isamert/gedi + .. _Eric IDE: https://eric-ide.python-projects.org + + + .. :changelog: + + Changelog + --------- + + 0.15.1 (2019-08-13) + +++++++++++++++++++ + + - Small bugfix and removal of a print statement + + 0.15.0 (2019-08-11) + +++++++++++++++++++ + + - Added file path completions, there's a **new ``Completion.type``** ``path``, + now. Example: ``'/ho`` -> ``'/home/`` + - ``*args``/``**kwargs`` resolving. If possible Jedi replaces the parameters + with the actual alternatives. + - Better support for enums/dataclasses + - When using Interpreter, properties are now executed, since a lot of people + have complained about this. Discussion in #1299, #1347. + + New APIs: + + - ``Definition.get_signatures() -> List[Signature]``. Signatures are similar to + ``CallSignature``. ``Definition.params`` is therefore deprecated. + - ``Signature.to_string()`` to format call signatures. + - ``Signature.params -> List[ParamDefinition]``, ParamDefinition has the + following additional attributes ``infer_default()``, ``infer_annotation()``, + ``to_string()``, and ``kind``. + - ``Definition.execute() -> List[Definition]``, makes it possible to infer + return values of functions. + + + 0.14.1 (2019-07-13) + +++++++++++++++++++ + + - CallSignature.index should now be working a lot better + - A couple of smaller bugfixes + + 0.14.0 (2019-06-20) + +++++++++++++++++++ + + - Added ``goto_*(prefer_stubs=True)`` as well as ``goto_*(prefer_stubs=True)`` + - Stubs are used now for type inference + - Typeshed is used for better type inference + - Reworked Definition.full_name, should have more correct return values + + 0.13.3 (2019-02-24) + +++++++++++++++++++ + + - Fixed an issue with embedded Python, see https://github.com/davidhalter/jedi-vim/issues/870 + + 0.13.2 (2018-12-15) + +++++++++++++++++++ + + - Fixed a bug that led to Jedi spawning a lot of subprocesses. + + 0.13.1 (2018-10-02) + +++++++++++++++++++ + + - Bugfixes, because tensorflow completions were still slow. + + 0.13.0 (2018-10-02) + +++++++++++++++++++ + + - A small release. Some bug fixes. + - Remove Python 3.3 support. Python 3.3 support has been dropped by the Python + foundation. + - Default environments are now using the same Python version as the Python + process. In 0.12.x, we used to load the latest Python version on the system. + - Added ``include_builtins`` as a parameter to usages. + - ``goto_assignments`` has a new ``follow_builtin_imports`` parameter that + changes the previous behavior slightly. + + 0.12.1 (2018-06-30) + +++++++++++++++++++ + + - This release forces you to upgrade parso. If you don't, nothing will work + anymore. Otherwise changes should be limited to bug fixes. Unfortunately Jedi + still uses a few internals of parso that make it hard to keep compatibility + over multiple releases. Parso >=0.3.0 is going to be needed. + + 0.12.0 (2018-04-15) + +++++++++++++++++++ + + - Virtualenv/Environment support + - F-String Completion/Goto Support + - Cannot crash with segfaults anymore + - Cleaned up import logic + - Understand async/await and autocomplete it (including async generators) + - Better namespace completions + - Passing tests for Windows (including CI for Windows) + - Remove Python 2.6 support + + 0.11.1 (2017-12-14) + +++++++++++++++++++ + + - Parso update - the caching layer was broken + - Better usages - a lot of internal code was ripped out and improved. + + 0.11.0 (2017-09-20) + +++++++++++++++++++ + + - Split Jedi's parser into a separate project called ``parso``. + - Avoiding side effects in REPL completion. + - Numpy docstring support should be much better. + - Moved the `settings.*recursion*` away, they are no longer usable. + + 0.10.2 (2017-04-05) + +++++++++++++++++++ + + - Python Packaging sucks. Some files were not included in 0.10.1. + + 0.10.1 (2017-04-05) + +++++++++++++++++++ + + - Fixed a few very annoying bugs. + - Prepared the parser to be factored out of Jedi. + + 0.10.0 (2017-02-03) + +++++++++++++++++++ + + - Actual semantic completions for the complete Python syntax. + - Basic type inference for ``yield from`` PEP 380. + - PEP 484 support (most of the important features of it). Thanks Claude! (@reinhrst) + - Added ``get_line_code`` to ``Definition`` and ``Completion`` objects. + - Completely rewritten the type inference engine. + - A new and better parser for (fast) parsing diffs of Python code. + + 0.9.0 (2015-04-10) + ++++++++++++++++++ + + - The import logic has been rewritten to look more like Python's. There is now + an ``Evaluator.modules`` import cache, which resembles ``sys.modules``. + - Integrated the parser of 2to3. This will make refactoring possible. It will + also be possible to check for error messages (like compiling an AST would give) + in the future. + - With the new parser, the evaluation also completely changed. It's now simpler + and more readable. + - Completely rewritten REPL completion. + - Added ``jedi.names``, a command to do static analysis. Thanks to that + sourcegraph guys for sponsoring this! + - Alpha version of the linter. + + + 0.8.1 (2014-07-23) + +++++++++++++++++++ + + - Bugfix release, the last release forgot to include files that improve + autocompletion for builtin libraries. Fixed. + + 0.8.0 (2014-05-05) + +++++++++++++++++++ + + - Memory Consumption for compiled modules (e.g. builtins, sys) has been reduced + drastically. Loading times are down as well (it takes basically as long as an + import). + - REPL completion is starting to become usable. + - Various small API changes. Generally this release focuses on stability and + refactoring of internal APIs. + - Introducing operator precedence, which makes calculating correct Array + indices and ``__getattr__`` strings possible. + + 0.7.0 (2013-08-09) + ++++++++++++++++++ + + - Switched from LGPL to MIT license. + - Added an Interpreter class to the API to make autocompletion in REPL + possible. + - Added autocompletion support for namespace packages. + - Add sith.py, a new random testing method. + + 0.6.0 (2013-05-14) + ++++++++++++++++++ + + - Much faster parser with builtin part caching. + - A test suite, thanks @tkf. + + 0.5 versions (2012) + +++++++++++++++++++ + + - Initial development. + +Keywords: python completion refactoring vim +Platform: any +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Plugins +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Programming Language :: Python :: 3.8 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Editors :: Integrated Development Environments (IDE) +Classifier: Topic :: Utilities +Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* +Provides-Extra: testing diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/SOURCES.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/SOURCES.txt new file mode 100644 index 0000000..09aab49 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/SOURCES.txt @@ -0,0 +1,1369 @@ +.coveragerc +AUTHORS.txt +CHANGELOG.rst +LICENSE.txt +MANIFEST.in +README.rst +conftest.py +pytest.ini +requirements.txt +setup.cfg +setup.py +sith.py +tox.ini +docs/Makefile +docs/README.md +docs/conf.py +docs/global.rst +docs/index.rst +docs/_screenshots/screenshot_complete.png +docs/_screenshots/screenshot_function.png +docs/_screenshots/screenshot_pydoc.png +docs/_static/logo-src.txt +docs/_static/logo.png +docs/_templates/ghbuttons.html +docs/_templates/sidebarlogo.html +docs/_themes/flask_theme_support.py +docs/_themes/flask/LICENSE +docs/_themes/flask/layout.html +docs/_themes/flask/relations.html +docs/_themes/flask/theme.conf +docs/_themes/flask/static/flasky.css_t +docs/_themes/flask/static/small_flask.css +docs/docs/api-classes.rst +docs/docs/api.rst +docs/docs/development.rst +docs/docs/features.rst +docs/docs/installation.rst +docs/docs/settings.rst +docs/docs/testing.rst +docs/docs/usage.rst +jedi/__init__.py +jedi/__main__.py +jedi/_compatibility.py +jedi/cache.py +jedi/debug.py +jedi/file_io.py +jedi/parser_utils.py +jedi/refactoring.py +jedi/settings.py +jedi/utils.py +jedi.egg-info/PKG-INFO +jedi.egg-info/SOURCES.txt +jedi.egg-info/dependency_links.txt +jedi.egg-info/requires.txt +jedi.egg-info/top_level.txt +jedi/api/__init__.py +jedi/api/classes.py +jedi/api/completion.py +jedi/api/environment.py +jedi/api/exceptions.py +jedi/api/file_name.py +jedi/api/helpers.py +jedi/api/interpreter.py +jedi/api/keywords.py +jedi/api/project.py +jedi/api/replstartup.py +jedi/common/__init__.py +jedi/common/context.py +jedi/common/utils.py +jedi/evaluate/__init__.py +jedi/evaluate/analysis.py +jedi/evaluate/arguments.py +jedi/evaluate/base_context.py +jedi/evaluate/cache.py +jedi/evaluate/docstrings.py +jedi/evaluate/dynamic.py +jedi/evaluate/filters.py +jedi/evaluate/finder.py +jedi/evaluate/flow_analysis.py +jedi/evaluate/helpers.py +jedi/evaluate/imports.py +jedi/evaluate/lazy_context.py +jedi/evaluate/names.py +jedi/evaluate/param.py +jedi/evaluate/parser_cache.py +jedi/evaluate/recursion.py +jedi/evaluate/signature.py +jedi/evaluate/star_args.py +jedi/evaluate/syntax_tree.py +jedi/evaluate/sys_path.py +jedi/evaluate/usages.py +jedi/evaluate/utils.py +jedi/evaluate/compiled/__init__.py +jedi/evaluate/compiled/access.py +jedi/evaluate/compiled/context.py +jedi/evaluate/compiled/getattr_static.py +jedi/evaluate/compiled/mixed.py +jedi/evaluate/compiled/subprocess/__init__.py +jedi/evaluate/compiled/subprocess/__main__.py +jedi/evaluate/compiled/subprocess/functions.py +jedi/evaluate/context/__init__.py +jedi/evaluate/context/decorator.py +jedi/evaluate/context/function.py +jedi/evaluate/context/instance.py +jedi/evaluate/context/iterable.py +jedi/evaluate/context/klass.py +jedi/evaluate/context/module.py +jedi/evaluate/context/namespace.py +jedi/evaluate/gradual/__init__.py +jedi/evaluate/gradual/annotation.py +jedi/evaluate/gradual/conversion.py +jedi/evaluate/gradual/stub_context.py +jedi/evaluate/gradual/typeshed.py +jedi/evaluate/gradual/typing.py +jedi/evaluate/gradual/utils.py +jedi/plugins/__init__.py +jedi/plugins/flask.py +jedi/plugins/registry.py +jedi/plugins/stdlib.py +jedi/third_party/typeshed/LICENSE +jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi +jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi +jedi/third_party/typeshed/stdlib/2/Cookie.pyi +jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi +jedi/third_party/typeshed/stdlib/2/Queue.pyi +jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi +jedi/third_party/typeshed/stdlib/2/SocketServer.pyi +jedi/third_party/typeshed/stdlib/2/StringIO.pyi +jedi/third_party/typeshed/stdlib/2/UserDict.pyi +jedi/third_party/typeshed/stdlib/2/UserList.pyi +jedi/third_party/typeshed/stdlib/2/UserString.pyi +jedi/third_party/typeshed/stdlib/2/__builtin__.pyi +jedi/third_party/typeshed/stdlib/2/_ast.pyi +jedi/third_party/typeshed/stdlib/2/_collections.pyi +jedi/third_party/typeshed/stdlib/2/_functools.pyi +jedi/third_party/typeshed/stdlib/2/_hotshot.pyi +jedi/third_party/typeshed/stdlib/2/_io.pyi +jedi/third_party/typeshed/stdlib/2/_json.pyi +jedi/third_party/typeshed/stdlib/2/_md5.pyi +jedi/third_party/typeshed/stdlib/2/_sha.pyi +jedi/third_party/typeshed/stdlib/2/_sha256.pyi +jedi/third_party/typeshed/stdlib/2/_sha512.pyi +jedi/third_party/typeshed/stdlib/2/_socket.pyi +jedi/third_party/typeshed/stdlib/2/_sre.pyi +jedi/third_party/typeshed/stdlib/2/_struct.pyi +jedi/third_party/typeshed/stdlib/2/_symtable.pyi +jedi/third_party/typeshed/stdlib/2/_threading_local.pyi +jedi/third_party/typeshed/stdlib/2/_warnings.pyi +jedi/third_party/typeshed/stdlib/2/abc.pyi +jedi/third_party/typeshed/stdlib/2/ast.pyi +jedi/third_party/typeshed/stdlib/2/atexit.pyi +jedi/third_party/typeshed/stdlib/2/cPickle.pyi +jedi/third_party/typeshed/stdlib/2/cStringIO.pyi +jedi/third_party/typeshed/stdlib/2/collections.pyi +jedi/third_party/typeshed/stdlib/2/commands.pyi +jedi/third_party/typeshed/stdlib/2/compileall.pyi +jedi/third_party/typeshed/stdlib/2/cookielib.pyi +jedi/third_party/typeshed/stdlib/2/dircache.pyi +jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi +jedi/third_party/typeshed/stdlib/2/exceptions.pyi +jedi/third_party/typeshed/stdlib/2/fcntl.pyi +jedi/third_party/typeshed/stdlib/2/fnmatch.pyi +jedi/third_party/typeshed/stdlib/2/functools.pyi +jedi/third_party/typeshed/stdlib/2/future_builtins.pyi +jedi/third_party/typeshed/stdlib/2/gc.pyi +jedi/third_party/typeshed/stdlib/2/getopt.pyi +jedi/third_party/typeshed/stdlib/2/getpass.pyi +jedi/third_party/typeshed/stdlib/2/gettext.pyi +jedi/third_party/typeshed/stdlib/2/glob.pyi +jedi/third_party/typeshed/stdlib/2/gzip.pyi +jedi/third_party/typeshed/stdlib/2/hashlib.pyi +jedi/third_party/typeshed/stdlib/2/heapq.pyi +jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi +jedi/third_party/typeshed/stdlib/2/httplib.pyi +jedi/third_party/typeshed/stdlib/2/imp.pyi +jedi/third_party/typeshed/stdlib/2/importlib.pyi +jedi/third_party/typeshed/stdlib/2/inspect.pyi +jedi/third_party/typeshed/stdlib/2/io.pyi +jedi/third_party/typeshed/stdlib/2/itertools.pyi +jedi/third_party/typeshed/stdlib/2/json.pyi +jedi/third_party/typeshed/stdlib/2/markupbase.pyi +jedi/third_party/typeshed/stdlib/2/md5.pyi +jedi/third_party/typeshed/stdlib/2/mimetools.pyi +jedi/third_party/typeshed/stdlib/2/mutex.pyi +jedi/third_party/typeshed/stdlib/2/nturl2path.pyi +jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi +jedi/third_party/typeshed/stdlib/2/pipes.pyi +jedi/third_party/typeshed/stdlib/2/platform.pyi +jedi/third_party/typeshed/stdlib/2/popen2.pyi +jedi/third_party/typeshed/stdlib/2/posix.pyi +jedi/third_party/typeshed/stdlib/2/random.pyi +jedi/third_party/typeshed/stdlib/2/re.pyi +jedi/third_party/typeshed/stdlib/2/repr.pyi +jedi/third_party/typeshed/stdlib/2/resource.pyi +jedi/third_party/typeshed/stdlib/2/rfc822.pyi +jedi/third_party/typeshed/stdlib/2/robotparser.pyi +jedi/third_party/typeshed/stdlib/2/runpy.pyi +jedi/third_party/typeshed/stdlib/2/sets.pyi +jedi/third_party/typeshed/stdlib/2/sha.pyi +jedi/third_party/typeshed/stdlib/2/shelve.pyi +jedi/third_party/typeshed/stdlib/2/shlex.pyi +jedi/third_party/typeshed/stdlib/2/signal.pyi +jedi/third_party/typeshed/stdlib/2/smtplib.pyi +jedi/third_party/typeshed/stdlib/2/spwd.pyi +jedi/third_party/typeshed/stdlib/2/sre_constants.pyi +jedi/third_party/typeshed/stdlib/2/sre_parse.pyi +jedi/third_party/typeshed/stdlib/2/stat.pyi +jedi/third_party/typeshed/stdlib/2/string.pyi +jedi/third_party/typeshed/stdlib/2/stringold.pyi +jedi/third_party/typeshed/stdlib/2/strop.pyi +jedi/third_party/typeshed/stdlib/2/subprocess.pyi +jedi/third_party/typeshed/stdlib/2/symbol.pyi +jedi/third_party/typeshed/stdlib/2/sys.pyi +jedi/third_party/typeshed/stdlib/2/tempfile.pyi +jedi/third_party/typeshed/stdlib/2/textwrap.pyi +jedi/third_party/typeshed/stdlib/2/thread.pyi +jedi/third_party/typeshed/stdlib/2/toaiff.pyi +jedi/third_party/typeshed/stdlib/2/tokenize.pyi +jedi/third_party/typeshed/stdlib/2/types.pyi +jedi/third_party/typeshed/stdlib/2/typing.pyi +jedi/third_party/typeshed/stdlib/2/unittest.pyi +jedi/third_party/typeshed/stdlib/2/urllib.pyi +jedi/third_party/typeshed/stdlib/2/urllib2.pyi +jedi/third_party/typeshed/stdlib/2/urlparse.pyi +jedi/third_party/typeshed/stdlib/2/user.pyi +jedi/third_party/typeshed/stdlib/2/whichdb.pyi +jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi +jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi +jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi +jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi +jedi/third_party/typeshed/stdlib/2/email/__init__.pyi +jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi +jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi +jedi/third_party/typeshed/stdlib/2/email/charset.pyi +jedi/third_party/typeshed/stdlib/2/email/encoders.pyi +jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi +jedi/third_party/typeshed/stdlib/2/email/generator.pyi +jedi/third_party/typeshed/stdlib/2/email/header.pyi +jedi/third_party/typeshed/stdlib/2/email/iterators.pyi +jedi/third_party/typeshed/stdlib/2/email/message.pyi +jedi/third_party/typeshed/stdlib/2/email/parser.pyi +jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi +jedi/third_party/typeshed/stdlib/2/email/utils.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi +jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi +jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi +jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi +jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi +jedi/third_party/typeshed/stdlib/2/os/__init__.pyi +jedi/third_party/typeshed/stdlib/2/os/path.pyi +jedi/third_party/typeshed/stdlib/2and3/__future__.pyi +jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi +jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi +jedi/third_party/typeshed/stdlib/2and3/_csv.pyi +jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi +jedi/third_party/typeshed/stdlib/2and3/_random.pyi +jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi +jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi +jedi/third_party/typeshed/stdlib/2and3/argparse.pyi +jedi/third_party/typeshed/stdlib/2and3/array.pyi +jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi +jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi +jedi/third_party/typeshed/stdlib/2and3/base64.pyi +jedi/third_party/typeshed/stdlib/2and3/binascii.pyi +jedi/third_party/typeshed/stdlib/2and3/binhex.pyi +jedi/third_party/typeshed/stdlib/2and3/bisect.pyi +jedi/third_party/typeshed/stdlib/2and3/builtins.pyi +jedi/third_party/typeshed/stdlib/2and3/bz2.pyi +jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi +jedi/third_party/typeshed/stdlib/2and3/calendar.pyi +jedi/third_party/typeshed/stdlib/2and3/cgi.pyi +jedi/third_party/typeshed/stdlib/2and3/chunk.pyi +jedi/third_party/typeshed/stdlib/2and3/cmath.pyi +jedi/third_party/typeshed/stdlib/2and3/cmd.pyi +jedi/third_party/typeshed/stdlib/2and3/code.pyi +jedi/third_party/typeshed/stdlib/2and3/codecs.pyi +jedi/third_party/typeshed/stdlib/2and3/codeop.pyi +jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi +jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi +jedi/third_party/typeshed/stdlib/2and3/copy.pyi +jedi/third_party/typeshed/stdlib/2and3/crypt.pyi +jedi/third_party/typeshed/stdlib/2and3/csv.pyi +jedi/third_party/typeshed/stdlib/2and3/datetime.pyi +jedi/third_party/typeshed/stdlib/2and3/decimal.pyi +jedi/third_party/typeshed/stdlib/2and3/difflib.pyi +jedi/third_party/typeshed/stdlib/2and3/dis.pyi +jedi/third_party/typeshed/stdlib/2and3/doctest.pyi +jedi/third_party/typeshed/stdlib/2and3/errno.pyi +jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi +jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi +jedi/third_party/typeshed/stdlib/2and3/formatter.pyi +jedi/third_party/typeshed/stdlib/2and3/fractions.pyi +jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi +jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi +jedi/third_party/typeshed/stdlib/2and3/grp.pyi +jedi/third_party/typeshed/stdlib/2and3/hmac.pyi +jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi +jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi +jedi/third_party/typeshed/stdlib/2and3/keyword.pyi +jedi/third_party/typeshed/stdlib/2and3/linecache.pyi +jedi/third_party/typeshed/stdlib/2and3/locale.pyi +jedi/third_party/typeshed/stdlib/2and3/macpath.pyi +jedi/third_party/typeshed/stdlib/2and3/marshal.pyi +jedi/third_party/typeshed/stdlib/2and3/math.pyi +jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi +jedi/third_party/typeshed/stdlib/2and3/mmap.pyi +jedi/third_party/typeshed/stdlib/2and3/netrc.pyi +jedi/third_party/typeshed/stdlib/2and3/nis.pyi +jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi +jedi/third_party/typeshed/stdlib/2and3/numbers.pyi +jedi/third_party/typeshed/stdlib/2and3/opcode.pyi +jedi/third_party/typeshed/stdlib/2and3/operator.pyi +jedi/third_party/typeshed/stdlib/2and3/optparse.pyi +jedi/third_party/typeshed/stdlib/2and3/pdb.pyi +jedi/third_party/typeshed/stdlib/2and3/pickle.pyi +jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi +jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi +jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi +jedi/third_party/typeshed/stdlib/2and3/poplib.pyi +jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi +jedi/third_party/typeshed/stdlib/2and3/pprint.pyi +jedi/third_party/typeshed/stdlib/2and3/profile.pyi +jedi/third_party/typeshed/stdlib/2and3/pstats.pyi +jedi/third_party/typeshed/stdlib/2and3/pty.pyi +jedi/third_party/typeshed/stdlib/2and3/pwd.pyi +jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi +jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi +jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi +jedi/third_party/typeshed/stdlib/2and3/quopri.pyi +jedi/third_party/typeshed/stdlib/2and3/readline.pyi +jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi +jedi/third_party/typeshed/stdlib/2and3/sched.pyi +jedi/third_party/typeshed/stdlib/2and3/select.pyi +jedi/third_party/typeshed/stdlib/2and3/shutil.pyi +jedi/third_party/typeshed/stdlib/2and3/site.pyi +jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi +jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi +jedi/third_party/typeshed/stdlib/2and3/socket.pyi +jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi +jedi/third_party/typeshed/stdlib/2and3/ssl.pyi +jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi +jedi/third_party/typeshed/stdlib/2and3/struct.pyi +jedi/third_party/typeshed/stdlib/2and3/sunau.pyi +jedi/third_party/typeshed/stdlib/2and3/symtable.pyi +jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi +jedi/third_party/typeshed/stdlib/2and3/syslog.pyi +jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi +jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi +jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi +jedi/third_party/typeshed/stdlib/2and3/termios.pyi +jedi/third_party/typeshed/stdlib/2and3/threading.pyi +jedi/third_party/typeshed/stdlib/2and3/time.pyi +jedi/third_party/typeshed/stdlib/2and3/timeit.pyi +jedi/third_party/typeshed/stdlib/2and3/token.pyi +jedi/third_party/typeshed/stdlib/2and3/trace.pyi +jedi/third_party/typeshed/stdlib/2and3/traceback.pyi +jedi/third_party/typeshed/stdlib/2and3/tty.pyi +jedi/third_party/typeshed/stdlib/2and3/turtle.pyi +jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi +jedi/third_party/typeshed/stdlib/2and3/uu.pyi +jedi/third_party/typeshed/stdlib/2and3/uuid.pyi +jedi/third_party/typeshed/stdlib/2and3/warnings.pyi +jedi/third_party/typeshed/stdlib/2and3/wave.pyi +jedi/third_party/typeshed/stdlib/2and3/weakref.pyi +jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi +jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi +jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi +jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi +jedi/third_party/typeshed/stdlib/2and3/zlib.pyi +jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi +jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi +jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi +jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi +jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi +jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi +jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi +jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi +jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi +jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi +jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi +jedi/third_party/typeshed/stdlib/3/_ast.pyi +jedi/third_party/typeshed/stdlib/3/_compression.pyi +jedi/third_party/typeshed/stdlib/3/_curses.pyi +jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi +jedi/third_party/typeshed/stdlib/3/_imp.pyi +jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi +jedi/third_party/typeshed/stdlib/3/_json.pyi +jedi/third_party/typeshed/stdlib/3/_markupbase.pyi +jedi/third_party/typeshed/stdlib/3/_operator.pyi +jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi +jedi/third_party/typeshed/stdlib/3/_stat.pyi +jedi/third_party/typeshed/stdlib/3/_subprocess.pyi +jedi/third_party/typeshed/stdlib/3/_thread.pyi +jedi/third_party/typeshed/stdlib/3/_threading_local.pyi +jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi +jedi/third_party/typeshed/stdlib/3/_warnings.pyi +jedi/third_party/typeshed/stdlib/3/_winapi.pyi +jedi/third_party/typeshed/stdlib/3/abc.pyi +jedi/third_party/typeshed/stdlib/3/ast.pyi +jedi/third_party/typeshed/stdlib/3/atexit.pyi +jedi/third_party/typeshed/stdlib/3/compileall.pyi +jedi/third_party/typeshed/stdlib/3/configparser.pyi +jedi/third_party/typeshed/stdlib/3/enum.pyi +jedi/third_party/typeshed/stdlib/3/faulthandler.pyi +jedi/third_party/typeshed/stdlib/3/fcntl.pyi +jedi/third_party/typeshed/stdlib/3/fnmatch.pyi +jedi/third_party/typeshed/stdlib/3/functools.pyi +jedi/third_party/typeshed/stdlib/3/gc.pyi +jedi/third_party/typeshed/stdlib/3/getopt.pyi +jedi/third_party/typeshed/stdlib/3/getpass.pyi +jedi/third_party/typeshed/stdlib/3/gettext.pyi +jedi/third_party/typeshed/stdlib/3/glob.pyi +jedi/third_party/typeshed/stdlib/3/gzip.pyi +jedi/third_party/typeshed/stdlib/3/hashlib.pyi +jedi/third_party/typeshed/stdlib/3/heapq.pyi +jedi/third_party/typeshed/stdlib/3/imp.pyi +jedi/third_party/typeshed/stdlib/3/inspect.pyi +jedi/third_party/typeshed/stdlib/3/io.pyi +jedi/third_party/typeshed/stdlib/3/ipaddress.pyi +jedi/third_party/typeshed/stdlib/3/itertools.pyi +jedi/third_party/typeshed/stdlib/3/lzma.pyi +jedi/third_party/typeshed/stdlib/3/msvcrt.pyi +jedi/third_party/typeshed/stdlib/3/nntplib.pyi +jedi/third_party/typeshed/stdlib/3/nturl2path.pyi +jedi/third_party/typeshed/stdlib/3/pathlib.pyi +jedi/third_party/typeshed/stdlib/3/pipes.pyi +jedi/third_party/typeshed/stdlib/3/platform.pyi +jedi/third_party/typeshed/stdlib/3/posix.pyi +jedi/third_party/typeshed/stdlib/3/queue.pyi +jedi/third_party/typeshed/stdlib/3/random.pyi +jedi/third_party/typeshed/stdlib/3/re.pyi +jedi/third_party/typeshed/stdlib/3/reprlib.pyi +jedi/third_party/typeshed/stdlib/3/resource.pyi +jedi/third_party/typeshed/stdlib/3/runpy.pyi +jedi/third_party/typeshed/stdlib/3/selectors.pyi +jedi/third_party/typeshed/stdlib/3/shelve.pyi +jedi/third_party/typeshed/stdlib/3/shlex.pyi +jedi/third_party/typeshed/stdlib/3/signal.pyi +jedi/third_party/typeshed/stdlib/3/smtplib.pyi +jedi/third_party/typeshed/stdlib/3/socketserver.pyi +jedi/third_party/typeshed/stdlib/3/spwd.pyi +jedi/third_party/typeshed/stdlib/3/sre_constants.pyi +jedi/third_party/typeshed/stdlib/3/sre_parse.pyi +jedi/third_party/typeshed/stdlib/3/stat.pyi +jedi/third_party/typeshed/stdlib/3/statistics.pyi +jedi/third_party/typeshed/stdlib/3/string.pyi +jedi/third_party/typeshed/stdlib/3/subprocess.pyi +jedi/third_party/typeshed/stdlib/3/symbol.pyi +jedi/third_party/typeshed/stdlib/3/sys.pyi +jedi/third_party/typeshed/stdlib/3/tempfile.pyi +jedi/third_party/typeshed/stdlib/3/textwrap.pyi +jedi/third_party/typeshed/stdlib/3/tokenize.pyi +jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi +jedi/third_party/typeshed/stdlib/3/types.pyi +jedi/third_party/typeshed/stdlib/3/typing.pyi +jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi +jedi/third_party/typeshed/stdlib/3.6/secrets.pyi +jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi +jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi +jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi +jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi +jedi/third_party/typeshed/stdlib/3/collections/abc.pyi +jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi +jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi +jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi +jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi +jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi +jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi +jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi +jedi/third_party/typeshed/stdlib/3/curses/panel.pyi +jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi +jedi/third_party/typeshed/stdlib/3/email/__init__.pyi +jedi/third_party/typeshed/stdlib/3/email/charset.pyi +jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi +jedi/third_party/typeshed/stdlib/3/email/encoders.pyi +jedi/third_party/typeshed/stdlib/3/email/errors.pyi +jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi +jedi/third_party/typeshed/stdlib/3/email/generator.pyi +jedi/third_party/typeshed/stdlib/3/email/header.pyi +jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi +jedi/third_party/typeshed/stdlib/3/email/iterators.pyi +jedi/third_party/typeshed/stdlib/3/email/message.pyi +jedi/third_party/typeshed/stdlib/3/email/parser.pyi +jedi/third_party/typeshed/stdlib/3/email/policy.pyi +jedi/third_party/typeshed/stdlib/3/email/utils.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi +jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi +jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi +jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi +jedi/third_party/typeshed/stdlib/3/html/__init__.pyi +jedi/third_party/typeshed/stdlib/3/html/entities.pyi +jedi/third_party/typeshed/stdlib/3/html/parser.pyi +jedi/third_party/typeshed/stdlib/3/http/__init__.pyi +jedi/third_party/typeshed/stdlib/3/http/client.pyi +jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi +jedi/third_party/typeshed/stdlib/3/http/cookies.pyi +jedi/third_party/typeshed/stdlib/3/http/server.pyi +jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi +jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi +jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi +jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi +jedi/third_party/typeshed/stdlib/3/importlib/util.pyi +jedi/third_party/typeshed/stdlib/3/json/__init__.pyi +jedi/third_party/typeshed/stdlib/3/json/decoder.pyi +jedi/third_party/typeshed/stdlib/3/json/encoder.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi +jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi +jedi/third_party/typeshed/stdlib/3/os/__init__.pyi +jedi/third_party/typeshed/stdlib/3/os/path.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi +jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi +jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi +jedi/third_party/typeshed/stdlib/3/unittest/case.pyi +jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi +jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi +jedi/third_party/typeshed/stdlib/3/unittest/result.pyi +jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi +jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi +jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi +jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi +jedi/third_party/typeshed/stdlib/3/urllib/error.pyi +jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi +jedi/third_party/typeshed/stdlib/3/urllib/request.pyi +jedi/third_party/typeshed/stdlib/3/urllib/response.pyi +jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi +jedi/third_party/typeshed/third_party/2/enum.pyi +jedi/third_party/typeshed/third_party/2/gflags.pyi +jedi/third_party/typeshed/third_party/2/pathlib2.pyi +jedi/third_party/typeshed/third_party/2/pymssql.pyi +jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi +jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi +jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi +jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi +jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi +jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi +jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi +jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi +jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi +jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi +jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi +jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi +jedi/third_party/typeshed/third_party/2/kazoo/client.pyi +jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi +jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi +jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi +jedi/third_party/typeshed/third_party/2/redis/__init__.pyi +jedi/third_party/typeshed/third_party/2/redis/client.pyi +jedi/third_party/typeshed/third_party/2/redis/connection.pyi +jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi +jedi/third_party/typeshed/third_party/2/redis/utils.pyi +jedi/third_party/typeshed/third_party/2/routes/__init__.pyi +jedi/third_party/typeshed/third_party/2/routes/mapper.pyi +jedi/third_party/typeshed/third_party/2/routes/util.pyi +jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi +jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi +jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi +jedi/third_party/typeshed/third_party/2/six/__init__.pyi +jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi +jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi +jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi +jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi +jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi +jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi +jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi +jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi +jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi +jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi +jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi +jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi +jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi +jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi +jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi +jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi +jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi +jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi +jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi +jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi +jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi +jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi +jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi +jedi/third_party/typeshed/third_party/2/tornado/gen.pyi +jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi +jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi +jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi +jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi +jedi/third_party/typeshed/third_party/2/tornado/locks.pyi +jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi +jedi/third_party/typeshed/third_party/2/tornado/process.pyi +jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi +jedi/third_party/typeshed/third_party/2/tornado/testing.pyi +jedi/third_party/typeshed/third_party/2/tornado/util.pyi +jedi/third_party/typeshed/third_party/2/tornado/web.pyi +jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi +jedi/third_party/typeshed/third_party/2and3/certifi.pyi +jedi/third_party/typeshed/third_party/2and3/croniter.pyi +jedi/third_party/typeshed/third_party/2and3/emoji.pyi +jedi/third_party/typeshed/third_party/2and3/first.pyi +jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi +jedi/third_party/typeshed/third_party/2and3/mock.pyi +jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi +jedi/third_party/typeshed/third_party/2and3/pycurl.pyi +jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi +jedi/third_party/typeshed/third_party/2and3/tabulate.pyi +jedi/third_party/typeshed/third_party/2and3/termcolor.pyi +jedi/third_party/typeshed/third_party/2and3/toml.pyi +jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi +jedi/third_party/typeshed/third_party/2and3/ujson.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi +jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi +jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi +jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi +jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi +jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi +jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi +jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi +jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi +jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi +jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi +jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi +jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi +jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi +jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi +jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi +jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi +jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi +jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi +jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi +jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi +jedi/third_party/typeshed/third_party/2and3/click/core.pyi +jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi +jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi +jedi/third_party/typeshed/third_party/2and3/click/globals.pyi +jedi/third_party/typeshed/third_party/2and3/click/parser.pyi +jedi/third_party/typeshed/third_party/2and3/click/termui.pyi +jedi/third_party/typeshed/third_party/2and3/click/testing.pyi +jedi/third_party/typeshed/third_party/2and3/click/types.pyi +jedi/third_party/typeshed/third_party/2and3/click/utils.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi +jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi +jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/flask/app.pyi +jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi +jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi +jedi/third_party/typeshed/third_party/2and3/flask/config.pyi +jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi +jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi +jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi +jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi +jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi +jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi +jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi +jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi +jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi +jedi/third_party/typeshed/third_party/2and3/flask/views.pyi +jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi +jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi +jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi +jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi +jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi +jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi +jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi +jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi +jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi +jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi +jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi +jedi/third_party/typeshed/third_party/2and3/requests/api.pyi +jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi +jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi +jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi +jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi +jedi/third_party/typeshed/third_party/2and3/requests/models.pyi +jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi +jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi +jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi +jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi +jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi +jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi +jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi +jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi +jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi +jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi +jedi/third_party/typeshed/third_party/3/dataclasses.pyi +jedi/third_party/typeshed/third_party/3/orjson.pyi +jedi/third_party/typeshed/third_party/3.5/contextvars.pyi +jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi +jedi/third_party/typeshed/third_party/3/docutils/examples.pyi +jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi +jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi +jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi +jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi +jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi +jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi +jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi +jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi +jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi +jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi +jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi +jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi +jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi +jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi +jedi/third_party/typeshed/third_party/3/six/__init__.pyi +jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi +jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi +jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi +jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi +jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi +jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi +jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi +jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi +jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi +jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi +jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi +jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi +jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi +jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi +jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi +jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi +jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi +jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi +jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi +jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi +jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi +jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi +jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi +jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi +jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi +jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi +jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi +test/__init__.py +test/blabla_test_documentation.py +test/conftest.py +test/helpers.py +test/refactor.py +test/run.py +test/test_cache.py +test/test_compatibility.py +test/test_debug.py +test/test_integration.py +test/test_settings.py +test/test_speed.py +test/test_utils.py +test/completion/__init__.py +test/completion/arrays.py +test/completion/async_.py +test/completion/basic.py +test/completion/classes.py +test/completion/completion.py +test/completion/complex.py +test/completion/comprehensions.py +test/completion/context.py +test/completion/decorators.py +test/completion/definition.py +test/completion/descriptors.py +test/completion/docstring.py +test/completion/dynamic_arrays.py +test/completion/dynamic_params.py +test/completion/flow_analysis.py +test/completion/fstring.py +test/completion/functions.py +test/completion/generators.py +test/completion/goto.py +test/completion/imports.py +test/completion/invalid.py +test/completion/isinstance.py +test/completion/keywords.py +test/completion/lambdas.py +test/completion/named_expression.py +test/completion/named_param.py +test/completion/on_import.py +test/completion/ordering.py +test/completion/parser.py +test/completion/pep0484_basic.py +test/completion/pep0484_comments.py +test/completion/pep0484_typing.py +test/completion/pep0526_variables.py +test/completion/positional_only_params.py +test/completion/precedence.py +test/completion/recursion.py +test/completion/stdlib.py +test/completion/stubs.py +test/completion/sys_path.py +test/completion/types.py +test/completion/usages.py +test/completion/import_tree/__init__.py +test/completion/import_tree/classes.py +test/completion/import_tree/flow_import.py +test/completion/import_tree/invisible_pkg.py +test/completion/import_tree/mod1.py +test/completion/import_tree/mod2.py +test/completion/import_tree/random.py +test/completion/import_tree/recurse_class1.py +test/completion/import_tree/recurse_class2.py +test/completion/import_tree/rename1.py +test/completion/import_tree/rename2.py +test/completion/import_tree/pkg/__init__.py +test/completion/import_tree/pkg/mod1.py +test/completion/stub_folder/stub_only.pyi +test/completion/stub_folder/with_stub.py +test/completion/stub_folder/with_stub.pyi +test/completion/stub_folder/stub_only_folder/__init__.pyi +test/completion/stub_folder/stub_only_folder/nested_stub_only.pyi +test/completion/stub_folder/stub_only_folder/nested_with_stub.py +test/completion/stub_folder/stub_only_folder/nested_with_stub.pyi +test/completion/stub_folder/stub_only_folder/python_only.py +test/completion/stub_folder/with_stub_folder/__init__.py +test/completion/stub_folder/with_stub_folder/__init__.pyi +test/completion/stub_folder/with_stub_folder/nested_stub_only.pyi +test/completion/stub_folder/with_stub_folder/nested_with_stub.py +test/completion/stub_folder/with_stub_folder/nested_with_stub.pyi +test/completion/stub_folder/with_stub_folder/python_only.py +test/completion/thirdparty/PyQt4_.py +test/completion/thirdparty/django_.py +test/completion/thirdparty/jedi_.py +test/completion/thirdparty/psycopg2_.py +test/completion/thirdparty/pylab_.py +test/examples/README.rst +test/examples/buildout_project/buildout.cfg +test/examples/buildout_project/bin/app +test/examples/buildout_project/bin/binary_file +test/examples/buildout_project/bin/empty_file +test/examples/buildout_project/src/proj_name/module_name.py +test/examples/django/manage.py +test/examples/django/app/__init__.py +test/examples/django/app/models.py +test/examples/issue1209/__init__.py +test/examples/issue1209/api/__init__.py +test/examples/issue1209/api/whatever/__init__.py +test/examples/issue1209/api/whatever/api_test1.py +test/examples/issue1209/whatever/__init__.py +test/examples/issue1209/whatever/test.py +test/examples/namespace_package_relative_import/rel1.py +test/examples/namespace_package_relative_import/rel2.py +test/examples/stub_packages/no_python-stubs/__init__.pyi +test/examples/stub_packages/with_python/__init__.py +test/examples/stub_packages/with_python/module.py +test/examples/stub_packages/with_python-stubs/__init__.pyi +test/examples/stub_packages/with_python-stubs/module.pyi +test/refactor/extract.py +test/refactor/inline.py +test/refactor/rename.py +test/speed/precedence.py +test/static_analysis/attribute_error.py +test/static_analysis/attribute_warnings.py +test/static_analysis/branches.py +test/static_analysis/builtins.py +test/static_analysis/class_simple.py +test/static_analysis/comprehensions.py +test/static_analysis/descriptors.py +test/static_analysis/generators.py +test/static_analysis/imports.py +test/static_analysis/iterable.py +test/static_analysis/keywords.py +test/static_analysis/normal_arguments.py +test/static_analysis/operations.py +test/static_analysis/python2.py +test/static_analysis/star_arguments.py +test/static_analysis/try_except.py +test/static_analysis/import_tree/__init__.py +test/static_analysis/import_tree/a.py +test/static_analysis/import_tree/b.py +test/test_api/__init__.py +test/test_api/test_analysis.py +test/test_api/test_api.py +test/test_api/test_api_classes_follow_definition.py +test/test_api/test_call_signatures.py +test/test_api/test_classes.py +test/test_api/test_completion.py +test/test_api/test_defined_names.py +test/test_api/test_environment.py +test/test_api/test_full_name.py +test/test_api/test_interpreter.py +test/test_api/test_keyword.py +test/test_api/test_project.py +test/test_api/test_settings.py +test/test_api/test_signatures.py +test/test_api/test_unicode.py +test/test_api/test_usages.py +test/test_api/import_tree_for_usages/__init__.py +test/test_api/import_tree_for_usages/a.py +test/test_api/import_tree_for_usages/b.py +test/test_api/simple_import/__init__.py +test/test_api/simple_import/module.py +test/test_api/simple_import/module2.py +test/test_evaluate/__init__.py +test/test_evaluate/test_absolute_import.py +test/test_evaluate/test_annotations.py +test/test_evaluate/test_buildout_detection.py +test/test_evaluate/test_compiled.py +test/test_evaluate/test_context.py +test/test_evaluate/test_docstring.py +test/test_evaluate/test_extension.py +test/test_evaluate/test_fstring.py +test/test_evaluate/test_helpers.py +test/test_evaluate/test_implicit_namespace_package.py +test/test_evaluate/test_imports.py +test/test_evaluate/test_literals.py +test/test_evaluate/test_mixed.py +test/test_evaluate/test_namespace_package.py +test/test_evaluate/test_precedence.py +test/test_evaluate/test_pyc.py +test/test_evaluate/test_representation.py +test/test_evaluate/test_signature.py +test/test_evaluate/test_stdlib.py +test/test_evaluate/test_sys_path.py +test/test_evaluate/absolute_import/local_module.py +test/test_evaluate/absolute_import/unittest.py +test/test_evaluate/flask-site-packages/flask_foo.py +test/test_evaluate/flask-site-packages/flask/__init__.py +test/test_evaluate/flask-site-packages/flask/ext/__init__.py +test/test_evaluate/flask-site-packages/flask_baz/__init__.py +test/test_evaluate/flask-site-packages/flaskext/__init__.py +test/test_evaluate/flask-site-packages/flaskext/bar.py +test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py +test/test_evaluate/implicit_namespace_package/ns1/pkg/ns1_file.py +test/test_evaluate/implicit_namespace_package/ns2/pkg/ns2_file.py +test/test_evaluate/implicit_nested_namespaces/namespace/pkg/module.py +test/test_evaluate/init_extension_module/__init__.cpython-34m.so +test/test_evaluate/init_extension_module/module.c +test/test_evaluate/init_extension_module/setup.py +test/test_evaluate/namespace_package/ns1/pkg/__init__.py +test/test_evaluate/namespace_package/ns1/pkg/ns1_file.py +test/test_evaluate/namespace_package/ns1/pkg/ns1_folder/__init__.py +test/test_evaluate/namespace_package/ns2/pkg/ns2_file.py +test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/__init__.py +test/test_evaluate/namespace_package/ns2/pkg/ns2_folder/nested/__init__.py +test/test_evaluate/nested_namespaces/__init__.py +test/test_evaluate/nested_namespaces/namespace/__init__.py +test/test_evaluate/nested_namespaces/namespace/pkg/__init__.py +test/test_evaluate/not_in_sys_path/__init__.py +test/test_evaluate/not_in_sys_path/not_in_sys_path.py +test/test_evaluate/not_in_sys_path/not_in_sys_path_package/__init__.py +test/test_evaluate/not_in_sys_path/not_in_sys_path_package/module.py +test/test_evaluate/not_in_sys_path/pkg/__init__.py +test/test_evaluate/not_in_sys_path/pkg/module.py +test/test_evaluate/sample_venvs/pth_directory/egg_link.egg-link +test/test_evaluate/sample_venvs/pth_directory/foo.pth +test/test_evaluate/sample_venvs/pth_directory/import_smth.pth +test/test_evaluate/sample_venvs/pth_directory/relative.egg-link +test/test_evaluate/sample_venvs/pth_directory/smth.py +test/test_evaluate/sample_venvs/pth_directory/dir-from-foo-pth/__init__.py +test/test_evaluate/test_gradual/test_stub_loading.py +test/test_evaluate/test_gradual/test_stubs.py +test/test_evaluate/test_gradual/test_typeshed.py +test/test_evaluate/zipped_imports/not_pkg.zip +test/test_evaluate/zipped_imports/pkg.zip +test/test_parso_integration/test_basic.py +test/test_parso_integration/test_error_correction.py +test/test_parso_integration/test_parser_utils.py \ No newline at end of file diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/dependency_links.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/requires.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/requires.txt new file mode 100644 index 0000000..ccf5255 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/requires.txt @@ -0,0 +1,6 @@ +parso>=0.5.0 + +[testing] +pytest<5.0.0,>=3.1.0 +docopt +colorama diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/top_level.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/top_level.txt new file mode 100644 index 0000000..86c1cb1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi.egg-info/top_level.txt @@ -0,0 +1 @@ +jedi diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/__init__.py new file mode 100644 index 0000000..28cb035 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/__init__.py @@ -0,0 +1,47 @@ +""" +Jedi is a static analysis tool for Python that can be used in IDEs/editors. +Jedi has a focus on autocompletion and goto functionality. Jedi is fast and is +very well tested. It understands Python and stubs on a deep level. + +Jedi has support for different goto functions. It's possible to search for +usages and list names in a Python file to get information about them. + +Jedi uses a very simple API to connect with IDE's. There's a reference +implementation as a `VIM-Plugin `_, +which uses Jedi's autocompletion. We encourage you to use Jedi in your IDEs. +Autocompletion in your REPL is also possible, IPython uses it natively and for +the CPython REPL you have to install it. + +Here's a simple example of the autocompletion feature: + +>>> import jedi +>>> source = ''' +... import json +... json.lo''' +>>> script = jedi.Script(source, 3, len('json.lo'), 'example.py') +>>> script + +>>> completions = script.completions() +>>> completions +[, ] +>>> print(completions[0].complete) +ad +>>> print(completions[0].name) +load + +As you see Jedi is pretty simple and allows you to concentrate on writing a +good text editor, while still having very good IDE features for Python. +""" + +__version__ = '0.15.1' + +from jedi.api import Script, Interpreter, set_debug_function, \ + preload_module, names +from jedi import settings +from jedi.api.environment import find_virtualenvs, find_system_environments, \ + get_default_environment, InvalidPythonEnvironment, create_environment, \ + get_system_environment +from jedi.api.exceptions import InternalError +# Finally load the internal plugins. This is only internal. +from jedi.plugins import registry +del registry diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/__main__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/__main__.py new file mode 100644 index 0000000..f2ee047 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/__main__.py @@ -0,0 +1,48 @@ +import sys +from os.path import join, dirname, abspath, isdir + + +def _start_linter(): + """ + This is a pre-alpha API. You're not supposed to use it at all, except for + testing. It will very likely change. + """ + import jedi + + if '--debug' in sys.argv: + jedi.set_debug_function() + + for path in sys.argv[2:]: + if path.startswith('--'): + continue + if isdir(path): + import fnmatch + import os + + paths = [] + for root, dirnames, filenames in os.walk(path): + for filename in fnmatch.filter(filenames, '*.py'): + paths.append(os.path.join(root, filename)) + else: + paths = [path] + + try: + for path in paths: + for error in jedi.Script(path=path)._analysis(): + print(error) + except Exception: + if '--pdb' in sys.argv: + import traceback + traceback.print_exc() + import pdb + pdb.post_mortem() + else: + raise + + +if len(sys.argv) == 2 and sys.argv[1] == 'repl': + # don't want to use __main__ only for repl yet, maybe we want to use it for + # something else. So just use the keyword ``repl`` for now. + print(join(dirname(abspath(__file__)), 'api', 'replstartup.py')) +elif len(sys.argv) > 1 and sys.argv[1] == 'linter': + _start_linter() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/_compatibility.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/_compatibility.py new file mode 100644 index 0000000..28e23b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/_compatibility.py @@ -0,0 +1,665 @@ +""" +To ensure compatibility from Python ``2.7`` - ``3.x``, a module has been +created. Clearly there is huge need to use conforming syntax. +""" +from __future__ import print_function +import atexit +import errno +import functools +import sys +import os +import re +import pkgutil +import warnings +import inspect +import subprocess +import weakref +try: + import importlib +except ImportError: + pass +from zipimport import zipimporter + +from jedi.file_io import KnownContentFileIO, ZipFileIO + +is_py3 = sys.version_info[0] >= 3 +is_py35 = is_py3 and sys.version_info[1] >= 5 +py_version = int(str(sys.version_info[0]) + str(sys.version_info[1])) + + +class DummyFile(object): + def __init__(self, loader, string): + self.loader = loader + self.string = string + + def read(self): + return self.loader.get_source(self.string) + + def close(self): + del self.loader + + +def find_module_py34(string, path=None, full_name=None, is_global_search=True): + spec = None + loader = None + + for finder in sys.meta_path: + if is_global_search and finder != importlib.machinery.PathFinder: + p = None + else: + p = path + try: + find_spec = finder.find_spec + except AttributeError: + # These are old-school clases that still have a different API, just + # ignore those. + continue + + spec = find_spec(string, p) + if spec is not None: + loader = spec.loader + if loader is None and not spec.has_location: + # This is a namespace package. + full_name = string if not path else full_name + implicit_ns_info = ImplicitNSInfo(full_name, spec.submodule_search_locations._path) + return implicit_ns_info, True + break + + return find_module_py33(string, path, loader) + + +def find_module_py33(string, path=None, loader=None, full_name=None, is_global_search=True): + loader = loader or importlib.machinery.PathFinder.find_module(string, path) + + if loader is None and path is None: # Fallback to find builtins + try: + with warnings.catch_warnings(record=True): + # Mute "DeprecationWarning: Use importlib.util.find_spec() + # instead." While we should replace that in the future, it's + # probably good to wait until we deprecate Python 3.3, since + # it was added in Python 3.4 and find_loader hasn't been + # removed in 3.6. + loader = importlib.find_loader(string) + except ValueError as e: + # See #491. Importlib might raise a ValueError, to avoid this, we + # just raise an ImportError to fix the issue. + raise ImportError("Originally " + repr(e)) + + if loader is None: + raise ImportError("Couldn't find a loader for {}".format(string)) + + return _from_loader(loader, string) + + +def _from_loader(loader, string): + is_package = loader.is_package(string) + try: + get_filename = loader.get_filename + except AttributeError: + return None, is_package + else: + module_path = cast_path(get_filename(string)) + + # To avoid unicode and read bytes, "overwrite" loader.get_source if + # possible. + f = type(loader).get_source + if is_py3 and f is not importlib.machinery.SourceFileLoader.get_source: + # Unfortunately we are reading unicode here, not bytes. + # It seems hard to get bytes, because the zip importer + # logic just unpacks the zip file and returns a file descriptor + # that we cannot as easily access. Therefore we just read it as + # a string in the cases where get_source was overwritten. + code = loader.get_source(string) + else: + code = _get_source(loader, string) + + if code is None: + return None, is_package + if isinstance(loader, zipimporter): + return ZipFileIO(module_path, code, cast_path(loader.archive)), is_package + + return KnownContentFileIO(module_path, code), is_package + + +def _get_source(loader, fullname): + """ + This method is here as a replacement for SourceLoader.get_source. That + method returns unicode, but we prefer bytes. + """ + path = loader.get_filename(fullname) + try: + return loader.get_data(path) + except OSError: + raise ImportError('source not available through get_data()', + name=fullname) + + +def find_module_pre_py3(string, path=None, full_name=None, is_global_search=True): + # This import is here, because in other places it will raise a + # DeprecationWarning. + import imp + try: + module_file, module_path, description = imp.find_module(string, path) + module_type = description[2] + is_package = module_type is imp.PKG_DIRECTORY + if is_package: + # In Python 2 directory package imports are returned as folder + # paths, not __init__.py paths. + p = os.path.join(module_path, '__init__.py') + try: + module_file = open(p) + module_path = p + except FileNotFoundError: + pass + elif module_type != imp.PY_SOURCE: + if module_file is not None: + module_file.close() + module_file = None + + if module_file is None: + code = None + return None, is_package + + with module_file: + code = module_file.read() + return KnownContentFileIO(cast_path(module_path), code), is_package + except ImportError: + pass + + if path is None: + path = sys.path + for item in path: + loader = pkgutil.get_importer(item) + if loader: + loader = loader.find_module(string) + if loader is not None: + return _from_loader(loader, string) + raise ImportError("No module named {}".format(string)) + + +find_module = find_module_py34 if is_py3 else find_module_pre_py3 +find_module.__doc__ = """ +Provides information about a module. + +This function isolates the differences in importing libraries introduced with +python 3.3 on; it gets a module name and optionally a path. It will return a +tuple containin an open file for the module (if not builtin), the filename +or the name of the module if it is a builtin one and a boolean indicating +if the module is contained in a package. +""" + + +def _iter_modules(paths, prefix=''): + # Copy of pkgutil.iter_modules adapted to work with namespaces + + for path in paths: + importer = pkgutil.get_importer(path) + + if not isinstance(importer, importlib.machinery.FileFinder): + # We're only modifying the case for FileFinder. All the other cases + # still need to be checked (like zip-importing). Do this by just + # calling the pkgutil version. + for mod_info in pkgutil.iter_modules([path], prefix): + yield mod_info + continue + + # START COPY OF pkutils._iter_file_finder_modules. + if importer.path is None or not os.path.isdir(importer.path): + return + + yielded = {} + + try: + filenames = os.listdir(importer.path) + except OSError: + # ignore unreadable directories like import does + filenames = [] + filenames.sort() # handle packages before same-named modules + + for fn in filenames: + modname = inspect.getmodulename(fn) + if modname == '__init__' or modname in yielded: + continue + + # jedi addition: Avoid traversing special directories + if fn.startswith('.') or fn == '__pycache__': + continue + + path = os.path.join(importer.path, fn) + ispkg = False + + if not modname and os.path.isdir(path) and '.' not in fn: + modname = fn + # A few jedi modifications: Don't check if there's an + # __init__.py + try: + os.listdir(path) + except OSError: + # ignore unreadable directories like import does + continue + ispkg = True + + if modname and '.' not in modname: + yielded[modname] = 1 + yield importer, prefix + modname, ispkg + # END COPY + + +iter_modules = _iter_modules if py_version >= 34 else pkgutil.iter_modules + + +class ImplicitNSInfo(object): + """Stores information returned from an implicit namespace spec""" + def __init__(self, name, paths): + self.name = name + self.paths = paths + + +if is_py3: + all_suffixes = importlib.machinery.all_suffixes +else: + def all_suffixes(): + # Is deprecated and raises a warning in Python 3.6. + import imp + return [suffix for suffix, _, _ in imp.get_suffixes()] + + +# unicode function +try: + unicode = unicode +except NameError: + unicode = str + + +# re-raise function +if is_py3: + def reraise(exception, traceback): + raise exception.with_traceback(traceback) +else: + eval(compile(""" +def reraise(exception, traceback): + raise exception, None, traceback +""", 'blub', 'exec')) + +reraise.__doc__ = """ +Re-raise `exception` with a `traceback` object. + +Usage:: + + reraise(Exception, sys.exc_info()[2]) + +""" + + +def use_metaclass(meta, *bases): + """ Create a class with a metaclass. """ + if not bases: + bases = (object,) + return meta("Py2CompatibilityMetaClass", bases, {}) + + +try: + encoding = sys.stdout.encoding + if encoding is None: + encoding = 'utf-8' +except AttributeError: + encoding = 'ascii' + + +def u(string, errors='strict'): + """Cast to unicode DAMMIT! + Written because Python2 repr always implicitly casts to a string, so we + have to cast back to a unicode (and we now that we always deal with valid + unicode, because we check that in the beginning). + """ + if isinstance(string, bytes): + return unicode(string, encoding='UTF-8', errors=errors) + return string + + +def cast_path(obj): + """ + Take a bytes or str path and cast it to unicode. + + Apparently it is perfectly fine to pass both byte and unicode objects into + the sys.path. This probably means that byte paths are normal at other + places as well. + + Since this just really complicates everything and Python 2.7 will be EOL + soon anyway, just go with always strings. + """ + return u(obj, errors='replace') + + +def force_unicode(obj): + # Intentionally don't mix those two up, because those two code paths might + # be different in the future (maybe windows?). + return cast_path(obj) + + +try: + import builtins # module name in python 3 +except ImportError: + import __builtin__ as builtins # noqa: F401 + + +import ast # noqa: F401 + + +def literal_eval(string): + return ast.literal_eval(string) + + +try: + from itertools import zip_longest +except ImportError: + from itertools import izip_longest as zip_longest # Python 2 # noqa: F401 + +try: + FileNotFoundError = FileNotFoundError +except NameError: + FileNotFoundError = IOError + +try: + IsADirectoryError = IsADirectoryError +except NameError: + IsADirectoryError = IOError + +try: + PermissionError = PermissionError +except NameError: + PermissionError = IOError + + +def no_unicode_pprint(dct): + """ + Python 2/3 dict __repr__ may be different, because of unicode differens + (with or without a `u` prefix). Normally in doctests we could use `pprint` + to sort dicts and check for equality, but here we have to write a separate + function to do that. + """ + import pprint + s = pprint.pformat(dct) + print(re.sub("u'", "'", s)) + + +def utf8_repr(func): + """ + ``__repr__`` methods in Python 2 don't allow unicode objects to be + returned. Therefore cast them to utf-8 bytes in this decorator. + """ + def wrapper(self): + result = func(self) + if isinstance(result, unicode): + return result.encode('utf-8') + else: + return result + + if is_py3: + return func + else: + return wrapper + + +if is_py3: + import queue +else: + import Queue as queue # noqa: F401 + +try: + # Attempt to load the C implementation of pickle on Python 2 as it is way + # faster. + import cPickle as pickle +except ImportError: + import pickle +if sys.version_info[:2] == (3, 3): + """ + Monkeypatch the unpickler in Python 3.3. This is needed, because the + argument `encoding='bytes'` is not supported in 3.3, but badly needed to + communicate with Python 2. + """ + + class NewUnpickler(pickle._Unpickler): + dispatch = dict(pickle._Unpickler.dispatch) + + def _decode_string(self, value): + # Used to allow strings from Python 2 to be decoded either as + # bytes or Unicode strings. This should be used only with the + # STRING, BINSTRING and SHORT_BINSTRING opcodes. + if self.encoding == "bytes": + return value + else: + return value.decode(self.encoding, self.errors) + + def load_string(self): + data = self.readline()[:-1] + # Strip outermost quotes + if len(data) >= 2 and data[0] == data[-1] and data[0] in b'"\'': + data = data[1:-1] + else: + raise pickle.UnpicklingError("the STRING opcode argument must be quoted") + self.append(self._decode_string(pickle.codecs.escape_decode(data)[0])) + dispatch[pickle.STRING[0]] = load_string + + def load_binstring(self): + # Deprecated BINSTRING uses signed 32-bit length + len, = pickle.struct.unpack('' % ( + self.__class__.__name__, + repr(self._orig_path), + self._evaluator.environment, + ) + + def completions(self): + """ + Return :class:`classes.Completion` objects. Those objects contain + information about the completions, more than just names. + + :return: Completion objects, sorted by name and __ comes last. + :rtype: list of :class:`classes.Completion` + """ + with debug.increase_indent_cm('completions'): + completion = Completion( + self._evaluator, self._get_module(), self._code_lines, + self._pos, self.call_signatures + ) + return completion.completions() + + def goto_definitions(self, **kwargs): + """ + Return the definitions of a the path under the cursor. goto function! + This follows complicated paths and returns the end, not the first + definition. The big difference between :meth:`goto_assignments` and + :meth:`goto_definitions` is that :meth:`goto_assignments` doesn't + follow imports and statements. Multiple objects may be returned, + because Python itself is a dynamic language, which means depending on + an option you can have two different versions of a function. + + :param only_stubs: Only return stubs for this goto call. + :param prefer_stubs: Prefer stubs to Python objects for this type + inference call. + :rtype: list of :class:`classes.Definition` + """ + with debug.increase_indent_cm('goto_definitions'): + return self._goto_definitions(**kwargs) + + def _goto_definitions(self, only_stubs=False, prefer_stubs=False): + leaf = self._module_node.get_name_of_position(self._pos) + if leaf is None: + leaf = self._module_node.get_leaf_for_position(self._pos) + if leaf is None: + return [] + + context = self._evaluator.create_context(self._get_module(), leaf) + + contexts = helpers.evaluate_goto_definition(self._evaluator, context, leaf) + contexts = convert_contexts( + contexts, + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + + defs = [classes.Definition(self._evaluator, c.name) for c in contexts] + # The additional set here allows the definitions to become unique in an + # API sense. In the internals we want to separate more things than in + # the API. + return helpers.sorted_definitions(set(defs)) + + def goto_assignments(self, follow_imports=False, follow_builtin_imports=False, **kwargs): + """ + Return the first definition found, while optionally following imports. + Multiple objects may be returned, because Python itself is a + dynamic language, which means depending on an option you can have two + different versions of a function. + + .. note:: It is deprecated to use follow_imports and follow_builtin_imports as + positional arguments. Will be a keyword argument in 0.16.0. + + :param follow_imports: The goto call will follow imports. + :param follow_builtin_imports: If follow_imports is True will decide if + it follow builtin imports. + :param only_stubs: Only return stubs for this goto call. + :param prefer_stubs: Prefer stubs to Python objects for this goto call. + :rtype: list of :class:`classes.Definition` + """ + with debug.increase_indent_cm('goto_assignments'): + return self._goto_assignments(follow_imports, follow_builtin_imports, **kwargs) + + def _goto_assignments(self, follow_imports, follow_builtin_imports, + only_stubs=False, prefer_stubs=False): + def filter_follow_imports(names, check): + for name in names: + if check(name): + new_names = list(filter_follow_imports(name.goto(), check)) + found_builtin = False + if follow_builtin_imports: + for new_name in new_names: + if new_name.start_pos is None: + found_builtin = True + + if found_builtin: + yield name + else: + for new_name in new_names: + yield new_name + else: + yield name + + tree_name = self._module_node.get_name_of_position(self._pos) + if tree_name is None: + # Without a name we really just want to jump to the result e.g. + # executed by `foo()`, if we the cursor is after `)`. + return self.goto_definitions(only_stubs=only_stubs, prefer_stubs=prefer_stubs) + context = self._evaluator.create_context(self._get_module(), tree_name) + names = list(self._evaluator.goto(context, tree_name)) + + if follow_imports: + names = filter_follow_imports(names, lambda name: name.is_import()) + names = convert_names( + names, + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + + defs = [classes.Definition(self._evaluator, d) for d in set(names)] + return helpers.sorted_definitions(defs) + + def usages(self, additional_module_paths=(), **kwargs): + """ + Return :class:`classes.Definition` objects, which contain all + names that point to the definition of the name under the cursor. This + is very useful for refactoring (renaming), or to show all usages of a + variable. + + .. todo:: Implement additional_module_paths + + :param additional_module_paths: Deprecated, never ever worked. + :param include_builtins: Default True, checks if a usage is a builtin + (e.g. ``sys``) and in that case does not return it. + :rtype: list of :class:`classes.Definition` + """ + if additional_module_paths: + warnings.warn( + "Deprecated since version 0.12.0. This never even worked, just ignore it.", + DeprecationWarning, + stacklevel=2 + ) + + def _usages(include_builtins=True): + tree_name = self._module_node.get_name_of_position(self._pos) + if tree_name is None: + # Must be syntax + return [] + + names = usages.usages(self._get_module(), tree_name) + + definitions = [classes.Definition(self._evaluator, n) for n in names] + if not include_builtins: + definitions = [d for d in definitions if not d.in_builtin_module()] + return helpers.sorted_definitions(definitions) + return _usages(**kwargs) + + def call_signatures(self): + """ + Return the function object of the call you're currently in. + + E.g. if the cursor is here:: + + abs(# <-- cursor is here + + This would return the ``abs`` function. On the other hand:: + + abs()# <-- cursor is here + + This would return an empty list.. + + :rtype: list of :class:`classes.CallSignature` + """ + call_details = helpers.get_call_signature_details(self._module_node, self._pos) + if call_details is None: + return [] + + context = self._evaluator.create_context( + self._get_module(), + call_details.bracket_leaf + ) + definitions = helpers.cache_call_signatures( + self._evaluator, + context, + call_details.bracket_leaf, + self._code_lines, + self._pos + ) + debug.speed('func_call followed') + + # TODO here we use stubs instead of the actual contexts. We should use + # the signatures from stubs, but the actual contexts, probably?! + return [classes.CallSignature(self._evaluator, signature, call_details) + for signature in definitions.get_signatures()] + + def _analysis(self): + self._evaluator.is_analysis = True + self._evaluator.analysis_modules = [self._module_node] + module = self._get_module() + try: + for node in get_executable_nodes(self._module_node): + context = module.create_context(node) + if node.type in ('funcdef', 'classdef'): + # Resolve the decorators. + tree_name_to_contexts(self._evaluator, context, node.children[1]) + elif isinstance(node, tree.Import): + import_names = set(node.get_defined_names()) + if node.is_nested(): + import_names |= set(path[-1] for path in node.get_paths()) + for n in import_names: + imports.infer_import(context, n) + elif node.type == 'expr_stmt': + types = context.eval_node(node) + for testlist in node.children[:-1:2]: + # Iterate tuples. + unpack_tuple_to_dict(context, types, testlist) + else: + if node.type == 'name': + defs = self._evaluator.goto_definitions(context, node) + else: + defs = evaluate_call_of_leaf(context, node) + try_iter_content(defs) + self._evaluator.reset_recursion_limitations() + + ana = [a for a in self._evaluator.analysis if self.path == a.path] + return sorted(set(ana), key=lambda x: x.line) + finally: + self._evaluator.is_analysis = False + + +class Interpreter(Script): + """ + Jedi API for Python REPLs. + + In addition to completion of simple attribute access, Jedi + supports code completion based on static code analysis. + Jedi can complete attributes of object which is not initialized + yet. + + >>> from os.path import join + >>> namespace = locals() + >>> script = Interpreter('join("").up', [namespace]) + >>> print(script.completions()[0].name) + upper + """ + _allow_descriptor_getattr_default = True + + def __init__(self, source, namespaces, **kwds): + """ + Parse `source` and mixin interpreted Python objects from `namespaces`. + + :type source: str + :arg source: Code to parse. + :type namespaces: list of dict + :arg namespaces: a list of namespace dictionaries such as the one + returned by :func:`locals`. + + Other optional arguments are same as the ones for :class:`Script`. + If `line` and `column` are None, they are assumed be at the end of + `source`. + """ + try: + namespaces = [dict(n) for n in namespaces] + except Exception: + raise TypeError("namespaces must be a non-empty list of dicts.") + + environment = kwds.get('environment', None) + if environment is None: + environment = InterpreterEnvironment() + else: + if not isinstance(environment, InterpreterEnvironment): + raise TypeError("The environment needs to be an InterpreterEnvironment subclass.") + + super(Interpreter, self).__init__(source, environment=environment, + _project=Project(os.getcwd()), **kwds) + self.namespaces = namespaces + self._evaluator.allow_descriptor_getattr = self._allow_descriptor_getattr_default + + def _get_module(self): + return interpreter.MixedModuleContext( + self._evaluator, + self._module_node, + self.namespaces, + file_io=KnownContentFileIO(self.path, self._code), + code_lines=self._code_lines, + ) + + +def names(source=None, path=None, encoding='utf-8', all_scopes=False, + definitions=True, references=False, environment=None): + """ + Returns a list of `Definition` objects, containing name parts. + This means you can call ``Definition.goto_assignments()`` and get the + reference of a name. + The parameters are the same as in :py:class:`Script`, except or the + following ones: + + :param all_scopes: If True lists the names of all scopes instead of only + the module namespace. + :param definitions: If True lists the names that have been defined by a + class, function or a statement (``a = b`` returns ``a``). + :param references: If True lists all the names that are not listed by + ``definitions=True``. E.g. ``a = b`` returns ``b``. + """ + def def_ref_filter(_def): + is_def = _def._name.tree_name.is_definition() + return definitions and is_def or references and not is_def + + def create_name(name): + if name.parent.type == 'param': + cls = ParamName + else: + cls = TreeNameDefinition + return cls( + module_context.create_context(name), + name + ) + + # Set line/column to a random position, because they don't matter. + script = Script(source, line=1, column=0, path=path, encoding=encoding, environment=environment) + module_context = script._get_module() + defs = [ + classes.Definition( + script._evaluator, + create_name(name) + ) for name in get_module_names(script._module_node, all_scopes) + ] + return sorted(filter(def_ref_filter, defs), key=lambda x: (x.line, x.column)) + + +def preload_module(*modules): + """ + Preloading modules tells Jedi to load a module now, instead of lazy parsing + of modules. Usful for IDEs, to control which modules to load on startup. + + :param modules: different module names, list of string. + """ + for m in modules: + s = "import %s as x; x." % m + Script(s, 1, len(s), None).completions() + + +def set_debug_function(func_cb=debug.print_to_stdout, warnings=True, + notices=True, speed=True): + """ + Define a callback debug function to get all the debug messages. + + If you don't specify any arguments, debug messages will be printed to stdout. + + :param func_cb: The callback function for debug messages, with n params. + """ + debug.debug_function = func_cb + debug.enable_warning = warnings + debug.enable_notice = notices + debug.enable_speed = speed diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/classes.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/classes.py new file mode 100644 index 0000000..c393ca6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/classes.py @@ -0,0 +1,768 @@ +""" +The :mod:`jedi.api.classes` module contains the return classes of the API. +These classes are the much bigger part of the whole API, because they contain +the interesting information about completion and goto operations. +""" +import re +import sys +import warnings + +from jedi import settings +from jedi import debug +from jedi.evaluate.utils import unite +from jedi.cache import memoize_method +from jedi.evaluate import imports +from jedi.evaluate import compiled +from jedi.evaluate.imports import ImportName +from jedi.evaluate.context import FunctionExecutionContext +from jedi.evaluate.gradual.typeshed import StubModuleContext +from jedi.evaluate.gradual.conversion import convert_names, convert_contexts +from jedi.evaluate.base_context import ContextSet +from jedi.api.keywords import KeywordName + + +def _sort_names_by_start_pos(names): + return sorted(names, key=lambda s: s.start_pos or (0, 0)) + + +def defined_names(evaluator, context): + """ + List sub-definitions (e.g., methods in class). + + :type scope: Scope + :rtype: list of Definition + """ + filter = next(context.get_filters(search_global=True)) + names = [name for name in filter.values()] + return [Definition(evaluator, n) for n in _sort_names_by_start_pos(names)] + + +def _contexts_to_definitions(contexts): + return [Definition(c.evaluator, c.name) for c in contexts] + + +class BaseDefinition(object): + _mapping = { + 'posixpath': 'os.path', + 'riscospath': 'os.path', + 'ntpath': 'os.path', + 'os2emxpath': 'os.path', + 'macpath': 'os.path', + 'genericpath': 'os.path', + 'posix': 'os', + '_io': 'io', + '_functools': 'functools', + '_collections': 'collections', + '_socket': 'socket', + '_sqlite3': 'sqlite3', + '__builtin__': 'builtins', + } + + _tuple_mapping = dict((tuple(k.split('.')), v) for (k, v) in { + 'argparse._ActionsContainer': 'argparse.ArgumentParser', + }.items()) + + def __init__(self, evaluator, name): + self._evaluator = evaluator + self._name = name + """ + An instance of :class:`parso.python.tree.Name` subclass. + """ + self.is_keyword = isinstance(self._name, KeywordName) + + @memoize_method + def _get_module(self): + # This can take a while to complete, because in the worst case of + # imports (consider `import a` completions), we need to load all + # modules starting with a first. + return self._name.get_root_context() + + @property + def module_path(self): + """Shows the file path of a module. e.g. ``/usr/lib/python2.7/os.py``""" + module = self._get_module() + if module.is_stub() or not module.is_compiled(): + # Compiled modules should not return a module path even if they + # have one. + return self._get_module().py__file__() + + return None + + @property + def name(self): + """ + Name of variable/function/class/module. + + For example, for ``x = None`` it returns ``'x'``. + + :rtype: str or None + """ + return self._name.string_name + + @property + def type(self): + """ + The type of the definition. + + Here is an example of the value of this attribute. Let's consider + the following source. As what is in ``variable`` is unambiguous + to Jedi, :meth:`jedi.Script.goto_definitions` should return a list of + definition for ``sys``, ``f``, ``C`` and ``x``. + + >>> from jedi._compatibility import no_unicode_pprint + >>> from jedi import Script + >>> source = ''' + ... import keyword + ... + ... class C: + ... pass + ... + ... class D: + ... pass + ... + ... x = D() + ... + ... def f(): + ... pass + ... + ... for variable in [keyword, f, C, x]: + ... variable''' + + >>> script = Script(source) + >>> defs = script.goto_definitions() + + Before showing what is in ``defs``, let's sort it by :attr:`line` + so that it is easy to relate the result to the source code. + + >>> defs = sorted(defs, key=lambda d: d.line) + >>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE + [, + , + , + ] + + Finally, here is what you can get from :attr:`type`: + + >>> defs = [str(d.type) for d in defs] # It's unicode and in Py2 has u before it. + >>> defs[0] + 'module' + >>> defs[1] + 'class' + >>> defs[2] + 'instance' + >>> defs[3] + 'function' + + Valid values for are ``module``, ``class``, ``instance``, ``function``, + ``param``, ``path`` and ``keyword``. + + """ + tree_name = self._name.tree_name + resolve = False + if tree_name is not None: + # TODO move this to their respective names. + definition = tree_name.get_definition() + if definition is not None and definition.type == 'import_from' and \ + tree_name.is_definition(): + resolve = True + + if isinstance(self._name, imports.SubModuleName) or resolve: + for context in self._name.infer(): + return context.api_type + return self._name.api_type + + @property + def module_name(self): + """ + The module name. + + >>> from jedi import Script + >>> source = 'import json' + >>> script = Script(source, path='example.py') + >>> d = script.goto_definitions()[0] + >>> print(d.module_name) # doctest: +ELLIPSIS + json + """ + return self._get_module().name.string_name + + def in_builtin_module(self): + """Whether this is a builtin module.""" + if isinstance(self._get_module(), StubModuleContext): + return any(isinstance(context, compiled.CompiledObject) + for context in self._get_module().non_stub_context_set) + return isinstance(self._get_module(), compiled.CompiledObject) + + @property + def line(self): + """The line where the definition occurs (starting with 1).""" + start_pos = self._name.start_pos + if start_pos is None: + return None + return start_pos[0] + + @property + def column(self): + """The column where the definition occurs (starting with 0).""" + start_pos = self._name.start_pos + if start_pos is None: + return None + return start_pos[1] + + def docstring(self, raw=False, fast=True): + r""" + Return a document string for this completion object. + + Example: + + >>> from jedi import Script + >>> source = '''\ + ... def f(a, b=1): + ... "Document for function f." + ... ''' + >>> script = Script(source, 1, len('def f'), 'example.py') + >>> doc = script.goto_definitions()[0].docstring() + >>> print(doc) + f(a, b=1) + + Document for function f. + + Notice that useful extra information is added to the actual + docstring. For function, it is call signature. If you need + actual docstring, use ``raw=True`` instead. + + >>> print(script.goto_definitions()[0].docstring(raw=True)) + Document for function f. + + :param fast: Don't follow imports that are only one level deep like + ``import foo``, but follow ``from foo import bar``. This makes + sense for speed reasons. Completing `import a` is slow if you use + the ``foo.docstring(fast=False)`` on every object, because it + parses all libraries starting with ``a``. + """ + return _Help(self._name).docstring(fast=fast, raw=raw) + + @property + def description(self): + """A textual description of the object.""" + return self._name.string_name + + @property + def full_name(self): + """ + Dot-separated path of this object. + + It is in the form of ``[.[...]][.]``. + It is useful when you want to look up Python manual of the + object at hand. + + Example: + + >>> from jedi import Script + >>> source = ''' + ... import os + ... os.path.join''' + >>> script = Script(source, 3, len('os.path.join'), 'example.py') + >>> print(script.goto_definitions()[0].full_name) + os.path.join + + Notice that it returns ``'os.path.join'`` instead of (for example) + ``'posixpath.join'``. This is not correct, since the modules name would + be `````. However most users find the latter + more practical. + """ + if not self._name.is_context_name: + return None + + names = self._name.get_qualified_names(include_module_names=True) + if names is None: + return names + + names = list(names) + try: + names[0] = self._mapping[names[0]] + except KeyError: + pass + + return '.'.join(names) + + def is_stub(self): + if not self._name.is_context_name: + return False + + return self._name.get_root_context().is_stub() + + def goto_assignments(self, **kwargs): # Python 2... + with debug.increase_indent_cm('goto for %s' % self._name): + return self._goto_assignments(**kwargs) + + def _goto_assignments(self, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + + if not self._name.is_context_name: + return [] + + names = convert_names( + self._name.goto(), + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + return [self if n == self._name else Definition(self._evaluator, n) + for n in names] + + def infer(self, **kwargs): # Python 2... + with debug.increase_indent_cm('infer for %s' % self._name): + return self._infer(**kwargs) + + def _infer(self, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + + if not self._name.is_context_name: + return [] + + # First we need to make sure that we have stub names (if possible) that + # we can follow. If we don't do that, we can end up with the inferred + # results of Python objects instead of stubs. + names = convert_names([self._name], prefer_stubs=True) + contexts = convert_contexts( + ContextSet.from_sets(n.infer() for n in names), + only_stubs=only_stubs, + prefer_stubs=prefer_stubs, + ) + resulting_names = [c.name for c in contexts] + return [self if n == self._name else Definition(self._evaluator, n) + for n in resulting_names] + + @property + @memoize_method + def params(self): + """ + Deprecated! Will raise a warning soon. Use get_signatures()[...].params. + + Raises an ``AttributeError`` if the definition is not callable. + Otherwise returns a list of `Definition` that represents the params. + """ + # Only return the first one. There might be multiple one, especially + # with overloading. + for context in self._name.infer(): + for signature in context.get_signatures(): + return [ + Definition(self._evaluator, n) + for n in signature.get_param_names(resolve_stars=True) + ] + + if self.type == 'function' or self.type == 'class': + # Fallback, if no signatures were defined (which is probably by + # itself a bug). + return [] + raise AttributeError('There are no params defined on this.') + + def parent(self): + if not self._name.is_context_name: + return None + + context = self._name.parent_context + if context is None: + return None + + if isinstance(context, FunctionExecutionContext): + context = context.function_context + return Definition(self._evaluator, context.name) + + def __repr__(self): + return "<%s %sname=%r, description=%r>" % ( + self.__class__.__name__, + 'full_' if self.full_name else '', + self.full_name or self.name, + self.description, + ) + + def get_line_code(self, before=0, after=0): + """ + Returns the line of code where this object was defined. + + :param before: Add n lines before the current line to the output. + :param after: Add n lines after the current line to the output. + + :return str: Returns the line(s) of code or an empty string if it's a + builtin. + """ + if not self._name.is_context_name or self.in_builtin_module(): + return '' + + lines = self._name.get_root_context().code_lines + + index = self._name.start_pos[0] - 1 + start_index = max(index - before, 0) + return ''.join(lines[start_index:index + after + 1]) + + def get_signatures(self): + return [Signature(self._evaluator, s) for s in self._name.infer().get_signatures()] + + def execute(self): + return _contexts_to_definitions(self._name.infer().execute_evaluated()) + + +class Completion(BaseDefinition): + """ + `Completion` objects are returned from :meth:`api.Script.completions`. They + provide additional information about a completion. + """ + def __init__(self, evaluator, name, stack, like_name_length): + super(Completion, self).__init__(evaluator, name) + + self._like_name_length = like_name_length + self._stack = stack + + # Completion objects with the same Completion name (which means + # duplicate items in the completion) + self._same_name_completions = [] + + def _complete(self, like_name): + append = '' + if settings.add_bracket_after_function \ + and self.type == 'function': + append = '(' + + if self._name.api_type == 'param' and self._stack is not None: + nonterminals = [stack_node.nonterminal for stack_node in self._stack] + if 'trailer' in nonterminals and 'argument' not in nonterminals: + # TODO this doesn't work for nested calls. + append += '=' + + name = self._name.string_name + if like_name: + name = name[self._like_name_length:] + return name + append + + @property + def complete(self): + """ + Return the rest of the word, e.g. completing ``isinstance``:: + + isinstan# <-- Cursor is here + + would return the string 'ce'. It also adds additional stuff, depending + on your `settings.py`. + + Assuming the following function definition:: + + def foo(param=0): + pass + + completing ``foo(par`` would give a ``Completion`` which `complete` + would be `am=` + + + """ + return self._complete(True) + + @property + def name_with_symbols(self): + """ + Similar to :attr:`name`, but like :attr:`name` returns also the + symbols, for example assuming the following function definition:: + + def foo(param=0): + pass + + completing ``foo(`` would give a ``Completion`` which + ``name_with_symbols`` would be "param=". + + """ + return self._complete(False) + + def docstring(self, raw=False, fast=True): + if self._like_name_length >= 3: + # In this case we can just resolve the like name, because we + # wouldn't load like > 100 Python modules anymore. + fast = False + return super(Completion, self).docstring(raw=raw, fast=fast) + + @property + def description(self): + """Provide a description of the completion object.""" + # TODO improve the class structure. + return Definition.description.__get__(self) + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self._name.string_name) + + @memoize_method + def follow_definition(self): + """ + Deprecated! + + Return the original definitions. I strongly recommend not using it for + your completions, because it might slow down |jedi|. If you want to + read only a few objects (<=20), it might be useful, especially to get + the original docstrings. The basic problem of this function is that it + follows all results. This means with 1000 completions (e.g. numpy), + it's just PITA-slow. + """ + warnings.warn( + "Deprecated since version 0.14.0. Use .infer.", + DeprecationWarning, + stacklevel=2 + ) + return self.infer() + + +class Definition(BaseDefinition): + """ + *Definition* objects are returned from :meth:`api.Script.goto_assignments` + or :meth:`api.Script.goto_definitions`. + """ + def __init__(self, evaluator, definition): + super(Definition, self).__init__(evaluator, definition) + + @property + def description(self): + """ + A description of the :class:`.Definition` object, which is heavily used + in testing. e.g. for ``isinstance`` it returns ``def isinstance``. + + Example: + + >>> from jedi._compatibility import no_unicode_pprint + >>> from jedi import Script + >>> source = ''' + ... def f(): + ... pass + ... + ... class C: + ... pass + ... + ... variable = f if random.choice([0,1]) else C''' + >>> script = Script(source, column=3) # line is maximum by default + >>> defs = script.goto_definitions() + >>> defs = sorted(defs, key=lambda d: d.line) + >>> no_unicode_pprint(defs) # doctest: +NORMALIZE_WHITESPACE + [, + ] + >>> str(defs[0].description) # strip literals in python2 + 'def f' + >>> str(defs[1].description) + 'class C' + + """ + typ = self.type + tree_name = self._name.tree_name + if typ == 'param': + return typ + ' ' + self._name.to_string() + if typ in ('function', 'class', 'module', 'instance') or tree_name is None: + if typ == 'function': + # For the description we want a short and a pythonic way. + typ = 'def' + return typ + ' ' + self._name.string_name + + definition = tree_name.get_definition() or tree_name + # Remove the prefix, because that's not what we want for get_code + # here. + txt = definition.get_code(include_prefix=False) + # Delete comments: + txt = re.sub(r'#[^\n]+\n', ' ', txt) + # Delete multi spaces/newlines + txt = re.sub(r'\s+', ' ', txt).strip() + return txt + + @property + def desc_with_module(self): + """ + In addition to the definition, also return the module. + + .. warning:: Don't use this function yet, its behaviour may change. If + you really need it, talk to me. + + .. todo:: Add full path. This function is should return a + `module.class.function` path. + """ + position = '' if self.in_builtin_module else '@%s' % self.line + return "%s:%s%s" % (self.module_name, self.description, position) + + @memoize_method + def defined_names(self): + """ + List sub-definitions (e.g., methods in class). + + :rtype: list of Definition + """ + defs = self._name.infer() + return sorted( + unite(defined_names(self._evaluator, d) for d in defs), + key=lambda s: s._name.start_pos or (0, 0) + ) + + def is_definition(self): + """ + Returns True, if defined as a name in a statement, function or class. + Returns False, if it's a reference to such a definition. + """ + if self._name.tree_name is None: + return True + else: + return self._name.tree_name.is_definition() + + def __eq__(self, other): + return self._name.start_pos == other._name.start_pos \ + and self.module_path == other.module_path \ + and self.name == other.name \ + and self._evaluator == other._evaluator + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self._name.start_pos, self.module_path, self.name, self._evaluator)) + + +class Signature(Definition): + """ + `Signature` objects is the return value of `Script.function_definition`. + It knows what functions you are currently in. e.g. `isinstance(` would + return the `isinstance` function. without `(` it would return nothing. + """ + def __init__(self, evaluator, signature): + super(Signature, self).__init__(evaluator, signature.name) + self._signature = signature + + @property + def params(self): + """ + :return list of ParamDefinition: + """ + return [ParamDefinition(self._evaluator, n) + for n in self._signature.get_param_names(resolve_stars=True)] + + def to_string(self): + return self._signature.to_string() + + +class CallSignature(Signature): + """ + `CallSignature` objects is the return value of `Script.call_signatures`. + It knows what functions you are currently in. e.g. `isinstance(` would + return the `isinstance` function with its params. Without `(` it would + return nothing. + """ + def __init__(self, evaluator, signature, call_details): + super(CallSignature, self).__init__(evaluator, signature) + self._call_details = call_details + self._signature = signature + + @property + def index(self): + """ + The Param index of the current call. + Returns None if the index cannot be found in the curent call. + """ + return self._call_details.calculate_index( + self._signature.get_param_names(resolve_stars=True) + ) + + @property + def bracket_start(self): + """ + The line/column of the bracket that is responsible for the last + function call. + """ + return self._call_details.bracket_leaf.start_pos + + def __repr__(self): + return '<%s: index=%r %s>' % ( + type(self).__name__, + self.index, + self._signature.to_string(), + ) + + +class ParamDefinition(Definition): + def infer_default(self): + """ + :return list of Definition: + """ + return _contexts_to_definitions(self._name.infer_default()) + + def infer_annotation(self, **kwargs): + """ + :return list of Definition: + + :param execute_annotation: If False, the values are not executed and + you get classes instead of instances. + """ + return _contexts_to_definitions(self._name.infer_annotation(**kwargs)) + + def to_string(self): + return self._name.to_string() + + @property + def kind(self): + """ + Returns an enum instance. Returns the same values as the builtin + :py:attr:`inspect.Parameter.kind`. + + No support for Python < 3.4 anymore. + """ + if sys.version_info < (3, 5): + raise NotImplementedError( + 'Python 2 is end-of-life, the new feature is not available for it' + ) + return self._name.get_kind() + + +def _format_signatures(context): + return '\n'.join( + signature.to_string() + for signature in context.get_signatures() + ) + + +class _Help(object): + """ + Temporary implementation, will be used as `Script.help() or something in + the future. + """ + def __init__(self, definition): + self._name = definition + + @memoize_method + def _get_contexts(self, fast): + if isinstance(self._name, ImportName) and fast: + return {} + + if self._name.api_type == 'statement': + return {} + + return self._name.infer() + + def docstring(self, fast=True, raw=True): + """ + The docstring ``__doc__`` for any object. + + See :attr:`doc` for example. + """ + full_doc = '' + # Using the first docstring that we see. + for context in self._get_contexts(fast=fast): + if full_doc: + # In case we have multiple contexts, just return all of them + # separated by a few dashes. + full_doc += '\n' + '-' * 30 + '\n' + + doc = context.py__doc__() + + signature_text = '' + if self._name.is_context_name: + if not raw: + signature_text = _format_signatures(context) + if not doc and context.is_stub(): + for c in convert_contexts(ContextSet({context}), ignore_compiled=False): + doc = c.py__doc__() + if doc: + break + + if signature_text and doc: + full_doc += signature_text + '\n\n' + doc + else: + full_doc += signature_text + doc + + return full_doc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/completion.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/completion.py new file mode 100644 index 0000000..aa5be0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/completion.py @@ -0,0 +1,326 @@ +import re + +from parso.python.token import PythonTokenTypes +from parso.python import tree +from parso.tree import search_ancestor, Leaf + +from jedi._compatibility import Parameter +from jedi import debug +from jedi import settings +from jedi.api import classes +from jedi.api import helpers +from jedi.api import keywords +from jedi.api.file_name import file_name_completions +from jedi.evaluate import imports +from jedi.evaluate.helpers import evaluate_call_of_leaf, parse_dotted_names +from jedi.evaluate.filters import get_global_filters +from jedi.evaluate.gradual.conversion import convert_contexts +from jedi.parser_utils import get_statement_of_position, cut_value_at_position + + +def get_call_signature_param_names(call_signatures): + # add named params + for call_sig in call_signatures: + for p in call_sig.params: + # Allow protected access, because it's a public API. + if p._name.get_kind() in (Parameter.POSITIONAL_OR_KEYWORD, + Parameter.KEYWORD_ONLY): + yield p._name + + +def filter_names(evaluator, completion_names, stack, like_name): + comp_dct = {} + if settings.case_insensitive_completion: + like_name = like_name.lower() + for name in completion_names: + string = name.string_name + if settings.case_insensitive_completion: + string = string.lower() + + if string.startswith(like_name): + new = classes.Completion( + evaluator, + name, + stack, + len(like_name) + ) + k = (new.name, new.complete) # key + if k in comp_dct and settings.no_completion_duplicates: + comp_dct[k]._same_name_completions.append(new) + else: + comp_dct[k] = new + yield new + + +def get_user_scope(module_context, position): + """ + Returns the scope in which the user resides. This includes flows. + """ + user_stmt = get_statement_of_position(module_context.tree_node, position) + if user_stmt is None: + def scan(scope): + for s in scope.children: + if s.start_pos <= position <= s.end_pos: + if isinstance(s, (tree.Scope, tree.Flow)) \ + or s.type in ('async_stmt', 'async_funcdef'): + return scan(s) or s + elif s.type in ('suite', 'decorated'): + return scan(s) + return None + + scanned_node = scan(module_context.tree_node) + if scanned_node: + return module_context.create_context(scanned_node, node_is_context=True) + return module_context + else: + return module_context.create_context(user_stmt) + + +def get_flow_scope_node(module_node, position): + node = module_node.get_leaf_for_position(position, include_prefixes=True) + while not isinstance(node, (tree.Scope, tree.Flow)): + node = node.parent + + return node + + +class Completion: + def __init__(self, evaluator, module, code_lines, position, call_signatures_callback): + self._evaluator = evaluator + self._module_context = module + self._module_node = module.tree_node + self._code_lines = code_lines + + # The first step of completions is to get the name + self._like_name = helpers.get_on_completion_name(self._module_node, code_lines, position) + # The actual cursor position is not what we need to calculate + # everything. We want the start of the name we're on. + self._original_position = position + self._position = position[0], position[1] - len(self._like_name) + self._call_signatures_callback = call_signatures_callback + + def completions(self): + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + string, start_leaf = _extract_string_while_in_string(leaf, self._position) + if string is not None: + completions = list(file_name_completions( + self._evaluator, self._module_context, start_leaf, string, + self._like_name, self._call_signatures_callback, + self._code_lines, self._original_position + )) + if completions: + return completions + + completion_names = self._get_context_completions(leaf) + + completions = filter_names(self._evaluator, completion_names, + self.stack, self._like_name) + + return sorted(completions, key=lambda x: (x.name.startswith('__'), + x.name.startswith('_'), + x.name.lower())) + + def _get_context_completions(self, leaf): + """ + Analyzes the context that a completion is made in and decides what to + return. + + Technically this works by generating a parser stack and analysing the + current stack for possible grammar nodes. + + Possible enhancements: + - global/nonlocal search global + - yield from / raise from <- could be only exceptions/generators + - In args: */**: no completion + - In params (also lambda): no completion before = + """ + + grammar = self._evaluator.grammar + self.stack = stack = None + + try: + self.stack = stack = helpers.get_stack_at_position( + grammar, self._code_lines, leaf, self._position + ) + except helpers.OnErrorLeaf as e: + value = e.error_leaf.value + if value == '.': + # After ErrorLeaf's that are dots, we will not do any + # completions since this probably just confuses the user. + return [] + + # If we don't have a context, just use global completion. + return self._global_completions() + + allowed_transitions = \ + list(stack._allowed_transition_names_and_token_types()) + + if 'if' in allowed_transitions: + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + previous_leaf = leaf.get_previous_leaf() + + indent = self._position[1] + if not (leaf.start_pos <= self._position <= leaf.end_pos): + indent = leaf.start_pos[1] + + if previous_leaf is not None: + stmt = previous_leaf + while True: + stmt = search_ancestor( + stmt, 'if_stmt', 'for_stmt', 'while_stmt', 'try_stmt', + 'error_node', + ) + if stmt is None: + break + + type_ = stmt.type + if type_ == 'error_node': + first = stmt.children[0] + if isinstance(first, Leaf): + type_ = first.value + '_stmt' + # Compare indents + if stmt.start_pos[1] == indent: + if type_ == 'if_stmt': + allowed_transitions += ['elif', 'else'] + elif type_ == 'try_stmt': + allowed_transitions += ['except', 'finally', 'else'] + elif type_ == 'for_stmt': + allowed_transitions.append('else') + + completion_names = [] + current_line = self._code_lines[self._position[0] - 1][:self._position[1]] + if not current_line or current_line[-1] in ' \t.;': + completion_names += self._get_keyword_completion_names(allowed_transitions) + + if any(t in allowed_transitions for t in (PythonTokenTypes.NAME, + PythonTokenTypes.INDENT)): + # This means that we actually have to do type inference. + + nonterminals = [stack_node.nonterminal for stack_node in stack] + + nodes = [] + for stack_node in stack: + if stack_node.dfa.from_rule == 'small_stmt': + nodes = [] + else: + nodes += stack_node.nodes + + if nodes and nodes[-1] in ('as', 'def', 'class'): + # No completions for ``with x as foo`` and ``import x as foo``. + # Also true for defining names as a class or function. + return list(self._get_class_context_completions(is_function=True)) + elif "import_stmt" in nonterminals: + level, names = parse_dotted_names(nodes, "import_from" in nonterminals) + + only_modules = not ("import_from" in nonterminals and 'import' in nodes) + completion_names += self._get_importer_names( + names, + level, + only_modules=only_modules, + ) + elif nonterminals[-1] in ('trailer', 'dotted_name') and nodes[-1] == '.': + dot = self._module_node.get_leaf_for_position(self._position) + completion_names += self._trailer_completions(dot.get_previous_leaf()) + else: + completion_names += self._global_completions() + completion_names += self._get_class_context_completions(is_function=False) + + if 'trailer' in nonterminals: + call_signatures = self._call_signatures_callback() + completion_names += get_call_signature_param_names(call_signatures) + + return completion_names + + def _get_keyword_completion_names(self, allowed_transitions): + for k in allowed_transitions: + if isinstance(k, str) and k.isalpha(): + yield keywords.KeywordName(self._evaluator, k) + + def _global_completions(self): + context = get_user_scope(self._module_context, self._position) + debug.dbg('global completion scope: %s', context) + flow_scope_node = get_flow_scope_node(self._module_node, self._position) + filters = get_global_filters( + self._evaluator, + context, + self._position, + origin_scope=flow_scope_node + ) + completion_names = [] + for filter in filters: + completion_names += filter.values() + return completion_names + + def _trailer_completions(self, previous_leaf): + user_context = get_user_scope(self._module_context, self._position) + evaluation_context = self._evaluator.create_context( + self._module_context, previous_leaf + ) + contexts = evaluate_call_of_leaf(evaluation_context, previous_leaf) + completion_names = [] + debug.dbg('trailer completion contexts: %s', contexts, color='MAGENTA') + for context in contexts: + for filter in context.get_filters( + search_global=False, + origin_scope=user_context.tree_node): + completion_names += filter.values() + + python_contexts = convert_contexts(contexts) + for c in python_contexts: + if c not in contexts: + for filter in c.get_filters( + search_global=False, + origin_scope=user_context.tree_node): + completion_names += filter.values() + return completion_names + + def _get_importer_names(self, names, level=0, only_modules=True): + names = [n.value for n in names] + i = imports.Importer(self._evaluator, names, self._module_context, level) + return i.completion_names(self._evaluator, only_modules=only_modules) + + def _get_class_context_completions(self, is_function=True): + """ + Autocomplete inherited methods when overriding in child class. + """ + leaf = self._module_node.get_leaf_for_position(self._position, include_prefixes=True) + cls = tree.search_ancestor(leaf, 'classdef') + if isinstance(cls, (tree.Class, tree.Function)): + # Complete the methods that are defined in the super classes. + random_context = self._module_context.create_context( + cls, + node_is_context=True + ) + else: + return + + if cls.start_pos[1] >= leaf.start_pos[1]: + return + + filters = random_context.get_filters(search_global=False, is_instance=True) + # The first dict is the dictionary of class itself. + next(filters) + for filter in filters: + for name in filter.values(): + # TODO we should probably check here for properties + if (name.api_type == 'function') == is_function: + yield name + + +def _extract_string_while_in_string(leaf, position): + if leaf.type == 'string': + match = re.match(r'^\w*(\'{3}|"{3}|\'|")', leaf.value) + quote = match.group(1) + if leaf.line == position[0] and position[1] < leaf.column + match.end(): + return None, None + if leaf.end_pos[0] == position[0] and position[1] > leaf.end_pos[1] - len(quote): + return None, None + return cut_value_at_position(leaf, position)[match.end():], leaf + + leaves = [] + while leaf is not None and leaf.line == position[0]: + if leaf.type == 'error_leaf' and ('"' in leaf.value or "'" in leaf.value): + return ''.join(l.get_code() for l in leaves), leaf + leaves.insert(0, leaf) + leaf = leaf.get_previous_leaf() + return None, None diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/environment.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/environment.py new file mode 100644 index 0000000..e57f548 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/environment.py @@ -0,0 +1,458 @@ +""" +Environments are a way to activate different Python versions or Virtualenvs for +static analysis. The Python binary in that environment is going to be executed. +""" +import os +import sys +import hashlib +import filecmp +from collections import namedtuple + +from jedi._compatibility import highest_pickle_protocol, which +from jedi.cache import memoize_method, time_cache +from jedi.evaluate.compiled.subprocess import CompiledSubprocess, \ + EvaluatorSameProcess, EvaluatorSubprocess + +import parso + +_VersionInfo = namedtuple('VersionInfo', 'major minor micro') + +_SUPPORTED_PYTHONS = ['3.8', '3.7', '3.6', '3.5', '3.4', '2.7'] +_SAFE_PATHS = ['/usr/bin', '/usr/local/bin'] +_CURRENT_VERSION = '%s.%s' % (sys.version_info.major, sys.version_info.minor) + + +class InvalidPythonEnvironment(Exception): + """ + If you see this exception, the Python executable or Virtualenv you have + been trying to use is probably not a correct Python version. + """ + + +class _BaseEnvironment(object): + @memoize_method + def get_grammar(self): + version_string = '%s.%s' % (self.version_info.major, self.version_info.minor) + return parso.load_grammar(version=version_string) + + @property + def _sha256(self): + try: + return self._hash + except AttributeError: + self._hash = _calculate_sha256_for_file(self.executable) + return self._hash + + +def _get_info(): + return ( + sys.executable, + sys.prefix, + sys.version_info[:3], + ) + + +class Environment(_BaseEnvironment): + """ + This class is supposed to be created by internal Jedi architecture. You + should not create it directly. Please use create_environment or the other + functions instead. It is then returned by that function. + """ + _subprocess = None + + def __init__(self, executable): + self._start_executable = executable + # Initialize the environment + self._get_subprocess() + + def _get_subprocess(self): + if self._subprocess is not None and not self._subprocess.is_crashed: + return self._subprocess + + try: + self._subprocess = CompiledSubprocess(self._start_executable) + info = self._subprocess._send(None, _get_info) + except Exception as exc: + raise InvalidPythonEnvironment( + "Could not get version information for %r: %r" % ( + self._start_executable, + exc)) + + # Since it could change and might not be the same(?) as the one given, + # set it here. + self.executable = info[0] + """ + The Python executable, matches ``sys.executable``. + """ + self.path = info[1] + """ + The path to an environment, matches ``sys.prefix``. + """ + self.version_info = _VersionInfo(*info[2]) + """ + Like ``sys.version_info``. A tuple to show the current Environment's + Python version. + """ + + # py2 sends bytes via pickle apparently?! + if self.version_info.major == 2: + self.executable = self.executable.decode() + self.path = self.path.decode() + + # Adjust pickle protocol according to host and client version. + self._subprocess._pickle_protocol = highest_pickle_protocol([ + sys.version_info, self.version_info]) + + return self._subprocess + + def __repr__(self): + version = '.'.join(str(i) for i in self.version_info) + return '<%s: %s in %s>' % (self.__class__.__name__, version, self.path) + + def get_evaluator_subprocess(self, evaluator): + return EvaluatorSubprocess(evaluator, self._get_subprocess()) + + @memoize_method + def get_sys_path(self): + """ + The sys path for this environment. Does not include potential + modifications like ``sys.path.append``. + + :returns: list of str + """ + # It's pretty much impossible to generate the sys path without actually + # executing Python. The sys path (when starting with -S) itself depends + # on how the Python version was compiled (ENV variables). + # If you omit -S when starting Python (normal case), additionally + # site.py gets executed. + return self._get_subprocess().get_sys_path() + + +class _SameEnvironmentMixin(object): + def __init__(self): + self._start_executable = self.executable = sys.executable + self.path = sys.prefix + self.version_info = _VersionInfo(*sys.version_info[:3]) + + +class SameEnvironment(_SameEnvironmentMixin, Environment): + pass + + +class InterpreterEnvironment(_SameEnvironmentMixin, _BaseEnvironment): + def get_evaluator_subprocess(self, evaluator): + return EvaluatorSameProcess(evaluator) + + def get_sys_path(self): + return sys.path + + +def _get_virtual_env_from_var(): + """Get virtualenv environment from VIRTUAL_ENV environment variable. + + It uses `safe=False` with ``create_environment``, because the environment + variable is considered to be safe / controlled by the user solely. + """ + var = os.environ.get('VIRTUAL_ENV') + if var: + # Under macOS in some cases - notably when using Pipenv - the + # sys.prefix of the virtualenv is /path/to/env/bin/.. instead of + # /path/to/env so we need to fully resolve the paths in order to + # compare them. + if os.path.realpath(var) == os.path.realpath(sys.prefix): + return _try_get_same_env() + + try: + return create_environment(var, safe=False) + except InvalidPythonEnvironment: + pass + + +def _calculate_sha256_for_file(path): + sha256 = hashlib.sha256() + with open(path, 'rb') as f: + for block in iter(lambda: f.read(filecmp.BUFSIZE), b''): + sha256.update(block) + return sha256.hexdigest() + + +def get_default_environment(): + """ + Tries to return an active Virtualenv. If there is no VIRTUAL_ENV variable + set it will return the latest Python version installed on the system. This + makes it possible to use as many new Python features as possible when using + autocompletion and other functionality. + + :returns: :class:`Environment` + """ + virtual_env = _get_virtual_env_from_var() + if virtual_env is not None: + return virtual_env + + return _try_get_same_env() + + +def _try_get_same_env(): + env = SameEnvironment() + if not os.path.basename(env.executable).lower().startswith('python'): + # This tries to counter issues with embedding. In some cases (e.g. + # VIM's Python Mac/Windows, sys.executable is /foo/bar/vim. This + # happens, because for Mac a function called `_NSGetExecutablePath` is + # used and for Windows `GetModuleFileNameW`. These are both platform + # specific functions. For all other systems sys.executable should be + # alright. However here we try to generalize: + # + # 1. Check if the executable looks like python (heuristic) + # 2. In case it's not try to find the executable + # 3. In case we don't find it use an interpreter environment. + # + # The last option will always work, but leads to potential crashes of + # Jedi - which is ok, because it happens very rarely and even less, + # because the code below should work for most cases. + if os.name == 'nt': + # The first case would be a virtualenv and the second a normal + # Python installation. + checks = (r'Scripts\python.exe', 'python.exe') + else: + # For unix it looks like Python is always in a bin folder. + checks = ( + 'bin/python%s.%s' % (sys.version_info[0], sys.version[1]), + 'bin/python%s' % (sys.version_info[0]), + 'bin/python', + ) + for check in checks: + guess = os.path.join(sys.exec_prefix, check) + if os.path.isfile(guess): + # Bingo - We think we have our Python. + return Environment(guess) + # It looks like there is no reasonable Python to be found. + return InterpreterEnvironment() + # If no virtualenv is found, use the environment we're already + # using. + return env + + +def get_cached_default_environment(): + var = os.environ.get('VIRTUAL_ENV') + environment = _get_cached_default_environment() + + # Under macOS in some cases - notably when using Pipenv - the + # sys.prefix of the virtualenv is /path/to/env/bin/.. instead of + # /path/to/env so we need to fully resolve the paths in order to + # compare them. + if var and os.path.realpath(var) != os.path.realpath(environment.path): + _get_cached_default_environment.clear_cache() + return _get_cached_default_environment() + return environment + + +@time_cache(seconds=10 * 60) # 10 Minutes +def _get_cached_default_environment(): + return get_default_environment() + + +def find_virtualenvs(paths=None, **kwargs): + """ + :param paths: A list of paths in your file system to be scanned for + Virtualenvs. It will search in these paths and potentially execute the + Python binaries. Also the VIRTUAL_ENV variable will be checked if it + contains a valid Virtualenv. + :param safe: Default True. In case this is False, it will allow this + function to execute potential `python` environments. An attacker might + be able to drop an executable in a path this function is searching by + default. If the executable has not been installed by root, it will not + be executed. + + :yields: :class:`Environment` + """ + def py27_comp(paths=None, safe=True): + if paths is None: + paths = [] + + _used_paths = set() + + # Using this variable should be safe, because attackers might be able + # to drop files (via git) but not environment variables. + virtual_env = _get_virtual_env_from_var() + if virtual_env is not None: + yield virtual_env + _used_paths.add(virtual_env.path) + + for directory in paths: + if not os.path.isdir(directory): + continue + + directory = os.path.abspath(directory) + for path in os.listdir(directory): + path = os.path.join(directory, path) + if path in _used_paths: + # A path shouldn't be evaluated twice. + continue + _used_paths.add(path) + + try: + executable = _get_executable_path(path, safe=safe) + yield Environment(executable) + except InvalidPythonEnvironment: + pass + + return py27_comp(paths, **kwargs) + + +def find_system_environments(): + """ + Ignores virtualenvs and returns the Python versions that were installed on + your system. This might return nothing, if you're running Python e.g. from + a portable version. + + The environments are sorted from latest to oldest Python version. + + :yields: :class:`Environment` + """ + for version_string in _SUPPORTED_PYTHONS: + try: + yield get_system_environment(version_string) + except InvalidPythonEnvironment: + pass + + +# TODO: this function should probably return a list of environments since +# multiple Python installations can be found on a system for the same version. +def get_system_environment(version): + """ + Return the first Python environment found for a string of the form 'X.Y' + where X and Y are the major and minor versions of Python. + + :raises: :exc:`.InvalidPythonEnvironment` + :returns: :class:`Environment` + """ + exe = which('python' + version) + if exe: + if exe == sys.executable: + return SameEnvironment() + return Environment(exe) + + if os.name == 'nt': + for exe in _get_executables_from_windows_registry(version): + try: + return Environment(exe) + except InvalidPythonEnvironment: + pass + raise InvalidPythonEnvironment("Cannot find executable python%s." % version) + + +def create_environment(path, safe=True): + """ + Make it possible to manually create an Environment object by specifying a + Virtualenv path or an executable path. + + :raises: :exc:`.InvalidPythonEnvironment` + :returns: :class:`Environment` + """ + if os.path.isfile(path): + _assert_safe(path, safe) + return Environment(path) + return Environment(_get_executable_path(path, safe=safe)) + + +def _get_executable_path(path, safe=True): + """ + Returns None if it's not actually a virtual env. + """ + + if os.name == 'nt': + python = os.path.join(path, 'Scripts', 'python.exe') + else: + python = os.path.join(path, 'bin', 'python') + if not os.path.exists(python): + raise InvalidPythonEnvironment("%s seems to be missing." % python) + + _assert_safe(python, safe) + return python + + +def _get_executables_from_windows_registry(version): + # The winreg module is named _winreg on Python 2. + try: + import winreg + except ImportError: + import _winreg as winreg + + # TODO: support Python Anaconda. + sub_keys = [ + r'SOFTWARE\Python\PythonCore\{version}\InstallPath', + r'SOFTWARE\Wow6432Node\Python\PythonCore\{version}\InstallPath', + r'SOFTWARE\Python\PythonCore\{version}-32\InstallPath', + r'SOFTWARE\Wow6432Node\Python\PythonCore\{version}-32\InstallPath' + ] + for root_key in [winreg.HKEY_CURRENT_USER, winreg.HKEY_LOCAL_MACHINE]: + for sub_key in sub_keys: + sub_key = sub_key.format(version=version) + try: + with winreg.OpenKey(root_key, sub_key) as key: + prefix = winreg.QueryValueEx(key, '')[0] + exe = os.path.join(prefix, 'python.exe') + if os.path.isfile(exe): + yield exe + except WindowsError: + pass + + +def _assert_safe(executable_path, safe): + if safe and not _is_safe(executable_path): + raise InvalidPythonEnvironment( + "The python binary is potentially unsafe.") + + +def _is_safe(executable_path): + # Resolve sym links. A venv typically is a symlink to a known Python + # binary. Only virtualenvs copy symlinks around. + real_path = os.path.realpath(executable_path) + + if _is_unix_safe_simple(real_path): + return True + + # Just check the list of known Python versions. If it's not in there, + # it's likely an attacker or some Python that was not properly + # installed in the system. + for environment in find_system_environments(): + if environment.executable == real_path: + return True + + # If the versions don't match, just compare the binary files. If we + # don't do that, only venvs will be working and not virtualenvs. + # venvs are symlinks while virtualenvs are actual copies of the + # Python files. + # This still means that if the system Python is updated and the + # virtualenv's Python is not (which is probably never going to get + # upgraded), it will not work with Jedi. IMO that's fine, because + # people should just be using venv. ~ dave + if environment._sha256 == _calculate_sha256_for_file(real_path): + return True + return False + + +def _is_unix_safe_simple(real_path): + if _is_unix_admin(): + # In case we are root, just be conservative and + # only execute known paths. + return any(real_path.startswith(p) for p in _SAFE_PATHS) + + uid = os.stat(real_path).st_uid + # The interpreter needs to be owned by root. This means that it wasn't + # written by a user and therefore attacking Jedi is not as simple. + # The attack could look like the following: + # 1. A user clones a repository. + # 2. The repository has an innocent looking folder called foobar. jedi + # searches for the folder and executes foobar/bin/python --version if + # there's also a foobar/bin/activate. + # 3. The bin/python is obviously not a python script but a bash script or + # whatever the attacker wants. + return uid == 0 + + +def _is_unix_admin(): + try: + return os.getuid() == 0 + except AttributeError: + return False # Windows diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/exceptions.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/exceptions.py new file mode 100644 index 0000000..99cebdb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/exceptions.py @@ -0,0 +1,10 @@ +class _JediError(Exception): + pass + + +class InternalError(_JediError): + pass + + +class WrongVersion(_JediError): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/file_name.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/file_name.py new file mode 100644 index 0000000..2a2c4e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/file_name.py @@ -0,0 +1,161 @@ +import os + +from jedi._compatibility import FileNotFoundError, force_unicode +from jedi.evaluate.names import AbstractArbitraryName +from jedi.api import classes +from jedi.evaluate.helpers import get_str_or_none +from jedi.parser_utils import get_string_quote + + +def file_name_completions(evaluator, module_context, start_leaf, string, + like_name, call_signatures_callback, code_lines, position): + # First we want to find out what can actually be changed as a name. + like_name_length = len(os.path.basename(string) + like_name) + + addition = _get_string_additions(module_context, start_leaf) + if addition is None: + return + string = addition + string + + # Here we use basename again, because if strings are added like + # `'foo' + 'bar`, it should complete to `foobar/`. + must_start_with = os.path.basename(string) + like_name + string = os.path.dirname(string) + + sigs = call_signatures_callback() + is_in_os_path_join = sigs and all(s.full_name == 'os.path.join' for s in sigs) + if is_in_os_path_join: + to_be_added = _add_os_path_join(module_context, start_leaf, sigs[0].bracket_start) + if to_be_added is None: + is_in_os_path_join = False + else: + string = to_be_added + string + base_path = os.path.join(evaluator.project._path, string) + try: + listed = os.listdir(base_path) + except FileNotFoundError: + return + for name in listed: + if name.startswith(must_start_with): + path_for_name = os.path.join(base_path, name) + if is_in_os_path_join or not os.path.isdir(path_for_name): + if start_leaf.type == 'string': + quote = get_string_quote(start_leaf) + else: + assert start_leaf.type == 'error_leaf' + quote = start_leaf.value + potential_other_quote = \ + code_lines[position[0] - 1][position[1]:position[1] + len(quote)] + # Add a quote if it's not already there. + if quote != potential_other_quote: + name += quote + else: + name += os.path.sep + + yield classes.Completion( + evaluator, + FileName(evaluator, name[len(must_start_with) - like_name_length:]), + stack=None, + like_name_length=like_name_length + ) + + +def _get_string_additions(module_context, start_leaf): + def iterate_nodes(): + node = addition.parent + was_addition = True + for child_node in reversed(node.children[:node.children.index(addition)]): + if was_addition: + was_addition = False + yield child_node + continue + + if child_node != '+': + break + was_addition = True + + addition = start_leaf.get_previous_leaf() + if addition != '+': + return '' + context = module_context.create_context(start_leaf) + return _add_strings(context, reversed(list(iterate_nodes()))) + + +def _add_strings(context, nodes, add_slash=False): + string = '' + first = True + for child_node in nodes: + contexts = context.eval_node(child_node) + if len(contexts) != 1: + return None + c, = contexts + s = get_str_or_none(c) + if s is None: + return None + if not first and add_slash: + string += os.path.sep + string += force_unicode(s) + first = False + return string + + +class FileName(AbstractArbitraryName): + api_type = u'path' + is_context_name = False + + +def _add_os_path_join(module_context, start_leaf, bracket_start): + def check(maybe_bracket, nodes): + if maybe_bracket.start_pos != bracket_start: + return None + + if not nodes: + return '' + context = module_context.create_context(nodes[0]) + return _add_strings(context, nodes, add_slash=True) or '' + + if start_leaf.type == 'error_leaf': + # Unfinished string literal, like `join('` + context_node = start_leaf.parent + index = context_node.children.index(start_leaf) + if index > 0: + error_node = context_node.children[index - 1] + if error_node.type == 'error_node' and len(error_node.children) >= 2: + index = -2 + if error_node.children[-1].type == 'arglist': + arglist_nodes = error_node.children[-1].children + index -= 1 + else: + arglist_nodes = [] + + return check(error_node.children[index + 1], arglist_nodes[::2]) + return None + + # Maybe an arglist or some weird error case. Therefore checked below. + searched_node_child = start_leaf + while searched_node_child.parent is not None \ + and searched_node_child.parent.type not in ('arglist', 'trailer', 'error_node'): + searched_node_child = searched_node_child.parent + + if searched_node_child.get_first_leaf() is not start_leaf: + return None + searched_node = searched_node_child.parent + if searched_node is None: + return None + + index = searched_node.children.index(searched_node_child) + arglist_nodes = searched_node.children[:index] + if searched_node.type == 'arglist': + trailer = searched_node.parent + if trailer.type == 'error_node': + trailer_index = trailer.children.index(searched_node) + assert trailer_index >= 2 + assert trailer.children[trailer_index - 1] == '(' + return check(trailer.children[trailer_index - 1], arglist_nodes[::2]) + elif trailer.type == 'trailer': + return check(trailer.children[0], arglist_nodes[::2]) + elif searched_node.type == 'trailer': + return check(searched_node.children[0], []) + elif searched_node.type == 'error_node': + # Stuff like `join(""` + return check(arglist_nodes[-1], []) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/helpers.py new file mode 100644 index 0000000..6fafb11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/helpers.py @@ -0,0 +1,397 @@ +""" +Helpers for the API +""" +import re +from collections import namedtuple +from textwrap import dedent + +from parso.python.parser import Parser +from parso.python import tree + +from jedi._compatibility import u, Parameter +from jedi.evaluate.base_context import NO_CONTEXTS +from jedi.evaluate.syntax_tree import eval_atom +from jedi.evaluate.helpers import evaluate_call_of_leaf +from jedi.evaluate.compiled import get_string_context_set +from jedi.cache import call_signature_time_cache + + +CompletionParts = namedtuple('CompletionParts', ['path', 'has_dot', 'name']) + + +def sorted_definitions(defs): + # Note: `or ''` below is required because `module_path` could be + return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0, x.name)) + + +def get_on_completion_name(module_node, lines, position): + leaf = module_node.get_leaf_for_position(position) + if leaf is None or leaf.type in ('string', 'error_leaf'): + # Completions inside strings are a bit special, we need to parse the + # string. The same is true for comments and error_leafs. + line = lines[position[0] - 1] + # The first step of completions is to get the name + return re.search(r'(?!\d)\w+$|$', line[:position[1]]).group(0) + elif leaf.type not in ('name', 'keyword'): + return '' + + return leaf.value[:position[1] - leaf.start_pos[1]] + + +def _get_code(code_lines, start_pos, end_pos): + # Get relevant lines. + lines = code_lines[start_pos[0] - 1:end_pos[0]] + # Remove the parts at the end of the line. + lines[-1] = lines[-1][:end_pos[1]] + # Remove first line indentation. + lines[0] = lines[0][start_pos[1]:] + return ''.join(lines) + + +class OnErrorLeaf(Exception): + @property + def error_leaf(self): + return self.args[0] + + +def _get_code_for_stack(code_lines, leaf, position): + # It might happen that we're on whitespace or on a comment. This means + # that we would not get the right leaf. + if leaf.start_pos >= position: + # If we're not on a comment simply get the previous leaf and proceed. + leaf = leaf.get_previous_leaf() + if leaf is None: + return u('') # At the beginning of the file. + + is_after_newline = leaf.type == 'newline' + while leaf.type == 'newline': + leaf = leaf.get_previous_leaf() + if leaf is None: + return u('') + + if leaf.type == 'error_leaf' or leaf.type == 'string': + if leaf.start_pos[0] < position[0]: + # On a different line, we just begin anew. + return u('') + + # Error leafs cannot be parsed, completion in strings is also + # impossible. + raise OnErrorLeaf(leaf) + else: + user_stmt = leaf + while True: + if user_stmt.parent.type in ('file_input', 'suite', 'simple_stmt'): + break + user_stmt = user_stmt.parent + + if is_after_newline: + if user_stmt.start_pos[1] > position[1]: + # This means that it's actually a dedent and that means that we + # start without context (part of a suite). + return u('') + + # This is basically getting the relevant lines. + return _get_code(code_lines, user_stmt.get_start_pos_of_prefix(), position) + + +def get_stack_at_position(grammar, code_lines, leaf, pos): + """ + Returns the possible node names (e.g. import_from, xor_test or yield_stmt). + """ + class EndMarkerReached(Exception): + pass + + def tokenize_without_endmarker(code): + # TODO This is for now not an official parso API that exists purely + # for Jedi. + tokens = grammar._tokenize(code) + for token in tokens: + if token.string == safeword: + raise EndMarkerReached() + elif token.prefix.endswith(safeword): + # This happens with comments. + raise EndMarkerReached() + elif token.string.endswith(safeword): + yield token # Probably an f-string literal that was not finished. + raise EndMarkerReached() + else: + yield token + + # The code might be indedented, just remove it. + code = dedent(_get_code_for_stack(code_lines, leaf, pos)) + # We use a word to tell Jedi when we have reached the start of the + # completion. + # Use Z as a prefix because it's not part of a number suffix. + safeword = 'ZZZ_USER_WANTS_TO_COMPLETE_HERE_WITH_JEDI' + code = code + ' ' + safeword + + p = Parser(grammar._pgen_grammar, error_recovery=True) + try: + p.parse(tokens=tokenize_without_endmarker(code)) + except EndMarkerReached: + return p.stack + raise SystemError( + "This really shouldn't happen. There's a bug in Jedi:\n%s" + % list(tokenize_without_endmarker(code)) + ) + + +def evaluate_goto_definition(evaluator, context, leaf): + if leaf.type == 'name': + # In case of a name we can just use goto_definition which does all the + # magic itself. + return evaluator.goto_definitions(context, leaf) + + parent = leaf.parent + definitions = NO_CONTEXTS + if parent.type == 'atom': + # e.g. `(a + b)` + definitions = context.eval_node(leaf.parent) + elif parent.type == 'trailer': + # e.g. `a()` + definitions = evaluate_call_of_leaf(context, leaf) + elif isinstance(leaf, tree.Literal): + # e.g. `"foo"` or `1.0` + return eval_atom(context, leaf) + elif leaf.type in ('fstring_string', 'fstring_start', 'fstring_end'): + return get_string_context_set(evaluator) + return definitions + + +class CallDetails(object): + def __init__(self, bracket_leaf, children, position): + ['bracket_leaf', 'call_index', 'keyword_name_str'] + self.bracket_leaf = bracket_leaf + self._children = children + self._position = position + + @property + def index(self): + return _get_index_and_key(self._children, self._position)[0] + + @property + def keyword_name_str(self): + return _get_index_and_key(self._children, self._position)[1] + + def calculate_index(self, param_names): + positional_count = 0 + used_names = set() + star_count = -1 + args = list(_iter_arguments(self._children, self._position)) + if not args: + if param_names: + return 0 + else: + return None + + is_kwarg = False + for i, (star_count, key_start, had_equal) in enumerate(args): + is_kwarg |= had_equal | (star_count == 2) + if star_count: + pass # For now do nothing, we don't know what's in there here. + else: + if i + 1 != len(args): # Not last + if had_equal: + used_names.add(key_start) + else: + positional_count += 1 + + for i, param_name in enumerate(param_names): + kind = param_name.get_kind() + + if not is_kwarg: + if kind == Parameter.VAR_POSITIONAL: + return i + if kind in (Parameter.POSITIONAL_OR_KEYWORD, Parameter.POSITIONAL_ONLY): + if i == positional_count: + return i + + if key_start is not None and not star_count == 1 or star_count == 2: + if param_name.string_name not in used_names \ + and (kind == Parameter.KEYWORD_ONLY + or kind == Parameter.POSITIONAL_OR_KEYWORD + and positional_count <= i): + if star_count: + return i + if had_equal: + if param_name.string_name == key_start: + return i + else: + if param_name.string_name.startswith(key_start): + return i + + if kind == Parameter.VAR_KEYWORD: + return i + return None + + +def _iter_arguments(nodes, position): + def remove_after_pos(name): + if name.type != 'name': + return None + return name.value[:position[1] - name.start_pos[1]] + + # Returns Generator[Tuple[star_count, Optional[key_start: str], had_equal]] + nodes_before = [c for c in nodes if c.start_pos < position] + if nodes_before[-1].type == 'arglist': + for x in _iter_arguments(nodes_before[-1].children, position): + yield x # Python 2 :( + return + + previous_node_yielded = False + stars_seen = 0 + for i, node in enumerate(nodes_before): + if node.type == 'argument': + previous_node_yielded = True + first = node.children[0] + second = node.children[1] + if second == '=': + if second.start_pos < position: + yield 0, first.value, True + else: + yield 0, remove_after_pos(first), False + elif first in ('*', '**'): + yield len(first.value), remove_after_pos(second), False + else: + # Must be a Comprehension + first_leaf = node.get_first_leaf() + if first_leaf.type == 'name' and first_leaf.start_pos >= position: + yield 0, remove_after_pos(first_leaf), False + else: + yield 0, None, False + stars_seen = 0 + elif node.type in ('testlist', 'testlist_star_expr'): # testlist is Python 2 + for n in node.children[::2]: + if n.type == 'star_expr': + stars_seen = 1 + n = n.children[1] + yield stars_seen, remove_after_pos(n), False + stars_seen = 0 + # The count of children is even if there's a comma at the end. + previous_node_yielded = bool(len(node.children) % 2) + elif isinstance(node, tree.PythonLeaf) and node.value == ',': + if not previous_node_yielded: + yield stars_seen, '', False + stars_seen = 0 + previous_node_yielded = False + elif isinstance(node, tree.PythonLeaf) and node.value in ('*', '**'): + stars_seen = len(node.value) + elif node == '=' and nodes_before[-1]: + previous_node_yielded = True + before = nodes_before[i - 1] + if before.type == 'name': + yield 0, before.value, True + else: + yield 0, None, False + # Just ignore the star that is probably a syntax error. + stars_seen = 0 + + if not previous_node_yielded: + if nodes_before[-1].type == 'name': + yield stars_seen, remove_after_pos(nodes_before[-1]), False + else: + yield stars_seen, '', False + + +def _get_index_and_key(nodes, position): + """ + Returns the amount of commas and the keyword argument string. + """ + nodes_before = [c for c in nodes if c.start_pos < position] + if nodes_before[-1].type == 'arglist': + return _get_index_and_key(nodes_before[-1].children, position) + + key_str = None + + last = nodes_before[-1] + if last.type == 'argument' and last.children[1] == '=' \ + and last.children[1].end_pos <= position: + # Checked if the argument + key_str = last.children[0].value + elif last == '=': + key_str = nodes_before[-2].value + + return nodes_before.count(','), key_str + + +def _get_call_signature_details_from_error_node(node, additional_children, position): + for index, element in reversed(list(enumerate(node.children))): + # `index > 0` means that it's a trailer and not an atom. + if element == '(' and element.end_pos <= position and index > 0: + # It's an error node, we don't want to match too much, just + # until the parentheses is enough. + children = node.children[index:] + name = element.get_previous_leaf() + if name is None: + continue + if name.type == 'name' or name.parent.type in ('trailer', 'atom'): + return CallDetails(element, children + additional_children, position) + + +def get_call_signature_details(module, position): + leaf = module.get_leaf_for_position(position, include_prefixes=True) + if leaf.start_pos >= position: + # Whitespace / comments after the leaf count towards the previous leaf. + leaf = leaf.get_previous_leaf() + if leaf is None: + return None + + if leaf == ')': + # TODO is this ok? + if leaf.end_pos == position: + leaf = leaf.get_next_leaf() + + # Now that we know where we are in the syntax tree, we start to look at + # parents for possible function definitions. + node = leaf.parent + while node is not None: + if node.type in ('funcdef', 'classdef'): + # Don't show call signatures if there's stuff before it that just + # makes it feel strange to have a call signature. + return None + + additional_children = [] + for n in reversed(node.children): + if n.start_pos < position: + if n.type == 'error_node': + result = _get_call_signature_details_from_error_node( + n, additional_children, position + ) + if result is not None: + return result + + additional_children[0:0] = n.children + continue + additional_children.insert(0, n) + + if node.type == 'trailer' and node.children[0] == '(': + leaf = node.get_previous_leaf() + if leaf is None: + return None + return CallDetails(node.children[0], node.children, position) + + node = node.parent + + return None + + +@call_signature_time_cache("call_signatures_validity") +def cache_call_signatures(evaluator, context, bracket_leaf, code_lines, user_pos): + """This function calculates the cache key.""" + line_index = user_pos[0] - 1 + + before_cursor = code_lines[line_index][:user_pos[1]] + other_lines = code_lines[bracket_leaf.start_pos[0]:line_index] + whole = ''.join(other_lines + [before_cursor]) + before_bracket = re.match(r'.*\(', whole, re.DOTALL) + + module_path = context.get_root_context().py__file__() + if module_path is None: + yield None # Don't cache! + else: + yield (module_path, before_bracket, bracket_leaf.start_pos) + yield evaluate_goto_definition( + evaluator, + context, + bracket_leaf.get_previous_leaf(), + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/interpreter.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/interpreter.py new file mode 100644 index 0000000..515e007 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/interpreter.py @@ -0,0 +1,47 @@ +""" +TODO Some parts of this module are still not well documented. +""" + +from jedi.evaluate.context import ModuleContext +from jedi.evaluate import compiled +from jedi.evaluate.compiled import mixed +from jedi.evaluate.compiled.access import create_access_path +from jedi.evaluate.base_context import ContextWrapper + + +def _create(evaluator, obj): + return compiled.create_from_access_path( + evaluator, create_access_path(evaluator, obj) + ) + + +class NamespaceObject(object): + def __init__(self, dct): + self.__dict__ = dct + + +class MixedModuleContext(ContextWrapper): + type = 'mixed_module' + + def __init__(self, evaluator, tree_module, namespaces, file_io, code_lines): + module_context = ModuleContext( + evaluator, tree_module, + file_io=file_io, + string_names=('__main__',), + code_lines=code_lines + ) + super(MixedModuleContext, self).__init__(module_context) + self._namespace_objects = [NamespaceObject(n) for n in namespaces] + + def get_filters(self, *args, **kwargs): + for filter in self._wrapped_context.get_filters(*args, **kwargs): + yield filter + + for namespace_obj in self._namespace_objects: + compiled_object = _create(self.evaluator, namespace_obj) + mixed_object = mixed.MixedObject( + compiled_object=compiled_object, + tree_context=self._wrapped_context + ) + for filter in mixed_object.get_filters(*args, **kwargs): + yield filter diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/keywords.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/keywords.py new file mode 100644 index 0000000..cc301b8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/keywords.py @@ -0,0 +1,85 @@ +import pydoc + +from jedi.evaluate.utils import ignored +from jedi.evaluate.names import AbstractArbitraryName + +try: + from pydoc_data import topics as pydoc_topics +except ImportError: + # Python 2 + try: + import pydoc_topics + except ImportError: + # This is for Python 3 embeddable version, which dont have + # pydoc_data module in its file python3x.zip. + pydoc_topics = None + + +def get_operator(evaluator, string, pos): + return Keyword(evaluator, string, pos) + + +class KeywordName(AbstractArbitraryName): + api_type = u'keyword' + + def infer(self): + return [Keyword(self.evaluator, self.string_name, (0, 0))] + + +class Keyword(object): + api_type = u'keyword' + + def __init__(self, evaluator, name, pos): + self.name = KeywordName(evaluator, name) + self.start_pos = pos + self.parent = evaluator.builtins_module + + @property + def names(self): + """ For a `parsing.Name` like comparision """ + return [self.name] + + def py__doc__(self): + return imitate_pydoc(self.name.string_name) + + def get_signatures(self): + # TODO this makes no sense, I think Keyword should somehow merge with + # Context to make it easier for the api/classes.py to deal with all + # of it. + return [] + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self.name) + + +def imitate_pydoc(string): + """ + It's not possible to get the pydoc's without starting the annoying pager + stuff. + """ + if pydoc_topics is None: + return '' + + # str needed because of possible unicode stuff in py2k (pydoc doesn't work + # with unicode strings) + string = str(string) + h = pydoc.help + with ignored(KeyError): + # try to access symbols + string = h.symbols[string] + string, _, related = string.partition(' ') + + get_target = lambda s: h.topics.get(s, h.keywords.get(s)) + while isinstance(string, str): + string = get_target(string) + + try: + # is a tuple now + label, related = string + except TypeError: + return '' + + try: + return pydoc_topics.topics[label].strip() if pydoc_topics else '' + except KeyError: + return '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/project.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/project.py new file mode 100644 index 0000000..63ee2b8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/project.py @@ -0,0 +1,197 @@ +import os +import json + +from jedi._compatibility import FileNotFoundError, PermissionError, IsADirectoryError +from jedi.api.environment import SameEnvironment, \ + get_cached_default_environment +from jedi.api.exceptions import WrongVersion +from jedi._compatibility import force_unicode +from jedi.evaluate.sys_path import discover_buildout_paths +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.common.utils import traverse_parents + +_CONFIG_FOLDER = '.jedi' +_CONTAINS_POTENTIAL_PROJECT = 'setup.py', '.git', '.hg', 'requirements.txt', 'MANIFEST.in' + +_SERIALIZER_VERSION = 1 + + +def _remove_duplicates_from_path(path): + used = set() + for p in path: + if p in used: + continue + used.add(p) + yield p + + +def _force_unicode_list(lst): + return list(map(force_unicode, lst)) + + +class Project(object): + # TODO serialize environment + _serializer_ignore_attributes = ('_environment',) + _environment = None + + @staticmethod + def _get_json_path(base_path): + return os.path.join(base_path, _CONFIG_FOLDER, 'project.json') + + @classmethod + def load(cls, path): + """ + :param path: The path of the directory you want to use as a project. + """ + with open(cls._get_json_path(path)) as f: + version, data = json.load(f) + + if version == 1: + self = cls.__new__() + self.__dict__.update(data) + return self + else: + raise WrongVersion( + "The Jedi version of this project seems newer than what we can handle." + ) + + def __init__(self, path, **kwargs): + """ + :param path: The base path for this project. + :param sys_path: list of str. You can override the sys path if you + want. By default the ``sys.path.`` is generated from the + environment (virtualenvs, etc). + :param smart_sys_path: If this is enabled (default), adds paths from + local directories. Otherwise you will have to rely on your packages + being properly configured on the ``sys.path``. + """ + def py2_comp(path, environment=None, sys_path=None, + smart_sys_path=True, _django=False): + self._path = os.path.abspath(path) + if isinstance(environment, SameEnvironment): + self._environment = environment + + self._sys_path = sys_path + self._smart_sys_path = smart_sys_path + self._django = _django + + py2_comp(path, **kwargs) + + @evaluator_as_method_param_cache() + def _get_base_sys_path(self, evaluator, environment=None): + if self._sys_path is not None: + return self._sys_path + + # The sys path has not been set explicitly. + if environment is None: + environment = self.get_environment() + + sys_path = list(environment.get_sys_path()) + try: + sys_path.remove('') + except ValueError: + pass + return sys_path + + @evaluator_as_method_param_cache() + def _get_sys_path(self, evaluator, environment=None, add_parent_paths=True): + """ + Keep this method private for all users of jedi. However internally this + one is used like a public method. + """ + suffixed = [] + prefixed = [] + + sys_path = list(self._get_base_sys_path(evaluator, environment)) + if self._smart_sys_path: + prefixed.append(self._path) + + if evaluator.script_path is not None: + suffixed += discover_buildout_paths(evaluator, evaluator.script_path) + + if add_parent_paths: + traversed = list(traverse_parents(evaluator.script_path)) + + # AFAIK some libraries have imports like `foo.foo.bar`, which + # leads to the conclusion to by default prefer longer paths + # rather than shorter ones by default. + suffixed += reversed(traversed) + + if self._django: + prefixed.append(self._path) + + path = prefixed + sys_path + suffixed + return list(_force_unicode_list(_remove_duplicates_from_path(path))) + + def save(self): + data = dict(self.__dict__) + for attribute in self._serializer_ignore_attributes: + data.pop(attribute, None) + + with open(self._get_json_path(self._path), 'wb') as f: + return json.dump((_SERIALIZER_VERSION, data), f) + + def get_environment(self): + if self._environment is None: + return get_cached_default_environment() + + return self._environment + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._path) + + +def _is_potential_project(path): + for name in _CONTAINS_POTENTIAL_PROJECT: + if os.path.exists(os.path.join(path, name)): + return True + return False + + +def _is_django_path(directory): + """ Detects the path of the very well known Django library (if used) """ + try: + with open(os.path.join(directory, 'manage.py'), 'rb') as f: + return b"DJANGO_SETTINGS_MODULE" in f.read() + except (FileNotFoundError, IsADirectoryError, PermissionError): + return False + + return False + + +def get_default_project(path=None): + if path is None: + path = os.getcwd() + + check = os.path.realpath(path) + probable_path = None + first_no_init_file = None + for dir in traverse_parents(check, include_current=True): + try: + return Project.load(dir) + except (FileNotFoundError, IsADirectoryError, PermissionError): + pass + + if first_no_init_file is None: + if os.path.exists(os.path.join(dir, '__init__.py')): + # In the case that a __init__.py exists, it's in 99% just a + # Python package and the project sits at least one level above. + continue + else: + first_no_init_file = dir + + if _is_django_path(dir): + return Project(dir, _django=True) + + if probable_path is None and _is_potential_project(dir): + probable_path = dir + + if probable_path is not None: + # TODO search for setup.py etc + return Project(probable_path) + + if first_no_init_file is not None: + return Project(first_no_init_file) + + curdir = path if os.path.isdir(path) else os.path.dirname(path) + return Project(curdir) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/replstartup.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/replstartup.py new file mode 100644 index 0000000..3ac8470 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/api/replstartup.py @@ -0,0 +1,29 @@ +""" +To use Jedi completion in Python interpreter, add the following in your shell +setup (e.g., ``.bashrc``). This works only on Linux/Mac, because readline is +not available on Windows. If you still want Jedi autocompletion in your REPL, +just use IPython instead:: + + export PYTHONSTARTUP="$(python -m jedi repl)" + +Then you will be able to use Jedi completer in your Python interpreter:: + + $ python + Python 2.7.2+ (default, Jul 20 2012, 22:15:08) + [GCC 4.6.1] on linux2 + Type "help", "copyright", "credits" or "license" for more information. + >>> import os + >>> os.path.join('a', 'b').split().in # doctest: +SKIP + ..dex ..sert + +""" +import jedi.utils +from jedi import __version__ as __jedi_version__ + +print('REPL completion using Jedi %s' % __jedi_version__) +jedi.utils.setup_readline() + +del jedi + +# Note: try not to do many things here, as it will contaminate global +# namespace of the interpreter. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/cache.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/cache.py new file mode 100644 index 0000000..93e2bd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/cache.py @@ -0,0 +1,146 @@ +""" +This caching is very important for speed and memory optimizations. There's +nothing really spectacular, just some decorators. The following cache types are +available: + +- ``time_cache`` can be used to cache something for just a limited time span, + which can be useful if there's user interaction and the user cannot react + faster than a certain time. + +This module is one of the reasons why |jedi| is not thread-safe. As you can see +there are global variables, which are holding the cache information. Some of +these variables are being cleaned after every API usage. +""" +import time +from functools import wraps + +from jedi import settings +from parso.cache import parser_cache + +_time_caches = {} + + +def underscore_memoization(func): + """ + Decorator for methods:: + + class A(object): + def x(self): + if self._x: + self._x = 10 + return self._x + + Becomes:: + + class A(object): + @underscore_memoization + def x(self): + return 10 + + A now has an attribute ``_x`` written by this decorator. + """ + name = '_' + func.__name__ + + def wrapper(self): + try: + return getattr(self, name) + except AttributeError: + result = func(self) + setattr(self, name, result) + return result + + return wrapper + + +def clear_time_caches(delete_all=False): + """ Jedi caches many things, that should be completed after each completion + finishes. + + :param delete_all: Deletes also the cache that is normally not deleted, + like parser cache, which is important for faster parsing. + """ + global _time_caches + + if delete_all: + for cache in _time_caches.values(): + cache.clear() + parser_cache.clear() + else: + # normally just kill the expired entries, not all + for tc in _time_caches.values(): + # check time_cache for expired entries + for key, (t, value) in list(tc.items()): + if t < time.time(): + # delete expired entries + del tc[key] + + +def call_signature_time_cache(time_add_setting): + """ + This decorator works as follows: Call it with a setting and after that + use the function with a callable that returns the key. + But: This function is only called if the key is not available. After a + certain amount of time (`time_add_setting`) the cache is invalid. + + If the given key is None, the function will not be cached. + """ + def _temp(key_func): + dct = {} + _time_caches[time_add_setting] = dct + + def wrapper(*args, **kwargs): + generator = key_func(*args, **kwargs) + key = next(generator) + try: + expiry, value = dct[key] + if expiry > time.time(): + return value + except KeyError: + pass + + value = next(generator) + time_add = getattr(settings, time_add_setting) + if key is not None: + dct[key] = time.time() + time_add, value + return value + return wrapper + return _temp + + +def time_cache(seconds): + def decorator(func): + cache = {} + + @wraps(func) + def wrapper(*args, **kwargs): + key = (args, frozenset(kwargs.items())) + try: + created, result = cache[key] + if time.time() < created + seconds: + return result + except KeyError: + pass + result = func(*args, **kwargs) + cache[key] = time.time(), result + return result + + wrapper.clear_cache = lambda: cache.clear() + return wrapper + + return decorator + + +def memoize_method(method): + """A normal memoize function.""" + @wraps(method) + def wrapper(self, *args, **kwargs): + cache_dict = self.__dict__.setdefault('_memoize_method_dct', {}) + dct = cache_dict.setdefault(method, {}) + key = (args, frozenset(kwargs.items())) + try: + return dct[key] + except KeyError: + result = method(self, *args, **kwargs) + dct[key] = result + return result + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/__init__.py new file mode 100644 index 0000000..702a5e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/__init__.py @@ -0,0 +1 @@ +from jedi.common.context import BaseContextSet, BaseContext diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/context.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/context.py new file mode 100644 index 0000000..92a5fe0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/context.py @@ -0,0 +1,73 @@ +class BaseContext(object): + def __init__(self, evaluator, parent_context=None): + self.evaluator = evaluator + self.parent_context = parent_context + + def get_root_context(self): + context = self + while True: + if context.parent_context is None: + return context + context = context.parent_context + + +class BaseContextSet(object): + def __init__(self, iterable): + self._set = frozenset(iterable) + for context in iterable: + assert not isinstance(context, BaseContextSet) + + @classmethod + def _from_frozen_set(cls, frozenset_): + self = cls.__new__(cls) + self._set = frozenset_ + return self + + @classmethod + def from_sets(cls, sets): + """ + Used to work with an iterable of set. + """ + aggregated = set() + for set_ in sets: + if isinstance(set_, BaseContextSet): + aggregated |= set_._set + else: + aggregated |= frozenset(set_) + return cls._from_frozen_set(frozenset(aggregated)) + + def __or__(self, other): + return self._from_frozen_set(self._set | other._set) + + def __and__(self, other): + return self._from_frozen_set(self._set & other._set) + + def __iter__(self): + for element in self._set: + yield element + + def __bool__(self): + return bool(self._set) + + def __len__(self): + return len(self._set) + + def __repr__(self): + return 'S{%s}' % (', '.join(str(s) for s in self._set)) + + def filter(self, filter_func): + return self.__class__(filter(filter_func, self._set)) + + def __getattr__(self, name): + def mapper(*args, **kwargs): + return self.from_sets( + getattr(context, name)(*args, **kwargs) + for context in self._set + ) + return mapper + + def __eq__(self, other): + return self._set == other._set + + def __hash__(self): + return hash(self._set) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/utils.py new file mode 100644 index 0000000..92ff52e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/common/utils.py @@ -0,0 +1,26 @@ +import os +from contextlib import contextmanager + + +def traverse_parents(path, include_current=False): + if not include_current: + path = os.path.dirname(path) + + previous = None + while previous != path: + yield path + previous = path + path = os.path.dirname(path) + + +@contextmanager +def monkeypatch(obj, attribute_name, new_value): + """ + Like pytest's monkeypatch, but as a context manager. + """ + old_value = getattr(obj, attribute_name) + try: + setattr(obj, attribute_name, new_value) + yield + finally: + setattr(obj, attribute_name, old_value) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/debug.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/debug.py new file mode 100644 index 0000000..4136acf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/debug.py @@ -0,0 +1,143 @@ +import os +import time +from contextlib import contextmanager + +from jedi._compatibility import encoding, is_py3, u + +_inited = False + + +def _lazy_colorama_init(): + """ + Lazily init colorama if necessary, not to screw up stdout if debugging is + not enabled. + + This version of the function does nothing. + """ + + +try: + if os.name == 'nt': + # Does not work on Windows, as pyreadline and colorama interfere + raise ImportError + else: + # Use colorama for nicer console output. + from colorama import Fore, init + from colorama import initialise + + def _lazy_colorama_init(): # noqa: F811 + """ + Lazily init colorama if necessary, not to screw up stdout is + debug not enabled. + + This version of the function does init colorama. + """ + global _inited + if not _inited: + # pytest resets the stream at the end - causes troubles. Since + # after every output the stream is reset automatically we don't + # need this. + initialise.atexit_done = True + try: + init(strip=False) + except Exception: + # Colorama fails with initializing under vim and is buggy in + # version 0.3.6. + pass + _inited = True + +except ImportError: + class Fore(object): + RED = '' + GREEN = '' + YELLOW = '' + MAGENTA = '' + RESET = '' + BLUE = '' + +NOTICE = object() +WARNING = object() +SPEED = object() + +enable_speed = False +enable_warning = False +enable_notice = False + +# callback, interface: level, str +debug_function = None +_debug_indent = 0 +_start_time = time.time() + + +def reset_time(): + global _start_time, _debug_indent + _start_time = time.time() + _debug_indent = 0 + + +def increase_indent(func): + """Decorator for makin """ + def wrapper(*args, **kwargs): + with increase_indent_cm(): + return func(*args, **kwargs) + return wrapper + + +@contextmanager +def increase_indent_cm(title=None): + global _debug_indent + if title: + dbg('Start: ' + title, color='MAGENTA') + _debug_indent += 1 + try: + yield + finally: + _debug_indent -= 1 + if title: + dbg('End: ' + title, color='MAGENTA') + + +def dbg(message, *args, **kwargs): + """ Looks at the stack, to see if a debug message should be printed. """ + # Python 2 compatibility, because it doesn't understand default args + color = kwargs.pop('color', 'GREEN') + assert color + + if debug_function and enable_notice: + i = ' ' * _debug_indent + _lazy_colorama_init() + debug_function(color, i + 'dbg: ' + message % tuple(u(repr(a)) for a in args)) + + +def warning(message, *args, **kwargs): + format = kwargs.pop('format', True) + assert not kwargs + + if debug_function and enable_warning: + i = ' ' * _debug_indent + if format: + message = message % tuple(u(repr(a)) for a in args) + debug_function('RED', i + 'warning: ' + message) + + +def speed(name): + if debug_function and enable_speed: + now = time.time() + i = ' ' * _debug_indent + debug_function('YELLOW', i + 'speed: ' + '%s %s' % (name, now - _start_time)) + + +def print_to_stdout(color, str_out): + """ + The default debug function that prints to standard out. + + :param str color: A string that is an attribute of ``colorama.Fore``. + """ + col = getattr(Fore, color) + _lazy_colorama_init() + if not is_py3: + str_out = str_out.encode(encoding, 'replace') + print(col + str_out + Fore.RESET) + + +# debug_function = print_to_stdout diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/__init__.py new file mode 100644 index 0000000..a4f7e90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/__init__.py @@ -0,0 +1,443 @@ +""" +Evaluation of Python code in |jedi| is based on three assumptions: + +* The code uses as least side effects as possible. Jedi understands certain + list/tuple/set modifications, but there's no guarantee that Jedi detects + everything (list.append in different modules for example). +* No magic is being used: + + - metaclasses + - ``setattr()`` / ``__import__()`` + - writing to ``globals()``, ``locals()``, ``object.__dict__`` +* The programmer is not a total dick, e.g. like `this + `_ :-) + +The actual algorithm is based on a principle called lazy evaluation. That +said, the typical entry point for static analysis is calling +``eval_expr_stmt``. There's separate logic for autocompletion in the API, the +evaluator is all about evaluating an expression. + +TODO this paragraph is not what jedi does anymore, it's similar, but not the +same. + +Now you need to understand what follows after ``eval_expr_stmt``. Let's +make an example:: + + import datetime + datetime.date.toda# <-- cursor here + +First of all, this module doesn't care about completion. It really just cares +about ``datetime.date``. At the end of the procedure ``eval_expr_stmt`` will +return the ``date`` class. + +To *visualize* this (simplified): + +- ``Evaluator.eval_expr_stmt`` doesn't do much, because there's no assignment. +- ``Context.eval_node`` cares for resolving the dotted path +- ``Evaluator.find_types`` searches for global definitions of datetime, which + it finds in the definition of an import, by scanning the syntax tree. +- Using the import logic, the datetime module is found. +- Now ``find_types`` is called again by ``eval_node`` to find ``date`` + inside the datetime module. + +Now what would happen if we wanted ``datetime.date.foo.bar``? Two more +calls to ``find_types``. However the second call would be ignored, because the +first one would return nothing (there's no foo attribute in ``date``). + +What if the import would contain another ``ExprStmt`` like this:: + + from foo import bar + Date = bar.baz + +Well... You get it. Just another ``eval_expr_stmt`` recursion. It's really +easy. Python can obviously get way more complicated then this. To understand +tuple assignments, list comprehensions and everything else, a lot more code had +to be written. + +Jedi has been tested very well, so you can just start modifying code. It's best +to write your own test first for your "new" feature. Don't be scared of +breaking stuff. As long as the tests pass, you're most likely to be fine. + +I need to mention now that lazy evaluation is really good because it +only *evaluates* what needs to be *evaluated*. All the statements and modules +that are not used are just being ignored. +""" +from parso.python import tree +import parso +from parso import python_bytes_to_unicode +from jedi.file_io import FileIO + +from jedi import debug +from jedi import parser_utils +from jedi.evaluate.utils import unite +from jedi.evaluate import imports +from jedi.evaluate import recursion +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate import helpers +from jedi.evaluate.names import TreeNameDefinition, ParamName +from jedi.evaluate.base_context import ContextualizedName, ContextualizedNode, \ + ContextSet, NO_CONTEXTS, iterate_contexts +from jedi.evaluate.context import ClassContext, FunctionContext, \ + AnonymousInstance, BoundMethod +from jedi.evaluate.context.iterable import CompForContext +from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, \ + eval_node, check_tuple_assignments +from jedi.plugins import plugin_manager + + +class Evaluator(object): + def __init__(self, project, environment=None, script_path=None): + if environment is None: + environment = project.get_environment() + self.environment = environment + self.script_path = script_path + self.compiled_subprocess = environment.get_evaluator_subprocess(self) + self.grammar = environment.get_grammar() + + self.latest_grammar = parso.load_grammar(version='3.7') + self.memoize_cache = {} # for memoize decorators + self.module_cache = imports.ModuleCache() # does the job of `sys.modules`. + self.stub_module_cache = {} # Dict[Tuple[str, ...], Optional[ModuleContext]] + self.compiled_cache = {} # see `evaluate.compiled.create()` + self.inferred_element_counts = {} + self.mixed_cache = {} # see `evaluate.compiled.mixed._create()` + self.analysis = [] + self.dynamic_params_depth = 0 + self.is_analysis = False + self.project = project + self.access_cache = {} + self.allow_descriptor_getattr = False + + self.reset_recursion_limitations() + self.allow_different_encoding = True + + def import_module(self, import_names, parent_module_context=None, + sys_path=None, prefer_stubs=True): + if sys_path is None: + sys_path = self.get_sys_path() + return imports.import_module(self, import_names, parent_module_context, + sys_path, prefer_stubs=prefer_stubs) + + @staticmethod + @plugin_manager.decorate() + def execute(context, arguments): + debug.dbg('execute: %s %s', context, arguments) + with debug.increase_indent_cm(): + context_set = context.py__call__(arguments=arguments) + debug.dbg('execute result: %s in %s', context_set, context) + return context_set + + @property + @evaluator_function_cache() + def builtins_module(self): + module_name = u'builtins' + if self.environment.version_info.major == 2: + module_name = u'__builtin__' + builtins_module, = self.import_module((module_name,), sys_path=()) + return builtins_module + + @property + @evaluator_function_cache() + def typing_module(self): + typing_module, = self.import_module((u'typing',)) + return typing_module + + def reset_recursion_limitations(self): + self.recursion_detector = recursion.RecursionDetector() + self.execution_recursion_detector = recursion.ExecutionRecursionDetector(self) + + def get_sys_path(self, **kwargs): + """Convenience function""" + return self.project._get_sys_path(self, environment=self.environment, **kwargs) + + def eval_element(self, context, element): + if isinstance(context, CompForContext): + return eval_node(context, element) + + if_stmt = element + while if_stmt is not None: + if_stmt = if_stmt.parent + if if_stmt.type in ('if_stmt', 'for_stmt'): + break + if parser_utils.is_scope(if_stmt): + if_stmt = None + break + predefined_if_name_dict = context.predefined_names.get(if_stmt) + # TODO there's a lot of issues with this one. We actually should do + # this in a different way. Caching should only be active in certain + # cases and this all sucks. + if predefined_if_name_dict is None and if_stmt \ + and if_stmt.type == 'if_stmt' and self.is_analysis: + if_stmt_test = if_stmt.children[1] + name_dicts = [{}] + # If we already did a check, we don't want to do it again -> If + # context.predefined_names is filled, we stop. + # We don't want to check the if stmt itself, it's just about + # the content. + if element.start_pos > if_stmt_test.end_pos: + # Now we need to check if the names in the if_stmt match the + # names in the suite. + if_names = helpers.get_names_of_node(if_stmt_test) + element_names = helpers.get_names_of_node(element) + str_element_names = [e.value for e in element_names] + if any(i.value in str_element_names for i in if_names): + for if_name in if_names: + definitions = self.goto_definitions(context, if_name) + # Every name that has multiple different definitions + # causes the complexity to rise. The complexity should + # never fall below 1. + if len(definitions) > 1: + if len(name_dicts) * len(definitions) > 16: + debug.dbg('Too many options for if branch evaluation %s.', if_stmt) + # There's only a certain amount of branches + # Jedi can evaluate, otherwise it will take to + # long. + name_dicts = [{}] + break + + original_name_dicts = list(name_dicts) + name_dicts = [] + for definition in definitions: + new_name_dicts = list(original_name_dicts) + for i, name_dict in enumerate(new_name_dicts): + new_name_dicts[i] = name_dict.copy() + new_name_dicts[i][if_name.value] = ContextSet([definition]) + + name_dicts += new_name_dicts + else: + for name_dict in name_dicts: + name_dict[if_name.value] = definitions + if len(name_dicts) > 1: + result = NO_CONTEXTS + for name_dict in name_dicts: + with helpers.predefine_names(context, if_stmt, name_dict): + result |= eval_node(context, element) + return result + else: + return self._eval_element_if_evaluated(context, element) + else: + if predefined_if_name_dict: + return eval_node(context, element) + else: + return self._eval_element_if_evaluated(context, element) + + def _eval_element_if_evaluated(self, context, element): + """ + TODO This function is temporary: Merge with eval_element. + """ + parent = element + while parent is not None: + parent = parent.parent + predefined_if_name_dict = context.predefined_names.get(parent) + if predefined_if_name_dict is not None: + return eval_node(context, element) + return self._eval_element_cached(context, element) + + @evaluator_function_cache(default=NO_CONTEXTS) + def _eval_element_cached(self, context, element): + return eval_node(context, element) + + def goto_definitions(self, context, name): + def_ = name.get_definition(import_name_always=True) + if def_ is not None: + type_ = def_.type + is_classdef = type_ == 'classdef' + if is_classdef or type_ == 'funcdef': + if is_classdef: + c = ClassContext(self, context, name.parent) + else: + c = FunctionContext.from_context(context, name.parent) + return ContextSet([c]) + + if type_ == 'expr_stmt': + is_simple_name = name.parent.type not in ('power', 'trailer') + if is_simple_name: + return eval_expr_stmt(context, def_, name) + if type_ == 'for_stmt': + container_types = context.eval_node(def_.children[3]) + cn = ContextualizedNode(context, def_.children[3]) + for_types = iterate_contexts(container_types, cn) + c_node = ContextualizedName(context, name) + return check_tuple_assignments(self, c_node, for_types) + if type_ in ('import_from', 'import_name'): + return imports.infer_import(context, name) + else: + result = self._follow_error_node_imports_if_possible(context, name) + if result is not None: + return result + + return helpers.evaluate_call_of_leaf(context, name) + + def _follow_error_node_imports_if_possible(self, context, name): + error_node = tree.search_ancestor(name, 'error_node') + if error_node is not None: + # Get the first command start of a started simple_stmt. The error + # node is sometimes a small_stmt and sometimes a simple_stmt. Check + # for ; leaves that start a new statements. + start_index = 0 + for index, n in enumerate(error_node.children): + if n.start_pos > name.start_pos: + break + if n == ';': + start_index = index + 1 + nodes = error_node.children[start_index:] + first_name = nodes[0].get_first_leaf().value + + # Make it possible to infer stuff like `import foo.` or + # `from foo.bar`. + if first_name in ('from', 'import'): + is_import_from = first_name == 'from' + level, names = helpers.parse_dotted_names( + nodes, + is_import_from=is_import_from, + until_node=name, + ) + return imports.Importer(self, names, context.get_root_context(), level).follow() + return None + + def goto(self, context, name): + definition = name.get_definition(import_name_always=True) + if definition is not None: + type_ = definition.type + if type_ == 'expr_stmt': + # Only take the parent, because if it's more complicated than just + # a name it's something you can "goto" again. + is_simple_name = name.parent.type not in ('power', 'trailer') + if is_simple_name: + return [TreeNameDefinition(context, name)] + elif type_ == 'param': + return [ParamName(context, name)] + elif type_ in ('import_from', 'import_name'): + module_names = imports.infer_import(context, name, is_goto=True) + return module_names + else: + return [TreeNameDefinition(context, name)] + else: + contexts = self._follow_error_node_imports_if_possible(context, name) + if contexts is not None: + return [context.name for context in contexts] + + par = name.parent + node_type = par.type + if node_type == 'argument' and par.children[1] == '=' and par.children[0] == name: + # Named param goto. + trailer = par.parent + if trailer.type == 'arglist': + trailer = trailer.parent + if trailer.type != 'classdef': + if trailer.type == 'decorator': + context_set = context.eval_node(trailer.children[1]) + else: + i = trailer.parent.children.index(trailer) + to_evaluate = trailer.parent.children[:i] + if to_evaluate[0] == 'await': + to_evaluate.pop(0) + context_set = context.eval_node(to_evaluate[0]) + for trailer in to_evaluate[1:]: + context_set = eval_trailer(context, context_set, trailer) + param_names = [] + for context in context_set: + for signature in context.get_signatures(): + for param_name in signature.get_param_names(): + if param_name.string_name == name.value: + param_names.append(param_name) + return param_names + elif node_type == 'dotted_name': # Is a decorator. + index = par.children.index(name) + if index > 0: + new_dotted = helpers.deep_ast_copy(par) + new_dotted.children[index - 1:] = [] + values = context.eval_node(new_dotted) + return unite( + value.py__getattribute__(name, name_context=context, is_goto=True) + for value in values + ) + + if node_type == 'trailer' and par.children[0] == '.': + values = helpers.evaluate_call_of_leaf(context, name, cut_own_trailer=True) + return values.py__getattribute__(name, name_context=context, is_goto=True) + else: + stmt = tree.search_ancestor( + name, 'expr_stmt', 'lambdef' + ) or name + if stmt.type == 'lambdef': + stmt = name + return context.py__getattribute__( + name, + position=stmt.start_pos, + search_global=True, is_goto=True + ) + + def create_context(self, base_context, node, node_is_context=False, node_is_object=False): + def parent_scope(node): + while True: + node = node.parent + + if parser_utils.is_scope(node): + return node + elif node.type in ('argument', 'testlist_comp'): + if node.children[1].type in ('comp_for', 'sync_comp_for'): + return node.children[1] + elif node.type == 'dictorsetmaker': + for n in node.children[1:4]: + # In dictionaries it can be pretty much anything. + if n.type in ('comp_for', 'sync_comp_for'): + return n + + def from_scope_node(scope_node, is_nested=True, node_is_object=False): + if scope_node == base_node: + return base_context + + is_funcdef = scope_node.type in ('funcdef', 'lambdef') + parent_scope = parser_utils.get_parent_scope(scope_node) + parent_context = from_scope_node(parent_scope) + + if is_funcdef: + func = FunctionContext.from_context(parent_context, scope_node) + if parent_context.is_class(): + instance = AnonymousInstance( + self, parent_context.parent_context, parent_context) + func = BoundMethod( + instance=instance, + function=func + ) + + if is_nested and not node_is_object: + return func.get_function_execution() + return func + elif scope_node.type == 'classdef': + return ClassContext(self, parent_context, scope_node) + elif scope_node.type in ('comp_for', 'sync_comp_for'): + if node.start_pos >= scope_node.children[-1].start_pos: + return parent_context + return CompForContext.from_comp_for(parent_context, scope_node) + raise Exception("There's a scope that was not managed.") + + base_node = base_context.tree_node + + if node_is_context and parser_utils.is_scope(node): + scope_node = node + else: + scope_node = parent_scope(node) + if scope_node.type in ('funcdef', 'classdef'): + colon = scope_node.children[scope_node.children.index(':')] + if node.start_pos < colon.start_pos: + parent = node.parent + if not (parent.type == 'param' and parent.name == node): + scope_node = parent_scope(scope_node) + return from_scope_node(scope_node, is_nested=True, node_is_object=node_is_object) + + def parse_and_get_code(self, code=None, path=None, encoding='utf-8', + use_latest_grammar=False, file_io=None, **kwargs): + if self.allow_different_encoding: + if code is None: + if file_io is None: + file_io = FileIO(path) + code = file_io.read() + code = python_bytes_to_unicode(code, encoding=encoding, errors='replace') + + grammar = self.latest_grammar if use_latest_grammar else self.grammar + return grammar.parse(code=code, path=path, file_io=file_io, **kwargs), code + + def parse(self, *args, **kwargs): + return self.parse_and_get_code(*args, **kwargs)[0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/analysis.py new file mode 100644 index 0000000..47f1bbd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/analysis.py @@ -0,0 +1,224 @@ +""" +Module for statical analysis. +""" +from parso.python import tree + +from jedi._compatibility import force_unicode +from jedi import debug +from jedi.evaluate.helpers import is_string + + +CODES = { + 'attribute-error': (1, AttributeError, 'Potential AttributeError.'), + 'name-error': (2, NameError, 'Potential NameError.'), + 'import-error': (3, ImportError, 'Potential ImportError.'), + 'type-error-too-many-arguments': (4, TypeError, None), + 'type-error-too-few-arguments': (5, TypeError, None), + 'type-error-keyword-argument': (6, TypeError, None), + 'type-error-multiple-values': (7, TypeError, None), + 'type-error-star-star': (8, TypeError, None), + 'type-error-star': (9, TypeError, None), + 'type-error-operation': (10, TypeError, None), + 'type-error-not-iterable': (11, TypeError, None), + 'type-error-isinstance': (12, TypeError, None), + 'type-error-not-subscriptable': (13, TypeError, None), + 'value-error-too-many-values': (14, ValueError, None), + 'value-error-too-few-values': (15, ValueError, None), +} + + +class Error(object): + def __init__(self, name, module_path, start_pos, message=None): + self.path = module_path + self._start_pos = start_pos + self.name = name + if message is None: + message = CODES[self.name][2] + self.message = message + + @property + def line(self): + return self._start_pos[0] + + @property + def column(self): + return self._start_pos[1] + + @property + def code(self): + # The class name start + first = self.__class__.__name__[0] + return first + str(CODES[self.name][0]) + + def __unicode__(self): + return '%s:%s:%s: %s %s' % (self.path, self.line, self.column, + self.code, self.message) + + def __str__(self): + return self.__unicode__() + + def __eq__(self, other): + return (self.path == other.path and self.name == other.name and + self._start_pos == other._start_pos) + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self.path, self._start_pos, self.name)) + + def __repr__(self): + return '<%s %s: %s@%s,%s>' % (self.__class__.__name__, + self.name, self.path, + self._start_pos[0], self._start_pos[1]) + + +class Warning(Error): + pass + + +def add(node_context, error_name, node, message=None, typ=Error, payload=None): + exception = CODES[error_name][1] + if _check_for_exception_catch(node_context, node, exception, payload): + return + + # TODO this path is probably not right + module_context = node_context.get_root_context() + module_path = module_context.py__file__() + issue_instance = typ(error_name, module_path, node.start_pos, message) + debug.warning(str(issue_instance), format=False) + node_context.evaluator.analysis.append(issue_instance) + return issue_instance + + +def _check_for_setattr(instance): + """ + Check if there's any setattr method inside an instance. If so, return True. + """ + module = instance.get_root_context() + node = module.tree_node + if node is None: + # If it's a compiled module or doesn't have a tree_node + return False + + try: + stmt_names = node.get_used_names()['setattr'] + except KeyError: + return False + + return any(node.start_pos < n.start_pos < node.end_pos + # Check if it's a function called setattr. + and not (n.parent.type == 'funcdef' and n.parent.name == n) + for n in stmt_names) + + +def add_attribute_error(name_context, lookup_context, name): + message = ('AttributeError: %s has no attribute %s.' % (lookup_context, name)) + from jedi.evaluate.context.instance import CompiledInstanceName + # Check for __getattr__/__getattribute__ existance and issue a warning + # instead of an error, if that happens. + typ = Error + if lookup_context.is_instance() and not lookup_context.is_compiled(): + slot_names = lookup_context.get_function_slot_names(u'__getattr__') + \ + lookup_context.get_function_slot_names(u'__getattribute__') + for n in slot_names: + # TODO do we even get here? + if isinstance(name, CompiledInstanceName) and \ + n.parent_context.obj == object: + typ = Warning + break + + if _check_for_setattr(lookup_context): + typ = Warning + + payload = lookup_context, name + add(name_context, 'attribute-error', name, message, typ, payload) + + +def _check_for_exception_catch(node_context, jedi_name, exception, payload=None): + """ + Checks if a jedi object (e.g. `Statement`) sits inside a try/catch and + doesn't count as an error (if equal to `exception`). + Also checks `hasattr` for AttributeErrors and uses the `payload` to compare + it. + Returns True if the exception was catched. + """ + def check_match(cls, exception): + if not cls.is_class(): + return False + + for python_cls in exception.mro(): + if cls.py__name__() == python_cls.__name__ \ + and cls.parent_context == cls.evaluator.builtins_module: + return True + return False + + def check_try_for_except(obj, exception): + # Only nodes in try + iterator = iter(obj.children) + for branch_type in iterator: + colon = next(iterator) + suite = next(iterator) + if branch_type == 'try' \ + and not (branch_type.start_pos < jedi_name.start_pos <= suite.end_pos): + return False + + for node in obj.get_except_clause_tests(): + if node is None: + return True # An exception block that catches everything. + else: + except_classes = node_context.eval_node(node) + for cls in except_classes: + from jedi.evaluate.context import iterable + if isinstance(cls, iterable.Sequence) and \ + cls.array_type == 'tuple': + # multiple exceptions + for lazy_context in cls.py__iter__(): + for typ in lazy_context.infer(): + if check_match(typ, exception): + return True + else: + if check_match(cls, exception): + return True + + def check_hasattr(node, suite): + try: + assert suite.start_pos <= jedi_name.start_pos < suite.end_pos + assert node.type in ('power', 'atom_expr') + base = node.children[0] + assert base.type == 'name' and base.value == 'hasattr' + trailer = node.children[1] + assert trailer.type == 'trailer' + arglist = trailer.children[1] + assert arglist.type == 'arglist' + from jedi.evaluate.arguments import TreeArguments + args = list(TreeArguments(node_context.evaluator, node_context, arglist).unpack()) + # Arguments should be very simple + assert len(args) == 2 + + # Check name + key, lazy_context = args[1] + names = list(lazy_context.infer()) + assert len(names) == 1 and is_string(names[0]) + assert force_unicode(names[0].get_safe_value()) == payload[1].value + + # Check objects + key, lazy_context = args[0] + objects = lazy_context.infer() + return payload[0] in objects + except AssertionError: + return False + + obj = jedi_name + while obj is not None and not isinstance(obj, (tree.Function, tree.Class)): + if isinstance(obj, tree.Flow): + # try/except catch check + if obj.type == 'try_stmt' and check_try_for_except(obj, exception): + return True + # hasattr check + if exception == AttributeError and obj.type in ('if_stmt', 'while_stmt'): + if check_hasattr(obj.children[1], obj.children[3]): + return True + obj = obj.parent + + return False diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/arguments.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/arguments.py new file mode 100644 index 0000000..4e32653 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/arguments.py @@ -0,0 +1,382 @@ +import re + +from parso.python import tree + +from jedi._compatibility import zip_longest +from jedi import debug +from jedi.evaluate.utils import PushBackIterator +from jedi.evaluate import analysis +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \ + LazyTreeContext, get_merged_lazy_context +from jedi.evaluate.names import ParamName, TreeNameDefinition +from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet, ContextualizedNode +from jedi.evaluate.context import iterable +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.evaluate.param import get_executed_params_and_issues, ExecutedParam + + +def try_iter_content(types, depth=0): + """Helper method for static analysis.""" + if depth > 10: + # It's possible that a loop has references on itself (especially with + # CompiledObject). Therefore don't loop infinitely. + return + + for typ in types: + try: + f = typ.py__iter__ + except AttributeError: + pass + else: + for lazy_context in f(): + try_iter_content(lazy_context.infer(), depth + 1) + + +class ParamIssue(Exception): + pass + + +def repack_with_argument_clinic(string, keep_arguments_param=False, keep_callback_param=False): + """ + Transforms a function or method with arguments to the signature that is + given as an argument clinic notation. + + Argument clinic is part of CPython and used for all the functions that are + implemented in C (Python 3.7): + + str.split.__text_signature__ + # Results in: '($self, /, sep=None, maxsplit=-1)' + """ + clinic_args = list(_parse_argument_clinic(string)) + + def decorator(func): + def wrapper(context, *args, **kwargs): + if keep_arguments_param: + arguments = kwargs['arguments'] + else: + arguments = kwargs.pop('arguments') + if not keep_arguments_param: + kwargs.pop('callback', None) + try: + args += tuple(_iterate_argument_clinic( + context.evaluator, + arguments, + clinic_args + )) + except ParamIssue: + return NO_CONTEXTS + else: + return func(context, *args, **kwargs) + + return wrapper + return decorator + + +def _iterate_argument_clinic(evaluator, arguments, parameters): + """Uses a list with argument clinic information (see PEP 436).""" + iterator = PushBackIterator(arguments.unpack()) + for i, (name, optional, allow_kwargs, stars) in enumerate(parameters): + if stars == 1: + lazy_contexts = [] + for key, argument in iterator: + if key is not None: + iterator.push_back((key, argument)) + break + + lazy_contexts.append(argument) + yield ContextSet([iterable.FakeSequence(evaluator, u'tuple', lazy_contexts)]) + lazy_contexts + continue + elif stars == 2: + raise NotImplementedError() + key, argument = next(iterator, (None, None)) + if key is not None: + debug.warning('Keyword arguments in argument clinic are currently not supported.') + raise ParamIssue + if argument is None and not optional: + debug.warning('TypeError: %s expected at least %s arguments, got %s', + name, len(parameters), i) + raise ParamIssue + + context_set = NO_CONTEXTS if argument is None else argument.infer() + + if not context_set and not optional: + # For the stdlib we always want values. If we don't get them, + # that's ok, maybe something is too hard to resolve, however, + # we will not proceed with the evaluation of that function. + debug.warning('argument_clinic "%s" not resolvable.', name) + raise ParamIssue + yield context_set + + +def _parse_argument_clinic(string): + allow_kwargs = False + optional = False + while string: + # Optional arguments have to begin with a bracket. And should always be + # at the end of the arguments. This is therefore not a proper argument + # clinic implementation. `range()` for exmple allows an optional start + # value at the beginning. + match = re.match(r'(?:(?:(\[),? ?|, ?|)(\**\w+)|, ?/)\]*', string) + string = string[len(match.group(0)):] + if not match.group(2): # A slash -> allow named arguments + allow_kwargs = True + continue + optional = optional or bool(match.group(1)) + word = match.group(2) + stars = word.count('*') + word = word[stars:] + yield (word, optional, allow_kwargs, stars) + if stars: + allow_kwargs = True + + +class _AbstractArgumentsMixin(object): + def eval_all(self, funcdef=None): + """ + Evaluates all arguments as a support for static analysis + (normally Jedi). + """ + for key, lazy_context in self.unpack(): + types = lazy_context.infer() + try_iter_content(types) + + def unpack(self, funcdef=None): + raise NotImplementedError + + def get_executed_params_and_issues(self, execution_context): + return get_executed_params_and_issues(execution_context, self) + + def get_calling_nodes(self): + return [] + + +class AbstractArguments(_AbstractArgumentsMixin): + context = None + argument_node = None + trailer = None + + +class AnonymousArguments(AbstractArguments): + def get_executed_params_and_issues(self, execution_context): + from jedi.evaluate.dynamic import search_params + return search_params( + execution_context.evaluator, + execution_context, + execution_context.tree_node + ), [] + + def __repr__(self): + return '%s()' % self.__class__.__name__ + + +def unpack_arglist(arglist): + if arglist is None: + return + + # Allow testlist here as well for Python2's class inheritance + # definitions. + if not (arglist.type in ('arglist', 'testlist') or ( + # in python 3.5 **arg is an argument, not arglist + (arglist.type == 'argument') and + arglist.children[0] in ('*', '**'))): + yield 0, arglist + return + + iterator = iter(arglist.children) + for child in iterator: + if child == ',': + continue + elif child in ('*', '**'): + yield len(child.value), next(iterator) + elif child.type == 'argument' and \ + child.children[0] in ('*', '**'): + assert len(child.children) == 2 + yield len(child.children[0].value), child.children[1] + else: + yield 0, child + + +class TreeArguments(AbstractArguments): + def __init__(self, evaluator, context, argument_node, trailer=None): + """ + The argument_node is either a parser node or a list of evaluated + objects. Those evaluated objects may be lists of evaluated objects + themselves (one list for the first argument, one for the second, etc). + + :param argument_node: May be an argument_node or a list of nodes. + """ + self.argument_node = argument_node + self.context = context + self._evaluator = evaluator + self.trailer = trailer # Can be None, e.g. in a class definition. + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, *args, **kwargs): + return cls(*args, **kwargs) + + def unpack(self, funcdef=None): + named_args = [] + for star_count, el in unpack_arglist(self.argument_node): + if star_count == 1: + arrays = self.context.eval_node(el) + iterators = [_iterate_star_args(self.context, a, el, funcdef) + for a in arrays] + for values in list(zip_longest(*iterators)): + # TODO zip_longest yields None, that means this would raise + # an exception? + yield None, get_merged_lazy_context( + [v for v in values if v is not None] + ) + elif star_count == 2: + arrays = self.context.eval_node(el) + for dct in arrays: + for key, values in _star_star_dict(self.context, dct, el, funcdef): + yield key, values + else: + if el.type == 'argument': + c = el.children + if len(c) == 3: # Keyword argument. + named_args.append((c[0].value, LazyTreeContext(self.context, c[2]),)) + else: # Generator comprehension. + # Include the brackets with the parent. + sync_comp_for = el.children[1] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + comp = iterable.GeneratorComprehension( + self._evaluator, + defining_context=self.context, + sync_comp_for_node=sync_comp_for, + entry_node=el.children[0], + ) + yield None, LazyKnownContext(comp) + else: + yield None, LazyTreeContext(self.context, el) + + # Reordering arguments is necessary, because star args sometimes appear + # after named argument, but in the actual order it's prepended. + for named_arg in named_args: + yield named_arg + + def _as_tree_tuple_objects(self): + for star_count, argument in unpack_arglist(self.argument_node): + default = None + if argument.type == 'argument': + if len(argument.children) == 3: # Keyword argument. + argument, default = argument.children[::2] + yield argument, default, star_count + + def iter_calling_names_with_star(self): + for name, default, star_count in self._as_tree_tuple_objects(): + # TODO this function is a bit strange. probably refactor? + if not star_count or not isinstance(name, tree.Name): + continue + + yield TreeNameDefinition(self.context, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.argument_node) + + def get_calling_nodes(self): + from jedi.evaluate.dynamic import DynamicExecutedParams + old_arguments_list = [] + arguments = self + + while arguments not in old_arguments_list: + if not isinstance(arguments, TreeArguments): + break + + old_arguments_list.append(arguments) + for calling_name in reversed(list(arguments.iter_calling_names_with_star())): + names = calling_name.goto() + if len(names) != 1: + break + if not isinstance(names[0], ParamName): + break + param = names[0].get_param() + if isinstance(param, DynamicExecutedParams): + # For dynamic searches we don't even want to see errors. + return [] + if not isinstance(param, ExecutedParam): + break + if param.var_args is None: + break + arguments = param.var_args + break + + if arguments.argument_node is not None: + return [ContextualizedNode(arguments.context, arguments.argument_node)] + if arguments.trailer is not None: + return [ContextualizedNode(arguments.context, arguments.trailer)] + return [] + + +class ValuesArguments(AbstractArguments): + def __init__(self, values_list): + self._values_list = values_list + + def unpack(self, funcdef=None): + for values in self._values_list: + yield None, LazyKnownContexts(values) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._values_list) + + +class TreeArgumentsWrapper(_AbstractArgumentsMixin): + def __init__(self, arguments): + self._wrapped_arguments = arguments + + @property + def context(self): + return self._wrapped_arguments.context + + @property + def argument_node(self): + return self._wrapped_arguments.argument_node + + @property + def trailer(self): + return self._wrapped_arguments.trailer + + def unpack(self, func=None): + raise NotImplementedError + + def get_calling_nodes(self): + return self._wrapped_arguments.get_calling_nodes() + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_arguments) + + +def _iterate_star_args(context, array, input_node, funcdef=None): + if not array.py__getattribute__('__iter__'): + if funcdef is not None: + # TODO this funcdef should not be needed. + m = "TypeError: %s() argument after * must be a sequence, not %s" \ + % (funcdef.name.value, array) + analysis.add(context, 'type-error-star', input_node, message=m) + try: + iter_ = array.py__iter__ + except AttributeError: + pass + else: + for lazy_context in iter_(): + yield lazy_context + + +def _star_star_dict(context, array, input_node, funcdef): + from jedi.evaluate.context.instance import CompiledInstance + if isinstance(array, CompiledInstance) and array.name.string_name == 'dict': + # For now ignore this case. In the future add proper iterators and just + # make one call without crazy isinstance checks. + return {} + elif isinstance(array, iterable.Sequence) and array.array_type == 'dict': + return array.exact_key_items() + else: + if funcdef is not None: + m = "TypeError: %s argument after ** must be a mapping, not %s" \ + % (funcdef.name.value, array) + analysis.add(context, 'type-error-star-star', input_node, message=m) + return {} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/base_context.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/base_context.py new file mode 100644 index 0000000..8a03248 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/base_context.py @@ -0,0 +1,436 @@ +""" +Contexts are the "values" that Python would return. However Contexts are at the +same time also the "contexts" that a user is currently sitting in. + +A ContextSet is typically used to specify the return of a function or any other +static analysis operation. In jedi there are always multiple returns and not +just one. +""" +from functools import reduce +from operator import add +from parso.python.tree import ExprStmt, SyncCompFor + +from jedi import debug +from jedi._compatibility import zip_longest, unicode +from jedi.parser_utils import clean_scope_docstring +from jedi.common import BaseContextSet, BaseContext +from jedi.evaluate.helpers import SimpleGetItemNotFound +from jedi.evaluate.utils import safe_property +from jedi.evaluate.cache import evaluator_as_method_param_cache +from jedi.cache import memoize_method + +_sentinel = object() + + +class HelperContextMixin(object): + def get_root_context(self): + context = self + while True: + if context.parent_context is None: + return context + context = context.parent_context + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, *args, **kwargs): + return cls(*args, **kwargs) + + def execute(self, arguments): + return self.evaluator.execute(self, arguments=arguments) + + def execute_evaluated(self, *value_list): + from jedi.evaluate.arguments import ValuesArguments + arguments = ValuesArguments([ContextSet([value]) for value in value_list]) + return self.evaluator.execute(self, arguments) + + def execute_annotation(self): + return self.execute_evaluated() + + def gather_annotation_classes(self): + return ContextSet([self]) + + def merge_types_of_iterate(self, contextualized_node=None, is_async=False): + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self.iterate(contextualized_node, is_async) + ) + + def py__getattribute__(self, name_or_str, name_context=None, position=None, + search_global=False, is_goto=False, + analysis_errors=True): + """ + :param position: Position of the last statement -> tuple of line, column + """ + if name_context is None: + name_context = self + from jedi.evaluate import finder + f = finder.NameFinder(self.evaluator, self, name_context, name_or_str, + position, analysis_errors=analysis_errors) + filters = f.get_filters(search_global) + if is_goto: + return f.filter_name(filters) + return f.find(filters, attribute_lookup=not search_global) + + def py__await__(self): + await_context_set = self.py__getattribute__(u"__await__") + if not await_context_set: + debug.warning('Tried to run __await__ on context %s', self) + return await_context_set.execute_evaluated() + + def eval_node(self, node): + return self.evaluator.eval_element(self, node) + + def create_context(self, node, node_is_context=False, node_is_object=False): + return self.evaluator.create_context(self, node, node_is_context, node_is_object) + + def iterate(self, contextualized_node=None, is_async=False): + debug.dbg('iterate %s', self) + if is_async: + from jedi.evaluate.lazy_context import LazyKnownContexts + # TODO if no __aiter__ contexts are there, error should be: + # TypeError: 'async for' requires an object with __aiter__ method, got int + return iter([ + LazyKnownContexts( + self.py__getattribute__('__aiter__').execute_evaluated() + .py__getattribute__('__anext__').execute_evaluated() + .py__getattribute__('__await__').execute_evaluated() + .py__stop_iteration_returns() + ) # noqa + ]) + return self.py__iter__(contextualized_node) + + def is_sub_class_of(self, class_context): + for cls in self.py__mro__(): + if cls.is_same_class(class_context): + return True + return False + + def is_same_class(self, class2): + # Class matching should prefer comparisons that are not this function. + if type(class2).is_same_class != HelperContextMixin.is_same_class: + return class2.is_same_class(self) + return self == class2 + + +class Context(HelperContextMixin, BaseContext): + """ + Should be defined, otherwise the API returns empty types. + """ + predefined_names = {} + """ + To be defined by subclasses. + """ + tree_node = None + + @property + def api_type(self): + # By default just lower name of the class. Can and should be + # overwritten. + return self.__class__.__name__.lower() + + def py__getitem__(self, index_context_set, contextualized_node): + from jedi.evaluate import analysis + # TODO this context is probably not right. + analysis.add( + contextualized_node.context, + 'type-error-not-subscriptable', + contextualized_node.node, + message="TypeError: '%s' object is not subscriptable" % self + ) + return NO_CONTEXTS + + def py__iter__(self, contextualized_node=None): + if contextualized_node is not None: + from jedi.evaluate import analysis + analysis.add( + contextualized_node.context, + 'type-error-not-iterable', + contextualized_node.node, + message="TypeError: '%s' object is not iterable" % self) + return iter([]) + + def get_signatures(self): + return [] + + def is_class(self): + return False + + def is_instance(self): + return False + + def is_function(self): + return False + + def is_module(self): + return False + + def is_namespace(self): + return False + + def is_compiled(self): + return False + + def is_bound_method(self): + return False + + def py__bool__(self): + """ + Since Wrapper is a super class for classes, functions and modules, + the return value will always be true. + """ + return True + + def py__doc__(self): + try: + self.tree_node.get_doc_node + except AttributeError: + return '' + else: + return clean_scope_docstring(self.tree_node) + return None + + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + raise ValueError("There exists no safe value for context %s" % self) + return default + + def py__call__(self, arguments): + debug.warning("no execution possible %s", self) + return NO_CONTEXTS + + def py__stop_iteration_returns(self): + debug.warning("Not possible to return the stop iterations of %s", self) + return NO_CONTEXTS + + def get_qualified_names(self): + # Returns Optional[Tuple[str, ...]] + return None + + def is_stub(self): + # The root context knows if it's a stub or not. + return self.parent_context.is_stub() + + +def iterate_contexts(contexts, contextualized_node=None, is_async=False): + """ + Calls `iterate`, on all contexts but ignores the ordering and just returns + all contexts that the iterate functions yield. + """ + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in contexts.iterate(contextualized_node, is_async=is_async) + ) + + +class _ContextWrapperBase(HelperContextMixin): + predefined_names = {} + + @safe_property + def name(self): + from jedi.evaluate.names import ContextName + wrapped_name = self._wrapped_context.name + if wrapped_name.tree_name is not None: + return ContextName(self, wrapped_name.tree_name) + else: + from jedi.evaluate.compiled import CompiledContextName + return CompiledContextName(self, wrapped_name.string_name) + + @classmethod + @evaluator_as_method_param_cache() + def create_cached(cls, evaluator, *args, **kwargs): + return cls(*args, **kwargs) + + def __getattr__(self, name): + assert name != '_wrapped_context', 'Problem with _get_wrapped_context' + return getattr(self._wrapped_context, name) + + +class LazyContextWrapper(_ContextWrapperBase): + @safe_property + @memoize_method + def _wrapped_context(self): + with debug.increase_indent_cm('Resolve lazy context wrapper'): + return self._get_wrapped_context() + + def __repr__(self): + return '<%s>' % (self.__class__.__name__) + + def _get_wrapped_context(self): + raise NotImplementedError + + +class ContextWrapper(_ContextWrapperBase): + def __init__(self, wrapped_context): + self._wrapped_context = wrapped_context + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._wrapped_context) + + +class TreeContext(Context): + def __init__(self, evaluator, parent_context, tree_node): + super(TreeContext, self).__init__(evaluator, parent_context) + self.predefined_names = {} + self.tree_node = tree_node + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.tree_node) + + +class ContextualizedNode(object): + def __init__(self, context, node): + self.context = context + self.node = node + + def get_root_context(self): + return self.context.get_root_context() + + def infer(self): + return self.context.eval_node(self.node) + + def __repr__(self): + return '<%s: %s in %s>' % (self.__class__.__name__, self.node, self.context) + + +class ContextualizedName(ContextualizedNode): + # TODO merge with TreeNameDefinition?! + @property + def name(self): + return self.node + + def assignment_indexes(self): + """ + Returns an array of tuple(int, node) of the indexes that are used in + tuple assignments. + + For example if the name is ``y`` in the following code:: + + x, (y, z) = 2, '' + + would result in ``[(1, xyz_node), (0, yz_node)]``. + + When searching for b in the case ``a, *b, c = [...]`` it will return:: + + [(slice(1, -1), abc_node)] + """ + indexes = [] + is_star_expr = False + node = self.node.parent + compare = self.node + while node is not None: + if node.type in ('testlist', 'testlist_comp', 'testlist_star_expr', 'exprlist'): + for i, child in enumerate(node.children): + if child == compare: + index = int(i / 2) + if is_star_expr: + from_end = int((len(node.children) - i) / 2) + index = slice(index, -from_end) + indexes.insert(0, (index, node)) + break + else: + raise LookupError("Couldn't find the assignment.") + is_star_expr = False + elif node.type == 'star_expr': + is_star_expr = True + elif isinstance(node, (ExprStmt, SyncCompFor)): + break + + compare = node + node = node.parent + return indexes + + +def _getitem(context, index_contexts, contextualized_node): + from jedi.evaluate.context.iterable import Slice + + # The actual getitem call. + simple_getitem = getattr(context, 'py__simple_getitem__', None) + + result = NO_CONTEXTS + unused_contexts = set() + for index_context in index_contexts: + if simple_getitem is not None: + index = index_context + if isinstance(index_context, Slice): + index = index.obj + + try: + method = index.get_safe_value + except AttributeError: + pass + else: + index = method(default=None) + + if type(index) in (float, int, str, unicode, slice, bytes): + try: + result |= simple_getitem(index) + continue + except SimpleGetItemNotFound: + pass + + unused_contexts.add(index_context) + + # The index was somehow not good enough or simply a wrong type. + # Therefore we now iterate through all the contexts and just take + # all results. + if unused_contexts or not index_contexts: + result |= context.py__getitem__( + ContextSet(unused_contexts), + contextualized_node + ) + debug.dbg('py__getitem__ result: %s', result) + return result + + +class ContextSet(BaseContextSet): + def py__class__(self): + return ContextSet(c.py__class__() for c in self._set) + + def iterate(self, contextualized_node=None, is_async=False): + from jedi.evaluate.lazy_context import get_merged_lazy_context + type_iters = [c.iterate(contextualized_node, is_async=is_async) for c in self._set] + for lazy_contexts in zip_longest(*type_iters): + yield get_merged_lazy_context( + [l for l in lazy_contexts if l is not None] + ) + + def execute(self, arguments): + return ContextSet.from_sets(c.evaluator.execute(c, arguments) for c in self._set) + + def execute_evaluated(self, *args, **kwargs): + return ContextSet.from_sets(c.execute_evaluated(*args, **kwargs) for c in self._set) + + def py__getattribute__(self, *args, **kwargs): + if kwargs.get('is_goto'): + return reduce(add, [c.py__getattribute__(*args, **kwargs) for c in self._set], []) + return ContextSet.from_sets(c.py__getattribute__(*args, **kwargs) for c in self._set) + + def get_item(self, *args, **kwargs): + return ContextSet.from_sets(_getitem(c, *args, **kwargs) for c in self._set) + + def try_merge(self, function_name): + context_set = self.__class__([]) + for c in self._set: + try: + method = getattr(c, function_name) + except AttributeError: + pass + else: + context_set |= method() + return context_set + + def gather_annotation_classes(self): + return ContextSet.from_sets([c.gather_annotation_classes() for c in self._set]) + + def get_signatures(self): + return [sig for c in self._set for sig in c.get_signatures()] + + +NO_CONTEXTS = ContextSet([]) + + +def iterator_to_context_set(func): + def wrapper(*args, **kwargs): + return ContextSet(func(*args, **kwargs)) + + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/cache.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/cache.py new file mode 100644 index 0000000..e865a0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/cache.py @@ -0,0 +1,123 @@ +""" +- the popular ``_memoize_default`` works like a typical memoize and returns the + default otherwise. +- ``CachedMetaClass`` uses ``_memoize_default`` to do the same with classes. +""" + +from jedi import debug + +_NO_DEFAULT = object() +_RECURSION_SENTINEL = object() + + +def _memoize_default(default=_NO_DEFAULT, evaluator_is_first_arg=False, second_arg_is_evaluator=False): + """ This is a typical memoization decorator, BUT there is one difference: + To prevent recursion it sets defaults. + + Preventing recursion is in this case the much bigger use than speed. I + don't think, that there is a big speed difference, but there are many cases + where recursion could happen (think about a = b; b = a). + """ + def func(function): + def wrapper(obj, *args, **kwargs): + # TODO These checks are kind of ugly and slow. + if evaluator_is_first_arg: + cache = obj.memoize_cache + elif second_arg_is_evaluator: + cache = args[0].memoize_cache # needed for meta classes + else: + cache = obj.evaluator.memoize_cache + + try: + memo = cache[function] + except KeyError: + cache[function] = memo = {} + + key = (obj, args, frozenset(kwargs.items())) + if key in memo: + return memo[key] + else: + if default is not _NO_DEFAULT: + memo[key] = default + rv = function(obj, *args, **kwargs) + memo[key] = rv + return rv + return wrapper + + return func + + +def evaluator_function_cache(default=_NO_DEFAULT): + def decorator(func): + return _memoize_default(default=default, evaluator_is_first_arg=True)(func) + + return decorator + + +def evaluator_method_cache(default=_NO_DEFAULT): + def decorator(func): + return _memoize_default(default=default)(func) + + return decorator + + +def evaluator_as_method_param_cache(): + def decorator(call): + return _memoize_default(second_arg_is_evaluator=True)(call) + + return decorator + + +class CachedMetaClass(type): + """ + This is basically almost the same than the decorator above, it just caches + class initializations. Either you do it this way or with decorators, but + with decorators you lose class access (isinstance, etc). + """ + @evaluator_as_method_param_cache() + def __call__(self, *args, **kwargs): + return super(CachedMetaClass, self).__call__(*args, **kwargs) + + +def evaluator_method_generator_cache(): + """ + This is a special memoizer. It memoizes generators and also checks for + recursion errors and returns no further iterator elemends in that case. + """ + def func(function): + def wrapper(obj, *args, **kwargs): + cache = obj.evaluator.memoize_cache + try: + memo = cache[function] + except KeyError: + cache[function] = memo = {} + + key = (obj, args, frozenset(kwargs.items())) + + if key in memo: + actual_generator, cached_lst = memo[key] + else: + actual_generator = function(obj, *args, **kwargs) + cached_lst = [] + memo[key] = actual_generator, cached_lst + + i = 0 + while True: + try: + next_element = cached_lst[i] + if next_element is _RECURSION_SENTINEL: + debug.warning('Found a generator recursion for %s' % obj) + # This means we have hit a recursion. + return + except IndexError: + cached_lst.append(_RECURSION_SENTINEL) + next_element = next(actual_generator, None) + if next_element is None: + cached_lst.pop() + return + cached_lst[-1] = next_element + yield next_element + i += 1 + return wrapper + + return func diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/__init__.py new file mode 100644 index 0000000..cfda727 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/__init__.py @@ -0,0 +1,64 @@ +from jedi._compatibility import unicode +from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \ + CompiledObjectFilter, CompiledContextName, create_from_access_path +from jedi.evaluate.base_context import ContextWrapper, LazyContextWrapper + + +def builtin_from_name(evaluator, string): + typing_builtins_module = evaluator.builtins_module + if string in ('None', 'True', 'False'): + builtins, = typing_builtins_module.non_stub_context_set + filter_ = next(builtins.get_filters()) + else: + filter_ = next(typing_builtins_module.get_filters()) + name, = filter_.get(string) + context, = name.infer() + return context + + +class CompiledValue(LazyContextWrapper): + def __init__(self, compiled_obj): + self.evaluator = compiled_obj.evaluator + self._compiled_obj = compiled_obj + + def __getattribute__(self, name): + if name in ('get_safe_value', 'execute_operation', 'access_handle', + 'negate', 'py__bool__', 'is_compiled'): + return getattr(self._compiled_obj, name) + return super(CompiledValue, self).__getattribute__(name) + + def _get_wrapped_context(self): + instance, = builtin_from_name( + self.evaluator, self._compiled_obj.name.string_name).execute_evaluated() + return instance + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj) + + +def create_simple_object(evaluator, obj): + """ + Only allows creations of objects that are easily picklable across Python + versions. + """ + assert type(obj) in (int, float, str, bytes, unicode, slice, complex, bool), obj + compiled_obj = create_from_access_path( + evaluator, + evaluator.compiled_subprocess.create_simple_object(obj) + ) + return CompiledValue(compiled_obj) + + +def get_string_context_set(evaluator): + return builtin_from_name(evaluator, u'str').execute_evaluated() + + +def load_module(evaluator, dotted_name, **kwargs): + # Temporary, some tensorflow builtins cannot be loaded, so it's tried again + # and again and it's really slow. + if dotted_name.startswith('tensorflow.'): + return None + access_path = evaluator.compiled_subprocess.load_module(dotted_name=dotted_name, **kwargs) + if access_path is None: + return None + return create_from_access_path(evaluator, access_path) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/access.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/access.py new file mode 100644 index 0000000..18aacf5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/access.py @@ -0,0 +1,497 @@ +from __future__ import print_function +import inspect +import types +import sys +import operator as op +from collections import namedtuple + +from jedi._compatibility import unicode, is_py3, builtins, \ + py_version, force_unicode +from jedi.evaluate.compiled.getattr_static import getattr_static + +ALLOWED_GETITEM_TYPES = (str, list, tuple, unicode, bytes, bytearray, dict) + +MethodDescriptorType = type(str.replace) +# These are not considered classes and access is granted even though they have +# a __class__ attribute. +NOT_CLASS_TYPES = ( + types.BuiltinFunctionType, + types.CodeType, + types.FrameType, + types.FunctionType, + types.GeneratorType, + types.GetSetDescriptorType, + types.LambdaType, + types.MemberDescriptorType, + types.MethodType, + types.ModuleType, + types.TracebackType, + MethodDescriptorType +) + +if is_py3: + NOT_CLASS_TYPES += ( + types.MappingProxyType, + types.SimpleNamespace, + types.DynamicClassAttribute, + ) + + +# Those types don't exist in typing. +MethodDescriptorType = type(str.replace) +WrapperDescriptorType = type(set.__iter__) +# `object.__subclasshook__` is an already executed descriptor. +object_class_dict = type.__dict__["__dict__"].__get__(object) +ClassMethodDescriptorType = type(object_class_dict['__subclasshook__']) + +_sentinel = object() + +# Maps Python syntax to the operator module. +COMPARISON_OPERATORS = { + '==': op.eq, + '!=': op.ne, + 'is': op.is_, + 'is not': op.is_not, + '<': op.lt, + '<=': op.le, + '>': op.gt, + '>=': op.ge, +} + +_OPERATORS = { + '+': op.add, + '-': op.sub, +} +_OPERATORS.update(COMPARISON_OPERATORS) + +ALLOWED_DESCRIPTOR_ACCESS = ( + types.FunctionType, + types.GetSetDescriptorType, + types.MemberDescriptorType, + MethodDescriptorType, + WrapperDescriptorType, + ClassMethodDescriptorType, + staticmethod, + classmethod, +) + + +def safe_getattr(obj, name, default=_sentinel): + try: + attr, is_get_descriptor = getattr_static(obj, name) + except AttributeError: + if default is _sentinel: + raise + return default + else: + if isinstance(attr, ALLOWED_DESCRIPTOR_ACCESS): + # In case of descriptors that have get methods we cannot return + # it's value, because that would mean code execution. + # Since it's an isinstance call, code execution is still possible, + # but this is not really a security feature, but much more of a + # safety feature. Code execution is basically always possible when + # a module is imported. This is here so people don't shoot + # themselves in the foot. + return getattr(obj, name) + return attr + + +SignatureParam = namedtuple( + 'SignatureParam', + 'name has_default default default_string has_annotation annotation annotation_string kind_name' +) + + +def compiled_objects_cache(attribute_name): + def decorator(func): + """ + This decorator caches just the ids, oopposed to caching the object itself. + Caching the id has the advantage that an object doesn't need to be + hashable. + """ + def wrapper(evaluator, obj, parent_context=None): + cache = getattr(evaluator, attribute_name) + # Do a very cheap form of caching here. + key = id(obj) + try: + cache[key] + return cache[key][0] + except KeyError: + # TODO wuaaaarrghhhhhhhh + if attribute_name == 'mixed_cache': + result = func(evaluator, obj, parent_context) + else: + result = func(evaluator, obj) + # Need to cache all of them, otherwise the id could be overwritten. + cache[key] = result, obj, parent_context + return result + return wrapper + + return decorator + + +def create_access(evaluator, obj): + return evaluator.compiled_subprocess.get_or_create_access_handle(obj) + + +def load_module(evaluator, dotted_name, sys_path): + temp, sys.path = sys.path, sys_path + try: + __import__(dotted_name) + except ImportError: + # If a module is "corrupt" or not really a Python module or whatever. + print('Module %s not importable in path %s.' % (dotted_name, sys_path), file=sys.stderr) + return None + except Exception: + # Since __import__ pretty much makes code execution possible, just + # catch any error here and print it. + import traceback + print("Cannot import:\n%s" % traceback.format_exc(), file=sys.stderr) + return None + finally: + sys.path = temp + + # Just access the cache after import, because of #59 as well as the very + # complicated import structure of Python. + module = sys.modules[dotted_name] + return create_access_path(evaluator, module) + + +class AccessPath(object): + def __init__(self, accesses): + self.accesses = accesses + + # Writing both of these methods here looks a bit ridiculous. However with + # the differences of Python 2/3 it's actually necessary, because we will + # otherwise have a accesses attribute that is bytes instead of unicode. + def __getstate__(self): + return self.accesses + + def __setstate__(self, value): + self.accesses = value + + +def create_access_path(evaluator, obj): + access = create_access(evaluator, obj) + return AccessPath(access.get_access_path_tuples()) + + +def _force_unicode_decorator(func): + return lambda *args, **kwargs: force_unicode(func(*args, **kwargs)) + + +def get_api_type(obj): + if inspect.isclass(obj): + return u'class' + elif inspect.ismodule(obj): + return u'module' + elif inspect.isbuiltin(obj) or inspect.ismethod(obj) \ + or inspect.ismethoddescriptor(obj) or inspect.isfunction(obj): + return u'function' + # Everything else... + return u'instance' + + +class DirectObjectAccess(object): + def __init__(self, evaluator, obj): + self._evaluator = evaluator + self._obj = obj + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.get_repr()) + + def _create_access(self, obj): + return create_access(self._evaluator, obj) + + def _create_access_path(self, obj): + return create_access_path(self._evaluator, obj) + + def py__bool__(self): + return bool(self._obj) + + def py__file__(self): + try: + return self._obj.__file__ + except AttributeError: + return None + + def py__doc__(self): + return force_unicode(inspect.getdoc(self._obj)) or u'' + + def py__name__(self): + if not _is_class_instance(self._obj) or \ + inspect.ismethoddescriptor(self._obj): # slots + cls = self._obj + else: + try: + cls = self._obj.__class__ + except AttributeError: + # happens with numpy.core.umath._UFUNC_API (you get it + # automatically by doing `import numpy`. + return None + + try: + return force_unicode(cls.__name__) + except AttributeError: + return None + + def py__mro__accesses(self): + return tuple(self._create_access_path(cls) for cls in self._obj.__mro__[1:]) + + def py__getitem__all_values(self): + if isinstance(self._obj, dict): + return [self._create_access_path(v) for v in self._obj.values()] + return self.py__iter__list() + + def py__simple_getitem__(self, index): + if type(self._obj) not in ALLOWED_GETITEM_TYPES: + # Get rid of side effects, we won't call custom `__getitem__`s. + return None + + return self._create_access_path(self._obj[index]) + + def py__iter__list(self): + if not hasattr(self._obj, '__getitem__'): + return None + + if type(self._obj) not in ALLOWED_GETITEM_TYPES: + # Get rid of side effects, we won't call custom `__getitem__`s. + return [] + + lst = [] + for i, part in enumerate(self._obj): + if i > 20: + # Should not go crazy with large iterators + break + lst.append(self._create_access_path(part)) + return lst + + def py__class__(self): + return self._create_access_path(self._obj.__class__) + + def py__bases__(self): + return [self._create_access_path(base) for base in self._obj.__bases__] + + def py__path__(self): + return self._obj.__path__ + + @_force_unicode_decorator + def get_repr(self): + builtins = 'builtins', '__builtin__' + + if inspect.ismodule(self._obj): + return repr(self._obj) + # Try to avoid execution of the property. + if safe_getattr(self._obj, '__module__', default='') in builtins: + return repr(self._obj) + + type_ = type(self._obj) + if type_ == type: + return type.__repr__(self._obj) + + if safe_getattr(type_, '__module__', default='') in builtins: + # Allow direct execution of repr for builtins. + return repr(self._obj) + return object.__repr__(self._obj) + + def is_class(self): + return inspect.isclass(self._obj) + + def is_module(self): + return inspect.ismodule(self._obj) + + def is_instance(self): + return _is_class_instance(self._obj) + + def ismethoddescriptor(self): + return inspect.ismethoddescriptor(self._obj) + + def get_qualified_names(self): + def try_to_get_name(obj): + return getattr(obj, '__qualname__', getattr(obj, '__name__', None)) + + if self.is_module(): + return () + name = try_to_get_name(self._obj) + if name is None: + name = try_to_get_name(type(self._obj)) + if name is None: + return () + return tuple(name.split('.')) + + def dir(self): + return list(map(force_unicode, dir(self._obj))) + + def has_iter(self): + try: + iter(self._obj) + return True + except TypeError: + return False + + def is_allowed_getattr(self, name): + # TODO this API is ugly. + try: + attr, is_get_descriptor = getattr_static(self._obj, name) + except AttributeError: + return False, False + else: + if is_get_descriptor and type(attr) not in ALLOWED_DESCRIPTOR_ACCESS: + # In case of descriptors that have get methods we cannot return + # it's value, because that would mean code execution. + return True, True + return True, False + + def getattr_paths(self, name, default=_sentinel): + try: + return_obj = getattr(self._obj, name) + except Exception as e: + if default is _sentinel: + if isinstance(e, AttributeError): + # Happens e.g. in properties of + # PyQt4.QtGui.QStyleOptionComboBox.currentText + # -> just set it to None + raise + # Just in case anything happens, return an AttributeError. It + # should not crash. + raise AttributeError + return_obj = default + access = self._create_access(return_obj) + if inspect.ismodule(return_obj): + return [access] + + module = inspect.getmodule(return_obj) + if module is None: + module = inspect.getmodule(type(return_obj)) + if module is None: + module = builtins + return [self._create_access(module), access] + + def get_safe_value(self): + if type(self._obj) in (bool, bytes, float, int, str, unicode, slice): + return self._obj + raise ValueError("Object is type %s and not simple" % type(self._obj)) + + def get_api_type(self): + return get_api_type(self._obj) + + def get_access_path_tuples(self): + accesses = [create_access(self._evaluator, o) for o in self._get_objects_path()] + return [(access.py__name__(), access) for access in accesses] + + def _get_objects_path(self): + def get(): + obj = self._obj + yield obj + try: + obj = obj.__objclass__ + except AttributeError: + pass + else: + yield obj + + try: + # Returns a dotted string path. + imp_plz = obj.__module__ + except AttributeError: + # Unfortunately in some cases like `int` there's no __module__ + if not inspect.ismodule(obj): + yield builtins + else: + if imp_plz is None: + # Happens for example in `(_ for _ in []).send.__module__`. + yield builtins + else: + try: + yield sys.modules[imp_plz] + except KeyError: + # __module__ can be something arbitrary that doesn't exist. + yield builtins + + return list(reversed(list(get()))) + + def execute_operation(self, other_access_handle, operator): + other_access = other_access_handle.access + op = _OPERATORS[operator] + return self._create_access_path(op(self._obj, other_access._obj)) + + def needs_type_completions(self): + return inspect.isclass(self._obj) and self._obj != type + + def get_signature_params(self): + return [ + SignatureParam( + name=p.name, + has_default=p.default is not p.empty, + default=self._create_access_path(p.default), + default_string=repr(p.default), + has_annotation=p.annotation is not p.empty, + annotation=self._create_access_path(p.annotation), + annotation_string=str(p.default), + kind_name=str(p.kind) + ) for p in self._get_signature().parameters.values() + ] + + def _get_signature(self): + obj = self._obj + if py_version < 33: + raise ValueError("inspect.signature was introduced in 3.3") + if py_version == 34: + # In 3.4 inspect.signature are wrong for str and int. This has + # been fixed in 3.5. The signature of object is returned, + # because no signature was found for str. Here we imitate 3.5 + # logic and just ignore the signature if the magic methods + # don't match object. + # 3.3 doesn't even have the logic and returns nothing for str + # and classes that inherit from object. + user_def = inspect._signature_get_user_defined_method + if (inspect.isclass(obj) + and not user_def(type(obj), '__init__') + and not user_def(type(obj), '__new__') + and (obj.__init__ != object.__init__ + or obj.__new__ != object.__new__)): + raise ValueError + + try: + return inspect.signature(obj) + except (RuntimeError, TypeError): + # Reading the code of the function in Python 3.6 implies there are + # at least these errors that might occur if something is wrong with + # the signature. In that case we just want a simple escape for now. + raise ValueError + + def get_return_annotation(self): + try: + o = self._obj.__annotations__.get('return') + except AttributeError: + return None + + if o is None: + return None + + return self._create_access_path(o) + + def negate(self): + return self._create_access_path(-self._obj) + + def get_dir_infos(self): + """ + Used to return a couple of infos that are needed when accessing the sub + objects of an objects + """ + # TODO is_allowed_getattr might raise an AttributeError + tuples = dict( + (force_unicode(name), self.is_allowed_getattr(name)) + for name in self.dir() + ) + return self.needs_type_completions(), tuples + + +def _is_class_instance(obj): + """Like inspect.* methods.""" + try: + cls = obj.__class__ + except AttributeError: + return False + else: + return cls != type and not issubclass(cls, NOT_CLASS_TYPES) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/context.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/context.py new file mode 100644 index 0000000..731fce0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/context.py @@ -0,0 +1,541 @@ +""" +Imitate the parser representation. +""" +import re +from functools import partial + +from jedi import debug +from jedi.evaluate.utils import to_list +from jedi._compatibility import force_unicode, Parameter, cast_path +from jedi.cache import underscore_memoization, memoize_method +from jedi.evaluate.filters import AbstractFilter +from jedi.evaluate.names import AbstractNameDefinition, ContextNameMixin, \ + ParamNameInterface +from jedi.evaluate.base_context import Context, ContextSet, NO_CONTEXTS +from jedi.evaluate.lazy_context import LazyKnownContext +from jedi.evaluate.compiled.access import _sentinel +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate.helpers import reraise_getitem_errors +from jedi.evaluate.signature import BuiltinSignature + + +class CheckAttribute(object): + """Raises an AttributeError if the attribute X isn't available.""" + def __init__(self, check_name=None): + # Remove the py in front of e.g. py__call__. + self.check_name = check_name + + def __call__(self, func): + self.func = func + if self.check_name is None: + self.check_name = force_unicode(func.__name__[2:]) + return self + + def __get__(self, instance, owner): + if instance is None: + return self + + # This might raise an AttributeError. That's wanted. + instance.access_handle.getattr_paths(self.check_name) + return partial(self.func, instance) + + +class CompiledObject(Context): + def __init__(self, evaluator, access_handle, parent_context=None): + super(CompiledObject, self).__init__(evaluator, parent_context) + self.access_handle = access_handle + + def py__call__(self, arguments): + return_annotation = self.access_handle.get_return_annotation() + if return_annotation is not None: + # TODO the return annotation may also be a string. + return create_from_access_path(self.evaluator, return_annotation).execute_annotation() + + try: + self.access_handle.getattr_paths(u'__call__') + except AttributeError: + return super(CompiledObject, self).py__call__(arguments) + else: + if self.access_handle.is_class(): + from jedi.evaluate.context import CompiledInstance + return ContextSet([ + CompiledInstance(self.evaluator, self.parent_context, self, arguments) + ]) + else: + return ContextSet(self._execute_function(arguments)) + + @CheckAttribute() + def py__class__(self): + return create_from_access_path(self.evaluator, self.access_handle.py__class__()) + + @CheckAttribute() + def py__mro__(self): + return (self,) + tuple( + create_from_access_path(self.evaluator, access) + for access in self.access_handle.py__mro__accesses() + ) + + @CheckAttribute() + def py__bases__(self): + return tuple( + create_from_access_path(self.evaluator, access) + for access in self.access_handle.py__bases__() + ) + + @CheckAttribute() + def py__path__(self): + return map(cast_path, self.access_handle.py__path__()) + + @property + def string_names(self): + # For modules + name = self.py__name__() + if name is None: + return () + return tuple(name.split('.')) + + def get_qualified_names(self): + return self.access_handle.get_qualified_names() + + def py__bool__(self): + return self.access_handle.py__bool__() + + def py__file__(self): + return cast_path(self.access_handle.py__file__()) + + def is_class(self): + return self.access_handle.is_class() + + def is_module(self): + return self.access_handle.is_module() + + def is_compiled(self): + return True + + def is_stub(self): + return False + + def is_instance(self): + return self.access_handle.is_instance() + + def py__doc__(self): + return self.access_handle.py__doc__() + + @to_list + def get_param_names(self): + try: + signature_params = self.access_handle.get_signature_params() + except ValueError: # Has no signature + params_str, ret = self._parse_function_doc() + if not params_str: + tokens = [] + else: + tokens = params_str.split(',') + if self.access_handle.ismethoddescriptor(): + tokens.insert(0, 'self') + for p in tokens: + name, _, default = p.strip().partition('=') + yield UnresolvableParamName(self, name, default) + else: + for signature_param in signature_params: + yield SignatureParamName(self, signature_param) + + def get_signatures(self): + _, return_string = self._parse_function_doc() + return [BuiltinSignature(self, return_string)] + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.access_handle.get_repr()) + + @underscore_memoization + def _parse_function_doc(self): + doc = self.py__doc__() + if doc is None: + return '', '' + + return _parse_function_doc(doc) + + @property + def api_type(self): + return self.access_handle.get_api_type() + + @underscore_memoization + def _cls(self): + """ + We used to limit the lookups for instantiated objects like list(), but + this is not the case anymore. Python itself + """ + # Ensures that a CompiledObject is returned that is not an instance (like list) + return self + + def get_filters(self, search_global=False, is_instance=False, + until_position=None, origin_scope=None): + yield self._ensure_one_filter(is_instance) + + @memoize_method + def _ensure_one_filter(self, is_instance): + """ + search_global shouldn't change the fact that there's one dict, this way + there's only one `object`. + """ + return CompiledObjectFilter(self.evaluator, self, is_instance) + + @CheckAttribute(u'__getitem__') + def py__simple_getitem__(self, index): + with reraise_getitem_errors(IndexError, KeyError, TypeError): + access = self.access_handle.py__simple_getitem__(index) + if access is None: + return NO_CONTEXTS + + return ContextSet([create_from_access_path(self.evaluator, access)]) + + def py__getitem__(self, index_context_set, contextualized_node): + all_access_paths = self.access_handle.py__getitem__all_values() + if all_access_paths is None: + # This means basically that no __getitem__ has been defined on this + # object. + return super(CompiledObject, self).py__getitem__(index_context_set, contextualized_node) + return ContextSet( + create_from_access_path(self.evaluator, access) + for access in all_access_paths + ) + + def py__iter__(self, contextualized_node=None): + # Python iterators are a bit strange, because there's no need for + # the __iter__ function as long as __getitem__ is defined (it will + # just start with __getitem__(0). This is especially true for + # Python 2 strings, where `str.__iter__` is not even defined. + if not self.access_handle.has_iter(): + for x in super(CompiledObject, self).py__iter__(contextualized_node): + yield x + + access_path_list = self.access_handle.py__iter__list() + if access_path_list is None: + # There is no __iter__ method on this object. + return + + for access in access_path_list: + yield LazyKnownContext(create_from_access_path(self.evaluator, access)) + + def py__name__(self): + return self.access_handle.py__name__() + + @property + def name(self): + name = self.py__name__() + if name is None: + name = self.access_handle.get_repr() + return CompiledContextName(self, name) + + def _execute_function(self, params): + from jedi.evaluate import docstrings + from jedi.evaluate.compiled import builtin_from_name + if self.api_type != 'function': + return + + for name in self._parse_function_doc()[1].split(): + try: + # TODO wtf is this? this is exactly the same as the thing + # below. It uses getattr as well. + self.evaluator.builtins_module.access_handle.getattr_paths(name) + except AttributeError: + continue + else: + bltn_obj = builtin_from_name(self.evaluator, name) + for result in self.evaluator.execute(bltn_obj, params): + yield result + for type_ in docstrings.infer_return_types(self): + yield type_ + + def get_safe_value(self, default=_sentinel): + try: + return self.access_handle.get_safe_value() + except ValueError: + if default == _sentinel: + raise + return default + + def execute_operation(self, other, operator): + return create_from_access_path( + self.evaluator, + self.access_handle.execute_operation(other.access_handle, operator) + ) + + def negate(self): + return create_from_access_path(self.evaluator, self.access_handle.negate()) + + def get_metaclasses(self): + return NO_CONTEXTS + + +class CompiledName(AbstractNameDefinition): + def __init__(self, evaluator, parent_context, name): + self._evaluator = evaluator + self.parent_context = parent_context + self.string_name = name + + def _get_qualified_names(self): + parent_qualified_names = self.parent_context.get_qualified_names() + return parent_qualified_names + (self.string_name,) + + def __repr__(self): + try: + name = self.parent_context.name # __name__ is not defined all the time + except AttributeError: + name = None + return '<%s: (%s).%s>' % (self.__class__.__name__, name, self.string_name) + + @property + def api_type(self): + api = self.infer() + # If we can't find the type, assume it is an instance variable + if not api: + return "instance" + return next(iter(api)).api_type + + @underscore_memoization + def infer(self): + return ContextSet([_create_from_name( + self._evaluator, self.parent_context, self.string_name + )]) + + +class SignatureParamName(ParamNameInterface, AbstractNameDefinition): + def __init__(self, compiled_obj, signature_param): + self.parent_context = compiled_obj.parent_context + self._signature_param = signature_param + + @property + def string_name(self): + return self._signature_param.name + + def to_string(self): + s = self._kind_string() + self.string_name + if self._signature_param.has_annotation: + s += ': ' + self._signature_param.annotation_string + if self._signature_param.has_default: + s += '=' + self._signature_param.default_string + return s + + def get_kind(self): + return getattr(Parameter, self._signature_param.kind_name) + + def infer(self): + p = self._signature_param + evaluator = self.parent_context.evaluator + contexts = NO_CONTEXTS + if p.has_default: + contexts = ContextSet([create_from_access_path(evaluator, p.default)]) + if p.has_annotation: + annotation = create_from_access_path(evaluator, p.annotation) + contexts |= annotation.execute_evaluated() + return contexts + + +class UnresolvableParamName(ParamNameInterface, AbstractNameDefinition): + def __init__(self, compiled_obj, name, default): + self.parent_context = compiled_obj.parent_context + self.string_name = name + self._default = default + + def get_kind(self): + return Parameter.POSITIONAL_ONLY + + def to_string(self): + string = self.string_name + if self._default: + string += '=' + self._default + return string + + def infer(self): + return NO_CONTEXTS + + +class CompiledContextName(ContextNameMixin, AbstractNameDefinition): + def __init__(self, context, name): + self.string_name = name + self._context = context + self.parent_context = context.parent_context + + +class EmptyCompiledName(AbstractNameDefinition): + """ + Accessing some names will raise an exception. To avoid not having any + completions, just give Jedi the option to return this object. It infers to + nothing. + """ + def __init__(self, evaluator, name): + self.parent_context = evaluator.builtins_module + self.string_name = name + + def infer(self): + return NO_CONTEXTS + + +class CompiledObjectFilter(AbstractFilter): + name_class = CompiledName + + def __init__(self, evaluator, compiled_object, is_instance=False): + self._evaluator = evaluator + self.compiled_object = compiled_object + self.is_instance = is_instance + + def get(self, name): + return self._get( + name, + lambda: self.compiled_object.access_handle.is_allowed_getattr(name), + lambda: self.compiled_object.access_handle.dir(), + check_has_attribute=True + ) + + def _get(self, name, allowed_getattr_callback, dir_callback, check_has_attribute=False): + """ + To remove quite a few access calls we introduced the callback here. + """ + has_attribute, is_descriptor = allowed_getattr_callback() + if check_has_attribute and not has_attribute: + return [] + + # Always use unicode objects in Python 2 from here. + name = force_unicode(name) + + if (is_descriptor and not self._evaluator.allow_descriptor_getattr) or not has_attribute: + return [self._get_cached_name(name, is_empty=True)] + + if self.is_instance and name not in dir_callback(): + return [] + return [self._get_cached_name(name)] + + @memoize_method + def _get_cached_name(self, name, is_empty=False): + if is_empty: + return EmptyCompiledName(self._evaluator, name) + else: + return self._create_name(name) + + def values(self): + from jedi.evaluate.compiled import builtin_from_name + names = [] + needs_type_completions, dir_infos = self.compiled_object.access_handle.get_dir_infos() + for name in dir_infos: + names += self._get( + name, + lambda: dir_infos[name], + lambda: dir_infos.keys(), + ) + + # ``dir`` doesn't include the type names. + if not self.is_instance and needs_type_completions: + for filter in builtin_from_name(self._evaluator, u'type').get_filters(): + names += filter.values() + return names + + def _create_name(self, name): + return self.name_class(self._evaluator, self.compiled_object, name) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, self.compiled_object) + + +docstr_defaults = { + 'floating point number': u'float', + 'character': u'str', + 'integer': u'int', + 'dictionary': u'dict', + 'string': u'str', +} + + +def _parse_function_doc(doc): + """ + Takes a function and returns the params and return value as a tuple. + This is nothing more than a docstring parser. + + TODO docstrings like utime(path, (atime, mtime)) and a(b [, b]) -> None + TODO docstrings like 'tuple of integers' + """ + doc = force_unicode(doc) + # parse round parentheses: def func(a, (b,c)) + try: + count = 0 + start = doc.index('(') + for i, s in enumerate(doc[start:]): + if s == '(': + count += 1 + elif s == ')': + count -= 1 + if count == 0: + end = start + i + break + param_str = doc[start + 1:end] + except (ValueError, UnboundLocalError): + # ValueError for doc.index + # UnboundLocalError for undefined end in last line + debug.dbg('no brackets found - no param') + end = 0 + param_str = u'' + else: + # remove square brackets, that show an optional param ( = None) + def change_options(m): + args = m.group(1).split(',') + for i, a in enumerate(args): + if a and '=' not in a: + args[i] += '=None' + return ','.join(args) + + while True: + param_str, changes = re.subn(r' ?\[([^\[\]]+)\]', + change_options, param_str) + if changes == 0: + break + param_str = param_str.replace('-', '_') # see: isinstance.__doc__ + + # parse return value + r = re.search(u'-[>-]* ', doc[end:end + 7]) + if r is None: + ret = u'' + else: + index = end + r.end() + # get result type, which can contain newlines + pattern = re.compile(r'(,\n|[^\n-])+') + ret_str = pattern.match(doc, index).group(0).strip() + # New object -> object() + ret_str = re.sub(r'[nN]ew (.*)', r'\1()', ret_str) + + ret = docstr_defaults.get(ret_str, ret_str) + + return param_str, ret + + +def _create_from_name(evaluator, compiled_object, name): + access_paths = compiled_object.access_handle.getattr_paths(name, default=None) + parent_context = compiled_object + if parent_context.is_class(): + parent_context = parent_context.parent_context + + context = None + for access_path in access_paths: + context = create_cached_compiled_object( + evaluator, access_path, parent_context=context + ) + return context + + +def _normalize_create_args(func): + """The cache doesn't care about keyword vs. normal args.""" + def wrapper(evaluator, obj, parent_context=None): + return func(evaluator, obj, parent_context) + return wrapper + + +def create_from_access_path(evaluator, access_path): + parent_context = None + for name, access in access_path.accesses: + parent_context = create_cached_compiled_object(evaluator, access, parent_context) + return parent_context + + +@_normalize_create_args +@evaluator_function_cache() +def create_cached_compiled_object(evaluator, access_handle, parent_context): + return CompiledObject(evaluator, access_handle, parent_context) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/getattr_static.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/getattr_static.py new file mode 100644 index 0000000..946ac09 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/getattr_static.py @@ -0,0 +1,176 @@ +""" +A static version of getattr. +This is a backport of the Python 3 code with a little bit of additional +information returned to enable Jedi to make decisions. +""" + +import types + +from jedi._compatibility import py_version + +_sentinel = object() + + +def _check_instance(obj, attr): + instance_dict = {} + try: + instance_dict = object.__getattribute__(obj, "__dict__") + except AttributeError: + pass + return dict.get(instance_dict, attr, _sentinel) + + +def _check_class(klass, attr): + for entry in _static_getmro(klass): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr] + except KeyError: + pass + return _sentinel + + +def _is_type(obj): + try: + _static_getmro(obj) + except TypeError: + return False + return True + + +def _shadowed_dict_newstyle(klass): + dict_attr = type.__dict__["__dict__"] + for entry in _static_getmro(klass): + try: + class_dict = dict_attr.__get__(entry)["__dict__"] + except KeyError: + pass + else: + if not (type(class_dict) is types.GetSetDescriptorType and + class_dict.__name__ == "__dict__" and + class_dict.__objclass__ is entry): + return class_dict + return _sentinel + + +def _static_getmro_newstyle(klass): + return type.__dict__['__mro__'].__get__(klass) + + +if py_version >= 30: + _shadowed_dict = _shadowed_dict_newstyle + _get_type = type + _static_getmro = _static_getmro_newstyle +else: + def _shadowed_dict(klass): + """ + In Python 2 __dict__ is not overwritable: + + class Foo(object): pass + setattr(Foo, '__dict__', 4) + + Traceback (most recent call last): + File "", line 1, in + TypeError: __dict__ must be a dictionary object + + It applies to both newstyle and oldstyle classes: + + class Foo(object): pass + setattr(Foo, '__dict__', 4) + Traceback (most recent call last): + File "", line 1, in + AttributeError: attribute '__dict__' of 'type' objects is not writable + + It also applies to instances of those objects. However to keep things + straight forward, newstyle classes always use the complicated way of + accessing it while oldstyle classes just use getattr. + """ + if type(klass) is _oldstyle_class_type: + return getattr(klass, '__dict__', _sentinel) + return _shadowed_dict_newstyle(klass) + + class _OldStyleClass: + pass + + _oldstyle_instance_type = type(_OldStyleClass()) + _oldstyle_class_type = type(_OldStyleClass) + + def _get_type(obj): + type_ = object.__getattribute__(obj, '__class__') + if type_ is _oldstyle_instance_type: + # Somehow for old style classes we need to access it directly. + return obj.__class__ + return type_ + + def _static_getmro(klass): + if type(klass) is _oldstyle_class_type: + def oldstyle_mro(klass): + """ + Oldstyle mro is a really simplistic way of look up mro: + https://stackoverflow.com/questions/54867/what-is-the-difference-between-old-style-and-new-style-classes-in-python + """ + yield klass + for base in klass.__bases__: + for yield_from in oldstyle_mro(base): + yield yield_from + + return oldstyle_mro(klass) + + return _static_getmro_newstyle(klass) + + +def _safe_hasattr(obj, name): + return _check_class(_get_type(obj), name) is not _sentinel + + +def _safe_is_data_descriptor(obj): + return _safe_hasattr(obj, '__set__') or _safe_hasattr(obj, '__delete__') + + +def getattr_static(obj, attr, default=_sentinel): + """Retrieve attributes without triggering dynamic lookup via the + descriptor protocol, __getattr__ or __getattribute__. + + Note: this function may not be able to retrieve all attributes + that getattr can fetch (like dynamically created attributes) + and may find attributes that getattr can't (like descriptors + that raise AttributeError). It can also return descriptor objects + instead of instance members in some cases. See the + documentation for details. + + Returns a tuple `(attr, is_get_descriptor)`. is_get_descripter means that + the attribute is a descriptor that has a `__get__` attribute. + """ + instance_result = _sentinel + if not _is_type(obj): + klass = _get_type(obj) + dict_attr = _shadowed_dict(klass) + if (dict_attr is _sentinel or type(dict_attr) is types.MemberDescriptorType): + instance_result = _check_instance(obj, attr) + else: + klass = obj + + klass_result = _check_class(klass, attr) + + if instance_result is not _sentinel and klass_result is not _sentinel: + if _safe_hasattr(klass_result, '__get__') \ + and _safe_is_data_descriptor(klass_result): + # A get/set descriptor has priority over everything. + return klass_result, True + + if instance_result is not _sentinel: + return instance_result, False + if klass_result is not _sentinel: + return klass_result, _safe_hasattr(klass_result, '__get__') + + if obj is klass: + # for types we check the metaclass too + for entry in _static_getmro(type(klass)): + if _shadowed_dict(type(entry)) is _sentinel: + try: + return entry.__dict__[attr], False + except KeyError: + pass + if default is not _sentinel: + return default, False + raise AttributeError(attr) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/mixed.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/mixed.py new file mode 100644 index 0000000..37d9fbe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/mixed.py @@ -0,0 +1,291 @@ +""" +Used only for REPL Completion. +""" + +import inspect +import os +import sys + +from jedi.parser_utils import get_cached_code_lines + +from jedi import settings +from jedi.evaluate import compiled +from jedi.cache import underscore_memoization +from jedi.file_io import FileIO +from jedi.evaluate.base_context import ContextSet, ContextWrapper +from jedi.evaluate.helpers import SimpleGetItemNotFound +from jedi.evaluate.context import ModuleContext +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate.compiled.getattr_static import getattr_static +from jedi.evaluate.compiled.access import compiled_objects_cache, \ + ALLOWED_GETITEM_TYPES, get_api_type +from jedi.evaluate.compiled.context import create_cached_compiled_object +from jedi.evaluate.gradual.conversion import to_stub + +_sentinel = object() + + +class MixedObject(ContextWrapper): + """ + A ``MixedObject`` is used in two ways: + + 1. It uses the default logic of ``parser.python.tree`` objects, + 2. except for getattr calls. The names dicts are generated in a fashion + like ``CompiledObject``. + + This combined logic makes it possible to provide more powerful REPL + completion. It allows side effects that are not noticable with the default + parser structure to still be completeable. + + The biggest difference from CompiledObject to MixedObject is that we are + generally dealing with Python code and not with C code. This will generate + fewer special cases, because we in Python you don't have the same freedoms + to modify the runtime. + """ + def __init__(self, compiled_object, tree_context): + super(MixedObject, self).__init__(tree_context) + self.compiled_object = compiled_object + self.access_handle = compiled_object.access_handle + + def get_filters(self, *args, **kwargs): + yield MixedObjectFilter(self.evaluator, self) + + def get_signatures(self): + # Prefer `inspect.signature` over somehow analyzing Python code. It + # should be very precise, especially for stuff like `partial`. + return self.compiled_object.get_signatures() + + def py__call__(self, arguments): + return (to_stub(self._wrapped_context) or self._wrapped_context).py__call__(arguments) + + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + return self.compiled_object.get_safe_value() + else: + return self.compiled_object.get_safe_value(default) + + def py__simple_getitem__(self, index): + python_object = self.compiled_object.access_handle.access._obj + if type(python_object) in ALLOWED_GETITEM_TYPES: + return self.compiled_object.py__simple_getitem__(index) + raise SimpleGetItemNotFound + + def __repr__(self): + return '<%s: %s>' % ( + type(self).__name__, + self.access_handle.get_repr() + ) + + +class MixedName(compiled.CompiledName): + """ + The ``CompiledName._compiled_object`` is our MixedObject. + """ + @property + def start_pos(self): + contexts = list(self.infer()) + if not contexts: + # This means a start_pos that doesn't exist (compiled objects). + return 0, 0 + return contexts[0].name.start_pos + + @start_pos.setter + def start_pos(self, value): + # Ignore the __init__'s start_pos setter call. + pass + + @underscore_memoization + def infer(self): + # TODO use logic from compiled.CompiledObjectFilter + access_paths = self.parent_context.access_handle.getattr_paths( + self.string_name, + default=None + ) + assert len(access_paths) + contexts = [None] + for access in access_paths: + contexts = ContextSet.from_sets( + _create(self._evaluator, access, parent_context=c) + if c is None or isinstance(c, MixedObject) + else ContextSet({create_cached_compiled_object(c.evaluator, access, c)}) + for c in contexts + ) + return contexts + + @property + def api_type(self): + return next(iter(self.infer())).api_type + + +class MixedObjectFilter(compiled.CompiledObjectFilter): + name_class = MixedName + + +@evaluator_function_cache() +def _load_module(evaluator, path): + module_node = evaluator.parse( + path=path, + cache=True, + diff_cache=settings.fast_parser, + cache_path=settings.cache_directory + ).get_root_node() + # python_module = inspect.getmodule(python_object) + # TODO we should actually make something like this possible. + #evaluator.modules[python_module.__name__] = module_node + return module_node + + +def _get_object_to_check(python_object): + """Check if inspect.getfile has a chance to find the source.""" + if sys.version_info[0] > 2: + python_object = inspect.unwrap(python_object) + + if (inspect.ismodule(python_object) or + inspect.isclass(python_object) or + inspect.ismethod(python_object) or + inspect.isfunction(python_object) or + inspect.istraceback(python_object) or + inspect.isframe(python_object) or + inspect.iscode(python_object)): + return python_object + + try: + return python_object.__class__ + except AttributeError: + raise TypeError # Prevents computation of `repr` within inspect. + + +def _find_syntax_node_name(evaluator, python_object): + original_object = python_object + try: + python_object = _get_object_to_check(python_object) + path = inspect.getsourcefile(python_object) + except TypeError: + # The type might not be known (e.g. class_with_dict.__weakref__) + return None + if path is None or not os.path.exists(path): + # The path might not exist or be e.g. . + return None + + file_io = FileIO(path) + module_node = _load_module(evaluator, path) + + if inspect.ismodule(python_object): + # We don't need to check names for modules, because there's not really + # a way to write a module in a module in Python (and also __name__ can + # be something like ``email.utils``). + code_lines = get_cached_code_lines(evaluator.grammar, path) + return module_node, module_node, file_io, code_lines + + try: + name_str = python_object.__name__ + except AttributeError: + # Stuff like python_function.__code__. + return None + + if name_str == '': + return None # It's too hard to find lambdas. + + # Doesn't always work (e.g. os.stat_result) + names = module_node.get_used_names().get(name_str, []) + # Only functions and classes are relevant. If a name e.g. points to an + # import, it's probably a builtin (like collections.deque) and needs to be + # ignored. + names = [ + n for n in names + if n.parent.type in ('funcdef', 'classdef') and n.parent.name == n + ] + if not names: + return None + + try: + code = python_object.__code__ + # By using the line number of a code object we make the lookup in a + # file pretty easy. There's still a possibility of people defining + # stuff like ``a = 3; foo(a); a = 4`` on the same line, but if people + # do so we just don't care. + line_nr = code.co_firstlineno + except AttributeError: + pass + else: + line_names = [name for name in names if name.start_pos[0] == line_nr] + # There's a chance that the object is not available anymore, because + # the code has changed in the background. + if line_names: + names = line_names + + code_lines = get_cached_code_lines(evaluator.grammar, path) + # It's really hard to actually get the right definition, here as a last + # resort we just return the last one. This chance might lead to odd + # completions at some points but will lead to mostly correct type + # inference, because people tend to define a public name in a module only + # once. + tree_node = names[-1].parent + if tree_node.type == 'funcdef' and get_api_type(original_object) == 'instance': + # If an instance is given and we're landing on a function (e.g. + # partial in 3.5), something is completely wrong and we should not + # return that. + return None + return module_node, tree_node, file_io, code_lines + + +@compiled_objects_cache('mixed_cache') +def _create(evaluator, access_handle, parent_context, *args): + compiled_object = create_cached_compiled_object( + evaluator, + access_handle, + parent_context=parent_context and parent_context.compiled_object + ) + + # TODO accessing this is bad, but it probably doesn't matter that much, + # because we're working with interpreteters only here. + python_object = access_handle.access._obj + result = _find_syntax_node_name(evaluator, python_object) + if result is None: + # TODO Care about generics from stuff like `[1]` and don't return like this. + if type(python_object) in (dict, list, tuple): + return ContextSet({compiled_object}) + + tree_contexts = to_stub(compiled_object) + if not tree_contexts: + return ContextSet({compiled_object}) + else: + module_node, tree_node, file_io, code_lines = result + + if parent_context is None: + # TODO this __name__ is probably wrong. + name = compiled_object.get_root_context().py__name__() + string_names = tuple(name.split('.')) + module_context = ModuleContext( + evaluator, module_node, + file_io=file_io, + string_names=string_names, + code_lines=code_lines, + is_package=hasattr(compiled_object, 'py__path__'), + ) + if name is not None: + evaluator.module_cache.add(string_names, ContextSet([module_context])) + else: + if parent_context.tree_node.get_root_node() != module_node: + # This happens e.g. when __module__ is wrong, or when using + # TypeVar('foo'), where Jedi uses 'foo' as the name and + # Python's TypeVar('foo').__module__ will be typing. + return ContextSet({compiled_object}) + module_context = parent_context.get_root_context() + + tree_contexts = ContextSet({ + module_context.create_context( + tree_node, + node_is_context=True, + node_is_object=True + ) + }) + if tree_node.type == 'classdef': + if not access_handle.is_class(): + # Is an instance, not a class. + tree_contexts = tree_contexts.execute_evaluated() + + return ContextSet( + MixedObject(compiled_object, tree_context=tree_context) + for tree_context in tree_contexts + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__init__.py new file mode 100644 index 0000000..dea2f66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__init__.py @@ -0,0 +1,406 @@ +""" +Makes it possible to do the compiled analysis in a subprocess. This has two +goals: + +1. Making it safer - Segfaults and RuntimeErrors as well as stdout/stderr can + be ignored and dealt with. +2. Make it possible to handle different Python versions as well as virtualenvs. +""" + +import os +import sys +import subprocess +import socket +import errno +import traceback +from functools import partial +from threading import Thread +try: + from queue import Queue, Empty +except ImportError: + from Queue import Queue, Empty # python 2.7 + +from jedi._compatibility import queue, is_py3, force_unicode, \ + pickle_dump, pickle_load, GeneralizedPopen, weakref +from jedi import debug +from jedi.cache import memoize_method +from jedi.evaluate.compiled.subprocess import functions +from jedi.evaluate.compiled.access import DirectObjectAccess, AccessPath, \ + SignatureParam +from jedi.api.exceptions import InternalError + + +_MAIN_PATH = os.path.join(os.path.dirname(__file__), '__main__.py') + + +def _enqueue_output(out, queue): + for line in iter(out.readline, b''): + queue.put(line) + + +def _add_stderr_to_debug(stderr_queue): + while True: + # Try to do some error reporting from the subprocess and print its + # stderr contents. + try: + line = stderr_queue.get_nowait() + line = line.decode('utf-8', 'replace') + debug.warning('stderr output: %s' % line.rstrip('\n')) + except Empty: + break + + +def _get_function(name): + return getattr(functions, name) + + +def _cleanup_process(process, thread): + try: + process.kill() + process.wait() + except OSError: + # Raised if the process is already killed. + pass + thread.join() + for stream in [process.stdin, process.stdout, process.stderr]: + try: + stream.close() + except OSError: + # Raised if the stream is broken. + pass + + +class _EvaluatorProcess(object): + def __init__(self, evaluator): + self._evaluator_weakref = weakref.ref(evaluator) + self._evaluator_id = id(evaluator) + self._handles = {} + + def get_or_create_access_handle(self, obj): + id_ = id(obj) + try: + return self.get_access_handle(id_) + except KeyError: + access = DirectObjectAccess(self._evaluator_weakref(), obj) + handle = AccessHandle(self, access, id_) + self.set_access_handle(handle) + return handle + + def get_access_handle(self, id_): + return self._handles[id_] + + def set_access_handle(self, handle): + self._handles[handle.id] = handle + + +class EvaluatorSameProcess(_EvaluatorProcess): + """ + Basically just an easy access to functions.py. It has the same API + as EvaluatorSubprocess and does the same thing without using a subprocess. + This is necessary for the Interpreter process. + """ + def __getattr__(self, name): + return partial(_get_function(name), self._evaluator_weakref()) + + +class EvaluatorSubprocess(_EvaluatorProcess): + def __init__(self, evaluator, compiled_subprocess): + super(EvaluatorSubprocess, self).__init__(evaluator) + self._used = False + self._compiled_subprocess = compiled_subprocess + + def __getattr__(self, name): + func = _get_function(name) + + def wrapper(*args, **kwargs): + self._used = True + + result = self._compiled_subprocess.run( + self._evaluator_weakref(), + func, + args=args, + kwargs=kwargs, + ) + # IMO it should be possible to create a hook in pickle.load to + # mess with the loaded objects. However it's extremely complicated + # to work around this so just do it with this call. ~ dave + return self._convert_access_handles(result) + + return wrapper + + def _convert_access_handles(self, obj): + if isinstance(obj, SignatureParam): + return SignatureParam(*self._convert_access_handles(tuple(obj))) + elif isinstance(obj, tuple): + return tuple(self._convert_access_handles(o) for o in obj) + elif isinstance(obj, list): + return [self._convert_access_handles(o) for o in obj] + elif isinstance(obj, AccessHandle): + try: + # Rewrite the access handle to one we're already having. + obj = self.get_access_handle(obj.id) + except KeyError: + obj.add_subprocess(self) + self.set_access_handle(obj) + elif isinstance(obj, AccessPath): + return AccessPath(self._convert_access_handles(obj.accesses)) + return obj + + def __del__(self): + if self._used and not self._compiled_subprocess.is_crashed: + self._compiled_subprocess.delete_evaluator(self._evaluator_id) + + +class CompiledSubprocess(object): + is_crashed = False + # Start with 2, gets set after _get_info. + _pickle_protocol = 2 + + def __init__(self, executable): + self._executable = executable + self._evaluator_deletion_queue = queue.deque() + self._cleanup_callable = lambda: None + + def __repr__(self): + pid = os.getpid() + return '<%s _executable=%r, _pickle_protocol=%r, is_crashed=%r, pid=%r>' % ( + self.__class__.__name__, + self._executable, + self._pickle_protocol, + self.is_crashed, + pid, + ) + + @memoize_method + def _get_process(self): + debug.dbg('Start environment subprocess %s', self._executable) + parso_path = sys.modules['parso'].__file__ + args = ( + self._executable, + _MAIN_PATH, + os.path.dirname(os.path.dirname(parso_path)), + '.'.join(str(x) for x in sys.version_info[:3]), + ) + process = GeneralizedPopen( + args, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + # Use system default buffering on Python 2 to improve performance + # (this is already the case on Python 3). + bufsize=-1 + ) + self._stderr_queue = Queue() + self._stderr_thread = t = Thread( + target=_enqueue_output, + args=(process.stderr, self._stderr_queue) + ) + t.daemon = True + t.start() + # Ensure the subprocess is properly cleaned up when the object + # is garbage collected. + self._cleanup_callable = weakref.finalize(self, + _cleanup_process, + process, + t) + return process + + def run(self, evaluator, function, args=(), kwargs={}): + # Delete old evaluators. + while True: + try: + evaluator_id = self._evaluator_deletion_queue.pop() + except IndexError: + break + else: + self._send(evaluator_id, None) + + assert callable(function) + return self._send(id(evaluator), function, args, kwargs) + + def get_sys_path(self): + return self._send(None, functions.get_sys_path, (), {}) + + def _kill(self): + self.is_crashed = True + self._cleanup_callable() + + def _send(self, evaluator_id, function, args=(), kwargs={}): + if self.is_crashed: + raise InternalError("The subprocess %s has crashed." % self._executable) + + if not is_py3: + # Python 2 compatibility + kwargs = {force_unicode(key): value for key, value in kwargs.items()} + + data = evaluator_id, function, args, kwargs + try: + pickle_dump(data, self._get_process().stdin, self._pickle_protocol) + except (socket.error, IOError) as e: + # Once Python2 will be removed we can just use `BrokenPipeError`. + # Also, somehow in windows it returns EINVAL instead of EPIPE if + # the subprocess dies. + if e.errno not in (errno.EPIPE, errno.EINVAL): + # Not a broken pipe + raise + self._kill() + raise InternalError("The subprocess %s was killed. Maybe out of memory?" + % self._executable) + + try: + is_exception, traceback, result = pickle_load(self._get_process().stdout) + except EOFError as eof_error: + try: + stderr = self._get_process().stderr.read().decode('utf-8', 'replace') + except Exception as exc: + stderr = '' % exc + self._kill() + _add_stderr_to_debug(self._stderr_queue) + raise InternalError( + "The subprocess %s has crashed (%r, stderr=%s)." % ( + self._executable, + eof_error, + stderr, + )) + + _add_stderr_to_debug(self._stderr_queue) + + if is_exception: + # Replace the attribute error message with a the traceback. It's + # way more informative. + result.args = (traceback,) + raise result + return result + + def delete_evaluator(self, evaluator_id): + """ + Currently we are not deleting evalutors instantly. They only get + deleted once the subprocess is used again. It would probably a better + solution to move all of this into a thread. However, the memory usage + of a single evaluator shouldn't be that high. + """ + # With an argument - the evaluator gets deleted. + self._evaluator_deletion_queue.append(evaluator_id) + + +class Listener(object): + def __init__(self, pickle_protocol): + self._evaluators = {} + # TODO refactor so we don't need to process anymore just handle + # controlling. + self._process = _EvaluatorProcess(Listener) + self._pickle_protocol = pickle_protocol + + def _get_evaluator(self, function, evaluator_id): + from jedi.evaluate import Evaluator + + try: + evaluator = self._evaluators[evaluator_id] + except KeyError: + from jedi.api.environment import InterpreterEnvironment + evaluator = Evaluator( + # The project is not actually needed. Nothing should need to + # access it. + project=None, + environment=InterpreterEnvironment() + ) + self._evaluators[evaluator_id] = evaluator + return evaluator + + def _run(self, evaluator_id, function, args, kwargs): + if evaluator_id is None: + return function(*args, **kwargs) + elif function is None: + del self._evaluators[evaluator_id] + else: + evaluator = self._get_evaluator(function, evaluator_id) + + # Exchange all handles + args = list(args) + for i, arg in enumerate(args): + if isinstance(arg, AccessHandle): + args[i] = evaluator.compiled_subprocess.get_access_handle(arg.id) + for key, value in kwargs.items(): + if isinstance(value, AccessHandle): + kwargs[key] = evaluator.compiled_subprocess.get_access_handle(value.id) + + return function(evaluator, *args, **kwargs) + + def listen(self): + stdout = sys.stdout + # Mute stdout. Nobody should actually be able to write to it, + # because stdout is used for IPC. + sys.stdout = open(os.devnull, 'w') + stdin = sys.stdin + if sys.version_info[0] > 2: + stdout = stdout.buffer + stdin = stdin.buffer + # Python 2 opens streams in text mode on Windows. Set stdout and stdin + # to binary mode. + elif sys.platform == 'win32': + import msvcrt + msvcrt.setmode(stdout.fileno(), os.O_BINARY) + msvcrt.setmode(stdin.fileno(), os.O_BINARY) + + while True: + try: + payload = pickle_load(stdin) + except EOFError: + # It looks like the parent process closed. + # Don't make a big fuss here and just exit. + exit(0) + try: + result = False, None, self._run(*payload) + except Exception as e: + result = True, traceback.format_exc(), e + + pickle_dump(result, stdout, self._pickle_protocol) + + +class AccessHandle(object): + def __init__(self, subprocess, access, id_): + self.access = access + self._subprocess = subprocess + self.id = id_ + + def add_subprocess(self, subprocess): + self._subprocess = subprocess + + def __repr__(self): + try: + detail = self.access + except AttributeError: + detail = '#' + str(self.id) + return '<%s of %s>' % (self.__class__.__name__, detail) + + def __getstate__(self): + return self.id + + def __setstate__(self, state): + self.id = state + + def __getattr__(self, name): + if name in ('id', 'access') or name.startswith('_'): + raise AttributeError("Something went wrong with unpickling") + + #if not is_py3: print >> sys.stderr, name + #print('getattr', name, file=sys.stderr) + return partial(self._workaround, force_unicode(name)) + + def _workaround(self, name, *args, **kwargs): + """ + TODO Currently we're passing slice objects around. This should not + happen. They are also the only unhashable objects that we're passing + around. + """ + if args and isinstance(args[0], slice): + return self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) + return self._cached_results(name, *args, **kwargs) + + @memoize_method + def _cached_results(self, name, *args, **kwargs): + #if type(self._subprocess) == EvaluatorSubprocess: + #print(name, args, kwargs, + #self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) + #) + return self._subprocess.get_compiled_method_return(self.id, name, *args, **kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__main__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__main__.py new file mode 100644 index 0000000..4be2820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/__main__.py @@ -0,0 +1,55 @@ +import os +import sys + + +def _get_paths(): + # Get the path to jedi. + _d = os.path.dirname + _jedi_path = _d(_d(_d(_d(_d(__file__))))) + _parso_path = sys.argv[1] + # The paths are the directory that jedi and parso lie in. + return {'jedi': _jedi_path, 'parso': _parso_path} + + +# Remove the first entry, because it's simply a directory entry that equals +# this directory. +del sys.path[0] + +if sys.version_info > (3, 4): + from importlib.machinery import PathFinder + + class _ExactImporter(object): + def __init__(self, path_dct): + self._path_dct = path_dct + + def find_module(self, fullname, path=None): + if path is None and fullname in self._path_dct: + p = self._path_dct[fullname] + loader = PathFinder.find_module(fullname, path=[p]) + return loader + return None + + # Try to import jedi/parso. + sys.meta_path.insert(0, _ExactImporter(_get_paths())) + from jedi.evaluate.compiled import subprocess # NOQA + sys.meta_path.pop(0) +else: + import imp + + def load(name): + paths = list(_get_paths().values()) + fp, pathname, description = imp.find_module(name, paths) + return imp.load_module(name, fp, pathname, description) + + load('parso') + load('jedi') + from jedi.evaluate.compiled import subprocess # NOQA + +from jedi._compatibility import highest_pickle_protocol # noqa: E402 + + +# Retrieve the pickle protocol. +host_sys_version = [int(x) for x in sys.argv[2].split('.')] +pickle_protocol = highest_pickle_protocol([sys.version_info, host_sys_version]) +# And finally start the client. +subprocess.Listener(pickle_protocol=pickle_protocol).listen() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/functions.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/functions.py new file mode 100644 index 0000000..b3fdac0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/compiled/subprocess/functions.py @@ -0,0 +1,86 @@ +from __future__ import print_function +import sys +import os + +from jedi._compatibility import find_module, cast_path, force_unicode, \ + iter_modules, all_suffixes +from jedi.evaluate.compiled import access +from jedi import parser_utils + + +def get_sys_path(): + return list(map(cast_path, sys.path)) + + +def load_module(evaluator, **kwargs): + return access.load_module(evaluator, **kwargs) + + +def get_compiled_method_return(evaluator, id, attribute, *args, **kwargs): + handle = evaluator.compiled_subprocess.get_access_handle(id) + return getattr(handle.access, attribute)(*args, **kwargs) + + +def create_simple_object(evaluator, obj): + return access.create_access_path(evaluator, obj) + + +def get_module_info(evaluator, sys_path=None, full_name=None, **kwargs): + """ + Returns Tuple[Union[NamespaceInfo, FileIO, None], Optional[bool]] + """ + if sys_path is not None: + sys.path, temp = sys_path, sys.path + try: + return find_module(full_name=full_name, **kwargs) + except ImportError: + return None, None + finally: + if sys_path is not None: + sys.path = temp + + +def list_module_names(evaluator, search_path): + return [ + force_unicode(name) + for module_loader, name, is_pkg in iter_modules(search_path) + ] + + +def get_builtin_module_names(evaluator): + return list(map(force_unicode, sys.builtin_module_names)) + + +def _test_raise_error(evaluator, exception_type): + """ + Raise an error to simulate certain problems for unit tests. + """ + raise exception_type + + +def _test_print(evaluator, stderr=None, stdout=None): + """ + Force some prints in the subprocesses. This exists for unit tests. + """ + if stderr is not None: + print(stderr, file=sys.stderr) + sys.stderr.flush() + if stdout is not None: + print(stdout) + sys.stdout.flush() + + +def _get_init_path(directory_path): + """ + The __init__ file can be searched in a directory. If found return it, else + None. + """ + for suffix in all_suffixes(): + path = os.path.join(directory_path, '__init__' + suffix) + if os.path.exists(path): + return path + return None + + +def safe_literal_eval(evaluator, value): + return parser_utils.safe_literal_eval(value) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/__init__.py new file mode 100644 index 0000000..56f6495 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/__init__.py @@ -0,0 +1,6 @@ +from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.context.klass import ClassContext +from jedi.evaluate.context.function import FunctionContext, \ + MethodContext, FunctionExecutionContext +from jedi.evaluate.context.instance import AnonymousInstance, BoundMethod, \ + CompiledInstance, AbstractInstanceContext, TreeInstance diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/decorator.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/decorator.py new file mode 100644 index 0000000..317c5f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/decorator.py @@ -0,0 +1,15 @@ +''' +Decorators are not really contexts, however we need some wrappers to improve +docstrings and other things around decorators. +''' + +from jedi.evaluate.base_context import ContextWrapper + + +class Decoratee(ContextWrapper): + def __init__(self, wrapped_context, original_context): + self._wrapped_context = wrapped_context + self._original_context = original_context + + def py__doc__(self): + return self._original_context.py__doc__() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/function.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/function.py new file mode 100644 index 0000000..203dcf0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/function.py @@ -0,0 +1,444 @@ +from parso.python import tree + +from jedi._compatibility import use_metaclass +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import docstrings +from jedi.evaluate import flow_analysis +from jedi.evaluate import helpers +from jedi.evaluate.signature import TreeSignature +from jedi.evaluate.arguments import AnonymousArguments +from jedi.evaluate.filters import ParserTreeFilter, FunctionExecutionFilter +from jedi.evaluate.names import ContextName, AbstractNameDefinition, ParamName +from jedi.evaluate.base_context import ContextualizedNode, NO_CONTEXTS, \ + ContextSet, TreeContext, ContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContexts, LazyKnownContext, \ + LazyTreeContext +from jedi.evaluate.context import iterable +from jedi import parser_utils +from jedi.evaluate.parser_cache import get_yield_exprs +from jedi.evaluate.helpers import contexts_from_qualified_names + + +class LambdaName(AbstractNameDefinition): + string_name = '' + api_type = u'function' + + def __init__(self, lambda_context): + self._lambda_context = lambda_context + self.parent_context = lambda_context.parent_context + + @property + def start_pos(self): + return self._lambda_context.tree_node.start_pos + + def infer(self): + return ContextSet([self._lambda_context]) + + +class FunctionAndClassBase(TreeContext): + def get_qualified_names(self): + if self.parent_context.is_class(): + n = self.parent_context.get_qualified_names() + if n is None: + # This means that the parent class lives within a function. + return None + return n + (self.py__name__(),) + elif self.parent_context.is_module(): + return (self.py__name__(),) + else: + return None + + +class FunctionMixin(object): + api_type = u'function' + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + if search_global: + yield ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ) + else: + cls = self.py__class__() + for instance in cls.execute_evaluated(): + for filter in instance.get_filters(search_global=False, origin_scope=origin_scope): + yield filter + + def py__get__(self, instance, class_context): + from jedi.evaluate.context.instance import BoundMethod + if instance is None: + # Calling the Foo.bar results in the original bar function. + return ContextSet([self]) + return ContextSet([BoundMethod(instance, self)]) + + def get_param_names(self): + function_execution = self.get_function_execution() + return [ParamName(function_execution, param.name) + for param in self.tree_node.get_params()] + + @property + def name(self): + if self.tree_node.type == 'lambdef': + return LambdaName(self) + return ContextName(self, self.tree_node.name) + + def py__name__(self): + return self.name.string_name + + def py__call__(self, arguments): + function_execution = self.get_function_execution(arguments) + return function_execution.infer() + + def get_function_execution(self, arguments=None): + if arguments is None: + arguments = AnonymousArguments() + + return FunctionExecutionContext(self.evaluator, self.parent_context, self, arguments) + + def get_signatures(self): + return [TreeSignature(f) for f in self.get_signature_functions()] + + +class FunctionContext(use_metaclass(CachedMetaClass, FunctionMixin, FunctionAndClassBase)): + """ + Needed because of decorators. Decorators are evaluated here. + """ + def is_function(self): + return True + + @classmethod + def from_context(cls, context, tree_node): + def create(tree_node): + if context.is_class(): + return MethodContext( + context.evaluator, + context, + parent_context=parent_context, + tree_node=tree_node + ) + else: + return cls( + context.evaluator, + parent_context=parent_context, + tree_node=tree_node + ) + + overloaded_funcs = list(_find_overload_functions(context, tree_node)) + + parent_context = context + while parent_context.is_class() or parent_context.is_instance(): + parent_context = parent_context.parent_context + + function = create(tree_node) + + if overloaded_funcs: + return OverloadedFunctionContext( + function, + [create(f) for f in overloaded_funcs] + ) + return function + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'FunctionType') + return c + + def get_default_param_context(self): + return self.parent_context + + def get_signature_functions(self): + return [self] + + +class MethodContext(FunctionContext): + def __init__(self, evaluator, class_context, *args, **kwargs): + super(MethodContext, self).__init__(evaluator, *args, **kwargs) + self.class_context = class_context + + def get_default_param_context(self): + return self.class_context + + def get_qualified_names(self): + # Need to implement this, because the parent context of a method + # context is not the class context but the module. + names = self.class_context.get_qualified_names() + if names is None: + return None + return names + (self.py__name__(),) + + +class FunctionExecutionContext(TreeContext): + """ + This class is used to evaluate functions and their returns. + + This is the most complicated class, because it contains the logic to + transfer parameters. It is even more complicated, because there may be + multiple calls to functions and recursion has to be avoided. But this is + responsibility of the decorators. + """ + function_execution_filter = FunctionExecutionFilter + + def __init__(self, evaluator, parent_context, function_context, var_args): + super(FunctionExecutionContext, self).__init__( + evaluator, + parent_context, + function_context.tree_node, + ) + self.function_context = function_context + self.var_args = var_args + + @evaluator_method_cache(default=NO_CONTEXTS) + @recursion.execution_recursion_decorator() + def get_return_values(self, check_yields=False): + funcdef = self.tree_node + if funcdef.type == 'lambdef': + return self.eval_node(funcdef.children[-1]) + + if check_yields: + context_set = NO_CONTEXTS + returns = get_yield_exprs(self.evaluator, funcdef) + else: + returns = funcdef.iter_return_stmts() + from jedi.evaluate.gradual.annotation import infer_return_types + context_set = infer_return_types(self) + if context_set: + # If there are annotations, prefer them over anything else. + # This will make it faster. + return context_set + context_set |= docstrings.infer_return_types(self.function_context) + + for r in returns: + check = flow_analysis.reachability_check(self, funcdef, r) + if check is flow_analysis.UNREACHABLE: + debug.dbg('Return unreachable: %s', r) + else: + if check_yields: + context_set |= ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self._get_yield_lazy_context(r) + ) + else: + try: + children = r.children + except AttributeError: + ctx = compiled.builtin_from_name(self.evaluator, u'None') + context_set |= ContextSet([ctx]) + else: + context_set |= self.eval_node(children[1]) + if check is flow_analysis.REACHABLE: + debug.dbg('Return reachable: %s', r) + break + return context_set + + def _get_yield_lazy_context(self, yield_expr): + if yield_expr.type == 'keyword': + # `yield` just yields None. + ctx = compiled.builtin_from_name(self.evaluator, u'None') + yield LazyKnownContext(ctx) + return + + node = yield_expr.children[1] + if node.type == 'yield_arg': # It must be a yield from. + cn = ContextualizedNode(self, node.children[1]) + for lazy_context in cn.infer().iterate(cn): + yield lazy_context + else: + yield LazyTreeContext(self, node) + + @recursion.execution_recursion_decorator(default=iter([])) + def get_yield_lazy_contexts(self, is_async=False): + # TODO: if is_async, wrap yield statements in Awaitable/async_generator_asend + for_parents = [(y, tree.search_ancestor(y, 'for_stmt', 'funcdef', + 'while_stmt', 'if_stmt')) + for y in get_yield_exprs(self.evaluator, self.tree_node)] + + # Calculate if the yields are placed within the same for loop. + yields_order = [] + last_for_stmt = None + for yield_, for_stmt in for_parents: + # For really simple for loops we can predict the order. Otherwise + # we just ignore it. + parent = for_stmt.parent + if parent.type == 'suite': + parent = parent.parent + if for_stmt.type == 'for_stmt' and parent == self.tree_node \ + and parser_utils.for_stmt_defines_one_name(for_stmt): # Simplicity for now. + if for_stmt == last_for_stmt: + yields_order[-1][1].append(yield_) + else: + yields_order.append((for_stmt, [yield_])) + elif for_stmt == self.tree_node: + yields_order.append((None, [yield_])) + else: + types = self.get_return_values(check_yields=True) + if types: + yield LazyKnownContexts(types) + return + last_for_stmt = for_stmt + + for for_stmt, yields in yields_order: + if for_stmt is None: + # No for_stmt, just normal yields. + for yield_ in yields: + for result in self._get_yield_lazy_context(yield_): + yield result + else: + input_node = for_stmt.get_testlist() + cn = ContextualizedNode(self, input_node) + ordered = cn.infer().iterate(cn) + ordered = list(ordered) + for lazy_context in ordered: + dct = {str(for_stmt.children[1].value): lazy_context.infer()} + with helpers.predefine_names(self, for_stmt, dct): + for yield_in_same_for_stmt in yields: + for result in self._get_yield_lazy_context(yield_in_same_for_stmt): + yield result + + def merge_yield_contexts(self, is_async=False): + return ContextSet.from_sets( + lazy_context.infer() + for lazy_context in self.get_yield_lazy_contexts() + ) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield self.function_execution_filter(self.evaluator, self, + until_position=until_position, + origin_scope=origin_scope) + + @evaluator_method_cache() + def get_executed_params_and_issues(self): + return self.var_args.get_executed_params_and_issues(self) + + def matches_signature(self): + executed_params, issues = self.get_executed_params_and_issues() + if issues: + return False + + matches = all(executed_param.matches_signature() + for executed_param in executed_params) + if debug.enable_notice: + signature = parser_utils.get_call_signature(self.tree_node) + if matches: + debug.dbg("Overloading match: %s@%s (%s)", + signature, self.tree_node.start_pos[0], self.var_args, color='BLUE') + else: + debug.dbg("Overloading no match: %s@%s (%s)", + signature, self.tree_node.start_pos[0], self.var_args, color='BLUE') + return matches + + def infer(self): + """ + Created to be used by inheritance. + """ + evaluator = self.evaluator + is_coroutine = self.tree_node.parent.type in ('async_stmt', 'async_funcdef') + is_generator = bool(get_yield_exprs(evaluator, self.tree_node)) + from jedi.evaluate.gradual.typing import GenericClass + + if is_coroutine: + if is_generator: + if evaluator.environment.version_info < (3, 6): + return NO_CONTEXTS + async_generator_classes = evaluator.typing_module \ + .py__getattribute__('AsyncGenerator') + + yield_contexts = self.merge_yield_contexts(is_async=True) + # The contravariant doesn't seem to be defined. + generics = (yield_contexts.py__class__(), NO_CONTEXTS) + return ContextSet( + # In Python 3.6 AsyncGenerator is still a class. + GenericClass(c, generics) + for c in async_generator_classes + ).execute_annotation() + else: + if evaluator.environment.version_info < (3, 5): + return NO_CONTEXTS + async_classes = evaluator.typing_module.py__getattribute__('Coroutine') + return_contexts = self.get_return_values() + # Only the first generic is relevant. + generics = (return_contexts.py__class__(), NO_CONTEXTS, NO_CONTEXTS) + return ContextSet( + GenericClass(c, generics) for c in async_classes + ).execute_annotation() + else: + if is_generator: + return ContextSet([iterable.Generator(evaluator, self)]) + else: + return self.get_return_values() + + +class OverloadedFunctionContext(FunctionMixin, ContextWrapper): + def __init__(self, function, overloaded_functions): + super(OverloadedFunctionContext, self).__init__(function) + self._overloaded_functions = overloaded_functions + + def py__call__(self, arguments): + debug.dbg("Execute overloaded function %s", self._wrapped_context, color='BLUE') + function_executions = [] + context_set = NO_CONTEXTS + matched = False + for f in self._overloaded_functions: + function_execution = f.get_function_execution(arguments) + function_executions.append(function_execution) + if function_execution.matches_signature(): + matched = True + return function_execution.infer() + + if matched: + return context_set + + if self.evaluator.is_analysis: + # In this case we want precision. + return NO_CONTEXTS + return ContextSet.from_sets(fe.infer() for fe in function_executions) + + def get_signature_functions(self): + return self._overloaded_functions + + +def _find_overload_functions(context, tree_node): + def _is_overload_decorated(funcdef): + if funcdef.parent.type == 'decorated': + decorators = funcdef.parent.children[0] + if decorators.type == 'decorator': + decorators = [decorators] + else: + decorators = decorators.children + for decorator in decorators: + dotted_name = decorator.children[1] + if dotted_name.type == 'name' and dotted_name.value == 'overload': + # TODO check with contexts if it's the right overload + return True + return False + + if tree_node.type == 'lambdef': + return + + if _is_overload_decorated(tree_node): + yield tree_node + + while True: + filter = ParserTreeFilter( + context.evaluator, + context, + until_position=tree_node.start_pos + ) + names = filter.get(tree_node.name.value) + assert isinstance(names, list) + if not names: + break + + found = False + for name in names: + funcdef = name.tree_name.parent + if funcdef.type == 'funcdef' and _is_overload_decorated(funcdef): + tree_node = funcdef + found = True + yield funcdef + + if not found: + break diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/instance.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/instance.py new file mode 100644 index 0000000..e00ff03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/instance.py @@ -0,0 +1,531 @@ +from abc import abstractproperty + +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate.compiled.context import CompiledObjectFilter +from jedi.evaluate.helpers import contexts_from_qualified_names +from jedi.evaluate.filters import AbstractFilter +from jedi.evaluate.names import ContextName, TreeNameDefinition +from jedi.evaluate.base_context import Context, NO_CONTEXTS, ContextSet, \ + iterator_to_context_set, ContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.arguments import AnonymousArguments, \ + ValuesArguments, TreeArgumentsWrapper +from jedi.evaluate.context.function import \ + FunctionContext, FunctionMixin, OverloadedFunctionContext +from jedi.evaluate.context.klass import ClassContext, apply_py__get__, \ + ClassFilter +from jedi.evaluate.context import iterable +from jedi.parser_utils import get_parent_scope + + +class InstanceExecutedParam(object): + def __init__(self, instance, tree_param): + self._instance = instance + self._tree_param = tree_param + self.string_name = self._tree_param.name.value + + def infer(self): + return ContextSet([self._instance]) + + def matches_signature(self): + return True + + +class AnonymousInstanceArguments(AnonymousArguments): + def __init__(self, instance): + self._instance = instance + + def get_executed_params_and_issues(self, execution_context): + from jedi.evaluate.dynamic import search_params + tree_params = execution_context.tree_node.get_params() + if not tree_params: + return [], [] + + self_param = InstanceExecutedParam(self._instance, tree_params[0]) + if len(tree_params) == 1: + # If the only param is self, we don't need to try to find + # executions of this function, we have all the params already. + return [self_param], [] + executed_params = list(search_params( + execution_context.evaluator, + execution_context, + execution_context.tree_node + )) + executed_params[0] = self_param + return executed_params, [] + + +class AbstractInstanceContext(Context): + """ + This class is used to evaluate instances. + """ + api_type = u'instance' + + def __init__(self, evaluator, parent_context, class_context, var_args): + super(AbstractInstanceContext, self).__init__(evaluator, parent_context) + # Generated instances are classes that are just generated by self + # (No var_args) used. + self.class_context = class_context + self.var_args = var_args + + def is_instance(self): + return True + + def get_qualified_names(self): + return self.class_context.get_qualified_names() + + def get_annotated_class_object(self): + return self.class_context # This is the default. + + def py__call__(self, arguments): + names = self.get_function_slot_names(u'__call__') + if not names: + # Means the Instance is not callable. + return super(AbstractInstanceContext, self).py__call__(arguments) + + return ContextSet.from_sets(name.infer().execute(arguments) for name in names) + + def py__class__(self): + return self.class_context + + def py__bool__(self): + # Signalize that we don't know about the bool type. + return None + + def get_function_slot_names(self, name): + # Python classes don't look at the dictionary of the instance when + # looking up `__call__`. This is something that has to do with Python's + # internal slot system (note: not __slots__, but C slots). + for filter in self.get_filters(include_self_names=False): + names = filter.get(name) + if names: + return names + return [] + + def execute_function_slots(self, names, *evaluated_args): + return ContextSet.from_sets( + name.infer().execute_evaluated(*evaluated_args) + for name in names + ) + + def py__get__(self, obj, class_context): + """ + obj may be None. + """ + # Arguments in __get__ descriptors are obj, class. + # `method` is the new parent of the array, don't know if that's good. + names = self.get_function_slot_names(u'__get__') + if names: + if obj is None: + obj = compiled.builtin_from_name(self.evaluator, u'None') + return self.execute_function_slots(names, obj, class_context) + else: + return ContextSet([self]) + + def get_filters(self, search_global=None, until_position=None, + origin_scope=None, include_self_names=True): + class_context = self.get_annotated_class_object() + if include_self_names: + for cls in class_context.py__mro__(): + if not isinstance(cls, compiled.CompiledObject) \ + or cls.tree_node is not None: + # In this case we're excluding compiled objects that are + # not fake objects. It doesn't make sense for normal + # compiled objects to search for self variables. + yield SelfAttributeFilter(self.evaluator, self, cls, origin_scope) + + class_filters = class_context.get_filters( + search_global=False, + origin_scope=origin_scope, + is_instance=True, + ) + for f in class_filters: + if isinstance(f, ClassFilter): + yield InstanceClassFilter(self.evaluator, self, f) + elif isinstance(f, CompiledObjectFilter): + yield CompiledInstanceClassFilter(self.evaluator, self, f) + else: + # Propably from the metaclass. + yield f + + def py__getitem__(self, index_context_set, contextualized_node): + names = self.get_function_slot_names(u'__getitem__') + if not names: + return super(AbstractInstanceContext, self).py__getitem__( + index_context_set, + contextualized_node, + ) + + args = ValuesArguments([index_context_set]) + return ContextSet.from_sets(name.infer().execute(args) for name in names) + + def py__iter__(self, contextualized_node=None): + iter_slot_names = self.get_function_slot_names(u'__iter__') + if not iter_slot_names: + return super(AbstractInstanceContext, self).py__iter__(contextualized_node) + + def iterate(): + for generator in self.execute_function_slots(iter_slot_names): + if generator.is_instance() and not generator.is_compiled(): + # `__next__` logic. + if self.evaluator.environment.version_info.major == 2: + name = u'next' + else: + name = u'__next__' + next_slot_names = generator.get_function_slot_names(name) + if next_slot_names: + yield LazyKnownContexts( + generator.execute_function_slots(next_slot_names) + ) + else: + debug.warning('Instance has no __next__ function in %s.', generator) + else: + for lazy_context in generator.py__iter__(): + yield lazy_context + return iterate() + + @abstractproperty + def name(self): + pass + + def create_init_executions(self): + for name in self.get_function_slot_names(u'__init__'): + # TODO is this correct? I think we need to check for functions. + if isinstance(name, LazyInstanceClassName): + function = FunctionContext.from_context( + self.parent_context, + name.tree_name.parent + ) + bound_method = BoundMethod(self, function) + yield bound_method.get_function_execution(self.var_args) + + @evaluator_method_cache() + def create_instance_context(self, class_context, node): + if node.parent.type in ('funcdef', 'classdef'): + node = node.parent + scope = get_parent_scope(node) + if scope == class_context.tree_node: + return class_context + else: + parent_context = self.create_instance_context(class_context, scope) + if scope.type == 'funcdef': + func = FunctionContext.from_context( + parent_context, + scope, + ) + bound_method = BoundMethod(self, func) + if scope.name.value == '__init__' and parent_context == class_context: + return bound_method.get_function_execution(self.var_args) + else: + return bound_method.get_function_execution() + elif scope.type == 'classdef': + class_context = ClassContext(self.evaluator, parent_context, scope) + return class_context + elif scope.type in ('comp_for', 'sync_comp_for'): + # Comprehensions currently don't have a special scope in Jedi. + return self.create_instance_context(class_context, scope) + else: + raise NotImplementedError + return class_context + + def get_signatures(self): + call_funcs = self.py__getattribute__('__call__').py__get__(self, self.class_context) + return [s.bind(self) for s in call_funcs.get_signatures()] + + def __repr__(self): + return "<%s of %s(%s)>" % (self.__class__.__name__, self.class_context, + self.var_args) + + +class CompiledInstance(AbstractInstanceContext): + def __init__(self, evaluator, parent_context, class_context, var_args): + self._original_var_args = var_args + super(CompiledInstance, self).__init__(evaluator, parent_context, class_context, var_args) + + @property + def name(self): + return compiled.CompiledContextName(self, self.class_context.name.string_name) + + def get_first_non_keyword_argument_contexts(self): + key, lazy_context = next(self._original_var_args.unpack(), ('', None)) + if key is not None: + return NO_CONTEXTS + + return lazy_context.infer() + + def is_stub(self): + return False + + +class TreeInstance(AbstractInstanceContext): + def __init__(self, evaluator, parent_context, class_context, var_args): + # I don't think that dynamic append lookups should happen here. That + # sounds more like something that should go to py__iter__. + if class_context.py__name__() in ['list', 'set'] \ + and parent_context.get_root_context() == evaluator.builtins_module: + # compare the module path with the builtin name. + if settings.dynamic_array_additions: + var_args = iterable.get_dynamic_array_instance(self, var_args) + + super(TreeInstance, self).__init__(evaluator, parent_context, + class_context, var_args) + self.tree_node = class_context.tree_node + + @property + def name(self): + return ContextName(self, self.class_context.name.tree_name) + + # This can recurse, if the initialization of the class includes a reference + # to itself. + @evaluator_method_cache(default=None) + def _get_annotated_class_object(self): + from jedi.evaluate.gradual.annotation import py__annotations__, \ + infer_type_vars_for_execution + + for func in self._get_annotation_init_functions(): + # Just take the first result, it should always be one, because we + # control the typeshed code. + bound = BoundMethod(self, func) + execution = bound.get_function_execution(self.var_args) + if not execution.matches_signature(): + # First check if the signature even matches, if not we don't + # need to infer anything. + continue + + all_annotations = py__annotations__(execution.tree_node) + defined, = self.class_context.define_generics( + infer_type_vars_for_execution(execution, all_annotations), + ) + debug.dbg('Inferred instance context as %s', defined, color='BLUE') + return defined + return None + + def get_annotated_class_object(self): + return self._get_annotated_class_object() or self.class_context + + def _get_annotation_init_functions(self): + filter = next(self.class_context.get_filters()) + for init_name in filter.get('__init__'): + for init in init_name.infer(): + if init.is_function(): + for signature in init.get_signatures(): + yield signature.context + + +class AnonymousInstance(TreeInstance): + def __init__(self, evaluator, parent_context, class_context): + super(AnonymousInstance, self).__init__( + evaluator, + parent_context, + class_context, + var_args=AnonymousInstanceArguments(self), + ) + + def get_annotated_class_object(self): + return self.class_context # This is the default. + + +class CompiledInstanceName(compiled.CompiledName): + + def __init__(self, evaluator, instance, klass, name): + super(CompiledInstanceName, self).__init__( + evaluator, + klass.parent_context, + name.string_name + ) + self._instance = instance + self._class_member_name = name + + @iterator_to_context_set + def infer(self): + for result_context in self._class_member_name.infer(): + if result_context.api_type == 'function': + yield CompiledBoundMethod(result_context) + else: + yield result_context + + +class CompiledInstanceClassFilter(AbstractFilter): + name_class = CompiledInstanceName + + def __init__(self, evaluator, instance, f): + self._evaluator = evaluator + self._instance = instance + self._class_filter = f + + def get(self, name): + return self._convert(self._class_filter.get(name)) + + def values(self): + return self._convert(self._class_filter.values()) + + def _convert(self, names): + klass = self._class_filter.compiled_object + return [ + CompiledInstanceName(self._evaluator, self._instance, klass, n) + for n in names + ] + + +class BoundMethod(FunctionMixin, ContextWrapper): + def __init__(self, instance, function): + super(BoundMethod, self).__init__(function) + self.instance = instance + + def is_bound_method(self): + return True + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'MethodType') + return c + + def _get_arguments(self, arguments): + if arguments is None: + arguments = AnonymousInstanceArguments(self.instance) + + return InstanceArguments(self.instance, arguments) + + def get_function_execution(self, arguments=None): + arguments = self._get_arguments(arguments) + return super(BoundMethod, self).get_function_execution(arguments) + + def py__call__(self, arguments): + if isinstance(self._wrapped_context, OverloadedFunctionContext): + return self._wrapped_context.py__call__(self._get_arguments(arguments)) + + function_execution = self.get_function_execution(arguments) + return function_execution.infer() + + def get_signature_functions(self): + return [ + BoundMethod(self.instance, f) + for f in self._wrapped_context.get_signature_functions() + ] + + def get_signatures(self): + return [sig.bind(self) for sig in super(BoundMethod, self).get_signatures()] + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_context) + + +class CompiledBoundMethod(ContextWrapper): + def is_bound_method(self): + return True + + def get_signatures(self): + return [sig.bind(self) for sig in self._wrapped_context.get_signatures()] + + +class SelfName(TreeNameDefinition): + """ + This name calculates the parent_context lazily. + """ + def __init__(self, instance, class_context, tree_name): + self._instance = instance + self.class_context = class_context + self.tree_name = tree_name + + @property + def parent_context(self): + return self._instance.create_instance_context(self.class_context, self.tree_name) + + +class LazyInstanceClassName(object): + def __init__(self, instance, class_context, class_member_name): + self._instance = instance + self.class_context = class_context + self._class_member_name = class_member_name + + @iterator_to_context_set + def infer(self): + for result_context in self._class_member_name.infer(): + for c in apply_py__get__(result_context, self._instance, self.class_context): + yield c + + def __getattr__(self, name): + return getattr(self._class_member_name, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._class_member_name) + + +class InstanceClassFilter(AbstractFilter): + """ + This filter is special in that it uses the class filter and wraps the + resulting names in LazyINstanceClassName. The idea is that the class name + filtering can be very flexible and always be reflected in instances. + """ + def __init__(self, evaluator, instance, class_filter): + self._instance = instance + self._class_filter = class_filter + + def get(self, name): + return self._convert(self._class_filter.get(name, from_instance=True)) + + def values(self): + return self._convert(self._class_filter.values(from_instance=True)) + + def _convert(self, names): + return [LazyInstanceClassName(self._instance, self._class_filter.context, n) for n in names] + + def __repr__(self): + return '<%s for %s>' % (self.__class__.__name__, self._class_filter.context) + + +class SelfAttributeFilter(ClassFilter): + """ + This class basically filters all the use cases where `self.*` was assigned. + """ + name_class = SelfName + + def __init__(self, evaluator, context, class_context, origin_scope): + super(SelfAttributeFilter, self).__init__( + evaluator=evaluator, + context=context, + node_context=class_context, + origin_scope=origin_scope, + is_instance=True, + ) + self._class_context = class_context + + def _filter(self, names): + names = self._filter_self_names(names) + start, end = self._parser_scope.start_pos, self._parser_scope.end_pos + return [n for n in names if start < n.start_pos < end] + + def _filter_self_names(self, names): + for name in names: + trailer = name.parent + if trailer.type == 'trailer' \ + and len(trailer.parent.children) == 2 \ + and trailer.children[0] == '.': + if name.is_definition() and self._access_possible(name, from_instance=True): + # TODO filter non-self assignments. + yield name + + def _convert_names(self, names): + return [self.name_class(self.context, self._class_context, name) for name in names] + + def _check_flows(self, names): + return names + + +class InstanceArguments(TreeArgumentsWrapper): + def __init__(self, instance, arguments): + super(InstanceArguments, self).__init__(arguments) + self.instance = instance + + def unpack(self, func=None): + yield None, LazyKnownContext(self.instance) + for values in self._wrapped_arguments.unpack(func): + yield values + + def get_executed_params_and_issues(self, execution_context): + if isinstance(self._wrapped_arguments, AnonymousInstanceArguments): + return self._wrapped_arguments.get_executed_params_and_issues(execution_context) + + return super(InstanceArguments, self).get_executed_params_and_issues(execution_context) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/iterable.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/iterable.py new file mode 100644 index 0000000..bf69bde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/iterable.py @@ -0,0 +1,821 @@ +""" +Contains all classes and functions to deal with lists, dicts, generators and +iterators in general. + +Array modifications +******************* + +If the content of an array (``set``/``list``) is requested somewhere, the +current module will be checked for appearances of ``arr.append``, +``arr.insert``, etc. If the ``arr`` name points to an actual array, the +content will be added + +This can be really cpu intensive, as you can imagine. Because |jedi| has to +follow **every** ``append`` and check wheter it's the right array. However this +works pretty good, because in *slow* cases, the recursion detector and other +settings will stop this process. + +It is important to note that: + +1. Array modfications work only in the current module. +2. Jedi only checks Array additions; ``list.pop``, etc are ignored. +""" +import sys + +from jedi import debug +from jedi import settings +from jedi._compatibility import force_unicode, is_py3 +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate import recursion +from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \ + LazyTreeContext +from jedi.evaluate.helpers import get_int_or_none, is_string, \ + predefine_names, evaluate_call_of_leaf, reraise_getitem_errors, \ + SimpleGetItemNotFound +from jedi.evaluate.utils import safe_property, to_list +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.filters import ParserTreeFilter, LazyAttributeOverwrite, \ + publish_method +from jedi.evaluate.base_context import ContextSet, Context, NO_CONTEXTS, \ + TreeContext, ContextualizedNode, iterate_contexts, HelperContextMixin, _sentinel +from jedi.parser_utils import get_sync_comp_fors + + +class IterableMixin(object): + def py__stop_iteration_returns(self): + return ContextSet([compiled.builtin_from_name(self.evaluator, u'None')]) + + # At the moment, safe values are simple values like "foo", 1 and not + # lists/dicts. Therefore as a small speed optimization we can just do the + # default instead of resolving the lazy wrapped contexts, that are just + # doing this in the end as well. + # This mostly speeds up patterns like `sys.version_info >= (3, 0)` in + # typeshed. + if sys.version_info[0] == 2: + # Python 2........... + def get_safe_value(self, default=_sentinel): + if default is _sentinel: + raise ValueError("There exists no safe value for context %s" % self) + return default + else: + get_safe_value = Context.get_safe_value + + +class GeneratorBase(LazyAttributeOverwrite, IterableMixin): + array_type = None + + def _get_wrapped_context(self): + generator, = self.evaluator.typing_module \ + .py__getattribute__('Generator') \ + .execute_annotation() + return generator + + def is_instance(self): + return False + + def py__bool__(self): + return True + + @publish_method('__iter__') + def py__iter__(self, contextualized_node=None): + return ContextSet([self]) + + @publish_method('send') + @publish_method('next', python_version_match=2) + @publish_method('__next__', python_version_match=3) + def py__next__(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def py__stop_iteration_returns(self): + return ContextSet([compiled.builtin_from_name(self.evaluator, u'None')]) + + @property + def name(self): + return compiled.CompiledContextName(self, 'Generator') + + +class Generator(GeneratorBase): + """Handling of `yield` functions.""" + def __init__(self, evaluator, func_execution_context): + super(Generator, self).__init__(evaluator) + self._func_execution_context = func_execution_context + + def py__iter__(self, contextualized_node=None): + return self._func_execution_context.get_yield_lazy_contexts() + + def py__stop_iteration_returns(self): + return self._func_execution_context.get_return_values() + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._func_execution_context) + + +class CompForContext(TreeContext): + @classmethod + def from_comp_for(cls, parent_context, comp_for): + return cls(parent_context.evaluator, parent_context, comp_for) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield ParserTreeFilter(self.evaluator, self) + + +def comprehension_from_atom(evaluator, context, atom): + bracket = atom.children[0] + test_list_comp = atom.children[1] + + if bracket == '{': + if atom.children[1].children[1] == ':': + sync_comp_for = test_list_comp.children[3] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + + return DictComprehension( + evaluator, + context, + sync_comp_for_node=sync_comp_for, + key_node=test_list_comp.children[0], + value_node=test_list_comp.children[2], + ) + else: + cls = SetComprehension + elif bracket == '(': + cls = GeneratorComprehension + elif bracket == '[': + cls = ListComprehension + + sync_comp_for = test_list_comp.children[1] + if sync_comp_for.type == 'comp_for': + sync_comp_for = sync_comp_for.children[1] + + return cls( + evaluator, + defining_context=context, + sync_comp_for_node=sync_comp_for, + entry_node=test_list_comp.children[0], + ) + + +class ComprehensionMixin(object): + @evaluator_method_cache() + def _get_comp_for_context(self, parent_context, comp_for): + return CompForContext.from_comp_for(parent_context, comp_for) + + def _nested(self, comp_fors, parent_context=None): + comp_for = comp_fors[0] + + is_async = comp_for.parent.type == 'comp_for' + + input_node = comp_for.children[3] + parent_context = parent_context or self._defining_context + input_types = parent_context.eval_node(input_node) + # TODO: simulate await if self.is_async + + cn = ContextualizedNode(parent_context, input_node) + iterated = input_types.iterate(cn, is_async=is_async) + exprlist = comp_for.children[1] + for i, lazy_context in enumerate(iterated): + types = lazy_context.infer() + dct = unpack_tuple_to_dict(parent_context, types, exprlist) + context_ = self._get_comp_for_context( + parent_context, + comp_for, + ) + with predefine_names(context_, comp_for, dct): + try: + for result in self._nested(comp_fors[1:], context_): + yield result + except IndexError: + iterated = context_.eval_node(self._entry_node) + if self.array_type == 'dict': + yield iterated, context_.eval_node(self._value_node) + else: + yield iterated + + @evaluator_method_cache(default=[]) + @to_list + def _iterate(self): + comp_fors = tuple(get_sync_comp_fors(self._sync_comp_for_node)) + for result in self._nested(comp_fors): + yield result + + def py__iter__(self, contextualized_node=None): + for set_ in self._iterate(): + yield LazyKnownContexts(set_) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._sync_comp_for_node) + + +class _DictMixin(object): + def _get_generics(self): + return tuple(c_set.py__class__() for c_set in self.get_mapping_item_contexts()) + + +class Sequence(LazyAttributeOverwrite, IterableMixin): + api_type = u'instance' + + @property + def name(self): + return compiled.CompiledContextName(self, self.array_type) + + def _get_generics(self): + return (self.merge_types_of_iterate().py__class__(),) + + def _get_wrapped_context(self): + from jedi.evaluate.gradual.typing import GenericClass + klass = compiled.builtin_from_name(self.evaluator, self.array_type) + c, = GenericClass(klass, self._get_generics()).execute_annotation() + return c + + def py__bool__(self): + return None # We don't know the length, because of appends. + + def py__class__(self): + return compiled.builtin_from_name(self.evaluator, self.array_type) + + @safe_property + def parent(self): + return self.evaluator.builtins_module + + def py__getitem__(self, index_context_set, contextualized_node): + if self.array_type == 'dict': + return self._dict_values() + return iterate_contexts(ContextSet([self])) + + +class _BaseComprehension(ComprehensionMixin): + def __init__(self, evaluator, defining_context, sync_comp_for_node, entry_node): + assert sync_comp_for_node.type == 'sync_comp_for' + super(_BaseComprehension, self).__init__(evaluator) + self._defining_context = defining_context + self._sync_comp_for_node = sync_comp_for_node + self._entry_node = entry_node + + +class ListComprehension(_BaseComprehension, Sequence): + array_type = u'list' + + def py__simple_getitem__(self, index): + if isinstance(index, slice): + return ContextSet([self]) + + all_types = list(self.py__iter__()) + with reraise_getitem_errors(IndexError, TypeError): + lazy_context = all_types[index] + return lazy_context.infer() + + +class SetComprehension(_BaseComprehension, Sequence): + array_type = u'set' + + +class GeneratorComprehension(_BaseComprehension, GeneratorBase): + pass + + +class DictComprehension(ComprehensionMixin, Sequence): + array_type = u'dict' + + def __init__(self, evaluator, defining_context, sync_comp_for_node, key_node, value_node): + assert sync_comp_for_node.type == 'sync_comp_for' + super(DictComprehension, self).__init__(evaluator) + self._defining_context = defining_context + self._sync_comp_for_node = sync_comp_for_node + self._entry_node = key_node + self._value_node = value_node + + def py__iter__(self, contextualized_node=None): + for keys, values in self._iterate(): + yield LazyKnownContexts(keys) + + def py__simple_getitem__(self, index): + for keys, values in self._iterate(): + for k in keys: + if isinstance(k, compiled.CompiledObject): + # Be careful in the future if refactoring, index could be a + # slice. + if k.get_safe_value(default=object()) == index: + return values + raise SimpleGetItemNotFound() + + def _dict_keys(self): + return ContextSet.from_sets(keys for keys, values in self._iterate()) + + def _dict_values(self): + return ContextSet.from_sets(values for keys, values in self._iterate()) + + @publish_method('values') + def _imitate_values(self): + lazy_context = LazyKnownContexts(self._dict_values()) + return ContextSet([FakeSequence(self.evaluator, u'list', [lazy_context])]) + + @publish_method('items') + def _imitate_items(self): + lazy_contexts = [ + LazyKnownContext( + FakeSequence( + self.evaluator, + u'tuple', + [LazyKnownContexts(key), + LazyKnownContexts(value)] + ) + ) + for key, value in self._iterate() + ] + + return ContextSet([FakeSequence(self.evaluator, u'list', lazy_contexts)]) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + def exact_key_items(self): + # NOTE: A smarter thing can probably done here to achieve better + # completions, but at least like this jedi doesn't crash + return [] + + +class SequenceLiteralContext(Sequence): + _TUPLE_LIKE = 'testlist_star_expr', 'testlist', 'subscriptlist' + mapping = {'(': u'tuple', + '[': u'list', + '{': u'set'} + + def __init__(self, evaluator, defining_context, atom): + super(SequenceLiteralContext, self).__init__(evaluator) + self.atom = atom + self._defining_context = defining_context + + if self.atom.type in self._TUPLE_LIKE: + self.array_type = u'tuple' + else: + self.array_type = SequenceLiteralContext.mapping[atom.children[0]] + """The builtin name of the array (list, set, tuple or dict).""" + + def py__simple_getitem__(self, index): + """Here the index is an int/str. Raises IndexError/KeyError.""" + if self.array_type == u'dict': + compiled_obj_index = compiled.create_simple_object(self.evaluator, index) + for key, value in self.get_tree_entries(): + for k in self._defining_context.eval_node(key): + try: + method = k.execute_operation + except AttributeError: + pass + else: + if method(compiled_obj_index, u'==').get_safe_value(): + return self._defining_context.eval_node(value) + raise SimpleGetItemNotFound('No key found in dictionary %s.' % self) + + if isinstance(index, slice): + return ContextSet([self]) + else: + with reraise_getitem_errors(TypeError, KeyError, IndexError): + node = self.get_tree_entries()[index] + return self._defining_context.eval_node(node) + + def py__iter__(self, contextualized_node=None): + """ + While values returns the possible values for any array field, this + function returns the value for a certain index. + """ + if self.array_type == u'dict': + # Get keys. + types = NO_CONTEXTS + for k, _ in self.get_tree_entries(): + types |= self._defining_context.eval_node(k) + # We don't know which dict index comes first, therefore always + # yield all the types. + for _ in types: + yield LazyKnownContexts(types) + else: + for node in self.get_tree_entries(): + if node == ':' or node.type == 'subscript': + # TODO this should probably use at least part of the code + # of eval_subscript_list. + yield LazyKnownContext(Slice(self._defining_context, None, None, None)) + else: + yield LazyTreeContext(self._defining_context, node) + for addition in check_array_additions(self._defining_context, self): + yield addition + + def py__len__(self): + # This function is not really used often. It's more of a try. + return len(self.get_tree_entries()) + + def _dict_values(self): + return ContextSet.from_sets( + self._defining_context.eval_node(v) + for k, v in self.get_tree_entries() + ) + + def get_tree_entries(self): + c = self.atom.children + + if self.atom.type in self._TUPLE_LIKE: + return c[::2] + + array_node = c[1] + if array_node in (']', '}', ')'): + return [] # Direct closing bracket, doesn't contain items. + + if array_node.type == 'testlist_comp': + # filter out (for now) pep 448 single-star unpacking + return [value for value in array_node.children[::2] + if value.type != "star_expr"] + elif array_node.type == 'dictorsetmaker': + kv = [] + iterator = iter(array_node.children) + for key in iterator: + if key == "**": + # dict with pep 448 double-star unpacking + # for now ignoring the values imported by ** + next(iterator) + next(iterator, None) # Possible comma. + else: + op = next(iterator, None) + if op is None or op == ',': + if key.type == "star_expr": + # pep 448 single-star unpacking + # for now ignoring values imported by * + pass + else: + kv.append(key) # A set. + else: + assert op == ':' # A dict. + kv.append((key, next(iterator))) + next(iterator, None) # Possible comma. + return kv + else: + if array_node.type == "star_expr": + # pep 448 single-star unpacking + # for now ignoring values imported by * + return [] + else: + return [array_node] + + def exact_key_items(self): + """ + Returns a generator of tuples like dict.items(), where the key is + resolved (as a string) and the values are still lazy contexts. + """ + for key_node, value in self.get_tree_entries(): + for key in self._defining_context.eval_node(key_node): + if is_string(key): + yield key.get_safe_value(), LazyTreeContext(self._defining_context, value) + + def __repr__(self): + return "<%s of %s>" % (self.__class__.__name__, self.atom) + + +class DictLiteralContext(_DictMixin, SequenceLiteralContext): + array_type = u'dict' + + def __init__(self, evaluator, defining_context, atom): + super(SequenceLiteralContext, self).__init__(evaluator) + self._defining_context = defining_context + self.atom = atom + + @publish_method('values') + def _imitate_values(self): + lazy_context = LazyKnownContexts(self._dict_values()) + return ContextSet([FakeSequence(self.evaluator, u'list', [lazy_context])]) + + @publish_method('items') + def _imitate_items(self): + lazy_contexts = [ + LazyKnownContext(FakeSequence( + self.evaluator, u'tuple', + (LazyTreeContext(self._defining_context, key_node), + LazyTreeContext(self._defining_context, value_node)) + )) for key_node, value_node in self.get_tree_entries() + ] + + return ContextSet([FakeSequence(self.evaluator, u'list', lazy_contexts)]) + + def _dict_keys(self): + return ContextSet.from_sets( + self._defining_context.eval_node(k) + for k, v in self.get_tree_entries() + ) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + +class _FakeArray(SequenceLiteralContext): + def __init__(self, evaluator, container, type): + super(SequenceLiteralContext, self).__init__(evaluator) + self.array_type = type + self.atom = container + # TODO is this class really needed? + + +class FakeSequence(_FakeArray): + def __init__(self, evaluator, array_type, lazy_context_list): + """ + type should be one of "tuple", "list" + """ + super(FakeSequence, self).__init__(evaluator, None, array_type) + self._lazy_context_list = lazy_context_list + + def py__simple_getitem__(self, index): + if isinstance(index, slice): + return ContextSet([self]) + + with reraise_getitem_errors(IndexError, TypeError): + lazy_context = self._lazy_context_list[index] + return lazy_context.infer() + + def py__iter__(self, contextualized_node=None): + return self._lazy_context_list + + def py__bool__(self): + return bool(len(self._lazy_context_list)) + + def __repr__(self): + return "<%s of %s>" % (type(self).__name__, self._lazy_context_list) + + +class FakeDict(_DictMixin, _FakeArray): + def __init__(self, evaluator, dct): + super(FakeDict, self).__init__(evaluator, dct, u'dict') + self._dct = dct + + def py__iter__(self, contextualized_node=None): + for key in self._dct: + yield LazyKnownContext(compiled.create_simple_object(self.evaluator, key)) + + def py__simple_getitem__(self, index): + if is_py3 and self.evaluator.environment.version_info.major == 2: + # In Python 2 bytes and unicode compare. + if isinstance(index, bytes): + index_unicode = force_unicode(index) + try: + return self._dct[index_unicode].infer() + except KeyError: + pass + elif isinstance(index, str): + index_bytes = index.encode('utf-8') + try: + return self._dct[index_bytes].infer() + except KeyError: + pass + + with reraise_getitem_errors(KeyError, TypeError): + lazy_context = self._dct[index] + return lazy_context.infer() + + @publish_method('values') + def _values(self): + return ContextSet([FakeSequence( + self.evaluator, u'tuple', + [LazyKnownContexts(self._dict_values())] + )]) + + def _dict_values(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self._dct.values()) + + def _dict_keys(self): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def get_mapping_item_contexts(self): + return self._dict_keys(), self._dict_values() + + def exact_key_items(self): + return self._dct.items() + + +class MergedArray(_FakeArray): + def __init__(self, evaluator, arrays): + super(MergedArray, self).__init__(evaluator, arrays, arrays[-1].array_type) + self._arrays = arrays + + def py__iter__(self, contextualized_node=None): + for array in self._arrays: + for lazy_context in array.py__iter__(): + yield lazy_context + + def py__simple_getitem__(self, index): + return ContextSet.from_sets(lazy_context.infer() for lazy_context in self.py__iter__()) + + def get_tree_entries(self): + for array in self._arrays: + for a in array.get_tree_entries(): + yield a + + def __len__(self): + return sum(len(a) for a in self._arrays) + + +def unpack_tuple_to_dict(context, types, exprlist): + """ + Unpacking tuple assignments in for statements and expr_stmts. + """ + if exprlist.type == 'name': + return {exprlist.value: types} + elif exprlist.type == 'atom' and exprlist.children[0] in ('(', '['): + return unpack_tuple_to_dict(context, types, exprlist.children[1]) + elif exprlist.type in ('testlist', 'testlist_comp', 'exprlist', + 'testlist_star_expr'): + dct = {} + parts = iter(exprlist.children[::2]) + n = 0 + for lazy_context in types.iterate(exprlist): + n += 1 + try: + part = next(parts) + except StopIteration: + # TODO this context is probably not right. + analysis.add(context, 'value-error-too-many-values', part, + message="ValueError: too many values to unpack (expected %s)" % n) + else: + dct.update(unpack_tuple_to_dict(context, lazy_context.infer(), part)) + has_parts = next(parts, None) + if types and has_parts is not None: + # TODO this context is probably not right. + analysis.add(context, 'value-error-too-few-values', has_parts, + message="ValueError: need more than %s values to unpack" % n) + return dct + elif exprlist.type == 'power' or exprlist.type == 'atom_expr': + # Something like ``arr[x], var = ...``. + # This is something that is not yet supported, would also be difficult + # to write into a dict. + return {} + elif exprlist.type == 'star_expr': # `a, *b, c = x` type unpackings + # Currently we're not supporting them. + return {} + raise NotImplementedError + + +def check_array_additions(context, sequence): + """ Just a mapper function for the internal _check_array_additions """ + if sequence.array_type not in ('list', 'set'): + # TODO also check for dict updates + return NO_CONTEXTS + + return _check_array_additions(context, sequence) + + +@evaluator_method_cache(default=NO_CONTEXTS) +@debug.increase_indent +def _check_array_additions(context, sequence): + """ + Checks if a `Array` has "add" (append, insert, extend) statements: + + >>> a = [""] + >>> a.append(1) + """ + from jedi.evaluate import arguments + + debug.dbg('Dynamic array search for %s' % sequence, color='MAGENTA') + module_context = context.get_root_context() + if not settings.dynamic_array_additions or isinstance(module_context, compiled.CompiledObject): + debug.dbg('Dynamic array search aborted.', color='MAGENTA') + return NO_CONTEXTS + + def find_additions(context, arglist, add_name): + params = list(arguments.TreeArguments(context.evaluator, context, arglist).unpack()) + result = set() + if add_name in ['insert']: + params = params[1:] + if add_name in ['append', 'add', 'insert']: + for key, lazy_context in params: + result.add(lazy_context) + elif add_name in ['extend', 'update']: + for key, lazy_context in params: + result |= set(lazy_context.infer().iterate()) + return result + + temp_param_add, settings.dynamic_params_for_other_modules = \ + settings.dynamic_params_for_other_modules, False + + is_list = sequence.name.string_name == 'list' + search_names = (['append', 'extend', 'insert'] if is_list else ['add', 'update']) + + added_types = set() + for add_name in search_names: + try: + possible_names = module_context.tree_node.get_used_names()[add_name] + except KeyError: + continue + else: + for name in possible_names: + context_node = context.tree_node + if not (context_node.start_pos < name.start_pos < context_node.end_pos): + continue + trailer = name.parent + power = trailer.parent + trailer_pos = power.children.index(trailer) + try: + execution_trailer = power.children[trailer_pos + 1] + except IndexError: + continue + else: + if execution_trailer.type != 'trailer' \ + or execution_trailer.children[0] != '(' \ + or execution_trailer.children[1] == ')': + continue + + random_context = context.create_context(name) + + with recursion.execution_allowed(context.evaluator, power) as allowed: + if allowed: + found = evaluate_call_of_leaf( + random_context, + name, + cut_own_trailer=True + ) + if sequence in found: + # The arrays match. Now add the results + added_types |= find_additions( + random_context, + execution_trailer.children[1], + add_name + ) + + # reset settings + settings.dynamic_params_for_other_modules = temp_param_add + debug.dbg('Dynamic array result %s' % added_types, color='MAGENTA') + return added_types + + +def get_dynamic_array_instance(instance, arguments): + """Used for set() and list() instances.""" + ai = _ArrayInstance(instance, arguments) + from jedi.evaluate import arguments + return arguments.ValuesArguments([ContextSet([ai])]) + + +class _ArrayInstance(HelperContextMixin): + """ + Used for the usage of set() and list(). + This is definitely a hack, but a good one :-) + It makes it possible to use set/list conversions. + """ + def __init__(self, instance, var_args): + self.instance = instance + self.var_args = var_args + + def py__class__(self): + tuple_, = self.instance.evaluator.builtins_module.py__getattribute__('tuple') + return tuple_ + + def py__iter__(self, contextualized_node=None): + var_args = self.var_args + try: + _, lazy_context = next(var_args.unpack()) + except StopIteration: + pass + else: + for lazy in lazy_context.infer().iterate(): + yield lazy + + from jedi.evaluate import arguments + if isinstance(var_args, arguments.TreeArguments): + additions = _check_array_additions(var_args.context, self.instance) + for addition in additions: + yield addition + + def iterate(self, contextualized_node=None, is_async=False): + return self.py__iter__(contextualized_node) + + +class Slice(object): + def __init__(self, context, start, stop, step): + self._context = context + self._slice_object = None + # All of them are either a Precedence or None. + self._start = start + self._stop = stop + self._step = step + + def __getattr__(self, name): + if self._slice_object is None: + context = compiled.builtin_from_name(self._context.evaluator, 'slice') + self._slice_object, = context.execute_evaluated() + return getattr(self._slice_object, name) + + @property + def obj(self): + """ + Imitate CompiledObject.obj behavior and return a ``builtin.slice()`` + object. + """ + def get(element): + if element is None: + return None + + result = self._context.eval_node(element) + if len(result) != 1: + # For simplicity, we want slices to be clear defined with just + # one type. Otherwise we will return an empty slice object. + raise IndexError + + context, = result + return get_int_or_none(context) + + try: + return slice(get(self._start), get(self._stop), get(self._step)) + except IndexError: + return slice(None, None, None) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/klass.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/klass.py new file mode 100644 index 0000000..b587c6e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/klass.py @@ -0,0 +1,344 @@ +""" +Like described in the :mod:`parso.python.tree` module, +there's a need for an ast like module to represent the states of parsed +modules. + +But now there are also structures in Python that need a little bit more than +that. An ``Instance`` for example is only a ``Class`` before it is +instantiated. This class represents these cases. + +So, why is there also a ``Class`` class here? Well, there are decorators and +they change classes in Python 3. + +Representation modules also define "magic methods". Those methods look like +``py__foo__`` and are typically mappable to the Python equivalents ``__call__`` +and others. Here's a list: + +====================================== ======================================== +**Method** **Description** +-------------------------------------- ---------------------------------------- +py__call__(arguments: Array) On callable objects, returns types. +py__bool__() Returns True/False/None; None means that + there's no certainty. +py__bases__() Returns a list of base classes. +py__iter__() Returns a generator of a set of types. +py__class__() Returns the class of an instance. +py__simple_getitem__(index: int/str) Returns a a set of types of the index. + Can raise an IndexError/KeyError. +py__getitem__(indexes: ContextSet) Returns a a set of types of the index. +py__file__() Only on modules. Returns None if does + not exist. +py__package__() -> List[str] Only on modules. For the import system. +py__path__() Only on modules. For the import system. +py__get__(call_object) Only on instances. Simulates + descriptors. +py__doc__() Returns the docstring for a context. +====================================== ======================================== + +""" +from jedi import debug +from jedi._compatibility import use_metaclass +from jedi.parser_utils import get_cached_parent_scope +from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass, \ + evaluator_method_generator_cache +from jedi.evaluate import compiled +from jedi.evaluate.lazy_context import LazyKnownContexts +from jedi.evaluate.filters import ParserTreeFilter +from jedi.evaluate.names import TreeNameDefinition, ContextName +from jedi.evaluate.arguments import unpack_arglist, ValuesArguments +from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \ + NO_CONTEXTS +from jedi.evaluate.context.function import FunctionAndClassBase +from jedi.plugins import plugin_manager + + +def apply_py__get__(context, instance, class_context): + try: + method = context.py__get__ + except AttributeError: + yield context + else: + for descriptor_context in method(instance, class_context): + yield descriptor_context + + +class ClassName(TreeNameDefinition): + def __init__(self, parent_context, tree_name, name_context, apply_decorators): + super(ClassName, self).__init__(parent_context, tree_name) + self._name_context = name_context + self._apply_decorators = apply_decorators + + @iterator_to_context_set + def infer(self): + # We're using a different context to infer, so we cannot call super(). + from jedi.evaluate.syntax_tree import tree_name_to_contexts + inferred = tree_name_to_contexts( + self.parent_context.evaluator, self._name_context, self.tree_name) + + for result_context in inferred: + if self._apply_decorators: + for c in apply_py__get__(result_context, + instance=None, + class_context=self.parent_context): + yield c + else: + yield result_context + + +class ClassFilter(ParserTreeFilter): + name_class = ClassName + + def __init__(self, *args, **kwargs): + self._is_instance = kwargs.pop('is_instance') # Python 2 :/ + super(ClassFilter, self).__init__(*args, **kwargs) + + def _convert_names(self, names): + return [ + self.name_class( + parent_context=self.context, + tree_name=name, + name_context=self._node_context, + apply_decorators=not self._is_instance, + ) for name in names + ] + + def _equals_origin_scope(self): + node = self._origin_scope + while node is not None: + if node == self._parser_scope or node == self.context: + return True + node = get_cached_parent_scope(self._used_names, node) + return False + + def _access_possible(self, name, from_instance=False): + # Filter for ClassVar variables + # TODO this is not properly done, yet. It just checks for the string + # ClassVar in the annotation, which can be quite imprecise. If we + # wanted to do this correct, we would have to resolve the ClassVar. + if not from_instance: + expr_stmt = name.get_definition() + if expr_stmt is not None and expr_stmt.type == 'expr_stmt': + annassign = expr_stmt.children[1] + if annassign.type == 'annassign': + # TODO this is not proper matching + if 'ClassVar' not in annassign.children[1].get_code(): + return False + + # Filter for name mangling of private variables like __foo + return not name.value.startswith('__') or name.value.endswith('__') \ + or self._equals_origin_scope() + + def _filter(self, names, from_instance=False): + names = super(ClassFilter, self)._filter(names) + return [name for name in names if self._access_possible(name, from_instance)] + + +class ClassMixin(object): + def is_class(self): + return True + + def py__call__(self, arguments=None): + from jedi.evaluate.context import TreeInstance + if arguments is None: + arguments = ValuesArguments([]) + return ContextSet([TreeInstance(self.evaluator, self.parent_context, self, arguments)]) + + def py__class__(self): + return compiled.builtin_from_name(self.evaluator, u'type') + + @property + def name(self): + return ContextName(self, self.tree_node.name) + + def py__name__(self): + return self.name.string_name + + def get_param_names(self): + for context_ in self.py__getattribute__(u'__init__'): + if context_.is_function(): + return list(context_.get_param_names())[1:] + return [] + + @evaluator_method_generator_cache() + def py__mro__(self): + mro = [self] + yield self + # TODO Do a proper mro resolution. Currently we are just listing + # classes. However, it's a complicated algorithm. + for lazy_cls in self.py__bases__(): + # TODO there's multiple different mro paths possible if this yields + # multiple possibilities. Could be changed to be more correct. + for cls in lazy_cls.infer(): + # TODO detect for TypeError: duplicate base class str, + # e.g. `class X(str, str): pass` + try: + mro_method = cls.py__mro__ + except AttributeError: + # TODO add a TypeError like: + """ + >>> class Y(lambda: test): pass + Traceback (most recent call last): + File "", line 1, in + TypeError: function() argument 1 must be code, not str + >>> class Y(1): pass + Traceback (most recent call last): + File "", line 1, in + TypeError: int() takes at most 2 arguments (3 given) + """ + debug.warning('Super class of %s is not a class: %s', self, cls) + else: + for cls_new in mro_method(): + if cls_new not in mro: + mro.append(cls_new) + yield cls_new + + def get_filters(self, search_global=False, until_position=None, + origin_scope=None, is_instance=False): + metaclasses = self.get_metaclasses() + if metaclasses: + for f in self.get_metaclass_filters(metaclasses): + yield f + + if search_global: + yield self.get_global_filter(until_position, origin_scope) + else: + for cls in self.py__mro__(): + if isinstance(cls, compiled.CompiledObject): + for filter in cls.get_filters(is_instance=is_instance): + yield filter + else: + yield ClassFilter( + self.evaluator, self, node_context=cls, + origin_scope=origin_scope, + is_instance=is_instance + ) + if not is_instance: + from jedi.evaluate.compiled import builtin_from_name + type_ = builtin_from_name(self.evaluator, u'type') + assert isinstance(type_, ClassContext) + if type_ != self: + for instance in type_.py__call__(): + instance_filters = instance.get_filters() + # Filter out self filters + next(instance_filters) + next(instance_filters) + yield next(instance_filters) + + def get_signatures(self): + init_funcs = self.py__call__().py__getattribute__('__init__') + return [sig.bind(self) for sig in init_funcs.get_signatures()] + + def get_global_filter(self, until_position=None, origin_scope=None): + return ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ) + + +class ClassContext(use_metaclass(CachedMetaClass, ClassMixin, FunctionAndClassBase)): + """ + This class is not only important to extend `tree.Class`, it is also a + important for descriptors (if the descriptor methods are evaluated or not). + """ + api_type = u'class' + + @evaluator_method_cache() + def list_type_vars(self): + found = [] + arglist = self.tree_node.get_super_arglist() + if arglist is None: + return [] + + for stars, node in unpack_arglist(arglist): + if stars: + continue # These are not relevant for this search. + + from jedi.evaluate.gradual.annotation import find_unknown_type_vars + for type_var in find_unknown_type_vars(self.parent_context, node): + if type_var not in found: + # The order matters and it's therefore a list. + found.append(type_var) + return found + + def _get_bases_arguments(self): + arglist = self.tree_node.get_super_arglist() + if arglist: + from jedi.evaluate import arguments + return arguments.TreeArguments(self.evaluator, self.parent_context, arglist) + return None + + @evaluator_method_cache(default=()) + def py__bases__(self): + args = self._get_bases_arguments() + if args is not None: + lst = [value for key, value in args.unpack() if key is None] + if lst: + return lst + + if self.py__name__() == 'object' \ + and self.parent_context == self.evaluator.builtins_module: + return [] + return [LazyKnownContexts( + self.evaluator.builtins_module.py__getattribute__('object') + )] + + def py__getitem__(self, index_context_set, contextualized_node): + from jedi.evaluate.gradual.typing import LazyGenericClass + if not index_context_set: + return ContextSet([self]) + return ContextSet( + LazyGenericClass( + self, + index_context, + context_of_index=contextualized_node.context, + ) + for index_context in index_context_set + ) + + def define_generics(self, type_var_dict): + from jedi.evaluate.gradual.typing import GenericClass + + def remap_type_vars(): + """ + The TypeVars in the resulting classes have sometimes different names + and we need to check for that, e.g. a signature can be: + + def iter(iterable: Iterable[_T]) -> Iterator[_T]: ... + + However, the iterator is defined as Iterator[_T_co], which means it has + a different type var name. + """ + for type_var in self.list_type_vars(): + yield type_var_dict.get(type_var.py__name__(), NO_CONTEXTS) + + if type_var_dict: + return ContextSet([GenericClass( + self, + generics=tuple(remap_type_vars()) + )]) + return ContextSet({self}) + + @plugin_manager.decorate() + def get_metaclass_filters(self, metaclass): + debug.dbg('Unprocessed metaclass %s', metaclass) + return [] + + @evaluator_method_cache(default=NO_CONTEXTS) + def get_metaclasses(self): + args = self._get_bases_arguments() + if args is not None: + m = [value for key, value in args.unpack() if key == 'metaclass'] + metaclasses = ContextSet.from_sets(lazy_context.infer() for lazy_context in m) + metaclasses = ContextSet(m for m in metaclasses if m.is_class()) + if metaclasses: + return metaclasses + + for lazy_base in self.py__bases__(): + for context in lazy_base.infer(): + if context.is_class(): + contexts = context.get_metaclasses() + if contexts: + return contexts + return NO_CONTEXTS diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/module.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/module.py new file mode 100644 index 0000000..28f92f3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/module.py @@ -0,0 +1,283 @@ +import re +import os + +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.names import ContextNameMixin, AbstractNameDefinition +from jedi.evaluate.filters import GlobalNameFilter, ParserTreeFilter, DictFilter, MergedFilter +from jedi.evaluate import compiled +from jedi.evaluate.base_context import TreeContext +from jedi.evaluate.names import SubModuleName +from jedi.evaluate.helpers import contexts_from_qualified_names +from jedi.evaluate.compiled import create_simple_object +from jedi.evaluate.base_context import ContextSet + + +class _ModuleAttributeName(AbstractNameDefinition): + """ + For module attributes like __file__, __str__ and so on. + """ + api_type = u'instance' + + def __init__(self, parent_module, string_name, string_value=None): + self.parent_context = parent_module + self.string_name = string_name + self._string_value = string_value + + def infer(self): + if self._string_value is not None: + s = self._string_value + if self.parent_context.evaluator.environment.version_info.major == 2 \ + and not isinstance(s, bytes): + s = s.encode('utf-8') + return ContextSet([ + create_simple_object(self.parent_context.evaluator, s) + ]) + return compiled.get_string_context_set(self.parent_context.evaluator) + + +class ModuleName(ContextNameMixin, AbstractNameDefinition): + start_pos = 1, 0 + + def __init__(self, context, name): + self._context = context + self._name = name + + @property + def string_name(self): + return self._name + + +def iter_module_names(evaluator, paths): + # Python modules/packages + for n in evaluator.compiled_subprocess.list_module_names(paths): + yield n + + for path in paths: + try: + dirs = os.listdir(path) + except OSError: + # The file might not exist or reading it might lead to an error. + debug.warning("Not possible to list directory: %s", path) + continue + for name in dirs: + # Namespaces + if os.path.isdir(os.path.join(path, name)): + # pycache is obviously not an interestin namespace. Also the + # name must be a valid identifier. + # TODO use str.isidentifier, once Python 2 is removed + if name != '__pycache__' and not re.search(r'\W|^\d', name): + yield name + # Stub files + if name.endswith('.pyi'): + if name != '__init__.pyi': + yield name[:-4] + + +class SubModuleDictMixin(object): + @evaluator_method_cache() + def sub_modules_dict(self): + """ + Lists modules in the directory of this module (if this module is a + package). + """ + names = {} + try: + method = self.py__path__ + except AttributeError: + pass + else: + mods = iter_module_names(self.evaluator, method()) + for name in mods: + # It's obviously a relative import to the current module. + names[name] = SubModuleName(self, name) + + # In the case of an import like `from x.` we don't need to + # add all the variables, this is only about submodules. + return names + + +class ModuleMixin(SubModuleDictMixin): + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield MergedFilter( + ParserTreeFilter( + self.evaluator, + context=self, + until_position=until_position, + origin_scope=origin_scope + ), + GlobalNameFilter(self, self.tree_node), + ) + yield DictFilter(self.sub_modules_dict()) + yield DictFilter(self._module_attributes_dict()) + for star_filter in self.iter_star_filters(): + yield star_filter + + def py__class__(self): + c, = contexts_from_qualified_names(self.evaluator, u'types', u'ModuleType') + return c + + def is_module(self): + return True + + def is_stub(self): + return False + + @property + @evaluator_method_cache() + def name(self): + return ModuleName(self, self._string_name) + + @property + def _string_name(self): + """ This is used for the goto functions. """ + # TODO It's ugly that we even use this, the name is usually well known + # ahead so just pass it when create a ModuleContext. + if self._path is None: + return '' # no path -> empty name + else: + sep = (re.escape(os.path.sep),) * 2 + r = re.search(r'([^%s]*?)(%s__init__)?(\.pyi?|\.so)?$' % sep, self._path) + # Remove PEP 3149 names + return re.sub(r'\.[a-z]+-\d{2}[mud]{0,3}$', '', r.group(1)) + + @evaluator_method_cache() + def _module_attributes_dict(self): + names = ['__package__', '__doc__', '__name__'] + # All the additional module attributes are strings. + dct = dict((n, _ModuleAttributeName(self, n)) for n in names) + file = self.py__file__() + if file is not None: + dct['__file__'] = _ModuleAttributeName(self, '__file__', file) + return dct + + def iter_star_filters(self, search_global=False): + for star_module in self.star_imports(): + yield next(star_module.get_filters(search_global)) + + # I'm not sure if the star import cache is really that effective anymore + # with all the other really fast import caches. Recheck. Also we would need + # to push the star imports into Evaluator.module_cache, if we reenable this. + @evaluator_method_cache([]) + def star_imports(self): + from jedi.evaluate.imports import Importer + + modules = [] + for i in self.tree_node.iter_imports(): + if i.is_star_import(): + new = Importer( + self.evaluator, + import_path=i.get_paths()[-1], + module_context=self, + level=i.level + ).follow() + + for module in new: + if isinstance(module, ModuleContext): + modules += module.star_imports() + modules += new + return modules + + def get_qualified_names(self): + """ + A module doesn't have a qualified name, but it's important to note that + it's reachable and not `None`. With this information we can add + qualified names on top for all context children. + """ + return () + + +class ModuleContext(ModuleMixin, TreeContext): + api_type = u'module' + parent_context = None + + def __init__(self, evaluator, module_node, file_io, string_names, code_lines, is_package=False): + super(ModuleContext, self).__init__( + evaluator, + parent_context=None, + tree_node=module_node + ) + self.file_io = file_io + if file_io is None: + self._path = None + else: + self._path = file_io.path + self.string_names = string_names # Optional[Tuple[str, ...]] + self.code_lines = code_lines + self.is_package = is_package + + def is_stub(self): + if self._path is not None and self._path.endswith('.pyi'): + # Currently this is the way how we identify stubs when e.g. goto is + # used in them. This could be changed if stubs would be identified + # sooner and used as StubModuleContext. + return True + return super(ModuleContext, self).is_stub() + + def py__name__(self): + if self.string_names is None: + return None + return '.'.join(self.string_names) + + def py__file__(self): + """ + In contrast to Python's __file__ can be None. + """ + if self._path is None: + return None + + return os.path.abspath(self._path) + + def py__package__(self): + if self.is_package: + return self.string_names + return self.string_names[:-1] + + def _py__path__(self): + # A namespace package is typically auto generated and ~10 lines long. + first_few_lines = ''.join(self.code_lines[:50]) + # these are strings that need to be used for namespace packages, + # the first one is ``pkgutil``, the second ``pkg_resources``. + options = ('declare_namespace(__name__)', 'extend_path(__path__') + if options[0] in first_few_lines or options[1] in first_few_lines: + # It is a namespace, now try to find the rest of the + # modules on sys_path or whatever the search_path is. + paths = set() + for s in self.evaluator.get_sys_path(): + other = os.path.join(s, self.name.string_name) + if os.path.isdir(other): + paths.add(other) + if paths: + return list(paths) + # Nested namespace packages will not be supported. Nobody ever + # asked for it and in Python 3 they are there without using all the + # crap above. + + # Default to the of this file. + file = self.py__file__() + assert file is not None # Shouldn't be a package in the first place. + return [os.path.dirname(file)] + + @property + def py__path__(self): + """ + Not seen here, since it's a property. The callback actually uses a + variable, so use it like:: + + foo.py__path__(sys_path) + + In case of a package, this returns Python's __path__ attribute, which + is a list of paths (strings). + Raises an AttributeError if the module is not a package. + """ + if self.is_package: + return self._py__path__ + else: + raise AttributeError('Only packages have __path__ attributes.') + + def __repr__(self): + return "<%s: %s@%s-%s is_stub=%s>" % ( + self.__class__.__name__, self._string_name, + self.tree_node.start_pos[0], self.tree_node.end_pos[0], + self.is_stub() + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/namespace.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/namespace.py new file mode 100644 index 0000000..12c8b3a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/context/namespace.py @@ -0,0 +1,64 @@ +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.filters import DictFilter +from jedi.evaluate.names import ContextNameMixin, AbstractNameDefinition +from jedi.evaluate.base_context import Context +from jedi.evaluate.context.module import SubModuleDictMixin + + +class ImplicitNSName(ContextNameMixin, AbstractNameDefinition): + """ + Accessing names for implicit namespace packages should infer to nothing. + This object will prevent Jedi from raising exceptions + """ + def __init__(self, implicit_ns_context, string_name): + self._context = implicit_ns_context + self.string_name = string_name + + +class ImplicitNamespaceContext(Context, SubModuleDictMixin): + """ + Provides support for implicit namespace packages + """ + # Is a module like every other module, because if you import an empty + # folder foobar it will be available as an object: + # . + api_type = u'module' + parent_context = None + + def __init__(self, evaluator, fullname, paths): + super(ImplicitNamespaceContext, self).__init__(evaluator, parent_context=None) + self.evaluator = evaluator + self._fullname = fullname + self._paths = paths + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + yield DictFilter(self.sub_modules_dict()) + + @property + @evaluator_method_cache() + def name(self): + string_name = self.py__package__()[-1] + return ImplicitNSName(self, string_name) + + def py__file__(self): + return None + + def py__package__(self): + """Return the fullname + """ + return self._fullname.split('.') + + def py__path__(self): + return self._paths + + def py__name__(self): + return self._fullname + + def is_namespace(self): + return True + + def is_stub(self): + return False + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._fullname) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/docstrings.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/docstrings.py new file mode 100644 index 0000000..d38dbf1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/docstrings.py @@ -0,0 +1,311 @@ +""" +Docstrings are another source of information for functions and classes. +:mod:`jedi.evaluate.dynamic` tries to find all executions of functions, while +the docstring parsing is much easier. There are three different types of +docstrings that |jedi| understands: + +- `Sphinx `_ +- `Epydoc `_ +- `Numpydoc `_ + +For example, the sphinx annotation ``:type foo: str`` clearly states that the +type of ``foo`` is ``str``. + +As an addition to parameter searching, this module also provides return +annotations. +""" + +import re +import warnings +from textwrap import dedent + +from parso import parse, ParserSyntaxError + +from jedi._compatibility import u +from jedi import debug +from jedi.evaluate.utils import indent_block +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import iterator_to_context_set, ContextSet, \ + NO_CONTEXTS +from jedi.evaluate.lazy_context import LazyKnownContexts + + +DOCSTRING_PARAM_PATTERNS = [ + r'\s*:type\s+%s:\s*([^\n]+)', # Sphinx + r'\s*:param\s+(\w+)\s+%s:[^\n]*', # Sphinx param with type + r'\s*@type\s+%s:\s*([^\n]+)', # Epydoc +] + +DOCSTRING_RETURN_PATTERNS = [ + re.compile(r'\s*:rtype:\s*([^\n]+)', re.M), # Sphinx + re.compile(r'\s*@rtype:\s*([^\n]+)', re.M), # Epydoc +] + +REST_ROLE_PATTERN = re.compile(r':[^`]+:`([^`]+)`') + + +_numpy_doc_string_cache = None + + +def _get_numpy_doc_string_cls(): + global _numpy_doc_string_cache + if isinstance(_numpy_doc_string_cache, (ImportError, SyntaxError)): + raise _numpy_doc_string_cache + from numpydoc.docscrape import NumpyDocString + _numpy_doc_string_cache = NumpyDocString + return _numpy_doc_string_cache + + +def _search_param_in_numpydocstr(docstr, param_str): + """Search `docstr` (in numpydoc format) for type(-s) of `param_str`.""" + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + try: + # This is a non-public API. If it ever changes we should be + # prepared and return gracefully. + params = _get_numpy_doc_string_cls()(docstr)._parsed_data['Parameters'] + except Exception: + return [] + for p_name, p_type, p_descr in params: + if p_name == param_str: + m = re.match(r'([^,]+(,[^,]+)*?)(,[ ]*optional)?$', p_type) + if m: + p_type = m.group(1) + return list(_expand_typestr(p_type)) + return [] + + +def _search_return_in_numpydocstr(docstr): + """ + Search `docstr` (in numpydoc format) for type(-s) of function returns. + """ + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + try: + doc = _get_numpy_doc_string_cls()(docstr) + except Exception: + return + try: + # This is a non-public API. If it ever changes we should be + # prepared and return gracefully. + returns = doc._parsed_data['Returns'] + returns += doc._parsed_data['Yields'] + except Exception: + return + for r_name, r_type, r_descr in returns: + # Return names are optional and if so the type is in the name + if not r_type: + r_type = r_name + for type_ in _expand_typestr(r_type): + yield type_ + + +def _expand_typestr(type_str): + """ + Attempts to interpret the possible types in `type_str` + """ + # Check if alternative types are specified with 'or' + if re.search(r'\bor\b', type_str): + for t in type_str.split('or'): + yield t.split('of')[0].strip() + # Check if like "list of `type`" and set type to list + elif re.search(r'\bof\b', type_str): + yield type_str.split('of')[0] + # Check if type has is a set of valid literal values eg: {'C', 'F', 'A'} + elif type_str.startswith('{'): + node = parse(type_str, version='3.7').children[0] + if node.type == 'atom': + for leaf in node.children[1].children: + if leaf.type == 'number': + if '.' in leaf.value: + yield 'float' + else: + yield 'int' + elif leaf.type == 'string': + if 'b' in leaf.string_prefix.lower(): + yield 'bytes' + else: + yield 'str' + # Ignore everything else. + + # Otherwise just work with what we have. + else: + yield type_str + + +def _search_param_in_docstr(docstr, param_str): + """ + Search `docstr` for type(-s) of `param_str`. + + >>> _search_param_in_docstr(':type param: int', 'param') + ['int'] + >>> _search_param_in_docstr('@type param: int', 'param') + ['int'] + >>> _search_param_in_docstr( + ... ':type param: :class:`threading.Thread`', 'param') + ['threading.Thread'] + >>> bool(_search_param_in_docstr('no document', 'param')) + False + >>> _search_param_in_docstr(':param int param: some description', 'param') + ['int'] + + """ + # look at #40 to see definitions of those params + patterns = [re.compile(p % re.escape(param_str)) + for p in DOCSTRING_PARAM_PATTERNS] + for pattern in patterns: + match = pattern.search(docstr) + if match: + return [_strip_rst_role(match.group(1))] + + return _search_param_in_numpydocstr(docstr, param_str) + + +def _strip_rst_role(type_str): + """ + Strip off the part looks like a ReST role in `type_str`. + + >>> _strip_rst_role(':class:`ClassName`') # strip off :class: + 'ClassName' + >>> _strip_rst_role(':py:obj:`module.Object`') # works with domain + 'module.Object' + >>> _strip_rst_role('ClassName') # do nothing when not ReST role + 'ClassName' + + See also: + http://sphinx-doc.org/domains.html#cross-referencing-python-objects + + """ + match = REST_ROLE_PATTERN.match(type_str) + if match: + return match.group(1) + else: + return type_str + + +def _evaluate_for_statement_string(module_context, string): + code = dedent(u(""" + def pseudo_docstring_stuff(): + ''' + Create a pseudo function for docstring statements. + Need this docstring so that if the below part is not valid Python this + is still a function. + ''' + {} + """)) + if string is None: + return [] + + for element in re.findall(r'((?:\w+\.)*\w+)\.', string): + # Try to import module part in dotted name. + # (e.g., 'threading' in 'threading.Thread'). + string = 'import %s\n' % element + string + + # Take the default grammar here, if we load the Python 2.7 grammar here, it + # will be impossible to use `...` (Ellipsis) as a token. Docstring types + # don't need to conform with the current grammar. + debug.dbg('Parse docstring code %s', string, color='BLUE') + grammar = module_context.evaluator.latest_grammar + try: + module = grammar.parse(code.format(indent_block(string)), error_recovery=False) + except ParserSyntaxError: + return [] + try: + funcdef = next(module.iter_funcdefs()) + # First pick suite, then simple_stmt and then the node, + # which is also not the last item, because there's a newline. + stmt = funcdef.children[-1].children[-1].children[-2] + except (AttributeError, IndexError): + return [] + + if stmt.type not in ('name', 'atom', 'atom_expr'): + return [] + + from jedi.evaluate.context import FunctionContext + function_context = FunctionContext( + module_context.evaluator, + module_context, + funcdef + ) + func_execution_context = function_context.get_function_execution() + # Use the module of the param. + # TODO this module is not the module of the param in case of a function + # call. In that case it's the module of the function call. + # stuffed with content from a function call. + return list(_execute_types_in_stmt(func_execution_context, stmt)) + + +def _execute_types_in_stmt(module_context, stmt): + """ + Executing all types or general elements that we find in a statement. This + doesn't include tuple, list and dict literals, because the stuff they + contain is executed. (Used as type information). + """ + definitions = module_context.eval_node(stmt) + return ContextSet.from_sets( + _execute_array_values(module_context.evaluator, d) + for d in definitions + ) + + +def _execute_array_values(evaluator, array): + """ + Tuples indicate that there's not just one return value, but the listed + ones. `(str, int)` means that it returns a tuple with both types. + """ + from jedi.evaluate.context.iterable import SequenceLiteralContext, FakeSequence + if isinstance(array, SequenceLiteralContext): + values = [] + for lazy_context in array.py__iter__(): + objects = ContextSet.from_sets( + _execute_array_values(evaluator, typ) + for typ in lazy_context.infer() + ) + values.append(LazyKnownContexts(objects)) + return {FakeSequence(evaluator, array.array_type, values)} + else: + return array.execute_annotation() + + +@evaluator_method_cache() +def infer_param(execution_context, param): + from jedi.evaluate.context.instance import InstanceArguments + from jedi.evaluate.context import FunctionExecutionContext + + def eval_docstring(docstring): + return ContextSet( + p + for param_str in _search_param_in_docstr(docstring, param.name.value) + for p in _evaluate_for_statement_string(module_context, param_str) + ) + module_context = execution_context.get_root_context() + func = param.get_parent_function() + if func.type == 'lambdef': + return NO_CONTEXTS + + types = eval_docstring(execution_context.py__doc__()) + if isinstance(execution_context, FunctionExecutionContext) \ + and isinstance(execution_context.var_args, InstanceArguments) \ + and execution_context.function_context.py__name__() == '__init__': + class_context = execution_context.var_args.instance.class_context + types |= eval_docstring(class_context.py__doc__()) + + debug.dbg('Found param types for docstring: %s', types, color='BLUE') + return types + + +@evaluator_method_cache() +@iterator_to_context_set +def infer_return_types(function_context): + def search_return_in_docstr(code): + for p in DOCSTRING_RETURN_PATTERNS: + match = p.search(code) + if match: + yield _strip_rst_role(match.group(1)) + # Check for numpy style return hint + for type_ in _search_return_in_numpydocstr(code): + yield type_ + + for type_str in search_return_in_docstr(function_context.py__doc__()): + for type_eval in _evaluate_for_statement_string(function_context.get_root_context(), type_str): + yield type_eval diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/dynamic.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/dynamic.py new file mode 100644 index 0000000..fc3b19f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/dynamic.py @@ -0,0 +1,231 @@ +""" +One of the really important features of |jedi| is to have an option to +understand code like this:: + + def foo(bar): + bar. # completion here + foo(1) + +There's no doubt wheter bar is an ``int`` or not, but if there's also a call +like ``foo('str')``, what would happen? Well, we'll just show both. Because +that's what a human would expect. + +It works as follows: + +- |Jedi| sees a param +- search for function calls named ``foo`` +- execute these calls and check the input. +""" + +from jedi import settings +from jedi import debug +from jedi.evaluate.cache import evaluator_function_cache +from jedi.evaluate import imports +from jedi.evaluate.arguments import TreeArguments +from jedi.evaluate.param import create_default_params +from jedi.evaluate.helpers import is_stdlib_path +from jedi.evaluate.utils import to_list +from jedi.parser_utils import get_parent_scope +from jedi.evaluate.context import ModuleContext, instance +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate import recursion + + +MAX_PARAM_SEARCHES = 20 + + +class DynamicExecutedParams(object): + """ + Simulates being a parameter while actually just being multiple params. + """ + + def __init__(self, evaluator, executed_params): + self.evaluator = evaluator + self._executed_params = executed_params + + def infer(self): + with recursion.execution_allowed(self.evaluator, self) as allowed: + # We need to catch recursions that may occur, because an + # anonymous functions can create an anonymous parameter that is + # more or less self referencing. + if allowed: + return ContextSet.from_sets(p.infer() for p in self._executed_params) + return NO_CONTEXTS + + +@debug.increase_indent +def search_params(evaluator, execution_context, funcdef): + """ + A dynamic search for param values. If you try to complete a type: + + >>> def func(foo): + ... foo + >>> func(1) + >>> func("") + + It is not known what the type ``foo`` without analysing the whole code. You + have to look for all calls to ``func`` to find out what ``foo`` possibly + is. + """ + if not settings.dynamic_params: + return create_default_params(execution_context, funcdef) + + evaluator.dynamic_params_depth += 1 + try: + path = execution_context.get_root_context().py__file__() + if path is not None and is_stdlib_path(path): + # We don't want to search for usages in the stdlib. Usually people + # don't work with it (except if you are a core maintainer, sorry). + # This makes everything slower. Just disable it and run the tests, + # you will see the slowdown, especially in 3.6. + return create_default_params(execution_context, funcdef) + + if funcdef.type == 'lambdef': + string_name = _get_lambda_name(funcdef) + if string_name is None: + return create_default_params(execution_context, funcdef) + else: + string_name = funcdef.name.value + debug.dbg('Dynamic param search in %s.', string_name, color='MAGENTA') + + try: + module_context = execution_context.get_root_context() + function_executions = _search_function_executions( + evaluator, + module_context, + funcdef, + string_name=string_name, + ) + if function_executions: + zipped_params = zip(*list( + function_execution.get_executed_params_and_issues()[0] + for function_execution in function_executions + )) + params = [DynamicExecutedParams(evaluator, executed_params) + for executed_params in zipped_params] + # Evaluate the ExecutedParams to types. + else: + return create_default_params(execution_context, funcdef) + finally: + debug.dbg('Dynamic param result finished', color='MAGENTA') + return params + finally: + evaluator.dynamic_params_depth -= 1 + + +@evaluator_function_cache(default=None) +@to_list +def _search_function_executions(evaluator, module_context, funcdef, string_name): + """ + Returns a list of param names. + """ + compare_node = funcdef + if string_name == '__init__': + cls = get_parent_scope(funcdef) + if cls.type == 'classdef': + string_name = cls.name.value + compare_node = cls + + found_executions = False + i = 0 + for for_mod_context in imports.get_modules_containing_name( + evaluator, [module_context], string_name): + if not isinstance(module_context, ModuleContext): + return + for name, trailer in _get_possible_nodes(for_mod_context, string_name): + i += 1 + + # This is a simple way to stop Jedi's dynamic param recursion + # from going wild: The deeper Jedi's in the recursion, the less + # code should be evaluated. + if i * evaluator.dynamic_params_depth > MAX_PARAM_SEARCHES: + return + + random_context = evaluator.create_context(for_mod_context, name) + for function_execution in _check_name_for_execution( + evaluator, random_context, compare_node, name, trailer): + found_executions = True + yield function_execution + + # If there are results after processing a module, we're probably + # good to process. This is a speed optimization. + if found_executions: + return + + +def _get_lambda_name(node): + stmt = node.parent + if stmt.type == 'expr_stmt': + first_operator = next(stmt.yield_operators(), None) + if first_operator == '=': + first = stmt.children[0] + if first.type == 'name': + return first.value + + return None + + +def _get_possible_nodes(module_context, func_string_name): + try: + names = module_context.tree_node.get_used_names()[func_string_name] + except KeyError: + return + + for name in names: + bracket = name.get_next_leaf() + trailer = bracket.parent + if trailer.type == 'trailer' and bracket == '(': + yield name, trailer + + +def _check_name_for_execution(evaluator, context, compare_node, name, trailer): + from jedi.evaluate.context.function import FunctionExecutionContext + + def create_func_excs(): + arglist = trailer.children[1] + if arglist == ')': + arglist = None + args = TreeArguments(evaluator, context, arglist, trailer) + if value_node.type == 'classdef': + created_instance = instance.TreeInstance( + evaluator, + value.parent_context, + value, + args + ) + for execution in created_instance.create_init_executions(): + yield execution + else: + yield value.get_function_execution(args) + + for value in evaluator.goto_definitions(context, name): + value_node = value.tree_node + if compare_node == value_node: + for func_execution in create_func_excs(): + yield func_execution + elif isinstance(value.parent_context, FunctionExecutionContext) and \ + compare_node.type == 'funcdef': + # Here we're trying to find decorators by checking the first + # parameter. It's not very generic though. Should find a better + # solution that also applies to nested decorators. + params, _ = value.parent_context.get_executed_params_and_issues() + if len(params) != 1: + continue + values = params[0].infer() + nodes = [v.tree_node for v in values] + if nodes == [compare_node]: + # Found a decorator. + module_context = context.get_root_context() + execution_context = next(create_func_excs()) + for name, trailer in _get_possible_nodes(module_context, params[0].string_name): + if value_node.start_pos < name.start_pos < value_node.end_pos: + random_context = evaluator.create_context(execution_context, name) + iterator = _check_name_for_execution( + evaluator, + random_context, + compare_node, + name, + trailer + ) + for function_execution in iterator: + yield function_execution diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/filters.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/filters.py new file mode 100644 index 0000000..0b758ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/filters.py @@ -0,0 +1,412 @@ +""" +Filters are objects that you can use to filter names in different scopes. They +are needed for name resolution. +""" +from abc import abstractmethod +import weakref + +from parso.tree import search_ancestor + +from jedi._compatibility import use_metaclass +from jedi.evaluate import flow_analysis +from jedi.evaluate.base_context import ContextSet, Context, ContextWrapper, \ + LazyContextWrapper +from jedi.parser_utils import get_cached_parent_scope +from jedi.evaluate.utils import to_list +from jedi.evaluate.names import TreeNameDefinition, ParamName, AbstractNameDefinition + +_definition_name_cache = weakref.WeakKeyDictionary() + + +class AbstractFilter(object): + _until_position = None + + def _filter(self, names): + if self._until_position is not None: + return [n for n in names if n.start_pos < self._until_position] + return names + + @abstractmethod + def get(self, name): + raise NotImplementedError + + @abstractmethod + def values(self): + raise NotImplementedError + + +class FilterWrapper(object): + name_wrapper_class = None + + def __init__(self, wrapped_filter): + self._wrapped_filter = wrapped_filter + + def wrap_names(self, names): + return [self.name_wrapper_class(name) for name in names] + + def get(self, name): + return self.wrap_names(self._wrapped_filter.get(name)) + + def values(self): + return self.wrap_names(self._wrapped_filter.values()) + + +def _get_definition_names(used_names, name_key): + try: + for_module = _definition_name_cache[used_names] + except KeyError: + for_module = _definition_name_cache[used_names] = {} + + try: + return for_module[name_key] + except KeyError: + names = used_names.get(name_key, ()) + result = for_module[name_key] = tuple(name for name in names if name.is_definition()) + return result + + +class AbstractUsedNamesFilter(AbstractFilter): + name_class = TreeNameDefinition + + def __init__(self, context, parser_scope): + self._parser_scope = parser_scope + self._module_node = self._parser_scope.get_root_node() + self._used_names = self._module_node.get_used_names() + self.context = context + + def get(self, name, **filter_kwargs): + return self._convert_names(self._filter( + _get_definition_names(self._used_names, name), + **filter_kwargs + )) + + def _convert_names(self, names): + return [self.name_class(self.context, name) for name in names] + + def values(self, **filter_kwargs): + return self._convert_names( + name + for name_key in self._used_names + for name in self._filter( + _get_definition_names(self._used_names, name_key), + **filter_kwargs + ) + ) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.context) + + +class ParserTreeFilter(AbstractUsedNamesFilter): + # TODO remove evaluator as an argument, it's not used. + def __init__(self, evaluator, context, node_context=None, until_position=None, + origin_scope=None): + """ + node_context is an option to specify a second context for use cases + like the class mro where the parent class of a new name would be the + context, but for some type inference it's important to have a local + context of the other classes. + """ + if node_context is None: + node_context = context + super(ParserTreeFilter, self).__init__(context, node_context.tree_node) + self._node_context = node_context + self._origin_scope = origin_scope + self._until_position = until_position + + def _filter(self, names): + names = super(ParserTreeFilter, self)._filter(names) + names = [n for n in names if self._is_name_reachable(n)] + return list(self._check_flows(names)) + + def _is_name_reachable(self, name): + parent = name.parent + if parent.type == 'trailer': + return False + base_node = parent if parent.type in ('classdef', 'funcdef') else name + return get_cached_parent_scope(self._used_names, base_node) == self._parser_scope + + def _check_flows(self, names): + for name in sorted(names, key=lambda name: name.start_pos, reverse=True): + check = flow_analysis.reachability_check( + context=self._node_context, + context_scope=self._parser_scope, + node=name, + origin_scope=self._origin_scope + ) + if check is not flow_analysis.UNREACHABLE: + yield name + + if check is flow_analysis.REACHABLE: + break + + +class FunctionExecutionFilter(ParserTreeFilter): + param_name = ParamName + + def __init__(self, evaluator, context, node_context=None, + until_position=None, origin_scope=None): + super(FunctionExecutionFilter, self).__init__( + evaluator, + context, + node_context, + until_position, + origin_scope + ) + + @to_list + def _convert_names(self, names): + for name in names: + param = search_ancestor(name, 'param') + if param: + yield self.param_name(self.context, name) + else: + yield TreeNameDefinition(self.context, name) + + +class GlobalNameFilter(AbstractUsedNamesFilter): + def __init__(self, context, parser_scope): + super(GlobalNameFilter, self).__init__(context, parser_scope) + + def get(self, name): + try: + names = self._used_names[name] + except KeyError: + return [] + return self._convert_names(self._filter(names)) + + @to_list + def _filter(self, names): + for name in names: + if name.parent.type == 'global_stmt': + yield name + + def values(self): + return self._convert_names( + name for name_list in self._used_names.values() + for name in self._filter(name_list) + ) + + +class DictFilter(AbstractFilter): + def __init__(self, dct): + self._dct = dct + + def get(self, name): + try: + value = self._convert(name, self._dct[name]) + except KeyError: + return [] + else: + return list(self._filter([value])) + + def values(self): + def yielder(): + for item in self._dct.items(): + try: + yield self._convert(*item) + except KeyError: + pass + return self._filter(yielder()) + + def _convert(self, name, value): + return value + + def __repr__(self): + keys = ', '.join(self._dct.keys()) + return '<%s: for {%s}>' % (self.__class__.__name__, keys) + + +class MergedFilter(object): + def __init__(self, *filters): + self._filters = filters + + def get(self, name): + return [n for filter in self._filters for n in filter.get(name)] + + def values(self): + return [n for filter in self._filters for n in filter.values()] + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, ', '.join(str(f) for f in self._filters)) + + +class _BuiltinMappedMethod(Context): + """``Generator.__next__`` ``dict.values`` methods and so on.""" + api_type = u'function' + + def __init__(self, builtin_context, method, builtin_func): + super(_BuiltinMappedMethod, self).__init__( + builtin_context.evaluator, + parent_context=builtin_context + ) + self._method = method + self._builtin_func = builtin_func + + def py__call__(self, arguments): + # TODO add TypeError if params are given/or not correct. + return self._method(self.parent_context) + + def __getattr__(self, name): + return getattr(self._builtin_func, name) + + +class SpecialMethodFilter(DictFilter): + """ + A filter for methods that are defined in this module on the corresponding + classes like Generator (for __next__, etc). + """ + class SpecialMethodName(AbstractNameDefinition): + api_type = u'function' + + def __init__(self, parent_context, string_name, value, builtin_context): + callable_, python_version = value + if python_version is not None and \ + python_version != parent_context.evaluator.environment.version_info.major: + raise KeyError + + self.parent_context = parent_context + self.string_name = string_name + self._callable = callable_ + self._builtin_context = builtin_context + + def infer(self): + for filter in self._builtin_context.get_filters(): + # We can take the first index, because on builtin methods there's + # always only going to be one name. The same is true for the + # inferred values. + for name in filter.get(self.string_name): + builtin_func = next(iter(name.infer())) + break + else: + continue + break + return ContextSet([ + _BuiltinMappedMethod(self.parent_context, self._callable, builtin_func) + ]) + + def __init__(self, context, dct, builtin_context): + super(SpecialMethodFilter, self).__init__(dct) + self.context = context + self._builtin_context = builtin_context + """ + This context is what will be used to introspect the name, where as the + other context will be used to execute the function. + + We distinguish, because we have to. + """ + + def _convert(self, name, value): + return self.SpecialMethodName(self.context, name, value, self._builtin_context) + + +class _OverwriteMeta(type): + def __init__(cls, name, bases, dct): + super(_OverwriteMeta, cls).__init__(name, bases, dct) + + base_dct = {} + for base_cls in reversed(cls.__bases__): + try: + base_dct.update(base_cls.overwritten_methods) + except AttributeError: + pass + + for func in cls.__dict__.values(): + try: + base_dct.update(func.registered_overwritten_methods) + except AttributeError: + pass + cls.overwritten_methods = base_dct + + +class _AttributeOverwriteMixin(object): + def get_filters(self, search_global=False, *args, **kwargs): + yield SpecialMethodFilter(self, self.overwritten_methods, self._wrapped_context) + + for filter in self._wrapped_context.get_filters(search_global): + yield filter + + +class LazyAttributeOverwrite(use_metaclass(_OverwriteMeta, _AttributeOverwriteMixin, + LazyContextWrapper)): + def __init__(self, evaluator): + self.evaluator = evaluator + + +class AttributeOverwrite(use_metaclass(_OverwriteMeta, _AttributeOverwriteMixin, + ContextWrapper)): + pass + + +def publish_method(method_name, python_version_match=None): + def decorator(func): + dct = func.__dict__.setdefault('registered_overwritten_methods', {}) + dct[method_name] = func, python_version_match + return func + return decorator + + +def get_global_filters(evaluator, context, until_position, origin_scope): + """ + Returns all filters in order of priority for name resolution. + + For global name lookups. The filters will handle name resolution + themselves, but here we gather possible filters downwards. + + >>> from jedi._compatibility import u, no_unicode_pprint + >>> from jedi import Script + >>> script = Script(u(''' + ... x = ['a', 'b', 'c'] + ... def func(): + ... y = None + ... ''')) + >>> module_node = script._module_node + >>> scope = next(module_node.iter_funcdefs()) + >>> scope + + >>> context = script._get_module().create_context(scope) + >>> filters = list(get_global_filters(context.evaluator, context, (4, 0), None)) + + First we get the names from the function scope. + + >>> no_unicode_pprint(filters[0]) # doctest: +ELLIPSIS + MergedFilter(, ) + >>> sorted(str(n) for n in filters[0].values()) # doctest: +NORMALIZE_WHITESPACE + ['', + ''] + >>> filters[0]._filters[0]._until_position + (4, 0) + >>> filters[0]._filters[1]._until_position + + Then it yields the names from one level "lower". In this example, this is + the module scope (including globals). + As a side note, you can see, that the position in the filter is None on the + globals filter, because there the whole module is searched. + + >>> list(filters[1].values()) # package modules -> Also empty. + [] + >>> sorted(name.string_name for name in filters[2].values()) # Module attributes + ['__doc__', '__name__', '__package__'] + + Finally, it yields the builtin filter, if `include_builtin` is + true (default). + + >>> list(filters[3].values()) # doctest: +ELLIPSIS + [...] + """ + from jedi.evaluate.context.function import FunctionExecutionContext + while context is not None: + # Names in methods cannot be resolved within the class. + for filter in context.get_filters( + search_global=True, + until_position=until_position, + origin_scope=origin_scope): + yield filter + if isinstance(context, FunctionExecutionContext): + # The position should be reset if the current scope is a function. + until_position = None + + context = context.parent_context + + # Add builtins to the global scope. + yield next(evaluator.builtins_module.get_filters()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/finder.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/finder.py new file mode 100644 index 0000000..7b8b001 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/finder.py @@ -0,0 +1,290 @@ +""" +Searching for names with given scope and name. This is very central in Jedi and +Python. The name resolution is quite complicated with descripter, +``__getattribute__``, ``__getattr__``, ``global``, etc. + +If you want to understand name resolution, please read the first few chapters +in http://blog.ionelmc.ro/2015/02/09/understanding-python-metaclasses/. + +Flow checks ++++++++++++ + +Flow checks are not really mature. There's only a check for ``isinstance``. It +would check whether a flow has the form of ``if isinstance(a, type_or_tuple)``. +Unfortunately every other thing is being ignored (e.g. a == '' would be easy to +check for -> a is a string). There's big potential in these checks. +""" + +from parso.python import tree +from parso.tree import search_ancestor +from jedi import debug +from jedi import settings +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate import flow_analysis +from jedi.evaluate.arguments import TreeArguments +from jedi.evaluate import helpers +from jedi.evaluate.context import iterable +from jedi.evaluate.filters import get_global_filters +from jedi.evaluate.names import TreeNameDefinition +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.parser_utils import is_scope, get_parent_scope +from jedi.evaluate.gradual.conversion import convert_contexts + + +class NameFinder(object): + def __init__(self, evaluator, context, name_context, name_or_str, + position=None, analysis_errors=True): + self._evaluator = evaluator + # Make sure that it's not just a syntax tree node. + self._context = context + self._name_context = name_context + self._name = name_or_str + if isinstance(name_or_str, tree.Name): + self._string_name = name_or_str.value + else: + self._string_name = name_or_str + self._position = position + self._found_predefined_types = None + self._analysis_errors = analysis_errors + + def find(self, filters, attribute_lookup): + """ + :params bool attribute_lookup: Tell to logic if we're accessing the + attribute or the contents of e.g. a function. + """ + names = self.filter_name(filters) + if self._found_predefined_types is not None and names: + check = flow_analysis.reachability_check( + context=self._context, + context_scope=self._context.tree_node, + node=self._name, + ) + if check is flow_analysis.UNREACHABLE: + return NO_CONTEXTS + return self._found_predefined_types + + types = self._names_to_types(names, attribute_lookup) + + if not names and self._analysis_errors and not types \ + and not (isinstance(self._name, tree.Name) and + isinstance(self._name.parent.parent, tree.Param)): + if isinstance(self._name, tree.Name): + if attribute_lookup: + analysis.add_attribute_error( + self._name_context, self._context, self._name) + else: + message = ("NameError: name '%s' is not defined." + % self._string_name) + analysis.add(self._name_context, 'name-error', self._name, message) + + return types + + def _get_origin_scope(self): + if isinstance(self._name, tree.Name): + scope = self._name + while scope.parent is not None: + # TODO why if classes? + if not isinstance(scope, tree.Scope): + break + scope = scope.parent + return scope + else: + return None + + def get_filters(self, search_global=False): + origin_scope = self._get_origin_scope() + if search_global: + position = self._position + + # For functions and classes the defaults don't belong to the + # function and get evaluated in the context before the function. So + # make sure to exclude the function/class name. + if origin_scope is not None: + ancestor = search_ancestor(origin_scope, 'funcdef', 'classdef', 'lambdef') + lambdef = None + if ancestor == 'lambdef': + # For lambdas it's even more complicated since parts will + # be evaluated later. + lambdef = ancestor + ancestor = search_ancestor(origin_scope, 'funcdef', 'classdef') + if ancestor is not None: + colon = ancestor.children[-2] + if position is not None and position < colon.start_pos: + if lambdef is None or position < lambdef.children[-2].start_pos: + position = ancestor.start_pos + + return get_global_filters(self._evaluator, self._context, position, origin_scope) + else: + return self._get_context_filters(origin_scope) + + def _get_context_filters(self, origin_scope): + for f in self._context.get_filters(False, self._position, origin_scope=origin_scope): + yield f + # This covers the case where a stub files are incomplete. + if self._context.is_stub(): + for c in convert_contexts(ContextSet({self._context})): + for f in c.get_filters(): + yield f + + def filter_name(self, filters): + """ + Searches names that are defined in a scope (the different + ``filters``), until a name fits. + """ + names = [] + # This paragraph is currently needed for proper branch evaluation + # (static analysis). + if self._context.predefined_names and isinstance(self._name, tree.Name): + node = self._name + while node is not None and not is_scope(node): + node = node.parent + if node.type in ("if_stmt", "for_stmt", "comp_for", 'sync_comp_for'): + try: + name_dict = self._context.predefined_names[node] + types = name_dict[self._string_name] + except KeyError: + continue + else: + self._found_predefined_types = types + break + + for filter in filters: + names = filter.get(self._string_name) + if names: + if len(names) == 1: + n, = names + if isinstance(n, TreeNameDefinition): + # Something somewhere went terribly wrong. This + # typically happens when using goto on an import in an + # __init__ file. I think we need a better solution, but + # it's kind of hard, because for Jedi it's not clear + # that that name has not been defined, yet. + if n.tree_name == self._name: + def_ = self._name.get_definition() + if def_ is not None and def_.type == 'import_from': + continue + break + + debug.dbg('finder.filter_name %s in (%s): %s@%s', + self._string_name, self._context, names, self._position) + return list(names) + + def _check_getattr(self, inst): + """Checks for both __getattr__ and __getattribute__ methods""" + # str is important, because it shouldn't be `Name`! + name = compiled.create_simple_object(self._evaluator, self._string_name) + + # This is a little bit special. `__getattribute__` is in Python + # executed before `__getattr__`. But: I know no use case, where + # this could be practical and where Jedi would return wrong types. + # If you ever find something, let me know! + # We are inversing this, because a hand-crafted `__getattribute__` + # could still call another hand-crafted `__getattr__`, but not the + # other way around. + names = (inst.get_function_slot_names(u'__getattr__') or + inst.get_function_slot_names(u'__getattribute__')) + return inst.execute_function_slots(names, name) + + def _names_to_types(self, names, attribute_lookup): + contexts = ContextSet.from_sets(name.infer() for name in names) + + debug.dbg('finder._names_to_types: %s -> %s', names, contexts) + if not names and self._context.is_instance() and not self._context.is_compiled(): + # handling __getattr__ / __getattribute__ + return self._check_getattr(self._context) + + # Add isinstance and other if/assert knowledge. + if not contexts and isinstance(self._name, tree.Name) and \ + not self._name_context.is_instance() and not self._context.is_compiled(): + flow_scope = self._name + base_nodes = [self._name_context.tree_node] + + if any(b.type in ('comp_for', 'sync_comp_for') for b in base_nodes): + return contexts + while True: + flow_scope = get_parent_scope(flow_scope, include_flows=True) + n = _check_flow_information(self._name_context, flow_scope, + self._name, self._position) + if n is not None: + return n + if flow_scope in base_nodes: + break + return contexts + + +def _check_flow_information(context, flow, search_name, pos): + """ Try to find out the type of a variable just with the information that + is given by the flows: e.g. It is also responsible for assert checks.:: + + if isinstance(k, str): + k. # <- completion here + + ensures that `k` is a string. + """ + if not settings.dynamic_flow_information: + return None + + result = None + if is_scope(flow): + # Check for asserts. + module_node = flow.get_root_node() + try: + names = module_node.get_used_names()[search_name.value] + except KeyError: + return None + names = reversed([ + n for n in names + if flow.start_pos <= n.start_pos < (pos or flow.end_pos) + ]) + + for name in names: + ass = search_ancestor(name, 'assert_stmt') + if ass is not None: + result = _check_isinstance_type(context, ass.assertion, search_name) + if result is not None: + return result + + if flow.type in ('if_stmt', 'while_stmt'): + potential_ifs = [c for c in flow.children[1::4] if c != ':'] + for if_test in reversed(potential_ifs): + if search_name.start_pos > if_test.end_pos: + return _check_isinstance_type(context, if_test, search_name) + return result + + +def _check_isinstance_type(context, element, search_name): + try: + assert element.type in ('power', 'atom_expr') + # this might be removed if we analyze and, etc + assert len(element.children) == 2 + first, trailer = element.children + assert first.type == 'name' and first.value == 'isinstance' + assert trailer.type == 'trailer' and trailer.children[0] == '(' + assert len(trailer.children) == 3 + + # arglist stuff + arglist = trailer.children[1] + args = TreeArguments(context.evaluator, context, arglist, trailer) + param_list = list(args.unpack()) + # Disallow keyword arguments + assert len(param_list) == 2 + (key1, lazy_context_object), (key2, lazy_context_cls) = param_list + assert key1 is None and key2 is None + call = helpers.call_of_leaf(search_name) + is_instance_call = helpers.call_of_leaf(lazy_context_object.data) + # Do a simple get_code comparison. They should just have the same code, + # and everything will be all right. + normalize = context.evaluator.grammar._normalize + assert normalize(is_instance_call) == normalize(call) + except AssertionError: + return None + + context_set = NO_CONTEXTS + for cls_or_tup in lazy_context_cls.infer(): + if isinstance(cls_or_tup, iterable.Sequence) and cls_or_tup.array_type == 'tuple': + for lazy_context in cls_or_tup.py__iter__(): + context_set |= lazy_context.infer().execute_evaluated() + else: + context_set |= cls_or_tup.execute_evaluated() + return context_set diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/flow_analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/flow_analysis.py new file mode 100644 index 0000000..474071f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/flow_analysis.py @@ -0,0 +1,118 @@ +from jedi.parser_utils import get_flow_branch_keyword, is_scope, get_parent_scope +from jedi.evaluate.recursion import execution_allowed + + +class Status(object): + lookup_table = {} + + def __init__(self, value, name): + self._value = value + self._name = name + Status.lookup_table[value] = self + + def invert(self): + if self is REACHABLE: + return UNREACHABLE + elif self is UNREACHABLE: + return REACHABLE + else: + return UNSURE + + def __and__(self, other): + if UNSURE in (self, other): + return UNSURE + else: + return REACHABLE if self._value and other._value else UNREACHABLE + + def __repr__(self): + return '<%s: %s>' % (type(self).__name__, self._name) + + +REACHABLE = Status(True, 'reachable') +UNREACHABLE = Status(False, 'unreachable') +UNSURE = Status(None, 'unsure') + + +def _get_flow_scopes(node): + while True: + node = get_parent_scope(node, include_flows=True) + if node is None or is_scope(node): + return + yield node + + +def reachability_check(context, context_scope, node, origin_scope=None): + first_flow_scope = get_parent_scope(node, include_flows=True) + if origin_scope is not None: + origin_flow_scopes = list(_get_flow_scopes(origin_scope)) + node_flow_scopes = list(_get_flow_scopes(node)) + + branch_matches = True + for flow_scope in origin_flow_scopes: + if flow_scope in node_flow_scopes: + node_keyword = get_flow_branch_keyword(flow_scope, node) + origin_keyword = get_flow_branch_keyword(flow_scope, origin_scope) + branch_matches = node_keyword == origin_keyword + if flow_scope.type == 'if_stmt': + if not branch_matches: + return UNREACHABLE + elif flow_scope.type == 'try_stmt': + if not branch_matches and origin_keyword == 'else' \ + and node_keyword == 'except': + return UNREACHABLE + if branch_matches: + break + + # Direct parents get resolved, we filter scopes that are separate + # branches. This makes sense for autocompletion and static analysis. + # For actual Python it doesn't matter, because we're talking about + # potentially unreachable code. + # e.g. `if 0:` would cause all name lookup within the flow make + # unaccessible. This is not a "problem" in Python, because the code is + # never called. In Jedi though, we still want to infer types. + while origin_scope is not None: + if first_flow_scope == origin_scope and branch_matches: + return REACHABLE + origin_scope = origin_scope.parent + + return _break_check(context, context_scope, first_flow_scope, node) + + +def _break_check(context, context_scope, flow_scope, node): + reachable = REACHABLE + if flow_scope.type == 'if_stmt': + if flow_scope.is_node_after_else(node): + for check_node in flow_scope.get_test_nodes(): + reachable = _check_if(context, check_node) + if reachable in (REACHABLE, UNSURE): + break + reachable = reachable.invert() + else: + flow_node = flow_scope.get_corresponding_test_node(node) + if flow_node is not None: + reachable = _check_if(context, flow_node) + elif flow_scope.type in ('try_stmt', 'while_stmt'): + return UNSURE + + # Only reachable branches need to be examined further. + if reachable in (UNREACHABLE, UNSURE): + return reachable + + if context_scope != flow_scope and context_scope != flow_scope.parent: + flow_scope = get_parent_scope(flow_scope, include_flows=True) + return reachable & _break_check(context, context_scope, flow_scope, node) + else: + return reachable + + +def _check_if(context, node): + with execution_allowed(context.evaluator, node) as allowed: + if not allowed: + return UNSURE + + types = context.eval_node(node) + values = set(x.py__bool__() for x in types) + if len(values) == 1: + return Status.lookup_table[values.pop()] + else: + return UNSURE diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/annotation.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/annotation.py new file mode 100644 index 0000000..c014512 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/annotation.py @@ -0,0 +1,405 @@ +""" +PEP 0484 ( https://www.python.org/dev/peps/pep-0484/ ) describes type hints +through function annotations. There is a strong suggestion in this document +that only the type of type hinting defined in PEP0484 should be allowed +as annotations in future python versions. +""" + +import re + +from parso import ParserSyntaxError, parse + +from jedi._compatibility import force_unicode +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.typing import TypeVar, LazyGenericClass, \ + AbstractAnnotatedClass +from jedi.evaluate.gradual.typing import GenericClass +from jedi.evaluate.helpers import is_string +from jedi.evaluate.compiled import builtin_from_name +from jedi import debug +from jedi import parser_utils + + +def eval_annotation(context, annotation): + """ + Evaluates an annotation node. This means that it evaluates the part of + `int` here: + + foo: int = 3 + + Also checks for forward references (strings) + """ + context_set = context.eval_node(annotation) + if len(context_set) != 1: + debug.warning("Eval'ed typing index %s should lead to 1 object, " + " not %s" % (annotation, context_set)) + return context_set + + evaled_context = list(context_set)[0] + if is_string(evaled_context): + result = _get_forward_reference_node(context, evaled_context.get_safe_value()) + if result is not None: + return context.eval_node(result) + return context_set + + +def _evaluate_annotation_string(context, string, index=None): + node = _get_forward_reference_node(context, string) + if node is None: + return NO_CONTEXTS + + context_set = context.eval_node(node) + if index is not None: + context_set = context_set.filter( + lambda context: context.array_type == u'tuple' # noqa + and len(list(context.py__iter__())) >= index + ).py__simple_getitem__(index) + return context_set + + +def _get_forward_reference_node(context, string): + try: + new_node = context.evaluator.grammar.parse( + force_unicode(string), + start_symbol='eval_input', + error_recovery=False + ) + except ParserSyntaxError: + debug.warning('Annotation not parsed: %s' % string) + return None + else: + module = context.tree_node.get_root_node() + parser_utils.move(new_node, module.end_pos[0]) + new_node.parent = context.tree_node + return new_node + + +def _split_comment_param_declaration(decl_text): + """ + Split decl_text on commas, but group generic expressions + together. + + For example, given "foo, Bar[baz, biz]" we return + ['foo', 'Bar[baz, biz]']. + + """ + try: + node = parse(decl_text, error_recovery=False).children[0] + except ParserSyntaxError: + debug.warning('Comment annotation is not valid Python: %s' % decl_text) + return [] + + if node.type == 'name': + return [node.get_code().strip()] + + params = [] + try: + children = node.children + except AttributeError: + return [] + else: + for child in children: + if child.type in ['name', 'atom_expr', 'power']: + params.append(child.get_code().strip()) + + return params + + +@evaluator_method_cache() +def infer_param(execution_context, param): + contexts = _infer_param(execution_context, param) + evaluator = execution_context.evaluator + if param.star_count == 1: + tuple_ = builtin_from_name(evaluator, 'tuple') + return ContextSet([GenericClass( + tuple_, + generics=(contexts,), + ) for c in contexts]) + elif param.star_count == 2: + dct = builtin_from_name(evaluator, 'dict') + return ContextSet([GenericClass( + dct, + generics=(ContextSet([builtin_from_name(evaluator, 'str')]), contexts), + ) for c in contexts]) + pass + return contexts + + +def _infer_param(execution_context, param): + """ + Infers the type of a function parameter, using type annotations. + """ + annotation = param.annotation + if annotation is None: + # If no Python 3-style annotation, look for a Python 2-style comment + # annotation. + # Identify parameters to function in the same sequence as they would + # appear in a type comment. + all_params = [child for child in param.parent.children + if child.type == 'param'] + + node = param.parent.parent + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return NO_CONTEXTS + + match = re.match(r"^#\s*type:\s*\(([^#]*)\)\s*->", comment) + if not match: + return NO_CONTEXTS + params_comments = _split_comment_param_declaration(match.group(1)) + + # Find the specific param being investigated + index = all_params.index(param) + # If the number of parameters doesn't match length of type comment, + # ignore first parameter (assume it's self). + if len(params_comments) != len(all_params): + debug.warning( + "Comments length != Params length %s %s", + params_comments, all_params + ) + from jedi.evaluate.context.instance import InstanceArguments + if isinstance(execution_context.var_args, InstanceArguments): + if index == 0: + # Assume it's self, which is already handled + return NO_CONTEXTS + index -= 1 + if index >= len(params_comments): + return NO_CONTEXTS + + param_comment = params_comments[index] + return _evaluate_annotation_string( + execution_context.function_context.get_default_param_context(), + param_comment + ) + # Annotations are like default params and resolve in the same way. + context = execution_context.function_context.get_default_param_context() + return eval_annotation(context, annotation) + + +def py__annotations__(funcdef): + dct = {} + for function_param in funcdef.get_params(): + param_annotation = function_param.annotation + if param_annotation is not None: + dct[function_param.name.value] = param_annotation + + return_annotation = funcdef.annotation + if return_annotation: + dct['return'] = return_annotation + return dct + + +@evaluator_method_cache() +def infer_return_types(function_execution_context): + """ + Infers the type of a function's return value, + according to type annotations. + """ + all_annotations = py__annotations__(function_execution_context.tree_node) + annotation = all_annotations.get("return", None) + if annotation is None: + # If there is no Python 3-type annotation, look for a Python 2-type annotation + node = function_execution_context.tree_node + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return NO_CONTEXTS + + match = re.match(r"^#\s*type:\s*\([^#]*\)\s*->\s*([^#]*)", comment) + if not match: + return NO_CONTEXTS + + return _evaluate_annotation_string( + function_execution_context.function_context.get_default_param_context(), + match.group(1).strip() + ).execute_annotation() + if annotation is None: + return NO_CONTEXTS + + context = function_execution_context.function_context.get_default_param_context() + unknown_type_vars = list(find_unknown_type_vars(context, annotation)) + annotation_contexts = eval_annotation(context, annotation) + if not unknown_type_vars: + return annotation_contexts.execute_annotation() + + type_var_dict = infer_type_vars_for_execution(function_execution_context, all_annotations) + + return ContextSet.from_sets( + ann.define_generics(type_var_dict) + if isinstance(ann, (AbstractAnnotatedClass, TypeVar)) else ContextSet({ann}) + for ann in annotation_contexts + ).execute_annotation() + + +def infer_type_vars_for_execution(execution_context, annotation_dict): + """ + Some functions use type vars that are not defined by the class, but rather + only defined in the function. See for example `iter`. In those cases we + want to: + + 1. Search for undefined type vars. + 2. Infer type vars with the execution state we have. + 3. Return the union of all type vars that have been found. + """ + context = execution_context.function_context.get_default_param_context() + + annotation_variable_results = {} + executed_params, _ = execution_context.get_executed_params_and_issues() + for executed_param in executed_params: + try: + annotation_node = annotation_dict[executed_param.string_name] + except KeyError: + continue + + annotation_variables = find_unknown_type_vars(context, annotation_node) + if annotation_variables: + # Infer unknown type var + annotation_context_set = context.eval_node(annotation_node) + star_count = executed_param._param_node.star_count + actual_context_set = executed_param.infer(use_hints=False) + if star_count == 1: + actual_context_set = actual_context_set.merge_types_of_iterate() + elif star_count == 2: + # TODO _dict_values is not public. + actual_context_set = actual_context_set.try_merge('_dict_values') + for ann in annotation_context_set: + _merge_type_var_dicts( + annotation_variable_results, + _infer_type_vars(ann, actual_context_set), + ) + + return annotation_variable_results + + +def _merge_type_var_dicts(base_dict, new_dict): + for type_var_name, contexts in new_dict.items(): + try: + base_dict[type_var_name] |= contexts + except KeyError: + base_dict[type_var_name] = contexts + + +def _infer_type_vars(annotation_context, context_set): + """ + This function tries to find information about undefined type vars and + returns a dict from type var name to context set. + + This is for example important to understand what `iter([1])` returns. + According to typeshed, `iter` returns an `Iterator[_T]`: + + def iter(iterable: Iterable[_T]) -> Iterator[_T]: ... + + This functions would generate `int` for `_T` in this case, because it + unpacks the `Iterable`. + """ + type_var_dict = {} + if isinstance(annotation_context, TypeVar): + return {annotation_context.py__name__(): context_set.py__class__()} + elif isinstance(annotation_context, LazyGenericClass): + name = annotation_context.py__name__() + if name == 'Iterable': + given = annotation_context.get_generics() + if given: + for nested_annotation_context in given[0]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + context_set.merge_types_of_iterate() + ) + ) + elif name == 'Mapping': + given = annotation_context.get_generics() + if len(given) == 2: + for context in context_set: + try: + method = context.get_mapping_item_contexts + except AttributeError: + continue + key_contexts, value_contexts = method() + + for nested_annotation_context in given[0]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + key_contexts, + ) + ) + for nested_annotation_context in given[1]: + _merge_type_var_dicts( + type_var_dict, + _infer_type_vars( + nested_annotation_context, + value_contexts, + ) + ) + return type_var_dict + + +def find_type_from_comment_hint_for(context, node, name): + return _find_type_from_comment_hint(context, node, node.children[1], name) + + +def find_type_from_comment_hint_with(context, node, name): + assert len(node.children[1].children) == 3, \ + "Can only be here when children[1] is 'foo() as f'" + varlist = node.children[1].children[2] + return _find_type_from_comment_hint(context, node, varlist, name) + + +def find_type_from_comment_hint_assign(context, node, name): + return _find_type_from_comment_hint(context, node, node.children[0], name) + + +def _find_type_from_comment_hint(context, node, varlist, name): + index = None + if varlist.type in ("testlist_star_expr", "exprlist", "testlist"): + # something like "a, b = 1, 2" + index = 0 + for child in varlist.children: + if child == name: + break + if child.type == "operator": + continue + index += 1 + else: + return [] + + comment = parser_utils.get_following_comment_same_line(node) + if comment is None: + return [] + match = re.match(r"^#\s*type:\s*([^#]*)", comment) + if match is None: + return [] + return _evaluate_annotation_string( + context, match.group(1).strip(), index + ).execute_annotation() + + +def find_unknown_type_vars(context, node): + def check_node(node): + if node.type in ('atom_expr', 'power'): + trailer = node.children[-1] + if trailer.type == 'trailer' and trailer.children[0] == '[': + for subscript_node in _unpack_subscriptlist(trailer.children[1]): + check_node(subscript_node) + else: + type_var_set = context.eval_node(node) + for type_var in type_var_set: + if isinstance(type_var, TypeVar) and type_var not in found: + found.append(type_var) + + found = [] # We're not using a set, because the order matters. + check_node(node) + return found + + +def _unpack_subscriptlist(subscriptlist): + if subscriptlist.type == 'subscriptlist': + for subscript in subscriptlist.children[::2]: + if subscript.type != 'subscript': + yield subscript + else: + if subscriptlist.type != 'subscript': + yield subscriptlist diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/conversion.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/conversion.py new file mode 100644 index 0000000..88f4942 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/conversion.py @@ -0,0 +1,199 @@ +from jedi import debug +from jedi.evaluate.base_context import ContextSet, \ + NO_CONTEXTS +from jedi.evaluate.utils import to_list +from jedi.evaluate.gradual.stub_context import StubModuleContext + + +def _stub_to_python_context_set(stub_context, ignore_compiled=False): + stub_module = stub_context.get_root_context() + if not stub_module.is_stub(): + return ContextSet([stub_context]) + + was_instance = stub_context.is_instance() + if was_instance: + stub_context = stub_context.py__class__() + + qualified_names = stub_context.get_qualified_names() + if qualified_names is None: + return NO_CONTEXTS + + was_bound_method = stub_context.is_bound_method() + if was_bound_method: + # Infer the object first. We can infer the method later. + method_name = qualified_names[-1] + qualified_names = qualified_names[:-1] + was_instance = True + + contexts = _infer_from_stub(stub_module, qualified_names, ignore_compiled) + if was_instance: + contexts = ContextSet.from_sets( + c.execute_evaluated() + for c in contexts + if c.is_class() + ) + if was_bound_method: + # Now that the instance has been properly created, we can simply get + # the method. + contexts = contexts.py__getattribute__(method_name) + return contexts + + +def _infer_from_stub(stub_module, qualified_names, ignore_compiled): + from jedi.evaluate.compiled.mixed import MixedObject + assert isinstance(stub_module, (StubModuleContext, MixedObject)), stub_module + non_stubs = stub_module.non_stub_context_set + if ignore_compiled: + non_stubs = non_stubs.filter(lambda c: not c.is_compiled()) + for name in qualified_names: + non_stubs = non_stubs.py__getattribute__(name) + return non_stubs + + +@to_list +def _try_stub_to_python_names(names, prefer_stub_to_compiled=False): + for name in names: + module = name.get_root_context() + if not module.is_stub(): + yield name + continue + + name_list = name.get_qualified_names() + if name_list is None: + contexts = NO_CONTEXTS + else: + contexts = _infer_from_stub( + module, + name_list[:-1], + ignore_compiled=prefer_stub_to_compiled, + ) + if contexts and name_list: + new_names = contexts.py__getattribute__(name_list[-1], is_goto=True) + for new_name in new_names: + yield new_name + if new_names: + continue + elif contexts: + for c in contexts: + yield c.name + continue + # This is the part where if we haven't found anything, just return the + # stub name. + yield name + + +def _load_stub_module(module): + if module.is_stub(): + return module + from jedi.evaluate.gradual.typeshed import _try_to_load_stub_cached + return _try_to_load_stub_cached( + module.evaluator, + import_names=module.string_names, + python_context_set=ContextSet([module]), + parent_module_context=None, + sys_path=module.evaluator.get_sys_path(), + ) + + +@to_list +def _python_to_stub_names(names, fallback_to_python=False): + for name in names: + module = name.get_root_context() + if module.is_stub(): + yield name + continue + + if name.is_import(): + for new_name in name.goto(): + # Imports don't need to be converted, because they are already + # stubs if possible. + if fallback_to_python or new_name.is_stub(): + yield new_name + continue + + name_list = name.get_qualified_names() + stubs = NO_CONTEXTS + if name_list is not None: + stub_module = _load_stub_module(module) + if stub_module is not None: + stubs = ContextSet({stub_module}) + for name in name_list[:-1]: + stubs = stubs.py__getattribute__(name) + if stubs and name_list: + new_names = stubs.py__getattribute__(name_list[-1], is_goto=True) + for new_name in new_names: + yield new_name + if new_names: + continue + elif stubs: + for c in stubs: + yield c.name + continue + if fallback_to_python: + # This is the part where if we haven't found anything, just return + # the stub name. + yield name + + +def convert_names(names, only_stubs=False, prefer_stubs=False): + assert not (only_stubs and prefer_stubs) + with debug.increase_indent_cm('convert names'): + if only_stubs or prefer_stubs: + return _python_to_stub_names(names, fallback_to_python=prefer_stubs) + else: + return _try_stub_to_python_names(names, prefer_stub_to_compiled=True) + + +def convert_contexts(contexts, only_stubs=False, prefer_stubs=False, ignore_compiled=True): + assert not (only_stubs and prefer_stubs) + with debug.increase_indent_cm('convert contexts'): + if only_stubs or prefer_stubs: + return ContextSet.from_sets( + to_stub(context) + or (ContextSet({context}) if prefer_stubs else NO_CONTEXTS) + for context in contexts + ) + else: + return ContextSet.from_sets( + _stub_to_python_context_set(stub_context, ignore_compiled=ignore_compiled) + or ContextSet({stub_context}) + for stub_context in contexts + ) + + +# TODO merge with _python_to_stub_names? +def to_stub(context): + if context.is_stub(): + return ContextSet([context]) + + was_instance = context.is_instance() + if was_instance: + context = context.py__class__() + + qualified_names = context.get_qualified_names() + stub_module = _load_stub_module(context.get_root_context()) + if stub_module is None or qualified_names is None: + return NO_CONTEXTS + + was_bound_method = context.is_bound_method() + if was_bound_method: + # Infer the object first. We can infer the method later. + method_name = qualified_names[-1] + qualified_names = qualified_names[:-1] + was_instance = True + + stub_contexts = ContextSet([stub_module]) + for name in qualified_names: + stub_contexts = stub_contexts.py__getattribute__(name) + + if was_instance: + stub_contexts = ContextSet.from_sets( + c.execute_evaluated() + for c in stub_contexts + if c.is_class() + ) + if was_bound_method: + # Now that the instance has been properly created, we can simply get + # the method. + stub_contexts = stub_contexts.py__getattribute__(method_name) + return stub_contexts diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/stub_context.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/stub_context.py new file mode 100644 index 0000000..94090c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/stub_context.py @@ -0,0 +1,105 @@ +from jedi.evaluate.base_context import ContextWrapper +from jedi.evaluate.context.module import ModuleContext +from jedi.evaluate.filters import ParserTreeFilter, \ + TreeNameDefinition +from jedi.evaluate.gradual.typing import TypingModuleFilterWrapper + + +class StubModuleContext(ModuleContext): + def __init__(self, non_stub_context_set, *args, **kwargs): + super(StubModuleContext, self).__init__(*args, **kwargs) + self.non_stub_context_set = non_stub_context_set + + def is_stub(self): + return True + + def sub_modules_dict(self): + """ + We have to overwrite this, because it's possible to have stubs that + don't have code for all the child modules. At the time of writing this + there are for example no stubs for `json.tool`. + """ + names = {} + for context in self.non_stub_context_set: + try: + method = context.sub_modules_dict + except AttributeError: + pass + else: + names.update(method()) + names.update(super(StubModuleContext, self).sub_modules_dict()) + return names + + def _get_first_non_stub_filters(self): + for context in self.non_stub_context_set: + yield next(context.get_filters(search_global=False)) + + def _get_stub_filters(self, search_global, **filter_kwargs): + return [StubFilter( + self.evaluator, + context=self, + search_global=search_global, + **filter_kwargs + )] + list(self.iter_star_filters(search_global=search_global)) + + def get_filters(self, search_global=False, until_position=None, + origin_scope=None, **kwargs): + filters = super(StubModuleContext, self).get_filters( + search_global, until_position, origin_scope, **kwargs + ) + next(filters) # Ignore the first filter and replace it with our own + stub_filters = self._get_stub_filters( + search_global=search_global, + until_position=until_position, + origin_scope=origin_scope, + ) + for f in stub_filters: + yield f + + for f in filters: + yield f + + +class TypingModuleWrapper(StubModuleContext): + def get_filters(self, *args, **kwargs): + filters = super(TypingModuleWrapper, self).get_filters(*args, **kwargs) + yield TypingModuleFilterWrapper(next(filters)) + for f in filters: + yield f + + +# From here on down we make looking up the sys.version_info fast. +class _StubName(TreeNameDefinition): + def infer(self): + inferred = super(_StubName, self).infer() + if self.string_name == 'version_info' and self.get_root_context().py__name__() == 'sys': + return [VersionInfo(c) for c in inferred] + return inferred + + +class StubFilter(ParserTreeFilter): + name_class = _StubName + + def __init__(self, *args, **kwargs): + self._search_global = kwargs.pop('search_global') # Python 2 :/ + super(StubFilter, self).__init__(*args, **kwargs) + + def _is_name_reachable(self, name): + if not super(StubFilter, self)._is_name_reachable(name): + return False + + if not self._search_global: + # Imports in stub files are only public if they have an "as" + # export. + definition = name.get_definition() + if definition.type in ('import_from', 'import_name'): + if name.parent.type not in ('import_as_name', 'dotted_as_name'): + return False + n = name.value + if n.startswith('_') and not (n.startswith('__') and n.endswith('__')): + return False + return True + + +class VersionInfo(ContextWrapper): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typeshed.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typeshed.py new file mode 100644 index 0000000..5a386c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typeshed.py @@ -0,0 +1,289 @@ +import os +import re +from functools import wraps + +from jedi.file_io import FileIO +from jedi._compatibility import FileNotFoundError, cast_path +from jedi.parser_utils import get_cached_code_lines +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.stub_context import TypingModuleWrapper, StubModuleContext + +_jedi_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +TYPESHED_PATH = os.path.join(_jedi_path, 'third_party', 'typeshed') + +_IMPORT_MAP = dict( + _collections='collections', + _socket='socket', +) + + +def _merge_create_stub_map(directories): + map_ = {} + for directory in directories: + map_.update(_create_stub_map(directory)) + return map_ + + +def _create_stub_map(directory): + """ + Create a mapping of an importable name in Python to a stub file. + """ + def generate(): + try: + listed = os.listdir(directory) + except (FileNotFoundError, OSError): + # OSError is Python 2 + return + + for entry in listed: + entry = cast_path(entry) + path = os.path.join(directory, entry) + if os.path.isdir(path): + init = os.path.join(path, '__init__.pyi') + if os.path.isfile(init): + yield entry, init + elif entry.endswith('.pyi') and os.path.isfile(path): + name = entry.rstrip('.pyi') + if name != '__init__': + yield name, path + + # Create a dictionary from the tuple generator. + return dict(generate()) + + +def _get_typeshed_directories(version_info): + check_version_list = ['2and3', str(version_info.major)] + for base in ['stdlib', 'third_party']: + base = os.path.join(TYPESHED_PATH, base) + base_list = os.listdir(base) + for base_list_entry in base_list: + match = re.match(r'(\d+)\.(\d+)$', base_list_entry) + if match is not None: + if int(match.group(1)) == version_info.major \ + and int(match.group(2)) <= version_info.minor: + check_version_list.append(base_list_entry) + + for check_version in check_version_list: + yield os.path.join(base, check_version) + + +_version_cache = {} + + +def _cache_stub_file_map(version_info): + """ + Returns a map of an importable name in Python to a stub file. + """ + # TODO this caches the stub files indefinitely, maybe use a time cache + # for that? + version = version_info[:2] + try: + return _version_cache[version] + except KeyError: + pass + + _version_cache[version] = file_set = \ + _merge_create_stub_map(_get_typeshed_directories(version_info)) + return file_set + + +def import_module_decorator(func): + @wraps(func) + def wrapper(evaluator, import_names, parent_module_context, sys_path, prefer_stubs): + try: + python_context_set = evaluator.module_cache.get(import_names) + except KeyError: + if parent_module_context is not None and parent_module_context.is_stub(): + parent_module_contexts = parent_module_context.non_stub_context_set + else: + parent_module_contexts = [parent_module_context] + if import_names == ('os', 'path'): + # This is a huge exception, we follow a nested import + # ``os.path``, because it's a very important one in Python + # that is being achieved by messing with ``sys.modules`` in + # ``os``. + python_parent = next(iter(parent_module_contexts)) + if python_parent is None: + python_parent, = evaluator.import_module(('os',), prefer_stubs=False) + python_context_set = python_parent.py__getattribute__('path') + else: + python_context_set = ContextSet.from_sets( + func(evaluator, import_names, p, sys_path,) + for p in parent_module_contexts + ) + evaluator.module_cache.add(import_names, python_context_set) + + if not prefer_stubs: + return python_context_set + + stub = _try_to_load_stub_cached(evaluator, import_names, python_context_set, + parent_module_context, sys_path) + if stub is not None: + return ContextSet([stub]) + return python_context_set + + return wrapper + + +def _try_to_load_stub_cached(evaluator, import_names, *args, **kwargs): + try: + return evaluator.stub_module_cache[import_names] + except KeyError: + pass + + # TODO is this needed? where are the exceptions coming from that make this + # necessary? Just remove this line. + evaluator.stub_module_cache[import_names] = None + evaluator.stub_module_cache[import_names] = result = \ + _try_to_load_stub(evaluator, import_names, *args, **kwargs) + return result + + +def _try_to_load_stub(evaluator, import_names, python_context_set, + parent_module_context, sys_path): + """ + Trying to load a stub for a set of import_names. + + This is modelled to work like "PEP 561 -- Distributing and Packaging Type + Information", see https://www.python.org/dev/peps/pep-0561. + """ + if parent_module_context is None and len(import_names) > 1: + try: + parent_module_context = _try_to_load_stub_cached( + evaluator, import_names[:-1], NO_CONTEXTS, + parent_module_context=None, sys_path=sys_path) + except KeyError: + pass + + # 1. Try to load foo-stubs folders on path for import name foo. + if len(import_names) == 1: + # foo-stubs + for p in sys_path: + init = os.path.join(p, *import_names) + '-stubs' + os.path.sep + '__init__.pyi' + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(init), + import_names=import_names, + ) + if m is not None: + return m + + # 2. Try to load pyi files next to py files. + for c in python_context_set: + try: + method = c.py__file__ + except AttributeError: + pass + else: + file_path = method() + file_paths = [] + if c.is_namespace(): + file_paths = [os.path.join(p, '__init__.pyi') for p in c.py__path__()] + elif file_path is not None and file_path.endswith('.py'): + file_paths = [file_path + 'i'] + + for file_path in file_paths: + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + # The file path should end with .pyi + file_io=FileIO(file_path), + import_names=import_names, + ) + if m is not None: + return m + + # 3. Try to load typeshed + m = _load_from_typeshed(evaluator, python_context_set, parent_module_context, import_names) + if m is not None: + return m + + # 4. Try to load pyi file somewhere if python_context_set was not defined. + if not python_context_set: + if parent_module_context is not None: + try: + method = parent_module_context.py__path__ + except AttributeError: + check_path = [] + else: + check_path = method() + # In case import_names + names_for_path = (import_names[-1],) + else: + check_path = sys_path + names_for_path = import_names + + for p in check_path: + m = _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(os.path.join(p, *names_for_path) + '.pyi'), + import_names=import_names, + ) + if m is not None: + return m + + # If no stub is found, that's fine, the calling function has to deal with + # it. + return None + + +def _load_from_typeshed(evaluator, python_context_set, parent_module_context, import_names): + import_name = import_names[-1] + map_ = None + if len(import_names) == 1: + map_ = _cache_stub_file_map(evaluator.grammar.version_info) + import_name = _IMPORT_MAP.get(import_name, import_name) + elif isinstance(parent_module_context, StubModuleContext): + if not parent_module_context.is_package: + # Only if it's a package (= a folder) something can be + # imported. + return None + path = parent_module_context.py__path__() + map_ = _merge_create_stub_map(path) + + if map_ is not None: + path = map_.get(import_name) + if path is not None: + return _try_to_load_stub_from_file( + evaluator, + python_context_set, + file_io=FileIO(path), + import_names=import_names, + ) + + +def _try_to_load_stub_from_file(evaluator, python_context_set, file_io, import_names): + try: + stub_module_node = evaluator.parse( + file_io=file_io, + cache=True, + use_latest_grammar=True + ) + except (OSError, IOError): # IOError is Python 2 only + # The file that you're looking for doesn't exist (anymore). + return None + else: + return create_stub_module( + evaluator, python_context_set, stub_module_node, file_io, + import_names + ) + + +def create_stub_module(evaluator, python_context_set, stub_module_node, file_io, import_names): + if import_names == ('typing',): + module_cls = TypingModuleWrapper + else: + module_cls = StubModuleContext + file_name = os.path.basename(file_io.path) + stub_module_context = module_cls( + python_context_set, evaluator, stub_module_node, + file_io=file_io, + string_names=import_names, + # The code was loaded with latest_grammar, so use + # that. + code_lines=get_cached_code_lines(evaluator.latest_grammar, file_io.path), + is_package=file_name == '__init__.pyi', + ) + return stub_module_context diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typing.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typing.py new file mode 100644 index 0000000..20f2321 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/typing.py @@ -0,0 +1,707 @@ +""" +We need to somehow work with the typing objects. Since the typing objects are +pretty bare we need to add all the Jedi customizations to make them work as +contexts. + +This file deals with all the typing.py cases. +""" +from jedi._compatibility import unicode, force_unicode +from jedi import debug +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.compiled import builtin_from_name +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, Context, \ + iterator_to_context_set, ContextWrapper, LazyContextWrapper +from jedi.evaluate.lazy_context import LazyKnownContexts +from jedi.evaluate.context.iterable import SequenceLiteralContext +from jedi.evaluate.arguments import repack_with_argument_clinic +from jedi.evaluate.utils import to_list +from jedi.evaluate.filters import FilterWrapper +from jedi.evaluate.names import NameWrapper, AbstractTreeName, \ + AbstractNameDefinition, ContextName +from jedi.evaluate.helpers import is_string +from jedi.evaluate.context.klass import ClassMixin, ClassFilter + +_PROXY_CLASS_TYPES = 'Tuple Generic Protocol Callable Type'.split() +_TYPE_ALIAS_TYPES = { + 'List': 'builtins.list', + 'Dict': 'builtins.dict', + 'Set': 'builtins.set', + 'FrozenSet': 'builtins.frozenset', + 'ChainMap': 'collections.ChainMap', + 'Counter': 'collections.Counter', + 'DefaultDict': 'collections.defaultdict', + 'Deque': 'collections.deque', +} +_PROXY_TYPES = 'Optional Union ClassVar'.split() + + +class TypingName(AbstractTreeName): + def __init__(self, context, other_name): + super(TypingName, self).__init__(context.parent_context, other_name.tree_name) + self._context = context + + def infer(self): + return ContextSet([self._context]) + + +class _BaseTypingContext(Context): + def __init__(self, evaluator, parent_context, tree_name): + super(_BaseTypingContext, self).__init__(evaluator, parent_context) + self._tree_name = tree_name + + @property + def tree_node(self): + return self._tree_name + + def get_filters(self, *args, **kwargs): + # TODO this is obviously wrong. Is it though? + class EmptyFilter(ClassFilter): + def __init__(self): + pass + + def get(self, name, **kwargs): + return [] + + def values(self, **kwargs): + return [] + + yield EmptyFilter() + + def py__class__(self): + # TODO this is obviously not correct, but at least gives us a class if + # we have none. Some of these objects don't really have a base class in + # typeshed. + return builtin_from_name(self.evaluator, u'object') + + @property + def name(self): + return ContextName(self, self._tree_name) + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._tree_name.value) + + +class TypingModuleName(NameWrapper): + def infer(self): + return ContextSet(self._remap()) + + def _remap(self): + name = self.string_name + evaluator = self.parent_context.evaluator + try: + actual = _TYPE_ALIAS_TYPES[name] + except KeyError: + pass + else: + yield TypeAlias.create_cached(evaluator, self.parent_context, self.tree_name, actual) + return + + if name in _PROXY_CLASS_TYPES: + yield TypingClassContext.create_cached(evaluator, self.parent_context, self.tree_name) + elif name in _PROXY_TYPES: + yield TypingContext.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'runtime': + # We don't want anything here, not sure what this function is + # supposed to do, since it just appears in the stubs and shouldn't + # have any effects there (because it's never executed). + return + elif name == 'TypeVar': + yield TypeVarClass.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'Any': + yield Any.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'TYPE_CHECKING': + # This is needed for e.g. imports that are only available for type + # checking or are in cycles. The user can then check this variable. + yield builtin_from_name(evaluator, u'True') + elif name == 'overload': + yield OverloadFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'NewType': + yield NewTypeFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'cast': + # TODO implement cast + yield CastFunction.create_cached(evaluator, self.parent_context, self.tree_name) + elif name == 'TypedDict': + # TODO doesn't even exist in typeshed/typing.py, yet. But will be + # added soon. + pass + elif name in ('no_type_check', 'no_type_check_decorator'): + # This is not necessary, as long as we are not doing type checking. + for c in self._wrapped_name.infer(): # Fuck my life Python 2 + yield c + else: + # Everything else shouldn't be relevant for type checking. + for c in self._wrapped_name.infer(): # Fuck my life Python 2 + yield c + + +class TypingModuleFilterWrapper(FilterWrapper): + name_wrapper_class = TypingModuleName + + +class _WithIndexBase(_BaseTypingContext): + def __init__(self, evaluator, parent_context, name, index_context, context_of_index): + super(_WithIndexBase, self).__init__(evaluator, parent_context, name) + self._index_context = index_context + self._context_of_index = context_of_index + + def __repr__(self): + return '<%s: %s[%s]>' % ( + self.__class__.__name__, + self._tree_name.value, + self._index_context, + ) + + +class TypingContextWithIndex(_WithIndexBase): + def execute_annotation(self): + string_name = self._tree_name.value + + if string_name == 'Union': + # This is kind of a special case, because we have Unions (in Jedi + # ContextSets). + return self.gather_annotation_classes().execute_annotation() + elif string_name == 'Optional': + # Optional is basically just saying it's either None or the actual + # type. + return self.gather_annotation_classes().execute_annotation() \ + | ContextSet([builtin_from_name(self.evaluator, u'None')]) + elif string_name == 'Type': + # The type is actually already given in the index_context + return ContextSet([self._index_context]) + elif string_name == 'ClassVar': + # For now don't do anything here, ClassVars are always used. + return self._index_context.execute_annotation() + + cls = globals()[string_name] + return ContextSet([cls( + self.evaluator, + self.parent_context, + self._tree_name, + self._index_context, + self._context_of_index + )]) + + def gather_annotation_classes(self): + return ContextSet.from_sets( + _iter_over_arguments(self._index_context, self._context_of_index) + ) + + +class TypingContext(_BaseTypingContext): + index_class = TypingContextWithIndex + py__simple_getitem__ = None + + def py__getitem__(self, index_context_set, contextualized_node): + return ContextSet( + self.index_class.create_cached( + self.evaluator, + self.parent_context, + self._tree_name, + index_context, + context_of_index=contextualized_node.context) + for index_context in index_context_set + ) + + +class _TypingClassMixin(object): + def py__bases__(self): + return [LazyKnownContexts( + self.evaluator.builtins_module.py__getattribute__('object') + )] + + def get_metaclasses(self): + return [] + + +class TypingClassContextWithIndex(_TypingClassMixin, TypingContextWithIndex, ClassMixin): + pass + + +class TypingClassContext(_TypingClassMixin, TypingContext, ClassMixin): + index_class = TypingClassContextWithIndex + + +def _iter_over_arguments(maybe_tuple_context, defining_context): + def iterate(): + if isinstance(maybe_tuple_context, SequenceLiteralContext): + for lazy_context in maybe_tuple_context.py__iter__(contextualized_node=None): + yield lazy_context.infer() + else: + yield ContextSet([maybe_tuple_context]) + + def resolve_forward_references(context_set): + for context in context_set: + if is_string(context): + from jedi.evaluate.gradual.annotation import _get_forward_reference_node + node = _get_forward_reference_node(defining_context, context.get_safe_value()) + if node is not None: + for c in defining_context.eval_node(node): + yield c + else: + yield context + + for context_set in iterate(): + yield ContextSet(resolve_forward_references(context_set)) + + +class TypeAlias(LazyContextWrapper): + def __init__(self, parent_context, origin_tree_name, actual): + self.evaluator = parent_context.evaluator + self.parent_context = parent_context + self._origin_tree_name = origin_tree_name + self._actual = actual # e.g. builtins.list + + @property + def name(self): + return ContextName(self, self._origin_tree_name) + + def py__name__(self): + return self.name.string_name + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._actual) + + def _get_wrapped_context(self): + module_name, class_name = self._actual.split('.') + if self.evaluator.environment.version_info.major == 2 and module_name == 'builtins': + module_name = '__builtin__' + + # TODO use evaluator.import_module? + from jedi.evaluate.imports import Importer + module, = Importer( + self.evaluator, [module_name], self.evaluator.builtins_module + ).follow() + classes = module.py__getattribute__(class_name) + # There should only be one, because it's code that we control. + assert len(classes) == 1, classes + cls = next(iter(classes)) + return cls + + +class _ContainerBase(_WithIndexBase): + def _get_getitem_contexts(self, index): + args = _iter_over_arguments(self._index_context, self._context_of_index) + for i, contexts in enumerate(args): + if i == index: + return contexts + + debug.warning('No param #%s found for annotation %s', index, self._index_context) + return NO_CONTEXTS + + +class Callable(_ContainerBase): + def py__call__(self, arguments): + # The 0th index are the arguments. + return self._get_getitem_contexts(1).execute_annotation() + + +class Tuple(_ContainerBase): + def _is_homogenous(self): + # To specify a variable-length tuple of homogeneous type, Tuple[T, ...] + # is used. + if isinstance(self._index_context, SequenceLiteralContext): + entries = self._index_context.get_tree_entries() + if len(entries) == 2 and entries[1] == '...': + return True + return False + + def py__simple_getitem__(self, index): + if self._is_homogenous(): + return self._get_getitem_contexts(0).execute_annotation() + else: + if isinstance(index, int): + return self._get_getitem_contexts(index).execute_annotation() + + debug.dbg('The getitem type on Tuple was %s' % index) + return NO_CONTEXTS + + def py__iter__(self, contextualized_node=None): + if self._is_homogenous(): + yield LazyKnownContexts(self._get_getitem_contexts(0).execute_annotation()) + else: + if isinstance(self._index_context, SequenceLiteralContext): + for i in range(self._index_context.py__len__()): + yield LazyKnownContexts(self._get_getitem_contexts(i).execute_annotation()) + + def py__getitem__(self, index_context_set, contextualized_node): + if self._is_homogenous(): + return self._get_getitem_contexts(0).execute_annotation() + + return ContextSet.from_sets( + _iter_over_arguments(self._index_context, self._context_of_index) + ).execute_annotation() + + +class Generic(_ContainerBase): + pass + + +class Protocol(_ContainerBase): + pass + + +class Any(_BaseTypingContext): + def execute_annotation(self): + debug.warning('Used Any - returned no results') + return NO_CONTEXTS + + +class TypeVarClass(_BaseTypingContext): + def py__call__(self, arguments): + unpacked = arguments.unpack() + + key, lazy_context = next(unpacked, (None, None)) + var_name = self._find_string_name(lazy_context) + # The name must be given, otherwise it's useless. + if var_name is None or key is not None: + debug.warning('Found a variable without a name %s', arguments) + return NO_CONTEXTS + + return ContextSet([TypeVar.create_cached( + self.evaluator, + self.parent_context, + self._tree_name, + var_name, + unpacked + )]) + + def _find_string_name(self, lazy_context): + if lazy_context is None: + return None + + context_set = lazy_context.infer() + if not context_set: + return None + if len(context_set) > 1: + debug.warning('Found multiple contexts for a type variable: %s', context_set) + + name_context = next(iter(context_set)) + try: + method = name_context.get_safe_value + except AttributeError: + return None + else: + safe_value = method(default=None) + if self.evaluator.environment.version_info.major == 2: + if isinstance(safe_value, bytes): + return force_unicode(safe_value) + if isinstance(safe_value, (str, unicode)): + return safe_value + return None + + +class TypeVar(_BaseTypingContext): + def __init__(self, evaluator, parent_context, tree_name, var_name, unpacked_args): + super(TypeVar, self).__init__(evaluator, parent_context, tree_name) + self._var_name = var_name + + self._constraints_lazy_contexts = [] + self._bound_lazy_context = None + self._covariant_lazy_context = None + self._contravariant_lazy_context = None + for key, lazy_context in unpacked_args: + if key is None: + self._constraints_lazy_contexts.append(lazy_context) + else: + if key == 'bound': + self._bound_lazy_context = lazy_context + elif key == 'covariant': + self._covariant_lazy_context = lazy_context + elif key == 'contravariant': + self._contra_variant_lazy_context = lazy_context + else: + debug.warning('Invalid TypeVar param name %s', key) + + def py__name__(self): + return self._var_name + + def get_filters(self, *args, **kwargs): + return iter([]) + + def _get_classes(self): + if self._bound_lazy_context is not None: + return self._bound_lazy_context.infer() + if self._constraints_lazy_contexts: + return self.constraints + debug.warning('Tried to infer the TypeVar %s without a given type', self._var_name) + return NO_CONTEXTS + + def is_same_class(self, other): + # Everything can match an undefined type var. + return True + + @property + def constraints(self): + return ContextSet.from_sets( + lazy.infer() for lazy in self._constraints_lazy_contexts + ) + + def define_generics(self, type_var_dict): + try: + found = type_var_dict[self.py__name__()] + except KeyError: + pass + else: + if found: + return found + return self._get_classes() or ContextSet({self}) + + def execute_annotation(self): + return self._get_classes().execute_annotation() + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.py__name__()) + + +class OverloadFunction(_BaseTypingContext): + @repack_with_argument_clinic('func, /') + def py__call__(self, func_context_set): + # Just pass arguments through. + return func_context_set + + +class NewTypeFunction(_BaseTypingContext): + def py__call__(self, arguments): + ordered_args = arguments.unpack() + next(ordered_args, (None, None)) + _, second_arg = next(ordered_args, (None, None)) + if second_arg is None: + return NO_CONTEXTS + return ContextSet( + NewType( + self.evaluator, + contextualized_node.context, + contextualized_node.node, + second_arg.infer(), + ) for contextualized_node in arguments.get_calling_nodes()) + + +class NewType(Context): + def __init__(self, evaluator, parent_context, tree_node, type_context_set): + super(NewType, self).__init__(evaluator, parent_context) + self._type_context_set = type_context_set + self.tree_node = tree_node + + def py__call__(self, arguments): + return self._type_context_set.execute_annotation() + + +class CastFunction(_BaseTypingContext): + @repack_with_argument_clinic('type, object, /') + def py__call__(self, type_context_set, object_context_set): + return type_context_set.execute_annotation() + + +class BoundTypeVarName(AbstractNameDefinition): + """ + This type var was bound to a certain type, e.g. int. + """ + def __init__(self, type_var, context_set): + self._type_var = type_var + self.parent_context = type_var.parent_context + self._context_set = context_set + + def infer(self): + def iter_(): + for context in self._context_set: + # Replace any with the constraints if they are there. + if isinstance(context, Any): + for constraint in self._type_var.constraints: + yield constraint + else: + yield context + return ContextSet(iter_()) + + def py__name__(self): + return self._type_var.py__name__() + + def __repr__(self): + return '<%s %s -> %s>' % (self.__class__.__name__, self.py__name__(), self._context_set) + + +class TypeVarFilter(object): + """ + A filter for all given variables in a class. + + A = TypeVar('A') + B = TypeVar('B') + class Foo(Mapping[A, B]): + ... + + In this example we would have two type vars given: A and B + """ + def __init__(self, generics, type_vars): + self._generics = generics + self._type_vars = type_vars + + def get(self, name): + for i, type_var in enumerate(self._type_vars): + if type_var.py__name__() == name: + try: + return [BoundTypeVarName(type_var, self._generics[i])] + except IndexError: + return [type_var.name] + return [] + + def values(self): + # The values are not relevant. If it's not searched exactly, the type + # vars are just global and should be looked up as that. + return [] + + +class AbstractAnnotatedClass(ClassMixin, ContextWrapper): + def get_type_var_filter(self): + return TypeVarFilter(self.get_generics(), self.list_type_vars()) + + def get_filters(self, search_global=False, *args, **kwargs): + filters = super(AbstractAnnotatedClass, self).get_filters( + search_global, + *args, **kwargs + ) + for f in filters: + yield f + + if search_global: + # The type vars can only be looked up if it's a global search and + # not a direct lookup on the class. + yield self.get_type_var_filter() + + def is_same_class(self, other): + if not isinstance(other, AbstractAnnotatedClass): + return False + + if self.tree_node != other.tree_node: + # TODO not sure if this is nice. + return False + given_params1 = self.get_generics() + given_params2 = other.get_generics() + + if len(given_params1) != len(given_params2): + # If the amount of type vars doesn't match, the class doesn't + # match. + return False + + # Now compare generics + return all( + any( + # TODO why is this ordering the correct one? + cls2.is_same_class(cls1) + for cls1 in class_set1 + for cls2 in class_set2 + ) for class_set1, class_set2 in zip(given_params1, given_params2) + ) + + def py__call__(self, arguments): + instance, = super(AbstractAnnotatedClass, self).py__call__(arguments) + return ContextSet([InstanceWrapper(instance)]) + + def get_generics(self): + raise NotImplementedError + + def define_generics(self, type_var_dict): + changed = False + new_generics = [] + for generic_set in self.get_generics(): + contexts = NO_CONTEXTS + for generic in generic_set: + if isinstance(generic, (AbstractAnnotatedClass, TypeVar)): + result = generic.define_generics(type_var_dict) + contexts |= result + if result != ContextSet({generic}): + changed = True + else: + contexts |= ContextSet([generic]) + new_generics.append(contexts) + + if not changed: + # There might not be any type vars that change. In that case just + # return itself, because it does not make sense to potentially lose + # cached results. + return ContextSet([self]) + + return ContextSet([GenericClass( + self._wrapped_context, + generics=tuple(new_generics) + )]) + + def __repr__(self): + return '<%s: %s%s>' % ( + self.__class__.__name__, + self._wrapped_context, + list(self.get_generics()), + ) + + @to_list + def py__bases__(self): + for base in self._wrapped_context.py__bases__(): + yield LazyAnnotatedBaseClass(self, base) + + +class LazyGenericClass(AbstractAnnotatedClass): + def __init__(self, class_context, index_context, context_of_index): + super(LazyGenericClass, self).__init__(class_context) + self._index_context = index_context + self._context_of_index = context_of_index + + @evaluator_method_cache() + def get_generics(self): + return list(_iter_over_arguments(self._index_context, self._context_of_index)) + + +class GenericClass(AbstractAnnotatedClass): + def __init__(self, class_context, generics): + super(GenericClass, self).__init__(class_context) + self._generics = generics + + def get_generics(self): + return self._generics + + +class LazyAnnotatedBaseClass(object): + def __init__(self, class_context, lazy_base_class): + self._class_context = class_context + self._lazy_base_class = lazy_base_class + + @iterator_to_context_set + def infer(self): + for base in self._lazy_base_class.infer(): + if isinstance(base, AbstractAnnotatedClass): + # Here we have to recalculate the given types. + yield GenericClass.create_cached( + base.evaluator, + base._wrapped_context, + tuple(self._remap_type_vars(base)), + ) + else: + yield base + + def _remap_type_vars(self, base): + filter = self._class_context.get_type_var_filter() + for type_var_set in base.get_generics(): + new = NO_CONTEXTS + for type_var in type_var_set: + if isinstance(type_var, TypeVar): + names = filter.get(type_var.py__name__()) + new |= ContextSet.from_sets( + name.infer() for name in names + ) + else: + # Mostly will be type vars, except if in some cases + # a concrete type will already be there. In that + # case just add it to the context set. + new |= ContextSet([type_var]) + yield new + + +class InstanceWrapper(ContextWrapper): + def py__stop_iteration_returns(self): + for cls in self._wrapped_context.class_context.py__mro__(): + if cls.py__name__() == 'Generator': + generics = cls.get_generics() + try: + return generics[2].execute_annotation() + except IndexError: + pass + elif cls.py__name__() == 'Iterator': + return ContextSet([builtin_from_name(self.evaluator, u'None')]) + return self._wrapped_context.py__stop_iteration_returns() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/utils.py new file mode 100644 index 0000000..6bc60e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/gradual/utils.py @@ -0,0 +1,32 @@ +import os + +from jedi.evaluate.gradual.typeshed import TYPESHED_PATH, create_stub_module + + +def load_proper_stub_module(evaluator, file_io, import_names, module_node): + """ + This function is given a random .pyi file and should return the proper + module. + """ + path = file_io.path + assert path.endswith('.pyi') + if path.startswith(TYPESHED_PATH): + # /foo/stdlib/3/os/__init__.pyi -> stdlib/3/os/__init__ + rest = path[len(TYPESHED_PATH) + 1: -4] + split_paths = tuple(rest.split(os.path.sep)) + # Remove the stdlib/3 or third_party/3.5 part + import_names = split_paths[2:] + if import_names[-1] == '__init__': + import_names = import_names[:-1] + + if import_names is not None: + actual_context_set = evaluator.import_module(import_names, prefer_stubs=False) + if not actual_context_set: + return None + + stub = create_stub_module( + evaluator, actual_context_set, module_node, file_io, import_names + ) + evaluator.stub_module_cache[import_names] = stub + return stub + return None diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/helpers.py new file mode 100644 index 0000000..78d2a7f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/helpers.py @@ -0,0 +1,269 @@ +import copy +import sys +import re +import os +from itertools import chain +from contextlib import contextmanager + +from parso.python import tree + +from jedi._compatibility import unicode +from jedi.parser_utils import get_parent_scope + + +def is_stdlib_path(path): + # Python standard library paths look like this: + # /usr/lib/python3.5/... + # TODO The implementation below is probably incorrect and not complete. + if 'dist-packages' in path or 'site-packages' in path: + return False + + base_path = os.path.join(sys.prefix, 'lib', 'python') + return bool(re.match(re.escape(base_path) + r'\d.\d', path)) + + +def deep_ast_copy(obj): + """ + Much, much faster than copy.deepcopy, but just for parser tree nodes. + """ + # If it's already in the cache, just return it. + new_obj = copy.copy(obj) + + # Copy children + new_children = [] + for child in obj.children: + if isinstance(child, tree.Leaf): + new_child = copy.copy(child) + new_child.parent = new_obj + else: + new_child = deep_ast_copy(child) + new_child.parent = new_obj + new_children.append(new_child) + new_obj.children = new_children + + return new_obj + + +def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False): + """ + Creates a "call" node that consist of all ``trailer`` and ``power`` + objects. E.g. if you call it with ``append``:: + + list([]).append(3) or None + + You would get a node with the content ``list([]).append`` back. + + This generates a copy of the original ast node. + + If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. + + We use this function for two purposes. Given an expression ``bar.foo``, + we may want to + - infer the type of ``foo`` to offer completions after foo + - infer the type of ``bar`` to be able to jump to the definition of foo + The option ``cut_own_trailer`` must be set to true for the second purpose. + """ + trailer = leaf.parent + if trailer.type == 'fstring': + from jedi.evaluate import compiled + return compiled.get_string_context_set(context.evaluator) + + # The leaf may not be the last or first child, because there exist three + # different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples + # we should not match anything more than x. + if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]): + if trailer.type == 'atom': + return context.eval_node(trailer) + return context.eval_node(leaf) + + power = trailer.parent + index = power.children.index(trailer) + if cut_own_trailer: + cut = index + else: + cut = index + 1 + + if power.type == 'error_node': + start = index + while True: + start -= 1 + base = power.children[start] + if base.type != 'trailer': + break + trailers = power.children[start + 1: index + 1] + else: + base = power.children[0] + trailers = power.children[1:cut] + + if base == 'await': + base = trailers[0] + trailers = trailers[1:] + + values = context.eval_node(base) + from jedi.evaluate.syntax_tree import eval_trailer + for trailer in trailers: + values = eval_trailer(context, values, trailer) + return values + + +def call_of_leaf(leaf): + """ + Creates a "call" node that consist of all ``trailer`` and ``power`` + objects. E.g. if you call it with ``append``:: + + list([]).append(3) or None + + You would get a node with the content ``list([]).append`` back. + + This generates a copy of the original ast node. + + If you're using the leaf, e.g. the bracket `)` it will return ``list([])``. + """ + # TODO this is the old version of this call. Try to remove it. + trailer = leaf.parent + # The leaf may not be the last or first child, because there exist three + # different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples + # we should not match anything more than x. + if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]): + if trailer.type == 'atom': + return trailer + return leaf + + power = trailer.parent + index = power.children.index(trailer) + + new_power = copy.copy(power) + new_power.children = list(new_power.children) + new_power.children[index + 1:] = [] + + if power.type == 'error_node': + start = index + while True: + start -= 1 + if power.children[start].type != 'trailer': + break + transformed = tree.Node('power', power.children[start:]) + transformed.parent = power.parent + return transformed + + return power + + +def get_names_of_node(node): + try: + children = node.children + except AttributeError: + if node.type == 'name': + return [node] + else: + return [] + else: + return list(chain.from_iterable(get_names_of_node(c) for c in children)) + + +def get_module_names(module, all_scopes): + """ + Returns a dictionary with name parts as keys and their call paths as + values. + """ + names = list(chain.from_iterable(module.get_used_names().values())) + if not all_scopes: + # We have to filter all the names that don't have the module as a + # parent_scope. There's None as a parent, because nodes in the module + # node have the parent module and not suite as all the others. + # Therefore it's important to catch that case. + + def is_module_scope_name(name): + parent_scope = get_parent_scope(name) + # async functions have an extra wrapper. Strip it. + if parent_scope and parent_scope.type == 'async_stmt': + parent_scope = parent_scope.parent + return parent_scope in (module, None) + + names = [n for n in names if is_module_scope_name(n)] + return names + + +@contextmanager +def predefine_names(context, flow_scope, dct): + predefined = context.predefined_names + predefined[flow_scope] = dct + try: + yield + finally: + del predefined[flow_scope] + + +def is_string(context): + if context.evaluator.environment.version_info.major == 2: + str_classes = (unicode, bytes) + else: + str_classes = (unicode,) + return context.is_compiled() and isinstance(context.get_safe_value(default=None), str_classes) + + +def is_literal(context): + return is_number(context) or is_string(context) + + +def _get_safe_value_or_none(context, accept): + value = context.get_safe_value(default=None) + if isinstance(value, accept): + return value + + +def get_int_or_none(context): + return _get_safe_value_or_none(context, int) + + +def get_str_or_none(context): + return _get_safe_value_or_none(context, (bytes, unicode)) + + +def is_number(context): + return _get_safe_value_or_none(context, (int, float)) is not None + + +class SimpleGetItemNotFound(Exception): + pass + + +@contextmanager +def reraise_getitem_errors(*exception_classes): + try: + yield + except exception_classes as e: + raise SimpleGetItemNotFound(e) + + +def parse_dotted_names(nodes, is_import_from, until_node=None): + level = 0 + names = [] + for node in nodes[1:]: + if node in ('.', '...'): + if not names: + level += len(node.value) + elif node.type == 'dotted_name': + for n in node.children[::2]: + names.append(n) + if n is until_node: + break + else: + continue + break + elif node.type == 'name': + names.append(node) + if node is until_node: + break + elif node == ',': + if not is_import_from: + names = [] + else: + # Here if the keyword `import` comes along it stops checking + # for names. + break + return level, names + + +def contexts_from_qualified_names(evaluator, *names): + return evaluator.import_module(names[:-1]).py__getattribute__(names[-1]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/imports.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/imports.py new file mode 100644 index 0000000..f7ec8c3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/imports.py @@ -0,0 +1,568 @@ +""" +:mod:`jedi.evaluate.imports` is here to resolve import statements and return +the modules/classes/functions/whatever, which they stand for. However there's +not any actual importing done. This module is about finding modules in the +filesystem. This can be quite tricky sometimes, because Python imports are not +always that simple. + +This module uses imp for python up to 3.2 and importlib for python 3.3 on; the +correct implementation is delegated to _compatibility. + +This module also supports import autocompletion, which means to complete +statements like ``from datetim`` (cursor at the end would return ``datetime``). +""" +import os + +from parso.python import tree +from parso.tree import search_ancestor +from parso import python_bytes_to_unicode + +from jedi._compatibility import (FileNotFoundError, ImplicitNSInfo, + force_unicode, unicode) +from jedi import debug +from jedi import settings +from jedi.file_io import KnownContentFileIO, FileIO +from jedi.parser_utils import get_cached_code_lines +from jedi.evaluate import sys_path +from jedi.evaluate import helpers +from jedi.evaluate import compiled +from jedi.evaluate import analysis +from jedi.evaluate.utils import unite +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.names import ImportName, SubModuleName +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.evaluate.gradual.typeshed import import_module_decorator +from jedi.evaluate.context.module import iter_module_names +from jedi.plugins import plugin_manager + + +class ModuleCache(object): + def __init__(self): + self._path_cache = {} + self._name_cache = {} + + def add(self, string_names, context_set): + #path = module.py__file__() + #self._path_cache[path] = context_set + if string_names is not None: + self._name_cache[string_names] = context_set + + def get(self, string_names): + return self._name_cache[string_names] + + def get_from_path(self, path): + return self._path_cache[path] + + +# This memoization is needed, because otherwise we will infinitely loop on +# certain imports. +@evaluator_method_cache(default=NO_CONTEXTS) +def infer_import(context, tree_name, is_goto=False): + module_context = context.get_root_context() + import_node = search_ancestor(tree_name, 'import_name', 'import_from') + import_path = import_node.get_path_for_name(tree_name) + from_import_name = None + evaluator = context.evaluator + try: + from_names = import_node.get_from_names() + except AttributeError: + # Is an import_name + pass + else: + if len(from_names) + 1 == len(import_path): + # We have to fetch the from_names part first and then check + # if from_names exists in the modules. + from_import_name = import_path[-1] + import_path = from_names + + importer = Importer(evaluator, tuple(import_path), + module_context, import_node.level) + + types = importer.follow() + + #if import_node.is_nested() and not self.nested_resolve: + # scopes = [NestedImportModule(module, import_node)] + + if not types: + return NO_CONTEXTS + + if from_import_name is not None: + types = unite( + t.py__getattribute__( + from_import_name, + name_context=context, + is_goto=is_goto, + analysis_errors=False + ) + for t in types + ) + if not is_goto: + types = ContextSet(types) + + if not types: + path = import_path + [from_import_name] + importer = Importer(evaluator, tuple(path), + module_context, import_node.level) + types = importer.follow() + # goto only accepts `Name` + if is_goto: + types = set(s.name for s in types) + else: + # goto only accepts `Name` + if is_goto: + types = set(s.name for s in types) + + debug.dbg('after import: %s', types) + return types + + +class NestedImportModule(tree.Module): + """ + TODO while there's no use case for nested import module right now, we might + be able to use them for static analysis checks later on. + """ + def __init__(self, module, nested_import): + self._module = module + self._nested_import = nested_import + + def _get_nested_import_name(self): + """ + Generates an Import statement, that can be used to fake nested imports. + """ + i = self._nested_import + # This is not an existing Import statement. Therefore, set position to + # 0 (0 is not a valid line number). + zero = (0, 0) + names = [unicode(name) for name in i.namespace_names[1:]] + name = helpers.FakeName(names, self._nested_import) + new = tree.Import(i._sub_module, zero, zero, name) + new.parent = self._module + debug.dbg('Generated a nested import: %s', new) + return helpers.FakeName(str(i.namespace_names[1]), new) + + def __getattr__(self, name): + return getattr(self._module, name) + + def __repr__(self): + return "<%s: %s of %s>" % (self.__class__.__name__, self._module, + self._nested_import) + + +def _add_error(context, name, message): + if hasattr(name, 'parent') and context is not None: + analysis.add(context, 'import-error', name, message) + else: + debug.warning('ImportError without origin: ' + message) + + +def _level_to_base_import_path(project_path, directory, level): + """ + In case the level is outside of the currently known package (something like + import .....foo), we can still try our best to help the user for + completions. + """ + for i in range(level - 1): + old = directory + directory = os.path.dirname(directory) + if old == directory: + return None, None + + d = directory + level_import_paths = [] + # Now that we are on the level that the user wants to be, calculate the + # import path for it. + while True: + if d == project_path: + return level_import_paths, d + dir_name = os.path.basename(d) + if dir_name: + level_import_paths.insert(0, dir_name) + d = os.path.dirname(d) + else: + return None, directory + + +class Importer(object): + def __init__(self, evaluator, import_path, module_context, level=0): + """ + An implementation similar to ``__import__``. Use `follow` + to actually follow the imports. + + *level* specifies whether to use absolute or relative imports. 0 (the + default) means only perform absolute imports. Positive values for level + indicate the number of parent directories to search relative to the + directory of the module calling ``__import__()`` (see PEP 328 for the + details). + + :param import_path: List of namespaces (strings or Names). + """ + debug.speed('import %s %s' % (import_path, module_context)) + self._evaluator = evaluator + self.level = level + self.module_context = module_context + + self._fixed_sys_path = None + self._inference_possible = True + if level: + base = module_context.py__package__() + # We need to care for two cases, the first one is if it's a valid + # Python import. This import has a properly defined module name + # chain like `foo.bar.baz` and an import in baz is made for + # `..lala.` It can then resolve to `foo.bar.lala`. + # The else here is a heuristic for all other cases, if for example + # in `foo` you search for `...bar`, it's obviously out of scope. + # However since Jedi tries to just do it's best, we help the user + # here, because he might have specified something wrong in his + # project. + if level <= len(base): + # Here we basically rewrite the level to 0. + base = tuple(base) + if level > 1: + base = base[:-level + 1] + import_path = base + tuple(import_path) + else: + path = module_context.py__file__() + import_path = list(import_path) + if path is None: + # If no path is defined, our best guess is that the current + # file is edited by a user on the current working + # directory. We need to add an initial path, because it + # will get removed as the name of the current file. + directory = os.getcwd() + else: + directory = os.path.dirname(path) + + base_import_path, base_directory = _level_to_base_import_path( + self._evaluator.project._path, directory, level, + ) + if base_directory is None: + # Everything is lost, the relative import does point + # somewhere out of the filesystem. + self._inference_possible = False + else: + self._fixed_sys_path = [force_unicode(base_directory)] + + if base_import_path is None: + if import_path: + _add_error( + module_context, import_path[0], + message='Attempted relative import beyond top-level package.' + ) + else: + import_path = base_import_path + import_path + self.import_path = import_path + + @property + def _str_import_path(self): + """Returns the import path as pure strings instead of `Name`.""" + return tuple( + name.value if isinstance(name, tree.Name) else name + for name in self.import_path + ) + + def _sys_path_with_modifications(self): + if self._fixed_sys_path is not None: + return self._fixed_sys_path + + sys_path_mod = ( + self._evaluator.get_sys_path() + + sys_path.check_sys_path_modifications(self.module_context) + ) + + if self._evaluator.environment.version_info.major == 2: + file_path = self.module_context.py__file__() + if file_path is not None: + # Python2 uses an old strange way of importing relative imports. + sys_path_mod.append(force_unicode(os.path.dirname(file_path))) + + return sys_path_mod + + def follow(self): + if not self.import_path or not self._inference_possible: + return NO_CONTEXTS + + import_names = tuple( + force_unicode(i.value if isinstance(i, tree.Name) else i) + for i in self.import_path + ) + sys_path = self._sys_path_with_modifications() + + context_set = [None] + for i, name in enumerate(self.import_path): + context_set = ContextSet.from_sets([ + self._evaluator.import_module( + import_names[:i+1], + parent_module_context, + sys_path + ) for parent_module_context in context_set + ]) + if not context_set: + message = 'No module named ' + '.'.join(import_names) + _add_error(self.module_context, name, message) + return NO_CONTEXTS + return context_set + + def _get_module_names(self, search_path=None, in_module=None): + """ + Get the names of all modules in the search_path. This means file names + and not names defined in the files. + """ + names = [] + # add builtin module names + if search_path is None and in_module is None: + names += [ImportName(self.module_context, name) + for name in self._evaluator.compiled_subprocess.get_builtin_module_names()] + + if search_path is None: + search_path = self._sys_path_with_modifications() + + for name in iter_module_names(self._evaluator, search_path): + if in_module is None: + n = ImportName(self.module_context, name) + else: + n = SubModuleName(in_module, name) + names.append(n) + return names + + def completion_names(self, evaluator, only_modules=False): + """ + :param only_modules: Indicates wheter it's possible to import a + definition that is not defined in a module. + """ + if not self._inference_possible: + return [] + + names = [] + if self.import_path: + # flask + if self._str_import_path == ('flask', 'ext'): + # List Flask extensions like ``flask_foo`` + for mod in self._get_module_names(): + modname = mod.string_name + if modname.startswith('flask_'): + extname = modname[len('flask_'):] + names.append(ImportName(self.module_context, extname)) + # Now the old style: ``flaskext.foo`` + for dir in self._sys_path_with_modifications(): + flaskext = os.path.join(dir, 'flaskext') + if os.path.isdir(flaskext): + names += self._get_module_names([flaskext]) + + contexts = self.follow() + for context in contexts: + # Non-modules are not completable. + if context.api_type != 'module': # not a module + continue + names += context.sub_modules_dict().values() + + if not only_modules: + from jedi.evaluate.gradual.conversion import convert_contexts + + both_contexts = contexts | convert_contexts(contexts) + for c in both_contexts: + for filter in c.get_filters(search_global=False): + names += filter.values() + else: + if self.level: + # We only get here if the level cannot be properly calculated. + names += self._get_module_names(self._fixed_sys_path) + else: + # This is just the list of global imports. + names += self._get_module_names() + return names + + +@plugin_manager.decorate() +@import_module_decorator +def import_module(evaluator, import_names, parent_module_context, sys_path): + """ + This method is very similar to importlib's `_gcd_import`. + """ + if import_names[0] in settings.auto_import_modules: + module = _load_builtin_module(evaluator, import_names, sys_path) + if module is None: + return NO_CONTEXTS + return ContextSet([module]) + + module_name = '.'.join(import_names) + if parent_module_context is None: + # Override the sys.path. It works only good that way. + # Injecting the path directly into `find_module` did not work. + file_io_or_ns, is_pkg = evaluator.compiled_subprocess.get_module_info( + string=import_names[-1], + full_name=module_name, + sys_path=sys_path, + is_global_search=True, + ) + if is_pkg is None: + return NO_CONTEXTS + else: + try: + method = parent_module_context.py__path__ + except AttributeError: + # The module is not a package. + return NO_CONTEXTS + else: + paths = method() + for path in paths: + # At the moment we are only using one path. So this is + # not important to be correct. + if not isinstance(path, list): + path = [path] + file_io_or_ns, is_pkg = evaluator.compiled_subprocess.get_module_info( + string=import_names[-1], + path=path, + full_name=module_name, + is_global_search=False, + ) + if is_pkg is not None: + break + else: + return NO_CONTEXTS + + if isinstance(file_io_or_ns, ImplicitNSInfo): + from jedi.evaluate.context.namespace import ImplicitNamespaceContext + module = ImplicitNamespaceContext( + evaluator, + fullname=file_io_or_ns.name, + paths=file_io_or_ns.paths, + ) + elif file_io_or_ns is None: + module = _load_builtin_module(evaluator, import_names, sys_path) + if module is None: + return NO_CONTEXTS + else: + module = _load_python_module( + evaluator, file_io_or_ns, sys_path, + import_names=import_names, + is_package=is_pkg, + ) + + if parent_module_context is None: + debug.dbg('global search_module %s: %s', import_names[-1], module) + else: + debug.dbg('search_module %s in paths %s: %s', module_name, paths, module) + return ContextSet([module]) + + +def _load_python_module(evaluator, file_io, sys_path=None, + import_names=None, is_package=False): + try: + return evaluator.module_cache.get_from_path(file_io.path) + except KeyError: + pass + + module_node = evaluator.parse( + file_io=file_io, + cache=True, + diff_cache=settings.fast_parser, + cache_path=settings.cache_directory + ) + + from jedi.evaluate.context import ModuleContext + return ModuleContext( + evaluator, module_node, + file_io=file_io, + string_names=import_names, + code_lines=get_cached_code_lines(evaluator.grammar, file_io.path), + is_package=is_package, + ) + + +def _load_builtin_module(evaluator, import_names=None, sys_path=None): + if sys_path is None: + sys_path = evaluator.get_sys_path() + + dotted_name = '.'.join(import_names) + assert dotted_name is not None + module = compiled.load_module(evaluator, dotted_name=dotted_name, sys_path=sys_path) + if module is None: + # The file might raise an ImportError e.g. and therefore not be + # importable. + return None + return module + + +def _load_module_from_path(evaluator, file_io, base_names): + """ + This should pretty much only be used for get_modules_containing_name. It's + here to ensure that a random path is still properly loaded into the Jedi + module structure. + """ + e_sys_path = evaluator.get_sys_path() + path = file_io.path + if base_names: + module_name = os.path.basename(path) + module_name = sys_path.remove_python_path_suffix(module_name) + is_package = module_name == '__init__' + if is_package: + import_names = base_names + else: + import_names = base_names + (module_name,) + else: + import_names, is_package = sys_path.transform_path_to_dotted(e_sys_path, path) + + module = _load_python_module( + evaluator, file_io, + sys_path=e_sys_path, + import_names=import_names, + is_package=is_package, + ) + evaluator.module_cache.add(import_names, ContextSet([module])) + return module + + +def get_modules_containing_name(evaluator, modules, name): + """ + Search a name in the directories of modules. + """ + def check_directory(folder_io): + for file_name in folder_io.list(): + if file_name.endswith('.py'): + yield folder_io.get_file_io(file_name) + + def check_fs(file_io, base_names): + try: + code = file_io.read() + except FileNotFoundError: + return None + code = python_bytes_to_unicode(code, errors='replace') + if name not in code: + return None + new_file_io = KnownContentFileIO(file_io.path, code) + m = _load_module_from_path(evaluator, new_file_io, base_names) + if isinstance(m, compiled.CompiledObject): + return None + return m + + # skip non python modules + used_mod_paths = set() + folders_with_names_to_be_checked = [] + for m in modules: + if m.file_io is not None: + path = m.file_io.path + if path not in used_mod_paths: + used_mod_paths.add(path) + folders_with_names_to_be_checked.append(( + m.file_io.get_parent_folder(), + m.py__package__() + )) + yield m + + if not settings.dynamic_params_for_other_modules: + return + + def get_file_ios_to_check(): + for folder_io, base_names in folders_with_names_to_be_checked: + for file_io in check_directory(folder_io): + yield file_io, base_names + + for p in settings.additional_dynamic_modules: + p = os.path.abspath(p) + if p not in used_mod_paths: + yield FileIO(p), None + + for file_io, base_names in get_file_ios_to_check(): + m = check_fs(file_io, base_names) + if m is not None: + yield m diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/lazy_context.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/lazy_context.py new file mode 100644 index 0000000..0501d3b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/lazy_context.py @@ -0,0 +1,59 @@ +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.common.utils import monkeypatch + + +class AbstractLazyContext(object): + def __init__(self, data): + self.data = data + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.data) + + def infer(self): + raise NotImplementedError + + +class LazyKnownContext(AbstractLazyContext): + """data is a context.""" + def infer(self): + return ContextSet([self.data]) + + +class LazyKnownContexts(AbstractLazyContext): + """data is a ContextSet.""" + def infer(self): + return self.data + + +class LazyUnknownContext(AbstractLazyContext): + def __init__(self): + super(LazyUnknownContext, self).__init__(None) + + def infer(self): + return NO_CONTEXTS + + +class LazyTreeContext(AbstractLazyContext): + def __init__(self, context, node): + super(LazyTreeContext, self).__init__(node) + self.context = context + # We need to save the predefined names. It's an unfortunate side effect + # that needs to be tracked otherwise results will be wrong. + self._predefined_names = dict(context.predefined_names) + + def infer(self): + with monkeypatch(self.context, 'predefined_names', self._predefined_names): + return self.context.eval_node(self.data) + + +def get_merged_lazy_context(lazy_contexts): + if len(lazy_contexts) > 1: + return MergedLazyContexts(lazy_contexts) + else: + return lazy_contexts[0] + + +class MergedLazyContexts(AbstractLazyContext): + """data is a list of lazy contexts.""" + def infer(self): + return ContextSet.from_sets(l.infer() for l in self.data) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/names.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/names.py new file mode 100644 index 0000000..b1c2d40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/names.py @@ -0,0 +1,375 @@ +from abc import abstractmethod + +from parso.tree import search_ancestor + +from jedi._compatibility import Parameter +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS +from jedi.cache import memoize_method + + +class AbstractNameDefinition(object): + start_pos = None + string_name = None + parent_context = None + tree_name = None + is_context_name = True + """ + Used for the Jedi API to know if it's a keyword or an actual name. + """ + + @abstractmethod + def infer(self): + raise NotImplementedError + + @abstractmethod + def goto(self): + # Typically names are already definitions and therefore a goto on that + # name will always result on itself. + return {self} + + def get_qualified_names(self, include_module_names=False): + qualified_names = self._get_qualified_names() + if qualified_names is None or not include_module_names: + return qualified_names + + module_names = self.get_root_context().string_names + if module_names is None: + return None + return module_names + qualified_names + + def _get_qualified_names(self): + # By default, a name has no qualified names. + return None + + def get_root_context(self): + return self.parent_context.get_root_context() + + def __repr__(self): + if self.start_pos is None: + return '<%s: string_name=%s>' % (self.__class__.__name__, self.string_name) + return '<%s: string_name=%s start_pos=%s>' % (self.__class__.__name__, + self.string_name, self.start_pos) + + def is_import(self): + return False + + @property + def api_type(self): + return self.parent_context.api_type + + +class AbstractArbitraryName(AbstractNameDefinition): + """ + When you e.g. want to complete dicts keys, you probably want to complete + string literals, which is not really a name, but for Jedi we use this + concept of Name for completions as well. + """ + is_context_name = False + + def __init__(self, evaluator, string): + self.evaluator = evaluator + self.string_name = string + self.parent_context = evaluator.builtins_module + + def infer(self): + return NO_CONTEXTS + + +class AbstractTreeName(AbstractNameDefinition): + def __init__(self, parent_context, tree_name): + self.parent_context = parent_context + self.tree_name = tree_name + + def get_qualified_names(self, include_module_names=False): + import_node = search_ancestor(self.tree_name, 'import_name', 'import_from') + # For import nodes we cannot just have names, because it's very unclear + # how they would look like. For now we just ignore them in most cases. + # In case of level == 1, it works always, because it's like a submodule + # lookup. + if import_node is not None and not (import_node.level == 1 + and self.get_root_context().is_package): + # TODO improve the situation for when level is present. + if include_module_names and not import_node.level: + return tuple(n.value for n in import_node.get_path_for_name(self.tree_name)) + else: + return None + + return super(AbstractTreeName, self).get_qualified_names(include_module_names) + + def _get_qualified_names(self): + parent_names = self.parent_context.get_qualified_names() + if parent_names is None: + return None + return parent_names + (self.tree_name.value,) + + def goto(self, **kwargs): + return self.parent_context.evaluator.goto(self.parent_context, self.tree_name, **kwargs) + + def is_import(self): + imp = search_ancestor(self.tree_name, 'import_from', 'import_name') + return imp is not None + + @property + def string_name(self): + return self.tree_name.value + + @property + def start_pos(self): + return self.tree_name.start_pos + + +class ContextNameMixin(object): + def infer(self): + return ContextSet([self._context]) + + def _get_qualified_names(self): + return self._context.get_qualified_names() + + def get_root_context(self): + if self.parent_context is None: # A module + return self._context + return super(ContextNameMixin, self).get_root_context() + + @property + def api_type(self): + return self._context.api_type + + +class ContextName(ContextNameMixin, AbstractTreeName): + def __init__(self, context, tree_name): + super(ContextName, self).__init__(context.parent_context, tree_name) + self._context = context + + def goto(self): + return ContextSet([self._context.name]) + + +class TreeNameDefinition(AbstractTreeName): + _API_TYPES = dict( + import_name='module', + import_from='module', + funcdef='function', + param='param', + classdef='class', + ) + + def infer(self): + # Refactor this, should probably be here. + from jedi.evaluate.syntax_tree import tree_name_to_contexts + parent = self.parent_context + return tree_name_to_contexts(parent.evaluator, parent, self.tree_name) + + @property + def api_type(self): + definition = self.tree_name.get_definition(import_name_always=True) + if definition is None: + return 'statement' + return self._API_TYPES.get(definition.type, 'statement') + + +class _ParamMixin(object): + def maybe_positional_argument(self, include_star=True): + options = [Parameter.POSITIONAL_ONLY, Parameter.POSITIONAL_OR_KEYWORD] + if include_star: + options.append(Parameter.VAR_POSITIONAL) + return self.get_kind() in options + + def maybe_keyword_argument(self, include_stars=True): + options = [Parameter.KEYWORD_ONLY, Parameter.POSITIONAL_OR_KEYWORD] + if include_stars: + options.append(Parameter.VAR_KEYWORD) + return self.get_kind() in options + + def _kind_string(self): + kind = self.get_kind() + if kind == Parameter.VAR_POSITIONAL: # *args + return '*' + if kind == Parameter.VAR_KEYWORD: # **kwargs + return '**' + return '' + + +class ParamNameInterface(_ParamMixin): + api_type = u'param' + + def get_kind(self): + raise NotImplementedError + + def to_string(self): + raise NotImplementedError + + def get_param(self): + # TODO document better where this is used and when. Currently it has + # very limited use, but is still in use. It's currently not even + # clear what values would be allowed. + return None + + @property + def star_count(self): + kind = self.get_kind() + if kind == Parameter.VAR_POSITIONAL: + return 1 + if kind == Parameter.VAR_KEYWORD: + return 2 + return 0 + + +class BaseTreeParamName(ParamNameInterface, AbstractTreeName): + annotation_node = None + default_node = None + + def to_string(self): + output = self._kind_string() + self.string_name + annotation = self.annotation_node + default = self.default_node + if annotation is not None: + output += ': ' + annotation.get_code(include_prefix=False) + if default is not None: + output += '=' + default.get_code(include_prefix=False) + return output + + +class ParamName(BaseTreeParamName): + def _get_param_node(self): + return search_ancestor(self.tree_name, 'param') + + @property + def annotation_node(self): + return self._get_param_node().annotation + + def infer_annotation(self, execute_annotation=True): + node = self.annotation_node + if node is None: + return NO_CONTEXTS + contexts = self.parent_context.parent_context.eval_node(node) + if execute_annotation: + contexts = contexts.execute_annotation() + return contexts + + def infer_default(self): + node = self.default_node + if node is None: + return NO_CONTEXTS + return self.parent_context.parent_context.eval_node(node) + + @property + def default_node(self): + return self._get_param_node().default + + @property + def string_name(self): + name = self.tree_name.value + if name.startswith('__'): + # Params starting with __ are an equivalent to positional only + # variables in typeshed. + name = name[2:] + return name + + def get_kind(self): + tree_param = self._get_param_node() + if tree_param.star_count == 1: # *args + return Parameter.VAR_POSITIONAL + if tree_param.star_count == 2: # **kwargs + return Parameter.VAR_KEYWORD + + # Params starting with __ are an equivalent to positional only + # variables in typeshed. + if tree_param.name.value.startswith('__'): + return Parameter.POSITIONAL_ONLY + + parent = tree_param.parent + param_appeared = False + for p in parent.children: + if param_appeared: + if p == '/': + return Parameter.POSITIONAL_ONLY + else: + if p == '*': + return Parameter.KEYWORD_ONLY + if p.type == 'param': + if p.star_count: + return Parameter.KEYWORD_ONLY + if p == tree_param: + param_appeared = True + return Parameter.POSITIONAL_OR_KEYWORD + + def infer(self): + return self.get_param().infer() + + def get_param(self): + params, _ = self.parent_context.get_executed_params_and_issues() + param_node = search_ancestor(self.tree_name, 'param') + return params[param_node.position_index] + + +class ParamNameWrapper(_ParamMixin): + def __init__(self, param_name): + self._wrapped_param_name = param_name + + def __getattr__(self, name): + return getattr(self._wrapped_param_name, name) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self._wrapped_param_name) + + +class ImportName(AbstractNameDefinition): + start_pos = (1, 0) + _level = 0 + + def __init__(self, parent_context, string_name): + self._from_module_context = parent_context + self.string_name = string_name + + def get_qualified_names(self, include_module_names=False): + if include_module_names: + if self._level: + assert self._level == 1, "Everything else is not supported for now" + module_names = self._from_module_context.string_names + if module_names is None: + return module_names + return module_names + (self.string_name,) + return (self.string_name,) + return () + + @property + def parent_context(self): + m = self._from_module_context + import_contexts = self.infer() + if not import_contexts: + return m + # It's almost always possible to find the import or to not find it. The + # importing returns only one context, pretty much always. + return next(iter(import_contexts)) + + @memoize_method + def infer(self): + from jedi.evaluate.imports import Importer + m = self._from_module_context + return Importer(m.evaluator, [self.string_name], m, level=self._level).follow() + + def goto(self): + return [m.name for m in self.infer()] + + @property + def api_type(self): + return 'module' + + +class SubModuleName(ImportName): + _level = 1 + + +class NameWrapper(object): + def __init__(self, wrapped_name): + self._wrapped_name = wrapped_name + + @abstractmethod + def infer(self): + raise NotImplementedError + + def __getattr__(self, name): + return getattr(self._wrapped_name, name) + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self._wrapped_name) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/param.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/param.py new file mode 100644 index 0000000..ffec77e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/param.py @@ -0,0 +1,253 @@ +from collections import defaultdict + +from jedi import debug +from jedi.evaluate.utils import PushBackIterator +from jedi.evaluate import analysis +from jedi.evaluate.lazy_context import LazyKnownContext, \ + LazyTreeContext, LazyUnknownContext +from jedi.evaluate import docstrings +from jedi.evaluate.context import iterable + + +def _add_argument_issue(error_name, lazy_context, message): + if isinstance(lazy_context, LazyTreeContext): + node = lazy_context.data + if node.parent.type == 'argument': + node = node.parent + return analysis.add(lazy_context.context, error_name, node, message) + + +class ExecutedParam(object): + """Fake a param and give it values.""" + def __init__(self, execution_context, param_node, lazy_context, is_default=False): + self._execution_context = execution_context + self._param_node = param_node + self._lazy_context = lazy_context + self.string_name = param_node.name.value + self._is_default = is_default + + def infer_annotations(self): + from jedi.evaluate.gradual.annotation import infer_param + return infer_param(self._execution_context, self._param_node) + + def infer(self, use_hints=True): + if use_hints: + doc_params = docstrings.infer_param(self._execution_context, self._param_node) + ann = self.infer_annotations().execute_annotation() + if ann or doc_params: + return ann | doc_params + + return self._lazy_context.infer() + + def matches_signature(self): + if self._is_default: + return True + argument_contexts = self.infer(use_hints=False).py__class__() + if self._param_node.star_count: + return True + annotations = self.infer_annotations() + if not annotations: + # If we cannot infer annotations - or there aren't any - pretend + # that the signature matches. + return True + matches = any(c1.is_sub_class_of(c2) + for c1 in argument_contexts + for c2 in annotations.gather_annotation_classes()) + debug.dbg("signature compare %s: %s <=> %s", + matches, argument_contexts, annotations, color='BLUE') + return matches + + @property + def var_args(self): + return self._execution_context.var_args + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.string_name) + + +def get_executed_params_and_issues(execution_context, arguments): + def too_many_args(argument): + m = _error_argument_count(funcdef, len(unpacked_va)) + # Just report an error for the first param that is not needed (like + # cPython). + if arguments.get_calling_nodes(): + # There might not be a valid calling node so check for that first. + issues.append( + _add_argument_issue( + 'type-error-too-many-arguments', + argument, + message=m + ) + ) + else: + issues.append(None) + + issues = [] # List[Optional[analysis issue]] + result_params = [] + param_dict = {} + funcdef = execution_context.tree_node + # Default params are part of the context where the function was defined. + # This means that they might have access on class variables that the + # function itself doesn't have. + default_param_context = execution_context.function_context.get_default_param_context() + + for param in funcdef.get_params(): + param_dict[param.name.value] = param + unpacked_va = list(arguments.unpack(funcdef)) + var_arg_iterator = PushBackIterator(iter(unpacked_va)) + + non_matching_keys = defaultdict(lambda: []) + keys_used = {} + keys_only = False + had_multiple_value_error = False + for param in funcdef.get_params(): + # The value and key can both be null. There, the defaults apply. + # args / kwargs will just be empty arrays / dicts, respectively. + # Wrong value count is just ignored. If you try to test cases that are + # not allowed in Python, Jedi will maybe not show any completions. + is_default = False + key, argument = next(var_arg_iterator, (None, None)) + while key is not None: + keys_only = True + try: + key_param = param_dict[key] + except KeyError: + non_matching_keys[key] = argument + else: + if key in keys_used: + had_multiple_value_error = True + m = ("TypeError: %s() got multiple values for keyword argument '%s'." + % (funcdef.name, key)) + for contextualized_node in arguments.get_calling_nodes(): + issues.append( + analysis.add(contextualized_node.context, + 'type-error-multiple-values', + contextualized_node.node, message=m) + ) + else: + keys_used[key] = ExecutedParam(execution_context, key_param, argument) + key, argument = next(var_arg_iterator, (None, None)) + + try: + result_params.append(keys_used[param.name.value]) + continue + except KeyError: + pass + + if param.star_count == 1: + # *args param + lazy_context_list = [] + if argument is not None: + lazy_context_list.append(argument) + for key, argument in var_arg_iterator: + # Iterate until a key argument is found. + if key: + var_arg_iterator.push_back((key, argument)) + break + lazy_context_list.append(argument) + seq = iterable.FakeSequence(execution_context.evaluator, u'tuple', lazy_context_list) + result_arg = LazyKnownContext(seq) + elif param.star_count == 2: + if argument is not None: + too_many_args(argument) + # **kwargs param + dct = iterable.FakeDict(execution_context.evaluator, dict(non_matching_keys)) + result_arg = LazyKnownContext(dct) + non_matching_keys = {} + else: + # normal param + if argument is None: + # No value: Return an empty container + if param.default is None: + result_arg = LazyUnknownContext() + if not keys_only: + for contextualized_node in arguments.get_calling_nodes(): + m = _error_argument_count(funcdef, len(unpacked_va)) + issues.append( + analysis.add( + contextualized_node.context, + 'type-error-too-few-arguments', + contextualized_node.node, + message=m, + ) + ) + else: + result_arg = LazyTreeContext(default_param_context, param.default) + is_default = True + else: + result_arg = argument + + result_params.append(ExecutedParam( + execution_context, param, result_arg, + is_default=is_default + )) + if not isinstance(result_arg, LazyUnknownContext): + keys_used[param.name.value] = result_params[-1] + + if keys_only: + # All arguments should be handed over to the next function. It's not + # about the values inside, it's about the names. Jedi needs to now that + # there's nothing to find for certain names. + for k in set(param_dict) - set(keys_used): + param = param_dict[k] + + if not (non_matching_keys or had_multiple_value_error or + param.star_count or param.default): + # add a warning only if there's not another one. + for contextualized_node in arguments.get_calling_nodes(): + m = _error_argument_count(funcdef, len(unpacked_va)) + issues.append( + analysis.add(contextualized_node.context, + 'type-error-too-few-arguments', + contextualized_node.node, message=m) + ) + + for key, lazy_context in non_matching_keys.items(): + m = "TypeError: %s() got an unexpected keyword argument '%s'." \ + % (funcdef.name, key) + issues.append( + _add_argument_issue( + 'type-error-keyword-argument', + lazy_context, + message=m + ) + ) + + remaining_arguments = list(var_arg_iterator) + if remaining_arguments: + first_key, lazy_context = remaining_arguments[0] + too_many_args(lazy_context) + return result_params, issues + + +def _error_argument_count(funcdef, actual_count): + params = funcdef.get_params() + default_arguments = sum(1 for p in params if p.default or p.star_count) + + if default_arguments == 0: + before = 'exactly ' + else: + before = 'from %s to ' % (len(params) - default_arguments) + return ('TypeError: %s() takes %s%s arguments (%s given).' + % (funcdef.name, before, len(params), actual_count)) + + +def _create_default_param(execution_context, param): + if param.star_count == 1: + result_arg = LazyKnownContext( + iterable.FakeSequence(execution_context.evaluator, u'tuple', []) + ) + elif param.star_count == 2: + result_arg = LazyKnownContext( + iterable.FakeDict(execution_context.evaluator, {}) + ) + elif param.default is None: + result_arg = LazyUnknownContext() + else: + result_arg = LazyTreeContext(execution_context.parent_context, param.default) + return ExecutedParam(execution_context, param, result_arg) + + +def create_default_params(execution_context, funcdef): + return [_create_default_param(execution_context, p) + for p in funcdef.get_params()] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/parser_cache.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/parser_cache.py new file mode 100644 index 0000000..84fe52d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/parser_cache.py @@ -0,0 +1,6 @@ +from jedi.evaluate.cache import evaluator_function_cache + + +@evaluator_function_cache() +def get_yield_exprs(evaluator, funcdef): + return list(funcdef.iter_yield_exprs()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/recursion.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/recursion.py new file mode 100644 index 0000000..f86deda --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/recursion.py @@ -0,0 +1,153 @@ +""" +Recursions are the recipe of |jedi| to conquer Python code. However, someone +must stop recursions going mad. Some settings are here to make |jedi| stop at +the right time. You can read more about them :ref:`here `. + +Next to :mod:`jedi.evaluate.cache` this module also makes |jedi| not +thread-safe. Why? ``execution_recursion_decorator`` uses class variables to +count the function calls. + +.. _settings-recursion: + +Settings +~~~~~~~~~~ + +Recursion settings are important if you don't want extremly +recursive python code to go absolutely crazy. + +The default values are based on experiments while completing the |jedi| library +itself (inception!). But I don't think there's any other Python library that +uses recursion in a similarly extreme way. Completion should also be fast and +therefore the quality might not always be maximal. + +.. autodata:: recursion_limit +.. autodata:: total_function_execution_limit +.. autodata:: per_function_execution_limit +.. autodata:: per_function_recursion_limit +""" + +from contextlib import contextmanager + +from jedi import debug +from jedi.evaluate.base_context import NO_CONTEXTS + + +recursion_limit = 15 +""" +Like ``sys.getrecursionlimit()``, just for |jedi|. +""" +total_function_execution_limit = 200 +""" +This is a hard limit of how many non-builtin functions can be executed. +""" +per_function_execution_limit = 6 +""" +The maximal amount of times a specific function may be executed. +""" +per_function_recursion_limit = 2 +""" +A function may not be executed more than this number of times recursively. +""" + + +class RecursionDetector(object): + def __init__(self): + self.pushed_nodes = [] + + +@contextmanager +def execution_allowed(evaluator, node): + """ + A decorator to detect recursions in statements. In a recursion a statement + at the same place, in the same module may not be executed two times. + """ + pushed_nodes = evaluator.recursion_detector.pushed_nodes + + if node in pushed_nodes: + debug.warning('catched stmt recursion: %s @%s', node, + getattr(node, 'start_pos', None)) + yield False + else: + try: + pushed_nodes.append(node) + yield True + finally: + pushed_nodes.pop() + + +def execution_recursion_decorator(default=NO_CONTEXTS): + def decorator(func): + def wrapper(self, **kwargs): + detector = self.evaluator.execution_recursion_detector + limit_reached = detector.push_execution(self) + try: + if limit_reached: + result = default + else: + result = func(self, **kwargs) + finally: + detector.pop_execution() + return result + return wrapper + return decorator + + +class ExecutionRecursionDetector(object): + """ + Catches recursions of executions. + """ + def __init__(self, evaluator): + self._evaluator = evaluator + + self._recursion_level = 0 + self._parent_execution_funcs = [] + self._funcdef_execution_counts = {} + self._execution_count = 0 + + def pop_execution(self): + self._parent_execution_funcs.pop() + self._recursion_level -= 1 + + def push_execution(self, execution): + funcdef = execution.tree_node + + # These two will be undone in pop_execution. + self._recursion_level += 1 + self._parent_execution_funcs.append(funcdef) + + module = execution.get_root_context() + + if module == self._evaluator.builtins_module: + # We have control over builtins so we know they are not recursing + # like crazy. Therefore we just let them execute always, because + # they usually just help a lot with getting good results. + return False + + if self._recursion_level > recursion_limit: + debug.warning('Recursion limit (%s) reached', recursion_limit) + return True + + if self._execution_count >= total_function_execution_limit: + debug.warning('Function execution limit (%s) reached', total_function_execution_limit) + return True + self._execution_count += 1 + + if self._funcdef_execution_counts.setdefault(funcdef, 0) >= per_function_execution_limit: + if module.py__name__() in ('builtins', 'typing'): + return False + debug.warning( + 'Per function execution limit (%s) reached: %s', + per_function_execution_limit, + funcdef + ) + return True + self._funcdef_execution_counts[funcdef] += 1 + + if self._parent_execution_funcs.count(funcdef) > per_function_recursion_limit: + debug.warning( + 'Per function recursion limit (%s) reached: %s', + per_function_recursion_limit, + funcdef + ) + return True + return False diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/signature.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/signature.py new file mode 100644 index 0000000..43d3d5d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/signature.py @@ -0,0 +1,116 @@ +from jedi._compatibility import Parameter +from jedi.cache import memoize_method + + +class _SignatureMixin(object): + def to_string(self): + def param_strings(): + is_positional = False + is_kw_only = False + for n in self.get_param_names(resolve_stars=True): + kind = n.get_kind() + is_positional |= kind == Parameter.POSITIONAL_ONLY + if is_positional and kind != Parameter.POSITIONAL_ONLY: + yield '/' + is_positional = False + + if kind == Parameter.VAR_POSITIONAL: + is_kw_only = True + elif kind == Parameter.KEYWORD_ONLY and not is_kw_only: + yield '*' + is_kw_only = True + + yield n.to_string() + + if is_positional: + yield '/' + + s = self.name.string_name + '(' + ', '.join(param_strings()) + ')' + annotation = self.annotation_string + if annotation: + s += ' -> ' + annotation + return s + + +class AbstractSignature(_SignatureMixin): + def __init__(self, context, is_bound=False): + self.context = context + self.is_bound = is_bound + + @property + def name(self): + return self.context.name + + @property + def annotation_string(self): + return '' + + def get_param_names(self, resolve_stars=False): + param_names = self._function_context.get_param_names() + if self.is_bound: + return param_names[1:] + return param_names + + def bind(self, context): + raise NotImplementedError + + def __repr__(self): + return '<%s: %s, %s>' % (self.__class__.__name__, self.context, self._function_context) + + +class TreeSignature(AbstractSignature): + def __init__(self, context, function_context=None, is_bound=False): + super(TreeSignature, self).__init__(context, is_bound) + self._function_context = function_context or context + + def bind(self, context): + return TreeSignature(context, self._function_context, is_bound=True) + + @property + def _annotation(self): + # Classes don't need annotations, even if __init__ has one. They always + # return themselves. + if self.context.is_class(): + return None + return self._function_context.tree_node.annotation + + @property + def annotation_string(self): + a = self._annotation + if a is None: + return '' + return a.get_code(include_prefix=False) + + @memoize_method + def get_param_names(self, resolve_stars=False): + params = super(TreeSignature, self).get_param_names(resolve_stars=False) + if resolve_stars: + from jedi.evaluate.star_args import process_params + params = process_params(params) + return params + + +class BuiltinSignature(AbstractSignature): + def __init__(self, context, return_string, is_bound=False): + super(BuiltinSignature, self).__init__(context, is_bound) + self._return_string = return_string + + @property + def annotation_string(self): + return self._return_string + + @property + def _function_context(self): + return self.context + + def bind(self, context): + assert not self.is_bound + return BuiltinSignature(context, self._return_string, is_bound=True) + + +class SignatureWrapper(_SignatureMixin): + def __init__(self, wrapped_signature): + self._wrapped_signature = wrapped_signature + + def __getattr__(self, name): + return getattr(self._wrapped_signature, name) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/star_args.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/star_args.py new file mode 100644 index 0000000..2008a85 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/star_args.py @@ -0,0 +1,206 @@ +""" +This module is responsible for evaluating *args and **kwargs for signatures. + +This means for example in this case:: + + def foo(a, b, c): ... + + def bar(*args): + return foo(1, *args) + +The signature here for bar should be `bar(b, c)` instead of bar(*args). +""" + +from jedi._compatibility import Parameter +from jedi.evaluate.utils import to_list +from jedi.evaluate.names import ParamNameWrapper + + +def _iter_nodes_for_param(param_name): + from parso.python.tree import search_ancestor + from jedi.evaluate.arguments import TreeArguments + + execution_context = param_name.parent_context + function_node = execution_context.tree_node + module_node = function_node.get_root_node() + start = function_node.children[-1].start_pos + end = function_node.children[-1].end_pos + for name in module_node.get_used_names().get(param_name.string_name): + if start <= name.start_pos < end: + # Is used in the function + argument = name.parent + if argument.type == 'argument' \ + and argument.children[0] == '*' * param_name.star_count: + # No support for Python <= 3.4 here, but they are end-of-life + # anyway + trailer = search_ancestor(argument, 'trailer') + if trailer is not None: # Make sure we're in a function + context = execution_context.create_context(trailer) + if _goes_to_param_name(param_name, context, name): + contexts = _to_callables(context, trailer) + + args = TreeArguments.create_cached( + execution_context.evaluator, + context=context, + argument_node=trailer.children[1], + trailer=trailer, + ) + for c in contexts: + yield c, args + else: + assert False + + +def _goes_to_param_name(param_name, context, potential_name): + if potential_name.type != 'name': + return False + from jedi.evaluate.names import TreeNameDefinition + found = TreeNameDefinition(context, potential_name).goto() + return any(param_name.parent_context == p.parent_context + and param_name.start_pos == p.start_pos + for p in found) + + +def _to_callables(context, trailer): + from jedi.evaluate.syntax_tree import eval_trailer + + atom_expr = trailer.parent + index = atom_expr.children[0] == 'await' + # Eval atom first + contexts = context.eval_node(atom_expr.children[index]) + for trailer2 in atom_expr.children[index + 1:]: + if trailer == trailer2: + break + contexts = eval_trailer(context, contexts, trailer2) + return contexts + + +def _remove_given_params(arguments, param_names): + count = 0 + used_keys = set() + for key, _ in arguments.unpack(): + if key is None: + count += 1 + else: + used_keys.add(key) + + for p in param_names: + if count and p.maybe_positional_argument(): + count -= 1 + continue + if p.string_name in used_keys and p.maybe_keyword_argument(): + continue + yield p + + +@to_list +def process_params(param_names, star_count=3): # default means both * and ** + used_names = set() + arg_callables = [] + kwarg_callables = [] + + kw_only_names = [] + kwarg_names = [] + arg_names = [] + original_arg_name = None + original_kwarg_name = None + for p in param_names: + kind = p.get_kind() + if kind == Parameter.VAR_POSITIONAL: + if star_count & 1: + arg_callables = _iter_nodes_for_param(p) + original_arg_name = p + elif p.get_kind() == Parameter.VAR_KEYWORD: + if star_count & 2: + kwarg_callables = list(_iter_nodes_for_param(p)) + original_kwarg_name = p + elif kind == Parameter.KEYWORD_ONLY: + if star_count & 2: + kw_only_names.append(p) + elif kind == Parameter.POSITIONAL_ONLY: + if star_count & 1: + yield p + else: + if star_count == 1: + yield ParamNameFixedKind(p, Parameter.POSITIONAL_ONLY) + elif star_count == 2: + kw_only_names.append(ParamNameFixedKind(p, Parameter.KEYWORD_ONLY)) + else: + used_names.add(p.string_name) + yield p + + longest_param_names = () + found_arg_signature = False + found_kwarg_signature = False + for func_and_argument in arg_callables: + func, arguments = func_and_argument + new_star_count = star_count + if func_and_argument in kwarg_callables: + kwarg_callables.remove(func_and_argument) + else: + new_star_count = 1 + + for signature in func.get_signatures(): + found_arg_signature = True + if new_star_count == 3: + found_kwarg_signature = True + args_for_this_func = [] + for p in process_params( + list(_remove_given_params( + arguments, + signature.get_param_names(resolve_stars=False) + )), new_star_count): + if p.get_kind() == Parameter.VAR_KEYWORD: + kwarg_names.append(p) + elif p.get_kind() == Parameter.VAR_POSITIONAL: + arg_names.append(p) + elif p.get_kind() == Parameter.KEYWORD_ONLY: + kw_only_names.append(p) + else: + args_for_this_func.append(p) + if len(args_for_this_func) > len(longest_param_names): + longest_param_names = args_for_this_func + + for p in longest_param_names: + if star_count == 1 and p.get_kind() != Parameter.VAR_POSITIONAL: + yield ParamNameFixedKind(p, Parameter.POSITIONAL_ONLY) + else: + if p.get_kind() == Parameter.POSITIONAL_OR_KEYWORD: + used_names.add(p.string_name) + yield p + + if not found_arg_signature and original_arg_name is not None: + yield original_arg_name + elif arg_names: + yield arg_names[0] + + for p in kw_only_names: + if p.string_name in used_names: + continue + yield p + used_names.add(p.string_name) + + for func, arguments in kwarg_callables: + for signature in func.get_signatures(): + found_kwarg_signature = True + for p in process_params( + list(_remove_given_params( + arguments, + signature.get_param_names(resolve_stars=False) + )), star_count=2): + if p.get_kind() != Parameter.KEYWORD_ONLY or not kwarg_names: + yield p + + if not found_kwarg_signature and original_kwarg_name is not None: + yield original_kwarg_name + elif kwarg_names: + yield kwarg_names[0] + + +class ParamNameFixedKind(ParamNameWrapper): + def __init__(self, param_name, new_kind): + super(ParamNameFixedKind, self).__init__(param_name) + self._new_kind = new_kind + + def get_kind(self): + return self._new_kind diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/syntax_tree.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/syntax_tree.py new file mode 100644 index 0000000..89c51d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/syntax_tree.py @@ -0,0 +1,730 @@ +""" +Functions evaluating the syntax tree. +""" +import copy + +from parso.python import tree + +from jedi._compatibility import force_unicode, unicode +from jedi import debug +from jedi import parser_utils +from jedi.evaluate.base_context import ContextSet, NO_CONTEXTS, ContextualizedNode, \ + ContextualizedName, iterator_to_context_set, iterate_contexts +from jedi.evaluate.lazy_context import LazyTreeContext +from jedi.evaluate import compiled +from jedi.evaluate import recursion +from jedi.evaluate import helpers +from jedi.evaluate import analysis +from jedi.evaluate import imports +from jedi.evaluate import arguments +from jedi.evaluate.context import ClassContext, FunctionContext +from jedi.evaluate.context import iterable +from jedi.evaluate.context import TreeInstance +from jedi.evaluate.finder import NameFinder +from jedi.evaluate.helpers import is_string, is_literal, is_number +from jedi.evaluate.compiled.access import COMPARISON_OPERATORS +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.gradual.stub_context import VersionInfo +from jedi.evaluate.gradual import annotation +from jedi.evaluate.context.decorator import Decoratee +from jedi.plugins import plugin_manager + + +def _limit_context_infers(func): + """ + This is for now the way how we limit type inference going wild. There are + other ways to ensure recursion limits as well. This is mostly necessary + because of instance (self) access that can be quite tricky to limit. + + I'm still not sure this is the way to go, but it looks okay for now and we + can still go anther way in the future. Tests are there. ~ dave + """ + def wrapper(context, *args, **kwargs): + n = context.tree_node + evaluator = context.evaluator + try: + evaluator.inferred_element_counts[n] += 1 + if evaluator.inferred_element_counts[n] > 300: + debug.warning('In context %s there were too many inferences.', n) + return NO_CONTEXTS + except KeyError: + evaluator.inferred_element_counts[n] = 1 + return func(context, *args, **kwargs) + + return wrapper + + +def _py__stop_iteration_returns(generators): + results = NO_CONTEXTS + for generator in generators: + try: + method = generator.py__stop_iteration_returns + except AttributeError: + debug.warning('%s is not actually a generator', generator) + else: + results |= method() + return results + + +@debug.increase_indent +@_limit_context_infers +def eval_node(context, element): + debug.dbg('eval_node %s@%s in %s', element, element.start_pos, context) + evaluator = context.evaluator + typ = element.type + if typ in ('name', 'number', 'string', 'atom', 'strings', 'keyword', 'fstring'): + return eval_atom(context, element) + elif typ == 'lambdef': + return ContextSet([FunctionContext.from_context(context, element)]) + elif typ == 'expr_stmt': + return eval_expr_stmt(context, element) + elif typ in ('power', 'atom_expr'): + first_child = element.children[0] + children = element.children[1:] + had_await = False + if first_child.type == 'keyword' and first_child.value == 'await': + had_await = True + first_child = children.pop(0) + + context_set = context.eval_node(first_child) + for (i, trailer) in enumerate(children): + if trailer == '**': # has a power operation. + right = context.eval_node(children[i + 1]) + context_set = _eval_comparison( + evaluator, + context, + context_set, + trailer, + right + ) + break + context_set = eval_trailer(context, context_set, trailer) + + if had_await: + return context_set.py__await__().py__stop_iteration_returns() + return context_set + elif typ in ('testlist_star_expr', 'testlist',): + # The implicit tuple in statements. + return ContextSet([iterable.SequenceLiteralContext(evaluator, context, element)]) + elif typ in ('not_test', 'factor'): + context_set = context.eval_node(element.children[-1]) + for operator in element.children[:-1]: + context_set = eval_factor(context_set, operator) + return context_set + elif typ == 'test': + # `x if foo else y` case. + return (context.eval_node(element.children[0]) | + context.eval_node(element.children[-1])) + elif typ == 'operator': + # Must be an ellipsis, other operators are not evaluated. + # In Python 2 ellipsis is coded as three single dot tokens, not + # as one token 3 dot token. + if element.value not in ('.', '...'): + origin = element.parent + raise AssertionError("unhandled operator %s in %s " % (repr(element.value), origin)) + return ContextSet([compiled.builtin_from_name(evaluator, u'Ellipsis')]) + elif typ == 'dotted_name': + context_set = eval_atom(context, element.children[0]) + for next_name in element.children[2::2]: + # TODO add search_global=True? + context_set = context_set.py__getattribute__(next_name, name_context=context) + return context_set + elif typ == 'eval_input': + return eval_node(context, element.children[0]) + elif typ == 'annassign': + return annotation.eval_annotation(context, element.children[1]) \ + .execute_annotation() + elif typ == 'yield_expr': + if len(element.children) and element.children[1].type == 'yield_arg': + # Implies that it's a yield from. + element = element.children[1].children[1] + generators = context.eval_node(element) \ + .py__getattribute__('__iter__').execute_evaluated() + return generators.py__stop_iteration_returns() + + # Generator.send() is not implemented. + return NO_CONTEXTS + elif typ == 'namedexpr_test': + return eval_node(context, element.children[2]) + else: + return eval_or_test(context, element) + + +def eval_trailer(context, atom_contexts, trailer): + trailer_op, node = trailer.children[:2] + if node == ')': # `arglist` is optional. + node = None + + if trailer_op == '[': + trailer_op, node, _ = trailer.children + return atom_contexts.get_item( + eval_subscript_list(context.evaluator, context, node), + ContextualizedNode(context, trailer) + ) + else: + debug.dbg('eval_trailer: %s in %s', trailer, atom_contexts) + if trailer_op == '.': + return atom_contexts.py__getattribute__( + name_context=context, + name_or_str=node + ) + else: + assert trailer_op == '(', 'trailer_op is actually %s' % trailer_op + args = arguments.TreeArguments(context.evaluator, context, node, trailer) + return atom_contexts.execute(args) + + +def eval_atom(context, atom): + """ + Basically to process ``atom`` nodes. The parser sometimes doesn't + generate the node (because it has just one child). In that case an atom + might be a name or a literal as well. + """ + if atom.type == 'name': + if atom.value in ('True', 'False', 'None'): + # Python 2... + return ContextSet([compiled.builtin_from_name(context.evaluator, atom.value)]) + + # This is the first global lookup. + stmt = tree.search_ancestor( + atom, 'expr_stmt', 'lambdef' + ) or atom + if stmt.type == 'lambdef': + stmt = atom + position = stmt.start_pos + if _is_annotation_name(atom): + # Since Python 3.7 (with from __future__ import annotations), + # annotations are essentially strings and can reference objects + # that are defined further down in code. Therefore just set the + # position to None, so the finder will not try to stop at a certain + # position in the module. + position = None + return context.py__getattribute__( + name_or_str=atom, + position=position, + search_global=True + ) + elif atom.type == 'keyword': + # For False/True/None + if atom.value in ('False', 'True', 'None'): + return ContextSet([compiled.builtin_from_name(context.evaluator, atom.value)]) + elif atom.value == 'print': + # print e.g. could be evaluated like this in Python 2.7 + return NO_CONTEXTS + elif atom.value == 'yield': + # Contrary to yield from, yield can just appear alone to return a + # value when used with `.send()`. + return NO_CONTEXTS + assert False, 'Cannot evaluate the keyword %s' % atom + + elif isinstance(atom, tree.Literal): + string = context.evaluator.compiled_subprocess.safe_literal_eval(atom.value) + return ContextSet([compiled.create_simple_object(context.evaluator, string)]) + elif atom.type == 'strings': + # Will be multiple string. + context_set = eval_atom(context, atom.children[0]) + for string in atom.children[1:]: + right = eval_atom(context, string) + context_set = _eval_comparison(context.evaluator, context, context_set, u'+', right) + return context_set + elif atom.type == 'fstring': + return compiled.get_string_context_set(context.evaluator) + else: + c = atom.children + # Parentheses without commas are not tuples. + if c[0] == '(' and not len(c) == 2 \ + and not(c[1].type == 'testlist_comp' and + len(c[1].children) > 1): + return context.eval_node(c[1]) + + try: + comp_for = c[1].children[1] + except (IndexError, AttributeError): + pass + else: + if comp_for == ':': + # Dict comprehensions have a colon at the 3rd index. + try: + comp_for = c[1].children[3] + except IndexError: + pass + + if comp_for.type in ('comp_for', 'sync_comp_for'): + return ContextSet([iterable.comprehension_from_atom( + context.evaluator, context, atom + )]) + + # It's a dict/list/tuple literal. + array_node = c[1] + try: + array_node_c = array_node.children + except AttributeError: + array_node_c = [] + if c[0] == '{' and (array_node == '}' or ':' in array_node_c or + '**' in array_node_c): + context = iterable.DictLiteralContext(context.evaluator, context, atom) + else: + context = iterable.SequenceLiteralContext(context.evaluator, context, atom) + return ContextSet([context]) + + +@_limit_context_infers +def eval_expr_stmt(context, stmt, seek_name=None): + with recursion.execution_allowed(context.evaluator, stmt) as allowed: + # Here we allow list/set to recurse under certain conditions. To make + # it possible to resolve stuff like list(set(list(x))), this is + # necessary. + if not allowed and context.get_root_context() == context.evaluator.builtins_module: + try: + instance = context.var_args.instance + except AttributeError: + pass + else: + if instance.name.string_name in ('list', 'set'): + c = instance.get_first_non_keyword_argument_contexts() + if instance not in c: + allowed = True + + if allowed: + return _eval_expr_stmt(context, stmt, seek_name) + return NO_CONTEXTS + + +@debug.increase_indent +def _eval_expr_stmt(context, stmt, seek_name=None): + """ + The starting point of the completion. A statement always owns a call + list, which are the calls, that a statement does. In case multiple + names are defined in the statement, `seek_name` returns the result for + this name. + + :param stmt: A `tree.ExprStmt`. + """ + debug.dbg('eval_expr_stmt %s (%s)', stmt, seek_name) + rhs = stmt.get_rhs() + context_set = context.eval_node(rhs) + + if seek_name: + c_node = ContextualizedName(context, seek_name) + context_set = check_tuple_assignments(context.evaluator, c_node, context_set) + + first_operator = next(stmt.yield_operators(), None) + if first_operator not in ('=', None) and first_operator.type == 'operator': + # `=` is always the last character in aug assignments -> -1 + operator = copy.copy(first_operator) + operator.value = operator.value[:-1] + name = stmt.get_defined_names()[0].value + left = context.py__getattribute__( + name, position=stmt.start_pos, search_global=True) + + for_stmt = tree.search_ancestor(stmt, 'for_stmt') + if for_stmt is not None and for_stmt.type == 'for_stmt' and context_set \ + and parser_utils.for_stmt_defines_one_name(for_stmt): + # Iterate through result and add the values, that's possible + # only in for loops without clutter, because they are + # predictable. Also only do it, if the variable is not a tuple. + node = for_stmt.get_testlist() + cn = ContextualizedNode(context, node) + ordered = list(cn.infer().iterate(cn)) + + for lazy_context in ordered: + dct = {for_stmt.children[1].value: lazy_context.infer()} + with helpers.predefine_names(context, for_stmt, dct): + t = context.eval_node(rhs) + left = _eval_comparison(context.evaluator, context, left, operator, t) + context_set = left + else: + context_set = _eval_comparison(context.evaluator, context, left, operator, context_set) + debug.dbg('eval_expr_stmt result %s', context_set) + return context_set + + +def eval_or_test(context, or_test): + iterator = iter(or_test.children) + types = context.eval_node(next(iterator)) + for operator in iterator: + right = next(iterator) + if operator.type == 'comp_op': # not in / is not + operator = ' '.join(c.value for c in operator.children) + + # handle lazy evaluation of and/or here. + if operator in ('and', 'or'): + left_bools = set(left.py__bool__() for left in types) + if left_bools == {True}: + if operator == 'and': + types = context.eval_node(right) + elif left_bools == {False}: + if operator != 'and': + types = context.eval_node(right) + # Otherwise continue, because of uncertainty. + else: + types = _eval_comparison(context.evaluator, context, types, operator, + context.eval_node(right)) + debug.dbg('eval_or_test types %s', types) + return types + + +@iterator_to_context_set +def eval_factor(context_set, operator): + """ + Calculates `+`, `-`, `~` and `not` prefixes. + """ + for context in context_set: + if operator == '-': + if is_number(context): + yield context.negate() + elif operator == 'not': + value = context.py__bool__() + if value is None: # Uncertainty. + return + yield compiled.create_simple_object(context.evaluator, not value) + else: + yield context + + +def _literals_to_types(evaluator, result): + # Changes literals ('a', 1, 1.0, etc) to its type instances (str(), + # int(), float(), etc). + new_result = NO_CONTEXTS + for typ in result: + if is_literal(typ): + # Literals are only valid as long as the operations are + # correct. Otherwise add a value-free instance. + cls = compiled.builtin_from_name(evaluator, typ.name.string_name) + new_result |= cls.execute_evaluated() + else: + new_result |= ContextSet([typ]) + return new_result + + +def _eval_comparison(evaluator, context, left_contexts, operator, right_contexts): + if not left_contexts or not right_contexts: + # illegal slices e.g. cause left/right_result to be None + result = (left_contexts or NO_CONTEXTS) | (right_contexts or NO_CONTEXTS) + return _literals_to_types(evaluator, result) + else: + # I don't think there's a reasonable chance that a string + # operation is still correct, once we pass something like six + # objects. + if len(left_contexts) * len(right_contexts) > 6: + return _literals_to_types(evaluator, left_contexts | right_contexts) + else: + return ContextSet.from_sets( + _eval_comparison_part(evaluator, context, left, operator, right) + for left in left_contexts + for right in right_contexts + ) + + +def _is_annotation_name(name): + ancestor = tree.search_ancestor(name, 'param', 'funcdef', 'expr_stmt') + if ancestor is None: + return False + + if ancestor.type in ('param', 'funcdef'): + ann = ancestor.annotation + if ann is not None: + return ann.start_pos <= name.start_pos < ann.end_pos + elif ancestor.type == 'expr_stmt': + c = ancestor.children + if len(c) > 1 and c[1].type == 'annassign': + return c[1].start_pos <= name.start_pos < c[1].end_pos + return False + + +def _is_tuple(context): + return isinstance(context, iterable.Sequence) and context.array_type == 'tuple' + + +def _is_list(context): + return isinstance(context, iterable.Sequence) and context.array_type == 'list' + + +def _bool_to_context(evaluator, bool_): + return compiled.builtin_from_name(evaluator, force_unicode(str(bool_))) + + +def _get_tuple_ints(context): + if not isinstance(context, iterable.SequenceLiteralContext): + return None + numbers = [] + for lazy_context in context.py__iter__(): + if not isinstance(lazy_context, LazyTreeContext): + return None + node = lazy_context.data + if node.type != 'number': + return None + try: + numbers.append(int(node.value)) + except ValueError: + return None + return numbers + + +def _eval_comparison_part(evaluator, context, left, operator, right): + l_is_num = is_number(left) + r_is_num = is_number(right) + if isinstance(operator, unicode): + str_operator = operator + else: + str_operator = force_unicode(str(operator.value)) + + if str_operator == '*': + # for iterables, ignore * operations + if isinstance(left, iterable.Sequence) or is_string(left): + return ContextSet([left]) + elif isinstance(right, iterable.Sequence) or is_string(right): + return ContextSet([right]) + elif str_operator == '+': + if l_is_num and r_is_num or is_string(left) and is_string(right): + return ContextSet([left.execute_operation(right, str_operator)]) + elif _is_tuple(left) and _is_tuple(right) or _is_list(left) and _is_list(right): + return ContextSet([iterable.MergedArray(evaluator, (left, right))]) + elif str_operator == '-': + if l_is_num and r_is_num: + return ContextSet([left.execute_operation(right, str_operator)]) + elif str_operator == '%': + # With strings and numbers the left type typically remains. Except for + # `int() % float()`. + return ContextSet([left]) + elif str_operator in COMPARISON_OPERATORS: + if left.is_compiled() and right.is_compiled(): + # Possible, because the return is not an option. Just compare. + try: + return ContextSet([left.execute_operation(right, str_operator)]) + except TypeError: + # Could be True or False. + pass + else: + if str_operator in ('is', '!=', '==', 'is not'): + operation = COMPARISON_OPERATORS[str_operator] + bool_ = operation(left, right) + return ContextSet([_bool_to_context(evaluator, bool_)]) + + if isinstance(left, VersionInfo): + version_info = _get_tuple_ints(right) + if version_info is not None: + bool_result = compiled.access.COMPARISON_OPERATORS[operator]( + evaluator.environment.version_info, + tuple(version_info) + ) + return ContextSet([_bool_to_context(evaluator, bool_result)]) + + return ContextSet([_bool_to_context(evaluator, True), _bool_to_context(evaluator, False)]) + elif str_operator == 'in': + return NO_CONTEXTS + + def check(obj): + """Checks if a Jedi object is either a float or an int.""" + return isinstance(obj, TreeInstance) and \ + obj.name.string_name in ('int', 'float') + + # Static analysis, one is a number, the other one is not. + if str_operator in ('+', '-') and l_is_num != r_is_num \ + and not (check(left) or check(right)): + message = "TypeError: unsupported operand type(s) for +: %s and %s" + analysis.add(context, 'type-error-operation', operator, + message % (left, right)) + + result = ContextSet([left, right]) + debug.dbg('Used operator %s resulting in %s', operator, result) + return result + + +def _remove_statements(evaluator, context, stmt, name): + """ + This is the part where statements are being stripped. + + Due to lazy evaluation, statements like a = func; b = a; b() have to be + evaluated. + """ + pep0484_contexts = \ + annotation.find_type_from_comment_hint_assign(context, stmt, name) + if pep0484_contexts: + return pep0484_contexts + + return eval_expr_stmt(context, stmt, seek_name=name) + + +@plugin_manager.decorate() +def tree_name_to_contexts(evaluator, context, tree_name): + context_set = NO_CONTEXTS + module_node = context.get_root_context().tree_node + # First check for annotations, like: `foo: int = 3` + if module_node is not None: + names = module_node.get_used_names().get(tree_name.value, []) + for name in names: + expr_stmt = name.parent + + if expr_stmt.type == "expr_stmt" and expr_stmt.children[1].type == "annassign": + correct_scope = parser_utils.get_parent_scope(name) == context.tree_node + if correct_scope: + context_set |= annotation.eval_annotation( + context, expr_stmt.children[1].children[1] + ).execute_annotation() + if context_set: + return context_set + + types = [] + node = tree_name.get_definition(import_name_always=True) + if node is None: + node = tree_name.parent + if node.type == 'global_stmt': + context = evaluator.create_context(context, tree_name) + finder = NameFinder(evaluator, context, context, tree_name.value) + filters = finder.get_filters(search_global=True) + # For global_stmt lookups, we only need the first possible scope, + # which means the function itself. + filters = [next(filters)] + return finder.find(filters, attribute_lookup=False) + elif node.type not in ('import_from', 'import_name'): + context = evaluator.create_context(context, tree_name) + return eval_atom(context, tree_name) + + typ = node.type + if typ == 'for_stmt': + types = annotation.find_type_from_comment_hint_for(context, node, tree_name) + if types: + return types + if typ == 'with_stmt': + types = annotation.find_type_from_comment_hint_with(context, node, tree_name) + if types: + return types + + if typ in ('for_stmt', 'comp_for', 'sync_comp_for'): + try: + types = context.predefined_names[node][tree_name.value] + except KeyError: + cn = ContextualizedNode(context, node.children[3]) + for_types = iterate_contexts( + cn.infer(), + contextualized_node=cn, + is_async=node.parent.type == 'async_stmt', + ) + c_node = ContextualizedName(context, tree_name) + types = check_tuple_assignments(evaluator, c_node, for_types) + elif typ == 'expr_stmt': + types = _remove_statements(evaluator, context, node, tree_name) + elif typ == 'with_stmt': + context_managers = context.eval_node(node.get_test_node_from_name(tree_name)) + enter_methods = context_managers.py__getattribute__(u'__enter__') + return enter_methods.execute_evaluated() + elif typ in ('import_from', 'import_name'): + types = imports.infer_import(context, tree_name) + elif typ in ('funcdef', 'classdef'): + types = _apply_decorators(context, node) + elif typ == 'try_stmt': + # TODO an exception can also be a tuple. Check for those. + # TODO check for types that are not classes and add it to + # the static analysis report. + exceptions = context.eval_node(tree_name.get_previous_sibling().get_previous_sibling()) + types = exceptions.execute_evaluated() + elif node.type == 'param': + types = NO_CONTEXTS + else: + raise ValueError("Should not happen. type: %s" % typ) + return types + + +# We don't want to have functions/classes that are created by the same +# tree_node. +@evaluator_method_cache() +def _apply_decorators(context, node): + """ + Returns the function, that should to be executed in the end. + This is also the places where the decorators are processed. + """ + if node.type == 'classdef': + decoratee_context = ClassContext( + context.evaluator, + parent_context=context, + tree_node=node + ) + else: + decoratee_context = FunctionContext.from_context(context, node) + initial = values = ContextSet([decoratee_context]) + for dec in reversed(node.get_decorators()): + debug.dbg('decorator: %s %s', dec, values, color="MAGENTA") + with debug.increase_indent_cm(): + dec_values = context.eval_node(dec.children[1]) + trailer_nodes = dec.children[2:-1] + if trailer_nodes: + # Create a trailer and evaluate it. + trailer = tree.PythonNode('trailer', trailer_nodes) + trailer.parent = dec + dec_values = eval_trailer(context, dec_values, trailer) + + if not len(dec_values): + code = dec.get_code(include_prefix=False) + # For the short future, we don't want to hear about the runtime + # decorator in typing that was intentionally omitted. This is not + # "correct", but helps with debugging. + if code != '@runtime\n': + debug.warning('decorator not found: %s on %s', dec, node) + return initial + + values = dec_values.execute(arguments.ValuesArguments([values])) + if not len(values): + debug.warning('not possible to resolve wrappers found %s', node) + return initial + + debug.dbg('decorator end %s', values, color="MAGENTA") + if values != initial: + return ContextSet([Decoratee(c, decoratee_context) for c in values]) + return values + + +def check_tuple_assignments(evaluator, contextualized_name, context_set): + """ + Checks if tuples are assigned. + """ + lazy_context = None + for index, node in contextualized_name.assignment_indexes(): + cn = ContextualizedNode(contextualized_name.context, node) + iterated = context_set.iterate(cn) + if isinstance(index, slice): + # For no star unpacking is not possible. + return NO_CONTEXTS + for _ in range(index + 1): + try: + lazy_context = next(iterated) + except StopIteration: + # We could do this with the default param in next. But this + # would allow this loop to run for a very long time if the + # index number is high. Therefore break if the loop is + # finished. + return NO_CONTEXTS + context_set = lazy_context.infer() + return context_set + + +def eval_subscript_list(evaluator, context, index): + """ + Handles slices in subscript nodes. + """ + if index == ':': + # Like array[:] + return ContextSet([iterable.Slice(context, None, None, None)]) + + elif index.type == 'subscript' and not index.children[0] == '.': + # subscript basically implies a slice operation, except for Python 2's + # Ellipsis. + # e.g. array[:3] + result = [] + for el in index.children: + if el == ':': + if not result: + result.append(None) + elif el.type == 'sliceop': + if len(el.children) == 2: + result.append(el.children[1]) + else: + result.append(el) + result += [None] * (3 - len(result)) + + return ContextSet([iterable.Slice(context, *result)]) + elif index.type == 'subscriptlist': + return ContextSet([iterable.SequenceLiteralContext(evaluator, context, index)]) + + # No slices + return context.eval_node(index) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/sys_path.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/sys_path.py new file mode 100644 index 0000000..8dea434 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/sys_path.py @@ -0,0 +1,261 @@ +import os + +from jedi._compatibility import unicode, force_unicode, all_suffixes +from jedi.evaluate.cache import evaluator_method_cache +from jedi.evaluate.base_context import ContextualizedNode +from jedi.evaluate.helpers import is_string +from jedi.common.utils import traverse_parents +from jedi.parser_utils import get_cached_code_lines +from jedi.file_io import FileIO +from jedi import settings +from jedi import debug + + +def _abs_path(module_context, path): + if os.path.isabs(path): + return path + + module_path = module_context.py__file__() + if module_path is None: + # In this case we have no idea where we actually are in the file + # system. + return None + + base_dir = os.path.dirname(module_path) + path = force_unicode(path) + return os.path.abspath(os.path.join(base_dir, path)) + + +def _paths_from_assignment(module_context, expr_stmt): + """ + Extracts the assigned strings from an assignment that looks as follows:: + + sys.path[0:0] = ['module/path', 'another/module/path'] + + This function is in general pretty tolerant (and therefore 'buggy'). + However, it's not a big issue usually to add more paths to Jedi's sys_path, + because it will only affect Jedi in very random situations and by adding + more paths than necessary, it usually benefits the general user. + """ + for assignee, operator in zip(expr_stmt.children[::2], expr_stmt.children[1::2]): + try: + assert operator in ['=', '+='] + assert assignee.type in ('power', 'atom_expr') and \ + len(assignee.children) > 1 + c = assignee.children + assert c[0].type == 'name' and c[0].value == 'sys' + trailer = c[1] + assert trailer.children[0] == '.' and trailer.children[1].value == 'path' + # TODO Essentially we're not checking details on sys.path + # manipulation. Both assigment of the sys.path and changing/adding + # parts of the sys.path are the same: They get added to the end of + # the current sys.path. + """ + execution = c[2] + assert execution.children[0] == '[' + subscript = execution.children[1] + assert subscript.type == 'subscript' + assert ':' in subscript.children + """ + except AssertionError: + continue + + cn = ContextualizedNode(module_context.create_context(expr_stmt), expr_stmt) + for lazy_context in cn.infer().iterate(cn): + for context in lazy_context.infer(): + if is_string(context): + abs_path = _abs_path(module_context, context.get_safe_value()) + if abs_path is not None: + yield abs_path + + +def _paths_from_list_modifications(module_context, trailer1, trailer2): + """ extract the path from either "sys.path.append" or "sys.path.insert" """ + # Guarantee that both are trailers, the first one a name and the second one + # a function execution with at least one param. + if not (trailer1.type == 'trailer' and trailer1.children[0] == '.' + and trailer2.type == 'trailer' and trailer2.children[0] == '(' + and len(trailer2.children) == 3): + return + + name = trailer1.children[1].value + if name not in ['insert', 'append']: + return + arg = trailer2.children[1] + if name == 'insert' and len(arg.children) in (3, 4): # Possible trailing comma. + arg = arg.children[2] + + for context in module_context.create_context(arg).eval_node(arg): + if is_string(context): + abs_path = _abs_path(module_context, context.get_safe_value()) + if abs_path is not None: + yield abs_path + + +@evaluator_method_cache(default=[]) +def check_sys_path_modifications(module_context): + """ + Detect sys.path modifications within module. + """ + def get_sys_path_powers(names): + for name in names: + power = name.parent.parent + if power is not None and power.type in ('power', 'atom_expr'): + c = power.children + if c[0].type == 'name' and c[0].value == 'sys' \ + and c[1].type == 'trailer': + n = c[1].children[1] + if n.type == 'name' and n.value == 'path': + yield name, power + + if module_context.tree_node is None: + return [] + + added = [] + try: + possible_names = module_context.tree_node.get_used_names()['path'] + except KeyError: + pass + else: + for name, power in get_sys_path_powers(possible_names): + expr_stmt = power.parent + if len(power.children) >= 4: + added.extend( + _paths_from_list_modifications( + module_context, *power.children[2:4] + ) + ) + elif expr_stmt is not None and expr_stmt.type == 'expr_stmt': + added.extend(_paths_from_assignment(module_context, expr_stmt)) + return added + + +def discover_buildout_paths(evaluator, script_path): + buildout_script_paths = set() + + for buildout_script_path in _get_buildout_script_paths(script_path): + for path in _get_paths_from_buildout_script(evaluator, buildout_script_path): + buildout_script_paths.add(path) + + return buildout_script_paths + + +def _get_paths_from_buildout_script(evaluator, buildout_script_path): + file_io = FileIO(buildout_script_path) + try: + module_node = evaluator.parse( + file_io=file_io, + cache=True, + cache_path=settings.cache_directory + ) + except IOError: + debug.warning('Error trying to read buildout_script: %s', buildout_script_path) + return + + from jedi.evaluate.context import ModuleContext + module = ModuleContext( + evaluator, module_node, file_io, + string_names=None, + code_lines=get_cached_code_lines(evaluator.grammar, buildout_script_path), + ) + for path in check_sys_path_modifications(module): + yield path + + +def _get_parent_dir_with_file(path, filename): + for parent in traverse_parents(path): + if os.path.isfile(os.path.join(parent, filename)): + return parent + return None + + +def _get_buildout_script_paths(search_path): + """ + if there is a 'buildout.cfg' file in one of the parent directories of the + given module it will return a list of all files in the buildout bin + directory that look like python files. + + :param search_path: absolute path to the module. + :type search_path: str + """ + project_root = _get_parent_dir_with_file(search_path, 'buildout.cfg') + if not project_root: + return + bin_path = os.path.join(project_root, 'bin') + if not os.path.exists(bin_path): + return + + for filename in os.listdir(bin_path): + try: + filepath = os.path.join(bin_path, filename) + with open(filepath, 'r') as f: + firstline = f.readline() + if firstline.startswith('#!') and 'python' in firstline: + yield filepath + except (UnicodeDecodeError, IOError) as e: + # Probably a binary file; permission error or race cond. because + # file got deleted. Ignore it. + debug.warning(unicode(e)) + continue + + +def remove_python_path_suffix(path): + for suffix in all_suffixes(): + if path.endswith(suffix): + path = path[:-len(suffix)] + break + return path + + +def transform_path_to_dotted(sys_path, module_path): + """ + Returns the dotted path inside a sys.path as a list of names. e.g. + + >>> from os.path import abspath + >>> transform_path_to_dotted([abspath("/foo")], abspath('/foo/bar/baz.py')) + (('bar', 'baz'), False) + + Returns (None, False) if the path doesn't really resolve to anything. + The second return part is if it is a package. + """ + # First remove the suffix. + module_path = remove_python_path_suffix(module_path) + + # Once the suffix was removed we are using the files as we know them. This + # means that if someone uses an ending like .vim for a Python file, .vim + # will be part of the returned dotted part. + + is_package = module_path.endswith(os.path.sep + '__init__') + if is_package: + # -1 to remove the separator + module_path = module_path[:-len('__init__') - 1] + + def iter_potential_solutions(): + for p in sys_path: + if module_path.startswith(p): + # Strip the trailing slash/backslash + rest = module_path[len(p):] + # On Windows a path can also use a slash. + if rest.startswith(os.path.sep) or rest.startswith('/'): + # Remove a slash in cases it's still there. + rest = rest[1:] + + if rest: + split = rest.split(os.path.sep) + if not all(split): + # This means that part of the file path was empty, this + # is very strange and is probably a file that is called + # `.py`. + return + yield tuple(split) + + potential_solutions = tuple(iter_potential_solutions()) + if not potential_solutions: + return None, False + # Try to find the shortest path, this makes more sense usually, because the + # user usually has venvs somewhere. This means that a path like + # .tox/py37/lib/python3.7/os.py can be normal for a file. However in that + # case we definitely want to return ['os'] as a path and not a crazy + # ['.tox', 'py37', 'lib', 'python3.7', 'os']. Keep in mind that this is a + # heuristic and there's now ay to "always" do it right. + return sorted(potential_solutions, key=lambda p: len(p))[0], is_package diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/usages.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/usages.py new file mode 100644 index 0000000..9c8d265 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/usages.py @@ -0,0 +1,61 @@ +from jedi.evaluate import imports +from jedi.evaluate.names import TreeNameDefinition + + +def _resolve_names(definition_names, avoid_names=()): + for name in definition_names: + if name in avoid_names: + # Avoiding recursions here, because goto on a module name lands + # on the same module. + continue + + if not isinstance(name, imports.SubModuleName): + # SubModuleNames are not actually existing names but created + # names when importing something like `import foo.bar.baz`. + yield name + + if name.api_type == 'module': + for name in _resolve_names(name.goto(), definition_names): + yield name + + +def _dictionarize(names): + return dict( + (n if n.tree_name is None else n.tree_name, n) + for n in names + ) + + +def _find_names(module_context, tree_name): + context = module_context.create_context(tree_name) + name = TreeNameDefinition(context, tree_name) + found_names = set(name.goto()) + found_names.add(name) + return _dictionarize(_resolve_names(found_names)) + + +def usages(module_context, tree_name): + search_name = tree_name.value + found_names = _find_names(module_context, tree_name) + modules = set(d.get_root_context() for d in found_names.values()) + modules = set(m for m in modules if m.is_module() and not m.is_compiled()) + + non_matching_usage_maps = {} + for m in imports.get_modules_containing_name(module_context.evaluator, modules, search_name): + for name_leaf in m.tree_node.get_used_names().get(search_name, []): + new = _find_names(m, name_leaf) + if any(tree_name in found_names for tree_name in new): + found_names.update(new) + for tree_name in new: + for dct in non_matching_usage_maps.get(tree_name, []): + # A usage that was previously searched for matches with + # a now found name. Merge. + found_names.update(dct) + try: + del non_matching_usage_maps[tree_name] + except KeyError: + pass + else: + for name in new: + non_matching_usage_maps.setdefault(name, []).append(new) + return found_names.values() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/utils.py new file mode 100644 index 0000000..990a995 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/evaluate/utils.py @@ -0,0 +1,119 @@ +""" A universal module with functions / classes without dependencies. """ +import sys +import contextlib +import functools +import re +import os + +from jedi._compatibility import reraise + + +_sep = os.path.sep +if os.path.altsep is not None: + _sep += os.path.altsep +_path_re = re.compile(r'(?:\.[^{0}]+|[{0}]__init__\.py)$'.format(re.escape(_sep))) +del _sep + + +def to_list(func): + def wrapper(*args, **kwargs): + return list(func(*args, **kwargs)) + return wrapper + + +def unite(iterable): + """Turns a two dimensional array into a one dimensional.""" + return set(typ for types in iterable for typ in types) + + +class UncaughtAttributeError(Exception): + """ + Important, because `__getattr__` and `hasattr` catch AttributeErrors + implicitly. This is really evil (mainly because of `__getattr__`). + `hasattr` in Python 2 is even more evil, because it catches ALL exceptions. + Therefore this class originally had to be derived from `BaseException` + instead of `Exception`. But because I removed relevant `hasattr` from + the code base, we can now switch back to `Exception`. + + :param base: return values of sys.exc_info(). + """ + + +def safe_property(func): + return property(reraise_uncaught(func)) + + +def reraise_uncaught(func): + """ + Re-throw uncaught `AttributeError`. + + Usage: Put ``@rethrow_uncaught`` in front of the function + which does **not** suppose to raise `AttributeError`. + + AttributeError is easily get caught by `hasattr` and another + ``except AttributeError`` clause. This becomes problem when you use + a lot of "dynamic" attributes (e.g., using ``@property``) because you + can't distinguish if the property does not exist for real or some code + inside of the "dynamic" attribute through that error. In a well + written code, such error should not exist but getting there is very + difficult. This decorator is to help us getting there by changing + `AttributeError` to `UncaughtAttributeError` to avoid unexpected catch. + This helps us noticing bugs earlier and facilitates debugging. + + .. note:: Treating StopIteration here is easy. + Add that feature when needed. + """ + @functools.wraps(func) + def wrapper(*args, **kwds): + try: + return func(*args, **kwds) + except AttributeError: + exc_info = sys.exc_info() + reraise(UncaughtAttributeError(exc_info[1]), exc_info[2]) + return wrapper + + +class PushBackIterator(object): + def __init__(self, iterator): + self.pushes = [] + self.iterator = iterator + self.current = None + + def push_back(self, value): + self.pushes.append(value) + + def __iter__(self): + return self + + def next(self): + """ Python 2 Compatibility """ + return self.__next__() + + def __next__(self): + if self.pushes: + self.current = self.pushes.pop() + else: + self.current = next(self.iterator) + return self.current + + +@contextlib.contextmanager +def ignored(*exceptions): + """ + Context manager that ignores all of the specified exceptions. This will + be in the standard library starting with Python 3.4. + """ + try: + yield + except exceptions: + pass + + +def indent_block(text, indention=' '): + """This function indents a text block with a default of four spaces.""" + temp = '' + while text and text[-1] == '\n': + temp += text[-1] + text = text[:-1] + lines = text.split('\n') + return '\n'.join(map(lambda s: indention + s, lines)) + temp diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/file_io.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/file_io.py new file mode 100644 index 0000000..37d958e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/file_io.py @@ -0,0 +1,48 @@ +import os + +from parso import file_io + + +class AbstractFolderIO(object): + def __init__(self, path): + self.path = path + + def list(self): + raise NotImplementedError + + def get_file_io(self, name): + raise NotImplementedError + + +class FolderIO(AbstractFolderIO): + def list(self): + return os.listdir(self.path) + + def get_file_io(self, name): + return FileIO(os.path.join(self.path, name)) + + +class FileIOFolderMixin(object): + def get_parent_folder(self): + return FolderIO(os.path.dirname(self.path)) + + +class ZipFileIO(file_io.KnownContentFileIO, FileIOFolderMixin): + """For .zip and .egg archives""" + def __init__(self, path, code, zip_path): + super(ZipFileIO, self).__init__(path, code) + self._zip_path = zip_path + + def get_last_modified(self): + try: + return os.path.getmtime(self._zip_path) + except OSError: # Python 3 would probably only need FileNotFoundError + return None + + +class FileIO(file_io.FileIO, FileIOFolderMixin): + pass + + +class KnownContentFileIO(file_io.KnownContentFileIO, FileIOFolderMixin): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/parser_utils.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/parser_utils.py new file mode 100644 index 0000000..99d7a96 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/parser_utils.py @@ -0,0 +1,297 @@ +import re +import textwrap +from inspect import cleandoc +from weakref import WeakKeyDictionary + +from parso.python import tree +from parso.cache import parser_cache +from parso import split_lines + +from jedi._compatibility import literal_eval, force_unicode + +_EXECUTE_NODES = {'funcdef', 'classdef', 'import_from', 'import_name', 'test', + 'or_test', 'and_test', 'not_test', 'comparison', 'expr', + 'xor_expr', 'and_expr', 'shift_expr', 'arith_expr', + 'atom_expr', 'term', 'factor', 'power', 'atom'} + +_FLOW_KEYWORDS = ( + 'try', 'except', 'finally', 'else', 'if', 'elif', 'with', 'for', 'while' +) + + +def get_executable_nodes(node, last_added=False): + """ + For static analysis. + """ + result = [] + typ = node.type + if typ == 'name': + next_leaf = node.get_next_leaf() + if last_added is False and node.parent.type != 'param' and next_leaf != '=': + result.append(node) + elif typ == 'expr_stmt': + # I think evaluating the statement (and possibly returned arrays), + # should be enough for static analysis. + result.append(node) + for child in node.children: + result += get_executable_nodes(child, last_added=True) + elif typ == 'decorator': + # decorator + if node.children[-2] == ')': + node = node.children[-3] + if node != '(': + result += get_executable_nodes(node) + else: + try: + children = node.children + except AttributeError: + pass + else: + if node.type in _EXECUTE_NODES and not last_added: + result.append(node) + + for child in children: + result += get_executable_nodes(child, last_added) + + return result + + +def get_sync_comp_fors(comp_for): + yield comp_for + last = comp_for.children[-1] + while True: + if last.type == 'comp_for': + yield last.children[1] # Ignore the async. + elif last.type == 'sync_comp_for': + yield last + elif not last.type == 'comp_if': + break + last = last.children[-1] + + +def for_stmt_defines_one_name(for_stmt): + """ + Returns True if only one name is returned: ``for x in y``. + Returns False if the for loop is more complicated: ``for x, z in y``. + + :returns: bool + """ + return for_stmt.children[1].type == 'name' + + +def get_flow_branch_keyword(flow_node, node): + start_pos = node.start_pos + if not (flow_node.start_pos < start_pos <= flow_node.end_pos): + raise ValueError('The node is not part of the flow.') + + keyword = None + for i, child in enumerate(flow_node.children): + if start_pos < child.start_pos: + return keyword + first_leaf = child.get_first_leaf() + if first_leaf in _FLOW_KEYWORDS: + keyword = first_leaf + return 0 + + +def get_statement_of_position(node, pos): + for c in node.children: + if c.start_pos <= pos <= c.end_pos: + if c.type not in ('decorated', 'simple_stmt', 'suite', + 'async_stmt', 'async_funcdef') \ + and not isinstance(c, (tree.Flow, tree.ClassOrFunc)): + return c + else: + try: + return get_statement_of_position(c, pos) + except AttributeError: + pass # Must be a non-scope + return None + + +def clean_scope_docstring(scope_node): + """ Returns a cleaned version of the docstring token. """ + node = scope_node.get_doc_node() + if node is not None: + # TODO We have to check next leaves until there are no new + # leaves anymore that might be part of the docstring. A + # docstring can also look like this: ``'foo' 'bar' + # Returns a literal cleaned version of the ``Token``. + cleaned = cleandoc(safe_literal_eval(node.value)) + # Since we want the docstr output to be always unicode, just + # force it. + return force_unicode(cleaned) + return '' + + +def safe_literal_eval(value): + first_two = value[:2].lower() + if first_two[0] == 'f' or first_two in ('fr', 'rf'): + # literal_eval is not able to resovle f literals. We have to do that + # manually, but that's right now not implemented. + return '' + + try: + return literal_eval(value) + except SyntaxError: + # It's possible to create syntax errors with literals like rb'' in + # Python 2. This should not be possible and in that case just return an + # empty string. + # Before Python 3.3 there was a more strict definition in which order + # you could define literals. + return '' + + +def get_call_signature(funcdef, width=72, call_string=None, + omit_first_param=False, omit_return_annotation=False): + """ + Generate call signature of this function. + + :param width: Fold lines if a line is longer than this value. + :type width: int + :arg func_name: Override function name when given. + :type func_name: str + + :rtype: str + """ + # Lambdas have no name. + if call_string is None: + if funcdef.type == 'lambdef': + call_string = '' + else: + call_string = funcdef.name.value + params = funcdef.get_params() + if omit_first_param: + params = params[1:] + p = '(' + ''.join(param.get_code() for param in params).strip() + ')' + # TODO this is pretty bad, we should probably just normalize. + p = re.sub(r'\s+', ' ', p) + if funcdef.annotation and not omit_return_annotation: + rtype = " ->" + funcdef.annotation.get_code() + else: + rtype = "" + code = call_string + p + rtype + + return '\n'.join(textwrap.wrap(code, width)) + + +def move(node, line_offset): + """ + Move the `Node` start_pos. + """ + try: + children = node.children + except AttributeError: + node.line += line_offset + else: + for c in children: + move(c, line_offset) + + +def get_following_comment_same_line(node): + """ + returns (as string) any comment that appears on the same line, + after the node, including the # + """ + try: + if node.type == 'for_stmt': + whitespace = node.children[5].get_first_leaf().prefix + elif node.type == 'with_stmt': + whitespace = node.children[3].get_first_leaf().prefix + elif node.type == 'funcdef': + # actually on the next line + whitespace = node.children[4].get_first_leaf().get_next_leaf().prefix + else: + whitespace = node.get_last_leaf().get_next_leaf().prefix + except AttributeError: + return None + except ValueError: + # TODO in some particular cases, the tree doesn't seem to be linked + # correctly + return None + if "#" not in whitespace: + return None + comment = whitespace[whitespace.index("#"):] + if "\r" in comment: + comment = comment[:comment.index("\r")] + if "\n" in comment: + comment = comment[:comment.index("\n")] + return comment + + +def is_scope(node): + t = node.type + if t == 'comp_for': + # Starting with Python 3.8, async is outside of the statement. + return node.children[1].type != 'sync_comp_for' + + return t in ('file_input', 'classdef', 'funcdef', 'lambdef', 'sync_comp_for') + + +def _get_parent_scope_cache(func): + cache = WeakKeyDictionary() + + def wrapper(used_names, node, include_flows=False): + try: + for_module = cache[used_names] + except KeyError: + for_module = cache[used_names] = {} + + try: + return for_module[node] + except KeyError: + result = for_module[node] = func(node, include_flows) + return result + return wrapper + + +def get_parent_scope(node, include_flows=False): + """ + Returns the underlying scope. + """ + scope = node.parent + if scope is None: + return None # It's a module already. + + while True: + if is_scope(scope) or include_flows and isinstance(scope, tree.Flow): + if scope.type in ('classdef', 'funcdef', 'lambdef'): + index = scope.children.index(':') + if scope.children[index].start_pos >= node.start_pos: + if node.parent.type == 'param' and node.parent.name == node: + pass + elif node.parent.type == 'tfpdef' and node.parent.children[0] == node: + pass + else: + scope = scope.parent + continue + return scope + scope = scope.parent + return scope + + +get_cached_parent_scope = _get_parent_scope_cache(get_parent_scope) + + +def get_cached_code_lines(grammar, path): + """ + Basically access the cached code lines in parso. This is not the nicest way + to do this, but we avoid splitting all the lines again. + """ + return parser_cache[grammar._hashed][path].lines + + +def cut_value_at_position(leaf, position): + """ + Cuts of the value of the leaf at position + """ + lines = split_lines(leaf.value, keepends=True)[:position[0] - leaf.line + 1] + column = position[1] + if leaf.line == position[0]: + column -= leaf.column + lines[-1] = lines[-1][:column] + return ''.join(lines) + + +def get_string_quote(leaf): + return re.match('\w*("""|\'{3}|"|\')', leaf.value).group(1) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/__init__.py new file mode 100644 index 0000000..df106cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/__init__.py @@ -0,0 +1,47 @@ +from functools import wraps + + +class _PluginManager(object): + def __init__(self): + self._registered_plugins = [] + self._cached_base_callbacks = {} + self._built_functions = {} + + def register(self, *plugins): + """ + Makes it possible to register your plugin. + """ + self._registered_plugins.extend(plugins) + self._build_functions() + + def decorate(self): + def decorator(callback): + @wraps(callback) + def wrapper(*args, **kwargs): + return built_functions[name](*args, **kwargs) + + name = callback.__name__ + + assert name not in self._built_functions + built_functions = self._built_functions + built_functions[name] = callback + self._cached_base_callbacks[name] = callback + + return wrapper + + return decorator + + def _build_functions(self): + for name, callback in self._cached_base_callbacks.items(): + for plugin in reversed(self._registered_plugins): + # Need to reverse so the first plugin is run first. + try: + func = getattr(plugin, name) + except AttributeError: + pass + else: + callback = func(callback) + self._built_functions[name] = callback + + +plugin_manager = _PluginManager() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/flask.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/flask.py new file mode 100644 index 0000000..7cbb106 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/flask.py @@ -0,0 +1,21 @@ +def import_module(callback): + """ + Handle "magic" Flask extension imports: + ``flask.ext.foo`` is really ``flask_foo`` or ``flaskext.foo``. + """ + def wrapper(evaluator, import_names, module_context, *args, **kwargs): + if len(import_names) == 3 and import_names[:2] == ('flask', 'ext'): + # New style. + ipath = (u'flask_' + import_names[2]), + context_set = callback(evaluator, ipath, None, *args, **kwargs) + if context_set: + return context_set + context_set = callback(evaluator, (u'flaskext',), None, *args, **kwargs) + return callback( + evaluator, + (u'flaskext', import_names[2]), + next(iter(context_set)), + *args, **kwargs + ) + return callback(evaluator, import_names, module_context, *args, **kwargs) + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/registry.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/registry.py new file mode 100644 index 0000000..2391324 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/registry.py @@ -0,0 +1,10 @@ +""" +This is not a plugin, this is just the place were plugins are registered. +""" + +from jedi.plugins import stdlib +from jedi.plugins import flask +from jedi.plugins import plugin_manager + + +plugin_manager.register(stdlib, flask) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/stdlib.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/stdlib.py new file mode 100644 index 0000000..2f2608f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/plugins/stdlib.py @@ -0,0 +1,835 @@ +""" +Implementations of standard library functions, because it's not possible to +understand them with Jedi. + +To add a new implementation, create a function and add it to the +``_implemented`` dict at the bottom of this module. + +Note that this module exists only to implement very specific functionality in +the standard library. The usual way to understand the standard library is the +compiled module that returns the types for C-builtins. +""" +import parso +import os + +from jedi._compatibility import force_unicode, Parameter +from jedi import debug +from jedi.evaluate.utils import safe_property +from jedi.evaluate.helpers import get_str_or_none +from jedi.evaluate.arguments import ValuesArguments, \ + repack_with_argument_clinic, AbstractArguments, TreeArgumentsWrapper +from jedi.evaluate import analysis +from jedi.evaluate import compiled +from jedi.evaluate.context.instance import BoundMethod, InstanceArguments +from jedi.evaluate.base_context import ContextualizedNode, \ + NO_CONTEXTS, ContextSet, ContextWrapper, LazyContextWrapper +from jedi.evaluate.context import ClassContext, ModuleContext, \ + FunctionExecutionContext +from jedi.evaluate.context.klass import ClassMixin +from jedi.evaluate.context.function import FunctionMixin +from jedi.evaluate.context import iterable +from jedi.evaluate.lazy_context import LazyTreeContext, LazyKnownContext, \ + LazyKnownContexts +from jedi.evaluate.names import ContextName, BaseTreeParamName +from jedi.evaluate.syntax_tree import is_string +from jedi.evaluate.filters import AttributeOverwrite, publish_method, \ + ParserTreeFilter, DictFilter +from jedi.evaluate.signature import AbstractSignature, SignatureWrapper + + +# Copied from Python 3.6's stdlib. +_NAMEDTUPLE_CLASS_TEMPLATE = """\ +_property = property +_tuple = tuple +from operator import itemgetter as _itemgetter +from collections import OrderedDict + +class {typename}(tuple): + '{typename}({arg_list})' + + __slots__ = () + + _fields = {field_names!r} + + def __new__(_cls, {arg_list}): + 'Create new instance of {typename}({arg_list})' + return _tuple.__new__(_cls, ({arg_list})) + + @classmethod + def _make(cls, iterable, new=tuple.__new__, len=len): + 'Make a new {typename} object from a sequence or iterable' + result = new(cls, iterable) + if len(result) != {num_fields:d}: + raise TypeError('Expected {num_fields:d} arguments, got %d' % len(result)) + return result + + def _replace(_self, **kwds): + 'Return a new {typename} object replacing specified fields with new values' + result = _self._make(map(kwds.pop, {field_names!r}, _self)) + if kwds: + raise ValueError('Got unexpected field names: %r' % list(kwds)) + return result + + def __repr__(self): + 'Return a nicely formatted representation string' + return self.__class__.__name__ + '({repr_fmt})' % self + + def _asdict(self): + 'Return a new OrderedDict which maps field names to their values.' + return OrderedDict(zip(self._fields, self)) + + def __getnewargs__(self): + 'Return self as a plain tuple. Used by copy and pickle.' + return tuple(self) + + # These methods were added by Jedi. + # __new__ doesn't really work with Jedi. So adding this to nametuples seems + # like the easiest way. + def __init__(_cls, {arg_list}): + 'A helper function for namedtuple.' + self.__iterable = ({arg_list}) + + def __iter__(self): + for i in self.__iterable: + yield i + + def __getitem__(self, y): + return self.__iterable[y] + +{field_defs} +""" + +_NAMEDTUPLE_FIELD_TEMPLATE = '''\ + {name} = _property(_itemgetter({index:d}), doc='Alias for field number {index:d}') +''' + + +def execute(callback): + def wrapper(context, arguments): + def call(): + return callback(context, arguments=arguments) + + try: + obj_name = context.name.string_name + except AttributeError: + pass + else: + if context.parent_context == context.evaluator.builtins_module: + module_name = 'builtins' + elif context.parent_context is not None and context.parent_context.is_module(): + module_name = context.parent_context.py__name__() + else: + return call() + + if isinstance(context, BoundMethod): + if module_name == 'builtins': + if context.py__name__() == '__get__': + if context.class_context.py__name__() == 'property': + return builtins_property( + context, + arguments=arguments, + callback=call, + ) + elif context.py__name__() in ('deleter', 'getter', 'setter'): + if context.class_context.py__name__() == 'property': + return ContextSet([context.instance]) + + return call() + + # for now we just support builtin functions. + try: + func = _implemented[module_name][obj_name] + except KeyError: + pass + else: + return func(context, arguments=arguments, callback=call) + return call() + + return wrapper + + +def _follow_param(evaluator, arguments, index): + try: + key, lazy_context = list(arguments.unpack())[index] + except IndexError: + return NO_CONTEXTS + else: + return lazy_context.infer() + + +def argument_clinic(string, want_obj=False, want_context=False, + want_arguments=False, want_evaluator=False, + want_callback=False): + """ + Works like Argument Clinic (PEP 436), to validate function params. + """ + + def f(func): + @repack_with_argument_clinic(string, keep_arguments_param=True, + keep_callback_param=True) + def wrapper(obj, *args, **kwargs): + arguments = kwargs.pop('arguments') + callback = kwargs.pop('callback') + assert not kwargs # Python 2... + debug.dbg('builtin start %s' % obj, color='MAGENTA') + result = NO_CONTEXTS + if want_context: + kwargs['context'] = arguments.context + if want_obj: + kwargs['obj'] = obj + if want_evaluator: + kwargs['evaluator'] = obj.evaluator + if want_arguments: + kwargs['arguments'] = arguments + if want_callback: + kwargs['callback'] = callback + result = func(*args, **kwargs) + debug.dbg('builtin end: %s', result, color='MAGENTA') + return result + + return wrapper + return f + + +@argument_clinic('obj, type, /', want_obj=True, want_arguments=True) +def builtins_property(objects, types, obj, arguments): + property_args = obj.instance.var_args.unpack() + key, lazy_context = next(property_args, (None, None)) + if key is not None or lazy_context is None: + debug.warning('property expected a first param, not %s', arguments) + return NO_CONTEXTS + + return lazy_context.infer().py__call__(arguments=ValuesArguments([objects])) + + +@argument_clinic('iterator[, default], /', want_evaluator=True) +def builtins_next(iterators, defaults, evaluator): + if evaluator.environment.version_info.major == 2: + name = 'next' + else: + name = '__next__' + + # TODO theoretically we have to check here if something is an iterator. + # That is probably done by checking if it's not a class. + return defaults | iterators.py__getattribute__(name).execute_evaluated() + + +@argument_clinic('iterator[, default], /') +def builtins_iter(iterators_or_callables, defaults): + # TODO implement this if it's a callable. + return iterators_or_callables.py__getattribute__('__iter__').execute_evaluated() + + +@argument_clinic('object, name[, default], /') +def builtins_getattr(objects, names, defaults=None): + # follow the first param + for obj in objects: + for name in names: + string = get_str_or_none(name) + if string is None: + debug.warning('getattr called without str') + continue + else: + return obj.py__getattribute__(force_unicode(string)) + return NO_CONTEXTS + + +@argument_clinic('object[, bases, dict], /') +def builtins_type(objects, bases, dicts): + if bases or dicts: + # It's a type creation... maybe someday... + return NO_CONTEXTS + else: + return objects.py__class__() + + +class SuperInstance(LazyContextWrapper): + """To be used like the object ``super`` returns.""" + def __init__(self, evaluator, instance): + self.evaluator = evaluator + self._instance = instance # Corresponds to super().__self__ + + def _get_bases(self): + return self._instance.py__class__().py__bases__() + + def _get_wrapped_context(self): + objs = self._get_bases()[0].infer().execute_evaluated() + if not objs: + # This is just a fallback and will only be used, if it's not + # possible to find a class + return self._instance + return next(iter(objs)) + + def get_filters(self, search_global=False, until_position=None, origin_scope=None): + for b in self._get_bases(): + for obj in b.infer().execute_evaluated(): + for f in obj.get_filters(): + yield f + + +@argument_clinic('[type[, obj]], /', want_context=True) +def builtins_super(types, objects, context): + if isinstance(context, FunctionExecutionContext): + if isinstance(context.var_args, InstanceArguments): + instance = context.var_args.instance + # TODO if a class is given it doesn't have to be the direct super + # class, it can be an anecestor from long ago. + return ContextSet({SuperInstance(instance.evaluator, instance)}) + + return NO_CONTEXTS + + +class ReversedObject(AttributeOverwrite): + def __init__(self, reversed_obj, iter_list): + super(ReversedObject, self).__init__(reversed_obj) + self._iter_list = iter_list + + @publish_method('__iter__') + def py__iter__(self, contextualized_node=None): + return self._iter_list + + @publish_method('next', python_version_match=2) + @publish_method('__next__', python_version_match=3) + def py__next__(self): + return ContextSet.from_sets( + lazy_context.infer() for lazy_context in self._iter_list + ) + + +@argument_clinic('sequence, /', want_obj=True, want_arguments=True) +def builtins_reversed(sequences, obj, arguments): + # While we could do without this variable (just by using sequences), we + # want static analysis to work well. Therefore we need to generated the + # values again. + key, lazy_context = next(arguments.unpack()) + cn = None + if isinstance(lazy_context, LazyTreeContext): + # TODO access private + cn = ContextualizedNode(lazy_context.context, lazy_context.data) + ordered = list(sequences.iterate(cn)) + + # Repack iterator values and then run it the normal way. This is + # necessary, because `reversed` is a function and autocompletion + # would fail in certain cases like `reversed(x).__iter__` if we + # just returned the result directly. + seq, = obj.evaluator.typing_module.py__getattribute__('Iterator').execute_evaluated() + return ContextSet([ReversedObject(seq, list(reversed(ordered)))]) + + +@argument_clinic('obj, type, /', want_arguments=True, want_evaluator=True) +def builtins_isinstance(objects, types, arguments, evaluator): + bool_results = set() + for o in objects: + cls = o.py__class__() + try: + cls.py__bases__ + except AttributeError: + # This is temporary. Everything should have a class attribute in + # Python?! Maybe we'll leave it here, because some numpy objects or + # whatever might not. + bool_results = set([True, False]) + break + + mro = list(cls.py__mro__()) + + for cls_or_tup in types: + if cls_or_tup.is_class(): + bool_results.add(cls_or_tup in mro) + elif cls_or_tup.name.string_name == 'tuple' \ + and cls_or_tup.get_root_context() == evaluator.builtins_module: + # Check for tuples. + classes = ContextSet.from_sets( + lazy_context.infer() + for lazy_context in cls_or_tup.iterate() + ) + bool_results.add(any(cls in mro for cls in classes)) + else: + _, lazy_context = list(arguments.unpack())[1] + if isinstance(lazy_context, LazyTreeContext): + node = lazy_context.data + message = 'TypeError: isinstance() arg 2 must be a ' \ + 'class, type, or tuple of classes and types, ' \ + 'not %s.' % cls_or_tup + analysis.add(lazy_context.context, 'type-error-isinstance', node, message) + + return ContextSet( + compiled.builtin_from_name(evaluator, force_unicode(str(b))) + for b in bool_results + ) + + +class StaticMethodObject(AttributeOverwrite, ContextWrapper): + def get_object(self): + return self._wrapped_context + + def py__get__(self, instance, klass): + return ContextSet([self._wrapped_context]) + + +@argument_clinic('sequence, /') +def builtins_staticmethod(functions): + return ContextSet(StaticMethodObject(f) for f in functions) + + +class ClassMethodObject(AttributeOverwrite, ContextWrapper): + def __init__(self, class_method_obj, function): + super(ClassMethodObject, self).__init__(class_method_obj) + self._function = function + + def get_object(self): + return self._wrapped_context + + def py__get__(self, obj, class_context): + return ContextSet([ + ClassMethodGet(__get__, class_context, self._function) + for __get__ in self._wrapped_context.py__getattribute__('__get__') + ]) + + +class ClassMethodGet(AttributeOverwrite, ContextWrapper): + def __init__(self, get_method, klass, function): + super(ClassMethodGet, self).__init__(get_method) + self._class = klass + self._function = function + + def get_signatures(self): + return self._function.get_signatures() + + def get_object(self): + return self._wrapped_context + + def py__call__(self, arguments): + return self._function.execute(ClassMethodArguments(self._class, arguments)) + + +class ClassMethodArguments(TreeArgumentsWrapper): + def __init__(self, klass, arguments): + super(ClassMethodArguments, self).__init__(arguments) + self._class = klass + + def unpack(self, func=None): + yield None, LazyKnownContext(self._class) + for values in self._wrapped_arguments.unpack(func): + yield values + + +@argument_clinic('sequence, /', want_obj=True, want_arguments=True) +def builtins_classmethod(functions, obj, arguments): + return ContextSet( + ClassMethodObject(class_method_object, function) + for class_method_object in obj.py__call__(arguments=arguments) + for function in functions + ) + + +def collections_namedtuple(obj, arguments, callback): + """ + Implementation of the namedtuple function. + + This has to be done by processing the namedtuple class template and + evaluating the result. + + """ + evaluator = obj.evaluator + + # Process arguments + name = u'jedi_unknown_namedtuple' + for c in _follow_param(evaluator, arguments, 0): + x = get_str_or_none(c) + if x is not None: + name = force_unicode(x) + break + + # TODO here we only use one of the types, we should use all. + param_contexts = _follow_param(evaluator, arguments, 1) + if not param_contexts: + return NO_CONTEXTS + _fields = list(param_contexts)[0] + string = get_str_or_none(_fields) + if string is not None: + fields = force_unicode(string).replace(',', ' ').split() + elif isinstance(_fields, iterable.Sequence): + fields = [ + force_unicode(get_str_or_none(v)) + for lazy_context in _fields.py__iter__() + for v in lazy_context.infer() + ] + fields = [f for f in fields if f is not None] + else: + return NO_CONTEXTS + + # Build source code + code = _NAMEDTUPLE_CLASS_TEMPLATE.format( + typename=name, + field_names=tuple(fields), + num_fields=len(fields), + arg_list=repr(tuple(fields)).replace("u'", "").replace("'", "")[1:-1], + repr_fmt='', + field_defs='\n'.join(_NAMEDTUPLE_FIELD_TEMPLATE.format(index=index, name=name) + for index, name in enumerate(fields)) + ) + + # Parse source code + module = evaluator.grammar.parse(code) + generated_class = next(module.iter_classdefs()) + parent_context = ModuleContext( + evaluator, module, + file_io=None, + string_names=None, + code_lines=parso.split_lines(code, keepends=True), + ) + + return ContextSet([ClassContext(evaluator, parent_context, generated_class)]) + + +class PartialObject(object): + def __init__(self, actual_context, arguments): + self._actual_context = actual_context + self._arguments = arguments + + def __getattr__(self, name): + return getattr(self._actual_context, name) + + def _get_function(self, unpacked_arguments): + key, lazy_context = next(unpacked_arguments, (None, None)) + if key is not None or lazy_context is None: + debug.warning("Partial should have a proper function %s", self._arguments) + return None + return lazy_context.infer() + + def get_signatures(self): + unpacked_arguments = self._arguments.unpack() + func = self._get_function(unpacked_arguments) + if func is None: + return [] + + arg_count = 0 + keys = set() + for key, _ in unpacked_arguments: + if key is None: + arg_count += 1 + else: + keys.add(key) + return [PartialSignature(s, arg_count, keys) for s in func.get_signatures()] + + def py__call__(self, arguments): + func = self._get_function(self._arguments.unpack()) + if func is None: + return NO_CONTEXTS + + return func.execute( + MergedPartialArguments(self._arguments, arguments) + ) + + +class PartialSignature(SignatureWrapper): + def __init__(self, wrapped_signature, skipped_arg_count, skipped_arg_set): + super(PartialSignature, self).__init__(wrapped_signature) + self._skipped_arg_count = skipped_arg_count + self._skipped_arg_set = skipped_arg_set + + def get_param_names(self, resolve_stars=False): + names = self._wrapped_signature.get_param_names()[self._skipped_arg_count:] + return [n for n in names if n.string_name not in self._skipped_arg_set] + + +class MergedPartialArguments(AbstractArguments): + def __init__(self, partial_arguments, call_arguments): + self._partial_arguments = partial_arguments + self._call_arguments = call_arguments + + def unpack(self, funcdef=None): + unpacked = self._partial_arguments.unpack(funcdef) + # Ignore this one, it's the function. It was checked before that it's + # there. + next(unpacked) + for key_lazy_context in unpacked: + yield key_lazy_context + for key_lazy_context in self._call_arguments.unpack(funcdef): + yield key_lazy_context + + +def functools_partial(obj, arguments, callback): + return ContextSet( + PartialObject(instance, arguments) + for instance in obj.py__call__(arguments) + ) + + +@argument_clinic('first, /') +def _return_first_param(firsts): + return firsts + + +@argument_clinic('seq') +def _random_choice(sequences): + return ContextSet.from_sets( + lazy_context.infer() + for sequence in sequences + for lazy_context in sequence.py__iter__() + ) + + +def _dataclass(obj, arguments, callback): + for c in _follow_param(obj.evaluator, arguments, 0): + if c.is_class(): + return ContextSet([DataclassWrapper(c)]) + else: + return ContextSet([obj]) + return NO_CONTEXTS + + +class DataclassWrapper(ContextWrapper, ClassMixin): + def get_signatures(self): + param_names = [] + for cls in reversed(list(self.py__mro__())): + if isinstance(cls, DataclassWrapper): + filter_ = cls.get_global_filter() + # .values ordering is not guaranteed, at least not in + # Python < 3.6, when dicts where not ordered, which is an + # implementation detail anyway. + for name in sorted(filter_.values(), key=lambda name: name.start_pos): + d = name.tree_name.get_definition() + annassign = d.children[1] + if d.type == 'expr_stmt' and annassign.type == 'annassign': + if len(annassign.children) < 4: + default = None + else: + default = annassign.children[3] + param_names.append(DataclassParamName( + parent_context=cls.parent_context, + tree_name=name.tree_name, + annotation_node=annassign.children[1], + default_node=default, + )) + return [DataclassSignature(cls, param_names)] + + +class DataclassSignature(AbstractSignature): + def __init__(self, context, param_names): + super(DataclassSignature, self).__init__(context) + self._param_names = param_names + + def get_param_names(self, resolve_stars=False): + return self._param_names + + +class DataclassParamName(BaseTreeParamName): + def __init__(self, parent_context, tree_name, annotation_node, default_node): + super(DataclassParamName, self).__init__(parent_context, tree_name) + self.annotation_node = annotation_node + self.default_node = default_node + + def get_kind(self): + return Parameter.POSITIONAL_OR_KEYWORD + + def infer(self): + if self.annotation_node is None: + return NO_CONTEXTS + else: + return self.parent_context.eval_node(self.annotation_node) + + +class ItemGetterCallable(ContextWrapper): + def __init__(self, instance, args_context_set): + super(ItemGetterCallable, self).__init__(instance) + self._args_context_set = args_context_set + + @repack_with_argument_clinic('item, /') + def py__call__(self, item_context_set): + context_set = NO_CONTEXTS + for args_context in self._args_context_set: + lazy_contexts = list(args_context.py__iter__()) + if len(lazy_contexts) == 1: + # TODO we need to add the contextualized context. + context_set |= item_context_set.get_item(lazy_contexts[0].infer(), None) + else: + context_set |= ContextSet([iterable.FakeSequence( + self._wrapped_context.evaluator, + 'list', + [ + LazyKnownContexts(item_context_set.get_item(lazy_context.infer(), None)) + for lazy_context in lazy_contexts + ], + )]) + return context_set + + +@argument_clinic('func, /') +def _functools_wraps(funcs): + return ContextSet(WrapsCallable(func) for func in funcs) + + +class WrapsCallable(ContextWrapper): + # XXX this is not the correct wrapped context, it should be a weird + # partials object, but it doesn't matter, because it's always used as a + # decorator anyway. + @repack_with_argument_clinic('func, /') + def py__call__(self, funcs): + return ContextSet({Wrapped(func, self._wrapped_context) for func in funcs}) + + +class Wrapped(ContextWrapper, FunctionMixin): + def __init__(self, func, original_function): + super(Wrapped, self).__init__(func) + self._original_function = original_function + + @property + def name(self): + return self._original_function.name + + def get_signature_functions(self): + return [self] + + +@argument_clinic('*args, /', want_obj=True, want_arguments=True) +def _operator_itemgetter(args_context_set, obj, arguments): + return ContextSet([ + ItemGetterCallable(instance, args_context_set) + for instance in obj.py__call__(arguments) + ]) + + +def _create_string_input_function(func): + @argument_clinic('string, /', want_obj=True, want_arguments=True) + def wrapper(strings, obj, arguments): + def iterate(): + for context in strings: + s = get_str_or_none(context) + if s is not None: + s = func(s) + yield compiled.create_simple_object(context.evaluator, s) + contexts = ContextSet(iterate()) + if contexts: + return contexts + return obj.py__call__(arguments) + return wrapper + + +@argument_clinic('*args, /', want_callback=True) +def _os_path_join(args_set, callback): + if len(args_set) == 1: + string = u'' + sequence, = args_set + is_first = True + for lazy_context in sequence.py__iter__(): + string_contexts = lazy_context.infer() + if len(string_contexts) != 1: + break + s = get_str_or_none(next(iter(string_contexts))) + if s is None: + break + if not is_first: + string += os.path.sep + string += force_unicode(s) + is_first = False + else: + return ContextSet([compiled.create_simple_object(sequence.evaluator, string)]) + return callback() + + +_implemented = { + 'builtins': { + 'getattr': builtins_getattr, + 'type': builtins_type, + 'super': builtins_super, + 'reversed': builtins_reversed, + 'isinstance': builtins_isinstance, + 'next': builtins_next, + 'iter': builtins_iter, + 'staticmethod': builtins_staticmethod, + 'classmethod': builtins_classmethod, + }, + 'copy': { + 'copy': _return_first_param, + 'deepcopy': _return_first_param, + }, + 'json': { + 'load': lambda obj, arguments, callback: NO_CONTEXTS, + 'loads': lambda obj, arguments, callback: NO_CONTEXTS, + }, + 'collections': { + 'namedtuple': collections_namedtuple, + }, + 'functools': { + 'partial': functools_partial, + 'wraps': _functools_wraps, + }, + '_weakref': { + 'proxy': _return_first_param, + }, + 'random': { + 'choice': _random_choice, + }, + 'operator': { + 'itemgetter': _operator_itemgetter, + }, + 'abc': { + # Not sure if this is necessary, but it's used a lot in typeshed and + # it's for now easier to just pass the function. + 'abstractmethod': _return_first_param, + }, + 'typing': { + # The _alias function just leads to some annoying type inference. + # Therefore, just make it return nothing, which leads to the stubs + # being used instead. This only matters for 3.7+. + '_alias': lambda obj, arguments, callback: NO_CONTEXTS, + }, + 'dataclasses': { + # For now this works at least better than Jedi trying to understand it. + 'dataclass': _dataclass + }, + 'os.path': { + 'dirname': _create_string_input_function(os.path.dirname), + 'abspath': _create_string_input_function(os.path.abspath), + 'relpath': _create_string_input_function(os.path.relpath), + 'join': _os_path_join, + } +} + + +def get_metaclass_filters(func): + def wrapper(cls, metaclasses): + for metaclass in metaclasses: + if metaclass.py__name__() == 'EnumMeta' \ + and metaclass.get_root_context().py__name__() == 'enum': + filter_ = ParserTreeFilter(cls.evaluator, context=cls) + return [DictFilter({ + name.string_name: EnumInstance(cls, name).name for name in filter_.values() + })] + return func(cls, metaclasses) + return wrapper + + +class EnumInstance(LazyContextWrapper): + def __init__(self, cls, name): + self.evaluator = cls.evaluator + self._cls = cls # Corresponds to super().__self__ + self._name = name + self.tree_node = self._name.tree_name + + @safe_property + def name(self): + return ContextName(self, self._name.tree_name) + + def _get_wrapped_context(self): + obj, = self._cls.execute_evaluated() + return obj + + def get_filters(self, search_global=False, position=None, origin_scope=None): + yield DictFilter(dict( + name=compiled.create_simple_object(self.evaluator, self._name.string_name).name, + value=self._name, + )) + for f in self._get_wrapped_context().get_filters(): + yield f + + +def tree_name_to_contexts(func): + def wrapper(evaluator, context, tree_name): + if tree_name.value == 'sep' and context.is_module() and context.py__name__() == 'os.path': + return ContextSet({ + compiled.create_simple_object(evaluator, os.path.sep), + }) + return func(evaluator, context, tree_name) + return wrapper diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/refactoring.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/refactoring.py new file mode 100644 index 0000000..6c1d74d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/refactoring.py @@ -0,0 +1,203 @@ +""" +THIS is not in active development, please check +https://github.com/davidhalter/jedi/issues/667 first before editing. + +Introduce some basic refactoring functions to |jedi|. This module is still in a +very early development stage and needs much testing and improvement. + +.. warning:: I won't do too much here, but if anyone wants to step in, please + do. Refactoring is none of my priorities + +It uses the |jedi| `API `_ and supports currently the +following functions (sometimes bug-prone): + +- rename +- extract variable +- inline variable +""" +import difflib + +from parso import python_bytes_to_unicode, split_lines +from jedi.evaluate import helpers + + +class Refactoring(object): + def __init__(self, change_dct): + """ + :param change_dct: dict(old_path=(new_path, old_lines, new_lines)) + """ + self.change_dct = change_dct + + def old_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[old_path] = '\n'.join(old_l) + return dct + + def new_files(self): + dct = {} + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + dct[new_path] = '\n'.join(new_l) + return dct + + def diff(self): + texts = [] + for old_path, (new_path, old_l, new_l) in self.change_dct.items(): + if old_path: + udiff = difflib.unified_diff(old_l, new_l) + else: + udiff = difflib.unified_diff(old_l, new_l, old_path, new_path) + texts.append('\n'.join(udiff)) + return '\n'.join(texts) + + +def rename(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param new_name: The new name of the script. + :param script: The source Script object. + :return: list of changed lines/changed files + """ + return Refactoring(_rename(script.usages(), new_name)) + + +def _rename(names, replace_str): + """ For both rename and inline. """ + order = sorted(names, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + + def process(path, old_lines, new_lines): + if new_lines is not None: # goto next file, save last + dct[path] = path, old_lines, new_lines + + dct = {} + current_path = object() + new_lines = old_lines = None + for name in order: + if name.in_builtin_module(): + continue + if current_path != name.module_path: + current_path = name.module_path + + process(current_path, old_lines, new_lines) + if current_path is not None: + # None means take the source that is a normal param. + with open(current_path) as f: + source = f.read() + + new_lines = split_lines(python_bytes_to_unicode(source)) + old_lines = new_lines[:] + + nr, indent = name.line, name.column + line = new_lines[nr - 1] + new_lines[nr - 1] = line[:indent] + replace_str + \ + line[indent + len(name.name):] + process(current_path, old_lines, new_lines) + return dct + + +def extract(script, new_name): + """ The `args` / `kwargs` params are the same as in `api.Script`. + :param operation: The refactoring operation to execute. + :type operation: str + :type source: str + :return: list of changed lines/changed files + """ + new_lines = split_lines(python_bytes_to_unicode(script.source)) + old_lines = new_lines[:] + + user_stmt = script._parser.user_stmt() + + # TODO care for multi-line extracts + dct = {} + if user_stmt: + pos = script._pos + line_index = pos[0] - 1 + # Be careful here. 'array_for_pos' does not exist in 'helpers'. + arr, index = helpers.array_for_pos(user_stmt, pos) + if arr is not None: + start_pos = arr[index].start_pos + end_pos = arr[index].end_pos + + # take full line if the start line is different from end line + e = end_pos[1] if end_pos[0] == start_pos[0] else None + start_line = new_lines[start_pos[0] - 1] + text = start_line[start_pos[1]:e] + for l in range(start_pos[0], end_pos[0] - 1): + text += '\n' + str(l) + if e is None: + end_line = new_lines[end_pos[0] - 1] + text += '\n' + end_line[:end_pos[1]] + + # remove code from new lines + t = text.lstrip() + del_start = start_pos[1] + len(text) - len(t) + + text = t.rstrip() + del_end = len(t) - len(text) + if e is None: + new_lines[end_pos[0] - 1] = end_line[end_pos[1] - del_end:] + e = len(start_line) + else: + e = e - del_end + start_line = start_line[:del_start] + new_name + start_line[e:] + new_lines[start_pos[0] - 1] = start_line + new_lines[start_pos[0]:end_pos[0] - 1] = [] + + # add parentheses in multi-line case + open_brackets = ['(', '[', '{'] + close_brackets = [')', ']', '}'] + if '\n' in text and not (text[0] in open_brackets and text[-1] == + close_brackets[open_brackets.index(text[0])]): + text = '(%s)' % text + + # add new line before statement + indent = user_stmt.start_pos[1] + new = "%s%s = %s" % (' ' * indent, new_name, text) + new_lines.insert(line_index, new) + dct[script.path] = script.path, old_lines, new_lines + return Refactoring(dct) + + +def inline(script): + """ + :type script: api.Script + """ + new_lines = split_lines(python_bytes_to_unicode(script.source)) + + dct = {} + + definitions = script.goto_assignments() + assert len(definitions) == 1 + stmt = definitions[0]._definition + usages = script.usages() + inlines = [r for r in usages + if not stmt.start_pos <= (r.line, r.column) <= stmt.end_pos] + inlines = sorted(inlines, key=lambda x: (x.module_path, x.line, x.column), + reverse=True) + expression_list = stmt.expression_list() + # don't allow multi-line refactorings for now. + assert stmt.start_pos[0] == stmt.end_pos[0] + index = stmt.start_pos[0] - 1 + + line = new_lines[index] + replace_str = line[expression_list[0].start_pos[1]:stmt.end_pos[1] + 1] + replace_str = replace_str.strip() + # tuples need parentheses + if expression_list and isinstance(expression_list[0], pr.Array): + arr = expression_list[0] + if replace_str[0] not in ['(', '[', '{'] and len(arr) > 1: + replace_str = '(%s)' % replace_str + + # if it's the only assignment, remove the statement + if len(stmt.get_defined_names()) == 1: + line = line[:stmt.start_pos[1]] + line[stmt.end_pos[1]:] + + dct = _rename(inlines, replace_str) + # remove the empty line + new_lines = dct[script.path][2] + if line.strip(): + new_lines[index] = line + else: + new_lines.pop(index) + + return Refactoring(dct) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/settings.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/settings.py new file mode 100644 index 0000000..7b7de1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/settings.py @@ -0,0 +1,163 @@ +""" +This module contains variables with global |jedi| settings. To change the +behavior of |jedi|, change the variables defined in :mod:`jedi.settings`. + +Plugins should expose an interface so that the user can adjust the +configuration. + + +Example usage:: + + from jedi import settings + settings.case_insensitive_completion = True + + +Completion output +~~~~~~~~~~~~~~~~~ + +.. autodata:: case_insensitive_completion +.. autodata:: add_bracket_after_function +.. autodata:: no_completion_duplicates + + +Filesystem cache +~~~~~~~~~~~~~~~~ + +.. autodata:: cache_directory +.. autodata:: use_filesystem_cache + + +Parser +~~~~~~ + +.. autodata:: fast_parser + + +Dynamic stuff +~~~~~~~~~~~~~ + +.. autodata:: dynamic_array_additions +.. autodata:: dynamic_params +.. autodata:: dynamic_params_for_other_modules +.. autodata:: additional_dynamic_modules +.. autodata:: auto_import_modules + + +Caching +~~~~~~~ + +.. autodata:: call_signatures_validity + + +""" +import os +import platform + +# ---------------- +# completion output settings +# ---------------- + +case_insensitive_completion = True +""" +The completion is by default case insensitive. +""" + +add_bracket_after_function = False +""" +Adds an opening bracket after a function, because that's normal behaviour. +Removed it again, because in VIM that is not very practical. +""" + +no_completion_duplicates = True +""" +If set, completions with the same name don't appear in the output anymore, +but are in the `same_name_completions` attribute. +""" + +# ---------------- +# Filesystem cache +# ---------------- + +use_filesystem_cache = True +""" +Use filesystem cache to save once parsed files with pickle. +""" + +if platform.system().lower() == 'windows': + _cache_directory = os.path.join(os.getenv('APPDATA') or '~', 'Jedi', + 'Jedi') +elif platform.system().lower() == 'darwin': + _cache_directory = os.path.join('~', 'Library', 'Caches', 'Jedi') +else: + _cache_directory = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', + 'jedi') +cache_directory = os.path.expanduser(_cache_directory) +""" +The path where the cache is stored. + +On Linux, this defaults to ``~/.cache/jedi/``, on OS X to +``~/Library/Caches/Jedi/`` and on Windows to ``%APPDATA%\\Jedi\\Jedi\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/jedi`` is used instead of the default one. +""" + +# ---------------- +# parser +# ---------------- + +fast_parser = True +""" +Use the fast parser. This means that reparsing is only being done if +something has been changed e.g. to a function. If this happens, only the +function is being reparsed. +""" + +# ---------------- +# dynamic stuff +# ---------------- + +dynamic_array_additions = True +""" +check for `append`, etc. on arrays: [], {}, () as well as list/set calls. +""" + +dynamic_params = True +""" +A dynamic param completion, finds the callees of the function, which define +the params of a function. +""" + +dynamic_params_for_other_modules = True +""" +Do the same for other modules. +""" + +additional_dynamic_modules = [] +""" +Additional modules in which |jedi| checks if statements are to be found. This +is practical for IDEs, that want to administrate their modules themselves. +""" + +dynamic_flow_information = True +""" +Check for `isinstance` and other information to infer a type. +""" + +auto_import_modules = [ + 'gi', # This third-party repository (GTK stuff) doesn't really work with jedi +] +""" +Modules that are not analyzed but imported, although they contain Python code. +This improves autocompletion for libraries that use ``setattr`` or +``globals()`` modifications a lot. +""" + +# ---------------- +# caching validity (time) +# ---------------- + +call_signatures_validity = 3.0 +""" +Finding function calls might be slow (0.1-0.5s). This is not acceptible for +normal writing. Therefore cache it for a short time. +""" diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.flake8 b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.flake8 new file mode 100644 index 0000000..1d582c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.flake8 @@ -0,0 +1,25 @@ +# Some PEP8 deviations are considered irrelevant to stub files: +# (error counts as of 2017-05-22) +# 17952 E704 multiple statements on one line (def) +# 12197 E301 expected 1 blank line +# 7155 E302 expected 2 blank lines +# 1463 F401 imported but unused +# 967 E701 multiple statements on one line (colon) +# 457 F811 redefinition +# 390 E305 expected 2 blank lines +# 4 E741 ambiguous variable name + +# Nice-to-haves ignored for now +# 2307 E501 line too long + +# Other ignored warnings +# W504 line break after binary operator + +[flake8] +ignore = F401, F403, F405, F811, E301, E302, E305, E501, E701, E704, E741, B303, W504 +# We are checking with Python 3 but many of the stubs are Python 2 stubs. +# A nice future improvement would be to provide separate .flake8 +# configurations for Python 2 and Python 3 files. +builtins = StandardError,apply,basestring,buffer,cmp,coerce,execfile,file,intern,long,raw_input,reduce,reload,unichr,unicode,xrange +exclude = .venv*,@*,.git +max-line-length = 130 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.travis.yml b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.travis.yml new file mode 100644 index 0000000..99a3c65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/.travis.yml @@ -0,0 +1,30 @@ +dist: xenial +language: python +python: 3.7 + +matrix: + include: + - name: "pytype" + python: 3.6 + env: + - TEST_CMD="./tests/pytype_test.py" + - INSTALL="test" + - name: "mypy" + env: + - TEST_CMD="./tests/mypy_test.py" + - INSTALL="mypy" + - name: "mypy self test" + env: TEST_CMD="./tests/mypy_selftest.py" + - name: "check file consistency" + env: TEST_CMD="./tests/check_consistent.py" + - name: "flake8" + env: + - TEST_CMD="flake8" + - INSTALL="test" + +install: + - if [[ $INSTALL == 'test' ]]; then pip install -r requirements-tests-py3.txt; fi + - if [[ $INSTALL == 'mypy' ]]; then pip install -U git+git://github.com/python/mypy git+git://github.com/python/typed_ast; fi + +script: + - $TEST_CMD diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/CONTRIBUTING.md b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/CONTRIBUTING.md new file mode 100644 index 0000000..cb2452c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/CONTRIBUTING.md @@ -0,0 +1,382 @@ +# Contributing to typeshed + +Welcome! typeshed is a community project that aims to work for a wide +range of Python users and Python codebases. If you're trying a type +checker on your Python code, your experience and what you can contribute +are important to the project's success. + + +## The contribution process at a glance + +1. Read the [README.md file](README.md). +2. Set up your environment to be able to [run all tests](README.md#running-the-tests). They should pass. +3. [Prepare your changes](#preparing-changes): + * [Contact us](#discussion) before starting significant work. + * IMPORTANT: For new libraries, [get permission from the library owner first](#adding-a-new-library). + * Create your stubs [conforming to the coding style](#stub-file-coding-style). + * Make sure your tests pass cleanly on `mypy`, `pytype`, and `flake8`. +4. [Submit your changes](#submitting-changes): + * Open a pull request + * For new libraries, [include a reference to where you got permission](#adding-a-new-library) +5. You can expect a reply within a few days: + * Diffs are merged when considered ready by the core team. + * Feel free to ping the core team if your pull request goes without + a reply for more than a few days. + +For more details, read below. + + +## Discussion + +If you've run into behavior in the type checker that suggests the type +stubs for a given library are incorrect or incomplete, +we want to hear from you! + +Our main forum for discussion is the project's [GitHub issue +tracker](https://github.com/python/typeshed/issues). This is the right +place to start a discussion of any of the above or most any other +topic concerning the project. + +For less formal discussion, try the typing chat room on +[gitter.im](https://gitter.im/python/typing). Some Mypy core developers +are almost always present; feel free to find us there and we're happy +to chat. Substantive technical discussion will be directed to the +issue tracker. + +### Code of Conduct + +Everyone participating in the typeshed community, and in particular in +our issue tracker, pull requests, and IRC channel, is expected to treat +other people with respect and more generally to follow the guidelines +articulated in the [Python Community Code of +Conduct](https://www.python.org/psf/codeofconduct/). + + +## Submitting Changes + +Even more excellent than a good bug report is a fix for a bug, or the +implementation of a much-needed stub. We'd love to have +your contributions. + +We use the usual GitHub pull-request flow, which may be familiar to +you if you've contributed to other projects on GitHub. For the +mechanics, see [Mypy's git and GitHub workflow help page](https://github.com/python/mypy/wiki/Using-Git-And-GitHub), +or [GitHub's own documentation](https://help.github.com/articles/using-pull-requests/). + +Anyone interested in type stubs may review your code. One of the core +developers will merge your pull request when they think it's ready. +For every pull request, we aim to promptly either merge it or say why +it's not yet ready; if you go a few days without a reply, please feel +free to ping the thread by adding a new comment. + +To get your pull request merged sooner, you should explain why you are +making the change. For example, you can point to a code sample that is +processed incorrectly by a type checker. It is also helpful to add +links to online documentation or to the implementation of the code +you are changing. + +Also, do not squash your commits after you have submitted a pull request, as this +erases context during review. We will squash commits when the pull request is merged. + +At present the core developers are (alphabetically): +* David Fisher (@ddfisher) +* Łukasz Langa (@ambv) +* Jukka Lehtosalo (@JukkaL) +* Ivan Levkivskyi (@ilevkivskyi) +* Matthias Kramm (@matthiaskramm) +* Greg Price (@gnprice) +* Sebastian Rittau (@srittau) +* Guido van Rossum (@gvanrossum) +* Jelle Zijlstra (@JelleZijlstra) + +NOTE: the process for preparing and submitting changes also applies to +core developers. This ensures high quality contributions and keeps +everybody on the same page. Avoid direct pushes to the repository. + + +## Preparing Changes + +### Before you begin + +If your change will be a significant amount of work to write, we highly +recommend starting by opening an issue laying out what you want to do. +That lets a conversation happen early in case other contributors disagree +with what you'd like to do or have ideas that will help you do it. + +### Adding a new library + +If you want to submit type stubs for a new library, you need to +**contact the maintainers of the original library** first to let them +know and **get their permission**. Do it by opening an issue on their +project's bug tracker. This gives them the opportunity to +consider adopting type hints directly in their codebase (which you +should prefer to external type stubs). When the project owners agree +for you to submit stubs here or you do not receive a reply within +one month, open a pull request **referencing the +issue where you asked for permission**. + +Make sure your changes pass the tests (the [README](README.md#running-the-tests) +has more information). + +### What to include + +Stubs should include the complete interface (classes, functions, +constants, etc.) of the module they cover, but it is not always +clear exactly what is part of the interface. + +The following should always be included: +- All objects listed in the module's documentation. +- All objects included in ``__all__`` (if present). + +Other objects may be included if they are being used in practice +or if they are not prefixed with an underscore. This means +that typeshed will generally accept contributions that add missing +objects, even if they are undocumented. Undocumented objects should +be marked with a comment of the form ``# undocumented``. +Example: + +```python +def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented +``` + +We accept such undocumented objects because omitting objects can confuse +users. Users who see an error like "module X has no attribute Y" will +not know whether the error appeared because their code had a bug or +because the stub is wrong. Although it may also be helpful for a type +checker to point out usage of private objects, we usually prefer false +negatives (no errors for wrong code) over false positives (type errors +for correct code). In addition, even for private objects a type checker +can be helpful in pointing out that an incorrect type was used. + +### Incomplete stubs + +We accept partial stubs, especially for larger packages. These need to +follow the following guidelines: + +* Included functions and methods must list all arguments, but the arguments + can be left unannotated. Do not use `Any` to mark unannotated arguments + or return values. +* Partial classes must include a `__getattr__()` method marked with an + `# incomplete` comment (see example below). +* Partial modules (i.e. modules that are missing some or all classes, + functions, or attributes) must include a top-level `__getattr__()` + function marked with an `# incomplete` comment (see example below). +* Partial packages (i.e. packages that are missing one or more sub-modules) + must have a `__init__.pyi` stub that is marked as incomplete (see above). + A better alternative is to create empty stubs for all sub-modules and + mark them as incomplete individually. + +Example of a partial module with a partial class `Foo` and a partially +annotated function `bar()`: + +```python +def __getattr__(name: str) -> Any: ... # incomplete + +class Foo: + def __getattr__(self, name: str) -> Any: # incomplete + x: int + y: str + +def bar(x: str, y, *, z=...): ... +``` + +### Using stubgen + +Mypy includes a tool called [stubgen](https://mypy.readthedocs.io/en/latest/stubgen.html) +that auto-generates stubs for Python and C modules using static analysis, +Sphinx docs, and runtime introspection. It can be used to get a starting +point for your stubs. Note that this generator is currently unable to +determine most argument and return types and omits them or uses ``Any`` in +their place. Fill out manually the types that you know. + +### Stub file coding style + +#### Syntax example + +The below is an excerpt from the types for the `datetime` module. + +```python +MAXYEAR: int +MINYEAR: int + +class date: + def __init__(self, year: int, month: int, day: int) -> None: ... + @classmethod + def fromtimestamp(cls, timestamp: float) -> date: ... + @classmethod + def today(cls) -> date: ... + @classmethod + def fromordinal(cls, ordinal: int) -> date: ... + @property + def year(self) -> int: ... + def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ... + def ctime(self) -> str: ... + def weekday(self) -> int: ... +``` + +#### Conventions + +Stub files are *like* Python files and you should generally expect them +to look the same. Your tools should be able to successfully treat them +as regular Python files. However, there are a few important differences +you should know about. + +Style conventions for stub files are different from PEP 8. The general +rule is that they should be as concise as possible. Specifically: +* lines can be up to 130 characters long; +* functions and methods that don't fit in one line should be split up + with one argument per line; +* all function bodies should be empty; +* prefer ``...`` over ``pass``; +* prefer ``...`` on the same line as the class/function signature; +* avoid vertical whitespace between consecutive module-level functions, + names, or methods and fields within a single class; +* use a single blank line between top-level class definitions, or none + if the classes are very small; +* do not use docstrings; +* use variable annotations instead of type comments, even for stubs + that target older versions of Python; +* for arguments with a type and a default, use spaces around the `=`. +The code formatter [black](https://github.com/python/black) will format +stubs according to this standard. + +Stub files should only contain information necessary for the type +checker, and leave out unnecessary detail: +* for arguments with a default, use `...` instead of the actual + default; +* for arguments that default to `None`, use `Optional[]` explicitly + (see below for details); +* use `float` instead of `Union[int, float]`. + +Some further tips for good type hints: +* avoid invariant collection types (`List`, `Dict`) in argument + positions, in favor of covariant types like `Mapping` or `Sequence`; +* avoid Union return types: https://github.com/python/mypy/issues/1693; +* in Python 2, whenever possible, use `unicode` if that's the only + possible type, and `Text` if it can be either `unicode` or `bytes`; +* use platform checks like `if sys.platform == 'win32'` to denote + platform-dependent APIs. + +Imports in stubs are considered private (not part of the exported API) +unless: +* they use the form ``from library import name as name`` (sic, using + explicit ``as`` even if the name stays the same); or +* they use the form ``from library import *`` which means all names + from that library are exported. + +When adding type hints, avoid using the `Any` type when possible. Reserve +the use of `Any` for when: +* the correct type cannot be expressed in the current type system; and +* to avoid Union returns (see above). + +Note that `Any` is not the correct type to use if you want to indicate +that some function can accept literally anything: in those cases use +`object` instead. + +For arguments with type and a default value of `None`, PEP 484 +prescribes that the type automatically becomes `Optional`. However we +prefer explicit over implicit in this case, and require the explicit +`Optional[]` around the type. The mypy tests enforce this (through +the use of --no-implicit-optional) and the error looks like +`Incompatible types in assignment (expression has type None, variable +has type "Blah") `. + +Stub files support forward references natively. In other words, the +order of class declarations and type aliases does not matter in +a stub file. You can also use the name of the class within its own +body. Focus on making your stubs clear to the reader. Avoid using +string literals in type annotations. + +Type variables and aliases you introduce purely for legibility reasons +should be prefixed with an underscore to make it obvious to the reader +they are not part of the stubbed API. + +NOTE: there are stubs in this repository that don't conform to the +style described above. Fixing them is a great starting point for new +contributors. + +### Stub versioning + +There are separate directories for `stdlib` and `third_party` stubs. +Within those, there are separate directories for different versions of +Python the stubs target. + +The directory name indicates the major version of Python that a stub targets +and optionally the lowest minor version, with the exception of the `2and3` +directory which applies to both Python 2 and 3. + +For example, stubs in the `3` directory will be applied to all versions of +Python 3, though stubs in the `3.6` directory will only be applied to versions +3.6 and above. However, stubs in the `2` directory will not be applied to +Python 3. + +It is preferred to use a single stub in the more generic directory that +conditionally targets specific versions when needed, as opposed +to maintaining multiple stub files within more specific directories. Similarly, +if the given library works on both Python 2 and Python 3, prefer to put your +stubs in the `2and3` directory, unless the types are so different that the stubs +become unreadable that way. + +You can use checks like `if sys.version_info >= (3, 4):` to denote new +functionality introduced in a given Python version or solve type +differences. When doing so, only use one-tuples or two-tuples. This is +because: + +* mypy doesn't support more fine-grained version checks; and more + importantly + +* the micro versions of a Python release will change over time in your + checking environment and the checker should return consistent results + regardless of the micro version used. + +Because of this, if a given functionality was introduced in, say, Python +3.4.4, your check: + +* should be expressed as `if sys.version_info >= (3, 4):` +* should NOT be expressed as `if sys.version_info >= (3, 4, 4):` +* should NOT be expressed as `if sys.version_info >= (3, 5):` + +This makes the type checker assume the functionality was also available +in 3.4.0 - 3.4.3, which while *technically* incorrect is relatively +harmless. This is a strictly better compromise than using the latter +two forms, which would generate false positive errors for correct use +under Python 3.4.4. + +Note: in its current implementation, typeshed cannot contain stubs for +multiple versions of the same third-party library. Prefer to generate +stubs for the latest version released on PyPI at the time of your +stubbing. + +### What to do when a project's documentation and implementation disagree + +Type stubs are meant to be external type annotations for a given +library. While they are useful documentation in its own merit, they +augment the project's concrete implementation, not the project's +documentation. Whenever you find them disagreeing, model the type +information after the actual implementation and file an issue on the +project's tracker to fix their documentation. + +## Issue-tracker conventions + +We aim to reply to all new issues promptly. We'll assign one or more +labels to indicate we've triaged an issue, but most typeshed issues +are relatively simple (stubs for a given module or package are +missing, incomplete or incorrect) and we won't add noise to the +tracker by labeling all of them. Please see the +[list of all labels](https://github.com/python/typeshed/issues/labels) +for a detailed description of the labels we use. + +Sometimes a PR can't make progress until some external issue is +addressed. We indicate this by editing the subject to add a ``[WIP]`` +prefix. (This should be removed before committing the issue once +unblocked!) + +### Core developer guidelines + +Core developers should follow these rules when processing pull requests: + +* Always wait for tests to pass before merging PRs. +* Use "[Squash and merge](https://github.com/blog/2141-squash-your-commits)" to merge PRs. +* Delete branches for merged PRs (by core devs pushing to the main repo). +* Make sure commit messages to master are meaningful. For example, remove irrelevant + intermediate commit messages. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/LICENSE b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/LICENSE new file mode 100644 index 0000000..e5833ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/LICENSE @@ -0,0 +1,238 @@ +The "typeshed" project is licensed under the terms of the Apache license, as +reproduced below. + += = = = = + +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += = = = = + +Parts of typeshed are licensed under different licenses (like the MIT +license), reproduced below. + += = = = = + +The MIT License + +Copyright (c) 2015 Jukka Lehtosalo and contributors + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + += = = = = + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/README.md b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/README.md new file mode 100644 index 0000000..9423259 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/README.md @@ -0,0 +1,144 @@ +# typeshed + +[![Build Status](https://travis-ci.org/python/typeshed.svg?branch=master)](https://travis-ci.org/python/typeshed) +[![Chat at https://gitter.im/python/typing](https://badges.gitter.im/python/typing.svg)](https://gitter.im/python/typing?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +## About + +Typeshed contains external type annotations for the Python standard library +and Python builtins, as well as third party packages. + +This data can e.g. be used for static analysis, type checking or type inference. + +For information on how to use `typeshed`, read below. Information for +contributors can be found in [CONTRIBUTING.md](CONTRIBUTING.md). **Please read +it before submitting pull requests.** + +Typeshed supports Python versions 2.7 and 3.4 and up. + +## Using + +If you're just using mypy (or pytype or PyCharm), as opposed to +developing it, you don't need to interact with the typeshed repo at +all: a copy of typeshed is bundled with mypy. + +When you use a checked-out clone of the mypy repo, a copy of typeshed +should be included as a submodule, using + + $ git clone --recurse-submodules https://github.com/python/mypy.git + +or + + $ git clone https://github.com/python/mypy.git + $ cd mypy + $ git submodule init + $ git submodule update + +and occasionally you will have to repeat the final command (`git +submodule update`) to pull in changes made in the upstream typeshed +repo. + +PyCharm and pytype similarly include a copy of typeshed. The one in +pytype can be updated in the same way if you are working with the +pytype repo. + +## Format + +Each Python module is represented by a `.pyi` "stub". This is a normal Python +file (i.e., it can be interpreted by Python 3), except all the methods are empty. +Python function annotations ([PEP 3107](https://www.python.org/dev/peps/pep-3107/)) +are used to describe the types the function has. + +See [PEP 484](http://www.python.org/dev/peps/pep-0484/) for the exact +syntax of the stub files and [CONTRIBUTING.md](CONTRIBUTING.md) for the +coding style used in typeshed. + +## Directory structure + +### stdlib + +This contains stubs for modules the Python standard library -- which +includes pure Python modules, dynamically loaded extension modules, +hard-linked extension modules, and the builtins. + +### third_party + +Modules that are not shipped with Python but have a type description in Python +go into `third_party`. Since these modules can behave differently for different +versions of Python, `third_party` has version subdirectories, just like +`stdlib`. + +NOTE: When you're contributing a new stub for a package that you did +not develop, please obtain consent of the package owner (this is +specified in [PEP +484](https://www.python.org/dev/peps/pep-0484/#the-typeshed-repo)). +The best way to obtain consent is to file an issue in the third-party +package's tracker and include the link to a positive response in your PR +for typeshed. + +For more information on directory structure and stub versioning, see +[the relevant section of CONTRIBUTING.md]( +https://github.com/python/typeshed/blob/master/CONTRIBUTING.md#stub-versioning). + +## Contributing + +Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting pull +requests. If you have questions related to contributing, drop by the [typing Gitter](https://gitter.im/python/typing). + +## Running the tests + +The tests are automatically run by Travis CI on every PR and push to +the repo. There are several sets of tests: `tests/mypy_test.py` +runs tests against [mypy](https://github.com/python/mypy/), while +`tests/pytype_test.py` runs tests against +[pytype](https://github.com/google/pytype/). + +Both sets of tests are shallow -- they verify that all stubs can be +imported but they don't check whether stubs match their implementation +(in the Python standard library or a third-party package). Also note +that each set of tests has a blacklist of modules that are not tested +at all. The blacklists also live in the tests directory. + +In addition, you can run `tests/mypy_selftest.py` to run mypy's own +test suite using the typeshed code in your repo. This will sometimes +catch issues with incorrectly typed stubs, but is much slower than the +other tests. + +To manually run the mypy tests, you need to have Python 3.5 or higher; +Python 3.6.1 or higher is recommended. + +Run: +``` +$ python3.6 -m venv .venv3 +$ source .venv3/bin/activate +(.venv3)$ pip3 install -r requirements-tests-py3.txt +``` +This will install mypy (you need the latest master branch from GitHub), +typed-ast, flake8, and pytype. You can then run mypy, flake8, and pytype tests +by invoking: +``` +(.venv3)$ python3 tests/mypy_test.py +... +(.venv3)$ python3 tests/mypy_selftest.py +... +(.venv3)$ flake8 +... +(.venv3)$ python3 tests/pytype_test.py +... +``` +Note that flake8 only works with Python 3.6 or higher, and that to run the +pytype tests, you will need Python 2.7 and Python 3.6 interpreters. Pytype will +find these automatically if they're in `PATH`, but otherwise you must point to +them with the `--python27-exe` and `--python36-exe` arguments, respectively. + +For mypy, if you are in the typeshed repo that is submodule of the +mypy repo (so `..` refers to the mypy repo), there's a shortcut to run +the mypy tests that avoids installing mypy: +```bash +$ PYTHONPATH=../.. python3 tests/mypy_test.py +``` +You can mypy tests to a single version by passing `-p2` or `-p3.5` e.g. +```bash +$ PYTHONPATH=../.. python3 tests/mypy_test.py -p3.5 +running mypy --python-version 3.5 --strict-optional # with 342 files +``` diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/requirements-tests-py3.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/requirements-tests-py3.txt new file mode 100644 index 0000000..5c23efe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/requirements-tests-py3.txt @@ -0,0 +1,6 @@ +git+https://github.com/python/mypy.git@master +typed-ast>=1.0.4 +flake8==3.6.0 +flake8-bugbear==18.8.0 +flake8-pyi==18.3.1 +pytype>=2019.5.15 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi new file mode 100644 index 0000000..1f9d2ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/BaseHTTPServer.pyi @@ -0,0 +1,47 @@ +# Stubs for BaseHTTPServer (Python 2.7) + +from typing import Any, BinaryIO, Mapping, Optional, Tuple, Union +import SocketServer +import mimetools + +class HTTPServer(SocketServer.TCPServer): + server_name: str + server_port: int + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + +class BaseHTTPRequestHandler: + client_address: Tuple[str, int] + server: SocketServer.BaseServer + close_connection: bool + command: str + path: str + request_version: str + headers: mimetools.Message + rfile: BinaryIO + wfile: BinaryIO + server_version: str + sys_version: str + error_message_format: str + error_content_type: str + protocol_version: str + MessageClass: type + responses: Mapping[int, Tuple[str, str]] + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: SocketServer.BaseServer) -> None: ... + def handle(self) -> None: ... + def handle_one_request(self) -> None: ... + def send_error(self, code: int, message: Optional[str] = ...) -> None: ... + def send_response(self, code: int, + message: Optional[str] = ...) -> None: ... + def send_header(self, keyword: str, value: str) -> None: ... + def end_headers(self) -> None: ... + def flush_headers(self) -> None: ... + def log_request(self, code: Union[int, str] = ..., + size: Union[int, str] = ...) -> None: ... + def log_error(self, format: str, *args: Any) -> None: ... + def log_message(self, format: str, *args: Any) -> None: ... + def version_string(self) -> str: ... + def date_time_string(self, timestamp: Optional[int] = ...) -> str: ... + def log_date_time_string(self) -> str: ... + def address_string(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi new file mode 100644 index 0000000..5d86811 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ConfigParser.pyi @@ -0,0 +1,97 @@ +from typing import Any, IO, Sequence, Tuple, Union, List, Dict, Protocol, Optional + +DEFAULTSECT: str +MAX_INTERPOLATION_DEPTH: int + +class Error(Exception): + message: Any + def __init__(self, msg: str = ...) -> None: ... + def _get_message(self) -> None: ... + def _set_message(self, value: str) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + +class NoSectionError(Error): + section: str + def __init__(self, section: str) -> None: ... + +class DuplicateSectionError(Error): + section: str + def __init__(self, section: str) -> None: ... + +class NoOptionError(Error): + section: str + option: str + def __init__(self, option: str, section: str) -> None: ... + +class InterpolationError(Error): + section: str + option: str + msg: str + def __init__(self, option: str, section: str, msg: str) -> None: ... + +class InterpolationMissingOptionError(InterpolationError): + reference: str + def __init__(self, option: str, section: str, rawval: str, reference: str) -> None: ... + +class InterpolationSyntaxError(InterpolationError): ... + +class InterpolationDepthError(InterpolationError): + def __init__(self, option: str, section: str, rawval: str) -> None: ... + +class ParsingError(Error): + filename: str + errors: List[Tuple[Any, Any]] + def __init__(self, filename: str) -> None: ... + def append(self, lineno: Any, line: Any) -> None: ... + +class MissingSectionHeaderError(ParsingError): + lineno: Any + line: Any + def __init__(self, filename: str, lineno: Any, line: Any) -> None: ... + +class _Readable(Protocol): + def readline(self) -> str: ... + +class RawConfigParser: + _dict: Any + _sections: dict + _defaults: dict + _optcre: Any + SECTCRE: Any + OPTCRE: Any + OPTCRE_NV: Any + def __init__(self, defaults: Dict[Any, Any] = ..., dict_type: Any = ..., allow_no_value: bool = ...) -> None: ... + def defaults(self) -> Dict[Any, Any]: ... + def sections(self) -> List[str]: ... + def add_section(self, section: str) -> None: ... + def has_section(self, section: str) -> bool: ... + def options(self, section: str) -> List[str]: ... + def read(self, filenames: Union[str, Sequence[str]]) -> List[str]: ... + def readfp(self, fp: _Readable, filename: str = ...) -> None: ... + def get(self, section: str, option: str) -> str: ... + def items(self, section: str) -> List[Tuple[Any, Any]]: ... + def _get(self, section: str, conv: type, option: str) -> Any: ... + def getint(self, section: str, option: str) -> int: ... + def getfloat(self, section: str, option: str) -> float: ... + _boolean_states: Dict[str, bool] + def getboolean(self, section: str, option: str) -> bool: ... + def optionxform(self, optionstr: str) -> str: ... + def has_option(self, section: str, option: str) -> bool: ... + def set(self, section: str, option: str, value: Any = ...) -> None: ... + def write(self, fp: IO[str]) -> None: ... + def remove_option(self, section: str, option: Any) -> bool: ... + def remove_section(self, section: str) -> bool: ... + def _read(self, fp: IO[str], fpname: str) -> None: ... + +class ConfigParser(RawConfigParser): + _KEYCRE: Any + def get(self, section: str, option: str, raw: bool = ..., vars: Optional[dict] = ...) -> Any: ... + def items(self, section: str, raw: bool = ..., vars: Optional[dict] = ...) -> List[Tuple[str, Any]]: ... + def _interpolate(self, section: str, option: str, rawval: Any, vars: Any) -> str: ... + def _interpolation_replace(self, match: Any) -> str: ... + +class SafeConfigParser(ConfigParser): + _interpvar_re: Any + def _interpolate(self, section: str, option: str, rawval: Any, vars: Any) -> str: ... + def _interpolate_some(self, option: str, accum: list, rest: str, section: str, map: dict, depth: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Cookie.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Cookie.pyi new file mode 100644 index 0000000..79a7a81 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Cookie.pyi @@ -0,0 +1,40 @@ +from typing import Any, Optional + +class CookieError(Exception): ... + +class Morsel(dict): + key: Any + def __init__(self): ... + def __setitem__(self, K, V): ... + def isReservedKey(self, K): ... + value: Any + coded_value: Any + def set(self, key, val, coded_val, LegalChars=..., idmap=..., translate=...): ... + def output(self, attrs: Optional[Any] = ..., header=...): ... + def js_output(self, attrs: Optional[Any] = ...): ... + def OutputString(self, attrs: Optional[Any] = ...): ... + +class BaseCookie(dict): + def value_decode(self, val): ... + def value_encode(self, val): ... + def __init__(self, input: Optional[Any] = ...): ... + def __setitem__(self, key, value): ... + def output(self, attrs: Optional[Any] = ..., header=..., sep=...): ... + def js_output(self, attrs: Optional[Any] = ...): ... + def load(self, rawdata): ... + +class SimpleCookie(BaseCookie): + def value_decode(self, val): ... + def value_encode(self, val): ... + +class SerialCookie(BaseCookie): + def __init__(self, input: Optional[Any] = ...): ... + def value_decode(self, val): ... + def value_encode(self, val): ... + +class SmartCookie(BaseCookie): + def __init__(self, input: Optional[Any] = ...): ... + def value_decode(self, val): ... + def value_encode(self, val): ... + +Cookie: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi new file mode 100644 index 0000000..0f6c7e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/HTMLParser.pyi @@ -0,0 +1,31 @@ +from typing import List, Tuple, AnyStr +from markupbase import ParserBase + +class HTMLParser(ParserBase): + def __init__(self) -> None: ... + def feed(self, feed: AnyStr) -> None: ... + def close(self) -> None: ... + def reset(self) -> None: ... + + def get_starttag_text(self) -> AnyStr: ... + def set_cdata_mode(self, AnyStr) -> None: ... + def clear_cdata_mode(self) -> None: ... + + def handle_startendtag(self, tag: AnyStr, attrs: List[Tuple[AnyStr, AnyStr]]): ... + def handle_starttag(self, tag: AnyStr, attrs: List[Tuple[AnyStr, AnyStr]]): ... + def handle_endtag(self, tag: AnyStr): ... + def handle_charref(self, name: AnyStr): ... + def handle_entityref(self, name: AnyStr): ... + def handle_data(self, data: AnyStr): ... + def handle_comment(self, data: AnyStr): ... + def handle_decl(self, decl: AnyStr): ... + def handle_pi(self, data: AnyStr): ... + + def unknown_decl(self, data: AnyStr): ... + + def unescape(self, s: AnyStr) -> AnyStr: ... + +class HTMLParseError(Exception): + msg: str + lineno: int + offset: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Queue.pyi new file mode 100644 index 0000000..11b01ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/Queue.pyi @@ -0,0 +1,31 @@ +# Stubs for Queue (Python 2) + +from collections import deque +from typing import Any, TypeVar, Generic, Optional + +_T = TypeVar('_T') + +class Empty(Exception): ... +class Full(Exception): ... + +class Queue(Generic[_T]): + maxsize: Any + mutex: Any + not_empty: Any + not_full: Any + all_tasks_done: Any + unfinished_tasks: Any + queue: deque # undocumented + def __init__(self, maxsize: int = ...) -> None: ... + def task_done(self) -> None: ... + def join(self) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def put_nowait(self, item: _T) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def get_nowait(self) -> _T: ... + +class PriorityQueue(Queue): ... +class LifoQueue(Queue): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi new file mode 100644 index 0000000..be22b88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SimpleHTTPServer.pyi @@ -0,0 +1,16 @@ +# Stubs for SimpleHTTPServer (Python 2) + +from typing import Any, AnyStr, IO, Mapping, Optional, Union +import BaseHTTPServer +from StringIO import StringIO + +class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): + server_version: str + def do_GET(self) -> None: ... + def do_HEAD(self) -> None: ... + def send_head(self) -> Optional[IO[str]]: ... + def list_directory(self, path: Union[str, unicode]) -> Optional[StringIO]: ... + def translate_path(self, path: AnyStr) -> AnyStr: ... + def copyfile(self, source: IO[AnyStr], outputfile: IO[AnyStr]): ... + def guess_type(self, path: Union[str, unicode]) -> str: ... + extensions_map: Mapping[str, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi new file mode 100644 index 0000000..d485b8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/SocketServer.pyi @@ -0,0 +1,99 @@ +# NB: SocketServer.pyi and socketserver.pyi must remain consistent! +# Stubs for socketserver + +from typing import Any, BinaryIO, Optional, Tuple, Type +from socket import SocketType +import sys +import types + +class BaseServer: + address_family: int + RequestHandlerClass: type + server_address: Tuple[str, int] + socket: SocketType + allow_reuse_address: bool + request_queue_size: int + socket_type: int + timeout: Optional[float] + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + def fileno(self) -> int: ... + def handle_request(self) -> None: ... + def serve_forever(self, poll_interval: float = ...) -> None: ... + def shutdown(self) -> None: ... + def server_close(self) -> None: ... + def finish_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def get_request(self) -> None: ... + def handle_error(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def handle_timeout(self) -> None: ... + def process_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def server_activate(self) -> None: ... + def server_bind(self) -> None: ... + def verify_request(self, request: bytes, + client_address: Tuple[str, int]) -> bool: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> BaseServer: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + if sys.version_info >= (3, 3): + def service_actions(self) -> None: ... + +class TCPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class UDPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +if sys.platform != 'win32': + class UnixStreamServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + + class UnixDatagramServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class ForkingMixIn: ... +class ThreadingMixIn: ... + +class ForkingTCPServer(ForkingMixIn, TCPServer): ... +class ForkingUDPServer(ForkingMixIn, UDPServer): ... +class ThreadingTCPServer(ThreadingMixIn, TCPServer): ... +class ThreadingUDPServer(ThreadingMixIn, UDPServer): ... +if sys.platform != 'win32': + class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): ... + class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): ... + + +class BaseRequestHandler: + # Those are technically of types, respectively: + # * Union[SocketType, Tuple[bytes, SocketType]] + # * Union[Tuple[str, int], str] + # But there are some concerns that having unions here would cause + # too much inconvenience to people using it (see + # https://github.com/python/typeshed/pull/384#issuecomment-234649696) + request: Any + client_address: Any + + server: BaseServer + def setup(self) -> None: ... + def handle(self) -> None: ... + def finish(self) -> None: ... + +class StreamRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO + +class DatagramRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/StringIO.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/StringIO.pyi new file mode 100644 index 0000000..de17f6a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/StringIO.pyi @@ -0,0 +1,30 @@ +# Stubs for StringIO (Python 2) + +from typing import Any, IO, AnyStr, Iterator, Iterable, Generic, List, Optional + +class StringIO(IO[AnyStr], Generic[AnyStr]): + closed: bool + softspace: int + len: int + name: str + def __init__(self, buf: AnyStr = ...) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def next(self) -> AnyStr: ... + def close(self) -> None: ... + def isatty(self) -> bool: ... + def seek(self, pos: int, mode: int = ...) -> int: ... + def tell(self) -> int: ... + def read(self, n: int = ...) -> AnyStr: ... + def readline(self, length: int = ...) -> AnyStr: ... + def readlines(self, sizehint: int = ...) -> List[AnyStr]: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def write(self, s: AnyStr) -> int: ... + def writelines(self, iterable: Iterable[AnyStr]) -> None: ... + def flush(self) -> None: ... + def getvalue(self) -> AnyStr: ... + def __enter__(self) -> Any: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> Any: ... + def fileno(self) -> int: ... + def readable(self) -> bool: ... + def seekable(self) -> bool: ... + def writable(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserDict.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserDict.pyi new file mode 100644 index 0000000..965e88e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserDict.pyi @@ -0,0 +1,44 @@ +from typing import (Any, Container, Dict, Generic, Iterable, Iterator, List, + Mapping, Optional, Sized, Tuple, TypeVar, Union, overload) + +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_T = TypeVar('_T') + +class UserDict(Dict[_KT, _VT], Generic[_KT, _VT]): + data: Mapping[_KT, _VT] + + def __init__(self, initialdata: Mapping[_KT, _VT] = ...) -> None: ... + + # TODO: __iter__ is not available for UserDict + +class IterableUserDict(UserDict[_KT, _VT], Generic[_KT, _VT]): + ... + +class DictMixin(Iterable[_KT], Container[_KT], Sized, Generic[_KT, _VT]): + def has_key(self, key: _KT) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_KT]: ... + + # From typing.Mapping[_KT, _VT] + # (can't inherit because of keys()) + @overload + def get(self, k: _KT) -> Optional[_VT]: ... + @overload + def get(self, k: _KT, default: Union[_VT, _T]) -> Union[_VT, _T]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def __contains__(self, o: Any) -> bool: ... + + # From typing.MutableMapping[_KT, _VT] + def clear(self) -> None: ... + def pop(self, k: _KT, default: _VT = ...) -> _VT: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserList.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserList.pyi new file mode 100644 index 0000000..b8466ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserList.pyi @@ -0,0 +1,18 @@ +from typing import Iterable, MutableSequence, TypeVar, Union, overload + +_T = TypeVar("_T") +_ULT = TypeVar("_ULT", bound=UserList) + +class UserList(MutableSequence[_T]): + def insert(self, index: int, object: _T) -> None: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self: _ULT, s: slice) -> _ULT: ... + def sort(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserString.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserString.pyi new file mode 100644 index 0000000..8cbbfc1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/UserString.pyi @@ -0,0 +1,75 @@ +import collections +from typing import Any, Iterable, List, MutableSequence, Sequence, Optional, overload, Text, TypeVar, Tuple, Union + +_UST = TypeVar("_UST", bound=UserString) +_MST = TypeVar("_MST", bound=MutableString) + +class UserString(Sequence[UserString]): + data: unicode + def __init__(self, seq: object) -> None: ... + def __int__(self) -> int: ... + def __long__(self) -> long: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + def __hash__(self) -> int: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self: _UST, i: int) -> _UST: ... + @overload + def __getitem__(self: _UST, s: slice) -> _UST: ... + def __add__(self: _UST, other: Any) -> _UST: ... + def __radd__(self: _UST, other: Any) -> _UST: ... + def __mul__(self: _UST, other: int) -> _UST: ... + def __rmul__(self: _UST, other: int) -> _UST: ... + def __mod__(self: _UST, args: Any) -> _UST: ... + def capitalize(self: _UST) -> _UST: ... + def center(self: _UST, width: int, *args: Any) -> _UST: ... + def count(self, sub: int, start: int = ..., end: int = ...) -> int: ... + def decode(self: _UST, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UST: ... + def encode(self: _UST, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UST: ... + def endswith(self, suffix: Text, start: int = ..., end: int = ...) -> bool: ... + def expandtabs(self: _UST, tabsize: int = ...) -> _UST: ... + def find(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def isalpha(self) -> bool: ... + def isalnum(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, seq: Iterable[Text]) -> Text: ... + def ljust(self: _UST, width: int, *args: Any) -> _UST: ... + def lower(self: _UST) -> _UST: ... + def lstrip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def partition(self, sep: Text) -> Tuple[Text, Text, Text]: ... + def replace(self: _UST, old: Text, new: Text, maxsplit: int = ...) -> _UST: ... + def rfind(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: Text, start: int = ..., end: int = ...) -> int: ... + def rjust(self: _UST, width: int, *args: Any) -> _UST: ... + def rpartition(self, sep: Text) -> Tuple[Text, Text, Text]: ... + def rstrip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def split(self, sep: Optional[Text] = ..., maxsplit: int = ...) -> List[Text]: ... + def rsplit(self, sep: Optional[Text] = ..., maxsplit: int = ...) -> List[Text]: ... + def splitlines(self, keepends: int = ...) -> List[Text]: ... + def startswith(self, suffix: Text, start: int = ..., end: int = ...) -> bool: ... + def strip(self: _UST, chars: Optional[Text] = ...) -> _UST: ... + def swapcase(self: _UST) -> _UST: ... + def title(self: _UST) -> _UST: ... + def translate(self: _UST, *args: Any) -> _UST: ... + def upper(self: _UST) -> _UST: ... + def zfill(self: _UST, width: int) -> _UST: ... + +class MutableString(UserString, MutableSequence[MutableString]): # type: ignore + @overload + def __getitem__(self: _MST, i: int) -> _MST: ... + @overload + def __getitem__(self: _MST, s: slice) -> _MST: ... + def __setitem__(self, index: Union[int, slice], sub: Any) -> None: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def immutable(self) -> UserString: ... + def __iadd__(self: _MST, other: Any) -> _MST: ... + def __imul__(self, n: int) -> _MST: ... + def insert(self, index: int, value: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi new file mode 100644 index 0000000..cca0e4f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/__builtin__.pyi @@ -0,0 +1,1622 @@ +# True and False are deliberately omitted because they are keywords in +# Python 3, and stub files conform to Python 3 syntax. + +from typing import ( + TypeVar, Iterator, Iterable, NoReturn, overload, Container, + Sequence, MutableSequence, Mapping, MutableMapping, Tuple, List, Any, Dict, Callable, Generic, + Set, AbstractSet, FrozenSet, MutableSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsAbs, + SupportsComplex, IO, BinaryIO, Union, + ItemsView, KeysView, ValuesView, ByteString, Optional, AnyStr, Type, Text, + Protocol, +) +from abc import abstractmethod, ABCMeta +from ast import mod, AST +from types import TracebackType, CodeType +import sys + +if sys.version_info >= (3,): + from typing import SupportsBytes, SupportsRound + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_S = TypeVar('_S') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_TT = TypeVar('_TT', bound='type') + +class object: + __doc__: Optional[str] + __dict__: Dict[str, Any] + __slots__: Union[Text, Iterable[Text]] + __module__: str + if sys.version_info >= (3, 6): + __annotations__: Dict[str, Any] + + @property + def __class__(self: _T) -> Type[_T]: ... + @__class__.setter + def __class__(self, __type: Type[object]) -> None: ... + def __init__(self) -> None: ... + def __new__(cls) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __eq__(self, o: object) -> bool: ... + def __ne__(self, o: object) -> bool: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + def __format__(self, format_spec: str) -> str: ... + def __getattribute__(self, name: str) -> Any: ... + def __delattr__(self, name: str) -> None: ... + def __sizeof__(self) -> int: ... + def __reduce__(self) -> tuple: ... + def __reduce_ex__(self, protocol: int) -> tuple: ... + if sys.version_info >= (3,): + def __dir__(self) -> Iterable[str]: ... + if sys.version_info >= (3, 6): + def __init_subclass__(cls) -> None: ... + +class staticmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class classmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class type(object): + __base__: type + __bases__: Tuple[type, ...] + __basicsize__: int + __dict__: Dict[str, Any] + __dictoffset__: int + __flags__: int + __itemsize__: int + __module__: str + __mro__: Tuple[type, ...] + __name__: str + if sys.version_info >= (3,): + __qualname__: str + __text_signature__: Optional[str] + __weakrefoffset__: int + + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, name: str, bases: Tuple[type, ...], dict: Dict[str, Any]) -> None: ... + @overload + def __new__(cls, o: object) -> type: ... + @overload + def __new__(cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]) -> type: ... + def __call__(self, *args: Any, **kwds: Any) -> Any: ... + def __subclasses__(self: _TT) -> List[_TT]: ... + # Note: the documentation doesnt specify what the return type is, the standard + # implementation seems to be returning a list. + def mro(self) -> List[type]: ... + def __instancecheck__(self, instance: Any) -> bool: ... + def __subclasscheck__(self, subclass: type) -> bool: ... + if sys.version_info >= (3,): + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Mapping[str, Any]: ... + +class super(object): + if sys.version_info >= (3,): + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + @overload + def __init__(self) -> None: ... + else: + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + +class int: + @overload + def __init__(self, x: Union[Text, bytes, SupportsInt] = ...) -> None: ... + @overload + def __init__(self, x: Union[Text, bytes, bytearray], base: int) -> None: ... + + @property + def real(self) -> int: ... + @property + def imag(self) -> int: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + def conjugate(self) -> int: ... + + def bit_length(self) -> int: ... + if sys.version_info >= (3,): + def to_bytes(self, length: int, byteorder: str, *, signed: bool = ...) -> bytes: ... + @classmethod + def from_bytes(cls, bytes: Sequence[int], byteorder: str, *, + signed: bool = ...) -> int: ... # TODO buffer object argument + + def __add__(self, x: int) -> int: ... + def __sub__(self, x: int) -> int: ... + def __mul__(self, x: int) -> int: ... + def __floordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __div__(self, x: int) -> int: ... + def __truediv__(self, x: int) -> float: ... + def __mod__(self, x: int) -> int: ... + def __divmod__(self, x: int) -> Tuple[int, int]: ... + def __radd__(self, x: int) -> int: ... + def __rsub__(self, x: int) -> int: ... + def __rmul__(self, x: int) -> int: ... + def __rfloordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __rdiv__(self, x: int) -> int: ... + def __rtruediv__(self, x: int) -> float: ... + def __rmod__(self, x: int) -> int: ... + def __rdivmod__(self, x: int) -> Tuple[int, int]: ... + def __pow__(self, x: int) -> Any: ... # Return type can be int or float, depending on x. + def __rpow__(self, x: int) -> Any: ... + def __and__(self, n: int) -> int: ... + def __or__(self, n: int) -> int: ... + def __xor__(self, n: int) -> int: ... + def __lshift__(self, n: int) -> int: ... + def __rshift__(self, n: int) -> int: ... + def __rand__(self, n: int) -> int: ... + def __ror__(self, n: int) -> int: ... + def __rxor__(self, n: int) -> int: ... + def __rlshift__(self, n: int) -> int: ... + def __rrshift__(self, n: int) -> int: ... + def __neg__(self) -> int: ... + def __pos__(self) -> int: ... + def __invert__(self) -> int: ... + if sys.version_info >= (3,): + def __round__(self, ndigits: Optional[int] = ...) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: int) -> bool: ... + def __le__(self, x: int) -> bool: ... + def __gt__(self, x: int) -> bool: ... + def __ge__(self, x: int) -> bool: ... + + def __str__(self) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __abs__(self) -> int: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __index__(self) -> int: ... + +class float: + def __init__(self, x: Union[SupportsFloat, Text, bytes, bytearray] = ...) -> None: ... + def as_integer_ratio(self) -> Tuple[int, int]: ... + def hex(self) -> str: ... + def is_integer(self) -> bool: ... + @classmethod + def fromhex(cls, s: str) -> float: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + def conjugate(self) -> float: ... + + def __add__(self, x: float) -> float: ... + def __sub__(self, x: float) -> float: ... + def __mul__(self, x: float) -> float: ... + def __floordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __div__(self, x: float) -> float: ... + def __truediv__(self, x: float) -> float: ... + def __mod__(self, x: float) -> float: ... + def __divmod__(self, x: float) -> Tuple[float, float]: ... + def __pow__(self, x: float) -> float: ... # In Python 3, returns complex if self is negative and x is not whole + def __radd__(self, x: float) -> float: ... + def __rsub__(self, x: float) -> float: ... + def __rmul__(self, x: float) -> float: ... + def __rfloordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __rdiv__(self, x: float) -> float: ... + def __rtruediv__(self, x: float) -> float: ... + def __rmod__(self, x: float) -> float: ... + def __rdivmod__(self, x: float) -> Tuple[float, float]: ... + def __rpow__(self, x: float) -> float: ... + def __getnewargs__(self) -> Tuple[float]: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: None) -> int: ... + @overload + def __round__(self, ndigits: int) -> float: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: float) -> bool: ... + def __le__(self, x: float) -> bool: ... + def __gt__(self, x: float) -> bool: ... + def __ge__(self, x: float) -> bool: ... + def __neg__(self) -> float: ... + def __pos__(self) -> float: ... + + def __str__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +class complex: + @overload + def __init__(self, re: float = ..., im: float = ...) -> None: ... + @overload + def __init__(self, s: str) -> None: ... + @overload + def __init__(self, s: SupportsComplex) -> None: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + + def conjugate(self) -> complex: ... + + def __add__(self, x: complex) -> complex: ... + def __sub__(self, x: complex) -> complex: ... + def __mul__(self, x: complex) -> complex: ... + def __pow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __div__(self, x: complex) -> complex: ... + def __truediv__(self, x: complex) -> complex: ... + def __radd__(self, x: complex) -> complex: ... + def __rsub__(self, x: complex) -> complex: ... + def __rmul__(self, x: complex) -> complex: ... + def __rpow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __rdiv__(self, x: complex) -> complex: ... + def __rtruediv__(self, x: complex) -> complex: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __neg__(self) -> complex: ... + def __pos__(self) -> complex: ... + + def __str__(self) -> str: ... + def __complex__(self) -> complex: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +if sys.version_info >= (3,): + _str_base = object +else: + class basestring(metaclass=ABCMeta): ... + + class unicode(basestring, Sequence[unicode]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, o: str, encoding: unicode = ..., errors: unicode = ...) -> None: ... + def capitalize(self) -> unicode: ... + def center(self, width: int, fillchar: unicode = ...) -> unicode: ... + def count(self, x: unicode) -> int: ... + def decode(self, encoding: unicode = ..., errors: unicode = ...) -> unicode: ... + def encode(self, encoding: unicode = ..., errors: unicode = ...) -> str: ... + def endswith(self, suffix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> unicode: ... + def find(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> unicode: ... + def index(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[unicode]) -> unicode: ... + def ljust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def lower(self) -> unicode: ... + def lstrip(self, chars: unicode = ...) -> unicode: ... + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: unicode, new: unicode, count: int = ...) -> unicode: ... + def rfind(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def rsplit(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def rstrip(self, chars: unicode = ...) -> unicode: ... + def split(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[unicode]: ... + def startswith(self, prefix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def strip(self, chars: unicode = ...) -> unicode: ... + def swapcase(self) -> unicode: ... + def title(self) -> unicode: ... + def translate(self, table: Union[Dict[int, Any], unicode]) -> unicode: ... + def upper(self) -> unicode: ... + def zfill(self, width: int) -> unicode: ... + + @overload + def __getitem__(self, i: int) -> unicode: ... + @overload + def __getitem__(self, s: slice) -> unicode: ... + def __getslice__(self, start: int, stop: int) -> unicode: ... + def __add__(self, s: unicode) -> unicode: ... + def __mul__(self, n: int) -> unicode: ... + def __rmul__(self, n: int) -> unicode: ... + def __mod__(self, x: Any) -> unicode: ... + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: unicode) -> bool: ... + def __le__(self, x: unicode) -> bool: ... + def __gt__(self, x: unicode) -> bool: ... + def __ge__(self, x: unicode) -> bool: ... + + def __len__(self) -> int: ... + # The argument type is incompatible with Sequence + def __contains__(self, s: Union[unicode, bytes]) -> bool: ... # type: ignore + def __iter__(self) -> Iterator[unicode]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + def __getnewargs__(self) -> Tuple[unicode]: ... + + _str_base = basestring + +class str(Sequence[str], _str_base): + if sys.version_info >= (3,): + @overload + def __init__(self, o: object = ...) -> None: ... + @overload + def __init__(self, o: bytes, encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, o: object = ...) -> None: ... + + def capitalize(self) -> str: ... + if sys.version_info >= (3, 3): + def casefold(self) -> str: ... + def center(self, width: int, fillchar: str = ...) -> str: ... + def count(self, x: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + if sys.version_info < (3,): + def decode(self, encoding: Text = ..., errors: Text = ...) -> unicode: ... + def encode(self, encoding: Text = ..., errors: Text = ...) -> bytes: ... + if sys.version_info >= (3,): + def endswith(self, suffix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + else: + def endswith(self, suffix: Union[Text, Tuple[Text, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> str: ... + def find(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> str: ... + if sys.version_info >= (3,): + def format_map(self, map: Mapping[str, Any]) -> str: ... + def index(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + if sys.version_info >= (3,): + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + if sys.version_info >= (3,): + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + if sys.version_info >= (3,): + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[str]) -> str: ... + else: + def join(self, iterable: Iterable[AnyStr]) -> AnyStr: ... + def ljust(self, width: int, fillchar: str = ...) -> str: ... + def lower(self) -> str: ... + if sys.version_info >= (3,): + def lstrip(self, chars: Optional[str] = ...) -> str: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self, old: str, new: str, count: int = ...) -> str: ... + else: + @overload + def lstrip(self, chars: str = ...) -> str: ... + @overload + def lstrip(self, chars: unicode) -> unicode: ... + @overload + def partition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def partition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: AnyStr, new: AnyStr, count: int = ...) -> AnyStr: ... + def rfind(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: str = ...) -> str: ... + if sys.version_info >= (3,): + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rstrip(self, chars: Optional[str] = ...) -> str: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + else: + @overload + def rpartition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + @overload + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def rsplit(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + @overload + def rstrip(self, chars: str = ...) -> str: ... + @overload + def rstrip(self, chars: unicode) -> unicode: ... + @overload + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def split(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + if sys.version_info >= (3,): + def startswith(self, prefix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + def strip(self, chars: Optional[str] = ...) -> str: ... + else: + def startswith(self, prefix: Union[Text, Tuple[Text, ...]]) -> bool: ... + @overload + def strip(self, chars: str = ...) -> str: ... + @overload + def strip(self, chars: unicode) -> unicode: ... + def swapcase(self) -> str: ... + def title(self) -> str: ... + if sys.version_info >= (3,): + def translate(self, table: Union[Mapping[int, Union[int, str, None]], Sequence[Union[int, str, None]]]) -> str: ... + else: + def translate(self, table: Optional[AnyStr], deletechars: AnyStr = ...) -> AnyStr: ... + def upper(self) -> str: ... + def zfill(self, width: int) -> str: ... + if sys.version_info >= (3,): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + + if sys.version_info >= (3,): + def __add__(self, s: str) -> str: ... + else: + def __add__(self, s: AnyStr) -> AnyStr: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[str, Text]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ge__(self, x: Text) -> bool: ... + def __getitem__(self, i: Union[int, slice]) -> str: ... + def __gt__(self, x: Text) -> bool: ... + def __hash__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + def __le__(self, x: Text) -> bool: ... + def __len__(self) -> int: ... + def __lt__(self, x: Text) -> bool: ... + def __mod__(self, x: Any) -> str: ... + def __mul__(self, n: int) -> str: ... + def __ne__(self, x: object) -> bool: ... + def __repr__(self) -> str: ... + def __rmul__(self, n: int) -> str: ... + def __str__(self) -> str: ... + def __getnewargs__(self) -> Tuple[str]: ... + + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + +if sys.version_info >= (3,): + class bytes(ByteString): + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str, encoding: str, + errors: str = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: SupportsBytes) -> None: ... + def capitalize(self) -> bytes: ... + def center(self, width: int, fillchar: bytes = ...) -> bytes: ... + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def decode(self, encoding: str = ..., errors: str = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytes: ... + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytes: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def lower(self) -> bytes: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def partition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytes: ... + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def rpartition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def splitlines(self, keepends: bool = ...) -> List[bytes]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytes: ... + def swapcase(self) -> bytes: ... + def title(self) -> bytes: ... + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytes: ... + def upper(self) -> bytes: ... + def zfill(self, width: int) -> bytes: ... + @classmethod + def fromhex(cls, s: str) -> bytes: ... + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytes: ... + def __add__(self, s: bytes) -> bytes: ... + def __mul__(self, n: int) -> bytes: ... + def __rmul__(self, n: int) -> bytes: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + def __getnewargs__(self) -> Tuple[bytes]: ... +else: + bytes = str + +class bytearray(MutableSequence[int], ByteString): + if sys.version_info >= (3,): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + else: + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + def capitalize(self) -> bytearray: ... + def center(self, width: int, fillchar: bytes = ...) -> bytearray: ... + if sys.version_info >= (3,): + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def copy(self) -> bytearray: ... + else: + def count(self, x: str) -> int: ... + def decode(self, encoding: Text = ..., errors: Text = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def find(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def insert(self, index: int, object: int) -> None: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytearray: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + else: + def join(self, iterable: Iterable[str]) -> bytearray: ... + def ljust(self, width: int, fillchar: str = ...) -> bytearray: ... + def lower(self) -> bytearray: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def partition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def rfind(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + def rpartition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def splitlines(self, keepends: bool = ...) -> List[bytearray]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def swapcase(self) -> bytearray: ... + def title(self) -> bytearray: ... + if sys.version_info >= (3,): + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytearray: ... + else: + def translate(self, table: str) -> bytearray: ... + def upper(self) -> bytearray: ... + def zfill(self, width: int) -> bytearray: ... + @staticmethod + def fromhex(s: str) -> bytearray: ... + if sys.version_info >= (3,): + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytearray: ... + @overload + def __setitem__(self, i: int, x: int) -> None: ... + @overload + def __setitem__(self, s: slice, x: Union[Iterable[int], bytes]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> bytearray: ... + def __setslice__(self, start: int, stop: int, x: Union[Sequence[int], str]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, s: bytes) -> bytearray: ... + if sys.version_info >= (3,): + def __iadd__(self, s: Iterable[int]) -> bytearray: ... + def __mul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3,): + def __rmul__(self, n: int) -> bytearray: ... + def __imul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + +if sys.version_info >= (3,): + _mv_container_type = int +else: + _mv_container_type = str + +class memoryview(Sized, Container[_mv_container_type]): + format: str + itemsize: int + shape: Optional[Tuple[int, ...]] + strides: Optional[Tuple[int, ...]] + suboffsets: Optional[Tuple[int, ...]] + readonly: bool + ndim: int + + if sys.version_info >= (3,): + c_contiguous: bool + f_contiguous: bool + contiguous: bool + def __init__(self, obj: Union[bytes, bytearray, memoryview]) -> None: ... + def __enter__(self) -> memoryview: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]) -> bool: ... + else: + def __init__(self, obj: Union[bytes, bytearray, buffer, memoryview]) -> None: ... + + @overload + def __getitem__(self, i: int) -> _mv_container_type: ... + @overload + def __getitem__(self, s: slice) -> memoryview: ... + + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_mv_container_type]: ... + def __len__(self) -> int: ... + + @overload + def __setitem__(self, i: int, o: bytes) -> None: ... + @overload + def __setitem__(self, s: slice, o: Sequence[bytes]) -> None: ... + @overload + def __setitem__(self, s: slice, o: memoryview) -> None: ... + + def tobytes(self) -> bytes: ... + def tolist(self) -> List[int]: ... + + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + +class bool(int): + def __init__(self, o: object = ...) -> None: ... + @overload + def __and__(self, x: bool) -> bool: ... + @overload + def __and__(self, x: int) -> int: ... + @overload + def __or__(self, x: bool) -> bool: ... + @overload + def __or__(self, x: int) -> int: ... + @overload + def __xor__(self, x: bool) -> bool: ... + @overload + def __xor__(self, x: int) -> int: ... + @overload + def __rand__(self, x: bool) -> bool: ... + @overload + def __rand__(self, x: int) -> int: ... + @overload + def __ror__(self, x: bool) -> bool: ... + @overload + def __ror__(self, x: int) -> int: ... + @overload + def __rxor__(self, x: bool) -> bool: ... + @overload + def __rxor__(self, x: int) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + +class slice(object): + start: Optional[int] + step: Optional[int] + stop: Optional[int] + @overload + def __init__(self, stop: Optional[int]) -> None: ... + @overload + def __init__(self, start: Optional[int], stop: Optional[int], step: Optional[int] = ...) -> None: ... + def indices(self, len: int) -> Tuple[int, int, int]: ... + +class tuple(Sequence[_T_co], Generic[_T_co]): + def __new__(cls: Type[_T], iterable: Iterable[_T_co] = ...) -> _T: ... + def __init__(self, iterable: Iterable[_T_co] = ...): ... + def __len__(self) -> int: ... + def __contains__(self, x: object) -> bool: ... + @overload + def __getitem__(self, x: int) -> _T_co: ... + @overload + def __getitem__(self, x: slice) -> Tuple[_T_co, ...]: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __lt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __le__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __gt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __ge__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __add__(self, x: Tuple[_T_co, ...]) -> Tuple[_T_co, ...]: ... + def __mul__(self, n: int) -> Tuple[_T_co, ...]: ... + def __rmul__(self, n: int) -> Tuple[_T_co, ...]: ... + def count(self, x: Any) -> int: ... + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + +class list(MutableSequence[_T], Generic[_T]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3,): + def clear(self) -> None: ... + def copy(self) -> List[_T]: ... + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def index(self, object: _T, start: int = ..., stop: int = ...) -> int: ... + def count(self, object: _T) -> int: ... + def insert(self, index: int, object: _T) -> None: ... + def remove(self, object: _T) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3,): + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + else: + def sort(self, cmp: Callable[[_T, _T], Any] = ..., key: Callable[[_T], Any] = ..., reverse: bool = ...) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> List[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, o: Sequence[_T]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, x: List[_T]) -> List[_T]: ... + def __iadd__(self: _S, x: Iterable[_T]) -> _S: ... + def __mul__(self, n: int) -> List[_T]: ... + def __rmul__(self, n: int) -> List[_T]: ... + if sys.version_info >= (3,): + def __imul__(self: _S, n: int) -> _S: ... + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __gt__(self, x: List[_T]) -> bool: ... + def __ge__(self, x: List[_T]) -> bool: ... + def __lt__(self, x: List[_T]) -> bool: ... + def __le__(self, x: List[_T]) -> bool: ... + +class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + # NOTE: Keyword arguments are special. If they are used, _KT must include + # str, but we have no way of enforcing it here. + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + + def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ... + + if sys.version_info < (3,): + def has_key(self, k: _KT) -> bool: ... + def clear(self) -> None: ... + def copy(self) -> Dict[_KT, _VT]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + if sys.version_info >= (3,): + def keys(self) -> KeysView[_KT]: ... + def values(self) -> ValuesView[_VT]: ... + def items(self) -> ItemsView[_KT, _VT]: ... + else: + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def viewkeys(self) -> KeysView[_KT]: ... + def viewvalues(self) -> ValuesView[_VT]: ... + def viewitems(self) -> ItemsView[_KT, _VT]: ... + @staticmethod + @overload + def fromkeys(seq: Iterable[_T]) -> Dict[_T, Any]: ... # TODO: Actually a class method (mypy/issues#328) + @staticmethod + @overload + def fromkeys(seq: Iterable[_T], value: _S) -> Dict[_T, _S]: ... + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + +class set(MutableSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def add(self, element: _T) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Set[_T]: ... + def difference(self, *s: Iterable[Any]) -> Set[_T]: ... + def difference_update(self, *s: Iterable[Any]) -> None: ... + def discard(self, element: _T) -> None: ... + def intersection(self, *s: Iterable[Any]) -> Set[_T]: ... + def intersection_update(self, *s: Iterable[Any]) -> None: ... + def isdisjoint(self, s: Iterable[Any]) -> bool: ... + def issubset(self, s: Iterable[Any]) -> bool: ... + def issuperset(self, s: Iterable[Any]) -> bool: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def symmetric_difference(self, s: Iterable[_T]) -> Set[_T]: ... + def symmetric_difference_update(self, s: Iterable[_T]) -> None: ... + def union(self, *s: Iterable[_T]) -> Set[_T]: ... + def update(self, *s: Iterable[_T]) -> None: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __iand__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ior__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __isub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ixor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class frozenset(AbstractSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def copy(self) -> FrozenSet[_T]: ... + def difference(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def intersection(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def isdisjoint(self, s: Iterable[_T]) -> bool: ... + def issubset(self, s: Iterable[object]) -> bool: ... + def issuperset(self, s: Iterable[object]) -> bool: ... + def symmetric_difference(self, s: Iterable[_T]) -> FrozenSet[_T]: ... + def union(self, *s: Iterable[_T]) -> FrozenSet[_T]: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class enumerate(Iterator[Tuple[int, _T]], Generic[_T]): + def __init__(self, iterable: Iterable[_T], start: int = ...) -> None: ... + def __iter__(self) -> Iterator[Tuple[int, _T]]: ... + if sys.version_info >= (3,): + def __next__(self) -> Tuple[int, _T]: ... + else: + def next(self) -> Tuple[int, _T]: ... + +if sys.version_info >= (3,): + class range(Sequence[int]): + start: int + stop: int + step: int + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def count(self, value: int) -> int: ... + def index(self, value: int, start: int = ..., stop: Optional[int] = ...) -> int: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[int]: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> range: ... + def __repr__(self) -> str: ... + def __reversed__(self) -> Iterator[int]: ... +else: + class xrange(Sized, Iterable[int], Reversible[int]): + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __getitem__(self, i: int) -> int: ... + def __reversed__(self) -> Iterator[int]: ... + +class property(object): + def __init__(self, fget: Optional[Callable[[Any], Any]] = ..., + fset: Optional[Callable[[Any, Any], None]] = ..., + fdel: Optional[Callable[[Any], None]] = ..., + doc: Optional[str] = ...) -> None: ... + def getter(self, fget: Callable[[Any], Any]) -> property: ... + def setter(self, fset: Callable[[Any, Any], None]) -> property: ... + def deleter(self, fdel: Callable[[Any], None]) -> property: ... + def __get__(self, obj: Any, type: Optional[type] = ...) -> Any: ... + def __set__(self, obj: Any, value: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + def fget(self) -> Any: ... + def fset(self, value: Any) -> None: ... + def fdel(self) -> None: ... + +if sys.version_info < (3,): + long = int + +NotImplemented: Any + +def abs(__n: SupportsAbs[_T]) -> _T: ... +def all(__i: Iterable[object]) -> bool: ... +def any(__i: Iterable[object]) -> bool: ... +if sys.version_info < (3,): + def apply(__func: Callable[..., _T], __args: Optional[Sequence[Any]] = ..., __kwds: Optional[Mapping[str, Any]] = ...) -> _T: ... +if sys.version_info >= (3,): + def ascii(__o: object) -> str: ... + +class _SupportsIndex(Protocol): + def __index__(self) -> int: ... +def bin(__number: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 7): + def breakpoint(*args: Any, **kws: Any) -> None: ... +def callable(__o: object) -> bool: ... +def chr(__code: int) -> str: ... +if sys.version_info < (3,): + def cmp(__x: Any, __y: Any) -> int: ... + _N1 = TypeVar('_N1', bool, int, float, complex) + def coerce(__x: _N1, __y: _N1) -> Tuple[_N1, _N1]: ... +if sys.version_info >= (3, 6): + # This class is to be exported as PathLike from os, + # but we define it here as _PathLike to avoid import cycle issues. + # See https://github.com/python/typeshed/pull/991#issuecomment-288160993 + class _PathLike(Generic[AnyStr]): + def __fspath__(self) -> AnyStr: ... + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes, _PathLike], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +elif sys.version_info >= (3,): + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +else: + def compile(source: Union[Text, mod], filename: Text, mode: Text, flags: int = ..., dont_inherit: int = ...) -> Any: ... +if sys.version_info >= (3,): + def copyright() -> None: ... + def credits() -> None: ... +def delattr(__o: Any, __name: Text) -> None: ... +def dir(__o: object = ...) -> List[str]: ... +_N2 = TypeVar('_N2', int, float) +def divmod(__a: _N2, __b: _N2) -> Tuple[_N2, _N2]: ... +def eval(__source: Union[Text, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +if sys.version_info >= (3,): + def exec(__object: Union[str, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +else: + def execfile(__filename: str, __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Dict[str, Any]] = ...) -> None: ... +def exit(code: object = ...) -> NoReturn: ... +if sys.version_info >= (3,): + @overload + def filter(__function: None, __iterable: Iterable[Optional[_T]]) -> Iterator[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], __iterable: Iterable[_T]) -> Iterator[_T]: ... +else: + @overload + def filter(__function: Callable[[AnyStr], Any], # type: ignore + __iterable: AnyStr) -> AnyStr: ... + @overload + def filter(__function: None, # type: ignore + __iterable: Tuple[Optional[_T], ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: Callable[[_T], Any], # type: ignore + __iterable: Tuple[_T, ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: None, + __iterable: Iterable[Optional[_T]]) -> List[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], + __iterable: Iterable[_T]) -> List[_T]: ... +def format(__o: object, __format_spec: str = ...) -> str: ... # TODO unicode +def getattr(__o: Any, name: Text, __default: Any = ...) -> Any: ... +def globals() -> Dict[str, Any]: ... +def hasattr(__o: Any, __name: Text) -> bool: ... +def hash(__o: object) -> int: ... +if sys.version_info >= (3,): + def help(*args: Any, **kwds: Any) -> None: ... +def hex(__i: Union[int, _SupportsIndex]) -> str: ... +def id(__o: object) -> int: ... +if sys.version_info >= (3,): + def input(__prompt: Any = ...) -> str: ... +else: + def input(__prompt: Any = ...) -> Any: ... + def intern(__string: str) -> str: ... +@overload +def iter(__iterable: Iterable[_T]) -> Iterator[_T]: ... +@overload +def iter(__function: Callable[[], _T], __sentinel: _T) -> Iterator[_T]: ... +def isinstance(__o: object, __t: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def issubclass(__cls: type, __classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def len(__o: Sized) -> int: ... +if sys.version_info >= (3,): + def license() -> None: ... +def locals() -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[_S]: ... +else: + @overload + def map(__func: None, __iter1: Iterable[_T1]) -> List[_T1]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def map(__func: None, + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +if sys.version_info >= (3,): + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +if sys.version_info >= (3,): + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +@overload +def next(__i: Iterator[_T]) -> _T: ... +@overload +def next(__i: Iterator[_T], default: _VT) -> Union[_T, _VT]: ... +def oct(__i: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 6): + def open(file: Union[str, bytes, int, _PathLike], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +elif sys.version_info >= (3,): + def open(file: Union[str, bytes, int], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +else: + def open(name: Union[unicode, int], mode: unicode = ..., buffering: int = ...) -> BinaryIO: ... + +def ord(__c: Union[Text, bytes]) -> int: ... +if sys.version_info >= (3,): + class _Writer(Protocol): + def write(self, __s: str) -> Any: ... + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ..., flush: bool = ...) -> None: ... +else: + class _Writer(Protocol): + def write(self, __s: Any) -> Any: ... + # This is only available after from __future__ import print_function. + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ...) -> None: ... +@overload +def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y +@overload +def pow(__x: int, __y: int, __z: int) -> Any: ... +@overload +def pow(__x: float, __y: float) -> float: ... +@overload +def pow(__x: float, __y: float, __z: float) -> float: ... +def quit(code: object = ...) -> NoReturn: ... +if sys.version_info < (3,): + def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ... + def raw_input(__prompt: Any = ...) -> str: ... + @overload + def reduce(__function: Callable[[_T, _S], _T], __iterable: Iterable[_S], __initializer: _T) -> _T: ... + @overload + def reduce(__function: Callable[[_T, _T], _T], __iterable: Iterable[_T]) -> _T: ... + def reload(__module: Any) -> Any: ... +@overload +def reversed(__object: Sequence[_T]) -> Iterator[_T]: ... +@overload +def reversed(__object: Reversible[_T]) -> Iterator[_T]: ... +def repr(__o: object) -> str: ... +if sys.version_info >= (3,): + @overload + def round(number: float) -> int: ... + @overload + def round(number: float, ndigits: None) -> int: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsRound[_T]) -> int: ... + @overload + def round(number: SupportsRound[_T], ndigits: None) -> int: ... # type: ignore + @overload + def round(number: SupportsRound[_T], ndigits: int) -> _T: ... +else: + @overload + def round(number: float) -> float: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsFloat) -> float: ... + @overload + def round(number: SupportsFloat, ndigits: int) -> float: ... +def setattr(__object: Any, __name: Text, __value: Any) -> None: ... +if sys.version_info >= (3,): + def sorted(__iterable: Iterable[_T], *, + key: Optional[Callable[[_T], Any]] = ..., + reverse: bool = ...) -> List[_T]: ... +else: + def sorted(__iterable: Iterable[_T], *, + cmp: Callable[[_T, _T], int] = ..., + key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> List[_T]: ... +@overload +def sum(__iterable: Iterable[_T]) -> Union[_T, int]: ... +@overload +def sum(__iterable: Iterable[_T], __start: _S) -> Union[_T, _S]: ... +if sys.version_info < (3,): + def unichr(__i: int) -> unicode: ... +def vars(__object: Any = ...) -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +else: + @overload + def zip(__iter1: Iterable[_T1]) -> List[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... +def __import__(name: Text, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ..., + fromlist: List[str] = ..., level: int = ...) -> Any: ... + +# Actually the type of Ellipsis is , but since it's +# not exposed anywhere under that name, we make it private here. +class ellipsis: ... +Ellipsis: ellipsis + +if sys.version_info < (3,): + # TODO: buffer support is incomplete; e.g. some_string.startswith(some_buffer) doesn't type check. + _AnyBuffer = TypeVar('_AnyBuffer', str, unicode, bytearray, buffer) + + class buffer(Sized): + def __init__(self, object: _AnyBuffer, offset: int = ..., size: int = ...) -> None: ... + def __add__(self, other: _AnyBuffer) -> str: ... + def __cmp__(self, other: _AnyBuffer) -> bool: ... + def __getitem__(self, key: Union[int, slice]) -> str: ... + def __getslice__(self, i: int, j: int) -> str: ... + def __len__(self) -> int: ... + def __mul__(self, x: int) -> str: ... + +class BaseException(object): + args: Tuple[Any, ...] + if sys.version_info < (3,): + message: Any + if sys.version_info >= (3,): + __cause__: Optional[BaseException] + __context__: Optional[BaseException] + __suppress_context__: bool + __traceback__: Optional[TracebackType] + def __init__(self, *args: object) -> None: ... + if sys.version_info < (3,): + def __getitem__(self, i: int) -> Any: ... + def __getslice__(self, start: int, stop: int) -> Tuple[Any, ...]: ... + if sys.version_info >= (3,): + def with_traceback(self, tb: Optional[TracebackType]) -> BaseException: ... + +class GeneratorExit(BaseException): ... +class KeyboardInterrupt(BaseException): ... +class SystemExit(BaseException): + code: int +class Exception(BaseException): ... +class StopIteration(Exception): + if sys.version_info >= (3,): + value: Any +if sys.version_info >= (3,): + _StandardError = Exception + class OSError(Exception): + errno: int + strerror: str + # filename, filename2 are actually Union[str, bytes, None] + filename: Any + filename2: Any + EnvironmentError = OSError + IOError = OSError +else: + class StandardError(Exception): ... + _StandardError = StandardError + class EnvironmentError(StandardError): + errno: int + strerror: str + # TODO can this be unicode? + filename: str + class OSError(EnvironmentError): ... + class IOError(EnvironmentError): ... + +class ArithmeticError(_StandardError): ... +class AssertionError(_StandardError): ... +class AttributeError(_StandardError): ... +class BufferError(_StandardError): ... +class EOFError(_StandardError): ... +class ImportError(_StandardError): + if sys.version_info >= (3,): + name: str + path: str +class LookupError(_StandardError): ... +class MemoryError(_StandardError): ... +class NameError(_StandardError): ... +class ReferenceError(_StandardError): ... +class RuntimeError(_StandardError): ... +if sys.version_info >= (3, 5): + class StopAsyncIteration(Exception): + value: Any +class SyntaxError(_StandardError): + msg: str + lineno: int + offset: Optional[int] + text: str + filename: str +class SystemError(_StandardError): ... +class TypeError(_StandardError): ... +class ValueError(_StandardError): ... + +class FloatingPointError(ArithmeticError): ... +class OverflowError(ArithmeticError): ... +class ZeroDivisionError(ArithmeticError): ... + +if sys.version_info >= (3, 6): + class ModuleNotFoundError(ImportError): ... + +class IndexError(LookupError): ... +class KeyError(LookupError): ... + +class UnboundLocalError(NameError): ... + +class WindowsError(OSError): + winerror: int +if sys.version_info >= (3,): + class BlockingIOError(OSError): + characters_written: int + class ChildProcessError(OSError): ... + class ConnectionError(OSError): ... + class BrokenPipeError(ConnectionError): ... + class ConnectionAbortedError(ConnectionError): ... + class ConnectionRefusedError(ConnectionError): ... + class ConnectionResetError(ConnectionError): ... + class FileExistsError(OSError): ... + class FileNotFoundError(OSError): ... + class InterruptedError(OSError): ... + class IsADirectoryError(OSError): ... + class NotADirectoryError(OSError): ... + class PermissionError(OSError): ... + class ProcessLookupError(OSError): ... + class TimeoutError(OSError): ... + +class NotImplementedError(RuntimeError): ... +if sys.version_info >= (3, 5): + class RecursionError(RuntimeError): ... + +class IndentationError(SyntaxError): ... +class TabError(IndentationError): ... + +class UnicodeError(ValueError): ... +class UnicodeDecodeError(UnicodeError): + encoding: str + object: bytes + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: bytes, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeEncodeError(UnicodeError): + encoding: str + object: Text + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: Text, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeTranslateError(UnicodeError): ... + +class Warning(Exception): ... +class UserWarning(Warning): ... +class DeprecationWarning(Warning): ... +class SyntaxWarning(Warning): ... +class RuntimeWarning(Warning): ... +class FutureWarning(Warning): ... +class PendingDeprecationWarning(Warning): ... +class ImportWarning(Warning): ... +class UnicodeWarning(Warning): ... +class BytesWarning(Warning): ... +if sys.version_info >= (3, 2): + class ResourceWarning(Warning): ... + +if sys.version_info < (3,): + class file(BinaryIO): + @overload + def __init__(self, file: str, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: unicode, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: int, mode: str = ..., buffering: int = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def __enter__(self) -> BinaryIO: ... + def __exit__(self, t: Optional[type] = ..., exc: Optional[BaseException] = ..., tb: Optional[Any] = ...) -> bool: ... + def flush(self) -> None: ... + def fileno(self) -> int: ... + def isatty(self) -> bool: ... + def close(self) -> None: ... + + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def write(self, data: str) -> int: ... + def writelines(self, data: Iterable[str]) -> None: ... + def truncate(self, pos: Optional[int] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_ast.pyi new file mode 100644 index 0000000..c461bb4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_ast.pyi @@ -0,0 +1,330 @@ +import typing +from typing import Optional + +__version__: str +PyCF_ONLY_AST: int +_identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class ClassDef(stmt): + name: _identifier + bases: typing.List[expr] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class Print(stmt): + dest: Optional[expr] + values: typing.List[expr] + nl: bool + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + context_expr: expr + optional_vars: Optional[expr] + body: typing.List[stmt] + +class Raise(stmt): + type: Optional[expr] + inst: Optional[expr] + tback: Optional[expr] + +class TryExcept(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + +class TryFinally(stmt): + body: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[_identifier] + names: typing.List[alias] + level: Optional[int] + +class Exec(stmt): + body: expr + globals: Optional[expr] + locals: Optional[expr] + +class Global(stmt): + names: typing.List[_identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + +class Ellipsis(slice): ... + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Yield(expr): + value: Optional[expr] + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + starargs: Optional[expr] + kwargs: Optional[expr] + +class Repr(expr): + value: expr + +class Num(expr): + n: float + +class Str(expr): + s: str + +class Attribute(expr): + value: expr + attr: _identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Name(expr): + id: _identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + + +class excepthandler(AST): + ... + + +class ExceptHandler(excepthandler): + type: Optional[expr] + name: Optional[expr] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[expr] + vararg: Optional[_identifier] + kwarg: Optional[_identifier] + defaults: typing.List[expr] + +class keyword(AST): + arg: _identifier + value: expr + +class alias(AST): + name: _identifier + asname: Optional[_identifier] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_collections.pyi new file mode 100644 index 0000000..e24d405 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_collections.pyi @@ -0,0 +1,41 @@ +"""Stub file for the '_collections' module.""" + +from typing import Any, Generic, Iterator, TypeVar, Optional, Union + +class defaultdict(dict): + default_factory: None + def __init__(self, default: Any = ..., init: Any = ...) -> None: ... + def __missing__(self, key) -> Any: + raise KeyError() + def __copy__(self) -> defaultdict: ... + def copy(self) -> defaultdict: ... + +_T = TypeVar('_T') +_T2 = TypeVar('_T2') + +class deque(Generic[_T]): + maxlen: Optional[int] + def __init__(self, iterable: Iterator[_T] = ..., maxlen: int = ...) -> None: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + def count(self, x: Any) -> int: ... + def extend(self, iterable: Iterator[_T]) -> None: ... + def extendleft(self, iterable: Iterator[_T]) -> None: ... + def pop(self) -> _T: + raise IndexError() + def popleft(self) -> _T: + raise IndexError() + def remove(self, value: _T) -> None: + raise IndexError() + def reverse(self) -> None: ... + def rotate(self, n: int = ...) -> None: ... + def __contains__(self, o: Any) -> bool: ... + def __copy__(self) -> deque[_T]: ... + def __getitem__(self, i: int) -> _T: + raise IndexError() + def __iadd__(self, other: deque[_T2]) -> deque[Union[_T, _T2]]: ... + def __iter__(self) -> Iterator[_T]: ... + def __len__(self) -> int: ... + def __reversed__(self) -> Iterator[_T]: ... + def __setitem__(self, i: int, x: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_functools.pyi new file mode 100644 index 0000000..0641885 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_functools.pyi @@ -0,0 +1,87 @@ +"""Stub file for the '_functools' module.""" + +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Tuple, overload + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") + +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi new file mode 100644 index 0000000..8a9c8d7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_hotshot.pyi @@ -0,0 +1,34 @@ +"""Stub file for the '_hotshot' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any, List, Tuple, Dict, Generic + +def coverage(a: str) -> Any: ... + +def logreader(a: str) -> LogReaderType: + raise IOError() + raise RuntimeError() + +def profiler(a: str, *args, **kwargs) -> Any: + raise IOError() + +def resolution() -> tuple: ... + + +class LogReaderType(object): + def close(self) -> None: ... + def fileno(self) -> int: + raise ValueError() + +class ProfilerType(object): + def addinfo(self, a: str, b: str) -> None: ... + def close(self) -> None: ... + def fileno(self) -> int: + raise ValueError() + def runcall(self, *args, **kwargs) -> Any: ... + def runcode(self, a, b, *args, **kwargs) -> Any: + raise TypeError() + def start(self) -> None: ... + def stop(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_io.pyi new file mode 100644 index 0000000..e4e15cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_io.pyi @@ -0,0 +1,183 @@ +from typing import Any, AnyStr, BinaryIO, IO, Text, TextIO, Iterable, Iterator, List, Optional, Type, Tuple, TypeVar, Union +from mmap import mmap +from types import TracebackType + +_bytearray_like = Union[bytearray, mmap] + +DEFAULT_BUFFER_SIZE: int + +class BlockingIOError(IOError): + characters_written: int + +class UnsupportedOperation(ValueError, IOError): ... + +_T = TypeVar("_T") + +class _IOBase(BinaryIO): + @property + def closed(self) -> bool: ... + def _checkClosed(self) -> None: ... + def _checkReadable(self) -> None: ... + def _checkSeekable(self) -> None: ... + def _checkWritable(self) -> None: ... + # All these methods are concrete here (you can instantiate this) + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[Any]) -> bool: ... + def __iter__(self: _T) -> _T: ... + # The parameter type of writelines[s]() is determined by that of write(): + def writelines(self, lines: Iterable[bytes]) -> None: ... + # The return type of readline[s]() and next() is determined by that of read(): + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def next(self) -> bytes: ... + # These don't actually exist but we need to pretend that it does + # so that this class is concrete. + def write(self, s: bytes) -> int: ... + def read(self, n: int = ...) -> bytes: ... + +class _BufferedIOBase(_IOBase): + def read1(self, n: int) -> bytes: ... + def read(self, size: int = ...) -> bytes: ... + def readinto(self, buffer: _bytearray_like) -> int: ... + def write(self, s: bytes) -> int: ... + def detach(self) -> _IOBase: ... + +class BufferedRWPair(_BufferedIOBase): + def __init__(self, reader: _RawIOBase, writer: _RawIOBase, + buffer_size: int = ..., max_buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + def __enter__(self) -> BufferedRWPair: ... + +class BufferedRandom(_BufferedIOBase): + mode: str + name: str + raw: _IOBase + def __init__(self, raw: _IOBase, + buffer_size: int = ..., + max_buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + +class BufferedReader(_BufferedIOBase): + mode: str + name: str + raw: _IOBase + def __init__(self, raw: _IOBase, buffer_size: int = ...) -> None: ... + def peek(self, n: int = ...) -> bytes: ... + +class BufferedWriter(_BufferedIOBase): + name: str + raw: _IOBase + mode: str + def __init__(self, raw: _IOBase, + buffer_size: int = ..., + max_buffer_size: int = ...) -> None: ... + +class BytesIO(_BufferedIOBase): + def __init__(self, initial_bytes: bytes = ...) -> None: ... + def __setstate__(self, tuple) -> None: ... + def __getstate__(self) -> tuple: ... + # BytesIO does not contain a "name" field. This workaround is necessary + # to allow BytesIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> bytes: ... + def write(self, s: bytes) -> int: ... + def writelines(self, lines: Iterable[bytes]) -> None: ... + def read1(self, size: int) -> bytes: ... + def next(self) -> bytes: ... + +class _RawIOBase(_IOBase): + def readall(self) -> str: ... + def read(self, n: int = ...) -> str: ... + +class FileIO(_RawIOBase, BytesIO): + mode: str + closefd: bool + def __init__(self, file: Union[str, int], mode: str = ..., closefd: bool = ...) -> None: ... + def readinto(self, buffer: _bytearray_like) -> int: ... + def write(self, pbuf: str) -> int: ... + +class IncrementalNewlineDecoder(object): + newlines: Union[str, unicode] + def __init__(self, decoder, translate, z=...) -> None: ... + def decode(self, input, final) -> Any: ... + def getstate(self) -> Tuple[Any, int]: ... + def setstate(self, state: Tuple[Any, int]) -> None: ... + def reset(self) -> None: ... + + +# Note: In the actual _io.py, _TextIOBase inherits from _IOBase. +class _TextIOBase(TextIO): + errors: Optional[str] + # TODO: On _TextIOBase, this is always None. But it's unicode/bytes in subclasses. + newlines: Union[None, unicode, bytes] + encoding: str + @property + def closed(self) -> bool: ... + def _checkClosed(self) -> None: ... + def _checkReadable(self) -> None: ... + def _checkSeekable(self) -> None: ... + def _checkWritable(self) -> None: ... + def close(self) -> None: ... + def detach(self) -> IO: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def next(self) -> unicode: ... + def read(self, size: int = ...) -> unicode: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> unicode: ... + def readlines(self, hint: int = ...) -> list[unicode]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, pbuf: unicode) -> int: ... + def writelines(self, lines: Iterable[unicode]) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[Any]) -> bool: ... + def __iter__(self: _T) -> _T: ... + +class StringIO(_TextIOBase): + line_buffering: bool + def __init__(self, + initial_value: Optional[unicode] = ..., + newline: Optional[unicode] = ...) -> None: ... + def __setstate__(self, state: tuple) -> None: ... + def __getstate__(self) -> tuple: ... + # StringIO does not contain a "name" field. This workaround is necessary + # to allow StringIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> unicode: ... + +class TextIOWrapper(_TextIOBase): + name: str + line_buffering: bool + buffer: BinaryIO + _CHUNK_SIZE: int + def __init__(self, buffer: IO, + encoding: Optional[Text] = ..., + errors: Optional[Text] = ..., + newline: Optional[Text] = ..., + line_buffering: bool = ..., + write_through: bool = ...) -> None: ... + +def open(file: Union[str, unicode, int], + mode: Text = ..., + buffering: int = ..., + encoding: Optional[Text] = ..., + errors: Optional[Text] = ..., + newline: Optional[Text] = ..., + closefd: bool = ...) -> IO[Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_json.pyi new file mode 100644 index 0000000..028b7b2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_json.pyi @@ -0,0 +1,17 @@ +"""Stub file for the '_json' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any, List, Tuple, Dict, Generic + +def encode_basestring_ascii(*args, **kwargs) -> str: + raise TypeError() + +def scanstring(a, b, *args, **kwargs) -> tuple: + raise TypeError() + + +class Encoder(object): ... + +class Scanner(object): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_md5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_md5.pyi new file mode 100644 index 0000000..96111b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_md5.pyi @@ -0,0 +1,13 @@ +blocksize: int +digest_size: int + +class MD5Type(object): + name: str + block_size: int + digest_size: int + def copy(self) -> MD5Type: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +def new(arg: str = ...) -> MD5Type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha.pyi new file mode 100644 index 0000000..7c47256 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha.pyi @@ -0,0 +1,15 @@ +blocksize: int +block_size: int +digest_size: int + +class sha(object): # not actually exposed + name: str + block_size: int + digest_size: int + digestsize: int + def copy(self) -> sha: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +def new(arg: str = ...) -> sha: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha256.pyi new file mode 100644 index 0000000..b6eb47d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha256.pyi @@ -0,0 +1,23 @@ +from typing import Optional + +class sha224(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha224: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +class sha256(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha256: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha512.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha512.pyi new file mode 100644 index 0000000..b1ca9ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sha512.pyi @@ -0,0 +1,23 @@ +from typing import Optional + +class sha384(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha384: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... + +class sha512(object): + name: str + block_size: int + digest_size: int + digestsize: int + def __init__(self, init: Optional[str]) -> None: ... + def copy(self) -> sha512: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def update(self, arg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_socket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_socket.pyi new file mode 100644 index 0000000..8d02bde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_socket.pyi @@ -0,0 +1,287 @@ +from typing import Tuple, Union, IO, Any, Optional, overload + +AF_APPLETALK: int +AF_ASH: int +AF_ATMPVC: int +AF_ATMSVC: int +AF_AX25: int +AF_BLUETOOTH: int +AF_BRIDGE: int +AF_DECnet: int +AF_ECONET: int +AF_INET: int +AF_INET6: int +AF_IPX: int +AF_IRDA: int +AF_KEY: int +AF_LLC: int +AF_NETBEUI: int +AF_NETLINK: int +AF_NETROM: int +AF_PACKET: int +AF_PPPOX: int +AF_ROSE: int +AF_ROUTE: int +AF_SECURITY: int +AF_SNA: int +AF_TIPC: int +AF_UNIX: int +AF_UNSPEC: int +AF_WANPIPE: int +AF_X25: int +AI_ADDRCONFIG: int +AI_ALL: int +AI_CANONNAME: int +AI_NUMERICHOST: int +AI_NUMERICSERV: int +AI_PASSIVE: int +AI_V4MAPPED: int +BDADDR_ANY: str +BDADDR_LOCAL: str +BTPROTO_HCI: int +BTPROTO_L2CAP: int +BTPROTO_RFCOMM: int +BTPROTO_SCO: int +EAI_ADDRFAMILY: int +EAI_AGAIN: int +EAI_BADFLAGS: int +EAI_FAIL: int +EAI_FAMILY: int +EAI_MEMORY: int +EAI_NODATA: int +EAI_NONAME: int +EAI_OVERFLOW: int +EAI_SERVICE: int +EAI_SOCKTYPE: int +EAI_SYSTEM: int +EBADF: int +EINTR: int +HCI_DATA_DIR: int +HCI_FILTER: int +HCI_TIME_STAMP: int +INADDR_ALLHOSTS_GROUP: int +INADDR_ANY: int +INADDR_BROADCAST: int +INADDR_LOOPBACK: int +INADDR_MAX_LOCAL_GROUP: int +INADDR_NONE: int +INADDR_UNSPEC_GROUP: int +IPPORT_RESERVED: int +IPPORT_USERRESERVED: int +IPPROTO_AH: int +IPPROTO_DSTOPTS: int +IPPROTO_EGP: int +IPPROTO_ESP: int +IPPROTO_FRAGMENT: int +IPPROTO_GRE: int +IPPROTO_HOPOPTS: int +IPPROTO_ICMP: int +IPPROTO_ICMPV6: int +IPPROTO_IDP: int +IPPROTO_IGMP: int +IPPROTO_IP: int +IPPROTO_IPIP: int +IPPROTO_IPV6: int +IPPROTO_NONE: int +IPPROTO_PIM: int +IPPROTO_PUP: int +IPPROTO_RAW: int +IPPROTO_ROUTING: int +IPPROTO_RSVP: int +IPPROTO_TCP: int +IPPROTO_TP: int +IPPROTO_UDP: int +IPV6_CHECKSUM: int +IPV6_DSTOPTS: int +IPV6_HOPLIMIT: int +IPV6_HOPOPTS: int +IPV6_JOIN_GROUP: int +IPV6_LEAVE_GROUP: int +IPV6_MULTICAST_HOPS: int +IPV6_MULTICAST_IF: int +IPV6_MULTICAST_LOOP: int +IPV6_NEXTHOP: int +IPV6_PKTINFO: int +IPV6_RECVDSTOPTS: int +IPV6_RECVHOPLIMIT: int +IPV6_RECVHOPOPTS: int +IPV6_RECVPKTINFO: int +IPV6_RECVRTHDR: int +IPV6_RECVTCLASS: int +IPV6_RTHDR: int +IPV6_RTHDRDSTOPTS: int +IPV6_RTHDR_TYPE_0: int +IPV6_TCLASS: int +IPV6_UNICAST_HOPS: int +IPV6_V6ONLY: int +IP_ADD_MEMBERSHIP: int +IP_DEFAULT_MULTICAST_LOOP: int +IP_DEFAULT_MULTICAST_TTL: int +IP_DROP_MEMBERSHIP: int +IP_HDRINCL: int +IP_MAX_MEMBERSHIPS: int +IP_MULTICAST_IF: int +IP_MULTICAST_LOOP: int +IP_MULTICAST_TTL: int +IP_OPTIONS: int +IP_RECVOPTS: int +IP_RECVRETOPTS: int +IP_RETOPTS: int +IP_TOS: int +IP_TTL: int +MSG_CTRUNC: int +MSG_DONTROUTE: int +MSG_DONTWAIT: int +MSG_EOR: int +MSG_OOB: int +MSG_PEEK: int +MSG_TRUNC: int +MSG_WAITALL: int +MethodType: type +NETLINK_DNRTMSG: int +NETLINK_FIREWALL: int +NETLINK_IP6_FW: int +NETLINK_NFLOG: int +NETLINK_ROUTE: int +NETLINK_USERSOCK: int +NETLINK_XFRM: int +NI_DGRAM: int +NI_MAXHOST: int +NI_MAXSERV: int +NI_NAMEREQD: int +NI_NOFQDN: int +NI_NUMERICHOST: int +NI_NUMERICSERV: int +PACKET_BROADCAST: int +PACKET_FASTROUTE: int +PACKET_HOST: int +PACKET_LOOPBACK: int +PACKET_MULTICAST: int +PACKET_OTHERHOST: int +PACKET_OUTGOING: int +PF_PACKET: int +SHUT_RD: int +SHUT_RDWR: int +SHUT_WR: int +SOCK_DGRAM: int +SOCK_RAW: int +SOCK_RDM: int +SOCK_SEQPACKET: int +SOCK_STREAM: int +SOL_HCI: int +SOL_IP: int +SOL_SOCKET: int +SOL_TCP: int +SOL_TIPC: int +SOL_UDP: int +SOMAXCONN: int +SO_ACCEPTCONN: int +SO_BROADCAST: int +SO_DEBUG: int +SO_DONTROUTE: int +SO_ERROR: int +SO_KEEPALIVE: int +SO_LINGER: int +SO_OOBINLINE: int +SO_RCVBUF: int +SO_RCVLOWAT: int +SO_RCVTIMEO: int +SO_REUSEADDR: int +SO_REUSEPORT: int +SO_SNDBUF: int +SO_SNDLOWAT: int +SO_SNDTIMEO: int +SO_TYPE: int +SSL_ERROR_EOF: int +SSL_ERROR_INVALID_ERROR_CODE: int +SSL_ERROR_SSL: int +SSL_ERROR_SYSCALL: int +SSL_ERROR_WANT_CONNECT: int +SSL_ERROR_WANT_READ: int +SSL_ERROR_WANT_WRITE: int +SSL_ERROR_WANT_X509_LOOKUP: int +SSL_ERROR_ZERO_RETURN: int +TCP_CORK: int +TCP_DEFER_ACCEPT: int +TCP_INFO: int +TCP_KEEPCNT: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_LINGER2: int +TCP_MAXSEG: int +TCP_NODELAY: int +TCP_QUICKACK: int +TCP_SYNCNT: int +TCP_WINDOW_CLAMP: int +TIPC_ADDR_ID: int +TIPC_ADDR_NAME: int +TIPC_ADDR_NAMESEQ: int +TIPC_CFG_SRV: int +TIPC_CLUSTER_SCOPE: int +TIPC_CONN_TIMEOUT: int +TIPC_CRITICAL_IMPORTANCE: int +TIPC_DEST_DROPPABLE: int +TIPC_HIGH_IMPORTANCE: int +TIPC_IMPORTANCE: int +TIPC_LOW_IMPORTANCE: int +TIPC_MEDIUM_IMPORTANCE: int +TIPC_NODE_SCOPE: int +TIPC_PUBLISHED: int +TIPC_SRC_DROPPABLE: int +TIPC_SUBSCR_TIMEOUT: int +TIPC_SUB_CANCEL: int +TIPC_SUB_PORTS: int +TIPC_SUB_SERVICE: int +TIPC_TOP_SRV: int +TIPC_WAIT_FOREVER: int +TIPC_WITHDRAWN: int +TIPC_ZONE_SCOPE: int + +# PyCapsule +CAPI: Any + +has_ipv6: bool + +class error(IOError): ... +class gaierror(error): ... +class timeout(error): ... + +class SocketType(object): + family: int + type: int + proto: int + timeout: float + + def __init__(self, family: int = ..., type: int = ..., proto: int = ...) -> None: ... + def accept(self) -> Tuple[SocketType, tuple]: ... + def bind(self, address: tuple) -> None: ... + def close(self) -> None: ... + def connect(self, address: tuple) -> None: + raise gaierror + raise timeout + def connect_ex(self, address: tuple) -> int: ... + def dup(self) -> SocketType: ... + def fileno(self) -> int: ... + def getpeername(self) -> tuple: ... + def getsockname(self) -> tuple: ... + def getsockopt(self, level: int, option: int, buffersize: int = ...) -> str: ... + def gettimeout(self) -> float: ... + def listen(self, backlog: int) -> None: + raise error + def makefile(self, mode: str = ..., buffersize: int = ...) -> IO[Any]: ... + def recv(self, buffersize: int, flags: int = ...) -> str: ... + def recv_into(self, buffer: bytearray, nbytes: int = ..., flags: int = ...) -> int: ... + def recvfrom(self, buffersize: int, flags: int = ...) -> tuple: + raise error + def recvfrom_into(self, buffer: bytearray, nbytes: int = ..., + flags: int = ...) -> int: ... + def send(self, data: str, flags: int = ...) -> int: ... + def sendall(self, data: str, flags: int = ...) -> None: ... + @overload + def sendto(self, data: str, address: tuple) -> int: ... + @overload + def sendto(self, data: str, flags: int, address: tuple) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def setsockopt(self, level: int, option: int, value: Union[int, str]) -> None: ... + def settimeout(self, value: Optional[float]) -> None: ... + def shutdown(self, flag: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sre.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sre.pyi new file mode 100644 index 0000000..0692b4c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_sre.pyi @@ -0,0 +1,53 @@ +"""Stub file for the '_sre' module.""" + +from typing import Any, Union, Iterable, Optional, Mapping, Sequence, Dict, List, Tuple, overload + +CODESIZE: int +MAGIC: int +MAXREPEAT: long +copyright: str + +class SRE_Match(object): + def start(self, group: int = ...) -> int: + raise IndexError() + def end(self, group: int = ...) -> int: + raise IndexError() + def expand(self, s: str) -> Any: ... + @overload + def group(self) -> str: ... + @overload + def group(self, group: int = ...) -> Optional[str]: ... + def groupdict(self) -> Dict[int, Optional[str]]: ... + def groups(self) -> Tuple[Optional[str], ...]: ... + def span(self) -> Tuple[int, int]: + raise IndexError() + +class SRE_Scanner(object): + pattern: str + def match(self) -> SRE_Match: ... + def search(self) -> SRE_Match: ... + +class SRE_Pattern(object): + pattern: str + flags: int + groups: int + groupindex: Mapping[str, int] + indexgroup: Sequence[int] + def findall(self, source: str, pos: int = ..., endpos: int = ...) -> List[Union[tuple, str]]: ... + def finditer(self, source: str, pos: int = ..., endpos: int = ...) -> Iterable[Union[tuple, str]]: ... + def match(self, pattern, pos: int = ..., endpos: int = ...) -> SRE_Match: ... + def scanner(self, s: str, start: int = ..., end: int = ...) -> SRE_Scanner: ... + def search(self, pattern, pos: int = ..., endpos: int = ...) -> SRE_Match: ... + def split(self, source: str, maxsplit: int = ...) -> List[Optional[str]]: ... + def sub(self, repl: str, string: str, count: int = ...) -> tuple: ... + def subn(self, repl: str, string: str, count: int = ...) -> tuple: ... + +def compile(pattern: str, flags: int, code: List[int], + groups: int = ..., + groupindex: Mapping[str, int] = ..., + indexgroup: Sequence[int] = ...) -> SRE_Pattern: + raise OverflowError() + +def getcodesize() -> int: ... + +def getlower(a: int, b: int) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_struct.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_struct.pyi new file mode 100644 index 0000000..49f44f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_struct.pyi @@ -0,0 +1,22 @@ +"""Stub file for the '_struct' module.""" + +from typing import Any, AnyStr, Tuple + +class error(Exception): ... + +class Struct(object): + size: int + format: str + + def __init__(self, fmt: str) -> None: ... + def pack_into(self, buffer: bytearray, offset: int, obj: Any) -> None: ... + def pack(self, *args) -> str: ... + def unpack(self, s: str) -> Tuple[Any, ...]: ... + def unpack_from(self, buffer: bytearray, offset: int = ...) -> Tuple[Any, ...]: ... + +def _clearcache() -> None: ... +def calcsize(fmt: str) -> int: ... +def pack(fmt: AnyStr, obj: Any) -> str: ... +def pack_into(fmt: AnyStr, buffer: bytearray, offset: int, obj: Any) -> None: ... +def unpack(fmt: AnyStr, data: str) -> Tuple[Any, ...]: ... +def unpack_from(fmt: AnyStr, buffer: bytearray, offset: int = ...) -> Tuple[Any, ...]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_symtable.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_symtable.pyi new file mode 100644 index 0000000..fbf5424 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_symtable.pyi @@ -0,0 +1,39 @@ +from typing import List, Dict + +CELL: int +DEF_BOUND: int +DEF_FREE: int +DEF_FREE_CLASS: int +DEF_GLOBAL: int +DEF_IMPORT: int +DEF_LOCAL: int +DEF_PARAM: int +FREE: int +GLOBAL_EXPLICIT: int +GLOBAL_IMPLICIT: int +LOCAL: int +OPT_BARE_EXEC: int +OPT_EXEC: int +OPT_IMPORT_STAR: int +SCOPE_MASK: int +SCOPE_OFF: int +TYPE_CLASS: int +TYPE_FUNCTION: int +TYPE_MODULE: int +USE: int + +class _symtable_entry(object): + ... + +class symtable(object): + children: List[_symtable_entry] + id: int + lineno: int + name: str + nested: int + optimized: int + symbols: Dict[str, int] + type: int + varnames: List[str] + + def __init__(self, src: str, filename: str, startstr: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi new file mode 100644 index 0000000..512bf58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_threading_local.pyi @@ -0,0 +1,14 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/_threading_local.py +from typing import Any, List + +__all__: List[str] + +class _localbase(object): ... + +class local(_localbase): + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + def __del__(self) -> None: ... + +def _patch(self: local) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_warnings.pyi new file mode 100644 index 0000000..9609faa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/_warnings.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Optional, Type + +default_action: str +filters: List[tuple] +once_registry: dict + +def warn(message: Warning, category: Optional[Type[Warning]] = ..., stacklevel: int = ...) -> None: ... +def warn_explicit(message: Warning, category: Optional[Type[Warning]], + filename: str, lineno: int, + module: Any = ..., registry: dict = ..., + module_globals: dict = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/abc.pyi new file mode 100644 index 0000000..746f530 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/abc.pyi @@ -0,0 +1,29 @@ +from typing import Any, Dict, Set, Tuple, Type +import _weakrefset + +# NOTE: mypy has special processing for ABCMeta and abstractmethod. + +def abstractmethod(funcobj: Any) -> Any: ... + +class ABCMeta(type): + # TODO: FrozenSet + __abstractmethods__: Set[Any] + _abc_cache: _weakrefset.WeakSet + _abc_invalidation_counter: int + _abc_negative_cache: _weakrefset.WeakSet + _abc_negative_cache_version: int + _abc_registry: _weakrefset.WeakSet + def __init__(self, name: str, bases: Tuple[type, ...], namespace: Dict[Any, Any]) -> None: ... + def __instancecheck__(cls: ABCMeta, instance: Any) -> Any: ... + def __subclasscheck__(cls: ABCMeta, subclass: Any) -> Any: ... + def _dump_registry(cls: ABCMeta, *args: Any, **kwargs: Any) -> None: ... + def register(cls: ABCMeta, subclass: Type[Any]) -> None: ... + +# TODO: The real abc.abstractproperty inherits from "property". +class abstractproperty(object): + def __new__(cls, func: Any) -> Any: ... + __isabstractmethod__: bool + doc: Any + fdel: Any + fget: Any + fset: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ast.pyi new file mode 100644 index 0000000..c5ffd65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/ast.pyi @@ -0,0 +1,28 @@ +# Python 2.7 ast + +# Rename typing to _typing, as not to conflict with typing imported +# from _ast below when loaded in an unorthodox way by the Dropbox +# internal Bazel integration. +import typing as _typing +from typing import Any, Iterator, Optional, Union + +from _ast import * +from _ast import AST, Module + +def parse(source: Union[str, unicode], filename: Union[str, unicode] = ..., mode: Union[str, unicode] = ...) -> Module: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[_typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, unicode, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> Any: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> Optional[AST]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/atexit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/atexit.pyi new file mode 100644 index 0000000..13d2602 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/atexit.pyi @@ -0,0 +1,5 @@ +from typing import TypeVar, Any + +_FT = TypeVar('_FT') + +def register(func: _FT, *args: Any, **kargs: Any) -> _FT: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cPickle.pyi new file mode 100644 index 0000000..0421c50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cPickle.pyi @@ -0,0 +1,32 @@ +from typing import Any, IO, List + +HIGHEST_PROTOCOL: int +compatible_formats: List[str] +format_version: str + +class Pickler: + def __init__(self, file: IO[str], protocol: int = ...) -> None: ... + + def dump(self, obj: Any) -> None: ... + + def clear_memo(self) -> None: ... + + +class Unpickler: + def __init__(self, file: IO[str]) -> None: ... + + def load(self) -> Any: ... + + def noload(self) -> Any: ... + + +def dump(obj: Any, file: IO[str], protocol: int = ...) -> None: ... +def dumps(obj: Any, protocol: int = ...) -> str: ... +def load(file: IO[str]) -> Any: ... +def loads(str: str) -> Any: ... + +class PickleError(Exception): ... +class UnpicklingError(PickleError): ... +class BadPickleGet(UnpicklingError): ... +class PicklingError(PickleError): ... +class UnpickleableError(PicklingError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi new file mode 100644 index 0000000..380e3a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cStringIO.pyi @@ -0,0 +1,54 @@ +# Stubs for cStringIO (Python 2.7) +# See https://docs.python.org/2/library/stringio.html + +from abc import ABCMeta +from typing import overload, IO, List, Iterable, Iterator, Optional, Union +from types import TracebackType + +# TODO the typing.IO[] generics should be split into input and output. + +# This class isn't actually abstract, but you can't instantiate it +# directly, so we might as well treat it as abstract in the stub. +class InputType(IO[str], Iterator[str], metaclass=ABCMeta): + def getvalue(self) -> str: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, size: int = ...) -> str: ... + def readline(self, size: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def __iter__(self) -> InputType: ... + def next(self) -> str: ... + def reset(self) -> None: ... + + +class OutputType(IO[str], Iterator[str], metaclass=ABCMeta): + @property + def softspace(self) -> int: ... + def getvalue(self) -> str: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, size: int = ...) -> str: ... + def readline(self, size: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def __iter__(self) -> OutputType: ... + def next(self) -> str: ... + def reset(self) -> None: ... + def write(self, b: Union[str, unicode]) -> int: ... + def writelines(self, lines: Iterable[Union[str, unicode]]) -> None: ... + +@overload +def StringIO() -> OutputType: ... +@overload +def StringIO(s: str) -> InputType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/collections.pyi new file mode 100644 index 0000000..0daa118 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/collections.pyi @@ -0,0 +1,126 @@ +# These are not exported. +from typing import Dict, Generic, TypeVar, Tuple, overload, Type, Optional, List, Union, Reversible + +# These are exported. +from typing import ( + Callable as Callable, + Container as Container, + Hashable as Hashable, + ItemsView as ItemsView, + Iterable as Iterable, + Iterator as Iterator, + KeysView as KeysView, + Mapping as Mapping, + MappingView as MappingView, + MutableMapping as MutableMapping, + MutableSequence as MutableSequence, + MutableSet as MutableSet, + Sequence as Sequence, + AbstractSet as Set, + Sized as Sized, + ValuesView as ValuesView, +) + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +# namedtuple is special-cased in the type checker; the initializer is ignored. +def namedtuple(typename: Union[str, unicode], field_names: Union[str, unicode, Iterable[Union[str, unicode]]], + verbose: bool = ..., rename: bool = ...) -> Type[tuple]: ... + +class deque(Sized, Iterable[_T], Reversible[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ..., + maxlen: int = ...) -> None: ... + @property + def maxlen(self) -> Optional[int]: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + def count(self, x: _T) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def extendleft(self, iterable: Iterable[_T]) -> None: ... + def pop(self) -> _T: ... + def popleft(self) -> _T: ... + def remove(self, value: _T) -> None: ... + def reverse(self) -> None: ... + def rotate(self, n: int) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + def __getitem__(self, i: int) -> _T: ... + def __setitem__(self, i: int, x: _T) -> None: ... + def __contains__(self, o: _T) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __iadd__(self: _S, iterable: Iterable[_T]) -> _S: ... + +_CounterT = TypeVar('_CounterT', bound=Counter) + +class Counter(Dict[_T, int], Generic[_T]): + @overload + def __init__(self, **kwargs: int) -> None: ... + @overload + def __init__(self, mapping: Mapping[_T, int]) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + def copy(self: _CounterT) -> _CounterT: ... + def elements(self) -> Iterator[_T]: ... + def most_common(self, n: Optional[int] = ...) -> List[Tuple[_T, int]]: ... + @overload + def subtract(self, __mapping: Mapping[_T, int]) -> None: ... + @overload + def subtract(self, iterable: Iterable[_T]) -> None: ... + # The Iterable[Tuple[...]] argument type is not actually desirable + # (the tuples will be added as keys, breaking type safety) but + # it's included so that the signature is compatible with + # Dict.update. Not sure if we should use '# type: ignore' instead + # and omit the type from the union. + @overload + def update(self, __m: Mapping[_T, int], **kwargs: int) -> None: ... + @overload + def update(self, __m: Union[Iterable[_T], Iterable[Tuple[_T, int]]], **kwargs: int) -> None: ... + @overload + def update(self, **kwargs: int) -> None: ... + + def __add__(self, other: Counter[_T]) -> Counter[_T]: ... + def __sub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __and__(self, other: Counter[_T]) -> Counter[_T]: ... + def __or__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iadd__(self, other: Counter[_T]) -> Counter[_T]: ... + def __isub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iand__(self, other: Counter[_T]) -> Counter[_T]: ... + def __ior__(self, other: Counter[_T]) -> Counter[_T]: ... + +_OrderedDictT = TypeVar('_OrderedDictT', bound=OrderedDict) + +class OrderedDict(Dict[_KT, _VT], Reversible[_KT], Generic[_KT, _VT]): + def popitem(self, last: bool = ...) -> Tuple[_KT, _VT]: ... + def copy(self: _OrderedDictT) -> _OrderedDictT: ... + def __reversed__(self) -> Iterator[_KT]: ... + +_DefaultDictT = TypeVar('_DefaultDictT', bound=defaultdict) + +class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): + default_factory: Callable[[], _VT] + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + def __missing__(self, key: _KT) -> _VT: ... + def copy(self: _DefaultDictT) -> _DefaultDictT: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/commands.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/commands.pyi new file mode 100644 index 0000000..e321f08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/commands.pyi @@ -0,0 +1,12 @@ +from typing import overload, AnyStr, Text, Tuple + +def getstatus(file: Text) -> str: ... +def getoutput(cmd: Text) -> str: ... +def getstatusoutput(cmd: Text) -> Tuple[int, str]: ... + +@overload +def mk2arg(head: bytes, x: bytes) -> bytes: ... +@overload +def mk2arg(head: Text, x: Text) -> Text: ... + +def mkarg(x: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/compileall.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/compileall.pyi new file mode 100644 index 0000000..c3e861e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/compileall.pyi @@ -0,0 +1,10 @@ +# Stubs for compileall (Python 2) + +from typing import Optional, Pattern, Union + +_Path = Union[str, bytes] + +# rx can be any object with a 'search' method; once we have Protocols we can change the type +def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ...) -> int: ... +def compile_file(fullname: _Path, ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ...) -> int: ... +def compile_path(skip_curdir: bool = ..., maxlevels: int = ..., force: bool = ..., quiet: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cookielib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cookielib.pyi new file mode 100644 index 0000000..5bc4781 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/cookielib.pyi @@ -0,0 +1,110 @@ +from typing import Any, Optional + +class Cookie: + version: Any + name: Any + value: Any + port: Any + port_specified: Any + domain: Any + domain_specified: Any + domain_initial_dot: Any + path: Any + path_specified: Any + secure: Any + expires: Any + discard: Any + comment: Any + comment_url: Any + rfc2109: Any + def __init__(self, version, name, value, port, port_specified, domain, domain_specified, domain_initial_dot, path, + path_specified, secure, expires, discard, comment, comment_url, rest, rfc2109: bool = ...): ... + def has_nonstandard_attr(self, name): ... + def get_nonstandard_attr(self, name, default: Optional[Any] = ...): ... + def set_nonstandard_attr(self, name, value): ... + def is_expired(self, now: Optional[Any] = ...): ... + +class CookiePolicy: + def set_ok(self, cookie, request): ... + def return_ok(self, cookie, request): ... + def domain_return_ok(self, domain, request): ... + def path_return_ok(self, path, request): ... + +class DefaultCookiePolicy(CookiePolicy): + DomainStrictNoDots: Any + DomainStrictNonDomain: Any + DomainRFC2965Match: Any + DomainLiberal: Any + DomainStrict: Any + netscape: Any + rfc2965: Any + rfc2109_as_netscape: Any + hide_cookie2: Any + strict_domain: Any + strict_rfc2965_unverifiable: Any + strict_ns_unverifiable: Any + strict_ns_domain: Any + strict_ns_set_initial_dollar: Any + strict_ns_set_path: Any + def __init__(self, blocked_domains: Optional[Any] = ..., allowed_domains: Optional[Any] = ..., netscape: bool = ..., + rfc2965: bool = ..., rfc2109_as_netscape: Optional[Any] = ..., hide_cookie2: bool = ..., + strict_domain: bool = ..., strict_rfc2965_unverifiable: bool = ..., strict_ns_unverifiable: bool = ..., + strict_ns_domain=..., strict_ns_set_initial_dollar: bool = ..., strict_ns_set_path: bool = ...): ... + def blocked_domains(self): ... + def set_blocked_domains(self, blocked_domains): ... + def is_blocked(self, domain): ... + def allowed_domains(self): ... + def set_allowed_domains(self, allowed_domains): ... + def is_not_allowed(self, domain): ... + def set_ok(self, cookie, request): ... + def set_ok_version(self, cookie, request): ... + def set_ok_verifiability(self, cookie, request): ... + def set_ok_name(self, cookie, request): ... + def set_ok_path(self, cookie, request): ... + def set_ok_domain(self, cookie, request): ... + def set_ok_port(self, cookie, request): ... + def return_ok(self, cookie, request): ... + def return_ok_version(self, cookie, request): ... + def return_ok_verifiability(self, cookie, request): ... + def return_ok_secure(self, cookie, request): ... + def return_ok_expires(self, cookie, request): ... + def return_ok_port(self, cookie, request): ... + def return_ok_domain(self, cookie, request): ... + def domain_return_ok(self, domain, request): ... + def path_return_ok(self, path, request): ... + +class Absent: ... + +class CookieJar: + non_word_re: Any + quote_re: Any + strict_domain_re: Any + domain_re: Any + dots_re: Any + magic_re: Any + def __init__(self, policy: Optional[Any] = ...): ... + def set_policy(self, policy): ... + def add_cookie_header(self, request): ... + def make_cookies(self, response, request): ... + def set_cookie_if_ok(self, cookie, request): ... + def set_cookie(self, cookie): ... + def extract_cookies(self, response, request): ... + def clear(self, domain: Optional[Any] = ..., path: Optional[Any] = ..., name: Optional[Any] = ...): ... + def clear_session_cookies(self): ... + def clear_expired_cookies(self): ... + def __iter__(self): ... + def __len__(self): ... + +class LoadError(IOError): ... + +class FileCookieJar(CookieJar): + filename: Any + delayload: Any + def __init__(self, filename: Optional[Any] = ..., delayload: bool = ..., policy: Optional[Any] = ...): ... + def save(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + def load(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + def revert(self, filename: Optional[Any] = ..., ignore_discard: bool = ..., ignore_expires: bool = ...): ... + +MozillaCookieJar = FileCookieJar +LWPCookieJar = FileCookieJar +def lwp_cookie_str(cookie: Cookie) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dircache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dircache.pyi new file mode 100644 index 0000000..ac6732b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dircache.pyi @@ -0,0 +1,10 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/dircache.py + +from typing import List, MutableSequence, Text, Union + +def reset() -> None: ... +def listdir(path: Text) -> List[str]: ... + +opendir = listdir + +def annotate(head: Text, list: Union[MutableSequence[str], MutableSequence[Text], MutableSequence[Union[str, Text]]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi new file mode 100644 index 0000000..97e4a29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/distutils/emxccompiler.pyi @@ -0,0 +1,5 @@ +# Stubs for emxccompiler + +from distutils.unixccompiler import UnixCCompiler + +class EMXCCompiler(UnixCCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi new file mode 100644 index 0000000..2804100 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/dummy_thread.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple + +class error(Exception): + def __init__(self, *args: Any) -> None: ... + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> None: ... +def exit() -> NoReturn: ... +def get_ident() -> int: ... +def allocate_lock() -> LockType: ... +def stack_size(size: Optional[int] = ...) -> int: ... + +class LockType(object): + locked_status: bool + def __init__(self) -> None: ... + def acquire(self, waitflag: Optional[bool] = ...) -> bool: ... + def __enter__(self, waitflag: Optional[bool] = ...) -> bool: ... + def __exit__(self, typ: Any, val: Any, tb: Any) -> None: ... + def release(self) -> bool: ... + def locked(self) -> bool: ... + +def interrupt_main() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi new file mode 100644 index 0000000..3b05977 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/MIMEText.pyi @@ -0,0 +1,4 @@ +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text, _subtype=..., _charset=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi new file mode 100644 index 0000000..384d956 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/__init__.pyi @@ -0,0 +1,6 @@ +from typing import IO, Any, AnyStr + +def message_from_string(s: AnyStr, *args, **kwargs): ... +def message_from_bytes(s: str, *args, **kwargs): ... +def message_from_file(fp: IO[AnyStr], *args, **kwargs): ... +def message_from_binary_file(fp: IO[str], *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi new file mode 100644 index 0000000..424ade7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/_parseaddr.pyi @@ -0,0 +1,40 @@ +from typing import Any, Optional + +def parsedate_tz(data): ... +def parsedate(data): ... +def mktime_tz(data): ... +def quote(str): ... + +class AddrlistClass: + specials: Any + pos: Any + LWS: Any + CR: Any + FWS: Any + atomends: Any + phraseends: Any + field: Any + commentlist: Any + def __init__(self, field): ... + def gotonext(self): ... + def getaddrlist(self): ... + def getaddress(self): ... + def getrouteaddr(self): ... + def getaddrspec(self): ... + def getdomain(self): ... + def getdelimited(self, beginchar, endchars, allowcomments: bool = ...): ... + def getquote(self): ... + def getcomment(self): ... + def getdomainliteral(self): ... + def getatom(self, atomends: Optional[Any] = ...): ... + def getphraselist(self): ... + +class AddressList(AddrlistClass): + addresslist: Any + def __init__(self, field): ... + def __len__(self): ... + def __add__(self, other): ... + def __iadd__(self, other): ... + def __sub__(self, other): ... + def __isub__(self, other): ... + def __getitem__(self, index): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi new file mode 100644 index 0000000..f05003b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/base64mime.pyi @@ -0,0 +1,8 @@ +def base64_len(s: bytes) -> int: ... +def header_encode(header, charset=..., keep_eols=..., maxlinelen=..., eol=...): ... +def encode(s, binary=..., maxlinelen=..., eol=...): ... +body_encode = encode +encodestring = encode +def decode(s, convert_eols=...): ... +body_decode = decode +decodestring = decode diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/charset.pyi new file mode 100644 index 0000000..88b5f88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/charset.pyi @@ -0,0 +1,26 @@ +def add_charset(charset, header_enc=..., body_enc=..., output_charset=...) -> None: ... +def add_alias(alias, canonical) -> None: ... +def add_codec(charset, codecname) -> None: ... + +QP: int # undocumented +BASE64: int # undocumented +SHORTEST: int # undocumented + +class Charset: + input_charset = ... + header_encoding = ... + body_encoding = ... + output_charset = ... + input_codec = ... + output_codec = ... + def __init__(self, input_charset=...) -> None: ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def get_body_encoding(self): ... + def convert(self, s): ... + def to_splittable(self, s): ... + def from_splittable(self, ustr, to_output: bool = ...): ... + def get_output_charset(self): ... + def encoded_header_len(self, s): ... + def header_encode(self, s, convert: bool = ...): ... + def body_encode(self, s, convert: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi new file mode 100644 index 0000000..5670cba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/encoders.pyi @@ -0,0 +1,4 @@ +def encode_base64(msg) -> None: ... +def encode_quopri(msg) -> None: ... +def encode_7or8bit(msg) -> None: ... +def encode_noop(msg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi new file mode 100644 index 0000000..51f8259 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/feedparser.pyi @@ -0,0 +1,18 @@ +class BufferedSubFile: + def __init__(self) -> None: ... + def push_eof_matcher(self, pred) -> None: ... + def pop_eof_matcher(self): ... + def close(self) -> None: ... + def readline(self): ... + def unreadline(self, line) -> None: ... + def push(self, data): ... + def pushlines(self, lines) -> None: ... + def is_closed(self): ... + def __iter__(self): ... + def next(self): ... + + +class FeedParser: + def __init__(self, _factory=...) -> None: ... + def feed(self, data) -> None: ... + def close(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/generator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/generator.pyi new file mode 100644 index 0000000..96cfe2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/generator.pyi @@ -0,0 +1,9 @@ +class Generator: + def __init__(self, outfp, mangle_from_: bool = ..., maxheaderlen: int = ...) -> None: ... + def write(self, s) -> None: ... + def flatten(self, msg, unixfrom: bool = ...) -> None: ... + def clone(self, fp): ... + + +class DecodedGenerator(Generator): + def __init__(self, outfp, mangle_from_: bool = ..., maxheaderlen: int = ..., fmt=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/header.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/header.pyi new file mode 100644 index 0000000..69c9363 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/header.pyi @@ -0,0 +1,11 @@ +def decode_header(header): ... +def make_header(decoded_seq, maxlinelen=..., header_name=..., continuation_ws=...): ... + +class Header: + def __init__(self, s=..., charset=..., maxlinelen=..., header_name=..., continuation_ws=..., + errors=...) -> None: ... + def __unicode__(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def append(self, s, charset=..., errors=...) -> None: ... + def encode(self, splitchars=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi new file mode 100644 index 0000000..48aaf06 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/iterators.pyi @@ -0,0 +1,5 @@ +from typing import Generator + +def walk(self) -> Generator: ... +def body_line_iterator(msg, decode: bool = ...) -> Generator: ... +def typed_subpart_iterator(msg, maintype=..., subtype=...) -> Generator: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/message.pyi new file mode 100644 index 0000000..bd3c622 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/message.pyi @@ -0,0 +1,45 @@ +from typing import Generator + +class Message: + preamble = ... + epilogue = ... + defects = ... + def __init__(self): ... + def as_string(self, unixfrom=...): ... + def is_multipart(self) -> bool: ... + def set_unixfrom(self, unixfrom) -> None: ... + def get_unixfrom(self): ... + def attach(self, payload) -> None: ... + def get_payload(self, i=..., decode: bool = ...): ... + def set_payload(self, payload, charset=...) -> None: ... + def set_charset(self, charset): ... + def get_charset(self): ... + def __len__(self): ... + def __getitem__(self, name): ... + def __setitem__(self, name, val) -> None: ... + def __delitem__(self, name) -> None: ... + def __contains__(self, name): ... + def has_key(self, name) -> bool: ... + def keys(self): ... + def values(self): ... + def items(self): ... + def get(self, name, failobj=...): ... + def get_all(self, name, failobj=...): ... + def add_header(self, _name, _value, **_params) -> None: ... + def replace_header(self, _name, _value) -> None: ... + def get_content_type(self): ... + def get_content_maintype(self): ... + def get_content_subtype(self): ... + def get_default_type(self): ... + def set_default_type(self, ctype) -> None: ... + def get_params(self, failobj=..., header=..., unquote: bool = ...): ... + def get_param(self, param, failobj=..., header=..., unquote: bool = ...): ... + def set_param(self, param, value, header=..., requote: bool = ..., charset=..., language=...) -> None: ... + def del_param(self, param, header=..., requote: bool = ...): ... + def set_type(self, type, header=..., requote: bool = ...): ... + def get_filename(self, failobj=...): ... + def get_boundary(self, failobj=...): ... + def set_boundary(self, boundary) -> None: ... + def get_content_charset(self, failobj=...): ... + def get_charsets(self, failobj=...): ... + def walk(self) -> Generator: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi new file mode 100644 index 0000000..99da672 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/application.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.application + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEApplication(MIMENonMultipart): + def __init__(self, _data: bytes, _subtype: str = ..., + _encoder: Callable[[MIMEApplication], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi new file mode 100644 index 0000000..406ade1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/audio.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEAudio(MIMENonMultipart): + def __init__(self, _audiodata, _subtype=..., _encoder=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi new file mode 100644 index 0000000..4bde4f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/base.pyi @@ -0,0 +1,4 @@ +from email import message + +class MIMEBase(message.Message): + def __init__(self, _maintype, _subtype, **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi new file mode 100644 index 0000000..2dfb098 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/image.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEImage(MIMENonMultipart): + def __init__(self, _imagedata, _subtype=..., _encoder=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi new file mode 100644 index 0000000..33552fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/message.pyi @@ -0,0 +1,5 @@ +from email.mime.nonmultipart import MIMENonMultipart + + +class MIMEMessage(MIMENonMultipart): + def __init__(self, _msg, _subtype=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi new file mode 100644 index 0000000..0a7d3fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/multipart.pyi @@ -0,0 +1,4 @@ +from email.mime.base import MIMEBase + +class MIMEMultipart(MIMEBase): + def __init__(self, _subtype=..., boundary=..., _subparts=..., **_params) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi new file mode 100644 index 0000000..04d130e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/nonmultipart.pyi @@ -0,0 +1,4 @@ +from email.mime.base import MIMEBase + +class MIMENonMultipart(MIMEBase): + def attach(self, payload): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi new file mode 100644 index 0000000..3b05977 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/mime/text.pyi @@ -0,0 +1,4 @@ +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text, _subtype=..., _charset=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/parser.pyi new file mode 100644 index 0000000..4f22828 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/parser.pyi @@ -0,0 +1,10 @@ +from .feedparser import FeedParser as FeedParser # not in __all__ but listed in documentation + +class Parser: + def __init__(self, *args, **kws) -> None: ... + def parse(self, fp, headersonly: bool = ...): ... + def parsestr(self, text, headersonly: bool = ...): ... + +class HeaderParser(Parser): + def parse(self, fp, headersonly: bool = ...): ... + def parsestr(self, text, headersonly: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi new file mode 100644 index 0000000..3f2963c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/quoprimime.pyi @@ -0,0 +1,18 @@ +def header_quopri_check(c): ... +def body_quopri_check(c): ... +def header_quopri_len(s): ... +def body_quopri_len(str): ... +def unquote(s): ... +def quote(c): ... +def header_encode(header, charset: str = ..., keep_eols: bool = ..., maxlinelen: int = ..., eol=...): ... +def encode(body, binary: bool = ..., maxlinelen: int = ..., eol=...): ... + +body_encode = encode +encodestring = encode + +def decode(encoded, eol=...): ... + +body_decode = decode +decodestring = decode + +def header_decode(s): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/utils.pyi new file mode 100644 index 0000000..7b868ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/email/utils.pyi @@ -0,0 +1,19 @@ +from email._parseaddr import AddressList as _AddressList +from email._parseaddr import mktime_tz as mktime_tz +from email._parseaddr import parsedate as _parsedate +from email._parseaddr import parsedate_tz as _parsedate_tz +from quopri import decodestring as _qdecode +from typing import Optional, Any + +def formataddr(pair): ... +def getaddresses(fieldvalues): ... +def formatdate(timeval: Optional[Any] = ..., localtime: bool = ..., usegmt: bool = ...): ... +def make_msgid(idstring: Optional[Any] = ...): ... +def parsedate(data): ... +def parsedate_tz(data): ... +def parseaddr(addr): ... +def unquote(str): ... +def decode_rfc2231(s): ... +def encode_rfc2231(s, charset: Optional[Any] = ..., language: Optional[Any] = ...): ... +def decode_params(params): ... +def collapse_rfc2231_value(value, errors=..., fallback_charset=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi new file mode 100644 index 0000000..2ae6c0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/__init__.pyi @@ -0,0 +1,6 @@ +import codecs + +import typing + +def search_function(encoding: str) -> codecs.CodecInfo: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi new file mode 100644 index 0000000..d38bd58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/encodings/utf_8.pyi @@ -0,0 +1,15 @@ +import codecs +from typing import Text, Tuple + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input: Text, final: bool = ...) -> bytes: ... + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input: bytes, errors: str, final: bool) -> Tuple[Text, int]: ... + +class StreamWriter(codecs.StreamWriter): ... +class StreamReader(codecs.StreamReader): ... + +def getregentry() -> codecs.CodecInfo: ... +def encode(input: Text, errors: Text = ...) -> bytes: ... +def decode(input: bytes, errors: Text = ...) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/exceptions.pyi new file mode 100644 index 0000000..6e4bafc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/exceptions.pyi @@ -0,0 +1,48 @@ +from __builtin__ import ArithmeticError as ArithmeticError +from __builtin__ import AssertionError as AssertionError +from __builtin__ import AttributeError as AttributeError +from __builtin__ import BaseException as BaseException +from __builtin__ import BufferError as BufferError +from __builtin__ import BytesWarning as BytesWarning +from __builtin__ import DeprecationWarning as DeprecationWarning +from __builtin__ import EOFError as EOFError +from __builtin__ import EnvironmentError as EnvironmentError +from __builtin__ import Exception as Exception +from __builtin__ import FloatingPointError as FloatingPointError +from __builtin__ import FutureWarning as FutureWarning +from __builtin__ import GeneratorExit as GeneratorExit +from __builtin__ import IOError as IOError +from __builtin__ import ImportError as ImportError +from __builtin__ import ImportWarning as ImportWarning +from __builtin__ import IndentationError as IndentationError +from __builtin__ import IndexError as IndexError +from __builtin__ import KeyError as KeyError +from __builtin__ import KeyboardInterrupt as KeyboardInterrupt +from __builtin__ import LookupError as LookupError +from __builtin__ import MemoryError as MemoryError +from __builtin__ import NameError as NameError +from __builtin__ import NotImplementedError as NotImplementedError +from __builtin__ import OSError as OSError +from __builtin__ import OverflowError as OverflowError +from __builtin__ import PendingDeprecationWarning as PendingDeprecationWarning +from __builtin__ import ReferenceError as ReferenceError +from __builtin__ import RuntimeError as RuntimeError +from __builtin__ import RuntimeWarning as RuntimeWarning +from __builtin__ import StandardError as StandardError +from __builtin__ import StopIteration as StopIteration +from __builtin__ import SyntaxError as SyntaxError +from __builtin__ import SyntaxWarning as SyntaxWarning +from __builtin__ import SystemError as SystemError +from __builtin__ import SystemExit as SystemExit +from __builtin__ import TabError as TabError +from __builtin__ import TypeError as TypeError +from __builtin__ import UnboundLocalError as UnboundLocalError +from __builtin__ import UnicodeError as UnicodeError +from __builtin__ import UnicodeDecodeError as UnicodeDecodeError +from __builtin__ import UnicodeEncodeError as UnicodeEncodeError +from __builtin__ import UnicodeTranslateError as UnicodeTranslateError +from __builtin__ import UnicodeWarning as UnicodeWarning +from __builtin__ import UserWarning as UserWarning +from __builtin__ import ValueError as ValueError +from __builtin__ import Warning as Warning +from __builtin__ import ZeroDivisionError as ZeroDivisionError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fcntl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fcntl.pyi new file mode 100644 index 0000000..5ba64ae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fcntl.pyi @@ -0,0 +1,87 @@ +from typing import Any, Union, IO +import io + +FASYNC: int +FD_CLOEXEC: int + +DN_ACCESS: int +DN_ATTRIB: int +DN_CREATE: int +DN_DELETE: int +DN_MODIFY: int +DN_MULTISHOT: int +DN_RENAME: int +F_DUPFD: int +F_EXLCK: int +F_GETFD: int +F_GETFL: int +F_GETLEASE: int +F_GETLK: int +F_GETLK64: int +F_GETOWN: int +F_GETSIG: int +F_NOTIFY: int +F_RDLCK: int +F_SETFD: int +F_SETFL: int +F_SETLEASE: int +F_SETLK: int +F_SETLK64: int +F_SETLKW: int +F_SETLKW64: int +F_SETOWN: int +F_SETSIG: int +F_SHLCK: int +F_UNLCK: int +F_WRLCK: int +I_ATMARK: int +I_CANPUT: int +I_CKBAND: int +I_FDINSERT: int +I_FIND: int +I_FLUSH: int +I_FLUSHBAND: int +I_GETBAND: int +I_GETCLTIME: int +I_GETSIG: int +I_GRDOPT: int +I_GWROPT: int +I_LINK: int +I_LIST: int +I_LOOK: int +I_NREAD: int +I_PEEK: int +I_PLINK: int +I_POP: int +I_PUNLINK: int +I_PUSH: int +I_RECVFD: int +I_SENDFD: int +I_SETCLTIME: int +I_SETSIG: int +I_SRDOPT: int +I_STR: int +I_SWROPT: int +I_UNLINK: int +LOCK_EX: int +LOCK_MAND: int +LOCK_NB: int +LOCK_READ: int +LOCK_RW: int +LOCK_SH: int +LOCK_UN: int +LOCK_WRITE: int + +_ANYFILE = Union[int, IO] + +# TODO All these return either int or bytes depending on the value of +# cmd (not on the type of arg). +def fcntl(fd: _ANYFILE, op: int, arg: Union[int, bytes] = ...) -> Any: ... + +# TODO: arg: int or read-only buffer interface or read-write buffer interface +def ioctl(fd: _ANYFILE, op: int, arg: Union[int, bytes] = ..., + mutate_flag: bool = ...) -> Any: ... + +def flock(fd: _ANYFILE, op: int) -> None: ... +def lockf(fd: _ANYFILE, op: int, length: int = ..., start: int = ..., + whence: int = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi new file mode 100644 index 0000000..e933b7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/fnmatch.pyi @@ -0,0 +1,8 @@ +from typing import AnyStr, Iterable, List, Union + +_EitherStr = Union[str, unicode] + +def fnmatch(filename: _EitherStr, pattern: _EitherStr) -> bool: ... +def fnmatchcase(filename: _EitherStr, pattern: _EitherStr) -> bool: ... +def filter(names: Iterable[AnyStr], pattern: _EitherStr) -> List[AnyStr]: ... +def translate(pattern: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/functools.pyi new file mode 100644 index 0000000..c12af8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/functools.pyi @@ -0,0 +1,101 @@ +# Stubs for functools (Python 2.7) + +# NOTE: These are incomplete! + +from abc import ABCMeta, abstractmethod +from typing import Any, Callable, Generic, Dict, Iterable, Optional, Sequence, Tuple, TypeVar, overload +from collections import namedtuple + +_AnyCallable = Callable[..., Any] + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... + +WRAPPER_ASSIGNMENTS: Sequence[str] +WRAPPER_UPDATES: Sequence[str] + +def update_wrapper(wrapper: _AnyCallable, wrapped: _AnyCallable, assigned: Sequence[str] = ..., + updated: Sequence[str] = ...) -> _AnyCallable: ... +def wraps(wrapped: _AnyCallable, assigned: Sequence[str] = ..., updated: Sequence[str] = ...) -> Callable[[_AnyCallable], _AnyCallable]: ... +def total_ordering(cls: type) -> type: ... +def cmp_to_key(mycmp: Callable[[_T, _T], int]) -> Callable[[_T], Any]: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi new file mode 100644 index 0000000..a9b25b2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/future_builtins.pyi @@ -0,0 +1,14 @@ +from typing import Any + +from itertools import ifilter as filter +from itertools import imap as map +from itertools import izip as zip + + +def ascii(obj: Any) -> str: ... + + +def hex(x: int) -> str: ... + + +def oct(x: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gc.pyi new file mode 100644 index 0000000..cdfae74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gc.pyi @@ -0,0 +1,29 @@ +# Stubs for gc + +from typing import Any, List, Tuple + + +def enable() -> None: ... +def disable() -> None: ... +def isenabled() -> bool: ... +def collect(generation: int = ...) -> int: ... +def set_debug(flags: int) -> None: ... +def get_debug() -> int: ... +def get_objects() -> List[Any]: ... +def set_threshold(threshold0: int, threshold1: int = ..., + threshold2: int = ...) -> None: ... +def get_count() -> Tuple[int, int, int]: ... +def get_threshold() -> Tuple[int, int, int]: ... +def get_referrers(*objs: Any) -> List[Any]: ... +def get_referents(*objs: Any) -> List[Any]: ... +def is_tracked(obj: Any) -> bool: ... + +garbage: List[Any] + +DEBUG_STATS: int +DEBUG_COLLECTABLE: int +DEBUG_UNCOLLECTABLE: int +DEBUG_INSTANCES: int +DEBUG_OBJECTS: int +DEBUG_SAVEALL: int +DEBUG_LEAK: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getopt.pyi new file mode 100644 index 0000000..370d4d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getopt.pyi @@ -0,0 +1,12 @@ +from typing import List, Tuple + +class GetoptError(Exception): + opt: str + msg: str + def __init__(self, msg: str, opt: str = ...) -> None: ... + def __str__(self) -> str: ... + +error = GetoptError + +def getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... +def gnu_getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getpass.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getpass.pyi new file mode 100644 index 0000000..011fc8e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/getpass.pyi @@ -0,0 +1,8 @@ +# Stubs for getpass (Python 2) + +from typing import Any, IO + +class GetPassWarning(UserWarning): ... + +def getpass(prompt: str = ..., stream: IO[Any] = ...) -> str: ... +def getuser() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gettext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gettext.pyi new file mode 100644 index 0000000..c7bfceb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gettext.pyi @@ -0,0 +1,41 @@ +from typing import Any, Container, Dict, IO, List, Optional, Sequence, Type, Union + +def bindtextdomain(domain: str, localedir: str = ...) -> str: ... +def bind_textdomain_codeset(domain: str, codeset: str = ...) -> str: ... +def textdomain(domain: str = ...) -> str: ... +def gettext(message: str) -> str: ... +def lgettext(message: str) -> str: ... +def dgettext(domain: str, message: str) -> str: ... +def ldgettext(domain: str, message: str) -> str: ... +def ngettext(singular: str, plural: str, n: int) -> str: ... +def lngettext(singular: str, plural: str, n: int) -> str: ... +def dngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def ldngettext(domain: str, singular: str, plural: str, n: int) -> str: ... + +class NullTranslations(object): + def __init__(self, fp: IO[str] = ...) -> None: ... + def _parse(self, fp: IO[str]) -> None: ... + def add_fallback(self, fallback: NullTranslations) -> None: ... + def gettext(self, message: str) -> str: ... + def lgettext(self, message: str) -> str: ... + def ugettext(self, message: Union[str, unicode]) -> unicode: ... + def ngettext(self, singular: str, plural: str, n: int) -> str: ... + def lngettext(self, singular: str, plural: str, n: int) -> str: ... + def ungettext(self, singular: Union[str, unicode], plural: Union[str, unicode], n: int) -> unicode: ... + def info(self) -> Dict[str, str]: ... + def charset(self) -> Optional[str]: ... + def output_charset(self) -> Optional[str]: ... + def set_output_charset(self, charset: Optional[str]) -> None: ... + def install(self, unicode: bool = ..., names: Container[str] = ...) -> None: ... + +class GNUTranslations(NullTranslations): + LE_MAGIC: int + BE_MAGIC: int + +def find(domain: str, localedir: Optional[str] = ..., languages: Optional[Sequence[str]] = ..., + all: Any = ...) -> Optional[Union[str, List[str]]]: ... + +def translation(domain: str, localedir: Optional[str] = ..., languages: Optional[Sequence[str]] = ..., + class_: Optional[Type[NullTranslations]] = ..., fallback: bool = ..., codeset: Optional[str] = ...) -> NullTranslations: ... +def install(domain: str, localedir: Optional[str] = ..., unicode: bool = ..., codeset: Optional[str] = ..., + names: Container[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/glob.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/glob.pyi new file mode 100644 index 0000000..5caa166 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/glob.pyi @@ -0,0 +1,7 @@ +from typing import List, Iterator, Union, AnyStr + +def glob(pathname: AnyStr) -> List[AnyStr]: ... +def iglob(pathname: AnyStr) -> Iterator[AnyStr]: ... +def glob1(dirname: Union[str, unicode], pattern: AnyStr) -> List[AnyStr]: ... +def glob0(dirname: Union[str, unicode], basename: AnyStr) -> List[AnyStr]: ... +def has_magic(s: Union[str, unicode]) -> bool: ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gzip.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gzip.pyi new file mode 100644 index 0000000..50c38e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/gzip.pyi @@ -0,0 +1,37 @@ +from typing import Any, IO, Text +import io + +class GzipFile(io.BufferedIOBase): + myfileobj: Any + max_read_chunk: Any + mode: Any + extrabuf: Any + extrasize: Any + extrastart: Any + name: Any + min_readsize: Any + compress: Any + fileobj: Any + offset: Any + mtime: Any + def __init__(self, filename: str = ..., mode: Text = ..., compresslevel: int = ..., + fileobj: IO[str] = ..., mtime: float = ...) -> None: ... + @property + def filename(self): ... + size: Any + crc: Any + def write(self, data): ... + def read(self, size=...): ... + @property + def closed(self): ... + def close(self): ... + def flush(self, zlib_mode=...): ... + def fileno(self): ... + def rewind(self): ... + def readable(self): ... + def writable(self): ... + def seekable(self): ... + def seek(self, offset, whence=...): ... + def readline(self, size=...): ... + +def open(filename: str, mode: Text = ..., compresslevel: int = ...) -> GzipFile: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/hashlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/hashlib.pyi new file mode 100644 index 0000000..2228820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/hashlib.pyi @@ -0,0 +1,31 @@ +# Stubs for hashlib (Python 2) + +from typing import Tuple, Union + +_DataType = Union[str, unicode, bytearray, buffer, memoryview] + +class _hash(object): # This is not actually in the module namespace. + name: str + block_size = 0 + digest_size = 0 + digestsize = 0 + def __init__(self, arg: _DataType = ...) -> None: ... + def update(self, arg: _DataType) -> None: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def copy(self) -> _hash: ... + +def new(name: str, data: str = ...) -> _hash: ... + +def md5(s: _DataType = ...) -> _hash: ... +def sha1(s: _DataType = ...) -> _hash: ... +def sha224(s: _DataType = ...) -> _hash: ... +def sha256(s: _DataType = ...) -> _hash: ... +def sha384(s: _DataType = ...) -> _hash: ... +def sha512(s: _DataType = ...) -> _hash: ... + +algorithms: Tuple[str, ...] +algorithms_guaranteed: Tuple[str, ...] +algorithms_available: Tuple[str, ...] + +def pbkdf2_hmac(name: str, password: str, salt: str, rounds: int, dklen: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/heapq.pyi new file mode 100644 index 0000000..00abb31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/heapq.pyi @@ -0,0 +1,16 @@ +from typing import TypeVar, List, Iterable, Any, Callable, Optional + +_T = TypeVar('_T') + +def cmp_lt(x, y) -> bool: ... +def heappush(heap: List[_T], item: _T) -> None: ... +def heappop(heap: List[_T]) -> _T: + raise IndexError() # if heap is empty +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapify(x: List[_T]) -> None: ... +def heapreplace(heap: List[_T], item: _T) -> _T: + raise IndexError() # if heap is empty +def merge(*iterables: Iterable[_T]) -> Iterable[_T]: ... +def nlargest(n: int, iterable: Iterable[_T], + key: Optional[Callable[[_T], Any]] = ...) -> List[_T]: ... +def nsmallest(n: int, iterable: Iterable[_T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi new file mode 100644 index 0000000..6ae88e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/htmlentitydefs.pyi @@ -0,0 +1,5 @@ +from typing import Any, Mapping + +name2codepoint: Mapping[str, int] +codepoint2name: Mapping[int, str] +entitydefs: Mapping[str, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/httplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/httplib.pyi new file mode 100644 index 0000000..4e3843c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/httplib.pyi @@ -0,0 +1,205 @@ +# Stubs for httplib (Python 2) +# +# Generated by stubgen and manually massaged a bit. +# Needs lots more work! + +from typing import Any, Dict, Optional, Protocol +import mimetools +import ssl + +class HTTPMessage(mimetools.Message): + def addcontinue(self, key: str, more: str) -> None: ... + dict: Dict[str, str] + def addheader(self, key: str, value: str) -> None: ... + unixfrom: str + headers: Any + status: str + seekable: bool + def readheaders(self) -> None: ... + +class HTTPResponse: + fp: Any + debuglevel: Any + strict: Any + msg: Any + version: Any + status: Any + reason: Any + chunked: Any + chunk_left: Any + length: Any + will_close: Any + def __init__(self, sock, debuglevel: int = ..., strict: int = ..., method: Optional[Any] = ..., + buffering: bool = ...) -> None: ... + def begin(self): ... + def close(self): ... + def isclosed(self): ... + def read(self, amt: Optional[Any] = ...): ... + def fileno(self): ... + def getheader(self, name, default: Optional[Any] = ...): ... + def getheaders(self): ... + +# This is an API stub only for HTTPConnection and HTTPSConnection, as used in +# urllib2.AbstractHTTPHandler.do_open, which takes either the class +# HTTPConnection or the class HTTPSConnection, *not* an instance of either +# class. do_open does not use all of the parameters of HTTPConnection.__init__ +# or HTTPSConnection.__init__, so HTTPConnectionProtocol only implements the +# parameters that do_open does use. +class HTTPConnectionProtocol(Protocol): + def __call__(self, host: str, timeout: int = ..., **http_con_args: Any) -> HTTPConnection: ... + +class HTTPConnection: + response_class: Any + default_port: Any + auto_open: Any + debuglevel: Any + strict: Any + timeout: Any + source_address: Any + sock: Any + host: str = ... + port: int = ... + def __init__(self, host, port: Optional[Any] = ..., strict: Optional[Any] = ..., timeout=..., + source_address: Optional[Any] = ...) -> None: ... + def set_tunnel(self, host, port: Optional[Any] = ..., headers: Optional[Any] = ...): ... + def set_debuglevel(self, level): ... + def connect(self): ... + def close(self): ... + def send(self, data): ... + def putrequest(self, method, url, skip_host: int = ..., skip_accept_encoding: int = ...): ... + def putheader(self, header, *values): ... + def endheaders(self, message_body: Optional[Any] = ...): ... + def request(self, method, url, body: Optional[Any] = ..., headers=...): ... + def getresponse(self, buffering: bool = ...): ... + +class HTTP: + debuglevel: Any + def __init__(self, host: str = ..., port: Optional[Any] = ..., strict: Optional[Any] = ...) -> None: ... + def connect(self, host: Optional[Any] = ..., port: Optional[Any] = ...): ... + def getfile(self): ... + file: Any + headers: Any + def getreply(self, buffering: bool = ...): ... + def close(self): ... + +class HTTPSConnection(HTTPConnection): + default_port: Any + key_file: Any + cert_file: Any + def __init__(self, host, port: Optional[Any] = ..., key_file: Optional[Any] = ..., cert_file: Optional[Any] = ..., + strict: Optional[Any] = ..., timeout=..., source_address: Optional[Any] = ..., + context: Optional[Any] = ...) -> None: ... + sock: Any + def connect(self): ... + +class HTTPS(HTTP): + key_file: Any + cert_file: Any + def __init__(self, host: str = ..., port: Optional[Any] = ..., key_file: Optional[Any] = ..., cert_file: Optional[Any] = ..., strict: Optional[Any] = ..., context: Optional[Any] = ...) -> None: ... + +class HTTPException(Exception): ... +class NotConnected(HTTPException): ... +class InvalidURL(HTTPException): ... + +class UnknownProtocol(HTTPException): + args: Any + version: Any + def __init__(self, version) -> None: ... + +class UnknownTransferEncoding(HTTPException): ... +class UnimplementedFileMode(HTTPException): ... + +class IncompleteRead(HTTPException): + args: Any + partial: Any + expected: Any + def __init__(self, partial, expected: Optional[Any] = ...) -> None: ... + +class ImproperConnectionState(HTTPException): ... +class CannotSendRequest(ImproperConnectionState): ... +class CannotSendHeader(ImproperConnectionState): ... +class ResponseNotReady(ImproperConnectionState): ... + +class BadStatusLine(HTTPException): + args: Any + line: Any + def __init__(self, line) -> None: ... + +class LineTooLong(HTTPException): + def __init__(self, line_type) -> None: ... + +error: Any + +class LineAndFileWrapper: + def __init__(self, line, file) -> None: ... + def __getattr__(self, attr): ... + def read(self, amt: Optional[Any] = ...): ... + def readline(self): ... + def readlines(self, size: Optional[Any] = ...): ... + +# Constants + +responses: Dict[int, str] + +HTTP_PORT: int +HTTPS_PORT: int + +# status codes +# informational +CONTINUE: int +SWITCHING_PROTOCOLS: int +PROCESSING: int + +# successful +OK: int +CREATED: int +ACCEPTED: int +NON_AUTHORITATIVE_INFORMATION: int +NO_CONTENT: int +RESET_CONTENT: int +PARTIAL_CONTENT: int +MULTI_STATUS: int +IM_USED: int + +# redirection +MULTIPLE_CHOICES: int +MOVED_PERMANENTLY: int +FOUND: int +SEE_OTHER: int +NOT_MODIFIED: int +USE_PROXY: int +TEMPORARY_REDIRECT: int + +# client error +BAD_REQUEST: int +UNAUTHORIZED: int +PAYMENT_REQUIRED: int +FORBIDDEN: int +NOT_FOUND: int +METHOD_NOT_ALLOWED: int +NOT_ACCEPTABLE: int +PROXY_AUTHENTICATION_REQUIRED: int +REQUEST_TIMEOUT: int +CONFLICT: int +GONE: int +LENGTH_REQUIRED: int +PRECONDITION_FAILED: int +REQUEST_ENTITY_TOO_LARGE: int +REQUEST_URI_TOO_LONG: int +UNSUPPORTED_MEDIA_TYPE: int +REQUESTED_RANGE_NOT_SATISFIABLE: int +EXPECTATION_FAILED: int +UNPROCESSABLE_ENTITY: int +LOCKED: int +FAILED_DEPENDENCY: int +UPGRADE_REQUIRED: int + +# server error +INTERNAL_SERVER_ERROR: int +NOT_IMPLEMENTED: int +BAD_GATEWAY: int +SERVICE_UNAVAILABLE: int +GATEWAY_TIMEOUT: int +HTTP_VERSION_NOT_SUPPORTED: int +INSUFFICIENT_STORAGE: int +NOT_EXTENDED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/imp.pyi new file mode 100644 index 0000000..409fecb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/imp.pyi @@ -0,0 +1,35 @@ +"""Stubs for the 'imp' module.""" + +from typing import List, Optional, Tuple, Iterable, IO, Any +import types + +C_BUILTIN: int +C_EXTENSION: int +IMP_HOOK: int +PKG_DIRECTORY: int +PY_CODERESOURCE: int +PY_COMPILED: int +PY_FROZEN: int +PY_RESOURCE: int +PY_SOURCE: int +SEARCH_ERROR: int + +def acquire_lock() -> None: ... +def find_module(name: str, path: Iterable[str] = ...) -> Optional[Tuple[str, str, Tuple[str, str, int]]]: ... +def get_magic() -> str: ... +def get_suffixes() -> List[Tuple[str, str, int]]: ... +def init_builtin(name: str) -> types.ModuleType: ... +def init_frozen(name: str) -> types.ModuleType: ... +def is_builtin(name: str) -> int: ... +def is_frozen(name: str) -> bool: ... +def load_compiled(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def load_dynamic(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def load_module(name: str, file: str, pathname: str, description: Tuple[str, str, int]) -> types.ModuleType: ... +def load_source(name: str, pathname: str, file: IO[Any] = ...) -> types.ModuleType: ... +def lock_held() -> bool: ... +def new_module(name: str) -> types.ModuleType: ... +def release_lock() -> None: ... + +class NullImporter: + def __init__(self, path_string: str) -> None: ... + def find_module(self, fullname: str, path: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/importlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/importlib.pyi new file mode 100644 index 0000000..8bb179a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/importlib.pyi @@ -0,0 +1,4 @@ +import types +from typing import Optional, Text + +def import_module(name: Text, package: Optional[Text] = ...) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/inspect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/inspect.pyi new file mode 100644 index 0000000..8bc2eac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/inspect.pyi @@ -0,0 +1,135 @@ +from types import CodeType, TracebackType, FrameType, ModuleType +from typing import Any, Dict, Callable, List, NamedTuple, Optional, Sequence, Tuple, Type, Union + +# Types and members +class EndOfBlock(Exception): ... + +class BlockFinder: + indent: int + islambda: bool + started: bool + passline: bool + last: int + def tokeneater(self, type: int, token: str, srow_scol: Tuple[int, int], + erow_ecol: Tuple[int, int], line: str) -> None: ... + +CO_GENERATOR: int +CO_NESTED: int +CO_NEWLOCALS: int +CO_NOFREE: int +CO_OPTIMIZED: int +CO_VARARGS: int +CO_VARKEYWORDS: int +TPFLAGS_IS_ABSTRACT: int + +ModuleInfo = NamedTuple('ModuleInfo', [('name', str), + ('suffix', str), + ('mode', str), + ('module_type', int), + ]) +def getmembers( + object: object, + predicate: Optional[Callable[[Any], bool]] = ... +) -> List[Tuple[str, Any]]: ... +def getmoduleinfo(path: str) -> Optional[ModuleInfo]: ... +def getmodulename(path: str) -> Optional[str]: ... + +def ismodule(object: object) -> bool: ... +def isclass(object: object) -> bool: ... +def ismethod(object: object) -> bool: ... +def isfunction(object: object) -> bool: ... +def isgeneratorfunction(object: object) -> bool: ... +def isgenerator(object: object) -> bool: ... +def istraceback(object: object) -> bool: ... +def isframe(object: object) -> bool: ... +def iscode(object: object) -> bool: ... +def isbuiltin(object: object) -> bool: ... +def isroutine(object: object) -> bool: ... +def isabstract(object: object) -> bool: ... +def ismethoddescriptor(object: object) -> bool: ... +def isdatadescriptor(object: object) -> bool: ... +def isgetsetdescriptor(object: object) -> bool: ... +def ismemberdescriptor(object: object) -> bool: ... + +# Retrieving source code +def findsource(object: object) -> Tuple[List[str], int]: ... +def getabsfile(object: object) -> str: ... +def getblock(lines: Sequence[str]) -> Sequence[str]: ... +def getdoc(object: object) -> str: ... +def getcomments(object: object) -> str: ... +def getfile(object: object) -> str: ... +def getmodule(object: object) -> ModuleType: ... +def getsourcefile(object: object) -> str: ... +# TODO restrict to "module, class, method, function, traceback, frame, +# or code object" +def getsourcelines(object: object) -> Tuple[List[str], int]: ... +# TODO restrict to "a module, class, method, function, traceback, frame, +# or code object" +def getsource(object: object) -> str: ... +def cleandoc(doc: str) -> str: ... +def indentsize(line: str) -> int: ... + +# Classes and functions +def getclasstree(classes: List[type], unique: bool = ...) -> List[ + Union[Tuple[type, Tuple[type, ...]], list]]: ... + +ArgSpec = NamedTuple('ArgSpec', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('defaults', tuple), + ]) + +ArgInfo = NamedTuple('ArgInfo', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('locals', Dict[str, Any]), + ]) + +Arguments = NamedTuple('Arguments', [('args', List[Union[str, List[Any]]]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ]) + +def getargs(co: CodeType) -> Arguments: ... +def getargspec(func: object) -> ArgSpec: ... +def getargvalues(frame: FrameType) -> ArgInfo: ... +def formatargspec(args, varargs=..., varkw=..., defaults=..., + formatarg=..., formatvarargs=..., formatvarkw=..., formatvalue=..., + join=...) -> str: ... +def formatargvalues(args, varargs=..., varkw=..., defaults=..., + formatarg=..., formatvarargs=..., formatvarkw=..., formatvalue=..., + join=...) -> str: ... +def getmro(cls: type) -> Tuple[type, ...]: ... +def getcallargs(func, *args, **kwds) -> Dict[str, Any]: ... + +# The interpreter stack + +Traceback = NamedTuple( + 'Traceback', + [ + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ] +) + +_FrameInfo = Tuple[FrameType, str, int, str, List[str], int] + +def getouterframes(frame: FrameType, context: int = ...) -> List[_FrameInfo]: ... +def getframeinfo(frame: Union[FrameType, TracebackType], context: int = ...) -> Traceback: ... +def getinnerframes(traceback: TracebackType, context: int = ...) -> List[_FrameInfo]: ... +def getlineno(frame: FrameType) -> int: ... + +def currentframe(depth: int = ...) -> FrameType: ... +def stack(context: int = ...) -> List[_FrameInfo]: ... +def trace(context: int = ...) -> List[_FrameInfo]: ... + +Attribute = NamedTuple('Attribute', [('name', str), + ('kind', str), + ('defining_class', type), + ('object', object), + ]) + +def classify_class_attrs(cls: type) -> List[Attribute]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/io.pyi new file mode 100644 index 0000000..1ab6b90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/io.pyi @@ -0,0 +1,42 @@ +# Stubs for io + +# Based on https://docs.python.org/2/library/io.html + +# Only a subset of functionality is included. + +from typing import List, BinaryIO, TextIO, IO, overload, Iterator, Iterable, Any, Union, Optional +import _io + +from _io import BlockingIOError as BlockingIOError +from _io import BufferedRWPair as BufferedRWPair +from _io import BufferedRandom as BufferedRandom +from _io import BufferedReader as BufferedReader +from _io import BufferedWriter as BufferedWriter +from _io import BytesIO as BytesIO +from _io import DEFAULT_BUFFER_SIZE as DEFAULT_BUFFER_SIZE +from _io import FileIO as FileIO +from _io import IncrementalNewlineDecoder as IncrementalNewlineDecoder +from _io import StringIO as StringIO +from _io import TextIOWrapper as TextIOWrapper +from _io import UnsupportedOperation as UnsupportedOperation +from _io import open as open + +def _OpenWrapper(file: Union[str, unicode, int], + mode: unicode = ..., buffering: int = ..., encoding: unicode = ..., + errors: unicode = ..., newline: unicode = ..., + closefd: bool = ...) -> IO[Any]: ... + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + + +class IOBase(_io._IOBase): ... + +class RawIOBase(_io._RawIOBase, IOBase): ... + +class BufferedIOBase(_io._BufferedIOBase, IOBase): ... + +# Note: In the actual io.py, TextIOBase subclasses IOBase. +# (Which we don't do here because we don't want to subclass both TextIO and BinaryIO.) +class TextIOBase(_io._TextIOBase): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/itertools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/itertools.pyi new file mode 100644 index 0000000..1c8522c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/itertools.pyi @@ -0,0 +1,165 @@ +# Stubs for itertools + +# Based on https://docs.python.org/2/library/itertools.html + +from typing import (Iterator, TypeVar, Iterable, overload, Any, Callable, Tuple, + Union, Sequence, Generic, Optional) + +_T = TypeVar('_T') +_S = TypeVar('_S') + +def count(start: int = ..., + step: int = ...) -> Iterator[int]: ... # more general types? +def cycle(iterable: Iterable[_T]) -> Iterator[_T]: ... + +def repeat(object: _T, times: int = ...) -> Iterator[_T]: ... + +def accumulate(iterable: Iterable[_T]) -> Iterator[_T]: ... + +class chain(Iterator[_T], Generic[_T]): + def __init__(self, *iterables: Iterable[_T]) -> None: ... + def next(self) -> _T: ... + def __iter__(self) -> Iterator[_T]: ... + @staticmethod + def from_iterable(iterable: Iterable[Iterable[_S]]) -> Iterator[_S]: ... + +def compress(data: Iterable[_T], selectors: Iterable[Any]) -> Iterator[_T]: ... +def dropwhile(predicate: Callable[[_T], Any], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def ifilter(predicate: Optional[Callable[[_T], Any]], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def ifilterfalse(predicate: Optional[Callable[[_T], Any]], + iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def groupby(iterable: Iterable[_T], key: None = ...) -> Iterator[Tuple[_T, Iterator[_T]]]: ... +@overload +def groupby(iterable: Iterable[_T], key: Callable[[_T], _S]) -> Iterator[Tuple[_S, Iterator[_T]]]: ... + +@overload +def islice(iterable: Iterable[_T], stop: Optional[int]) -> Iterator[_T]: ... +@overload +def islice(iterable: Iterable[_T], start: Optional[int], stop: Optional[int], + step: Optional[int] = ...) -> Iterator[_T]: ... + +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_T6 = TypeVar('_T6') + +@overload +def imap(func: Callable[[_T1], _S], iter1: Iterable[_T1]) -> Iterator[_S]: ... +@overload +def imap(func: Callable[[_T1, _T2], _S], + iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[_S]: ... +@overload +def imap(func: Callable[[_T1, _T2, _T3], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4], iter5: Iterable[_T5]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[[_T1, _T2, _T3, _T4, _T5, _T6], _S], + iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4], iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[_S]: ... + +@overload +def imap(func: Callable[..., _S], + iter1: Iterable[Any], iter2: Iterable[Any], iter3: Iterable[Any], + iter4: Iterable[Any], iter5: Iterable[Any], iter6: Iterable[Any], + iter7: Iterable[Any], *iterables: Iterable[Any]) -> Iterator[_S]: ... + +def starmap(func: Any, iterable: Iterable[Any]) -> Iterator[Any]: ... +def takewhile(predicate: Callable[[_T], Any], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def tee(iterable: Iterable[_T], n: int = ...) -> Tuple[Iterator[_T], ...]: ... + +@overload +def izip(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def izip(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, + _T3, _T4, _T5]]: ... +@overload +def izip(iter1: Iterable[_T1], iter2: Iterable[_T2], + iter3: Iterable[_T3], iter4: Iterable[_T4], + iter5: Iterable[_T5], iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, + _T4, _T5, _T6]]: ... +@overload +def izip(iter1: Iterable[Any], iter2: Iterable[Any], + iter3: Iterable[Any], iter4: Iterable[Any], + iter5: Iterable[Any], iter6: Iterable[Any], + iter7: Iterable[Any], *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... + +def izip_longest(*p: Iterable[Any], + fillvalue: Any = ...) -> Iterator[Any]: ... + +@overload +def product(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... +@overload +def product(iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + iter7: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +@overload +def product(*iterables: Iterable[Any], repeat: int) -> Iterator[Tuple[Any, ...]]: ... + +def permutations(iterable: Iterable[_T], + r: int = ...) -> Iterator[Sequence[_T]]: ... +def combinations(iterable: Iterable[_T], + r: int) -> Iterator[Sequence[_T]]: ... +def combinations_with_replacement(iterable: Iterable[_T], + r: int) -> Iterator[Sequence[_T]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/json.pyi new file mode 100644 index 0000000..9cc151b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/json.pyi @@ -0,0 +1,96 @@ +from typing import Any, IO, Optional, Tuple, Callable, Dict, List, Union, Text, Protocol + +class JSONDecodeError(ValueError): + def dumps(self, obj: Any) -> str: ... + def dump(self, obj: Any, fp: IO[str], *args: Any, **kwds: Any) -> None: ... + def loads(self, s: str) -> Any: ... + def load(self, fp: IO[str]) -> Any: ... + +def dumps(obj: Any, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Optional[int] = ..., + separators: Optional[Tuple[str, str]] = ..., + encoding: str = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> str: ... + +def dump(obj: Any, + fp: Union[IO[str], IO[Text]], + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Optional[int] = ..., + separators: Optional[Tuple[str, str]] = ..., + encoding: str = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> None: ... + +def loads(s: Union[Text, bytes], + encoding: Any = ..., + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class _Reader(Protocol): + def read(self) -> Union[Text, bytes]: ... + +def load(fp: _Reader, + encoding: Optional[str] = ..., + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class JSONDecoder(object): + def __init__(self, + encoding: Union[Text, bytes] = ..., + object_hook: Callable[..., Any] = ..., + parse_float: Callable[[str], float] = ..., + parse_int: Callable[[str], int] = ..., + parse_constant: Callable[[str], Any] = ..., + strict: bool = ..., + object_pairs_hook: Callable[..., Any] = ...) -> None: ... + def decode(self, s: Union[Text, bytes], _w: Any = ...) -> Any: ... + def raw_decode(self, s: Union[Text, bytes], idx: int = ...) -> Tuple[Any, Any]: ... + +class JSONEncoder(object): + item_separator: str + key_separator: str + skipkeys: bool + ensure_ascii: bool + check_circular: bool + allow_nan: bool + sort_keys: bool + indent: Optional[int] + + def __init__(self, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + sort_keys: bool = ..., + indent: Optional[int] = ..., + separators: Tuple[Union[Text, bytes], Union[Text, bytes]] = ..., + encoding: Union[Text, bytes] = ..., + default: Callable[..., Any] = ...) -> None: ... + + def default(self, o: Any) -> Any: ... + + def encode(self, o: Any) -> str: ... + + def iterencode(self, o: Any, _one_shot: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/markupbase.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/markupbase.pyi new file mode 100644 index 0000000..358ba16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/markupbase.pyi @@ -0,0 +1,9 @@ +from typing import Tuple + +class ParserBase(object): + def __init__(self) -> None: ... + def error(self, message: str) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + + def unknown_decl(self, data: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/md5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/md5.pyi new file mode 100644 index 0000000..fe6ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/md5.pyi @@ -0,0 +1,6 @@ +# Stubs for Python 2.7 md5 stdlib module + +from hashlib import md5 as md5, md5 as new + +blocksize = 0 +digest_size = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mimetools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mimetools.pyi new file mode 100644 index 0000000..f565202 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mimetools.pyi @@ -0,0 +1,27 @@ +from typing import Any +import rfc822 + +class Message(rfc822.Message): + encodingheader: Any + typeheader: Any + def __init__(self, fp, seekable: int = ...): ... + plisttext: Any + type: Any + maintype: Any + subtype: Any + def parsetype(self): ... + plist: Any + def parseplist(self): ... + def getplist(self): ... + def getparam(self, name): ... + def getparamnames(self): ... + def getencoding(self): ... + def gettype(self): ... + def getmaintype(self): ... + def getsubtype(self): ... + +def choose_boundary(): ... +def decode(input, output, encoding): ... +def encode(input, output, encoding): ... +def copyliteral(input, output): ... +def copybinary(input, output): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi new file mode 100644 index 0000000..fb00b24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/__init__.pyi @@ -0,0 +1,50 @@ +from typing import Any, Callable, Optional, TypeVar, Iterable + +from multiprocessing import pool +from multiprocessing.process import Process as Process, current_process as current_process, active_children as active_children +from multiprocessing.util import SUBDEBUG as SUBDEBUG, SUBWARNING as SUBWARNING +from Queue import Queue as _BaseQueue + +class ProcessError(Exception): ... +class BufferTooShort(ProcessError): ... +class TimeoutError(ProcessError): ... +class AuthenticationError(ProcessError): ... + +_T = TypeVar('_T') + +class Queue(_BaseQueue[_T]): + def __init__(self, maxsize: int = ...) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put_nowait(self, item: _T) -> None: ... + def get_nowait(self) -> _T: ... + def close(self) -> None: ... + def join_thread(self) -> None: ... + def cancel_join_thread(self) -> None: ... + +def Manager(): ... +def Pipe(duplex: bool = ...): ... +def cpu_count() -> int: ... +def freeze_support(): ... +def get_logger(): ... +def log_to_stderr(level: Optional[Any] = ...): ... +def allow_connection_pickling(): ... +def Lock(): ... +def RLock(): ... +def Condition(lock: Optional[Any] = ...): ... +def Semaphore(value: int = ...): ... +def BoundedSemaphore(value: int = ...): ... +def Event(): ... +def JoinableQueue(maxsize: int = ...): ... +def RawValue(typecode_or_type, *args): ... +def RawArray(typecode_or_type, size_or_initializer): ... +def Value(typecode_or_type, *args, **kwds): ... +def Array(typecode_or_type, size_or_initializer, **kwds): ... + +def Pool(processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> pool.Pool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi new file mode 100644 index 0000000..e8e02eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/__init__.pyi @@ -0,0 +1,51 @@ +from typing import Any, Optional, List, Type + +import threading +import sys +import weakref +import array +import itertools + +from multiprocessing import TimeoutError, cpu_count +from multiprocessing.dummy.connection import Pipe +from threading import Lock, RLock, Semaphore, BoundedSemaphore +from threading import Event +from Queue import Queue + + +class DummyProcess(threading.Thread): + _children: weakref.WeakKeyDictionary + _parent: threading.Thread + _pid: None + _start_called: bool + def __init__(self, group=..., target=..., name=..., args=..., kwargs=...) -> None: ... + @property + def exitcode(self) -> Optional[int]: ... + + +Process = DummyProcess + +# This should be threading._Condition but threading.pyi exports it as Condition +class Condition(threading.Condition): + notify_all: Any + +class Namespace(object): + def __init__(self, **kwds) -> None: ... + +class Value(object): + _typecode: Any + _value: Any + value: Any + def __init__(self, typecode, value, lock=...) -> None: ... + def _get(self) -> Any: ... + def _set(self, value) -> None: ... + +JoinableQueue = Queue + +def Array(typecode, sequence, lock=...) -> array.array: ... +def Manager() -> Any: ... +def Pool(processes=..., initializer=..., initargs=...) -> Any: ... +def active_children() -> List: ... +def current_process() -> threading.Thread: ... +def freeze_support() -> None: ... +def shutdown() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi new file mode 100644 index 0000000..a7a4f99 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/dummy/connection.pyi @@ -0,0 +1,26 @@ +from Queue import Queue +from typing import Any, List, Optional, Tuple, Type + +families: List[None] + +class Connection(object): + _in: Any + _out: Any + recv: Any + recv_bytes: Any + send: Any + send_bytes: Any + def __init__(self, _in, _out) -> None: ... + def close(self) -> None: ... + def poll(self, timeout=...) -> Any: ... + +class Listener(object): + _backlog_queue: Optional[Queue] + address: Any + def __init__(self, address=..., family=..., backlog=...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + + +def Client(address) -> Connection: ... +def Pipe(duplex=...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi new file mode 100644 index 0000000..4001a5a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/pool.pyi @@ -0,0 +1,59 @@ +from typing import ( + Any, Callable, ContextManager, Iterable, Optional, Dict, List, + TypeVar, Iterator, +) + +_T = TypeVar('_T', bound=Pool) + +class AsyncResult(): + def get(self, timeout: Optional[float] = ...) -> Any: ... + def wait(self, timeout: Optional[float] = ...) -> None: ... + def ready(self) -> bool: ... + def successful(self) -> bool: ... + +class IMapIterator(Iterator[Any]): + def __iter__(self) -> Iterator[Any]: ... + def next(self, timeout: Optional[float] = ...) -> Any: ... + +class IMapUnorderedIterator(IMapIterator): ... + +class Pool(ContextManager[Pool]): + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> None: ... + def apply(self, + func: Callable[..., Any], + args: Iterable[Any] = ..., + kwds: Dict[str, Any] = ...) -> Any: ... + def apply_async(self, + func: Callable[..., Any], + args: Iterable[Any] = ..., + kwds: Dict[str, Any] = ..., + callback: Optional[Callable[..., None]] = ...) -> AsyncResult: ... + def map(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> List[Any]: ... + def map_async(self, func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[..., None]] = ...) -> AsyncResult: ... + def imap(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> IMapIterator: ... + def imap_unordered(self, + func: Callable[..., Any], + iterable: Iterable[Any] = ..., + chunksize: Optional[int] = ...) -> IMapIterator: ... + def close(self) -> None: ... + def terminate(self) -> None: ... + def join(self) -> None: ... + def __enter__(self: _T) -> _T: ... + +class ThreadPool(Pool, ContextManager[ThreadPool]): + + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi new file mode 100644 index 0000000..476b403 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/process.pyi @@ -0,0 +1,36 @@ +from typing import Any, Optional + +def current_process(): ... +def active_children(): ... + +class Process: + def __init__(self, group: Optional[Any] = ..., target: Optional[Any] = ..., name: Optional[Any] = ..., args=..., + kwargs=...): ... + def run(self): ... + def start(self): ... + def terminate(self): ... + def join(self, timeout: Optional[Any] = ...): ... + def is_alive(self): ... + @property + def name(self): ... + @name.setter + def name(self, name): ... + @property + def daemon(self): ... + @daemon.setter + def daemon(self, daemonic): ... + @property + def authkey(self): ... + @authkey.setter + def authkey(self, authkey): ... + @property + def exitcode(self): ... + @property + def ident(self): ... + pid: Any + +class AuthenticationString(bytes): + def __reduce__(self): ... + +class _MainProcess(Process): + def __init__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi new file mode 100644 index 0000000..14d44f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/multiprocessing/util.pyi @@ -0,0 +1,29 @@ +from typing import Any, Optional +import threading + +SUBDEBUG: Any +SUBWARNING: Any + +def sub_debug(msg, *args): ... +def debug(msg, *args): ... +def info(msg, *args): ... +def sub_warning(msg, *args): ... +def get_logger(): ... +def log_to_stderr(level: Optional[Any] = ...): ... +def get_temp_dir(): ... +def register_after_fork(obj, func): ... + +class Finalize: + def __init__(self, obj, callback, args=..., kwargs: Optional[Any] = ..., exitpriority: Optional[Any] = ...): ... + def __call__(self, wr: Optional[Any] = ...): ... + def cancel(self): ... + def still_active(self): ... + +def is_exiting(): ... + +class ForkAwareThreadLock: + def __init__(self): ... + +class ForkAwareLocal(threading.local): + def __init__(self): ... + def __reduce__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mutex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mutex.pyi new file mode 100644 index 0000000..8da8bfb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/mutex.pyi @@ -0,0 +1,15 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/mutex.py + +from collections import deque +from typing import Any, Callable, TypeVar + +_ArgType = TypeVar('_ArgType') + +class mutex: + locked: bool + queue: deque + def __init__(self) -> None: ... + def test(self) -> bool: ... + def testandset(self) -> bool: ... + def lock(self, function: Callable[[_ArgType], Any], argument: _ArgType) -> None: ... + def unlock(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi new file mode 100644 index 0000000..b87b008 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/nturl2path.pyi @@ -0,0 +1,4 @@ +from typing import AnyStr + +def url2pathname(url: AnyStr) -> AnyStr: ... +def pathname2url(p: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi new file mode 100644 index 0000000..2c66dc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/__init__.pyi @@ -0,0 +1,369 @@ +# Stubs for os +# Ron Murawski + +from builtins import OSError as error +from io import TextIOWrapper as _TextIOWrapper +from posix import stat_result as stat_result # TODO: use this, see https://github.com/python/mypy/issues/3078 +import sys +from typing import ( + Mapping, MutableMapping, Dict, List, Any, Tuple, Iterator, overload, Union, AnyStr, + Optional, Generic, Set, Callable, Text, Sequence, IO, NamedTuple, NoReturn, TypeVar +) +from . import path as path + +_T = TypeVar('_T') + +# ----- os variables ----- + +if sys.version_info >= (3, 2): + supports_bytes_environ: bool + +if sys.version_info >= (3, 3): + supports_dir_fd: Set[Callable[..., Any]] + supports_fd: Set[Callable[..., Any]] + supports_effective_ids: Set[Callable[..., Any]] + supports_follow_symlinks: Set[Callable[..., Any]] + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + +O_RDONLY: int +O_WRONLY: int +O_RDWR: int +O_APPEND: int +O_CREAT: int +O_EXCL: int +O_TRUNC: int +# We don't use sys.platform for O_* flags to denote platform-dependent APIs because some codes, +# including tests for mypy, use a more finer way than sys.platform before using these APIs +# See https://github.com/python/typeshed/pull/2286 for discussions +O_DSYNC: int # Unix only +O_RSYNC: int # Unix only +O_SYNC: int # Unix only +O_NDELAY: int # Unix only +O_NONBLOCK: int # Unix only +O_NOCTTY: int # Unix only +O_SHLOCK: int # Unix only +O_EXLOCK: int # Unix only +O_BINARY: int # Windows only +O_NOINHERIT: int # Windows only +O_SHORT_LIVED: int # Windows only +O_TEMPORARY: int # Windows only +O_RANDOM: int # Windows only +O_SEQUENTIAL: int # Windows only +O_TEXT: int # Windows only +O_ASYNC: int # Gnu extension if in C library +O_DIRECT: int # Gnu extension if in C library +O_DIRECTORY: int # Gnu extension if in C library +O_NOFOLLOW: int # Gnu extension if in C library +O_NOATIME: int # Gnu extension if in C library +O_LARGEFILE: int # Gnu extension if in C library + +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +linesep: str +devnull: str +name: str + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +class _Environ(MutableMapping[AnyStr, AnyStr], Generic[AnyStr]): + def copy(self) -> Dict[AnyStr, AnyStr]: ... + def __delitem__(self, key: AnyStr) -> None: ... + def __getitem__(self, key: AnyStr) -> AnyStr: ... + def __setitem__(self, key: AnyStr, value: AnyStr) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __len__(self) -> int: ... + +environ: _Environ[str] +if sys.version_info >= (3, 2): + environb: _Environ[bytes] + +if sys.platform != 'win32': + # Unix only + confstr_names: Dict[str, int] + pathconf_names: Dict[str, int] + sysconf_names: Dict[str, int] + + EX_OK: int + EX_USAGE: int + EX_DATAERR: int + EX_NOINPUT: int + EX_NOUSER: int + EX_NOHOST: int + EX_UNAVAILABLE: int + EX_SOFTWARE: int + EX_OSERR: int + EX_OSFILE: int + EX_CANTCREAT: int + EX_IOERR: int + EX_TEMPFAIL: int + EX_PROTOCOL: int + EX_NOPERM: int + EX_CONFIG: int + EX_NOTFOUND: int + +P_NOWAIT: int +P_NOWAITO: int +P_WAIT: int +if sys.platform == 'win32': + P_DETACH: int + P_OVERLAY: int + +# wait()/waitpid() options +if sys.platform != 'win32': + WNOHANG: int # Unix only + WCONTINUED: int # some Unix systems + WUNTRACED: int # Unix only + +TMP_MAX: int # Undocumented, but used by tempfile + +# ----- os classes (structures) ----- +if sys.version_info >= (3, 6): + from builtins import _PathLike as PathLike # See comment in builtins + +_PathType = path._PathType + +_StatVFS = NamedTuple('_StatVFS', [('f_bsize', int), ('f_frsize', int), ('f_blocks', int), + ('f_bfree', int), ('f_bavail', int), ('f_files', int), + ('f_ffree', int), ('f_favail', int), ('f_flag', int), + ('f_namemax', int)]) + +def getlogin() -> str: ... +def getpid() -> int: ... +def getppid() -> int: ... +def strerror(code: int) -> str: ... +def umask(mask: int) -> int: ... + +if sys.platform != 'win32': + def ctermid() -> str: ... + def getegid() -> int: ... + def geteuid() -> int: ... + def getgid() -> int: ... + def getgroups() -> List[int]: ... # Unix only, behaves differently on Mac + def initgroups(username: str, gid: int) -> None: ... + def getpgid(pid: int) -> int: ... + def getpgrp() -> int: ... + def getresuid() -> Tuple[int, int, int]: ... + def getresgid() -> Tuple[int, int, int]: ... + def getuid() -> int: ... + def setegid(egid: int) -> None: ... + def seteuid(euid: int) -> None: ... + def setgid(gid: int) -> None: ... + def setgroups(groups: Sequence[int]) -> None: ... + def setpgrp() -> None: ... + def setpgid(pid: int, pgrp: int) -> None: ... + def setregid(rgid: int, egid: int) -> None: ... + def setresgid(rgid: int, egid: int, sgid: int) -> None: ... + def setresuid(ruid: int, euid: int, suid: int) -> None: ... + def setreuid(ruid: int, euid: int) -> None: ... + def getsid(pid: int) -> int: ... + def setsid() -> None: ... + def setuid(uid: int) -> None: ... + def uname() -> Tuple[str, str, str, str, str]: ... + +@overload +def getenv(key: Text) -> Optional[str]: ... +@overload +def getenv(key: Text, default: _T) -> Union[str, _T]: ... +def putenv(key: Union[bytes, Text], value: Union[bytes, Text]) -> None: ... +def unsetenv(key: Union[bytes, Text]) -> None: ... + +def fdopen(fd: int, *args, **kwargs) -> IO[Any]: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def dup(fd: int) -> int: ... +def dup2(fd: int, fd2: int) -> None: ... +def fstat(fd: int) -> Any: ... +def fsync(fd: int) -> None: ... +def lseek(fd: int, pos: int, how: int) -> int: ... +def open(file: _PathType, flags: int, mode: int = ...) -> int: ... +def pipe() -> Tuple[int, int]: ... +def read(fd: int, n: int) -> bytes: ... +def write(fd: int, string: bytes) -> int: ... +def access(path: _PathType, mode: int) -> bool: ... +def chdir(path: _PathType) -> None: ... +def fchdir(fd: int) -> None: ... +def getcwd() -> str: ... +def getcwdu() -> unicode: ... +def chmod(path: _PathType, mode: int) -> None: ... +def link(src: _PathType, link_name: _PathType) -> None: ... +def listdir(path: AnyStr) -> List[AnyStr]: ... +def lstat(path: _PathType) -> Any: ... +def mknod(filename: _PathType, mode: int = ..., device: int = ...) -> None: ... +def major(device: int) -> int: ... +def minor(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +def mkdir(path: _PathType, mode: int = ...) -> None: ... +def makedirs(path: _PathType, mode: int = ...) -> None: ... +def readlink(path: AnyStr) -> AnyStr: ... +def remove(path: _PathType) -> None: ... +def removedirs(path: _PathType) -> None: ... +def rename(src: _PathType, dst: _PathType) -> None: ... +def renames(old: _PathType, new: _PathType) -> None: ... +def rmdir(path: _PathType) -> None: ... +def stat(path: _PathType) -> Any: ... +@overload +def stat_float_times() -> bool: ... +@overload +def stat_float_times(newvalue: bool) -> None: ... +def symlink(source: _PathType, link_name: _PathType) -> None: ... +def unlink(path: _PathType) -> None: ... +# TODO: add ns, dir_fd, follow_symlinks argument +if sys.version_info >= (3, 0): + def utime(path: _PathType, times: Optional[Tuple[float, float]] = ...) -> None: ... +else: + def utime(path: _PathType, times: Optional[Tuple[float, float]]) -> None: ... + +if sys.platform != 'win32': + # Unix only + def fchmod(fd: int, mode: int) -> None: ... + def fchown(fd: int, uid: int, gid: int) -> None: ... + if sys.platform != 'darwin': + def fdatasync(fd: int) -> None: ... # Unix only, not Mac + def fpathconf(fd: int, name: Union[str, int]) -> int: ... + def fstatvfs(fd: int) -> _StatVFS: ... + def ftruncate(fd: int, length: int) -> None: ... + def isatty(fd: int) -> bool: ... + def openpty() -> Tuple[int, int]: ... # some flavors of Unix + def tcgetpgrp(fd: int) -> int: ... + def tcsetpgrp(fd: int, pg: int) -> None: ... + def ttyname(fd: int) -> str: ... + def chflags(path: _PathType, flags: int) -> None: ... + def chroot(path: _PathType) -> None: ... + def chown(path: _PathType, uid: int, gid: int) -> None: ... + def lchflags(path: _PathType, flags: int) -> None: ... + def lchmod(path: _PathType, mode: int) -> None: ... + def lchown(path: _PathType, uid: int, gid: int) -> None: ... + def mkfifo(path: _PathType, mode: int = ...) -> None: ... + def pathconf(path: _PathType, name: Union[str, int]) -> int: ... + def statvfs(path: _PathType) -> _StatVFS: ... + +if sys.version_info >= (3, 6): + def walk(top: Union[AnyStr, PathLike[AnyStr]], topdown: bool = ..., + onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +else: + def walk(top: AnyStr, topdown: bool = ..., onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... + +def abort() -> NoReturn: ... +# These are defined as execl(file, *args) but the first *arg is mandatory. +def execl(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... +def execlp(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... + +# These are: execle(file, *args, env) but env is pulled from the last element of the args. +def execle(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... +def execlpe(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... + +# The docs say `args: tuple or list of strings` +# The implementation enforces tuple or list so we can't use Sequence. +_ExecVArgs = Union[Tuple[Union[bytes, Text], ...], List[bytes], List[Text], List[Union[bytes, Text]]] +def execv(path: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execve(path: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... +def execvp(file: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execvpe(file: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... + +def _exit(n: int) -> NoReturn: ... +def kill(pid: int, sig: int) -> None: ... + +if sys.platform != 'win32': + # Unix only + def fork() -> int: ... + def forkpty() -> Tuple[int, int]: ... # some flavors of Unix + def killpg(pgid: int, sig: int) -> None: ... + def nice(increment: int) -> int: ... + def plock(op: int) -> None: ... # ???op is int? + +if sys.version_info >= (3, 0): + class popen(_TextIOWrapper): + # TODO 'b' modes or bytes command not accepted? + def __init__(self, command: str, mode: str = ..., + bufsize: int = ...) -> None: ... + def close(self) -> Any: ... # may return int +else: + def popen(command: str, *args, **kwargs) -> IO[Any]: ... + def popen2(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any]]: ... + def popen3(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any], IO[Any]]: ... + def popen4(cmd: str, *args, **kwargs) -> Tuple[IO[Any], IO[Any]]: ... + +def spawnl(mode: int, path: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... +def spawnle(mode: int, path: _PathType, arg0: Union[bytes, Text], + *args: Any) -> int: ... # Imprecise sig +def spawnv(mode: int, path: _PathType, args: List[Union[bytes, Text]]) -> int: ... +def spawnve(mode: int, path: _PathType, args: List[Union[bytes, Text]], + env: Mapping[str, str]) -> int: ... +def system(command: _PathType) -> int: ... +def times() -> Tuple[float, float, float, float, float]: ... +def waitpid(pid: int, options: int) -> Tuple[int, int]: ... +def urandom(n: int) -> bytes: ... + +if sys.platform == 'win32': + def startfile(path: _PathType, operation: Optional[str] = ...) -> None: ... +else: + # Unix only + def spawnlp(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... + def spawnlpe(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Any) -> int: ... # Imprecise signature + def spawnvp(mode: int, file: _PathType, args: List[Union[bytes, Text]]) -> int: ... + def spawnvpe(mode: int, file: _PathType, args: List[Union[bytes, Text]], env: Mapping[str, str]) -> int: ... + def wait() -> Tuple[int, int]: ... + def wait3(options: int) -> Tuple[int, int, Any]: ... + def wait4(pid: int, options: int) -> Tuple[int, int, Any]: ... + def WCOREDUMP(status: int) -> bool: ... + def WIFCONTINUED(status: int) -> bool: ... + def WIFSTOPPED(status: int) -> bool: ... + def WIFSIGNALED(status: int) -> bool: ... + def WIFEXITED(status: int) -> bool: ... + def WEXITSTATUS(status: int) -> int: ... + def WSTOPSIG(status: int) -> int: ... + def WTERMSIG(status: int) -> int: ... + def confstr(name: Union[str, int]) -> Optional[str]: ... + def getloadavg() -> Tuple[float, float, float]: ... + def sysconf(name: Union[str, int]) -> int: ... + +if sys.version_info >= (3, 0): + def sched_getaffinity(id: int) -> Set[int]: ... +if sys.version_info >= (3, 3): + class waitresult: + si_pid: int + def waitid(idtype: int, id: int, options: int) -> waitresult: ... + +if sys.version_info < (3, 0): + def tmpfile() -> IO[Any]: ... + def tmpnam() -> str: ... + def tempnam(dir: str = ..., prefix: str = ...) -> str: ... + +P_ALL: int +WEXITED: int +WNOWAIT: int + +if sys.version_info >= (3, 3): + if sys.platform != 'win32': + # Unix only + def sync() -> None: ... + + def truncate(path: Union[_PathType, int], length: int) -> None: ... # Unix only up to version 3.4 + + def fwalk(top: AnyStr = ..., topdown: bool = ..., + onerror: Callable = ..., *, follow_symlinks: bool = ..., + dir_fd: int = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], List[AnyStr], int]]: ... + + terminal_size = NamedTuple('terminal_size', [('columns', int), ('lines', int)]) + def get_terminal_size(fd: int = ...) -> terminal_size: ... + +if sys.version_info >= (3, 4): + def cpu_count() -> Optional[int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/path.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os/path.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/os2emxpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/pipes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/pipes.pyi new file mode 100644 index 0000000..d5f5291 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/pipes.pyi @@ -0,0 +1,13 @@ +from typing import Any, IO + +class Template: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def clone(self) -> Template: ... + def debug(self, flag: bool) -> None: ... + def append(self, cmd: str, kind: str) -> None: ... + def prepend(self, cmd: str, kind: str) -> None: ... + def open(self, file: str, mode: str) -> IO[Any]: ... + def copy(self, infile: str, outfile: str) -> None: ... + +def quote(s: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/platform.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/platform.pyi new file mode 100644 index 0000000..e6e0378 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/platform.pyi @@ -0,0 +1,45 @@ +# Stubs for platform (Python 2) +# +# Based on stub generated by stubgen. + +from typing import Any, Optional, Tuple + +__copyright__: Any +DEV_NULL: Any + +def libc_ver(executable=..., lib=..., version=..., chunksize: int = ...): ... +def linux_distribution(distname=..., version=..., id=..., supported_dists=..., full_distribution_name: int = ...): ... +def dist(distname=..., version=..., id=..., supported_dists=...): ... + +class _popen: + tmpfile: Any + pipe: Any + bufsize: Any + mode: Any + def __init__(self, cmd, mode=..., bufsize: Optional[Any] = ...): ... + def read(self): ... + def readlines(self): ... + def close(self, remove=..., error=...): ... + __del__: Any + +def popen(cmd, mode=..., bufsize: Optional[Any] = ...): ... +def win32_ver(release=..., version=..., csd=..., ptype=...): ... +def mac_ver(release=..., versioninfo=..., machine=...): ... +def java_ver(release=..., vendor=..., vminfo=..., osinfo=...): ... +def system_alias(system, release, version): ... +def architecture(executable=..., bits=..., linkage=...) -> Tuple[str, str]: ... +def uname() -> Tuple[str, str, str, str, str, str]: ... +def system() -> str: ... +def node() -> str: ... +def release() -> str: ... +def version() -> str: ... +def machine() -> str: ... +def processor() -> str: ... +def python_implementation() -> str: ... +def python_version() -> str: ... +def python_version_tuple() -> Tuple[str, str, str]: ... +def python_branch() -> str: ... +def python_revision() -> str: ... +def python_build() -> Tuple[str, str]: ... +def python_compiler() -> str: ... +def platform(aliased: int = ..., terse: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/popen2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/popen2.pyi new file mode 100644 index 0000000..23435b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/popen2.pyi @@ -0,0 +1,28 @@ +from typing import Any, Iterable, List, Optional, Union, TextIO, Tuple, TypeVar + +_T = TypeVar('_T') + + +class Popen3: + sts: int + cmd: Iterable + pid: int + tochild: TextIO + fromchild: TextIO + childerr: Optional[TextIO] + def __init__(self, cmd: Iterable = ..., capturestderr: bool = ..., bufsize: int = ...) -> None: ... + def __del__(self) -> None: ... + def poll(self, _deadstate: _T = ...) -> Union[int, _T]: ... + def wait(self) -> int: ... + +class Popen4(Popen3): + childerr: None + cmd: Iterable + pid: int + tochild: TextIO + fromchild: TextIO + def __init__(self, cmd: Iterable = ..., bufsize: int = ...) -> None: ... + +def popen2(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO]: ... +def popen3(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO, TextIO]: ... +def popen4(cmd: Iterable = ..., bufsize: int = ..., mode: str = ...) -> Tuple[TextIO, TextIO]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/posix.pyi new file mode 100644 index 0000000..fcd4a66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/posix.pyi @@ -0,0 +1,205 @@ +from typing import Dict, List, Mapping, Tuple, Union, Sequence, IO, Optional, TypeVar + +error = OSError + +confstr_names: Dict[str, int] +environ: Dict[str, str] +pathconf_names: Dict[str, int] +sysconf_names: Dict[str, int] + +EX_CANTCREAT: int +EX_CONFIG: int +EX_DATAERR: int +EX_IOERR: int +EX_NOHOST: int +EX_NOINPUT: int +EX_NOPERM: int +EX_NOUSER: int +EX_OK: int +EX_OSERR: int +EX_OSFILE: int +EX_PROTOCOL: int +EX_SOFTWARE: int +EX_TEMPFAIL: int +EX_UNAVAILABLE: int +EX_USAGE: int +F_OK: int +NGROUPS_MAX: int +O_APPEND: int +O_ASYNC: int +O_CREAT: int +O_DIRECT: int +O_DIRECTORY: int +O_DSYNC: int +O_EXCL: int +O_LARGEFILE: int +O_NDELAY: int +O_NOATIME: int +O_NOCTTY: int +O_NOFOLLOW: int +O_NONBLOCK: int +O_RDONLY: int +O_RDWR: int +O_RSYNC: int +O_SYNC: int +O_TRUNC: int +O_WRONLY: int +R_OK: int +TMP_MAX: int +WCONTINUED: int +WNOHANG: int +WUNTRACED: int +W_OK: int +X_OK: int + +def WCOREDUMP(status: int) -> bool: ... +def WEXITSTATUS(status: int) -> bool: ... +def WIFCONTINUED(status: int) -> bool: ... +def WIFEXITED(status: int) -> bool: ... +def WIFSIGNALED(status: int) -> bool: ... +def WIFSTOPPED(status: int) -> bool: ... +def WSTOPSIG(status: int) -> bool: ... +def WTERMSIG(status: int) -> bool: ... + +class stat_result(object): + n_fields: int + n_sequence_fields: int + n_unnamed_fields: int + st_mode: int + st_ino: int + st_dev: int + st_nlink: int + st_uid: int + st_gid: int + st_size: int + st_atime: int + st_mtime: int + st_ctime: int + +class statvfs_result(object): + n_fields: int + n_sequence_fields: int + n_unnamed_fields: int + f_bsize: int + f_frsize: int + f_blocks: int + f_bfree: int + f_bavail: int + f_files: int + f_ffree: int + f_favail: int + f_flag: int + f_namemax: int + +def _exit(status: int) -> None: ... +def abort() -> None: ... +def access(path: unicode, mode: int) -> bool: ... +def chdir(path: unicode) -> None: ... +def chmod(path: unicode, mode: int) -> None: ... +def chown(path: unicode, uid: int, gid: int) -> None: ... +def chroot(path: unicode) -> None: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def confstr(name: Union[str, int]) -> str: ... +def ctermid() -> str: ... +def dup(fd: int) -> int: ... +def dup2(fd: int, fd2: int) -> None: ... +def execv(path: str, args: Sequence[str], env: Mapping[str, str]) -> None: ... +def execve(path: str, args: Sequence[str], env: Mapping[str, str]) -> None: ... +def fchdir(fd: int) -> None: ... +def fchmod(fd: int, mode: int) -> None: ... +def fchown(fd: int, uid: int, gid: int) -> None: ... +def fdatasync(fd: int) -> None: ... +def fdopen(fd: int, mode: str = ..., bufsize: int = ...) -> IO[str]: ... +def fork() -> int: + raise OSError() +def forkpty() -> Tuple[int, int]: + raise OSError() +def fpathconf(fd: int, name: str) -> None: ... +def fstat(fd: int) -> stat_result: ... +def fstatvfs(fd: int) -> statvfs_result: ... +def fsync(fd: int) -> None: ... +def ftruncate(fd: int, length: int) -> None: ... +def getcwd() -> str: ... +def getcwdu() -> unicode: ... +def getegid() -> int: ... +def geteuid() -> int: ... +def getgid() -> int: ... +def getgroups() -> List[int]: ... +def getloadavg() -> Tuple[float, float, float]: + raise OSError() +def getlogin() -> str: ... +def getpgid(pid: int) -> int: ... +def getpgrp() -> int: ... +def getpid() -> int: ... +def getppid() -> int: ... +def getresgid() -> Tuple[int, int, int]: ... +def getresuid() -> Tuple[int, int, int]: ... +def getsid(pid: int) -> int: ... +def getuid() -> int: ... +def initgroups(username: str, gid: int) -> None: ... +def isatty(fd: int) -> bool: ... +def kill(pid: int, sig: int) -> None: ... +def killpg(pgid: int, sig: int) -> None: ... +def lchown(path: unicode, uid: int, gid: int) -> None: ... +def link(source: unicode, link_name: str) -> None: ... +_T = TypeVar("_T") +def listdir(path: _T) -> List[_T]: ... +def lseek(fd: int, pos: int, how: int) -> None: ... +def lstat(path: unicode) -> stat_result: ... +def major(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +def minor(device: int) -> int: ... +def mkdir(path: unicode, mode: int = ...) -> None: ... +def mkfifo(path: unicode, mode: int = ...) -> None: ... +def mknod(filename: unicode, mode: int = ..., device: int = ...) -> None: ... +def nice(increment: int) -> int: ... +def open(file: unicode, flags: int, mode: int = ...) -> int: ... +def openpty() -> Tuple[int, int]: ... +def pathconf(path: unicode, name: str) -> str: ... +def pipe() -> Tuple[int, int]: ... +def popen(command: str, mode: str = ..., bufsize: int = ...) -> IO[str]: ... +def putenv(varname: str, value: str) -> None: ... +def read(fd: int, n: int) -> str: ... +def readlink(path: _T) -> _T: ... +def remove(path: unicode) -> None: ... +def rename(src: unicode, dst: unicode) -> None: ... +def rmdir(path: unicode) -> None: ... +def setegid(egid: int) -> None: ... +def seteuid(euid: int) -> None: ... +def setgid(gid: int) -> None: ... +def setgroups(groups: Sequence[int]) -> None: ... +def setpgid(pid: int, pgrp: int) -> None: ... +def setpgrp() -> None: ... +def setregid(rgid: int, egid: int) -> None: ... +def setresgid(rgid: int, egid: int, sgid: int) -> None: ... +def setresuid(ruid: int, euid: int, suid: int) -> None: ... +def setreuid(ruid: int, euid: int) -> None: ... +def setsid() -> None: ... +def setuid(pid: int) -> None: ... +def stat(path: unicode) -> stat_result: ... +def statvfs(path: unicode) -> statvfs_result: ... +def stat_float_times(fd: int) -> None: ... +def strerror(code: int) -> str: ... +def symlink(source: unicode, link_name: unicode) -> None: ... +def sysconf(name: Union[str, int]) -> int: ... +def system(command: unicode) -> int: ... +def tcgetpgrp(fd: int) -> int: ... +def tcsetpgrp(fd: int, pg: int) -> None: ... +def times() -> Tuple[float, float, float, float, float]: ... +def tmpfile() -> IO[str]: ... +def ttyname(fd: int) -> str: ... +def umask(mask: int) -> int: ... +def uname() -> Tuple[str, str, str, str, str]: ... +def unlink(path: unicode) -> None: ... +def unsetenv(varname: str) -> None: ... +def urandom(n: int) -> str: ... +def utime(path: unicode, times: Optional[Tuple[int, int]]) -> None: + raise OSError +def wait() -> int: ... +_r = Tuple[float, float, int, int, int, int, int, int, int, int, int, int, int, int, int, int] +def wait3(options: int) -> Tuple[int, int, _r]: ... +def wait4(pid: int, options: int) -> Tuple[int, int, _r]: ... +def waitpid(pid: int, options: int) -> int: + raise OSError() +def write(fd: int, str: str) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/random.pyi new file mode 100644 index 0000000..3292db8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/random.pyi @@ -0,0 +1,75 @@ +# Stubs for random +# Ron Murawski +# Updated by Jukka Lehtosalo + +# based on https://docs.python.org/2/library/random.html + +# ----- random classes ----- + +import _random +from typing import ( + Any, TypeVar, Sequence, List, Callable, AbstractSet, Union, + overload +) + +_T = TypeVar('_T') + +class Random(_random.Random): + def __init__(self, x: object = ...) -> None: ... + def seed(self, x: object = ...) -> None: ... + def getstate(self) -> _random._State: ... + def setstate(self, state: _random._State) -> None: ... + def jumpahead(self, n: int) -> None: ... + def getrandbits(self, k: int) -> int: ... + @overload + def randrange(self, stop: int) -> int: ... + @overload + def randrange(self, start: int, stop: int, step: int = ...) -> int: ... + def randint(self, a: int, b: int) -> int: ... + def choice(self, seq: Sequence[_T]) -> _T: ... + def shuffle(self, x: List[Any], random: Callable[[], None] = ...) -> None: ... + def sample(self, population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... + def random(self) -> float: ... + def uniform(self, a: float, b: float) -> float: ... + def triangular(self, low: float = ..., high: float = ..., mode: float = ...) -> float: ... + def betavariate(self, alpha: float, beta: float) -> float: ... + def expovariate(self, lambd: float) -> float: ... + def gammavariate(self, alpha: float, beta: float) -> float: ... + def gauss(self, mu: float, sigma: float) -> float: ... + def lognormvariate(self, mu: float, sigma: float) -> float: ... + def normalvariate(self, mu: float, sigma: float) -> float: ... + def vonmisesvariate(self, mu: float, kappa: float) -> float: ... + def paretovariate(self, alpha: float) -> float: ... + def weibullvariate(self, alpha: float, beta: float) -> float: ... + +# SystemRandom is not implemented for all OS's; good on Windows & Linux +class SystemRandom(Random): + ... + +# ----- random function stubs ----- +def seed(x: object = ...) -> None: ... +def getstate() -> object: ... +def setstate(state: object) -> None: ... +def jumpahead(n: int) -> None: ... +def getrandbits(k: int) -> int: ... +@overload +def randrange(stop: int) -> int: ... +@overload +def randrange(start: int, stop: int, step: int = ...) -> int: ... +def randint(a: int, b: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +def shuffle(x: List[Any], random: Callable[[], float] = ...) -> None: ... +def sample(population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... +def random() -> float: ... +def uniform(a: float, b: float) -> float: ... +def triangular(low: float = ..., high: float = ..., + mode: float = ...) -> float: ... +def betavariate(alpha: float, beta: float) -> float: ... +def expovariate(lambd: float) -> float: ... +def gammavariate(alpha: float, beta: float) -> float: ... +def gauss(mu: float, sigma: float) -> float: ... +def lognormvariate(mu: float, sigma: float) -> float: ... +def normalvariate(mu: float, sigma: float) -> float: ... +def vonmisesvariate(mu: float, kappa: float) -> float: ... +def paretovariate(alpha: float) -> float: ... +def weibullvariate(alpha: float, beta: float) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/re.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/re.pyi new file mode 100644 index 0000000..2a2c2cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/re.pyi @@ -0,0 +1,100 @@ +# Stubs for re +# Ron Murawski +# 'bytes' support added by Jukka Lehtosalo + +# based on: http: //docs.python.org/2.7/library/re.html + +from typing import ( + List, Iterator, overload, Callable, Tuple, Sequence, Dict, + Generic, AnyStr, Match, Pattern, Any, Optional, Union +) + +# ----- re variables and constants ----- +DEBUG = 0 +I = 0 +IGNORECASE = 0 +L = 0 +LOCALE = 0 +M = 0 +MULTILINE = 0 +S = 0 +DOTALL = 0 +X = 0 +VERBOSE = 0 +U = 0 +UNICODE = 0 +T = 0 +TEMPLATE = 0 + +class error(Exception): ... + +@overload +def compile(pattern: AnyStr, flags: int = ...) -> Pattern[AnyStr]: ... +@overload +def compile(pattern: Pattern[AnyStr], flags: int = ...) -> Pattern[AnyStr]: ... + +@overload +def search(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... +@overload +def search(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def match(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... +@overload +def match(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def split(pattern: Union[str, unicode], string: AnyStr, + maxsplit: int = ..., flags: int = ...) -> List[AnyStr]: ... +@overload +def split(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, + maxsplit: int = ..., flags: int = ...) -> List[AnyStr]: ... + +@overload +def findall(pattern: Union[str, unicode], string: AnyStr, flags: int = ...) -> List[Any]: ... +@overload +def findall(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, flags: int = ...) -> List[Any]: ... + +# Return an iterator yielding match objects over all non-overlapping matches +# for the RE pattern in string. The string is scanned left-to-right, and +# matches are returned in the order found. Empty matches are included in the +# result unless they touch the beginning of another match. +@overload +def finditer(pattern: Union[str, unicode], string: AnyStr, + flags: int = ...) -> Iterator[Match[AnyStr]]: ... +@overload +def finditer(pattern: Union[Pattern[str], Pattern[unicode]], string: AnyStr, + flags: int = ...) -> Iterator[Match[AnyStr]]: ... + +@overload +def sub(pattern: Union[str, unicode], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[str, unicode], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[Pattern[str], Pattern[unicode]], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> AnyStr: ... +@overload +def sub(pattern: Union[Pattern[str], Pattern[unicode]], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: int = ...) -> AnyStr: ... + +@overload +def subn(pattern: Union[str, unicode], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[str, unicode], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[Pattern[str], Pattern[unicode]], repl: AnyStr, string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Union[Pattern[str], Pattern[unicode]], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: int = ...) -> Tuple[AnyStr, int]: ... + +def escape(string: AnyStr) -> AnyStr: ... + +def purge() -> None: ... +def template(pattern: Union[AnyStr, Pattern[AnyStr]], flags: int = ...) -> Pattern[AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/repr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/repr.pyi new file mode 100644 index 0000000..ad89789 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/repr.pyi @@ -0,0 +1,31 @@ +class Repr: + maxarray: int + maxdeque: int + maxdict: int + maxfrozenset: int + maxlevel: int + maxlist: int + maxlong: int + maxother: int + maxset: int + maxstring: int + maxtuple: int + def __init__(self) -> None: ... + def _repr_iterable(self, x, level: complex, left, right, maxiter, trail=...) -> str: ... + def repr(self, x) -> str: ... + def repr1(self, x, level: complex) -> str: ... + def repr_array(self, x, level: complex) -> str: ... + def repr_deque(self, x, level: complex) -> str: ... + def repr_dict(self, x, level: complex) -> str: ... + def repr_frozenset(self, x, level: complex) -> str: ... + def repr_instance(self, x, level: complex) -> str: ... + def repr_list(self, x, level: complex) -> str: ... + def repr_long(self, x, level: complex) -> str: ... + def repr_set(self, x, level: complex) -> str: ... + def repr_str(self, x, level: complex) -> str: ... + def repr_tuple(self, x, level: complex) -> str: ... + +def _possibly_sorted(x) -> list: ... + +aRepr: Repr +def repr(x) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/resource.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/resource.pyi new file mode 100644 index 0000000..2a6c694 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/resource.pyi @@ -0,0 +1,33 @@ +from typing import Tuple, NamedTuple + +class error(Exception): ... + +RLIM_INFINITY: int +def getrlimit(resource: int) -> Tuple[int, int]: ... +def setrlimit(resource: int, limits: Tuple[int, int]) -> None: ... + +RLIMIT_CORE: int +RLIMIT_CPU: int +RLIMIT_FSIZE: int +RLIMIT_DATA: int +RLIMIT_STACK: int +RLIMIT_RSS: int +RLIMIT_NPROC: int +RLIMIT_NOFILE: int +RLIMIT_OFILE: int +RLIMIT_MEMLOCK: int +RLIMIT_VMEM: int +RLIMIT_AS: int + +_RUsage = NamedTuple('_RUsage', [('ru_utime', float), ('ru_stime', float), ('ru_maxrss', int), + ('ru_ixrss', int), ('ru_idrss', int), ('ru_isrss', int), + ('ru_minflt', int), ('ru_majflt', int), ('ru_nswap', int), + ('ru_inblock', int), ('ru_oublock', int), ('ru_msgsnd', int), + ('ru_msgrcv', int), ('ru_nsignals', int), ('ru_nvcsw', int), + ('ru_nivcsw', int)]) +def getrusage(who: int) -> _RUsage: ... +def getpagesize() -> int: ... + +RUSAGE_SELF: int +RUSAGE_CHILDREN: int +RUSAGE_BOTH: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/rfc822.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/rfc822.pyi new file mode 100644 index 0000000..20cd1d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/rfc822.pyi @@ -0,0 +1,79 @@ +# Stubs for rfc822 (Python 2) +# +# Based on stub generated by stubgen. + +from typing import Any, Optional + +class Message: + fp: Any + seekable: Any + startofheaders: Any + startofbody: Any + def __init__(self, fp, seekable: int = ...): ... + def rewindbody(self): ... + dict: Any + unixfrom: Any + headers: Any + status: Any + def readheaders(self): ... + def isheader(self, line): ... + def islast(self, line): ... + def iscomment(self, line): ... + def getallmatchingheaders(self, name): ... + def getfirstmatchingheader(self, name): ... + def getrawheader(self, name): ... + def getheader(self, name, default: Optional[Any] = ...): ... + get: Any + def getheaders(self, name): ... + def getaddr(self, name): ... + def getaddrlist(self, name): ... + def getdate(self, name): ... + def getdate_tz(self, name): ... + def __len__(self): ... + def __getitem__(self, name): ... + def __setitem__(self, name, value): ... + def __delitem__(self, name): ... + def setdefault(self, name, default=...): ... + def has_key(self, name): ... + def __contains__(self, name): ... + def __iter__(self): ... + def keys(self): ... + def values(self): ... + def items(self): ... + +class AddrlistClass: + specials: Any + pos: Any + LWS: Any + CR: Any + atomends: Any + phraseends: Any + field: Any + commentlist: Any + def __init__(self, field): ... + def gotonext(self): ... + def getaddrlist(self): ... + def getaddress(self): ... + def getrouteaddr(self): ... + def getaddrspec(self): ... + def getdomain(self): ... + def getdelimited(self, beginchar, endchars, allowcomments: int = ...): ... + def getquote(self): ... + def getcomment(self): ... + def getdomainliteral(self): ... + def getatom(self, atomends: Optional[Any] = ...): ... + def getphraselist(self): ... + +class AddressList(AddrlistClass): + addresslist: Any + def __init__(self, field): ... + def __len__(self): ... + def __add__(self, other): ... + def __iadd__(self, other): ... + def __sub__(self, other): ... + def __isub__(self, other): ... + def __getitem__(self, index): ... + +def parsedate_tz(data): ... +def parsedate(data): ... +def mktime_tz(data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/robotparser.pyi new file mode 100644 index 0000000..403039a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/robotparser.pyi @@ -0,0 +1,7 @@ +class RobotFileParser: + def set_url(self, url: str): ... + def read(self): ... + def parse(self, lines: str): ... + def can_fetch(self, user_agent: str, url: str): ... + def mtime(self): ... + def modified(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/runpy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/runpy.pyi new file mode 100644 index 0000000..6674af0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/runpy.pyi @@ -0,0 +1,17 @@ +from typing import Any, Optional + +class _TempModule: + mod_name: Any + module: Any + def __init__(self, mod_name): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +class _ModifiedArgv0: + value: Any + def __init__(self, value): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +def run_module(mod_name, init_globals: Optional[Any] = ..., run_name: Optional[Any] = ..., alter_sys: bool = ...): ... +def run_path(path_name, init_globals: Optional[Any] = ..., run_name: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sets.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sets.pyi new file mode 100644 index 0000000..a68994f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sets.pyi @@ -0,0 +1,61 @@ +# Stubs for sets (Python 2) +from typing import Any, Callable, Hashable, Iterable, Iterator, MutableMapping, Optional, TypeVar, Union + +_T = TypeVar('_T') +_Setlike = Union[BaseSet[_T], Iterable[_T]] +_SelfT = TypeVar('_SelfT', bound=BaseSet) + +class BaseSet(Iterable[_T]): + def __init__(self) -> None: ... + def __len__(self) -> int: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __iter__(self) -> Iterator[_T]: ... + def __cmp__(self, other: Any) -> int: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + def copy(self: _SelfT) -> _SelfT: ... + def __copy__(self: _SelfT) -> _SelfT: ... + def __deepcopy__(self: _SelfT, memo: MutableMapping[int, BaseSet[_T]]) -> _SelfT: ... + def __or__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def union(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __and__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def intersection(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __xor__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def symmetric_difference(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __sub__(self: _SelfT, other: BaseSet[_T]) -> _SelfT: ... + def difference(self: _SelfT, other: _Setlike) -> _SelfT: ... + def __contains__(self, element: Any) -> bool: ... + def issubset(self, other: BaseSet[_T]) -> bool: ... + def issuperset(self, other: BaseSet[_T]) -> bool: ... + def __le__(self, other: BaseSet[_T]) -> bool: ... + def __ge__(self, other: BaseSet[_T]) -> bool: ... + def __lt__(self, other: BaseSet[_T]) -> bool: ... + def __gt__(self, other: BaseSet[_T]) -> bool: ... + +class ImmutableSet(BaseSet[_T], Hashable): + def __init__(self, iterable: Optional[_Setlike] = ...) -> None: ... + def __hash__(self) -> int: ... + +class Set(BaseSet[_T]): + def __init__(self, iterable: Optional[_Setlike] = ...) -> None: ... + def __ior__(self, other: BaseSet[_T]) -> Set: ... + def union_update(self, other: _Setlike) -> None: ... + def __iand__(self, other: BaseSet[_T]) -> Set: ... + def intersection_update(self, other: _Setlike) -> None: ... + def __ixor__(self, other: BaseSet[_T]) -> Set: ... + def symmetric_difference_update(self, other: _Setlike) -> None: ... + def __isub__(self, other: BaseSet[_T]) -> Set: ... + def difference_update(self, other: _Setlike) -> None: ... + def update(self, iterable: _Setlike) -> None: ... + def clear(self) -> None: ... + def add(self, element: _T) -> None: ... + def remove(self, element: _T) -> None: ... + def discard(self, element: _T) -> None: ... + def pop(self) -> _T: ... + def __as_immutable__(self) -> ImmutableSet[_T]: ... + def __as_temporarily_immutable__(self) -> _TemporarilyImmutableSet[_T]: ... + +class _TemporarilyImmutableSet(BaseSet[_T]): + def __init__(self, set: BaseSet[_T]) -> None: ... + def __hash__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sha.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sha.pyi new file mode 100644 index 0000000..f1606fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sha.pyi @@ -0,0 +1,11 @@ +# Stubs for Python 2.7 sha stdlib module + +class sha(object): + def update(self, arg: str) -> None: ... + def digest(self) -> str: ... + def hexdigest(self) -> str: ... + def copy(self) -> sha: ... + +def new(string: str = ...) -> sha: ... +blocksize = 0 +digest_size = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shelve.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shelve.pyi new file mode 100644 index 0000000..d7d9b8c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shelve.pyi @@ -0,0 +1,33 @@ +from typing import Any, Dict, Iterator, List, Optional, Tuple +import collections + + +class Shelf(collections.MutableMapping): + def __init__(self, dict: Dict[Any, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def keys(self) -> List[Any]: ... + def __len__(self) -> int: ... + def has_key(self, key: Any) -> bool: ... + def __contains__(self, key: Any) -> bool: ... + def get(self, key: Any, default: Any = ...) -> Any: ... + def __getitem__(self, key: Any) -> Any: ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __enter__(self) -> Shelf: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def close(self) -> None: ... + def __del__(self) -> None: ... + def sync(self) -> None: ... + +class BsdDbShelf(Shelf): + def __init__(self, dict: Dict[Any, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def set_location(self, key: Any) -> Tuple[str, Any]: ... + def next(self) -> Tuple[str, Any]: ... + def previous(self) -> Tuple[str, Any]: ... + def first(self) -> Tuple[str, Any]: ... + def last(self) -> Tuple[str, Any]: ... + +class DbfilenameShelf(Shelf): + def __init__(self, filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> None: ... + +def open(filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> DbfilenameShelf: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shlex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shlex.pyi new file mode 100644 index 0000000..5bf6fcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/shlex.pyi @@ -0,0 +1,30 @@ +from typing import Any, IO, List, Optional, TypeVar + +def split(s: Optional[str], comments: bool = ..., posix: bool = ...) -> List[str]: ... + +_SLT = TypeVar('_SLT', bound=shlex) + +class shlex: + def __init__(self, instream: IO[Any] = ..., infile: IO[Any] = ..., posix: bool = ...) -> None: ... + def __iter__(self: _SLT) -> _SLT: ... + def get_token(self) -> Optional[str]: ... + def push_token(self, _str: str) -> None: ... + def read_token(self) -> str: ... + def sourcehook(self, filename: str) -> None: ... + def push_source(self, stream: IO[Any], filename: str = ...) -> None: ... + def pop_source(self) -> IO[Any]: ... + def error_leader(self, file: str = ..., line: int = ...) -> str: ... + + commenters: str + wordchars: str + whitespace: str + escape: str + quotes: str + escapedquotes: str + whitespace_split: bool + infile: IO[Any] + source: Optional[str] + debug: int + lineno: int + token: Any + eof: Optional[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/signal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/signal.pyi new file mode 100644 index 0000000..cda4c65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/signal.pyi @@ -0,0 +1,71 @@ +from typing import Callable, Any, Tuple, Union +from types import FrameType + +SIG_DFL: int = ... +SIG_IGN: int = ... + +ITIMER_REAL: int = ... +ITIMER_VIRTUAL: int = ... +ITIMER_PROF: int = ... + +NSIG: int = ... + +SIGABRT: int = ... +SIGALRM: int = ... +SIGBREAK: int = ... # Windows +SIGBUS: int = ... +SIGCHLD: int = ... +SIGCLD: int = ... +SIGCONT: int = ... +SIGEMT: int = ... +SIGFPE: int = ... +SIGHUP: int = ... +SIGILL: int = ... +SIGINFO: int = ... +SIGINT: int = ... +SIGIO: int = ... +SIGIOT: int = ... +SIGKILL: int = ... +SIGPIPE: int = ... +SIGPOLL: int = ... +SIGPROF: int = ... +SIGPWR: int = ... +SIGQUIT: int = ... +SIGRTMAX: int = ... +SIGRTMIN: int = ... +SIGSEGV: int = ... +SIGSTOP: int = ... +SIGSYS: int = ... +SIGTERM: int = ... +SIGTRAP: int = ... +SIGTSTP: int = ... +SIGTTIN: int = ... +SIGTTOU: int = ... +SIGURG: int = ... +SIGUSR1: int = ... +SIGUSR2: int = ... +SIGVTALRM: int = ... +SIGWINCH: int = ... +SIGXCPU: int = ... +SIGXFSZ: int = ... + +# Windows +CTRL_C_EVENT: int = ... +CTRL_BREAK_EVENT: int = ... + +class ItimerError(IOError): ... + +_HANDLER = Union[Callable[[int, FrameType], None], int, None] + +def alarm(time: int) -> int: ... +def getsignal(signalnum: int) -> _HANDLER: ... +def pause() -> None: ... +def setitimer(which: int, seconds: float, interval: float = ...) -> Tuple[float, float]: ... +def getitimer(which: int) -> Tuple[float, float]: ... +def set_wakeup_fd(fd: int) -> int: ... +def siginterrupt(signalnum: int, flag: bool) -> None: + raise RuntimeError() +def signal(signalnum: int, handler: _HANDLER) -> _HANDLER: + raise RuntimeError() +def default_int_handler(signum: int, frame: FrameType) -> None: + raise KeyboardInterrupt() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/smtplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/smtplib.pyi new file mode 100644 index 0000000..438221a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/smtplib.pyi @@ -0,0 +1,86 @@ +from typing import Any + +class SMTPException(Exception): ... +class SMTPServerDisconnected(SMTPException): ... + +class SMTPResponseException(SMTPException): + smtp_code: Any + smtp_error: Any + args: Any + def __init__(self, code, msg) -> None: ... + +class SMTPSenderRefused(SMTPResponseException): + smtp_code: Any + smtp_error: Any + sender: Any + args: Any + def __init__(self, code, msg, sender) -> None: ... + +class SMTPRecipientsRefused(SMTPException): + recipients: Any + args: Any + def __init__(self, recipients) -> None: ... + +class SMTPDataError(SMTPResponseException): ... +class SMTPConnectError(SMTPResponseException): ... +class SMTPHeloError(SMTPResponseException): ... +class SMTPAuthenticationError(SMTPResponseException): ... + +def quoteaddr(addr): ... +def quotedata(data): ... + +class SSLFakeFile: + sslobj: Any + def __init__(self, sslobj) -> None: ... + def readline(self, size=...): ... + def close(self): ... + +class SMTP: + debuglevel: Any + file: Any + helo_resp: Any + ehlo_msg: Any + ehlo_resp: Any + does_esmtp: Any + default_port: Any + timeout: Any + esmtp_features: Any + local_hostname: Any + def __init__(self, host: str = ..., port: int = ..., local_hostname=..., timeout=...) -> None: ... + def set_debuglevel(self, debuglevel): ... + sock: Any + def connect(self, host=..., port=...): ... + def send(self, str): ... + def putcmd(self, cmd, args=...): ... + def getreply(self): ... + def docmd(self, cmd, args=...): ... + def helo(self, name=...): ... + def ehlo(self, name=...): ... + def has_extn(self, opt): ... + def help(self, args=...): ... + def rset(self): ... + def noop(self): ... + def mail(self, sender, options=...): ... + def rcpt(self, recip, options=...): ... + def data(self, msg): ... + def verify(self, address): ... + vrfy: Any + def expn(self, address): ... + def ehlo_or_helo_if_needed(self): ... + def login(self, user, password): ... + def starttls(self, keyfile=..., certfile=...): ... + def sendmail(self, from_addr, to_addrs, msg, mail_options=..., rcpt_options=...): ... + def close(self): ... + def quit(self): ... + +class SMTP_SSL(SMTP): + default_port: Any + keyfile: Any + certfile: Any + def __init__(self, host=..., port=..., local_hostname=..., keyfile=..., certfile=..., timeout=...) -> None: ... + +class LMTP(SMTP): + ehlo_msg: Any + def __init__(self, host=..., port=..., local_hostname=...) -> None: ... + sock: Any + def connect(self, host=..., port=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/spwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/spwd.pyi new file mode 100644 index 0000000..1d58990 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/spwd.pyi @@ -0,0 +1,14 @@ +from typing import List, NamedTuple + +struct_spwd = NamedTuple("struct_spwd", [("sp_nam", str), + ("sp_pwd", str), + ("sp_lstchg", int), + ("sp_min", int), + ("sp_max", int), + ("sp_warn", int), + ("sp_inact", int), + ("sp_expire", int), + ("sp_flag", int)]) + +def getspall() -> List[struct_spwd]: ... +def getspnam(name: str) -> struct_spwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi new file mode 100644 index 0000000..89d453e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_constants.pyi @@ -0,0 +1,94 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_constants.py + +from typing import Dict, List, TypeVar + +MAGIC: int +MAXREPEAT: int + +class error(Exception): ... + +FAILURE: str +SUCCESS: str +ANY: str +ANY_ALL: str +ASSERT: str +ASSERT_NOT: str +AT: str +BIGCHARSET: str +BRANCH: str +CALL: str +CATEGORY: str +CHARSET: str +GROUPREF: str +GROUPREF_IGNORE: str +GROUPREF_EXISTS: str +IN: str +IN_IGNORE: str +INFO: str +JUMP: str +LITERAL: str +LITERAL_IGNORE: str +MARK: str +MAX_REPEAT: str +MAX_UNTIL: str +MIN_REPEAT: str +MIN_UNTIL: str +NEGATE: str +NOT_LITERAL: str +NOT_LITERAL_IGNORE: str +RANGE: str +REPEAT: str +REPEAT_ONE: str +SUBPATTERN: str +MIN_REPEAT_ONE: str +AT_BEGINNING: str +AT_BEGINNING_LINE: str +AT_BEGINNING_STRING: str +AT_BOUNDARY: str +AT_NON_BOUNDARY: str +AT_END: str +AT_END_LINE: str +AT_END_STRING: str +AT_LOC_BOUNDARY: str +AT_LOC_NON_BOUNDARY: str +AT_UNI_BOUNDARY: str +AT_UNI_NON_BOUNDARY: str +CATEGORY_DIGIT: str +CATEGORY_NOT_DIGIT: str +CATEGORY_SPACE: str +CATEGORY_NOT_SPACE: str +CATEGORY_WORD: str +CATEGORY_NOT_WORD: str +CATEGORY_LINEBREAK: str +CATEGORY_NOT_LINEBREAK: str +CATEGORY_LOC_WORD: str +CATEGORY_LOC_NOT_WORD: str +CATEGORY_UNI_DIGIT: str +CATEGORY_UNI_NOT_DIGIT: str +CATEGORY_UNI_SPACE: str +CATEGORY_UNI_NOT_SPACE: str +CATEGORY_UNI_WORD: str +CATEGORY_UNI_NOT_WORD: str +CATEGORY_UNI_LINEBREAK: str +CATEGORY_UNI_NOT_LINEBREAK: str + +_T = TypeVar('_T') +def makedict(list: List[_T]) -> Dict[_T, int]: ... + +OP_IGNORE: Dict[str, str] +AT_MULTILINE: Dict[str, str] +AT_LOCALE: Dict[str, str] +AT_UNICODE: Dict[str, str] +CH_LOCALE: Dict[str, str] +CH_UNICODE: Dict[str, str] +SRE_FLAG_TEMPLATE: int +SRE_FLAG_IGNORECASE: int +SRE_FLAG_LOCALE: int +SRE_FLAG_MULTILINE: int +SRE_FLAG_DOTALL: int +SRE_FLAG_UNICODE: int +SRE_FLAG_VERBOSE: int +SRE_FLAG_DEBUG: int +SRE_INFO_PREFIX: int +SRE_INFO_LITERAL: int +SRE_INFO_CHARSET: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi new file mode 100644 index 0000000..beabb40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sre_parse.pyi @@ -0,0 +1,63 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_parse.py + +from typing import Any, Dict, Iterable, List, Match, Optional, Pattern as _Pattern, Set, Tuple, Union + +SPECIAL_CHARS: str +REPEAT_CHARS: str +DIGITS: Set +OCTDIGITS: Set +HEXDIGITS: Set +WHITESPACE: Set +ESCAPES: Dict[str, Tuple[str, int]] +CATEGORIES: Dict[str, Union[Tuple[str, str], Tuple[str, List[Tuple[str, str]]]]] +FLAGS: Dict[str, int] + +class Pattern: + flags: int + open: List[int] + groups: int + groupdict: Dict[str, int] + lookbehind: int + def __init__(self) -> None: ... + def opengroup(self, name: str = ...) -> int: ... + def closegroup(self, gid: int) -> None: ... + def checkgroup(self, gid: int) -> bool: ... + + +_OpSubpatternType = Tuple[Optional[int], int, int, SubPattern] +_OpGroupRefExistsType = Tuple[int, SubPattern, SubPattern] +_OpInType = List[Tuple[str, int]] +_OpBranchType = Tuple[None, List[SubPattern]] +_AvType = Union[_OpInType, _OpBranchType, Iterable[SubPattern], _OpGroupRefExistsType, _OpSubpatternType] +_CodeType = Union[str, _AvType] + +class SubPattern: + pattern: str + data: List[_CodeType] + width: Optional[int] + def __init__(self, pattern, data: List[_CodeType] = ...) -> None: ... + def dump(self, level: int = ...) -> None: ... + def __len__(self) -> int: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __getitem__(self, index: Union[int, slice]) -> Union[SubPattern, _CodeType]: ... + def __setitem__(self, index: Union[int, slice], code: _CodeType): ... + def insert(self, index, code: _CodeType) -> None: ... + def append(self, code: _CodeType) -> None: ... + def getwidth(self) -> int: ... + +class Tokenizer: + string: str + index: int + def __init__(self, string: str) -> None: ... + def match(self, char: str, skip: int = ...) -> int: ... + def get(self) -> Optional[str]: ... + def tell(self) -> Tuple[int, Optional[str]]: ... + def seek(self, index: int) -> None: ... + +def isident(char: str) -> bool: ... +def isdigit(char: str) -> bool: ... +def isname(name: str) -> bool: ... +def parse(str: str, flags: int = ..., pattern: Pattern = ...) -> SubPattern: ... +_Template = Tuple[List[Tuple[int, int]], List[Optional[int]]] +def parse_template(source: str, pattern: _Pattern) -> _Template: ... +def expand_template(template: _Template, match: Match) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stat.pyi new file mode 100644 index 0000000..dd3418d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stat.pyi @@ -0,0 +1,59 @@ +def S_ISDIR(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISBLK(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +ST_MODE = 0 +ST_INO = 0 +ST_DEV = 0 +ST_NLINK = 0 +ST_UID = 0 +ST_GID = 0 +ST_SIZE = 0 +ST_ATIME = 0 +ST_MTIME = 0 +ST_CTIME = 0 +S_IFSOCK = 0 +S_IFLNK = 0 +S_IFREG = 0 +S_IFBLK = 0 +S_IFDIR = 0 +S_IFCHR = 0 +S_IFIFO = 0 +S_ISUID = 0 +S_ISGID = 0 +S_ISVTX = 0 +S_IRWXU = 0 +S_IRUSR = 0 +S_IWUSR = 0 +S_IXUSR = 0 +S_IRWXG = 0 +S_IRGRP = 0 +S_IWGRP = 0 +S_IXGRP = 0 +S_IRWXO = 0 +S_IROTH = 0 +S_IWOTH = 0 +S_IXOTH = 0 +S_ENFMT = 0 +S_IREAD = 0 +S_IWRITE = 0 +S_IEXEC = 0 +UF_NODUMP = 0 +UF_IMMUTABLE = 0 +UF_APPEND = 0 +UF_OPAQUE = 0 +UF_NOUNLINK = 0 +UF_COMPRESSED = 0 +UF_HIDDEN = 0 +SF_ARCHIVED = 0 +SF_IMMUTABLE = 0 +SF_APPEND = 0 +SF_NOUNLINK = 0 +SF_SNAPSHOT = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/string.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/string.pyi new file mode 100644 index 0000000..624f092 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/string.pyi @@ -0,0 +1,78 @@ +# Stubs for string + +# Based on http://docs.python.org/3.2/library/string.html + +from typing import Any, AnyStr, Iterable, List, Mapping, Optional, overload, Sequence, Text, Tuple, Union + +ascii_letters: str +ascii_lowercase: str +ascii_uppercase: str +digits: str +hexdigits: str +letters: str +lowercase: str +octdigits: str +punctuation: str +printable: str +uppercase: str +whitespace: str + +def capwords(s: AnyStr, sep: AnyStr = ...) -> AnyStr: ... +# TODO: originally named 'from' +def maketrans(_from: str, to: str) -> str: ... +def atof(s: unicode) -> float: ... +def atoi(s: unicode, base: int = ...) -> int: ... +def atol(s: unicode, base: int = ...) -> int: ... +def capitalize(word: AnyStr) -> AnyStr: ... +def find(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rfind(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def index(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rindex(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def count(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def lower(s: AnyStr) -> AnyStr: ... +def split(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def rsplit(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def splitfields(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def join(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def joinfields(word: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def lstrip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def rstrip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def strip(s: AnyStr, chars: AnyStr = ...) -> AnyStr: ... +def swapcase(s: AnyStr) -> AnyStr: ... +def translate(s: str, table: str, deletechars: str = ...) -> str: ... +def upper(s: AnyStr) -> AnyStr: ... +def ljust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def rjust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def center(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def zfill(s: AnyStr, width: int) -> AnyStr: ... +def replace(s: AnyStr, old: AnyStr, new: AnyStr, maxreplace: int = ...) -> AnyStr: ... + +class Template: + template: Text + + def __init__(self, template: Text) -> None: ... + @overload + def substitute(self, mapping: Union[Mapping[str, str], Mapping[unicode, str]] = ..., **kwds: str) -> str: ... + @overload + def substitute(self, mapping: Union[Mapping[str, Text], Mapping[unicode, Text]] = ..., **kwds: Text) -> Text: ... + @overload + def safe_substitute(self, mapping: Union[Mapping[str, str], Mapping[unicode, str]] = ..., **kwds: str) -> str: ... + @overload + def safe_substitute(self, mapping: Union[Mapping[str, Text], Mapping[unicode, Text]], **kwds: Text) -> Text: ... + +# TODO(MichalPokorny): This is probably badly and/or loosely typed. +class Formatter(object): + def format(self, format_string: str, *args, **kwargs) -> str: ... + def vformat(self, format_string: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> str: ... + def parse(self, format_string: str) -> Iterable[Tuple[str, str, str, str]]: ... + def get_field(self, field_name: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: ... + def get_value(self, key: Union[int, str], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: + raise IndexError() + raise KeyError() + def check_unused_args(self, used_args: Sequence[Union[int, str]], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> None: ... + def format_field(self, value: Any, format_spec: str) -> Any: ... + def convert_field(self, value: Any, conversion: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stringold.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stringold.pyi new file mode 100644 index 0000000..ab3e764 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/stringold.pyi @@ -0,0 +1,46 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/stringold.py +from typing import AnyStr, Iterable, List, Optional, Type + +whitespace: str +lowercase: str +uppercase: str +letters: str +digits: str +hexdigits: str +octdigits: str +_idmap: str +_idmapL: Optional[List[str]] +index_error = ValueError +atoi_error = ValueError +atof_error = ValueError +atol_error = ValueError + + +def lower(s: AnyStr) -> AnyStr: ... +def upper(s: AnyStr) -> AnyStr: ... +def swapcase(s: AnyStr) -> AnyStr: ... +def strip(s: AnyStr) -> AnyStr: ... +def lstrip(s: AnyStr) -> AnyStr: ... +def rstrip(s: AnyStr) -> AnyStr: ... +def split(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def splitfields(s: AnyStr, sep: AnyStr = ..., maxsplit: int = ...) -> List[AnyStr]: ... +def join(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def joinfields(words: Iterable[AnyStr], sep: AnyStr = ...) -> AnyStr: ... +def index(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rindex(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def count(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def find(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def rfind(s: unicode, sub: unicode, start: int = ..., end: int = ...) -> int: ... +def atof(s: unicode) -> float: ... +def atoi(s: unicode, base: int = ...) -> int: ... +def atol(s: unicode, base: int = ...) -> long: ... +def ljust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def rjust(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def center(s: AnyStr, width: int, fillchar: AnyStr = ...) -> AnyStr: ... +def zfill(s: AnyStr, width: int) -> AnyStr: ... +def expandtabs(s: AnyStr, tabsize: int = ...) -> AnyStr: ... +def translate(s: str, table: str, deletions: str = ...) -> str: ... +def capitalize(s: AnyStr) -> AnyStr: ... +def capwords(s: AnyStr, sep: AnyStr = ...) -> AnyStr: ... +def maketrans(fromstr: str, tostr: str) -> str: ... +def replace(s: AnyStr, old: AnyStr, new: AnyStr, maxreplace: int = ...) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/strop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/strop.pyi new file mode 100644 index 0000000..e1a098f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/strop.pyi @@ -0,0 +1,72 @@ +"""Stub file for the 'strop' module.""" + +from typing import List, Sequence + +lowercase: str +uppercase: str +whitespace: str + +def atof(a: str) -> float: + raise DeprecationWarning() + +def atoi(a: str, base: int = ...) -> int: + raise DeprecationWarning() + +def atol(a: str, base: int = ...) -> long: + raise DeprecationWarning() + +def capitalize(s: str) -> str: + raise DeprecationWarning() + +def count(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def expandtabs(string: str, tabsize: int = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def find(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def join(list: Sequence[str], sep: str = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def joinfields(list: Sequence[str], sep: str = ...) -> str: + raise DeprecationWarning() + raise OverflowError() + +def lower(s: str) -> str: + raise DeprecationWarning() + +def lstrip(s: str) -> str: + raise DeprecationWarning() + +def maketrans(frm: str, to: str) -> str: ... + +def replace(s: str, old: str, new: str, maxsplit: int = ...) -> str: + raise DeprecationWarning() + +def rfind(s: str, sub: str, start: int = ..., end: int = ...) -> int: + raise DeprecationWarning() + +def rstrip(s: str) -> str: + raise DeprecationWarning() + +def split(s: str, sep: str, maxsplit: int = ...) -> List[str]: + raise DeprecationWarning() + +def splitfields(s: str, sep: str, maxsplit: int = ...) -> List[str]: + raise DeprecationWarning() + +def strip(s: str) -> str: + raise DeprecationWarning() + +def swapcase(s: str) -> str: + raise DeprecationWarning() + +def translate(s: str, table: str, deletechars: str = ...) -> str: + raise DeprecationWarning() + +def upper(s: str) -> str: + raise DeprecationWarning() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/subprocess.pyi new file mode 100644 index 0000000..b60e89e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/subprocess.pyi @@ -0,0 +1,117 @@ +# Stubs for subprocess + +# Based on http://docs.python.org/2/library/subprocess.html and Python 3 stub + +from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Union, Optional, List, Text + +_FILE = Union[None, int, IO[Any]] +_TXT = Union[bytes, Text] +_CMD = Union[_TXT, Sequence[_TXT]] +_ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] + +# Same args as Popen.__init__ +def call(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> int: ... + +def check_call(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> int: ... + +# Same args as Popen.__init__ except for stdout +def check_output(args: _CMD, + bufsize: int = ..., + executable: _TXT = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: _TXT = ..., + env: _ENV = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ...) -> bytes: ... + +PIPE: int +STDOUT: int + +class CalledProcessError(Exception): + returncode = 0 + # morally: _CMD + cmd: Any + # morally: Optional[bytes] + output: Any + + def __init__(self, + returncode: int, + cmd: _CMD, + output: Optional[bytes] = ...) -> None: ... + +class Popen: + stdin: Optional[IO[Any]] + stdout: Optional[IO[Any]] + stderr: Optional[IO[Any]] + pid = 0 + returncode = 0 + + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_TXT] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_TXT] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ...) -> None: ... + + def poll(self) -> int: ... + def wait(self) -> int: ... + # morally: -> Tuple[Optional[bytes], Optional[bytes]] + def communicate(self, input: Optional[_TXT] = ...) -> Tuple[Any, Any]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + def __enter__(self) -> Popen: ... + def __exit__(self, type, value, traceback) -> bool: ... + +def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented + +# Windows-only: STARTUPINFO etc. + +STD_INPUT_HANDLE: Any +STD_OUTPUT_HANDLE: Any +STD_ERROR_HANDLE: Any +SW_HIDE: Any +STARTF_USESTDHANDLES: Any +STARTF_USESHOWWINDOW: Any +CREATE_NEW_CONSOLE: Any +CREATE_NEW_PROCESS_GROUP: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/symbol.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/symbol.pyi new file mode 100644 index 0000000..55d25a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/symbol.pyi @@ -0,0 +1,91 @@ +# Stubs for symbol (Python 2) + +from typing import Dict + +single_input: int +file_input: int +eval_input: int +decorator: int +decorators: int +decorated: int +funcdef: int +parameters: int +varargslist: int +fpdef: int +fplist: int +stmt: int +simple_stmt: int +small_stmt: int +expr_stmt: int +augassign: int +print_stmt: int +del_stmt: int +pass_stmt: int +flow_stmt: int +break_stmt: int +continue_stmt: int +return_stmt: int +yield_stmt: int +raise_stmt: int +import_stmt: int +import_name: int +import_from: int +import_as_name: int +dotted_as_name: int +import_as_names: int +dotted_as_names: int +dotted_name: int +global_stmt: int +exec_stmt: int +assert_stmt: int +compound_stmt: int +if_stmt: int +while_stmt: int +for_stmt: int +try_stmt: int +with_stmt: int +with_item: int +except_clause: int +suite: int +testlist_safe: int +old_test: int +old_lambdef: int +test: int +or_test: int +and_test: int +not_test: int +comparison: int +comp_op: int +expr: int +xor_expr: int +and_expr: int +shift_expr: int +arith_expr: int +term: int +factor: int +power: int +atom: int +listmaker: int +testlist_comp: int +lambdef: int +trailer: int +subscriptlist: int +subscript: int +sliceop: int +exprlist: int +testlist: int +dictorsetmaker: int +classdef: int +arglist: int +argument: int +list_iter: int +list_for: int +list_if: int +comp_iter: int +comp_for: int +comp_if: int +testlist1: int +encoding_decl: int +yield_expr: int + +sym_name: Dict[int, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sys.pyi new file mode 100644 index 0000000..e67b263 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/sys.pyi @@ -0,0 +1,138 @@ +"""Stubs for the 'sys' module.""" + +from typing import ( + IO, NoReturn, Union, List, Sequence, Any, Dict, Tuple, BinaryIO, Optional, + Callable, overload, Text, Type, +) +from types import FrameType, ModuleType, TracebackType, ClassType + +# The following type alias are stub-only and do not exist during runtime +_ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +_OptExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +class _flags: + bytes_warning: int + debug: int + division_new: int + division_warning: int + dont_write_bytecode: int + hash_randomization: int + ignore_environment: int + inspect: int + interactive: int + no_site: int + no_user_site: int + optimize: int + py3k_warning: int + tabcheck: int + unicode: int + verbose: int + +class _float_info: + max: float + max_exp: int + max_10_exp: int + min: float + min_exp: int + min_10_exp: int + dig: int + mant_dig: int + epsilon: float + radix: int + rounds: int + +class _version_info(Tuple[int, int, int, str, int]): + major = 0 + minor = 0 + micro = 0 + releaselevel: str + serial = 0 + +_mercurial: Tuple[str, str, str] +api_version: int +argv: List[str] +builtin_module_names: Tuple[str, ...] +byteorder: str +copyright: str +dont_write_bytecode: bool +exec_prefix: str +executable: str +flags: _flags +float_repr_style: str +hexversion: int +long_info: object +maxint: int +maxsize: int +maxunicode: int +modules: Dict[str, Any] +path: List[str] +platform: str +prefix: str +py3kwarning: bool +__stderr__: IO[str] +__stdin__: IO[str] +__stdout__: IO[str] +stderr: IO[str] +stdin: IO[str] +stdout: IO[str] +subversion: Tuple[str, str, str] +version: str +warnoptions: object +float_info: _float_info +version_info: _version_info +ps1: str +ps2: str +last_type: type +last_value: BaseException +last_traceback: TracebackType +# TODO precise types +meta_path: List[Any] +path_hooks: List[Any] +path_importer_cache: Dict[str, Any] +displayhook: Optional[Callable[[int], None]] +excepthook: Optional[Callable[[type, BaseException, TracebackType], None]] +exc_type: Optional[type] +exc_value: Union[BaseException, ClassType] +exc_traceback: TracebackType + +class _WindowsVersionType: + major: Any + minor: Any + build: Any + platform: Any + service_pack: Any + service_pack_major: Any + service_pack_minor: Any + suite_mask: Any + product_type: Any + +def getwindowsversion() -> _WindowsVersionType: ... + +def _clear_type_cache() -> None: ... +def _current_frames() -> Dict[int, FrameType]: ... +def _getframe(depth: int = ...) -> FrameType: ... +def call_tracing(fn: Any, args: Any) -> Any: ... +def __displayhook__(value: int) -> None: ... +def __excepthook__(type_: type, value: BaseException, traceback: TracebackType) -> None: ... +def exc_clear() -> None: + raise DeprecationWarning() +def exc_info() -> _OptExcInfo: ... + +# sys.exit() accepts an optional argument of anything printable +def exit(arg: Any = ...) -> NoReturn: + raise SystemExit() +def getcheckinterval() -> int: ... # deprecated +def getdefaultencoding() -> str: ... +def getdlopenflags() -> int: ... +def getfilesystemencoding() -> str: ... # In practice, never returns None +def getrefcount(arg: Any) -> int: ... +def getrecursionlimit() -> int: ... +def getsizeof(obj: object, default: int = ...) -> int: ... +def getprofile() -> Optional[Any]: ... +def gettrace() -> Optional[Any]: ... +def setcheckinterval(interval: int) -> None: ... # deprecated +def setdlopenflags(n: int) -> None: ... +def setdefaultencoding(encoding: Text) -> None: ... # only exists after reload(sys) +def setprofile(profilefunc: Any) -> None: ... # TODO type +def setrecursionlimit(limit: int) -> None: ... +def settrace(tracefunc: Any) -> None: ... # TODO type diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tempfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tempfile.pyi new file mode 100644 index 0000000..2dcc1a9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tempfile.pyi @@ -0,0 +1,111 @@ +from typing import Any, AnyStr, IO, Iterable, Iterator, List, Optional, overload, Text, Tuple, Union +from thread import LockType +from random import Random + +TMP_MAX: int +tempdir: str +template: str +_name_sequence: Optional[_RandomNameSequence] + +class _RandomNameSequence: + characters: str = ... + mutex: LockType + @property + def rng(self) -> Random: ... + def __iter__(self) -> _RandomNameSequence: ... + def next(self) -> str: ... + # from os.path: + def normcase(self, path: AnyStr) -> AnyStr: ... + +class _TemporaryFileWrapper(IO[str]): + delete: bool + file: IO + name: Any + def __init__(self, file: IO, name: Any, delete: bool = ...) -> None: ... + def __del__(self) -> None: ... + def __enter__(self) -> _TemporaryFileWrapper: ... + def __exit__(self, exc, value, tb) -> bool: ... + def __getattr__(self, name: unicode) -> Any: ... + def close(self) -> None: ... + def unlink(self, path: unicode) -> None: ... + # These methods don't exist directly on this object, but + # are delegated to the underlying IO object through __getattr__. + # We need to add them here so that this class is concrete. + def __iter__(self) -> Iterator[str]: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: Text) -> int: ... + def writelines(self, lines: Iterable[str]) -> None: ... + + +# TODO text files + +def TemporaryFile( + mode: Union[bytes, unicode] = ..., + bufsize: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ... +) -> _TemporaryFileWrapper: + ... + +def NamedTemporaryFile( + mode: Union[bytes, unicode] = ..., + bufsize: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ..., + delete: bool = ... +) -> _TemporaryFileWrapper: + ... + +def SpooledTemporaryFile( + max_size: int = ..., + mode: Union[bytes, unicode] = ..., + buffering: int = ..., + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ... +) -> _TemporaryFileWrapper: + ... + +class TemporaryDirectory: + name: Any + def __init__(self, + suffix: Union[bytes, unicode] = ..., + prefix: Union[bytes, unicode] = ..., + dir: Union[bytes, unicode] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> Any: ... # Can be str or unicode + def __exit__(self, type, value, traceback) -> bool: ... + +@overload +def mkstemp() -> Tuple[int, str]: ... +@overload +def mkstemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ..., + text: bool = ...) -> Tuple[int, AnyStr]: ... +@overload +def mkdtemp() -> str: ... +@overload +def mkdtemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... +@overload +def mktemp() -> str: ... +@overload +def mktemp(suffix: AnyStr = ..., prefix: AnyStr = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... +def gettempdir() -> str: ... +def gettempprefix() -> str: ... + +def _candidate_tempdir_list() -> List[str]: ... +def _get_candidate_names() -> Optional[_RandomNameSequence]: ... +def _get_default_tempdir() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/textwrap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/textwrap.pyi new file mode 100644 index 0000000..60498a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/textwrap.pyi @@ -0,0 +1,61 @@ +from typing import AnyStr, List, Dict, Pattern + +class TextWrapper(object): + width: int = ... + initial_indent: str = ... + subsequent_indent: str = ... + expand_tabs: bool = ... + replace_whitespace: bool = ... + fix_sentence_endings: bool = ... + drop_whitespace: bool = ... + break_long_words: bool = ... + break_on_hyphens: bool = ... + + # Attributes not present in documentation + sentence_end_re: Pattern[str] = ... + wordsep_re: Pattern[str] = ... + wordsep_simple_re: Pattern[str] = ... + whitespace_trans: str = ... + unicode_whitespace_trans: Dict[int, int] = ... + uspace: int = ... + x: int = ... + + def __init__( + self, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> None: + ... + + def wrap(self, text: AnyStr) -> List[AnyStr]: ... + def fill(self, text: AnyStr) -> AnyStr: ... + +def wrap(text: AnyStr, + width: int = ..., + initial_indent: AnyStr = ..., + subsequent_indent: AnyStr = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> List[AnyStr]: ... + +def fill(text: AnyStr, + width: int = ..., + initial_indent: AnyStr = ..., + subsequent_indent: AnyStr = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ...) -> AnyStr: ... + +def dedent(text: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/thread.pyi new file mode 100644 index 0000000..eb4e6d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/thread.pyi @@ -0,0 +1,30 @@ +"""Stubs for the "thread" module.""" +from typing import Callable, Any + +def _count() -> int: ... + +class error(Exception): ... + +class LockType: + def acquire(self, waitflag: int = ...) -> bool: ... + def acquire_lock(self, waitflag: int = ...) -> bool: ... + def release(self) -> None: ... + def release_lock(self) -> None: ... + def locked(self) -> bool: ... + def locked_lock(self) -> bool: ... + def __enter__(self) -> LockType: ... + def __exit__(self, typ: Any, value: Any, traceback: Any) -> None: ... + +class _local(object): ... +class _localdummy(object): ... + +def start_new(function: Callable[..., Any], args: Any, kwargs: Any = ...) -> int: ... +def start_new_thread(function: Callable[..., Any], args: Any, kwargs: Any = ...) -> int: ... +def interrupt_main() -> None: ... +def exit() -> None: + raise SystemExit() +def exit_thread() -> Any: + raise SystemExit() +def allocate_lock() -> LockType: ... +def get_ident() -> int: ... +def stack_size(size: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/toaiff.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/toaiff.pyi new file mode 100644 index 0000000..77334c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/toaiff.pyi @@ -0,0 +1,16 @@ +# Stubs for toaiff (Python 2) + +# Source: https://hg.python.org/cpython/file/2.7/Lib/toaiff.py +from pipes import Template +from typing import Dict, List + + +__all__: List[str] +table: Dict[str, Template] +t: Template +uncompress: Template + +class error(Exception): ... + +def toaiff(filename: str) -> str: ... +def _toaiff(filename: str, temps: List[str]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tokenize.pyi new file mode 100644 index 0000000..43457b6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/tokenize.pyi @@ -0,0 +1,136 @@ +# Automatically generated by pytype, manually fixed up. May still contain errors. + +from typing import Any, Callable, Dict, Generator, Iterator, List, Tuple, Union, Iterable + +__author__: str +__credits__: str + +AMPER: int +AMPEREQUAL: int +AT: int +BACKQUOTE: int +Binnumber: str +Bracket: str +CIRCUMFLEX: int +CIRCUMFLEXEQUAL: int +COLON: int +COMMA: int +COMMENT: int +Comment: str +ContStr: str +DEDENT: int +DOT: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +DOUBLESTAR: int +DOUBLESTAREQUAL: int +Decnumber: str +Double: str +Double3: str +ENDMARKER: int +EQEQUAL: int +EQUAL: int +ERRORTOKEN: int +Expfloat: str +Exponent: str +Floatnumber: str +Funny: str +GREATER: int +GREATEREQUAL: int +Hexnumber: str +INDENT: int + +def ISEOF(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISTERMINAL(x: int) -> bool: ... + +Ignore: str +Imagnumber: str +Intnumber: str +LBRACE: int +LEFTSHIFT: int +LEFTSHIFTEQUAL: int +LESS: int +LESSEQUAL: int +LPAR: int +LSQB: int +MINEQUAL: int +MINUS: int +NAME: int +NEWLINE: int +NL: int +NOTEQUAL: int +NT_OFFSET: int +NUMBER: int +N_TOKENS: int +Name: str +Number: str +OP: int +Octnumber: str +Operator: str +PERCENT: int +PERCENTEQUAL: int +PLUS: int +PLUSEQUAL: int +PlainToken: str +Pointfloat: str +PseudoExtras: str +PseudoToken: str +RBRACE: int +RIGHTSHIFT: int +RIGHTSHIFTEQUAL: int +RPAR: int +RSQB: int +SEMI: int +SLASH: int +SLASHEQUAL: int +STAR: int +STAREQUAL: int +STRING: int +Single: str +Single3: str +Special: str +String: str +TILDE: int +Token: str +Triple: str +VBAR: int +VBAREQUAL: int +Whitespace: str +chain: type +double3prog: type +endprogs: Dict[str, Any] +pseudoprog: type +single3prog: type +single_quoted: Dict[str, str] +t: str +tabsize: int +tok_name: Dict[int, str] +tokenprog: type +triple_quoted: Dict[str, str] +x: str + +_Pos = Tuple[int, int] +_TokenType = Tuple[int, str, _Pos, _Pos, str] + +def any(*args, **kwargs) -> str: ... +def generate_tokens(readline: Callable[[], str]) -> Generator[_TokenType, None, None]: ... +def group(*args: str) -> str: ... +def maybe(*args: str) -> str: ... +def printtoken(type: int, token: str, srow_scol: _Pos, erow_ecol: _Pos, line: str) -> None: ... +def tokenize(readline: Callable[[], str], tokeneater: Callable[[Tuple[int, str, _Pos, _Pos, str]], None]) -> None: ... +def tokenize_loop(readline: Callable[[], str], tokeneater: Callable[[Tuple[int, str, _Pos, _Pos, str]], None]) -> None: ... +def untokenize(iterable: Iterable[_TokenType]) -> str: ... + +class StopTokenizing(Exception): ... + +class TokenError(Exception): ... + +class Untokenizer: + prev_col: int + prev_row: int + tokens: List[str] + def __init__(self) -> None: ... + def add_whitespace(self, _Pos) -> None: ... + def compat(self, token: Tuple[int, Any], iterable: Iterator[_TokenType]) -> None: ... + def untokenize(self, iterable: Iterable[_TokenType]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/types.pyi new file mode 100644 index 0000000..5984706 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/types.pyi @@ -0,0 +1,168 @@ +# Stubs for types +# Note, all classes "defined" here require special handling. + +from typing import ( + Any, Callable, Dict, Iterable, Iterator, List, Optional, + Tuple, Type, TypeVar, Union, overload, +) + +_T = TypeVar('_T') + +class NoneType: ... +TypeType = type +ObjectType = object + +IntType = int +LongType = int # Really long, but can't reference that due to a mypy import cycle +FloatType = float +BooleanType = bool +ComplexType = complex +StringType = str +UnicodeType = unicode +StringTypes: Tuple[Type[StringType], Type[UnicodeType]] +BufferType = buffer +TupleType = tuple +ListType = list +DictType = dict +DictionaryType = dict + +class _Cell: + cell_contents: Any + +class FunctionType: + func_closure: Optional[Tuple[_Cell, ...]] = ... + func_code: CodeType = ... + func_defaults: Optional[Tuple[Any, ...]] = ... + func_dict: Dict[str, Any] = ... + func_doc: Optional[str] = ... + func_globals: Dict[str, Any] = ... + func_name: str = ... + __closure__ = func_closure + __code__ = func_code + __defaults__ = func_defaults + __dict__ = func_dict + __globals__ = func_globals + __name__ = func_name + def __init__(self, code: CodeType, globals: Dict[str, Any], name: Optional[str] = ..., argdefs: Optional[Tuple[object, ...]] = ..., closure: Optional[Tuple[_Cell, ...]] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __get__(self, obj: Optional[object], type: Optional[type]) -> UnboundMethodType: ... + +LambdaType = FunctionType + +class CodeType: + co_argcount: int + co_cellvars: Tuple[str, ...] + co_code: str + co_consts: Tuple[Any, ...] + co_filename: str + co_firstlineno: int + co_flags: int + co_freevars: Tuple[str, ...] + co_lnotab: str + co_name: str + co_names: Tuple[str, ...] + co_nlocals: int + co_stacksize: int + co_varnames: Tuple[str, ...] + +class GeneratorType: + gi_code: CodeType + gi_frame: FrameType + gi_running: int + def __iter__(self) -> GeneratorType: ... + def close(self) -> None: ... + def next(self) -> Any: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +class ClassType: ... +class UnboundMethodType: + im_class: type = ... + im_func: FunctionType = ... + im_self: object = ... + __name__: str + __func__ = im_func + __self__ = im_self + def __init__(self, func: Callable, obj: object) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + +class InstanceType(object): ... + +MethodType = UnboundMethodType + +class BuiltinFunctionType: + __self__: Optional[object] + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +BuiltinMethodType = BuiltinFunctionType + +class ModuleType: + __doc__: Optional[str] + __file__: Optional[str] + __name__: str + __package__: Optional[str] + __path__: Optional[Iterable[str]] + __dict__: Dict[str, Any] + def __init__(self, name: str, doc: Optional[str] = ...) -> None: ... +FileType = file +XRangeType = xrange + +class TracebackType: + tb_frame: FrameType + tb_lasti: int + tb_lineno: int + tb_next: TracebackType + +class FrameType: + f_back: FrameType + f_builtins: Dict[str, Any] + f_code: CodeType + f_exc_type: None + f_exc_value: None + f_exc_traceback: None + f_globals: Dict[str, Any] + f_lasti: int + f_lineno: int + f_locals: Dict[str, Any] + f_restricted: bool + f_trace: Callable[[], None] + + def clear(self) -> None: ... + +SliceType = slice +class EllipsisType: ... + +class DictProxyType: + # TODO is it possible to have non-string keys? + # no __init__ + def copy(self) -> dict: ... + def get(self, key: str, default: _T = ...) -> Union[Any, _T]: ... + def has_key(self, key: str) -> bool: ... + def items(self) -> List[Tuple[str, Any]]: ... + def iteritems(self) -> Iterator[Tuple[str, Any]]: ... + def iterkeys(self) -> Iterator[str]: ... + def itervalues(self) -> Iterator[Any]: ... + def keys(self) -> List[str]: ... + def values(self) -> List[Any]: ... + def __contains__(self, key: str) -> bool: ... + def __getitem__(self, key: str) -> Any: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + +class NotImplementedType: ... + +class GetSetDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... +# Same type on Jython, different on CPython and PyPy, unknown on IronPython. +class MemberDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/typing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/typing.pyi new file mode 100644 index 0000000..6c159b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/typing.pyi @@ -0,0 +1,468 @@ +# Stubs for typing (Python 2.7) + +from abc import abstractmethod, ABCMeta +from types import CodeType, FrameType, TracebackType +import collections # Needed by aliases like DefaultDict, see mypy issue 2986 + +# Definitions of special type checking related constructs. Their definitions +# are not used, so their value does not matter. + +overload = object() +Any = object() +TypeVar = object() +_promote = object() +no_type_check = object() + +class _SpecialForm(object): + def __getitem__(self, typeargs: Any) -> object: ... + +Tuple: _SpecialForm = ... +Generic: _SpecialForm = ... +Protocol: _SpecialForm = ... +Callable: _SpecialForm = ... +Type: _SpecialForm = ... +ClassVar: _SpecialForm = ... + +class GenericMeta(type): ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] + +# Type aliases and type constructors + +class TypeAlias: + # Class for defining generic aliases for library types. + def __init__(self, target_type: type) -> None: ... + def __getitem__(self, typeargs: Any) -> Any: ... + +Union = TypeAlias(object) +Optional = TypeAlias(object) +List = TypeAlias(object) +Dict = TypeAlias(object) +DefaultDict = TypeAlias(object) +Set = TypeAlias(object) +FrozenSet = TypeAlias(object) +Counter = TypeAlias(object) +Deque = TypeAlias(object) + +# Predefined type variables. +AnyStr = TypeVar('AnyStr', str, unicode) + +# Abstract base classes. + +# These type variables are used by the container types. +_T = TypeVar('_T') +_S = TypeVar('_S') +_KT = TypeVar('_KT') # Key type. +_VT = TypeVar('_VT') # Value type. +_T_co = TypeVar('_T_co', covariant=True) # Any type covariant containers. +_V_co = TypeVar('_V_co', covariant=True) # Any type covariant containers. +_KT_co = TypeVar('_KT_co', covariant=True) # Key type covariant containers. +_VT_co = TypeVar('_VT_co', covariant=True) # Value type covariant containers. +_T_contra = TypeVar('_T_contra', contravariant=True) # Ditto contravariant. +_TC = TypeVar('_TC', bound=Type[object]) +_C = TypeVar("_C", bound=Callable) + +def runtime(cls: _TC) -> _TC: ... + +@runtime +class SupportsInt(Protocol, metaclass=ABCMeta): + @abstractmethod + def __int__(self) -> int: ... + +@runtime +class SupportsFloat(Protocol, metaclass=ABCMeta): + @abstractmethod + def __float__(self) -> float: ... + +@runtime +class SupportsComplex(Protocol, metaclass=ABCMeta): + @abstractmethod + def __complex__(self) -> complex: ... + +@runtime +class SupportsAbs(Protocol[_T_co]): + @abstractmethod + def __abs__(self) -> _T_co: ... + +@runtime +class Reversible(Protocol[_T_co]): + @abstractmethod + def __reversed__(self) -> Iterator[_T_co]: ... + +@runtime +class Sized(Protocol, metaclass=ABCMeta): + @abstractmethod + def __len__(self) -> int: ... + +@runtime +class Hashable(Protocol, metaclass=ABCMeta): + # TODO: This is special, in that a subclass of a hashable class may not be hashable + # (for example, list vs. object). It's not obvious how to represent this. This class + # is currently mostly useless for static checking. + @abstractmethod + def __hash__(self) -> int: ... + +@runtime +class Iterable(Protocol[_T_co]): + @abstractmethod + def __iter__(self) -> Iterator[_T_co]: ... + +@runtime +class Iterator(Iterable[_T_co], Protocol[_T_co]): + @abstractmethod + def next(self) -> _T_co: ... + def __iter__(self) -> Iterator[_T_co]: ... + +class Generator(Iterator[_T_co], Generic[_T_co, _T_contra, _V_co]): + @abstractmethod + def next(self) -> _T_co: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: TracebackType = ...) -> _T_co: ... + @abstractmethod + def close(self) -> None: ... + @property + def gi_code(self) -> CodeType: ... + @property + def gi_frame(self) -> FrameType: ... + @property + def gi_running(self) -> bool: ... + +@runtime +class Container(Protocol[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + +class Sequence(Iterable[_T_co], Container[_T_co], Reversible[_T_co], Generic[_T_co]): + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T_co: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> Sequence[_T_co]: ... + # Mixin methods + def index(self, x: Any) -> int: ... + def count(self, x: Any) -> int: ... + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __reversed__(self) -> Iterator[_T_co]: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class MutableSequence(Sequence[_T], Generic[_T]): + @abstractmethod + def insert(self, index: int, object: _T) -> None: ... + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> MutableSequence[_T]: ... + @overload + @abstractmethod + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + @abstractmethod + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: int) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: slice) -> None: ... + # Mixin methods + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def reverse(self) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def remove(self, object: _T) -> None: ... + def __iadd__(self, x: Iterable[_T]) -> MutableSequence[_T]: ... + +class AbstractSet(Iterable[_T_co], Container[_T_co], Generic[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + # Mixin methods + def __le__(self, s: AbstractSet[Any]) -> bool: ... + def __lt__(self, s: AbstractSet[Any]) -> bool: ... + def __gt__(self, s: AbstractSet[Any]) -> bool: ... + def __ge__(self, s: AbstractSet[Any]) -> bool: ... + def __and__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __or__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + def __sub__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __xor__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + # TODO: argument can be any container? + def isdisjoint(self, s: AbstractSet[Any]) -> bool: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + + +class MutableSet(AbstractSet[_T], Generic[_T]): + @abstractmethod + def add(self, x: _T) -> None: ... + @abstractmethod + def discard(self, x: _T) -> None: ... + # Mixin methods + def clear(self) -> None: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def __ior__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __iand__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + def __ixor__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __isub__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + +class MappingView(object): + def __len__(self) -> int: ... + +class ItemsView(MappingView, AbstractSet[Tuple[_KT_co, _VT_co]], Generic[_KT_co, _VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[Tuple[_KT_co, _VT_co]]: ... + +class KeysView(MappingView, AbstractSet[_KT_co], Generic[_KT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT_co]: ... + +class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_VT_co]: ... + +@runtime +class ContextManager(Protocol[_T_co]): + def __enter__(self) -> _T_co: ... + def __exit__(self, __exc_type: Optional[Type[BaseException]], + __exc_value: Optional[BaseException], + __traceback: Optional[TracebackType]) -> Optional[bool]: ... + +class Mapping(Iterable[_KT], Container[_KT], Generic[_KT, _VT_co]): + # TODO: We wish the key type could also be covariant, but that doesn't work, + # see discussion in https: //github.com/python/typing/pull/273. + @abstractmethod + def __getitem__(self, k: _KT) -> _VT_co: + ... + # Mixin methods + @overload + def get(self, k: _KT) -> Optional[_VT_co]: ... + @overload + def get(self, k: _KT, default: Union[_VT_co, _T]) -> Union[_VT_co, _T]: ... + def keys(self) -> list[_KT]: ... + def values(self) -> list[_VT_co]: ... + def items(self) -> list[Tuple[_KT, _VT_co]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT_co]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT_co]]: ... + def __contains__(self, o: object) -> bool: ... + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]): + @abstractmethod + def __setitem__(self, k: _KT, v: _VT) -> None: ... + @abstractmethod + def __delitem__(self, v: _KT) -> None: ... + + def clear(self) -> None: ... + @overload + def pop(self, k: _KT) -> _VT: ... + @overload + def pop(self, k: _KT, default: Union[_VT, _T] = ...) -> Union[_VT, _T]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + +Text = unicode + +TYPE_CHECKING = True + +class IO(Iterator[AnyStr], Generic[AnyStr]): + # TODO detach + # TODO use abstract properties + @property + def mode(self) -> str: ... + @property + def name(self) -> str: ... + @abstractmethod + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + @abstractmethod + def fileno(self) -> int: ... + @abstractmethod + def flush(self) -> None: ... + @abstractmethod + def isatty(self) -> bool: ... + # TODO what if n is None? + @abstractmethod + def read(self, n: int = ...) -> AnyStr: ... + @abstractmethod + def readable(self) -> bool: ... + @abstractmethod + def readline(self, limit: int = ...) -> AnyStr: ... + @abstractmethod + def readlines(self, hint: int = ...) -> list[AnyStr]: ... + @abstractmethod + def seek(self, offset: int, whence: int = ...) -> int: ... + @abstractmethod + def seekable(self) -> bool: ... + @abstractmethod + def tell(self) -> int: ... + @abstractmethod + def truncate(self, size: Optional[int] = ...) -> int: ... + @abstractmethod + def writable(self) -> bool: ... + # TODO buffer objects + @abstractmethod + def write(self, s: AnyStr) -> int: ... + @abstractmethod + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + + @abstractmethod + def next(self) -> AnyStr: ... + @abstractmethod + def __iter__(self) -> Iterator[AnyStr]: ... + @abstractmethod + def __enter__(self) -> IO[AnyStr]: ... + @abstractmethod + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], + traceback: Optional[TracebackType]) -> bool: ... + +class BinaryIO(IO[str]): + # TODO readinto + # TODO read1? + # TODO peek? + @abstractmethod + def __enter__(self) -> BinaryIO: ... + +class TextIO(IO[unicode]): + # TODO use abstractproperty + @property + def buffer(self) -> BinaryIO: ... + @property + def encoding(self) -> str: ... + @property + def errors(self) -> Optional[str]: ... + @property + def line_buffering(self) -> bool: ... + @property + def newlines(self) -> Any: ... # None, str or tuple + @abstractmethod + def __enter__(self) -> TextIO: ... + +class ByteString(Sequence[int], metaclass=ABCMeta): ... + +class Match(Generic[AnyStr]): + pos: int + endpos: int + lastindex: Optional[int] + string: AnyStr + + # The regular expression object whose match() or search() method produced + # this match instance. This should not be Pattern[AnyStr] because the type + # of the pattern is independent of the type of the matched string in + # Python 2. Strictly speaking Match should be generic over AnyStr twice: + # once for the type of the pattern and once for the type of the matched + # string. + re: Pattern[Any] + # Can be None if there are no groups or if the last group was unnamed; + # otherwise matches the type of the pattern. + lastgroup: Optional[Any] + + def expand(self, template: Union[str, Text]) -> Any: ... + + @overload + def group(self, group1: int = ...) -> AnyStr: ... + @overload + def group(self, group1: str) -> AnyStr: ... + @overload + def group(self, group1: int, group2: int, + *groups: int) -> Tuple[AnyStr, ...]: ... + @overload + def group(self, group1: str, group2: str, + *groups: str) -> Tuple[AnyStr, ...]: ... + + def groups(self, default: AnyStr = ...) -> Tuple[AnyStr, ...]: ... + def groupdict(self, default: AnyStr = ...) -> Dict[str, AnyStr]: ... + def start(self, group: Union[int, str] = ...) -> int: ... + def end(self, group: Union[int, str] = ...) -> int: ... + def span(self, group: Union[int, str] = ...) -> Tuple[int, int]: ... + +# We need a second TypeVar with the same definition as AnyStr, because +# Pattern is generic over AnyStr (determining the type of its .pattern +# attribute), but at the same time its methods take either bytes or +# Text and return the same type, regardless of the type of the pattern. +_AnyStr2 = TypeVar('_AnyStr2', bytes, Text) + +class Pattern(Generic[AnyStr]): + flags: int + groupindex: Dict[AnyStr, int] + groups: int + pattern: AnyStr + + def search(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Optional[Match[_AnyStr2]]: ... + def match(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Optional[Match[_AnyStr2]]: ... + def split(self, string: _AnyStr2, maxsplit: int = ...) -> List[_AnyStr2]: ... + # Returns either a list of _AnyStr2 or a list of tuples, depending on + # whether there are groups in the pattern. + def findall(self, string: Union[bytes, Text], pos: int = ..., + endpos: int = ...) -> List[Any]: ... + def finditer(self, string: _AnyStr2, pos: int = ..., + endpos: int = ...) -> Iterator[Match[_AnyStr2]]: ... + + @overload + def sub(self, repl: _AnyStr2, string: _AnyStr2, + count: int = ...) -> _AnyStr2: ... + @overload + def sub(self, repl: Callable[[Match[_AnyStr2]], _AnyStr2], string: _AnyStr2, + count: int = ...) -> _AnyStr2: ... + + @overload + def subn(self, repl: _AnyStr2, string: _AnyStr2, + count: int = ...) -> Tuple[_AnyStr2, int]: ... + @overload + def subn(self, repl: Callable[[Match[_AnyStr2]], _AnyStr2], string: _AnyStr2, + count: int = ...) -> Tuple[_AnyStr2, int]: ... + +# Functions + +def get_type_hints(obj: Callable, globalns: Optional[dict[Text, Any]] = ..., + localns: Optional[dict[Text, Any]] = ...) -> None: ... + +@overload +def cast(tp: Type[_T], obj: Any) -> _T: ... +@overload +def cast(tp: str, obj: Any) -> Any: ... + +# Type constructors + +# NamedTuple is special-cased in the type checker +class NamedTuple(tuple): + _fields: Tuple[str, ...] + + def __init__(self, typename: Text, fields: Iterable[Tuple[Text, Any]] = ..., *, + verbose: bool = ..., rename: bool = ..., **kwargs: Any) -> None: ... + + @classmethod + def _make(cls: Type[_T], iterable: Iterable[Any]) -> _T: ... + + def _asdict(self) -> dict: ... + def _replace(self: _T, **kwargs: Any) -> _T: ... + +def NewType(name: str, tp: Type[_T]) -> Type[_T]: ... + +# This itself is only available during type checking +def type_check_only(func_or_cls: _C) -> _C: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/unittest.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/unittest.pyi new file mode 100644 index 0000000..d8d499a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/unittest.pyi @@ -0,0 +1,262 @@ +# Stubs for unittest + +# Based on http://docs.python.org/2.7/library/unittest.html + +from typing import (Any, Callable, Dict, FrozenSet, Iterable, Iterator, + List, NoReturn, Optional, overload, Pattern, Sequence, Set, + Text, TextIO, Tuple, Type, TypeVar, Union) +from abc import abstractmethod, ABCMeta +import types + +_T = TypeVar('_T') +_FT = TypeVar('_FT') + +_ExceptionType = Union[Type[BaseException], Tuple[Type[BaseException], ...]] +_Regexp = Union[Text, Pattern[Text]] + +class Testable(metaclass=ABCMeta): + @abstractmethod + def run(self, result: TestResult) -> None: ... + @abstractmethod + def debug(self) -> None: ... + @abstractmethod + def countTestCases(self) -> int: ... + +# TODO ABC for test runners? + +class TestResult: + errors: List[Tuple[Testable, str]] + failures: List[Tuple[Testable, str]] + skipped: List[Tuple[Testable, str]] + expectedFailures: List[Tuple[Testable, str]] + unexpectedSuccesses: List[Testable] + shouldStop: bool + testsRun: int + buffer: bool + failfast: bool + + def wasSuccessful(self) -> bool: ... + def stop(self) -> None: ... + def startTest(self, test: Testable) -> None: ... + def stopTest(self, test: Testable) -> None: ... + def startTestRun(self) -> None: ... + def stopTestRun(self) -> None: ... + def addError(self, test: Testable, err: Tuple[type, Any, Any]) -> None: ... # TODO + def addFailure(self, test: Testable, err: Tuple[type, Any, Any]) -> None: ... # TODO + def addSuccess(self, test: Testable) -> None: ... + def addSkip(self, test: Testable, reason: str) -> None: ... + def addExpectedFailure(self, test: Testable, err: str) -> None: ... + def addUnexpectedSuccess(self, test: Testable) -> None: ... + +class _AssertRaisesBaseContext: + expected: Any + failureException: Type[BaseException] + obj_name: str + expected_regex: Pattern[str] + +class _AssertRaisesContext(_AssertRaisesBaseContext): + exception: Any + def __enter__(self) -> _AssertRaisesContext: ... + def __exit__(self, exc_type, exc_value, tb) -> bool: ... + +class TestCase(Testable): + failureException: Type[BaseException] + longMessage: bool + maxDiff: Optional[int] + # undocumented + _testMethodName: str + def __init__(self, methodName: str = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + @classmethod + def setUpClass(cls) -> None: ... + @classmethod + def tearDownClass(cls) -> None: ... + def run(self, result: TestResult = ...) -> None: ... + def debug(self) -> None: ... + def assert_(self, expr: Any, msg: object = ...) -> None: ... + def failUnless(self, expr: Any, msg: object = ...) -> None: ... + def assertTrue(self, expr: Any, msg: object = ...) -> None: ... + def assertEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertEquals(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def failUnlessEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertNotEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertNotEquals(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def failIfEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + @overload + def assertAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertAlmostEquals(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def failUnlessAlmostEqual(self, first: float, second: float, places: int = ..., + msg: object = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEquals(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def failIfAlmostEqual(self, first: float, second: float, places: int = ..., + msg: object = ..., + delta: float = ...) -> None: ... + def assertGreater(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertGreaterEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertMultiLineEqual(self, first: str, second: str, + msg: object = ...) -> None: ... + def assertSequenceEqual(self, first: Sequence[Any], second: Sequence[Any], + msg: object = ..., seq_type: type = ...) -> None: ... + def assertListEqual(self, first: List[Any], second: List[Any], + msg: object = ...) -> None: ... + def assertTupleEqual(self, first: Tuple[Any, ...], second: Tuple[Any, ...], + msg: object = ...) -> None: ... + def assertSetEqual(self, first: Union[Set[Any], FrozenSet[Any]], + second: Union[Set[Any], FrozenSet[Any]], msg: object = ...) -> None: ... + def assertDictEqual(self, first: Dict[Any, Any], second: Dict[Any, Any], + msg: object = ...) -> None: ... + def assertLess(self, first: Any, second: Any, + msg: object = ...) -> None: ... + def assertLessEqual(self, first: Any, second: Any, + msg: object = ...) -> None: ... + @overload + def assertRaises(self, exception: _ExceptionType, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaises(self, exception: _ExceptionType) -> _AssertRaisesContext: ... + @overload + def assertRaisesRegexp(self, exception: _ExceptionType, regexp: _Regexp, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegexp(self, exception: _ExceptionType, regexp: _Regexp) -> _AssertRaisesContext: ... + def assertRegexpMatches(self, text: Text, regexp: _Regexp, msg: object = ...) -> None: ... + def assertNotRegexpMatches(self, text: Text, regexp: _Regexp, msg: object = ...) -> None: ... + def assertItemsEqual(self, first: Iterable[Any], second: Iterable[Any], msg: object = ...) -> None: ... + def assertDictContainsSubset(self, expected: Dict[Any, Any], actual: Dict[Any, Any], msg: object = ...) -> None: ... + def addTypeEqualityFunc(self, typeobj: type, function: Callable[..., None]) -> None: ... + @overload + def failUnlessRaises(self, exception: _ExceptionType, callable: Callable[..., Any], *args: Any, **kwargs: Any) -> None: ... + @overload + def failUnlessRaises(self, exception: _ExceptionType) -> _AssertRaisesContext: ... + def failIf(self, expr: Any, msg: object = ...) -> None: ... + def assertFalse(self, expr: Any, msg: object = ...) -> None: ... + def assertIs(self, first: object, second: object, + msg: object = ...) -> None: ... + def assertIsNot(self, first: object, second: object, + msg: object = ...) -> None: ... + def assertIsNone(self, expr: Any, msg: object = ...) -> None: ... + def assertIsNotNone(self, expr: Any, msg: object = ...) -> None: ... + def assertIn(self, first: _T, second: Iterable[_T], + msg: object = ...) -> None: ... + def assertNotIn(self, first: _T, second: Iterable[_T], + msg: object = ...) -> None: ... + def assertIsInstance(self, obj: Any, cls: Union[type, Tuple[type, ...]], + msg: object = ...) -> None: ... + def assertNotIsInstance(self, obj: Any, cls: Union[type, Tuple[type, ...]], + msg: object = ...) -> None: ... + def fail(self, msg: object = ...) -> NoReturn: ... + def countTestCases(self) -> int: ... + def defaultTestResult(self) -> TestResult: ... + def id(self) -> str: ... + def shortDescription(self) -> str: ... # May return None + def addCleanup(self, function: Any, *args: Any, **kwargs: Any) -> None: ... + def doCleanups(self) -> bool: ... + def skipTest(self, reason: Any) -> None: ... + def _formatMessage(self, msg: Optional[Text], standardMsg: Text) -> str: ... # undocumented + def _getAssertEqualityFunc(self, first: Any, second: Any) -> Callable[..., None]: ... # undocumented + +class FunctionTestCase(Testable): + def __init__(self, testFunc: Callable[[], None], + setUp: Optional[Callable[[], None]] = ..., + tearDown: Optional[Callable[[], None]] = ..., + description: Optional[str] = ...) -> None: ... + def run(self, result: TestResult) -> None: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + +class TestSuite(Testable): + def __init__(self, tests: Iterable[Testable] = ...) -> None: ... + def addTest(self, test: Testable) -> None: ... + def addTests(self, tests: Iterable[Testable]) -> None: ... + def run(self, result: TestResult) -> None: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + def __iter__(self) -> Iterator[Testable]: ... + +class TestLoader: + testMethodPrefix: str + sortTestMethodsUsing: Optional[Callable[[str, str], int]] + suiteClass: Callable[[List[TestCase]], TestSuite] + def loadTestsFromTestCase(self, + testCaseClass: Type[TestCase]) -> TestSuite: ... + def loadTestsFromModule(self, module: types.ModuleType = ..., + use_load_tests: bool = ...) -> TestSuite: ... + def loadTestsFromName(self, name: str = ..., + module: Optional[types.ModuleType] = ...) -> TestSuite: ... + def loadTestsFromNames(self, names: List[str] = ..., + module: Optional[types.ModuleType] = ...) -> TestSuite: ... + def discover(self, start_dir: str, pattern: str = ..., + top_level_dir: Optional[str] = ...) -> TestSuite: ... + def getTestCaseNames(self, testCaseClass: Type[TestCase] = ...) -> List[str]: ... + +defaultTestLoader: TestLoader + +class TextTestResult(TestResult): + def __init__(self, stream: TextIO, descriptions: bool, verbosity: int) -> None: ... + +class TextTestRunner: + def __init__(self, stream: Optional[TextIO] = ..., descriptions: bool = ..., + verbosity: int = ..., failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[Type[TestResult]] = ...) -> None: ... + def _makeResult(self) -> TestResult: ... + +class SkipTest(Exception): + ... + +# TODO precise types +def skipUnless(condition: Any, reason: Union[str, unicode]) -> Any: ... +def skipIf(condition: Any, reason: Union[str, unicode]) -> Any: ... +def expectedFailure(func: _FT) -> _FT: ... +def skip(reason: Union[str, unicode]) -> Any: ... + +# not really documented +class TestProgram: + result: TestResult + def runTests(self) -> None: ... # undocumented + +def main(module: Union[None, Text, types.ModuleType] = ..., defaultTest: Optional[str] = ..., + argv: Optional[Sequence[str]] = ..., + testRunner: Union[Type[TextTestRunner], TextTestRunner, None] = ..., + testLoader: TestLoader = ..., exit: bool = ..., verbosity: int = ..., + failfast: Optional[bool] = ..., catchbreak: Optional[bool] = ..., + buffer: Optional[bool] = ...) -> TestProgram: ... + +def load_tests(loader: TestLoader, tests: TestSuite, pattern: Optional[Text]) -> TestSuite: ... + +def installHandler() -> None: ... +def registerResult(result: TestResult) -> None: ... +def removeResult(result: TestResult) -> bool: ... +@overload +def removeHandler() -> None: ... +@overload +def removeHandler(function: Callable[..., Any]) -> Callable[..., Any]: ... + +# private but occasionally used +util: types.ModuleType diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib.pyi new file mode 100644 index 0000000..8b44a06 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib.pyi @@ -0,0 +1,134 @@ +from typing import Any, AnyStr, IO, List, Mapping, Sequence, Text, Tuple, TypeVar, Union + +def url2pathname(pathname: AnyStr) -> AnyStr: ... +def pathname2url(pathname: AnyStr) -> AnyStr: ... +def urlopen(url: str, data=..., proxies: Mapping[str, str] = ..., context=...) -> IO[Any]: ... +def urlretrieve(url, filename=..., reporthook=..., data=..., context=...): ... +def urlcleanup() -> None: ... + +class ContentTooShortError(IOError): + content: Any + def __init__(self, message, content) -> None: ... + +class URLopener: + version: Any + proxies: Any + key_file: Any + cert_file: Any + context: Any + addheaders: Any + tempcache: Any + ftpcache: Any + def __init__(self, proxies: Mapping[str, str] = ..., context=..., **x509) -> None: ... + def __del__(self): ... + def close(self): ... + def cleanup(self): ... + def addheader(self, *args): ... + type: Any + def open(self, fullurl: str, data=...): ... + def open_unknown(self, fullurl, data=...): ... + def open_unknown_proxy(self, proxy, fullurl, data=...): ... + def retrieve(self, url, filename=..., reporthook=..., data=...): ... + def open_http(self, url, data=...): ... + def http_error(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_default(self, url, fp, errcode, errmsg, headers): ... + def open_https(self, url, data=...): ... + def open_file(self, url): ... + def open_local_file(self, url): ... + def open_ftp(self, url): ... + def open_data(self, url, data=...): ... + +class FancyURLopener(URLopener): + auth_cache: Any + tries: Any + maxtries: Any + def __init__(self, *args, **kwargs) -> None: ... + def http_error_default(self, url, fp, errcode, errmsg, headers): ... + def http_error_302(self, url, fp, errcode, errmsg, headers, data=...): ... + def redirect_internal(self, url, fp, errcode, errmsg, headers, data): ... + def http_error_301(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_303(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_307(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_401(self, url, fp, errcode, errmsg, headers, data=...): ... + def http_error_407(self, url, fp, errcode, errmsg, headers, data=...): ... + def retry_proxy_http_basic_auth(self, url, realm, data=...): ... + def retry_proxy_https_basic_auth(self, url, realm, data=...): ... + def retry_http_basic_auth(self, url, realm, data=...): ... + def retry_https_basic_auth(self, url, realm, data=...): ... + def get_user_passwd(self, host, realm, clear_cache=...): ... + def prompt_user_passwd(self, host, realm): ... + +class ftpwrapper: + user: Any + passwd: Any + host: Any + port: Any + dirs: Any + timeout: Any + refcount: Any + keepalive: Any + def __init__(self, user, passwd, host, port, dirs, timeout=..., persistent=...) -> None: ... + busy: Any + ftp: Any + def init(self): ... + def retrfile(self, file, type): ... + def endtransfer(self): ... + def close(self): ... + def file_close(self): ... + def real_close(self): ... + +_AIUT = TypeVar("_AIUT", bound=addbase) + +class addbase: + fp: Any + def read(self, n: int = ...) -> bytes: ... + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def fileno(self) -> int: ... # Optional[int], but that is rare + def __iter__(self: _AIUT) -> _AIUT: ... + def next(self) -> bytes: ... + def __init__(self, fp) -> None: ... + def close(self) -> None: ... + +class addclosehook(addbase): + closehook: Any + hookargs: Any + def __init__(self, fp, closehook, *hookargs) -> None: ... + def close(self): ... + +class addinfo(addbase): + headers: Any + def __init__(self, fp, headers) -> None: ... + def info(self): ... + +class addinfourl(addbase): + headers: Any + url: Any + code: Any + def __init__(self, fp, headers, url, code=...) -> None: ... + def info(self): ... + def getcode(self): ... + def geturl(self): ... + +def unwrap(url): ... +def splittype(url): ... +def splithost(url): ... +def splituser(host): ... +def splitpasswd(user): ... +def splitport(host): ... +def splitnport(host, defport=...): ... +def splitquery(url): ... +def splittag(url): ... +def splitattr(url): ... +def splitvalue(attr): ... +def unquote(s: AnyStr) -> AnyStr: ... +def unquote_plus(s: AnyStr) -> AnyStr: ... +def quote(s: AnyStr, safe: Text = ...) -> AnyStr: ... +def quote_plus(s: AnyStr, safe: Text = ...) -> AnyStr: ... +def urlencode(query: Union[Sequence[Tuple[Any, Any]], Mapping[Any, Any]], doseq=...) -> str: ... + +def getproxies() -> Mapping[str, str]: ... +def proxy_bypass(host): ... + +# Names in __all__ with no definition: +# basejoin diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib2.pyi new file mode 100644 index 0000000..6611ad2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urllib2.pyi @@ -0,0 +1,182 @@ + +import ssl +from typing import Any, AnyStr, Dict, List, Union, Optional, Mapping, Callable, Sequence, Text, Tuple, Type +from urllib import addinfourl +from httplib import HTTPConnectionProtocol, HTTPResponse + +_string = Union[str, unicode] + +class URLError(IOError): + reason: Union[str, BaseException] + +class HTTPError(URLError, addinfourl): + code: int + headers: Mapping[str, str] + def __init__(self, url, code: int, msg: str, hdrs: Mapping[str, str], fp: addinfourl) -> None: ... + +class Request(object): + host: str + port: str + data: str + headers: Dict[str, str] + unverifiable: bool + type: Optional[str] + origin_req_host = ... + unredirected_hdrs: Dict[str, str] + + def __init__(self, url: str, data: Optional[str] = ..., headers: Dict[str, str] = ..., + origin_req_host: Optional[str] = ..., unverifiable: bool = ...) -> None: ... + def __getattr__(self, attr): ... + def get_method(self) -> str: ... + def add_data(self, data) -> None: ... + def has_data(self) -> bool: ... + def get_data(self) -> str: ... + def get_full_url(self) -> str: ... + def get_type(self): ... + def get_host(self) -> str: ... + def get_selector(self): ... + def set_proxy(self, host, type) -> None: ... + def has_proxy(self) -> bool: ... + def get_origin_req_host(self) -> str: ... + def is_unverifiable(self) -> bool: ... + def add_header(self, key: str, val: str) -> None: ... + def add_unredirected_header(self, key: str, val: str) -> None: ... + def has_header(self, header_name: str) -> bool: ... + def get_header(self, header_name: str, default: Optional[str] = ...) -> str: ... + def header_items(self): ... + +class OpenerDirector(object): + addheaders: List[Tuple[str, str]] + + def add_handler(self, handler: BaseHandler) -> None: ... + def open(self, fullurl: Union[Request, _string], data: Optional[_string] = ..., timeout: Optional[float] = ...) -> Optional[addinfourl]: ... + def error(self, proto: _string, *args: Any): ... + +# Note that this type is somewhat a lie. The return *can* be None if +# a custom opener has been installed that fails to handle the request. +def urlopen(url: Union[Request, _string], data: Optional[_string] = ..., timeout: Optional[float] = ..., + cafile: Optional[_string] = ..., capath: Optional[_string] = ..., cadefault: bool = ..., + context: Optional[ssl.SSLContext] = ...) -> addinfourl: ... +def install_opener(opener: OpenerDirector) -> None: ... +def build_opener(*handlers: Union[BaseHandler, Type[BaseHandler]]) -> OpenerDirector: ... + +class BaseHandler: + handler_order: int + parent: OpenerDirector + + def add_parent(self, parent: OpenerDirector) -> None: ... + def close(self) -> None: ... + def __lt__(self, other: Any) -> bool: ... + +class HTTPErrorProcessor(BaseHandler): + def http_response(self, request, response): ... + +class HTTPDefaultErrorHandler(BaseHandler): + def http_error_default(self, req: Request, fp: addinfourl, code: int, msg: str, hdrs: Mapping[str, str]): ... + +class HTTPRedirectHandler(BaseHandler): + max_repeats: int + max_redirections: int + def redirect_request(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str], newurl): ... + def http_error_301(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_302(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_303(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + def http_error_307(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + inf_msg: str + + +class ProxyHandler(BaseHandler): + proxies: Mapping[str, str] + + def __init__(self, proxies: Optional[Mapping[str, str]] = ...): ... + def proxy_open(self, req: Request, proxy, type): ... + +class HTTPPasswordMgr: + def __init__(self) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def find_user_password(self, realm: Optional[Text], authuri: Text) -> Tuple[Any, Any]: ... + def reduce_uri(self, uri: _string, default_port: bool = ...) -> Tuple[Any, Any]: ... + def is_suburi(self, base: _string, test: _string) -> bool: ... + +class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): ... + +class AbstractBasicAuthHandler: + def __init__(self, password_mgr: Optional[HTTPPasswordMgr] = ...) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def http_error_auth_reqed(self, authreq, host, req: Request, headers: Mapping[str, str]): ... + def retry_http_basic_auth(self, host, req: Request, realm): ... + +class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + auth_header: str + def http_error_401(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + auth_header: str + def http_error_407(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class AbstractDigestAuthHandler: + def __init__(self, passwd: Optional[HTTPPasswordMgr] = ...) -> None: ... + def add_password(self, realm: Optional[Text], uri: Union[Text, Sequence[Text]], user: Text, passwd: Text) -> None: ... + def reset_retry_count(self) -> None: ... + def http_error_auth_reqed(self, auth_header: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + def retry_http_digest_auth(self, req: Request, auth: str) -> Optional[HTTPResponse]: ... + def get_cnonce(self, nonce: str) -> str: ... + def get_authorization(self, req: Request, chal: Mapping[str, str]) -> str: ... + def get_algorithm_impls(self, algorithm: str) -> Tuple[Callable[[str], str], Callable[[str, str], str]]: ... + def get_entity_digest(self, data: Optional[bytes], chal: Mapping[str, str]) -> Optional[str]: ... + +class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + auth_header: str + handler_order: int + def http_error_401(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + auth_header: str + handler_order: int + def http_error_407(self, req: Request, fp: addinfourl, code: int, msg: str, headers: Mapping[str, str]): ... + +class AbstractHTTPHandler(BaseHandler): # undocumented + def __init__(self, debuglevel: int = ...) -> None: ... + def set_http_debuglevel(self, level: int) -> None: ... + def do_request_(self, request: Request) -> Request: ... + def do_open(self, + http_class: HTTPConnectionProtocol, + req: Request, + **http_conn_args: Optional[Any]) -> addinfourl: ... + +class HTTPHandler(AbstractHTTPHandler): + def http_open(self, req: Request) -> addinfourl: ... + def http_request(self, request: Request) -> Request: ... # undocumented + +class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel: int = ..., context: Optional[ssl.SSLContext] = ...) -> None: ... + def https_open(self, req: Request) -> addinfourl: ... + def https_request(self, request: Request) -> Request: ... # undocumented + +class HTTPCookieProcessor(BaseHandler): + def __init__(self, cookiejar: Optional[Any] = ...): ... + def http_request(self, request: Request): ... + def http_response(self, request: Request, response): ... + +class UnknownHandler(BaseHandler): + def unknown_open(self, req: Request): ... + +class FileHandler(BaseHandler): + def file_open(self, req: Request): ... + def get_names(self): ... + def open_local_file(self, req: Request): ... + +class FTPHandler(BaseHandler): + def ftp_open(self, req: Request): ... + def connect_ftp(self, user, passwd, host, port, dirs, timeout): ... + +class CacheFTPHandler(FTPHandler): + def __init__(self) -> None: ... + def setTimeout(self, t: Optional[float]): ... + def setMaxConns(self, m: int): ... + def check_cache(self): ... + def clear_cache(self): ... + +def parse_http_list(s: AnyStr) -> List[AnyStr]: ... +def parse_keqv_list(l: List[AnyStr]) -> Dict[AnyStr, AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urlparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urlparse.pyi new file mode 100644 index 0000000..fb59095 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/urlparse.pyi @@ -0,0 +1,70 @@ +# Stubs for urlparse (Python 2) + +from typing import AnyStr, Dict, List, NamedTuple, Tuple, Sequence, Union, overload + +_String = Union[str, unicode] + +uses_relative: List[str] +uses_netloc: List[str] +uses_params: List[str] +non_hierarchical: List[str] +uses_query: List[str] +uses_fragment: List[str] +scheme_chars: str +MAX_CACHE_SIZE = 0 + +def clear_cache() -> None: ... + +class ResultMixin(object): + @property + def username(self) -> str: ... + @property + def password(self) -> str: ... + @property + def hostname(self) -> str: ... + @property + def port(self) -> int: ... + +class SplitResult( + NamedTuple( + 'SplitResult', + [ + ('scheme', str), ('netloc', str), ('path', str), ('query', str), ('fragment', str) + ] + ), + ResultMixin +): + def geturl(self) -> str: ... + +class ParseResult( + NamedTuple( + 'ParseResult', + [ + ('scheme', str), ('netloc', str), ('path', str), ('params', str), ('query', str), + ('fragment', str) + ] + ), + ResultMixin +): + def geturl(self) -> str: ... + +def urlparse(url: _String, scheme: _String = ..., + allow_fragments: bool = ...) -> ParseResult: ... +def urlsplit(url: _String, scheme: _String = ..., + allow_fragments: bool = ...) -> SplitResult: ... +@overload +def urlunparse(data: Tuple[_String, _String, _String, _String, _String, _String]) -> str: ... +@overload +def urlunparse(data: Sequence[_String]) -> str: ... +@overload +def urlunsplit(data: Tuple[_String, _String, _String, _String, _String]) -> str: ... +@overload +def urlunsplit(data: Sequence[_String]) -> str: ... +def urljoin(base: _String, url: _String, + allow_fragments: bool = ...) -> str: ... +def urldefrag(url: AnyStr) -> Tuple[AnyStr, str]: ... +def unquote(s: AnyStr) -> AnyStr: ... +def parse_qs(qs: AnyStr, keep_blank_values: bool = ..., + strict_parsing: bool = ...) -> Dict[AnyStr, List[AnyStr]]: ... +def parse_qsl(qs: AnyStr, keep_blank_values: int = ..., + strict_parsing: bool = ...) -> List[Tuple[AnyStr, AnyStr]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/user.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/user.pyi new file mode 100644 index 0000000..e857a3a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/user.pyi @@ -0,0 +1,9 @@ +# Stubs for user (Python 2) + +# Docs: https://docs.python.org/2/library/user.html +# Source: https://hg.python.org/cpython/file/2.7/Lib/user.py +from typing import Any + +def __getattr__(name) -> Any: ... +home: str +pythonrc: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/whichdb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/whichdb.pyi new file mode 100644 index 0000000..b1a69f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/whichdb.pyi @@ -0,0 +1,5 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/whichdb.py + +from typing import Optional, Text + +def whichdb(filename: Text) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi new file mode 100644 index 0000000..abf4098 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2/xmlrpclib.pyi @@ -0,0 +1,199 @@ +# Stubs for xmlrpclib (Python 2) + +from typing import Any, AnyStr, Callable, IO, Iterable, List, Mapping, MutableMapping, Optional, Tuple, Type, TypeVar, Union +from types import InstanceType +from datetime import datetime +from time import struct_time +from httplib import HTTPConnection, HTTPResponse, HTTPSConnection +from ssl import SSLContext +from StringIO import StringIO +from gzip import GzipFile + +_Unmarshaller = Any +_timeTuple = Tuple[int, int, int, int, int, int, int, int, int] +# Represents types that can be compared against a DateTime object +_dateTimeComp = Union[AnyStr, DateTime, datetime, _timeTuple] +# A "host description" used by Transport factories +_hostDesc = Union[str, Tuple[str, Mapping[Any, Any]]] + +def escape(s: AnyStr, replace: Callable[[AnyStr, AnyStr, AnyStr], AnyStr] = ...) -> AnyStr: ... + +MAXINT: int +MININT: int +PARSE_ERROR: int +SERVER_ERROR: int +APPLICATION_ERROR: int +SYSTEM_ERROR: int +TRANSPORT_ERROR: int +NOT_WELLFORMED_ERROR: int +UNSUPPORTED_ENCODING: int +INVALID_ENCODING_CHAR: int +INVALID_XMLRPC: int +METHOD_NOT_FOUND: int +INVALID_METHOD_PARAMS: int +INTERNAL_ERROR: int + +class Error(Exception): ... + +class ProtocolError(Error): + url: str + errcode: int + errmsg: str + headers: Any + def __init__(self, url: str, errcode: int, errmsg: str, headers: Any) -> None: ... + +class ResponseError(Error): ... + +class Fault(Error): + faultCode: Any + faultString: str + def __init__(self, faultCode: Any, faultString: str, **extra: Any) -> None: ... + +boolean: Type[bool] +Boolean: Type[bool] + +class DateTime: + value: str + def __init__(self, value: Union[str, unicode, datetime, float, int, _timeTuple, struct_time] = ...) -> None: ... + def make_comparable(self, other: _dateTimeComp) -> Tuple[_dateTimeComp, _dateTimeComp]: ... + def __lt__(self, other: _dateTimeComp) -> bool: ... + def __le__(self, other: _dateTimeComp) -> bool: ... + def __gt__(self, other: _dateTimeComp) -> bool: ... + def __ge__(self, other: _dateTimeComp) -> bool: ... + def __eq__(self, other: _dateTimeComp) -> bool: ... + def __ne__(self, other: _dateTimeComp) -> bool: ... + def timetuple(self) -> struct_time: ... + def __cmp__(self, other: _dateTimeComp) -> int: ... + def decode(self, data: Any) -> None: ... + def encode(self, out: IO) -> None: ... + +class Binary: + data: str + def __init__(self, data: Optional[str] = ...) -> None: ... + def __cmp__(self, other: Any) -> int: ... + def decode(self, data: str) -> None: ... + def encode(self, out: IO) -> None: ... + +WRAPPERS: tuple + +# Still part of the public API, but see http://bugs.python.org/issue1773632 +FastParser: None +FastUnmarshaller: None +FastMarshaller: None + +# xmlrpclib.py will leave ExpatParser undefined if it can't import expat from +# xml.parsers. Because this is Python 2.7, the import will succeed. +class ExpatParser: + def __init__(self, target: _Unmarshaller) -> None: ... + def feed(self, data: str): ... + def close(self): ... + +# TODO: Add xmllib.XMLParser as base class +class SlowParser: + handle_xml: Callable[[str, bool], None] + unknown_starttag: Callable[[str, Any], None] + handle_data: Callable[[str], None] + handle_cdata: Callable[[str], None] + unknown_endtag: Callable[[str, Callable[[Iterable[str], str], str]], None] + def __init__(self, target: _Unmarshaller) -> None: ... + +class Marshaller: + memo: MutableMapping[int, Any] + data: Optional[str] + encoding: Optional[str] + allow_none: bool + def __init__(self, encoding: Optional[str] = ..., allow_none: bool = ...) -> None: ... + dispatch: Mapping[type, Callable[[Marshaller, str, Callable[[str], None]], None]] + def dumps(self, values: Union[Iterable[Union[None, int, bool, long, float, str, unicode, List, Tuple, Mapping, datetime, InstanceType]], Fault]) -> str: ... + def dump_nil(self, value: None, write: Callable[[str], None]) -> None: ... + def dump_int(self, value: int, write: Callable[[str], None]) -> None: ... + def dump_bool(self, value: bool, write: Callable[[str], None]) -> None: ... + def dump_long(self, value: long, write: Callable[[str], None]) -> None: ... + def dump_double(self, value: float, write: Callable[[str], None]) -> None: ... + def dump_string(self, value: str, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_unicode(self, value: unicode, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_array(self, value: Union[List, Tuple], write: Callable[[str], None]) -> None: ... + def dump_struct(self, value: Mapping, write: Callable[[str], None], escape: Callable[[AnyStr, Callable[[AnyStr, AnyStr, AnyStr], AnyStr]], AnyStr] = ...) -> None: ... + def dump_datetime(self, value: datetime, write: Callable[[str], None]) -> None: ... + def dump_instance(self, value: InstanceType, write: Callable[[str], None]) -> None: ... + +class Unmarshaller: + def append(self, object: Any) -> None: ... + def __init__(self, use_datetime: bool = ...) -> None: ... + def close(self) -> tuple: ... + def getmethodname(self) -> Optional[str]: ... + def xml(self, encoding: str, standalone: bool) -> None: ... + def start(self, tag: str, attrs: Any) -> None: ... + def data(self, text: str) -> None: ... + def end(self, tag: str, join: Callable[[Iterable[str], str], str] = ...) -> None: ... + def end_dispatch(self, tag: str, data: str) -> None: ... + dispatch: Mapping[str, Callable[[Unmarshaller, str], None]] + def end_nil(self, data: str): ... + def end_boolean(self, data: str) -> None: ... + def end_int(self, data: str) -> None: ... + def end_double(self, data: str) -> None: ... + def end_string(self, data: str) -> None: ... + def end_array(self, data: str) -> None: ... + def end_struct(self, data: str) -> None: ... + def end_base64(self, data: str) -> None: ... + def end_dateTime(self, data: str) -> None: ... + def end_value(self, data: str) -> None: ... + def end_params(self, data: str) -> None: ... + def end_fault(self, data: str) -> None: ... + def end_methodName(self, data: str) -> None: ... + +class _MultiCallMethod: + def __init__(self, call_list: List[Tuple[str, tuple]], name: str) -> None: ... +class MultiCallIterator: + def __init__(self, results: List) -> None: ... + +class MultiCall: + def __init__(self, server: ServerProxy) -> None: ... + def __getattr__(self, name: str) -> _MultiCallMethod: ... + def __call__(self) -> MultiCallIterator: ... + +def getparser(use_datetime: bool = ...) -> Tuple[Union[ExpatParser, SlowParser], Unmarshaller]: ... +def dumps(params: Union[tuple, Fault], methodname: Optional[str] = ..., methodresponse: Optional[bool] = ..., encoding: Optional[str] = ..., allow_none: bool = ...) -> str: ... +def loads(data: str, use_datetime: bool = ...) -> Tuple[tuple, Optional[str]]: ... + +def gzip_encode(data: str) -> str: ... +def gzip_decode(data: str, max_decode: int = ...) -> str: ... + +class GzipDecodedResponse(GzipFile): + stringio: StringIO + def __init__(self, response: HTTPResponse) -> None: ... + def close(self): ... + +class _Method: + def __init__(self, send: Callable[[str, tuple], Any], name: str) -> None: ... + def __getattr__(self, name: str) -> _Method: ... + def __call__(self, *args: Any) -> Any: ... + +class Transport: + user_agent: str + accept_gzip_encoding: bool + encode_threshold: Optional[int] + def __init__(self, use_datetime: bool = ...) -> None: ... + def request(self, host: _hostDesc, handler: str, request_body: str, verbose: bool = ...) -> tuple: ... + verbose: bool + def single_request(self, host: _hostDesc, handler: str, request_body: str, verbose: bool = ...) -> tuple: ... + def getparser(self) -> Tuple[Union[ExpatParser, SlowParser], Unmarshaller]: ... + def get_host_info(self, host: _hostDesc) -> Tuple[str, Optional[List[Tuple[str, str]]], Optional[Mapping[Any, Any]]]: ... + def make_connection(self, host: _hostDesc) -> HTTPConnection: ... + def close(self) -> None: ... + def send_request(self, connection: HTTPConnection, handler: str, request_body: str) -> None: ... + def send_host(self, connection: HTTPConnection, host: str) -> None: ... + def send_user_agent(self, connection: HTTPConnection) -> None: ... + def send_content(self, connection: HTTPConnection, request_body: str) -> None: ... + def parse_response(self, response: HTTPResponse) -> tuple: ... + +class SafeTransport(Transport): + def __init__(self, use_datetime: bool = ..., context: Optional[SSLContext] = ...) -> None: ... + def make_connection(self, host: _hostDesc) -> HTTPSConnection: ... + +class ServerProxy: + def __init__(self, uri: str, transport: Optional[Transport] = ..., encoding: Optional[str] = ..., verbose: bool = ..., allow_none: bool = ..., use_datetime: bool = ..., context: Optional[SSLContext] = ...) -> None: ... + def __getattr__(self, name: str) -> _Method: ... + def __call__(self, attr: str) -> Optional[Transport]: ... + +Server = ServerProxy diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi new file mode 100644 index 0000000..13db2dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/__future__.pyi @@ -0,0 +1,24 @@ +import sys +from typing import List + +class _Feature: + def getOptionalRelease(self) -> sys._version_info: ... + def getMandatoryRelease(self) -> sys._version_info: ... + +absolute_import: _Feature +division: _Feature +generators: _Feature +nested_scopes: _Feature +print_function: _Feature +unicode_literals: _Feature +with_statement: _Feature +if sys.version_info >= (3, 0): + barry_as_FLUFL: _Feature + +if sys.version_info >= (3, 5): + generator_stop: _Feature + +if sys.version_info >= (3, 7): + annotations: _Feature + +all_feature_names: List[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi new file mode 100644 index 0000000..6233547 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_bisect.pyi @@ -0,0 +1,11 @@ +"""Stub file for the '_bisect' module.""" + +from typing import Sequence, TypeVar + +_T = TypeVar('_T') +def bisect(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def bisect_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def bisect_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +def insort(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... +def insort_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... +def insort_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi new file mode 100644 index 0000000..32163eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_codecs.pyi @@ -0,0 +1,74 @@ +"""Stub file for the '_codecs' module.""" + +import sys +from typing import Any, Callable, Tuple, Optional, Dict, Text, Union + +import codecs + +# For convenience: +_Handler = Callable[[Exception], Tuple[Text, int]] +_String = Union[bytes, str] +_Errors = Union[str, Text, None] +if sys.version_info < (3, 0): + _Decodable = Union[bytes, Text] + _Encodable = Union[bytes, Text] +else: + _Decodable = bytes + _Encodable = str + +# This type is not exposed; it is defined in unicodeobject.c +class _EncodingMap(object): + def size(self) -> int: ... +_MapT = Union[Dict[int, int], _EncodingMap] + +def register(search_function: Callable[[str], Any]) -> None: ... +def register_error(errors: Union[str, Text], handler: _Handler) -> None: ... +def lookup(encoding: Union[str, Text]) -> codecs.CodecInfo: ... +def lookup_error(name: Union[str, Text]) -> _Handler: ... +def decode(obj: Any, encoding: Union[str, Text] = ..., errors: _Errors = ...) -> Any: ... +def encode(obj: Any, encoding: Union[str, Text] = ..., errors: _Errors = ...) -> Any: ... +def charmap_build(map: Text) -> _MapT: ... + +def ascii_decode(data: _Decodable, errors: _Errors = ...) -> Tuple[Text, int]: ... +def ascii_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def charbuffer_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def charmap_decode(data: _Decodable, errors: _Errors = ..., mapping: Optional[_MapT] = ...) -> Tuple[Text, int]: ... +def charmap_encode(data: _Encodable, errors: _Errors, mapping: Optional[_MapT] = ...) -> Tuple[bytes, int]: ... +def escape_decode(data: _String, errors: _Errors = ...) -> Tuple[str, int]: ... +def escape_encode(data: bytes, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def latin_1_decode(data: _Decodable, errors: _Errors = ...) -> Tuple[Text, int]: ... +def latin_1_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def raw_unicode_escape_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def raw_unicode_escape_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def readbuffer_encode(data: _String, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def unicode_escape_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def unicode_escape_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def unicode_internal_decode(data: _String, errors: _Errors = ...) -> Tuple[Text, int]: ... +def unicode_internal_encode(data: _String, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_16_be_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_be_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_16_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_encode(data: _Encodable, errors: _Errors = ..., byteorder: int = ...) -> Tuple[bytes, int]: ... +def utf_16_ex_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int, int]: ... +def utf_16_le_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_16_le_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_32_be_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_be_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_32_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_encode(data: _Encodable, errors: _Errors = ..., byteorder: int = ...) -> Tuple[bytes, int]: ... +def utf_32_ex_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int, int]: ... +def utf_32_le_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_32_le_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_7_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_7_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... +def utf_8_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... +def utf_8_encode(data: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... + +if sys.platform == 'win32': + def mbcs_decode(data: _Decodable, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def mbcs_encode(str: _Encodable, errors: _Errors = ...) -> Tuple[bytes, int]: ... + if sys.version_info >= (3, 0): + def oem_decode(data: bytes, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def code_page_decode(codepage: int, data: bytes, errors: _Errors = ..., final: int = ...) -> Tuple[Text, int]: ... + def oem_encode(str: Text, errors: _Errors = ...) -> Tuple[bytes, int]: ... + def code_page_encode(code_page: int, str: Text, errors: _Errors = ...) -> Tuple[bytes, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi new file mode 100644 index 0000000..1c4c26e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_csv.pyi @@ -0,0 +1,49 @@ +import sys + +from typing import Any, Iterable, Iterator, List, Optional, Sequence, Text + +QUOTE_ALL: int +QUOTE_MINIMAL: int +QUOTE_NONE: int +QUOTE_NONNUMERIC: int + +class Error(Exception): ... + +class Dialect: + delimiter: str + quotechar: Optional[str] + escapechar: Optional[str] + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + strict: int + def __init__(self) -> None: ... + +class _reader(Iterator[List[str]]): + dialect: Dialect + line_num: int + if sys.version_info >= (3, 0): + def __next__(self) -> List[str]: ... + else: + def next(self) -> List[str]: ... + +class _writer: + dialect: Dialect + + if sys.version_info >= (3, 5): + def writerow(self, row: Iterable[Any]) -> None: ... + def writerows(self, rows: Iterable[Iterable[Any]]) -> None: ... + else: + def writerow(self, row: Sequence[Any]) -> None: ... + def writerows(self, rows: Iterable[Sequence[Any]]) -> None: ... + + +# TODO: precise type +def writer(csvfile: Any, dialect: Any = ..., **fmtparams: Any) -> _writer: ... +def reader(csvfile: Iterable[Text], dialect: Any = ..., **fmtparams: Any) -> _reader: ... +def register_dialect(name: str, dialect: Any = ..., **fmtparams: Any) -> None: ... +def unregister_dialect(name: str) -> None: ... +def get_dialect(name: str) -> Dialect: ... +def list_dialects() -> List[str]: ... +def field_size_limit(new_limit: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi new file mode 100644 index 0000000..8b7f6ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_heapq.pyi @@ -0,0 +1,15 @@ +"""Stub file for the '_heapq' module.""" + +from typing import TypeVar, List + +_T = TypeVar("_T") + +def heapify(heap: List[_T]) -> None: ... +def heappop(heap: List[_T]) -> _T: + raise IndexError() # if list is empty +def heappush(heap: List[_T], item: _T) -> None: ... +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapreplace(heap: List[_T], item: _T) -> _T: + raise IndexError() # if list is empty +def nlargest(a: int, b: List[_T]) -> List[_T]: ... +def nsmallest(a: int, b: List[_T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_random.pyi new file mode 100644 index 0000000..a37149d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_random.pyi @@ -0,0 +1,17 @@ +# Stubs for _random + +import sys +from typing import Tuple + +# Actually Tuple[(int,) * 625] +_State = Tuple[int, ...] + +class Random(object): + def __init__(self, seed: object = ...) -> None: ... + def seed(self, x: object = ...) -> None: ... + def getstate(self) -> _State: ... + def setstate(self, state: _State) -> None: ... + def random(self) -> float: ... + def getrandbits(self, k: int) -> int: ... + if sys.version_info < (3,): + def jumpahead(self, i: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi new file mode 100644 index 0000000..6a527c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakref.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, Callable, Generic, Optional, TypeVar, overload + +_C = TypeVar('_C', bound=Callable[..., Any]) +_T = TypeVar('_T') + +class CallableProxyType(object): # "weakcallableproxy" + def __getattr__(self, attr: str) -> Any: ... + +class ProxyType(object): # "weakproxy" + def __getattr__(self, attr: str) -> Any: ... + +class ReferenceType(Generic[_T]): + if sys.version_info >= (3, 4): + __callback__: Callable[[ReferenceType[_T]], Any] + def __init__(self, o: _T, callback: Optional[Callable[[ReferenceType[_T]], Any]] = ...) -> None: ... + def __call__(self) -> Optional[_T]: ... + def __hash__(self) -> int: ... + +ref = ReferenceType + +def getweakrefcount(object: Any) -> int: ... +def getweakrefs(object: Any) -> int: ... +@overload +def proxy(object: _C, callback: Optional[Callable[[_C], Any]] = ...) -> CallableProxyType: ... +# Return CallableProxyType if object is callable, ProxyType otherwise +@overload +def proxy(object: _T, callback: Optional[Callable[[_T], Any]] = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi new file mode 100644 index 0000000..950d3fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/_weakrefset.pyi @@ -0,0 +1,43 @@ +from typing import Iterator, Any, Iterable, MutableSet, Optional, TypeVar, Generic, Union + +_S = TypeVar('_S') +_T = TypeVar('_T') +_SelfT = TypeVar('_SelfT', bound=WeakSet) + +class WeakSet(MutableSet[_T], Generic[_T]): + def __init__(self, data: Optional[Iterable[_T]] = ...) -> None: ... + + def add(self, item: _T) -> None: ... + def clear(self) -> None: ... + def discard(self, item: _T) -> None: ... + def copy(self: _SelfT) -> _SelfT: ... + def pop(self) -> _T: ... + def remove(self, item: _T) -> None: ... + def update(self, other: Iterable[_T]) -> None: ... + def __contains__(self, item: object) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + + def __ior__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def difference(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def __sub__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def difference_update(self: _SelfT, other: Iterable[_T]) -> None: ... + def __isub__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def intersection(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def __and__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def intersection_update(self, other: Iterable[_T]) -> None: ... + def __iand__(self: _SelfT, other: Iterable[_T]) -> _SelfT: ... + def issubset(self, other: Iterable[_T]) -> bool: ... + def __le__(self, other: Iterable[_T]) -> bool: ... + def __lt__(self, other: Iterable[_T]) -> bool: ... + def issuperset(self, other: Iterable[_T]) -> bool: ... + def __ge__(self, other: Iterable[_T]) -> bool: ... + def __gt__(self, other: Iterable[_T]) -> bool: ... + def __eq__(self, other: object) -> bool: ... + def symmetric_difference(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def __xor__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def symmetric_difference_update(self, other: Iterable[_S]) -> None: ... + def __ixor__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def union(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def __or__(self, other: Iterable[_S]) -> WeakSet[Union[_S, _T]]: ... + def isdisjoint(self, other: Iterable[_T]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi new file mode 100644 index 0000000..d4dd5b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/argparse.pyi @@ -0,0 +1,408 @@ +# Stubs for argparse (Python 2.7 and 3.4) + +from typing import ( + Any, Callable, Dict, Generator, Iterable, List, IO, NoReturn, Optional, + Pattern, Sequence, Tuple, Type, Union, TypeVar, overload +) +import sys + +_T = TypeVar('_T') +_ActionT = TypeVar('_ActionT', bound='Action') +_N = TypeVar('_N') + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +ONE_OR_MORE: str +OPTIONAL: str +PARSER: str +REMAINDER: str +SUPPRESS: str +ZERO_OR_MORE: str +_UNRECOGNIZED_ARGS_ATTR: str # undocumented + +class ArgumentError(Exception): ... + +# undocumented +class _AttributeHolder: + def _get_kwargs(self) -> List[Tuple[str, Any]]: ... + def _get_args(self) -> List[Any]: ... + +# undocumented +class _ActionsContainer: + description: Optional[_Text] + prefix_chars: _Text + argument_default: Optional[_Text] + conflict_handler: _Text + + _registries: Dict[_Text, Dict[Any, Any]] + _actions: List[Action] + _option_string_actions: Dict[_Text, Action] + _action_groups: List[_ArgumentGroup] + _mutually_exclusive_groups: List[_MutuallyExclusiveGroup] + _defaults: Dict[str, Any] + _negative_number_matcher: Pattern[str] + _has_negative_number_optionals: List[bool] + + def __init__(self, description: Optional[_Text], prefix_chars: _Text, + argument_default: Optional[_Text], conflict_handler: _Text) -> None: ... + def register(self, registry_name: _Text, value: Any, object: Any) -> None: ... + def _registry_get(self, registry_name: _Text, value: Any, default: Any = ...) -> Any: ... + def set_defaults(self, **kwargs: Any) -> None: ... + def get_default(self, dest: _Text) -> Any: ... + def add_argument(self, + *name_or_flags: _Text, + action: Union[_Text, Type[Action]] = ..., + nargs: Union[int, _Text] = ..., + const: Any = ..., + default: Any = ..., + type: Union[Callable[[str], _T], FileType] = ..., + choices: Iterable[_T] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ..., + dest: Optional[_Text] = ..., + version: _Text = ..., + **kwargs: Any) -> Action: ... + def add_argument_group(self, *args: Any, **kwargs: Any) -> _ArgumentGroup: ... + def add_mutually_exclusive_group(self, **kwargs: Any) -> _MutuallyExclusiveGroup: ... + def _add_action(self, action: _ActionT) -> _ActionT: ... + def _remove_action(self, action: Action) -> None: ... + def _add_container_actions(self, container: _ActionsContainer) -> None: ... + def _get_positional_kwargs(self, dest: _Text, **kwargs: Any) -> Dict[str, Any]: ... + def _get_optional_kwargs(self, *args: Any, **kwargs: Any) -> Dict[str, Any]: ... + def _pop_action_class(self, kwargs: Any, default: Optional[Type[Action]] = ...) -> Type[Action]: ... + def _get_handler(self) -> Callable[[Action, Iterable[Tuple[_Text, Action]]], Any]: ... + def _check_conflict(self, action: Action) -> None: ... + def _handle_conflict_error(self, action: Action, conflicting_actions: Iterable[Tuple[_Text, Action]]) -> NoReturn: ... + def _handle_conflict_resolve(self, action: Action, conflicting_actions: Iterable[Tuple[_Text, Action]]) -> None: ... + +class ArgumentParser(_AttributeHolder, _ActionsContainer): + prog: _Text + usage: Optional[_Text] + epilog: Optional[_Text] + formatter_class: Type[HelpFormatter] + fromfile_prefix_chars: Optional[_Text] + add_help: bool + + if sys.version_info >= (3, 5): + allow_abbrev: bool + + # undocumented + _positionals: _ArgumentGroup + _optionals: _ArgumentGroup + _subparsers: Optional[_ArgumentGroup] + + if sys.version_info >= (3, 5): + def __init__(self, + prog: Optional[str] = ..., + usage: Optional[str] = ..., + description: Optional[str] = ..., + epilog: Optional[str] = ..., + parents: Sequence[ArgumentParser] = ..., + formatter_class: Type[HelpFormatter] = ..., + prefix_chars: _Text = ..., + fromfile_prefix_chars: Optional[str] = ..., + argument_default: Optional[str] = ..., + conflict_handler: _Text = ..., + add_help: bool = ..., + allow_abbrev: bool = ...) -> None: ... + else: + def __init__(self, + prog: Optional[_Text] = ..., + usage: Optional[_Text] = ..., + description: Optional[_Text] = ..., + epilog: Optional[_Text] = ..., + parents: Sequence[ArgumentParser] = ..., + formatter_class: Type[HelpFormatter] = ..., + prefix_chars: _Text = ..., + fromfile_prefix_chars: Optional[_Text] = ..., + argument_default: Optional[_Text] = ..., + conflict_handler: _Text = ..., + add_help: bool = ...) -> None: ... + + # The type-ignores in these overloads should be temporary. See: + # https://github.com/python/typeshed/pull/2643#issuecomment-442280277 + @overload + def parse_args(self, args: Optional[Sequence[_Text]] = ...) -> Namespace: ... + @overload + def parse_args(self, args: Optional[Sequence[_Text]], namespace: None) -> Namespace: ... # type: ignore + @overload + def parse_args(self, args: Optional[Sequence[_Text]], namespace: _N) -> _N: ... + @overload + def parse_args(self, *, namespace: None) -> Namespace: ... # type: ignore + @overload + def parse_args(self, *, namespace: _N) -> _N: ... + + if sys.version_info >= (3, 7): + def add_subparsers(self, title: _Text = ..., + description: Optional[_Text] = ..., + prog: _Text = ..., + parser_class: Type[ArgumentParser] = ..., + action: Type[Action] = ..., + option_string: _Text = ..., + dest: Optional[_Text] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[_Text] = ...) -> _SubParsersAction: ... + else: + def add_subparsers(self, title: _Text = ..., + description: Optional[_Text] = ..., + prog: _Text = ..., + parser_class: Type[ArgumentParser] = ..., + action: Type[Action] = ..., + option_string: _Text = ..., + dest: Optional[_Text] = ..., + help: Optional[_Text] = ..., + metavar: Optional[_Text] = ...) -> _SubParsersAction: ... + + def print_usage(self, file: Optional[IO[str]] = ...) -> None: ... + def print_help(self, file: Optional[IO[str]] = ...) -> None: ... + def format_usage(self) -> str: ... + def format_help(self) -> str: ... + def parse_known_args(self, args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Tuple[Namespace, List[str]]: ... + def convert_arg_line_to_args(self, arg_line: _Text) -> List[str]: ... + def exit(self, status: int = ..., message: Optional[_Text] = ...) -> NoReturn: ... + def error(self, message: _Text) -> NoReturn: ... + if sys.version_info >= (3, 7): + def parse_intermixed_args(self, args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Namespace: ... + def parse_known_intermixed_args(self, + args: Optional[Sequence[_Text]] = ..., + namespace: Optional[Namespace] = ...) -> Tuple[Namespace, List[str]]: ... + # undocumented + def _get_optional_actions(self) -> List[Action]: ... + def _get_positional_actions(self) -> List[Action]: ... + def _parse_known_args(self, arg_strings: List[_Text], namespace: Namespace) -> Tuple[Namespace, List[str]]: ... + def _read_args_from_files(self, arg_strings: List[_Text]) -> List[_Text]: ... + def _match_argument(self, action: Action, arg_strings_pattern: _Text) -> int: ... + def _match_arguments_partial(self, actions: Sequence[Action], arg_strings_pattern: _Text) -> List[int]: ... + def _parse_optional(self, arg_string: _Text) -> Optional[Tuple[Optional[Action], _Text, Optional[_Text]]]: ... + def _get_option_tuples(self, option_string: _Text) -> List[Tuple[Action, _Text, Optional[_Text]]]: ... + def _get_nargs_pattern(self, action: Action) -> _Text: ... + def _get_values(self, action: Action, arg_strings: List[_Text]) -> Any: ... + def _get_value(self, action: Action, arg_string: _Text) -> Any: ... + def _check_value(self, action: Action, value: Any) -> None: ... + def _get_formatter(self) -> HelpFormatter: ... + def _print_message(self, message: str, file: Optional[IO[str]] = ...) -> None: ... + +class HelpFormatter: + # undocumented + _prog: _Text + _indent_increment: int + _max_help_position: int + _width: int + _current_indent: int + _level: int + _action_max_length: int + _root_section: Any + _current_section: Any + _whitespace_matcher: Pattern[str] + _long_break_matcher: Pattern[str] + _Section: Type[Any] # Nested class + def __init__(self, prog: _Text, indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ...) -> None: ... + def _indent(self) -> None: ... + def _dedent(self) -> None: ... + def _add_item(self, func: Callable[..., _Text], args: Iterable[Any]) -> None: ... + def start_section(self, heading: Optional[_Text]) -> None: ... + def end_section(self) -> None: ... + def add_text(self, text: Optional[_Text]) -> None: ... + def add_usage(self, usage: _Text, actions: Iterable[Action], groups: Iterable[_ArgumentGroup], prefix: Optional[_Text] = ...) -> None: ... + def add_argument(self, action: Action) -> None: ... + def add_arguments(self, actions: Iterable[Action]) -> None: ... + def format_help(self) -> _Text: ... + def _join_parts(self, part_strings: Iterable[_Text]) -> _Text: ... + def _format_usage(self, usage: _Text, actions: Iterable[Action], groups: Iterable[_ArgumentGroup], prefix: Optional[_Text]) -> _Text: ... + def _format_actions_usage(self, actions: Iterable[Action], groups: Iterable[_ArgumentGroup]) -> _Text: ... + def _format_text(self, text: _Text) -> _Text: ... + def _format_action(self, action: Action) -> _Text: ... + def _format_action_invocation(self, action: Action) -> _Text: ... + def _metavar_formatter(self, action: Action, default_metavar: _Text) -> Callable[[int], Tuple[_Text, ...]]: ... + def _format_args(self, action: Action, default_metavar: _Text) -> _Text: ... + def _expand_help(self, action: Action) -> _Text: ... + def _iter_indented_subactions(self, action: Action) -> Generator[Action, None, None]: ... + def _split_lines(self, text: _Text, width: int) -> List[_Text]: ... + def _fill_text(self, text: _Text, width: int, indent: int) -> _Text: ... + def _get_help_string(self, action: Action) -> Optional[_Text]: ... + def _get_default_metavar_for_optional(self, action: Action) -> _Text: ... + def _get_default_metavar_for_positional(self, action: Action) -> _Text: ... + +class RawDescriptionHelpFormatter(HelpFormatter): ... +class RawTextHelpFormatter(HelpFormatter): ... +class ArgumentDefaultsHelpFormatter(HelpFormatter): ... +if sys.version_info >= (3,): + class MetavarTypeHelpFormatter(HelpFormatter): ... + +class Action(_AttributeHolder): + option_strings: Sequence[_Text] + dest: _Text + nargs: Optional[Union[int, _Text]] + const: Any + default: Any + type: Union[Callable[[str], Any], FileType, None] + choices: Optional[Iterable[Any]] + required: bool + help: Optional[_Text] + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] + + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + nargs: Optional[Union[int, _Text]] = ..., + const: Any = ..., + default: Any = ..., + type: Optional[Union[Callable[[str], _T], FileType]] = ..., + choices: Optional[Iterable[_T]] = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + def __call__(self, parser: ArgumentParser, namespace: Namespace, + values: Union[_Text, Sequence[Any], None], + option_string: Optional[_Text] = ...) -> None: ... + +class Namespace(_AttributeHolder): + def __init__(self, **kwargs: Any) -> None: ... + def __getattr__(self, name: _Text) -> Any: ... + def __setattr__(self, name: _Text, value: Any) -> None: ... + def __contains__(self, key: str) -> bool: ... + +class FileType: + # undocumented + _mode: _Text + _bufsize: int + if sys.version_info >= (3, 4): + _encoding: Optional[_Text] + _errors: Optional[_Text] + if sys.version_info >= (3, 4): + def __init__(self, mode: _Text = ..., bufsize: int = ..., + encoding: Optional[_Text] = ..., + errors: Optional[_Text] = ...) -> None: ... + elif sys.version_info >= (3,): + def __init__(self, + mode: _Text = ..., bufsize: int = ...) -> None: ... + else: + def __init__(self, + mode: _Text = ..., bufsize: Optional[int] = ...) -> None: ... + def __call__(self, string: _Text) -> IO[Any]: ... + +# undocumented +class _ArgumentGroup(_ActionsContainer): + title: Optional[_Text] + _group_actions: List[Action] + def __init__(self, container: _ActionsContainer, + title: Optional[_Text] = ..., + description: Optional[_Text] = ..., **kwargs: Any) -> None: ... + +# undocumented +class _MutuallyExclusiveGroup(_ArgumentGroup): + required: bool + _container: _ActionsContainer + def __init__(self, container: _ActionsContainer, required: bool = ...) -> None: ... + +# undocumented +class _StoreAction(Action): ... + +# undocumented +class _StoreConstAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + const: Any, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + +# undocumented +class _StoreTrueAction(_StoreConstAction): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: bool = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _StoreFalseAction(_StoreConstAction): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: bool = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _AppendAction(Action): ... + +# undocumented +class _AppendConstAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + const: Any, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + +# undocumented +class _CountAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text, + default: Any = ..., + required: bool = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _HelpAction(Action): + def __init__(self, + option_strings: Sequence[_Text], + dest: _Text = ..., + default: _Text = ..., + help: Optional[_Text] = ...) -> None: ... + +# undocumented +class _VersionAction(Action): + version: Optional[_Text] + def __init__(self, + option_strings: Sequence[_Text], + version: Optional[_Text] = ..., + dest: _Text = ..., + default: _Text = ..., + help: _Text = ...) -> None: ... + +# undocumented +class _SubParsersAction(Action): + _ChoicesPseudoAction: Type[Any] # nested class + _prog_prefix: _Text + _parser_class: Type[ArgumentParser] + _name_parser_map: Dict[_Text, ArgumentParser] + choices: Dict[_Text, ArgumentParser] + _choices_actions: List[Action] + def __init__(self, + option_strings: Sequence[_Text], + prog: _Text, + parser_class: Type[ArgumentParser], + dest: _Text = ..., + required: bool = ..., + help: Optional[_Text] = ..., + metavar: Optional[Union[_Text, Tuple[_Text, ...]]] = ...) -> None: ... + # TODO: Type keyword args properly. + def add_parser(self, name: _Text, **kwargs: Any) -> ArgumentParser: ... + def _get_subactions(self) -> List[Action]: ... + +# undocumented +class ArgumentTypeError(Exception): ... + +if sys.version_info < (3, 7): + # undocumented + def _ensure_value(namespace: Namespace, name: _Text, value: Any) -> Any: ... + +# undocumented +def _get_action_name(argument: Optional[Action]) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/array.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/array.pyi new file mode 100644 index 0000000..01c6f99 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/array.pyi @@ -0,0 +1,73 @@ +# Stubs for array + +# Based on http://docs.python.org/3.6/library/array.html + +import sys +from typing import (Any, BinaryIO, Generic, Iterable, Iterator, List, MutableSequence, + overload, Text, Tuple, TypeVar, Union) + +_T = TypeVar('_T', int, float, Text) + +if sys.version_info >= (3,): + typecodes: str + +class array(MutableSequence[_T], Generic[_T]): + typecode: str + itemsize: int + def __init__(self, typecode: str, + __initializer: Union[bytes, Iterable[_T]] = ...) -> None: ... + def append(self, x: _T) -> None: ... + def buffer_info(self) -> Tuple[int, int]: ... + def byteswap(self) -> None: ... + def count(self, x: Any) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3, 2): + def frombytes(self, s: bytes) -> None: ... + def fromfile(self, f: BinaryIO, n: int) -> None: ... + def fromlist(self, list: List[_T]) -> None: ... + def fromstring(self, s: bytes) -> None: ... + def fromunicode(self, s: str) -> None: ... + def index(self, x: _T) -> int: ... # type: ignore # Overrides Sequence + def insert(self, i: int, x: _T) -> None: ... + def pop(self, i: int = ...) -> _T: ... + if sys.version_info < (3,): + def read(self, f: BinaryIO, n: int) -> None: ... + def remove(self, x: Any) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3, 2): + def tobytes(self) -> bytes: ... + def tofile(self, f: BinaryIO) -> None: ... + def tolist(self) -> List[_T]: ... + def tostring(self) -> bytes: ... + def tounicode(self) -> str: ... + if sys.version_info < (3,): + def write(self, f: BinaryIO) -> None: ... + + def __len__(self) -> int: ... + + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> array[_T]: ... + + @overload # type: ignore # Overrides MutableSequence + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: array[_T]) -> None: ... + + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __add__(self, x: array[_T]) -> array[_T]: ... + def __ge__(self, other: array[_T]) -> bool: ... + def __gt__(self, other: array[_T]) -> bool: ... + def __iadd__(self, x: array[_T]) -> array[_T]: ... # type: ignore # Overrides MutableSequence + def __imul__(self, n: int) -> array[_T]: ... + def __le__(self, other: array[_T]) -> bool: ... + def __lt__(self, other: array[_T]) -> bool: ... + def __mul__(self, n: int) -> array[_T]: ... + def __rmul__(self, n: int) -> array[_T]: ... + if sys.version_info < (3,): + def __delslice__(self, i: int, j: int) -> None: ... + def __getslice__(self, i: int, j: int) -> array[_T]: ... + def __setslice__(self, i: int, j: int, y: array[_T]) -> None: ... + +ArrayType = array diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi new file mode 100644 index 0000000..a359ae7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asynchat.pyi @@ -0,0 +1,41 @@ +from abc import abstractmethod +import asyncore +import socket +import sys +from typing import Optional, Sequence, Tuple, Union + + +class simple_producer: + def __init__(self, data: bytes, buffer_size: int = ...) -> None: ... + def more(self) -> bytes: ... + +class async_chat(asyncore.dispatcher): + ac_in_buffer_size: int + ac_out_buffer_size: int + def __init__(self, sock: Optional[socket.socket] = ..., map: Optional[asyncore._maptype] = ...) -> None: ... + + @abstractmethod + def collect_incoming_data(self, data: bytes) -> None: ... + @abstractmethod + def found_terminator(self) -> None: ... + def set_terminator(self, term: Union[bytes, int, None]) -> None: ... + def get_terminator(self) -> Union[bytes, int, None]: ... + def handle_read(self) -> None: ... + def handle_write(self) -> None: ... + def handle_close(self) -> None: ... + def push(self, data: bytes) -> None: ... + def push_with_producer(self, producer: simple_producer) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def close_when_done(self) -> None: ... + def initiate_send(self) -> None: ... + def discard_buffers(self) -> None: ... + +if sys.version_info < (3, 0): + class fifo: + def __init__(self, list: Sequence[Union[bytes, simple_producer]] = ...) -> None: ... + def __len__(self) -> int: ... + def is_empty(self) -> bool: ... + def first(self) -> bytes: ... + def push(self, data: Union[bytes, simple_producer]) -> None: ... + def pop(self) -> Tuple[int, bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi new file mode 100644 index 0000000..8dc8f47 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/asyncore.pyi @@ -0,0 +1,144 @@ +from typing import Tuple, Union, Optional, Any, Dict, overload + +import os +import select +import sys +import time +import warnings +from socket import SocketType +from typing import Optional + +from errno import (EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, EINVAL, + ENOTCONN, ESHUTDOWN, EINTR, EISCONN, EBADF, ECONNABORTED, + EPIPE, EAGAIN, errorcode) + +# cyclic dependence with asynchat +_maptype = Dict[str, Any] + + +class ExitNow(Exception): ... + +def read(obj: Any) -> None: ... +def write(obj: Any) -> None: ... +def readwrite(obj: Any, flags: int) -> None: ... +def poll(timeout: float = ..., map: _maptype = ...) -> None: ... +def poll2(timeout: float = ..., map: _maptype = ...) -> None: ... + +poll3 = poll2 + +def loop(timeout: float = ..., use_poll: bool = ..., map: _maptype = ..., count: Optional[int] = ...) -> None: ... + + +# Not really subclass of socket.socket; it's only delegation. +# It is not covariant to it. +class dispatcher: + + debug: bool + connected: bool + accepting: bool + connecting: bool + closing: bool + ignore_log_types: frozenset[str] + socket: Optional[SocketType] + + def __init__(self, sock: Optional[SocketType] = ..., map: _maptype = ...) -> None: ... + def add_channel(self, map: _maptype = ...) -> None: ... + def del_channel(self, map: _maptype = ...) -> None: ... + def create_socket(self, family: int, type: int) -> None: ... + def set_socket(self, sock: SocketType, map: _maptype = ...) -> None: ... + def set_reuse_addr(self) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def listen(self, backlog: int) -> None: ... + def bind(self, address: Union[tuple, str]) -> None: ... + def connect(self, address: Union[tuple, str]) -> None: ... + def accept(self) -> Optional[Tuple[SocketType, Any]]: ... + def send(self, data: bytes) -> int: ... + def recv(self, buffer_size: int) -> bytes: ... + def close(self) -> None: ... + + def log(self, message: Any) -> None: ... + def log_info(self, message: Any, type: str = ...) -> None: ... + def handle_read_event(self) -> None: ... + def handle_connect_event(self) -> None: ... + def handle_write_event(self) -> None: ... + def handle_expt_event(self) -> None: ... + def handle_error(self) -> None: ... + def handle_expt(self) -> None: ... + def handle_read(self) -> None: ... + def handle_write(self) -> None: ... + def handle_connect(self) -> None: ... + def handle_accept(self) -> None: ... + def handle_close(self) -> None: ... + + if sys.version_info < (3, 5): + # Historically, some methods were "imported" from `self.socket` by + # means of `__getattr__`. This was long deprecated, and as of Python + # 3.5 has been removed; simply call the relevant methods directly on + # self.socket if necessary. + + def detach(self) -> int: ... + def fileno(self) -> int: ... + + # return value is an address + def getpeername(self) -> Any: ... + def getsockname(self) -> Any: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def gettimeout(self) -> float: ... + def ioctl(self, control: object, + option: Tuple[int, int, int]) -> None: ... + # TODO the return value may be BinaryIO or TextIO, depending on mode + def makefile(self, mode: str = ..., buffering: int = ..., + encoding: str = ..., errors: str = ..., + newline: str = ...) -> Any: + ... + + # return type is an address + def recvfrom(self, bufsize: int, flags: int = ...) -> Any: ... + def recvfrom_into(self, buffer: bytes, nbytes: int, flags: int = ...) -> Any: ... + def recv_into(self, buffer: bytes, nbytes: int, flags: int = ...) -> Any: ... + def sendall(self, data: bytes, flags: int = ...) -> None: ... + def sendto(self, data: bytes, address: Union[tuple, str], flags: int = ...) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def settimeout(self, value: Union[float, None]) -> None: ... + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + def shutdown(self, how: int) -> None: ... + +class dispatcher_with_send(dispatcher): + def __init__(self, sock: SocketType = ..., map: _maptype = ...) -> None: ... + def initiate_send(self) -> None: ... + def handle_write(self) -> None: ... + # incompatible signature: + # def send(self, data: bytes) -> Optional[int]: ... + +def compact_traceback() -> Tuple[Tuple[str, str, str], type, type, str]: ... +def close_all(map: _maptype = ..., ignore_all: bool = ...) -> None: ... + +# if os.name == 'posix': +# import fcntl +class file_wrapper: + fd: int + + def __init__(self, fd: int) -> None: ... + def recv(self, bufsize: int, flags: int = ...) -> bytes: ... + def send(self, data: bytes, flags: int = ...) -> int: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def read(self, bufsize: int, flags: int = ...) -> bytes: ... + def write(self, data: bytes, flags: int = ...) -> int: ... + + def close(self) -> None: ... + def fileno(self) -> int: ... + +class file_dispatcher(dispatcher): + def __init__(self, fd: int, map: _maptype = ...) -> None: ... + def set_file(self, fd: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/base64.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/base64.pyi new file mode 100644 index 0000000..7c648c8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/base64.pyi @@ -0,0 +1,38 @@ +# Stubs for base64 + +from typing import IO, Union, Text +import sys + +if sys.version_info < (3,): + _encodable = Union[bytes, unicode] + _decodable = Union[bytes, unicode] +else: + _encodable = bytes + _decodable = Union[bytes, str] + +def b64encode(s: _encodable, altchars: bytes = ...) -> bytes: ... +def b64decode(s: _decodable, altchars: bytes = ..., + validate: bool = ...) -> bytes: ... +def standard_b64encode(s: _encodable) -> bytes: ... +def standard_b64decode(s: _decodable) -> bytes: ... +def urlsafe_b64encode(s: _encodable) -> bytes: ... +def urlsafe_b64decode(s: _decodable) -> bytes: ... +def b32encode(s: _encodable) -> bytes: ... +def b32decode(s: _decodable, casefold: bool = ..., + map01: bytes = ...) -> bytes: ... +def b16encode(s: _encodable) -> bytes: ... +def b16decode(s: _decodable, casefold: bool = ...) -> bytes: ... +if sys.version_info >= (3, 4): + def a85encode(b: _encodable, *, foldspaces: bool = ..., wrapcol: int = ..., + pad: bool = ..., adobe: bool = ...) -> bytes: ... + def a85decode(b: _decodable, *, foldspaces: bool = ..., + adobe: bool = ..., ignorechars: Union[str, bytes] = ...) -> bytes: ... + def b85encode(b: _encodable, pad: bool = ...) -> bytes: ... + def b85decode(b: _decodable) -> bytes: ... + +def decode(input: IO[bytes], output: IO[bytes]) -> None: ... +def decodebytes(s: bytes) -> bytes: ... +def decodestring(s: bytes) -> bytes: ... +def encode(input: IO[bytes], output: IO[bytes]) -> None: ... +def encodebytes(s: bytes) -> bytes: ... +def encodestring(s: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi new file mode 100644 index 0000000..9689b71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binascii.pyi @@ -0,0 +1,47 @@ +# Stubs for binascii + +# Based on http://docs.python.org/3.2/library/binascii.html + +import sys +from typing import Union, Text + + +if sys.version_info < (3,): + # Python 2 accepts unicode ascii pretty much everywhere. + _Bytes = Union[bytes, Text] + _Ascii = Union[bytes, Text] +elif sys.version_info < (3, 3): + # Python 3.2 and below only accepts bytes. + _Bytes = bytes + _Ascii = bytes +else: + # But since Python 3.3 ASCII-only unicode strings are accepted by the + # a2b_* functions. + _Bytes = bytes + _Ascii = Union[bytes, Text] + +def a2b_uu(string: _Ascii) -> bytes: ... +if sys.version_info >= (3, 7): + def b2a_uu(data: _Bytes, *, backtick: bool = ...) -> bytes: ... +else: + def b2a_uu(data: _Bytes) -> bytes: ... +def a2b_base64(string: _Ascii) -> bytes: ... +if sys.version_info >= (3, 6): + def b2a_base64(data: _Bytes, *, newline: bool = ...) -> bytes: ... +else: + def b2a_base64(data: _Bytes) -> bytes: ... +def a2b_qp(string: _Ascii, header: bool = ...) -> bytes: ... +def b2a_qp(data: _Bytes, quotetabs: bool = ..., istext: bool = ..., header: bool = ...) -> bytes: ... +def a2b_hqx(string: _Ascii) -> bytes: ... +def rledecode_hqx(data: _Bytes) -> bytes: ... +def rlecode_hqx(data: _Bytes) -> bytes: ... +def b2a_hqx(data: _Bytes) -> bytes: ... +def crc_hqx(data: _Bytes, crc: int) -> int: ... +def crc32(data: _Bytes, crc: int = ...) -> int: ... +def b2a_hex(data: _Bytes) -> bytes: ... +def hexlify(data: _Bytes) -> bytes: ... +def a2b_hex(hexstr: _Ascii) -> bytes: ... +def unhexlify(hexlify: _Ascii) -> bytes: ... + +class Error(Exception): ... +class Incomplete(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi new file mode 100644 index 0000000..c759ba0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/binhex.pyi @@ -0,0 +1,48 @@ +from typing import ( + Any, + IO, + Tuple, + Union, +) + + +class Error(Exception): ... + +REASONABLY_LARGE: int +LINELEN: int +RUNCHAR: bytes + +class FInfo: + def __init__(self) -> None: ... + Type: str + Creator: str + Flags: int + +_FileInfoTuple = Tuple[str, FInfo, int, int] +_FileHandleUnion = Union[str, IO[bytes]] + +def getfileinfo(name: str) -> _FileInfoTuple: ... + +class openrsrc: + def __init__(self, *args: Any) -> None: ... + def read(self, *args: Any) -> bytes: ... + def write(self, *args: Any) -> None: ... + def close(self) -> None: ... + +class BinHex: + def __init__(self, name_finfo_dlen_rlen: _FileInfoTuple, ofp: _FileHandleUnion) -> None: ... + def write(self, data: bytes) -> None: ... + def close_data(self) -> None: ... + def write_rsrc(self, data: bytes) -> None: ... + def close(self) -> None: ... + +def binhex(inp: str, out: str) -> None: ... + +class HexBin: + def __init__(self, ifp: _FileHandleUnion) -> None: ... + def read(self, *n: int) -> bytes: ... + def close_data(self) -> None: ... + def read_rsrc(self, *n: int) -> bytes: ... + def close(self) -> None: ... + +def hexbin(inp: str, out: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi new file mode 100644 index 0000000..5c54112 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bisect.pyi @@ -0,0 +1,22 @@ +# Stubs for bisect + +from typing import Any, Sequence, TypeVar + +_T = TypeVar('_T') + +# TODO uncomment when mypy# 2035 is fixed +# def bisect_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def bisect_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def bisect(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# +# def insort_left(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def insort_right(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... +# def insort(a: Sequence[_T], x: _T, lo: int = ..., hi: int = ...) -> int: ... + +def bisect_left(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def bisect_right(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def bisect(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... + +def insort_left(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def insort_right(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... +def insort(a: Sequence, x: Any, lo: int = ..., hi: int = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi new file mode 100644 index 0000000..cca0e4f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/builtins.pyi @@ -0,0 +1,1622 @@ +# True and False are deliberately omitted because they are keywords in +# Python 3, and stub files conform to Python 3 syntax. + +from typing import ( + TypeVar, Iterator, Iterable, NoReturn, overload, Container, + Sequence, MutableSequence, Mapping, MutableMapping, Tuple, List, Any, Dict, Callable, Generic, + Set, AbstractSet, FrozenSet, MutableSet, Sized, Reversible, SupportsInt, SupportsFloat, SupportsAbs, + SupportsComplex, IO, BinaryIO, Union, + ItemsView, KeysView, ValuesView, ByteString, Optional, AnyStr, Type, Text, + Protocol, +) +from abc import abstractmethod, ABCMeta +from ast import mod, AST +from types import TracebackType, CodeType +import sys + +if sys.version_info >= (3,): + from typing import SupportsBytes, SupportsRound + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_S = TypeVar('_S') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_TT = TypeVar('_TT', bound='type') + +class object: + __doc__: Optional[str] + __dict__: Dict[str, Any] + __slots__: Union[Text, Iterable[Text]] + __module__: str + if sys.version_info >= (3, 6): + __annotations__: Dict[str, Any] + + @property + def __class__(self: _T) -> Type[_T]: ... + @__class__.setter + def __class__(self, __type: Type[object]) -> None: ... + def __init__(self) -> None: ... + def __new__(cls) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __eq__(self, o: object) -> bool: ... + def __ne__(self, o: object) -> bool: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __hash__(self) -> int: ... + def __format__(self, format_spec: str) -> str: ... + def __getattribute__(self, name: str) -> Any: ... + def __delattr__(self, name: str) -> None: ... + def __sizeof__(self) -> int: ... + def __reduce__(self) -> tuple: ... + def __reduce_ex__(self, protocol: int) -> tuple: ... + if sys.version_info >= (3,): + def __dir__(self) -> Iterable[str]: ... + if sys.version_info >= (3, 6): + def __init_subclass__(cls) -> None: ... + +class staticmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class classmethod(object): # Special, only valid as a decorator. + __func__: Callable + if sys.version_info >= (3,): + __isabstractmethod__: bool + + def __init__(self, f: Callable) -> None: ... + def __new__(cls: Type[_T], *args: Any, **kwargs: Any) -> _T: ... + def __get__(self, obj: _T, type: Optional[Type[_T]] = ...) -> Callable: ... + +class type(object): + __base__: type + __bases__: Tuple[type, ...] + __basicsize__: int + __dict__: Dict[str, Any] + __dictoffset__: int + __flags__: int + __itemsize__: int + __module__: str + __mro__: Tuple[type, ...] + __name__: str + if sys.version_info >= (3,): + __qualname__: str + __text_signature__: Optional[str] + __weakrefoffset__: int + + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, name: str, bases: Tuple[type, ...], dict: Dict[str, Any]) -> None: ... + @overload + def __new__(cls, o: object) -> type: ... + @overload + def __new__(cls, name: str, bases: Tuple[type, ...], namespace: Dict[str, Any]) -> type: ... + def __call__(self, *args: Any, **kwds: Any) -> Any: ... + def __subclasses__(self: _TT) -> List[_TT]: ... + # Note: the documentation doesnt specify what the return type is, the standard + # implementation seems to be returning a list. + def mro(self) -> List[type]: ... + def __instancecheck__(self, instance: Any) -> bool: ... + def __subclasscheck__(self, subclass: type) -> bool: ... + if sys.version_info >= (3,): + @classmethod + def __prepare__(metacls, __name: str, __bases: Tuple[type, ...], **kwds: Any) -> Mapping[str, Any]: ... + +class super(object): + if sys.version_info >= (3,): + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + @overload + def __init__(self) -> None: ... + else: + @overload + def __init__(self, t: Any, obj: Any) -> None: ... + @overload + def __init__(self, t: Any) -> None: ... + +class int: + @overload + def __init__(self, x: Union[Text, bytes, SupportsInt] = ...) -> None: ... + @overload + def __init__(self, x: Union[Text, bytes, bytearray], base: int) -> None: ... + + @property + def real(self) -> int: ... + @property + def imag(self) -> int: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + def conjugate(self) -> int: ... + + def bit_length(self) -> int: ... + if sys.version_info >= (3,): + def to_bytes(self, length: int, byteorder: str, *, signed: bool = ...) -> bytes: ... + @classmethod + def from_bytes(cls, bytes: Sequence[int], byteorder: str, *, + signed: bool = ...) -> int: ... # TODO buffer object argument + + def __add__(self, x: int) -> int: ... + def __sub__(self, x: int) -> int: ... + def __mul__(self, x: int) -> int: ... + def __floordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __div__(self, x: int) -> int: ... + def __truediv__(self, x: int) -> float: ... + def __mod__(self, x: int) -> int: ... + def __divmod__(self, x: int) -> Tuple[int, int]: ... + def __radd__(self, x: int) -> int: ... + def __rsub__(self, x: int) -> int: ... + def __rmul__(self, x: int) -> int: ... + def __rfloordiv__(self, x: int) -> int: ... + if sys.version_info < (3,): + def __rdiv__(self, x: int) -> int: ... + def __rtruediv__(self, x: int) -> float: ... + def __rmod__(self, x: int) -> int: ... + def __rdivmod__(self, x: int) -> Tuple[int, int]: ... + def __pow__(self, x: int) -> Any: ... # Return type can be int or float, depending on x. + def __rpow__(self, x: int) -> Any: ... + def __and__(self, n: int) -> int: ... + def __or__(self, n: int) -> int: ... + def __xor__(self, n: int) -> int: ... + def __lshift__(self, n: int) -> int: ... + def __rshift__(self, n: int) -> int: ... + def __rand__(self, n: int) -> int: ... + def __ror__(self, n: int) -> int: ... + def __rxor__(self, n: int) -> int: ... + def __rlshift__(self, n: int) -> int: ... + def __rrshift__(self, n: int) -> int: ... + def __neg__(self) -> int: ... + def __pos__(self) -> int: ... + def __invert__(self) -> int: ... + if sys.version_info >= (3,): + def __round__(self, ndigits: Optional[int] = ...) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: int) -> bool: ... + def __le__(self, x: int) -> bool: ... + def __gt__(self, x: int) -> bool: ... + def __ge__(self, x: int) -> bool: ... + + def __str__(self) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __abs__(self) -> int: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __index__(self) -> int: ... + +class float: + def __init__(self, x: Union[SupportsFloat, Text, bytes, bytearray] = ...) -> None: ... + def as_integer_ratio(self) -> Tuple[int, int]: ... + def hex(self) -> str: ... + def is_integer(self) -> bool: ... + @classmethod + def fromhex(cls, s: str) -> float: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + def conjugate(self) -> float: ... + + def __add__(self, x: float) -> float: ... + def __sub__(self, x: float) -> float: ... + def __mul__(self, x: float) -> float: ... + def __floordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __div__(self, x: float) -> float: ... + def __truediv__(self, x: float) -> float: ... + def __mod__(self, x: float) -> float: ... + def __divmod__(self, x: float) -> Tuple[float, float]: ... + def __pow__(self, x: float) -> float: ... # In Python 3, returns complex if self is negative and x is not whole + def __radd__(self, x: float) -> float: ... + def __rsub__(self, x: float) -> float: ... + def __rmul__(self, x: float) -> float: ... + def __rfloordiv__(self, x: float) -> float: ... + if sys.version_info < (3,): + def __rdiv__(self, x: float) -> float: ... + def __rtruediv__(self, x: float) -> float: ... + def __rmod__(self, x: float) -> float: ... + def __rdivmod__(self, x: float) -> Tuple[float, float]: ... + def __rpow__(self, x: float) -> float: ... + def __getnewargs__(self) -> Tuple[float]: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: None) -> int: ... + @overload + def __round__(self, ndigits: int) -> float: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: float) -> bool: ... + def __le__(self, x: float) -> bool: ... + def __gt__(self, x: float) -> bool: ... + def __ge__(self, x: float) -> bool: ... + def __neg__(self) -> float: ... + def __pos__(self) -> float: ... + + def __str__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +class complex: + @overload + def __init__(self, re: float = ..., im: float = ...) -> None: ... + @overload + def __init__(self, s: str) -> None: ... + @overload + def __init__(self, s: SupportsComplex) -> None: ... + + @property + def real(self) -> float: ... + @property + def imag(self) -> float: ... + + def conjugate(self) -> complex: ... + + def __add__(self, x: complex) -> complex: ... + def __sub__(self, x: complex) -> complex: ... + def __mul__(self, x: complex) -> complex: ... + def __pow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __div__(self, x: complex) -> complex: ... + def __truediv__(self, x: complex) -> complex: ... + def __radd__(self, x: complex) -> complex: ... + def __rsub__(self, x: complex) -> complex: ... + def __rmul__(self, x: complex) -> complex: ... + def __rpow__(self, x: complex) -> complex: ... + if sys.version_info < (3,): + def __rdiv__(self, x: complex) -> complex: ... + def __rtruediv__(self, x: complex) -> complex: ... + + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __neg__(self) -> complex: ... + def __pos__(self) -> complex: ... + + def __str__(self) -> str: ... + def __complex__(self) -> complex: ... + def __abs__(self) -> float: ... + def __hash__(self) -> int: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + +if sys.version_info >= (3,): + _str_base = object +else: + class basestring(metaclass=ABCMeta): ... + + class unicode(basestring, Sequence[unicode]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: object) -> None: ... + @overload + def __init__(self, o: str, encoding: unicode = ..., errors: unicode = ...) -> None: ... + def capitalize(self) -> unicode: ... + def center(self, width: int, fillchar: unicode = ...) -> unicode: ... + def count(self, x: unicode) -> int: ... + def decode(self, encoding: unicode = ..., errors: unicode = ...) -> unicode: ... + def encode(self, encoding: unicode = ..., errors: unicode = ...) -> str: ... + def endswith(self, suffix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> unicode: ... + def find(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> unicode: ... + def index(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[unicode]) -> unicode: ... + def ljust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def lower(self) -> unicode: ... + def lstrip(self, chars: unicode = ...) -> unicode: ... + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: unicode, new: unicode, count: int = ...) -> unicode: ... + def rfind(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: unicode, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: unicode = ...) -> unicode: ... + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def rsplit(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def rstrip(self, chars: unicode = ...) -> unicode: ... + def split(self, sep: Optional[unicode] = ..., maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[unicode]: ... + def startswith(self, prefix: Union[unicode, Tuple[unicode, ...]], start: int = ..., + end: int = ...) -> bool: ... + def strip(self, chars: unicode = ...) -> unicode: ... + def swapcase(self) -> unicode: ... + def title(self) -> unicode: ... + def translate(self, table: Union[Dict[int, Any], unicode]) -> unicode: ... + def upper(self) -> unicode: ... + def zfill(self, width: int) -> unicode: ... + + @overload + def __getitem__(self, i: int) -> unicode: ... + @overload + def __getitem__(self, s: slice) -> unicode: ... + def __getslice__(self, start: int, stop: int) -> unicode: ... + def __add__(self, s: unicode) -> unicode: ... + def __mul__(self, n: int) -> unicode: ... + def __rmul__(self, n: int) -> unicode: ... + def __mod__(self, x: Any) -> unicode: ... + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: unicode) -> bool: ... + def __le__(self, x: unicode) -> bool: ... + def __gt__(self, x: unicode) -> bool: ... + def __ge__(self, x: unicode) -> bool: ... + + def __len__(self) -> int: ... + # The argument type is incompatible with Sequence + def __contains__(self, s: Union[unicode, bytes]) -> bool: ... # type: ignore + def __iter__(self) -> Iterator[unicode]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + def __getnewargs__(self) -> Tuple[unicode]: ... + + _str_base = basestring + +class str(Sequence[str], _str_base): + if sys.version_info >= (3,): + @overload + def __init__(self, o: object = ...) -> None: ... + @overload + def __init__(self, o: bytes, encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, o: object = ...) -> None: ... + + def capitalize(self) -> str: ... + if sys.version_info >= (3, 3): + def casefold(self) -> str: ... + def center(self, width: int, fillchar: str = ...) -> str: ... + def count(self, x: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + if sys.version_info < (3,): + def decode(self, encoding: Text = ..., errors: Text = ...) -> unicode: ... + def encode(self, encoding: Text = ..., errors: Text = ...) -> bytes: ... + if sys.version_info >= (3,): + def endswith(self, suffix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + else: + def endswith(self, suffix: Union[Text, Tuple[Text, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> str: ... + def find(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def format(self, *args: Any, **kwargs: Any) -> str: ... + if sys.version_info >= (3,): + def format_map(self, map: Mapping[str, Any]) -> str: ... + def index(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + if sys.version_info >= (3,): + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + if sys.version_info >= (3,): + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + if sys.version_info >= (3,): + def isnumeric(self) -> bool: ... + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[str]) -> str: ... + else: + def join(self, iterable: Iterable[AnyStr]) -> AnyStr: ... + def ljust(self, width: int, fillchar: str = ...) -> str: ... + def lower(self) -> str: ... + if sys.version_info >= (3,): + def lstrip(self, chars: Optional[str] = ...) -> str: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self, old: str, new: str, count: int = ...) -> str: ... + else: + @overload + def lstrip(self, chars: str = ...) -> str: ... + @overload + def lstrip(self, chars: unicode) -> unicode: ... + @overload + def partition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def partition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def partition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + def replace(self, old: AnyStr, new: AnyStr, count: int = ...) -> AnyStr: ... + def rfind(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Text, __start: Optional[int] = ..., __end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: str = ...) -> str: ... + if sys.version_info >= (3,): + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rstrip(self, chars: Optional[str] = ...) -> str: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + else: + @overload + def rpartition(self, sep: bytearray) -> Tuple[str, bytearray, str]: ... + @overload + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + @overload + def rpartition(self, sep: unicode) -> Tuple[unicode, unicode, unicode]: ... + @overload + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def rsplit(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + @overload + def rstrip(self, chars: str = ...) -> str: ... + @overload + def rstrip(self, chars: unicode) -> unicode: ... + @overload + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + @overload + def split(self, sep: unicode, maxsplit: int = ...) -> List[unicode]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + if sys.version_info >= (3,): + def startswith(self, prefix: Union[Text, Tuple[Text, ...]], start: Optional[int] = ..., + end: Optional[int] = ...) -> bool: ... + def strip(self, chars: Optional[str] = ...) -> str: ... + else: + def startswith(self, prefix: Union[Text, Tuple[Text, ...]]) -> bool: ... + @overload + def strip(self, chars: str = ...) -> str: ... + @overload + def strip(self, chars: unicode) -> unicode: ... + def swapcase(self) -> str: ... + def title(self) -> str: ... + if sys.version_info >= (3,): + def translate(self, table: Union[Mapping[int, Union[int, str, None]], Sequence[Union[int, str, None]]]) -> str: ... + else: + def translate(self, table: Optional[AnyStr], deletechars: AnyStr = ...) -> AnyStr: ... + def upper(self) -> str: ... + def zfill(self, width: int) -> str: ... + if sys.version_info >= (3,): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + + if sys.version_info >= (3,): + def __add__(self, s: str) -> str: ... + else: + def __add__(self, s: AnyStr) -> AnyStr: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[str, Text]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ge__(self, x: Text) -> bool: ... + def __getitem__(self, i: Union[int, slice]) -> str: ... + def __gt__(self, x: Text) -> bool: ... + def __hash__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + def __le__(self, x: Text) -> bool: ... + def __len__(self) -> int: ... + def __lt__(self, x: Text) -> bool: ... + def __mod__(self, x: Any) -> str: ... + def __mul__(self, n: int) -> str: ... + def __ne__(self, x: object) -> bool: ... + def __repr__(self) -> str: ... + def __rmul__(self, n: int) -> str: ... + def __str__(self) -> str: ... + def __getnewargs__(self) -> Tuple[str]: ... + + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> str: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + +if sys.version_info >= (3,): + class bytes(ByteString): + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str, encoding: str, + errors: str = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, o: SupportsBytes) -> None: ... + def capitalize(self) -> bytes: ... + def center(self, width: int, fillchar: bytes = ...) -> bytes: ... + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def decode(self, encoding: str = ..., errors: str = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytes: ... + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytes: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def lower(self) -> bytes: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def partition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytes: ... + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytes: ... + def rpartition(self, sep: bytes) -> Tuple[bytes, bytes, bytes]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytes: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytes]: ... + def splitlines(self, keepends: bool = ...) -> List[bytes]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytes: ... + def swapcase(self) -> bytes: ... + def title(self) -> bytes: ... + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytes: ... + def upper(self) -> bytes: ... + def zfill(self, width: int) -> bytes: ... + @classmethod + def fromhex(cls, s: str) -> bytes: ... + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytes: ... + def __add__(self, s: bytes) -> bytes: ... + def __mul__(self, n: int) -> bytes: ... + def __rmul__(self, n: int) -> bytes: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + def __getnewargs__(self) -> Tuple[bytes]: ... +else: + bytes = str + +class bytearray(MutableSequence[int], ByteString): + if sys.version_info >= (3,): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + else: + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, ints: Iterable[int]) -> None: ... + @overload + def __init__(self, string: str) -> None: ... + @overload + def __init__(self, string: Text, encoding: Text, errors: Text = ...) -> None: ... + @overload + def __init__(self, length: int) -> None: ... + def capitalize(self) -> bytearray: ... + def center(self, width: int, fillchar: bytes = ...) -> bytearray: ... + if sys.version_info >= (3,): + def count(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def copy(self) -> bytearray: ... + else: + def count(self, x: str) -> int: ... + def decode(self, encoding: Text = ..., errors: Text = ...) -> str: ... + def endswith(self, suffix: Union[bytes, Tuple[bytes, ...]]) -> bool: ... + def expandtabs(self, tabsize: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def find(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + def index(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def find(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def insert(self, index: int, object: int) -> None: ... + def isalnum(self) -> bool: ... + def isalpha(self) -> bool: ... + if sys.version_info >= (3, 7): + def isascii(self) -> bool: ... + def isdigit(self) -> bool: ... + def islower(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + if sys.version_info >= (3,): + def join(self, iterable: Iterable[Union[ByteString, memoryview]]) -> bytearray: ... + def ljust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + else: + def join(self, iterable: Iterable[str]) -> bytearray: ... + def ljust(self, width: int, fillchar: str = ...) -> bytearray: ... + def lower(self) -> bytearray: ... + def lstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def partition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def replace(self, old: bytes, new: bytes, count: int = ...) -> bytearray: ... + if sys.version_info >= (3,): + def rfind(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + def rindex(self, sub: Union[bytes, int], start: Optional[int] = ..., end: Optional[int] = ...) -> int: ... + else: + def rfind(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: bytes, start: int = ..., end: int = ...) -> int: ... + def rjust(self, width: int, fillchar: bytes = ...) -> bytearray: ... + def rpartition(self, sep: bytes) -> Tuple[bytearray, bytearray, bytearray]: ... + def rsplit(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def rstrip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def split(self, sep: Optional[bytes] = ..., maxsplit: int = ...) -> List[bytearray]: ... + def splitlines(self, keepends: bool = ...) -> List[bytearray]: ... + def startswith( + self, + prefix: Union[bytes, Tuple[bytes, ...]], + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> bool: ... + def strip(self, chars: Optional[bytes] = ...) -> bytearray: ... + def swapcase(self) -> bytearray: ... + def title(self) -> bytearray: ... + if sys.version_info >= (3,): + def translate(self, table: Optional[bytes], delete: bytes = ...) -> bytearray: ... + else: + def translate(self, table: str) -> bytearray: ... + def upper(self) -> bytearray: ... + def zfill(self, width: int) -> bytearray: ... + @staticmethod + def fromhex(s: str) -> bytearray: ... + if sys.version_info >= (3,): + @classmethod + def maketrans(cls, frm: bytes, to: bytes) -> bytes: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __str__(self) -> str: ... + def __repr__(self) -> str: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> bytearray: ... + @overload + def __setitem__(self, i: int, x: int) -> None: ... + @overload + def __setitem__(self, s: slice, x: Union[Iterable[int], bytes]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> bytearray: ... + def __setslice__(self, start: int, stop: int, x: Union[Sequence[int], str]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, s: bytes) -> bytearray: ... + if sys.version_info >= (3,): + def __iadd__(self, s: Iterable[int]) -> bytearray: ... + def __mul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3,): + def __rmul__(self, n: int) -> bytearray: ... + def __imul__(self, n: int) -> bytearray: ... + if sys.version_info >= (3, 5): + def __mod__(self, value: Any) -> bytes: ... + # Incompatible with Sequence.__contains__ + def __contains__(self, o: Union[int, bytes]) -> bool: ... # type: ignore + def __eq__(self, x: object) -> bool: ... + def __ne__(self, x: object) -> bool: ... + def __lt__(self, x: bytes) -> bool: ... + def __le__(self, x: bytes) -> bool: ... + def __gt__(self, x: bytes) -> bool: ... + def __ge__(self, x: bytes) -> bool: ... + +if sys.version_info >= (3,): + _mv_container_type = int +else: + _mv_container_type = str + +class memoryview(Sized, Container[_mv_container_type]): + format: str + itemsize: int + shape: Optional[Tuple[int, ...]] + strides: Optional[Tuple[int, ...]] + suboffsets: Optional[Tuple[int, ...]] + readonly: bool + ndim: int + + if sys.version_info >= (3,): + c_contiguous: bool + f_contiguous: bool + contiguous: bool + def __init__(self, obj: Union[bytes, bytearray, memoryview]) -> None: ... + def __enter__(self) -> memoryview: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]) -> bool: ... + else: + def __init__(self, obj: Union[bytes, bytearray, buffer, memoryview]) -> None: ... + + @overload + def __getitem__(self, i: int) -> _mv_container_type: ... + @overload + def __getitem__(self, s: slice) -> memoryview: ... + + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_mv_container_type]: ... + def __len__(self) -> int: ... + + @overload + def __setitem__(self, i: int, o: bytes) -> None: ... + @overload + def __setitem__(self, s: slice, o: Sequence[bytes]) -> None: ... + @overload + def __setitem__(self, s: slice, o: memoryview) -> None: ... + + def tobytes(self) -> bytes: ... + def tolist(self) -> List[int]: ... + + if sys.version_info >= (3, 5): + def hex(self) -> str: ... + +class bool(int): + def __init__(self, o: object = ...) -> None: ... + @overload + def __and__(self, x: bool) -> bool: ... + @overload + def __and__(self, x: int) -> int: ... + @overload + def __or__(self, x: bool) -> bool: ... + @overload + def __or__(self, x: int) -> int: ... + @overload + def __xor__(self, x: bool) -> bool: ... + @overload + def __xor__(self, x: int) -> int: ... + @overload + def __rand__(self, x: bool) -> bool: ... + @overload + def __rand__(self, x: int) -> int: ... + @overload + def __ror__(self, x: bool) -> bool: ... + @overload + def __ror__(self, x: int) -> int: ... + @overload + def __rxor__(self, x: bool) -> bool: ... + @overload + def __rxor__(self, x: int) -> int: ... + def __getnewargs__(self) -> Tuple[int]: ... + +class slice(object): + start: Optional[int] + step: Optional[int] + stop: Optional[int] + @overload + def __init__(self, stop: Optional[int]) -> None: ... + @overload + def __init__(self, start: Optional[int], stop: Optional[int], step: Optional[int] = ...) -> None: ... + def indices(self, len: int) -> Tuple[int, int, int]: ... + +class tuple(Sequence[_T_co], Generic[_T_co]): + def __new__(cls: Type[_T], iterable: Iterable[_T_co] = ...) -> _T: ... + def __init__(self, iterable: Iterable[_T_co] = ...): ... + def __len__(self) -> int: ... + def __contains__(self, x: object) -> bool: ... + @overload + def __getitem__(self, x: int) -> _T_co: ... + @overload + def __getitem__(self, x: slice) -> Tuple[_T_co, ...]: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __lt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __le__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __gt__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __ge__(self, x: Tuple[_T_co, ...]) -> bool: ... + def __add__(self, x: Tuple[_T_co, ...]) -> Tuple[_T_co, ...]: ... + def __mul__(self, n: int) -> Tuple[_T_co, ...]: ... + def __rmul__(self, n: int) -> Tuple[_T_co, ...]: ... + def count(self, x: Any) -> int: ... + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + +class list(MutableSequence[_T], Generic[_T]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + if sys.version_info >= (3,): + def clear(self) -> None: ... + def copy(self) -> List[_T]: ... + def append(self, object: _T) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def index(self, object: _T, start: int = ..., stop: int = ...) -> int: ... + def count(self, object: _T) -> int: ... + def insert(self, index: int, object: _T) -> None: ... + def remove(self, object: _T) -> None: ... + def reverse(self) -> None: ... + if sys.version_info >= (3,): + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + else: + def sort(self, cmp: Callable[[_T, _T], Any] = ..., key: Callable[[_T], Any] = ..., reverse: bool = ...) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> List[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + if sys.version_info < (3,): + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, o: Sequence[_T]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + def __add__(self, x: List[_T]) -> List[_T]: ... + def __iadd__(self: _S, x: Iterable[_T]) -> _S: ... + def __mul__(self, n: int) -> List[_T]: ... + def __rmul__(self, n: int) -> List[_T]: ... + if sys.version_info >= (3,): + def __imul__(self: _S, n: int) -> _S: ... + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + def __gt__(self, x: List[_T]) -> bool: ... + def __ge__(self, x: List[_T]) -> bool: ... + def __lt__(self, x: List[_T]) -> bool: ... + def __le__(self, x: List[_T]) -> bool: ... + +class dict(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + # NOTE: Keyword arguments are special. If they are used, _KT must include + # str, but we have no way of enforcing it here. + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + + def __new__(cls: Type[_T1], *args: Any, **kwargs: Any) -> _T1: ... + + if sys.version_info < (3,): + def has_key(self, k: _KT) -> bool: ... + def clear(self) -> None: ... + def copy(self) -> Dict[_KT, _VT]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + if sys.version_info >= (3,): + def keys(self) -> KeysView[_KT]: ... + def values(self) -> ValuesView[_VT]: ... + def items(self) -> ItemsView[_KT, _VT]: ... + else: + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def viewkeys(self) -> KeysView[_KT]: ... + def viewvalues(self) -> ValuesView[_VT]: ... + def viewitems(self) -> ItemsView[_KT, _VT]: ... + @staticmethod + @overload + def fromkeys(seq: Iterable[_T]) -> Dict[_T, Any]: ... # TODO: Actually a class method (mypy/issues#328) + @staticmethod + @overload + def fromkeys(seq: Iterable[_T], value: _S) -> Dict[_T, _S]: ... + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + +class set(MutableSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def add(self, element: _T) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Set[_T]: ... + def difference(self, *s: Iterable[Any]) -> Set[_T]: ... + def difference_update(self, *s: Iterable[Any]) -> None: ... + def discard(self, element: _T) -> None: ... + def intersection(self, *s: Iterable[Any]) -> Set[_T]: ... + def intersection_update(self, *s: Iterable[Any]) -> None: ... + def isdisjoint(self, s: Iterable[Any]) -> bool: ... + def issubset(self, s: Iterable[Any]) -> bool: ... + def issuperset(self, s: Iterable[Any]) -> bool: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def symmetric_difference(self, s: Iterable[_T]) -> Set[_T]: ... + def symmetric_difference_update(self, s: Iterable[_T]) -> None: ... + def union(self, *s: Iterable[_T]) -> Set[_T]: ... + def update(self, *s: Iterable[_T]) -> None: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __iand__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ior__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __isub__(self, s: AbstractSet[object]) -> Set[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __ixor__(self, s: AbstractSet[_S]) -> Set[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class frozenset(AbstractSet[_T], Generic[_T]): + def __init__(self, iterable: Iterable[_T] = ...) -> None: ... + def copy(self) -> FrozenSet[_T]: ... + def difference(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def intersection(self, *s: Iterable[object]) -> FrozenSet[_T]: ... + def isdisjoint(self, s: Iterable[_T]) -> bool: ... + def issubset(self, s: Iterable[object]) -> bool: ... + def issuperset(self, s: Iterable[object]) -> bool: ... + def symmetric_difference(self, s: Iterable[_T]) -> FrozenSet[_T]: ... + def union(self, *s: Iterable[_T]) -> FrozenSet[_T]: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __and__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __or__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __sub__(self, s: AbstractSet[_T]) -> FrozenSet[_T]: ... + def __xor__(self, s: AbstractSet[_S]) -> FrozenSet[Union[_T, _S]]: ... + def __le__(self, s: AbstractSet[object]) -> bool: ... + def __lt__(self, s: AbstractSet[object]) -> bool: ... + def __ge__(self, s: AbstractSet[object]) -> bool: ... + def __gt__(self, s: AbstractSet[object]) -> bool: ... + +class enumerate(Iterator[Tuple[int, _T]], Generic[_T]): + def __init__(self, iterable: Iterable[_T], start: int = ...) -> None: ... + def __iter__(self) -> Iterator[Tuple[int, _T]]: ... + if sys.version_info >= (3,): + def __next__(self) -> Tuple[int, _T]: ... + else: + def next(self) -> Tuple[int, _T]: ... + +if sys.version_info >= (3,): + class range(Sequence[int]): + start: int + stop: int + step: int + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def count(self, value: int) -> int: ... + def index(self, value: int, start: int = ..., stop: Optional[int] = ...) -> int: ... + def __len__(self) -> int: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[int]: ... + @overload + def __getitem__(self, i: int) -> int: ... + @overload + def __getitem__(self, s: slice) -> range: ... + def __repr__(self) -> str: ... + def __reversed__(self) -> Iterator[int]: ... +else: + class xrange(Sized, Iterable[int], Reversible[int]): + @overload + def __init__(self, stop: int) -> None: ... + @overload + def __init__(self, start: int, stop: int, step: int = ...) -> None: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[int]: ... + def __getitem__(self, i: int) -> int: ... + def __reversed__(self) -> Iterator[int]: ... + +class property(object): + def __init__(self, fget: Optional[Callable[[Any], Any]] = ..., + fset: Optional[Callable[[Any, Any], None]] = ..., + fdel: Optional[Callable[[Any], None]] = ..., + doc: Optional[str] = ...) -> None: ... + def getter(self, fget: Callable[[Any], Any]) -> property: ... + def setter(self, fset: Callable[[Any, Any], None]) -> property: ... + def deleter(self, fdel: Callable[[Any], None]) -> property: ... + def __get__(self, obj: Any, type: Optional[type] = ...) -> Any: ... + def __set__(self, obj: Any, value: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + def fget(self) -> Any: ... + def fset(self, value: Any) -> None: ... + def fdel(self) -> None: ... + +if sys.version_info < (3,): + long = int + +NotImplemented: Any + +def abs(__n: SupportsAbs[_T]) -> _T: ... +def all(__i: Iterable[object]) -> bool: ... +def any(__i: Iterable[object]) -> bool: ... +if sys.version_info < (3,): + def apply(__func: Callable[..., _T], __args: Optional[Sequence[Any]] = ..., __kwds: Optional[Mapping[str, Any]] = ...) -> _T: ... +if sys.version_info >= (3,): + def ascii(__o: object) -> str: ... + +class _SupportsIndex(Protocol): + def __index__(self) -> int: ... +def bin(__number: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 7): + def breakpoint(*args: Any, **kws: Any) -> None: ... +def callable(__o: object) -> bool: ... +def chr(__code: int) -> str: ... +if sys.version_info < (3,): + def cmp(__x: Any, __y: Any) -> int: ... + _N1 = TypeVar('_N1', bool, int, float, complex) + def coerce(__x: _N1, __y: _N1) -> Tuple[_N1, _N1]: ... +if sys.version_info >= (3, 6): + # This class is to be exported as PathLike from os, + # but we define it here as _PathLike to avoid import cycle issues. + # See https://github.com/python/typeshed/pull/991#issuecomment-288160993 + class _PathLike(Generic[AnyStr]): + def __fspath__(self) -> AnyStr: ... + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes, _PathLike], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +elif sys.version_info >= (3,): + def compile(source: Union[str, bytes, mod, AST], filename: Union[str, bytes], mode: str, flags: int = ..., dont_inherit: int = ..., optimize: int = ...) -> Any: ... +else: + def compile(source: Union[Text, mod], filename: Text, mode: Text, flags: int = ..., dont_inherit: int = ...) -> Any: ... +if sys.version_info >= (3,): + def copyright() -> None: ... + def credits() -> None: ... +def delattr(__o: Any, __name: Text) -> None: ... +def dir(__o: object = ...) -> List[str]: ... +_N2 = TypeVar('_N2', int, float) +def divmod(__a: _N2, __b: _N2) -> Tuple[_N2, _N2]: ... +def eval(__source: Union[Text, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +if sys.version_info >= (3,): + def exec(__object: Union[str, bytes, CodeType], __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Mapping[str, Any]] = ...) -> Any: ... +else: + def execfile(__filename: str, __globals: Optional[Dict[str, Any]] = ..., __locals: Optional[Dict[str, Any]] = ...) -> None: ... +def exit(code: object = ...) -> NoReturn: ... +if sys.version_info >= (3,): + @overload + def filter(__function: None, __iterable: Iterable[Optional[_T]]) -> Iterator[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], __iterable: Iterable[_T]) -> Iterator[_T]: ... +else: + @overload + def filter(__function: Callable[[AnyStr], Any], # type: ignore + __iterable: AnyStr) -> AnyStr: ... + @overload + def filter(__function: None, # type: ignore + __iterable: Tuple[Optional[_T], ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: Callable[[_T], Any], # type: ignore + __iterable: Tuple[_T, ...]) -> Tuple[_T, ...]: ... + @overload + def filter(__function: None, + __iterable: Iterable[Optional[_T]]) -> List[_T]: ... + @overload + def filter(__function: Callable[[_T], Any], + __iterable: Iterable[_T]) -> List[_T]: ... +def format(__o: object, __format_spec: str = ...) -> str: ... # TODO unicode +def getattr(__o: Any, name: Text, __default: Any = ...) -> Any: ... +def globals() -> Dict[str, Any]: ... +def hasattr(__o: Any, __name: Text) -> bool: ... +def hash(__o: object) -> int: ... +if sys.version_info >= (3,): + def help(*args: Any, **kwds: Any) -> None: ... +def hex(__i: Union[int, _SupportsIndex]) -> str: ... +def id(__o: object) -> int: ... +if sys.version_info >= (3,): + def input(__prompt: Any = ...) -> str: ... +else: + def input(__prompt: Any = ...) -> Any: ... + def intern(__string: str) -> str: ... +@overload +def iter(__iterable: Iterable[_T]) -> Iterator[_T]: ... +@overload +def iter(__function: Callable[[], _T], __sentinel: _T) -> Iterator[_T]: ... +def isinstance(__o: object, __t: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def issubclass(__cls: type, __classinfo: Union[type, Tuple[Union[type, Tuple], ...]]) -> bool: ... +def len(__o: Sized) -> int: ... +if sys.version_info >= (3,): + def license() -> None: ... +def locals() -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> Iterator[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[_S]: ... +else: + @overload + def map(__func: None, __iter1: Iterable[_T1]) -> List[_T1]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def map(__func: None, + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def map(__func: None, + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... + @overload + def map(__func: Callable[[_T1], _S], __iter1: Iterable[_T1]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[_S]: ... + @overload + def map(__func: Callable[[_T1, _T2, _T3, _T4, _T5], _S], + __iter1: Iterable[_T1], + __iter2: Iterable[_T2], + __iter3: Iterable[_T3], + __iter4: Iterable[_T4], + __iter5: Iterable[_T5]) -> List[_S]: ... + @overload + def map(__func: Callable[..., _S], + __iter1: Iterable[Any], + __iter2: Iterable[Any], + __iter3: Iterable[Any], + __iter4: Iterable[Any], + __iter5: Iterable[Any], + __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[_S]: ... +if sys.version_info >= (3,): + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def max(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def max(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +if sys.version_info >= (3,): + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ..., default: _VT) -> Union[_T, _VT]: ... +else: + @overload + def min(__arg1: _T, __arg2: _T, *_args: _T, key: Callable[[_T], Any] = ...) -> _T: ... + @overload + def min(__iterable: Iterable[_T], *, key: Callable[[_T], Any] = ...) -> _T: ... +@overload +def next(__i: Iterator[_T]) -> _T: ... +@overload +def next(__i: Iterator[_T], default: _VT) -> Union[_T, _VT]: ... +def oct(__i: Union[int, _SupportsIndex]) -> str: ... + +if sys.version_info >= (3, 6): + def open(file: Union[str, bytes, int, _PathLike], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +elif sys.version_info >= (3,): + def open(file: Union[str, bytes, int], mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: Optional[str] = ..., newline: Optional[str] = ..., closefd: bool = ..., + opener: Optional[Callable[[str, int], int]] = ...) -> IO[Any]: ... +else: + def open(name: Union[unicode, int], mode: unicode = ..., buffering: int = ...) -> BinaryIO: ... + +def ord(__c: Union[Text, bytes]) -> int: ... +if sys.version_info >= (3,): + class _Writer(Protocol): + def write(self, __s: str) -> Any: ... + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ..., flush: bool = ...) -> None: ... +else: + class _Writer(Protocol): + def write(self, __s: Any) -> Any: ... + # This is only available after from __future__ import print_function. + def print(*values: object, sep: Text = ..., end: Text = ..., file: Optional[_Writer] = ...) -> None: ... +@overload +def pow(__x: int, __y: int) -> Any: ... # The return type can be int or float, depending on y +@overload +def pow(__x: int, __y: int, __z: int) -> Any: ... +@overload +def pow(__x: float, __y: float) -> float: ... +@overload +def pow(__x: float, __y: float, __z: float) -> float: ... +def quit(code: object = ...) -> NoReturn: ... +if sys.version_info < (3,): + def range(__x: int, __y: int = ..., __step: int = ...) -> List[int]: ... + def raw_input(__prompt: Any = ...) -> str: ... + @overload + def reduce(__function: Callable[[_T, _S], _T], __iterable: Iterable[_S], __initializer: _T) -> _T: ... + @overload + def reduce(__function: Callable[[_T, _T], _T], __iterable: Iterable[_T]) -> _T: ... + def reload(__module: Any) -> Any: ... +@overload +def reversed(__object: Sequence[_T]) -> Iterator[_T]: ... +@overload +def reversed(__object: Reversible[_T]) -> Iterator[_T]: ... +def repr(__o: object) -> str: ... +if sys.version_info >= (3,): + @overload + def round(number: float) -> int: ... + @overload + def round(number: float, ndigits: None) -> int: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsRound[_T]) -> int: ... + @overload + def round(number: SupportsRound[_T], ndigits: None) -> int: ... # type: ignore + @overload + def round(number: SupportsRound[_T], ndigits: int) -> _T: ... +else: + @overload + def round(number: float) -> float: ... + @overload + def round(number: float, ndigits: int) -> float: ... + @overload + def round(number: SupportsFloat) -> float: ... + @overload + def round(number: SupportsFloat, ndigits: int) -> float: ... +def setattr(__object: Any, __name: Text, __value: Any) -> None: ... +if sys.version_info >= (3,): + def sorted(__iterable: Iterable[_T], *, + key: Optional[Callable[[_T], Any]] = ..., + reverse: bool = ...) -> List[_T]: ... +else: + def sorted(__iterable: Iterable[_T], *, + cmp: Callable[[_T, _T], int] = ..., + key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> List[_T]: ... +@overload +def sum(__iterable: Iterable[_T]) -> Union[_T, int]: ... +@overload +def sum(__iterable: Iterable[_T], __start: _S) -> Union[_T, _S]: ... +if sys.version_info < (3,): + def unichr(__i: int) -> unicode: ... +def vars(__object: Any = ...) -> Dict[str, Any]: ... +if sys.version_info >= (3,): + @overload + def zip(__iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +else: + @overload + def zip(__iter1: Iterable[_T1]) -> List[Tuple[_T1]]: ... + @overload + def zip(__iter1: Iterable[_T1], + __iter2: Iterable[_T2]) -> List[Tuple[_T1, _T2]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], + __iter3: Iterable[_T3]) -> List[Tuple[_T1, _T2, _T3]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4]) -> List[Tuple[_T1, _T2, _T3, _T4]]: ... + @overload + def zip(__iter1: Iterable[_T1], __iter2: Iterable[_T2], __iter3: Iterable[_T3], + __iter4: Iterable[_T4], __iter5: Iterable[_T5]) -> List[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... + @overload + def zip(__iter1: Iterable[Any], __iter2: Iterable[Any], __iter3: Iterable[Any], + __iter4: Iterable[Any], __iter5: Iterable[Any], __iter6: Iterable[Any], + *iterables: Iterable[Any]) -> List[Tuple[Any, ...]]: ... +def __import__(name: Text, globals: Dict[str, Any] = ..., locals: Dict[str, Any] = ..., + fromlist: List[str] = ..., level: int = ...) -> Any: ... + +# Actually the type of Ellipsis is , but since it's +# not exposed anywhere under that name, we make it private here. +class ellipsis: ... +Ellipsis: ellipsis + +if sys.version_info < (3,): + # TODO: buffer support is incomplete; e.g. some_string.startswith(some_buffer) doesn't type check. + _AnyBuffer = TypeVar('_AnyBuffer', str, unicode, bytearray, buffer) + + class buffer(Sized): + def __init__(self, object: _AnyBuffer, offset: int = ..., size: int = ...) -> None: ... + def __add__(self, other: _AnyBuffer) -> str: ... + def __cmp__(self, other: _AnyBuffer) -> bool: ... + def __getitem__(self, key: Union[int, slice]) -> str: ... + def __getslice__(self, i: int, j: int) -> str: ... + def __len__(self) -> int: ... + def __mul__(self, x: int) -> str: ... + +class BaseException(object): + args: Tuple[Any, ...] + if sys.version_info < (3,): + message: Any + if sys.version_info >= (3,): + __cause__: Optional[BaseException] + __context__: Optional[BaseException] + __suppress_context__: bool + __traceback__: Optional[TracebackType] + def __init__(self, *args: object) -> None: ... + if sys.version_info < (3,): + def __getitem__(self, i: int) -> Any: ... + def __getslice__(self, start: int, stop: int) -> Tuple[Any, ...]: ... + if sys.version_info >= (3,): + def with_traceback(self, tb: Optional[TracebackType]) -> BaseException: ... + +class GeneratorExit(BaseException): ... +class KeyboardInterrupt(BaseException): ... +class SystemExit(BaseException): + code: int +class Exception(BaseException): ... +class StopIteration(Exception): + if sys.version_info >= (3,): + value: Any +if sys.version_info >= (3,): + _StandardError = Exception + class OSError(Exception): + errno: int + strerror: str + # filename, filename2 are actually Union[str, bytes, None] + filename: Any + filename2: Any + EnvironmentError = OSError + IOError = OSError +else: + class StandardError(Exception): ... + _StandardError = StandardError + class EnvironmentError(StandardError): + errno: int + strerror: str + # TODO can this be unicode? + filename: str + class OSError(EnvironmentError): ... + class IOError(EnvironmentError): ... + +class ArithmeticError(_StandardError): ... +class AssertionError(_StandardError): ... +class AttributeError(_StandardError): ... +class BufferError(_StandardError): ... +class EOFError(_StandardError): ... +class ImportError(_StandardError): + if sys.version_info >= (3,): + name: str + path: str +class LookupError(_StandardError): ... +class MemoryError(_StandardError): ... +class NameError(_StandardError): ... +class ReferenceError(_StandardError): ... +class RuntimeError(_StandardError): ... +if sys.version_info >= (3, 5): + class StopAsyncIteration(Exception): + value: Any +class SyntaxError(_StandardError): + msg: str + lineno: int + offset: Optional[int] + text: str + filename: str +class SystemError(_StandardError): ... +class TypeError(_StandardError): ... +class ValueError(_StandardError): ... + +class FloatingPointError(ArithmeticError): ... +class OverflowError(ArithmeticError): ... +class ZeroDivisionError(ArithmeticError): ... + +if sys.version_info >= (3, 6): + class ModuleNotFoundError(ImportError): ... + +class IndexError(LookupError): ... +class KeyError(LookupError): ... + +class UnboundLocalError(NameError): ... + +class WindowsError(OSError): + winerror: int +if sys.version_info >= (3,): + class BlockingIOError(OSError): + characters_written: int + class ChildProcessError(OSError): ... + class ConnectionError(OSError): ... + class BrokenPipeError(ConnectionError): ... + class ConnectionAbortedError(ConnectionError): ... + class ConnectionRefusedError(ConnectionError): ... + class ConnectionResetError(ConnectionError): ... + class FileExistsError(OSError): ... + class FileNotFoundError(OSError): ... + class InterruptedError(OSError): ... + class IsADirectoryError(OSError): ... + class NotADirectoryError(OSError): ... + class PermissionError(OSError): ... + class ProcessLookupError(OSError): ... + class TimeoutError(OSError): ... + +class NotImplementedError(RuntimeError): ... +if sys.version_info >= (3, 5): + class RecursionError(RuntimeError): ... + +class IndentationError(SyntaxError): ... +class TabError(IndentationError): ... + +class UnicodeError(ValueError): ... +class UnicodeDecodeError(UnicodeError): + encoding: str + object: bytes + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: bytes, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeEncodeError(UnicodeError): + encoding: str + object: Text + start: int + end: int + reason: str + def __init__(self, __encoding: str, __object: Text, __start: int, __end: int, + __reason: str) -> None: ... +class UnicodeTranslateError(UnicodeError): ... + +class Warning(Exception): ... +class UserWarning(Warning): ... +class DeprecationWarning(Warning): ... +class SyntaxWarning(Warning): ... +class RuntimeWarning(Warning): ... +class FutureWarning(Warning): ... +class PendingDeprecationWarning(Warning): ... +class ImportWarning(Warning): ... +class UnicodeWarning(Warning): ... +class BytesWarning(Warning): ... +if sys.version_info >= (3, 2): + class ResourceWarning(Warning): ... + +if sys.version_info < (3,): + class file(BinaryIO): + @overload + def __init__(self, file: str, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: unicode, mode: str = ..., buffering: int = ...) -> None: ... + @overload + def __init__(self, file: int, mode: str = ..., buffering: int = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def next(self) -> str: ... + def read(self, n: int = ...) -> str: ... + def __enter__(self) -> BinaryIO: ... + def __exit__(self, t: Optional[type] = ..., exc: Optional[BaseException] = ..., tb: Optional[Any] = ...) -> bool: ... + def flush(self) -> None: ... + def fileno(self) -> int: ... + def isatty(self) -> bool: ... + def close(self) -> None: ... + + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + def readline(self, limit: int = ...) -> str: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def write(self, data: str) -> int: ... + def writelines(self, data: Iterable[str]) -> None: ... + def truncate(self, pos: Optional[int] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi new file mode 100644 index 0000000..2cb329c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/bz2.pyi @@ -0,0 +1,48 @@ +import io +import sys +from typing import Any, IO, Optional, Union + +if sys.version_info >= (3, 6): + from os import PathLike + _PathOrFile = Union[str, bytes, IO[Any], PathLike[Any]] +elif sys.version_info >= (3, 3): + _PathOrFile = Union[str, bytes, IO[Any]] +else: + _PathOrFile = str + +def compress(data: bytes, compresslevel: int = ...) -> bytes: ... +def decompress(data: bytes) -> bytes: ... + +if sys.version_info >= (3, 3): + def open(filename: _PathOrFile, + mode: str = ..., + compresslevel: int = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + +class BZ2File(io.BufferedIOBase, IO[bytes]): # type: ignore # python/mypy#5027 + def __init__(self, + filename: _PathOrFile, + mode: str = ..., + buffering: Optional[Any] = ..., + compresslevel: int = ...) -> None: ... + +class BZ2Compressor(object): + def __init__(self, compresslevel: int = ...) -> None: ... + def compress(self, data: bytes) -> bytes: ... + def flush(self) -> bytes: ... + +class BZ2Decompressor(object): + if sys.version_info >= (3, 5): + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + else: + def decompress(self, data: bytes) -> bytes: ... + if sys.version_info >= (3, 3): + @property + def eof(self) -> bool: ... + if sys.version_info >= (3, 5): + @property + def needs_input(self) -> bool: ... + @property + def unused_data(self) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi new file mode 100644 index 0000000..71e25ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cProfile.pyi @@ -0,0 +1,24 @@ +import os +import sys +from typing import Any, Callable, Dict, Optional, Text, TypeVar, Union + +def run(statement: str, filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any], filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... + +_SelfT = TypeVar('_SelfT', bound='Profile') +_T = TypeVar('_T') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Profile: + def __init__(self, custom_timer: Callable[[], float] = ..., time_unit: float = ..., subcalls: bool = ..., builtins: bool = ...) -> None: ... + def enable(self) -> None: ... + def disable(self) -> None: ... + def print_stats(self, sort: Union[str, int] = ...) -> None: ... + def dump_stats(self, file: _Path) -> None: ... + def create_stats(self) -> None: ... + def run(self: _SelfT, cmd: str) -> _SelfT: ... + def runctx(self: _SelfT, cmd: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> _SelfT: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi new file mode 100644 index 0000000..4b452cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/calendar.pyi @@ -0,0 +1,122 @@ +import datetime +import sys +from time import struct_time +from typing import Any, Iterable, List, Optional, Sequence, Tuple, Union + + +_LocaleType = Tuple[Optional[str], Optional[str]] + +class IllegalMonthError(ValueError): + def __init__(self, month: int) -> None: ... + def __str__(self) -> str: ... + +class IllegalWeekdayError(ValueError): + def __init__(self, weekday: int) -> None: ... + def __str__(self) -> str: ... + +def isleap(year: int) -> bool: ... +def leapdays(y1: int, y2: int) -> int: ... +def weekday(year: int, month: int, day: int) -> int: ... +def monthrange(year: int, month: int) -> Tuple[int, int]: ... + +class Calendar: + def __init__(self, firstweekday: int = ...) -> None: ... + def getfirstweekday(self) -> int: ... + def setfirstweekday(self, firstweekday: int) -> None: ... + def iterweekdays(self) -> Iterable[int]: ... + def itermonthdates(self, year: int, month: int) -> Iterable[datetime.date]: ... + def itermonthdays2(self, year: int, month: int) -> Iterable[Tuple[int, int]]: ... + def itermonthdays(self, year: int, month: int) -> Iterable[int]: ... + def monthdatescalendar(self, year: int, month: int) -> List[List[datetime.date]]: ... + def monthdays2calendar(self, year: int, month: int) -> List[List[Tuple[int, int]]]: ... + def monthdayscalendar(self, year: int, month: int) -> List[List[int]]: ... + def yeardatescalendar(self, year: int, width: int = ...) -> List[List[int]]: ... + def yeardays2calendar(self, year: int, width: int = ...) -> List[List[Tuple[int, int]]]: ... + def yeardayscalendar(self, year: int, width: int = ...) -> List[List[int]]: ... + if sys.version_info >= (3, 7): + def itermonthdays3(self, year: int, month: int) -> Iterable[Tuple[int, int, int]]: ... + def itermonthdays4(self, year: int, month: int) -> Iterable[Tuple[int, int, int, int]]: ... + +class TextCalendar(Calendar): + def prweek(self, theweek: int, width: int) -> None: ... + def formatday(self, day: int, weekday: int, width: int) -> str: ... + def formatweek(self, theweek: int, width: int) -> str: ... + def formatweekday(self, day: int, width: int) -> str: ... + def formatweekheader(self, width: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = ...) -> str: ... + def prmonth(self, theyear: int, themonth: int, w: int = ..., l: int = ...) -> None: ... + def formatmonth(self, theyear: int, themonth: int, w: int = ..., l: int = ...) -> str: ... + def formatyear(self, theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> str: ... + def pryear(self, theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> None: ... + +def firstweekday() -> int: ... +def monthcalendar(year: int, month: int) -> List[List[int]]: ... +def prweek(theweek: int, width: int) -> None: ... +def week(theweek: int, width: int) -> str: ... +def weekheader(width: int) -> str: ... +def prmonth(theyear: int, themonth: int, w: int = ..., l: int = ...) -> None: ... +def month(theyear: int, themonth: int, w: int = ..., l: int = ...) -> str: ... +def calendar(theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> str: ... +def prcal(theyear: int, w: int = ..., l: int = ..., c: int = ..., m: int = ...) -> None: ... + +class HTMLCalendar(Calendar): + def formatday(self, day: int, weekday: int) -> str: ... + def formatweek(self, theweek: int) -> str: ... + def formatweekday(self, day: int) -> str: ... + def formatweekheader(self) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + def formatmonth(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + def formatyear(self, theyear: int, width: int = ...) -> str: ... + def formatyearpage(self, theyear: int, width: int = ..., css: Optional[str] = ..., encoding: Optional[str] = ...) -> str: ... + if sys.version_info >= (3, 7): + cssclasses: List[str] + cssclass_noday: str + cssclasses_weekday_head: List[str] + cssclass_month_head: str + cssclass_month: str + cssclass_year: str + cssclass_year_head: str + +if sys.version_info < (3, 0): + class TimeEncoding: + def __init__(self, locale: _LocaleType) -> None: ... + def __enter__(self) -> _LocaleType: ... + def __exit__(self, *args: Any) -> None: ... +else: + class different_locale: + def __init__(self, locale: _LocaleType) -> None: ... + def __enter__(self) -> _LocaleType: ... + def __exit__(self, *args: Any) -> None: ... + +class LocaleTextCalendar(TextCalendar): + def __init__(self, firstweekday: int = ..., locale: Optional[_LocaleType] = ...) -> None: ... + def formatweekday(self, day: int, width: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, width: int, withyear: bool = ...) -> str: ... + +class LocaleHTMLCalendar(HTMLCalendar): + def __init__(self, firstweekday: int = ..., locale: Optional[_LocaleType] = ...) -> None: ... + def formatweekday(self, day: int) -> str: ... + def formatmonthname(self, theyear: int, themonth: int, withyear: bool = ...) -> str: ... + +c: TextCalendar +def setfirstweekday(firstweekday: int) -> None: ... +def format(cols: int, colwidth: int = ..., spacing: int = ...) -> str: ... +def formatstring(cols: int, colwidth: int = ..., spacing: int = ...) -> str: ... +def timegm(tuple: Union[Tuple[int, ...], struct_time]) -> int: ... + +# Data attributes +day_name: Sequence[str] +day_abbr: Sequence[str] +month_name: Sequence[str] +month_abbr: Sequence[str] + +# Below constants are not in docs or __all__, but enough people have used them +# they are now effectively public. + +MONDAY: int +TUESDAY: int +WEDNESDAY: int +THURSDAY: int +FRIDAY: int +SATURDAY: int +SUNDAY: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi new file mode 100644 index 0000000..02979c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cgi.pyi @@ -0,0 +1,122 @@ +import sys +from typing import Any, AnyStr, Dict, IO, Iterable, List, Mapping, Optional, Tuple, TypeVar, Union + +_T = TypeVar('_T', bound=FieldStorage) + +def parse(fp: IO[Any] = ..., environ: Mapping[str, str] = ..., + keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +def parse_qs(qs: str, keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +def parse_qsl(qs: str, keep_blank_values: bool = ..., strict_parsing: bool = ...) -> Dict[str, List[str]]: ... +if sys.version_info >= (3, 7): + def parse_multipart(fp: IO[Any], pdict: Mapping[str, bytes], encoding: str = ..., errors: str = ...) -> Dict[str, List[Any]]: ... +else: + def parse_multipart(fp: IO[Any], pdict: Mapping[str, bytes]) -> Dict[str, List[bytes]]: ... +def parse_header(s: str) -> Tuple[str, Dict[str, str]]: ... +def test(environ: Mapping[str, str] = ...) -> None: ... +def print_environ(environ: Mapping[str, str] = ...) -> None: ... +def print_form(form: Dict[str, Any]) -> None: ... +def print_directory() -> None: ... +def print_environ_usage() -> None: ... +if sys.version_info >= (3, 0): + def escape(s: str, quote: bool = ...) -> str: ... +else: + def escape(s: AnyStr, quote: bool = ...) -> AnyStr: ... + + +class MiniFieldStorage: + # The first five "Any" attributes here are always None, but mypy doesn't support that + filename: Any + list: Any + type: Any + file: Optional[IO[bytes]] + type_options: Dict[Any, Any] + disposition: Any + disposition_options: Dict[Any, Any] + headers: Dict[Any, Any] + name: Any + value: Any + + def __init__(self, name: Any, value: Any) -> None: ... + def __repr__(self) -> str: ... + + +class FieldStorage(object): + FieldStorageClass: Optional[type] + keep_blank_values: int + strict_parsing: int + qs_on_post: Optional[str] + headers: Mapping[str, str] + fp: IO[bytes] + encoding: str + errors: str + outerboundary: bytes + bytes_read: int + limit: Optional[int] + disposition: str + disposition_options: Dict[str, str] + filename: Optional[str] + file: Optional[IO[bytes]] + type: str + type_options: Dict[str, str] + innerboundary: bytes + length: int + done: int + list: Optional[List[Any]] + value: Union[None, bytes, List[Any]] + + if sys.version_info >= (3, 0): + def __init__(self, fp: IO[Any] = ..., headers: Mapping[str, str] = ..., outerboundary: bytes = ..., + environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ..., + limit: int = ..., encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, fp: IO[Any] = ..., headers: Mapping[str, str] = ..., outerboundary: bytes = ..., + environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ...) -> None: ... + + if sys.version_info >= (3, 0): + def __enter__(self: _T) -> _T: ... + def __exit__(self, *args: Any) -> None: ... + def __repr__(self) -> str: ... + def __iter__(self) -> Iterable[str]: ... + def __getitem__(self, key: str) -> Any: ... + def getvalue(self, key: str, default: Any = ...) -> Any: ... + def getfirst(self, key: str, default: Any = ...) -> Any: ... + def getlist(self, key: str) -> List[Any]: ... + def keys(self) -> List[str]: ... + if sys.version_info < (3, 0): + def has_key(self, key: str) -> bool: ... + def __contains__(self, key: str) -> bool: ... + def __len__(self) -> int: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + if sys.version_info >= (3, 0): + # In Python 3 it returns bytes or str IO depending on an internal flag + def make_file(self) -> IO[Any]: ... + else: + # In Python 2 it always returns bytes and ignores the "binary" flag + def make_file(self, binary: Any = ...) -> IO[bytes]: ... + + +if sys.version_info < (3, 0): + from UserDict import UserDict + + class FormContentDict(UserDict): + query_string: str + def __init__(self, environ: Mapping[str, str] = ..., keep_blank_values: int = ..., strict_parsing: int = ...) -> None: ... + + class SvFormContentDict(FormContentDict): + def getlist(self, key: Any) -> Any: ... + + class InterpFormContentDict(SvFormContentDict): ... + + class FormContent(FormContentDict): + # TODO this should have + # def values(self, key: Any) -> Any: ... + # but this is incompatible with the supertype, and adding '# type: ignore' triggers + # a parse error in pytype (https://github.com/google/pytype/issues/53) + def indexed_value(self, key: Any, location: int) -> Any: ... + def value(self, key: Any) -> Any: ... + def length(self, key: Any) -> int: ... + def stripped(self, key: Any) -> Any: ... + def pars(self) -> Dict[Any, Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi new file mode 100644 index 0000000..2337f00 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/chunk.pyi @@ -0,0 +1,23 @@ +# Source(py2): https://hg.python.org/cpython/file/2.7/Lib/chunk.py +# Source(py3): https://github.com/python/cpython/blob/master/Lib/chunk.py + +from typing import IO + +class Chunk: + closed: bool + align: bool + file: IO[bytes] + chunkname: bytes + chunksize: int + size_read: int + offset: int + seekable: bool + def __init__(self, file: IO[bytes], align: bool = ..., bigendian: bool = ..., inclheader: bool = ...) -> None: ... + def getname(self) -> bytes: ... + def getsize(self) -> int: ... + def close(self) -> None: ... + def isatty(self) -> bool: ... + def seek(self, pos: int, whence: int = ...) -> None: ... + def tell(self) -> int: ... + def read(self, size: int = ...) -> bytes: ... + def skip(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi new file mode 100644 index 0000000..4b15f0b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmath.pyi @@ -0,0 +1,42 @@ +"""Stub file for the 'cmath' module.""" + +import sys +from typing import SupportsComplex, SupportsFloat, Tuple, Union + +e: float +pi: float +if sys.version_info >= (3, 6): + inf: float + infj: complex + nan: float + nanj: complex + tau: float + +_C = Union[SupportsFloat, SupportsComplex] + +def acos(x: _C) -> complex: ... +def acosh(x: _C) -> complex: ... +def asin(x: _C) -> complex: ... +def asinh(x: _C) -> complex: ... +def atan(x: _C) -> complex: ... +def atanh(x: _C) -> complex: ... +def cos(x: _C) -> complex: ... +def cosh(x: _C) -> complex: ... +def exp(x: _C) -> complex: ... +if sys.version_info >= (3, 5): + def isclose(a: _C, b: _C, *, rel_tol: SupportsFloat = ..., abs_tol: SupportsFloat = ...) -> bool: ... +def isinf(z: _C) -> bool: ... +def isnan(z: _C) -> bool: ... +def log(x: _C, base: _C = ...) -> complex: ... +def log10(x: _C) -> complex: ... +def phase(z: _C) -> float: ... +def polar(z: _C) -> Tuple[float, float]: ... +def rect(r: float, phi: float) -> complex: ... +def sin(x: _C) -> complex: ... +def sinh(x: _C) -> complex: ... +def sqrt(x: _C) -> complex: ... +def tan(x: _C) -> complex: ... +def tanh(x: _C) -> complex: ... + +if sys.version_info >= (3,): + def isfinite(z: _C) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi new file mode 100644 index 0000000..c2aeb75 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/cmd.pyi @@ -0,0 +1,41 @@ +# Stubs for cmd (Python 2/3) + +from typing import Any, Optional, Text, IO, List, Callable, Tuple + +class Cmd: + prompt: str + identchars: str + ruler: str + lastcmd: str + intro: Optional[Any] + doc_leader: str + doc_header: str + misc_header: str + undoc_header: str + nohelp: str + use_rawinput: bool + stdin: IO[str] + stdout: IO[str] + cmdqueue: List[str] + completekey: str + def __init__(self, completekey: str = ..., stdin: Optional[IO[str]] = ..., stdout: Optional[IO[str]] = ...) -> None: ... + old_completer: Optional[Callable[[str, int], Optional[str]]] + def cmdloop(self, intro: Optional[Any] = ...) -> None: ... + def precmd(self, line: str) -> str: ... + def postcmd(self, stop: bool, line: str) -> bool: ... + def preloop(self) -> None: ... + def postloop(self) -> None: ... + def parseline(self, line: str) -> Tuple[Optional[str], Optional[str], str]: ... + def onecmd(self, line: str) -> bool: ... + def emptyline(self) -> bool: ... + def default(self, line: str) -> bool: ... + def completedefault(self, *ignored: Any) -> List[str]: ... + def completenames(self, text: str, *ignored: Any) -> List[str]: ... + completion_matches: Optional[List[str]] + def complete(self, text: str, state: int) -> Optional[List[str]]: ... + def get_names(self) -> List[str]: ... + # Only the first element of args matters. + def complete_help(self, *args: Any) -> List[str]: ... + def do_help(self, arg: Optional[str]) -> None: ... + def print_topics(self, header: str, cmds: Optional[List[str]], cmdlen: Any, maxcol: int) -> None: ... + def columnize(self, list: Optional[List[str]], displaywidth: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/code.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/code.pyi new file mode 100644 index 0000000..293ab9b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/code.pyi @@ -0,0 +1,38 @@ +# Stubs for code + +import sys +from typing import Any, Callable, Mapping, Optional +from types import CodeType + +class InteractiveInterpreter: + def __init__(self, locals: Optional[Mapping[str, Any]] = ...) -> None: ... + def runsource(self, source: str, filename: str = ..., + symbol: str = ...) -> bool: ... + def runcode(self, code: CodeType) -> None: ... + def showsyntaxerror(self, filename: Optional[str] = ...) -> None: ... + def showtraceback(self) -> None: ... + def write(self, data: str) -> None: ... + +class InteractiveConsole(InteractiveInterpreter): + def __init__(self, locals: Optional[Mapping[str, Any]] = ..., + filename: str = ...) -> None: ... + if sys.version_info >= (3, 6): + def interact(self, banner: Optional[str] = ..., + exitmsg: Optional[str] = ...) -> None: ... + else: + def interact(self, banner: Optional[str] = ...) -> None: ... + def push(self, line: str) -> bool: ... + def resetbuffer(self) -> None: ... + def raw_input(self, prompt: str = ...) -> str: ... + +if sys.version_info >= (3, 6): + def interact(banner: Optional[str] = ..., + readfunc: Optional[Callable[[str], str]] = ..., + local: Optional[Mapping[str, Any]] = ..., + exitmsg: Optional[str] = ...) -> None: ... +else: + def interact(banner: Optional[str] = ..., + readfunc: Optional[Callable[[str], str]] = ..., + local: Optional[Mapping[str, Any]] = ...) -> None: ... +def compile_command(source: str, filename: str = ..., + symbol: str = ...) -> Optional[CodeType]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi new file mode 100644 index 0000000..b99ce91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codecs.pyi @@ -0,0 +1,242 @@ +import sys +from typing import Any, BinaryIO, Callable, Generator, IO, Iterable, Iterator, List, Optional, Protocol, Text, TextIO, Tuple, Type, TypeVar, Union + +from abc import abstractmethod +import types + +# TODO: this only satisfies the most common interface, where +# bytes (py2 str) is the raw form and str (py2 unicode) is the cooked form. +# In the long run, both should become template parameters maybe? +# There *are* bytes->bytes and str->str encodings in the standard library. +# They are much more common in Python 2 than in Python 3. + +_Decoded = Text +_Encoded = bytes + +class _Encoder(Protocol): + def __call__(self, input: _Decoded, errors: str = ...) -> Tuple[_Encoded, int]: ... # signature of Codec().encode +class _Decoder(Protocol): + def __call__(self, input: _Encoded, errors: str = ...) -> Tuple[_Decoded, int]: ... # signature of Codec().decode + +class _StreamReader(Protocol): + def __call__(self, stream: IO[_Encoded], errors: str = ...) -> StreamReader: ... +class _StreamWriter(Protocol): + def __call__(self, stream: IO[_Encoded], errors: str = ...) -> StreamWriter: ... + +class _IncrementalEncoder(Protocol): + def __call__(self, errors: str = ...) -> IncrementalEncoder: ... +class _IncrementalDecoder(Protocol): + def __call__(self, errors: str = ...) -> IncrementalDecoder: ... + +def encode(obj: _Decoded, encoding: str = ..., errors: str = ...) -> _Encoded: ... +def decode(obj: _Encoded, encoding: str = ..., errors: str = ...) -> _Decoded: ... +def lookup(encoding: str) -> CodecInfo: ... + +class CodecInfo(Tuple[_Encoder, _Decoder, _StreamReader, _StreamWriter]): + @property + def encode(self) -> _Encoder: ... + @property + def decode(self) -> _Decoder: ... + @property + def streamreader(self) -> _StreamReader: ... + @property + def streamwriter(self) -> _StreamWriter: ... + @property + def incrementalencoder(self) -> _IncrementalEncoder: ... + @property + def incrementaldecoder(self) -> _IncrementalDecoder: ... + name: str + def __init__( + self, + encode: _Encoder, + decode: _Decoder, + streamreader: _StreamReader = ..., + streamwriter: _StreamWriter = ..., + incrementalencoder: _IncrementalEncoder = ..., + incrementaldecoder: _IncrementalDecoder = ..., + name: str = ..., + ) -> None: ... + +def getencoder(encoding: str) -> _Encoder: ... +def getdecoder(encoding: str) -> _Decoder: ... +def getincrementalencoder(encoding: str) -> _IncrementalEncoder: ... +def getincrementaldecoder(encoding: str) -> _IncrementalDecoder: ... +def getreader(encoding: str) -> _StreamReader: ... +def getwriter(encoding: str) -> _StreamWriter: ... +def register(search_function: Callable[[str], CodecInfo]) -> None: ... +def open(filename: str, mode: str = ..., encoding: str = ..., errors: str = ..., buffering: int = ...) -> StreamReaderWriter: ... +def EncodedFile(file: IO[_Encoded], data_encoding: str, file_encoding: str = ..., errors: str = ...) -> StreamRecoder: ... +def iterencode(iterator: Iterable[_Decoded], encoding: str, errors: str = ...) -> Generator[_Encoded, None, None]: ... +def iterdecode(iterator: Iterable[_Encoded], encoding: str, errors: str = ...) -> Generator[_Decoded, None, None]: ... + +BOM: bytes +BOM_BE: bytes +BOM_LE: bytes +BOM_UTF8: bytes +BOM_UTF16: bytes +BOM_UTF16_BE: bytes +BOM_UTF16_LE: bytes +BOM_UTF32: bytes +BOM_UTF32_BE: bytes +BOM_UTF32_LE: bytes + +# It is expected that different actions be taken depending on which of the +# three subclasses of `UnicodeError` is actually ...ed. However, the Union +# is still needed for at least one of the cases. +def register_error(name: str, error_handler: Callable[[UnicodeError], Tuple[Union[str, bytes], int]]) -> None: ... +def lookup_error(name: str) -> Callable[[UnicodeError], Tuple[Union[str, bytes], int]]: ... +def strict_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def replace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def ignore_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def xmlcharrefreplace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... +def backslashreplace_errors(exception: UnicodeError) -> Tuple[Union[str, bytes], int]: ... + +class Codec: + # These are sort of @abstractmethod but sort of not. + # The StreamReader and StreamWriter subclasses only implement one. + def encode(self, input: _Decoded, errors: str = ...) -> Tuple[_Encoded, int]: ... + def decode(self, input: _Encoded, errors: str = ...) -> Tuple[_Decoded, int]: ... + +class IncrementalEncoder: + errors: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def encode(self, object: _Decoded, final: bool = ...) -> _Encoded: ... + def reset(self) -> None: ... + # documentation says int but str is needed for the subclass. + def getstate(self) -> Union[int, _Decoded]: ... + def setstate(self, state: Union[int, _Decoded]) -> None: ... + +class IncrementalDecoder: + errors: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def decode(self, object: _Encoded, final: bool = ...) -> _Decoded: ... + def reset(self) -> None: ... + def getstate(self) -> Tuple[_Encoded, int]: ... + def setstate(self, state: Tuple[_Encoded, int]) -> None: ... + +# These are not documented but used in encodings/*.py implementations. +class BufferedIncrementalEncoder(IncrementalEncoder): + buffer: str + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def _buffer_encode(self, input: _Decoded, errors: str, final: bool) -> _Encoded: ... + def encode(self, input: _Decoded, final: bool = ...) -> _Encoded: ... + +class BufferedIncrementalDecoder(IncrementalDecoder): + buffer: bytes + def __init__(self, errors: str = ...) -> None: ... + @abstractmethod + def _buffer_decode(self, input: _Encoded, errors: str, final: bool) -> Tuple[_Decoded, int]: ... + def decode(self, object: _Encoded, final: bool = ...) -> _Decoded: ... + +_SW = TypeVar("_SW", bound=StreamWriter) + +# TODO: it is not possible to specify the requirement that all other +# attributes and methods are passed-through from the stream. +class StreamWriter(Codec): + errors: str + def __init__(self, stream: IO[_Encoded], errors: str = ...) -> None: ... + def write(self, obj: _Decoded) -> None: ... + def writelines(self, list: Iterable[_Decoded]) -> None: ... + def reset(self) -> None: ... + def __enter__(self: _SW) -> _SW: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +_SR = TypeVar("_SR", bound=StreamReader) + +class StreamReader(Codec): + errors: str + def __init__(self, stream: IO[_Encoded], errors: str = ...) -> None: ... + def read(self, size: int = ..., chars: int = ..., firstline: bool = ...) -> _Decoded: ... + def readline(self, size: int = ..., keepends: bool = ...) -> _Decoded: ... + def readlines(self, sizehint: int = ..., keepends: bool = ...) -> List[_Decoded]: ... + def reset(self) -> None: ... + def __enter__(self: _SR) -> _SR: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> None: ... + def __iter__(self) -> Iterator[_Decoded]: ... + def __getattr__(self, name: str) -> Any: ... + +_T = TypeVar("_T", bound=StreamReaderWriter) + +# Doesn't actually inherit from TextIO, but wraps a BinaryIO to provide text reading and writing +# and delegates attributes to the underlying binary stream with __getattr__. +class StreamReaderWriter(TextIO): + def __init__(self, stream: IO[_Encoded], Reader: _StreamReader, Writer: _StreamWriter, errors: str = ...) -> None: ... + def read(self, size: int = ...) -> _Decoded: ... + def readline(self, size: Optional[int] = ...) -> _Decoded: ... + def readlines(self, sizehint: Optional[int] = ...) -> List[_Decoded]: ... + if sys.version_info >= (3,): + def __next__(self) -> Text: ... + else: + def next(self) -> Text: ... + def __iter__(self: _T) -> _T: ... + # This actually returns None, but that's incompatible with the supertype + def write(self, data: _Decoded) -> int: ... + def writelines(self, list: Iterable[_Decoded]) -> None: ... + def reset(self) -> None: ... + # Same as write() + def seek(self, offset: int, whence: int = ...) -> int: ... + def __enter__(self: _T) -> _T: ... + def __exit__( + self, typ: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> bool: ... + def __getattr__(self, name: str) -> Any: ... + # These methods don't actually exist directly, but they are needed to satisfy the TextIO + # interface. At runtime, they are delegated through __getattr__. + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def writable(self) -> bool: ... + +_SRT = TypeVar("_SRT", bound=StreamRecoder) + +class StreamRecoder(BinaryIO): + def __init__( + self, + stream: IO[_Encoded], + encode: _Encoder, + decode: _Decoder, + Reader: _StreamReader, + Writer: _StreamWriter, + errors: str = ..., + ) -> None: ... + def read(self, size: int = ...) -> bytes: ... + def readline(self, size: Optional[int] = ...) -> bytes: ... + def readlines(self, sizehint: Optional[int] = ...) -> List[bytes]: ... + if sys.version_info >= (3,): + def __next__(self) -> bytes: ... + else: + def next(self) -> bytes: ... + def __iter__(self: _SRT) -> _SRT: ... + def write(self, data: bytes) -> int: ... + def writelines(self, list: Iterable[bytes]) -> int: ... # type: ignore # it's supposed to return None + def reset(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __enter__(self: _SRT) -> _SRT: ... + def __exit__( + self, type: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] + ) -> bool: ... + # These methods don't actually exist directly, but they are needed to satisfy the BinaryIO + # interface. At runtime, they are delegated through __getattr__. + def seek(self, offset: int, whence: int = ...) -> int: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def writable(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi new file mode 100644 index 0000000..0e1129e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/codeop.pyi @@ -0,0 +1,17 @@ +# Source(py2): https://hg.python.org/cpython/file/2.7/Lib/codeop.py +# Source(py3): https://github.com/python/cpython/blob/master/Lib/codeop.py + +from types import CodeType +from typing import Optional + +def compile_command(source: str, filename: str = ..., symbol: str = ...) -> Optional[CodeType]: ... + +class Compile: + flags: int + def __init__(self) -> None: ... + def __call__(self, source: str, filename: str, symbol: str) -> CodeType: ... + +class CommandCompiler: + compiler: Compile + def __init__(self) -> None: ... + def __call__(self, source: str, filename: str = ..., symbol: str = ...) -> Optional[CodeType]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi new file mode 100644 index 0000000..c8b5591 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/colorsys.pyi @@ -0,0 +1,15 @@ +# Stubs for colorsys + +from typing import Tuple + +def rgb_to_yiq(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def yiq_to_rgb(y: float, i: float, q: float) -> Tuple[float, float, float]: ... +def rgb_to_hls(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def hls_to_rgb(h: float, l: float, s: float) -> Tuple[float, float, float]: ... +def rgb_to_hsv(r: float, g: float, b: float) -> Tuple[float, float, float]: ... +def hsv_to_rgb(h: float, s: float, v: float) -> Tuple[float, float, float]: ... + +# TODO undocumented +ONE_SIXTH: float +ONE_THIRD: float +TWO_THIRD: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi new file mode 100644 index 0000000..dec1b41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/contextlib.pyi @@ -0,0 +1,99 @@ +# Stubs for contextlib + +from typing import ( + Any, Callable, Generator, IO, Iterable, Iterator, Optional, Type, + Generic, TypeVar, overload +) +from types import TracebackType +import sys +# Aliased here for backwards compatibility; TODO eventually remove this +from typing import ContextManager as ContextManager + +if sys.version_info >= (3, 5): + from typing import AsyncContextManager, AsyncIterator + +if sys.version_info >= (3, 6): + from typing import ContextManager as AbstractContextManager +if sys.version_info >= (3, 7): + from typing import AsyncContextManager as AbstractAsyncContextManager + +_T = TypeVar('_T') + +_ExitFunc = Callable[[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]], bool] +_CM_EF = TypeVar('_CM_EF', ContextManager, _ExitFunc) + +if sys.version_info >= (3, 2): + class GeneratorContextManager(ContextManager[_T], Generic[_T]): + def __call__(self, func: Callable[..., _T]) -> Callable[..., _T]: ... + def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., GeneratorContextManager[_T]]: ... +else: + def contextmanager(func: Callable[..., Iterator[_T]]) -> Callable[..., ContextManager[_T]]: ... + +if sys.version_info >= (3, 7): + def asynccontextmanager(func: Callable[..., AsyncIterator[_T]]) -> Callable[..., AsyncContextManager[_T]]: ... + +if sys.version_info < (3,): + def nested(*mgr: ContextManager[Any]) -> ContextManager[Iterable[Any]]: ... + +class closing(ContextManager[_T], Generic[_T]): + def __init__(self, thing: _T) -> None: ... + +if sys.version_info >= (3, 4): + class suppress(ContextManager[None]): + def __init__(self, *exceptions: Type[BaseException]) -> None: ... + + class redirect_stdout(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3, 5): + class redirect_stderr(ContextManager[None]): + def __init__(self, new_target: IO[str]) -> None: ... + +if sys.version_info >= (3,): + class ContextDecorator: + def __call__(self, func: Callable[..., None]) -> Callable[..., ContextManager[None]]: ... + + _U = TypeVar('_U', bound='ExitStack') + + class ExitStack(ContextManager[ExitStack]): + def __init__(self) -> None: ... + def enter_context(self, cm: ContextManager[_T]) -> _T: ... + def push(self, exit: _CM_EF) -> _CM_EF: ... + def callback(self, callback: Callable[..., Any], + *args: Any, **kwds: Any) -> Callable[..., Any]: ... + def pop_all(self: _U) -> _U: ... + def close(self) -> None: ... + def __enter__(self: _U) -> _U: ... + +if sys.version_info >= (3, 7): + from typing import Awaitable + + _S = TypeVar('_S', bound='AsyncExitStack') + + _ExitCoroFunc = Callable[[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]], Awaitable[bool]] + _CallbackCoroFunc = Callable[..., Awaitable[Any]] + _ACM_EF = TypeVar('_ACM_EF', AsyncContextManager, _ExitCoroFunc) + + class AsyncExitStack(AsyncContextManager[AsyncExitStack]): + def __init__(self) -> None: ... + def enter_context(self, cm: ContextManager[_T]) -> _T: ... + def enter_async_context(self, cm: AsyncContextManager[_T]) -> Awaitable[_T]: ... + def push(self, exit: _CM_EF) -> _CM_EF: ... + def push_async_exit(self, exit: _ACM_EF) -> _ACM_EF: ... + def callback(self, callback: Callable[..., Any], + *args: Any, **kwds: Any) -> Callable[..., Any]: ... + def push_async_callback(self, callback: _CallbackCoroFunc, + *args: Any, **kwds: Any) -> _CallbackCoroFunc: ... + def pop_all(self: _S) -> _S: ... + def aclose(self) -> Awaitable[None]: ... + def __aenter__(self: _S) -> Awaitable[_S]: ... + +if sys.version_info >= (3, 7): + @overload + def nullcontext(enter_result: _T) -> ContextManager[_T]: ... + @overload + def nullcontext() -> ContextManager[None]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/copy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/copy.pyi new file mode 100644 index 0000000..523802a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/copy.pyi @@ -0,0 +1,14 @@ +# Stubs for copy + +from typing import TypeVar, Optional, Dict, Any + +_T = TypeVar('_T') + +# None in CPython but non-None in Jython +PyStringMap: Any + +# Note: memo and _nil are internal kwargs. +def deepcopy(x: _T, memo: Optional[Dict[int, _T]] = ..., _nil: Any = ...) -> _T: ... +def copy(x: _T) -> _T: ... +class Error(Exception): ... +error = Error diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi new file mode 100644 index 0000000..d55fc26 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/crypt.pyi @@ -0,0 +1,23 @@ +import sys +from typing import List, NamedTuple, Optional, Union + + +if sys.version_info >= (3, 3): + class _Method: ... + + METHOD_CRYPT: _Method + METHOD_MD5: _Method + METHOD_SHA256: _Method + METHOD_SHA512: _Method + if sys.version_info >= (3, 7): + METHOD_BLOWFISH: _Method + + methods: List[_Method] + + if sys.version_info >= (3, 7): + def mksalt(method: Optional[_Method] = ..., *, rounds: Optional[int] = ...) -> str: ... + else: + def mksalt(method: Optional[_Method] = ...) -> str: ... + def crypt(word: str, salt: Optional[Union[str, _Method]] = ...) -> str: ... +else: + def crypt(word: str, salt: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/csv.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/csv.pyi new file mode 100644 index 0000000..0a04951 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/csv.pyi @@ -0,0 +1,93 @@ +from collections import OrderedDict +import sys +from typing import Any, Dict, Iterable, Iterator, List, Mapping, Optional, Sequence, Union + +from _csv import (_reader, + _writer, + reader as reader, + writer as writer, + register_dialect as register_dialect, + unregister_dialect as unregister_dialect, + get_dialect as get_dialect, + list_dialects as list_dialects, + field_size_limit as field_size_limit, + QUOTE_ALL as QUOTE_ALL, + QUOTE_MINIMAL as QUOTE_MINIMAL, + QUOTE_NONE as QUOTE_NONE, + QUOTE_NONNUMERIC as QUOTE_NONNUMERIC, + Error as Error, + ) + +_Dialect = Union[str, Dialect] +_DictRow = Mapping[str, Any] + +class Dialect(object): + delimiter: str + quotechar: Optional[str] + escapechar: Optional[str] + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + def __init__(self) -> None: ... + +class excel(Dialect): + delimiter: str + quotechar: str + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + +class excel_tab(excel): + delimiter: str + +if sys.version_info >= (3,): + class unix_dialect(Dialect): + delimiter: str + quotechar: str + doublequote: bool + skipinitialspace: bool + lineterminator: str + quoting: int + +if sys.version_info >= (3, 6): + _DRMapping = OrderedDict[str, str] +else: + _DRMapping = Dict[str, str] + + +class DictReader(Iterator[_DRMapping]): + restkey: Optional[str] + restval: Optional[str] + reader: _reader + dialect: _Dialect + line_num: int + fieldnames: Sequence[str] + def __init__(self, f: Iterable[str], fieldnames: Sequence[str] = ..., + restkey: Optional[str] = ..., restval: Optional[str] = ..., dialect: _Dialect = ..., + *args: Any, **kwds: Any) -> None: ... + def __iter__(self) -> DictReader: ... + if sys.version_info >= (3,): + def __next__(self) -> _DRMapping: ... + else: + def next(self) -> _DRMapping: ... + + +class DictWriter(object): + fieldnames: Sequence[str] + restval: Optional[Any] + extrasaction: str + writer: _writer + def __init__(self, f: Any, fieldnames: Sequence[str], + restval: Optional[Any] = ..., extrasaction: str = ..., dialect: _Dialect = ..., + *args: Any, **kwds: Any) -> None: ... + def writeheader(self) -> None: ... + def writerow(self, rowdict: _DictRow) -> None: ... + def writerows(self, rowdicts: Iterable[_DictRow]) -> None: ... + +class Sniffer(object): + preferred: List[str] + def __init__(self) -> None: ... + def sniff(self, sample: str, delimiters: Optional[str] = ...) -> Dialect: ... + def has_header(self, sample: str) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi new file mode 100644 index 0000000..e4cd6b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/__init__.pyi @@ -0,0 +1,285 @@ +# Stubs for ctypes + +from array import array +from typing import ( + Any, Callable, ClassVar, Iterator, Iterable, List, Mapping, Optional, Sequence, Sized, Text, + Tuple, Type, Generic, TypeVar, overload, +) +from typing import Union as _UnionT +import sys + +_T = TypeVar('_T') +_DLLT = TypeVar('_DLLT', bound=CDLL) +_CT = TypeVar('_CT', bound=_CData) + + +RTLD_GLOBAL: int = ... +RTLD_LOCAL: int = ... +DEFAULT_MODE: int = ... + + +class CDLL(object): + _func_flags_: ClassVar[int] = ... + _func_restype_: ClassVar[_CData] = ... + _name: str = ... + _handle: int = ... + _FuncPtr: Type[_FuncPointer] = ... + def __init__(self, name: str, mode: int = ..., handle: Optional[int] = ..., + use_errno: bool = ..., use_last_error: bool = ...) -> None: ... + def __getattr__(self, name: str) -> _FuncPointer: ... + def __getitem__(self, name: str) -> _FuncPointer: ... +if sys.platform == 'win32': + class OleDLL(CDLL): ... + class WinDLL(CDLL): ... +class PyDLL(CDLL): ... + +class LibraryLoader(Generic[_DLLT]): + def __init__(self, dlltype: Type[_DLLT]) -> None: ... + def __getattr__(self, name: str) -> _DLLT: ... + def __getitem__(self, name: str) -> _DLLT: ... + def LoadLibrary(self, name: str) -> _DLLT: ... + +cdll: LibraryLoader[CDLL] = ... +if sys.platform == 'win32': + windll: LibraryLoader[WinDLL] = ... + oledll: LibraryLoader[OleDLL] = ... +pydll: LibraryLoader[PyDLL] = ... +pythonapi: PyDLL = ... + +# Anything that implements the read-write buffer interface. +# The buffer interface is defined purely on the C level, so we cannot define a normal Protocol +# for it. Instead we have to list the most common stdlib buffer classes in a Union. +_WritableBuffer = _UnionT[bytearray, memoryview, array, _CData] +# Same as _WritableBuffer, but also includes read-only buffer types (like bytes). +_ReadOnlyBuffer = _UnionT[_WritableBuffer, bytes] + +class _CDataMeta(type): + # By default mypy complains about the following two methods, because strictly speaking cls + # might not be a Type[_CT]. However this can never actually happen, because the only class that + # uses _CDataMeta as its metaclass is _CData. So it's safe to ignore the errors here. + def __mul__(cls: Type[_CT], other: int) -> Type[Array[_CT]]: ... # type: ignore + def __rmul__(cls: Type[_CT], other: int) -> Type[Array[_CT]]: ... # type: ignore +class _CData(metaclass=_CDataMeta): + _b_base: int = ... + _b_needsfree_: bool = ... + _objects: Optional[Mapping[Any, int]] = ... + @classmethod + def from_buffer(cls: Type[_CT], source: _WritableBuffer, offset: int = ...) -> _CT: ... + @classmethod + def from_buffer_copy(cls: Type[_CT], source: _ReadOnlyBuffer, offset: int = ...) -> _CT: ... + @classmethod + def from_address(cls: Type[_CT], address: int) -> _CT: ... + @classmethod + def from_param(cls: Type[_CT], obj: Any) -> _UnionT[_CT, _CArgObject]: ... + @classmethod + def in_dll(cls: Type[_CT], library: CDLL, name: str) -> _CT: ... + +class _PointerLike(_CData): ... + +_ECT = Callable[[Optional[Type[_CData]], + _FuncPointer, + Tuple[_CData, ...]], + _CData] +_PF = _UnionT[ + Tuple[int], + Tuple[int, str], + Tuple[int, str, Any] +] +class _FuncPointer(_PointerLike, _CData): + restype: _UnionT[Type[_CData], Callable[[int], None], None] = ... + argtypes: Sequence[Type[_CData]] = ... + errcheck: _ECT = ... + @overload + def __init__(self, address: int) -> None: ... + @overload + def __init__(self, callable: Callable[..., Any]) -> None: ... + @overload + def __init__(self, func_spec: Tuple[_UnionT[str, int], CDLL], + paramflags: Tuple[_PF, ...] = ...) -> None: ... + @overload + def __init__(self, vtlb_index: int, name: str, + paramflags: Tuple[_PF, ...] = ..., + iid: pointer[c_int] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + +class ArgumentError(Exception): ... + + +def CFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData], + use_errno: bool = ..., + use_last_error: bool = ...) -> Type[_FuncPointer]: ... +if sys.platform == 'win32': + def WINFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData], + use_errno: bool = ..., + use_last_error: bool = ...) -> Type[_FuncPointer]: ... +def PYFUNCTYPE(restype: Optional[Type[_CData]], + *argtypes: Type[_CData]) -> Type[_FuncPointer]: ... + +class _CArgObject: ... + +# Any type that can be implicitly converted to c_void_p when passed as a C function argument. +# (bytes is not included here, see below.) +_CVoidPLike = _UnionT[_PointerLike, Array[Any], _CArgObject, int] +# Same as above, but including types known to be read-only (i. e. bytes). +# This distinction is not strictly necessary (ctypes doesn't differentiate between const +# and non-const pointers), but it catches errors like memmove(b'foo', buf, 4) +# when memmove(buf, b'foo', 4) was intended. +_CVoidConstPLike = _UnionT[_CVoidPLike, bytes] + +def addressof(obj: _CData) -> int: ... +def alignment(obj_or_type: _UnionT[_CData, Type[_CData]]) -> int: ... +def byref(obj: _CData, offset: int = ...) -> _CArgObject: ... +_PT = TypeVar('_PT', bound=_PointerLike) +def cast(obj: _UnionT[_CData, _CArgObject], type: Type[_PT]) -> _PT: ... +def create_string_buffer(init_or_size: _UnionT[int, bytes], + size: Optional[int] = ...) -> Array[c_char]: ... +c_buffer = create_string_buffer +def create_unicode_buffer(init_or_size: _UnionT[int, Text], + size: Optional[int] = ...) -> Array[c_wchar]: ... +if sys.platform == 'win32': + def DllCanUnloadNow() -> int: ... + def DllGetClassObject(rclsid: Any, riid: Any, ppv: Any) -> int: ... # TODO not documented + def FormatError(code: int) -> str: ... + def GetLastError() -> int: ... +def get_errno() -> int: ... +if sys.platform == 'win32': + def get_last_error() -> int: ... +def memmove(dst: _CVoidPLike, src: _CVoidConstPLike, count: int) -> None: ... +def memset(dst: _CVoidPLike, c: int, count: int) -> None: ... +def POINTER(type: Type[_CT]) -> Type[pointer[_CT]]: ... + +# The real ctypes.pointer is a function, not a class. The stub version of pointer behaves like +# ctypes._Pointer in that it is the base class for all pointer types. Unlike the real _Pointer, +# it can be instantiated directly (to mimic the behavior of the real pointer function). +class pointer(Generic[_CT], _PointerLike, _CData): + _type_: ClassVar[Type[_CT]] = ... + contents: _CT = ... + def __init__(self, arg: _CT = ...) -> None: ... + @overload + def __getitem__(self, i: int) -> _CT: ... + @overload + def __getitem__(self, s: slice) -> List[_CT]: ... + @overload + def __setitem__(self, i: int, o: _CT) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_CT]) -> None: ... + +def resize(obj: _CData, size: int) -> None: ... +if sys.version_info < (3,): + def set_conversion_mode(encoding: str, errors: str) -> Tuple[str, str]: ... +def set_errno(value: int) -> int: ... +if sys.platform == 'win32': + def set_last_error(value: int) -> int: ... +def sizeof(obj_or_type: _UnionT[_CData, Type[_CData]]) -> int: ... +def string_at(address: _CVoidConstPLike, size: int = ...) -> bytes: ... +if sys.platform == 'win32': + def WinError(code: Optional[int] = ..., + desc: Optional[str] = ...) -> WindowsError: ... +def wstring_at(address: _CVoidConstPLike, size: int = ...) -> str: ... + +class _SimpleCData(Generic[_T], _CData): + value: _T = ... + def __init__(self, value: _T = ...) -> None: ... + +class c_byte(_SimpleCData[int]): ... + +class c_char(_SimpleCData[bytes]): + def __init__(self, value: _UnionT[int, bytes] = ...) -> None: ... +class c_char_p(_PointerLike, _SimpleCData[Optional[bytes]]): + def __init__(self, value: Optional[_UnionT[int, bytes]] = ...) -> None: ... + +class c_double(_SimpleCData[float]): ... +class c_longdouble(_SimpleCData[float]): ... +class c_float(_SimpleCData[float]): ... + +class c_int(_SimpleCData[int]): ... +class c_int8(_SimpleCData[int]): ... +class c_int16(_SimpleCData[int]): ... +class c_int32(_SimpleCData[int]): ... +class c_int64(_SimpleCData[int]): ... + +class c_long(_SimpleCData[int]): ... +class c_longlong(_SimpleCData[int]): ... + +class c_short(_SimpleCData[int]): ... + +class c_size_t(_SimpleCData[int]): ... +class c_ssize_t(_SimpleCData[int]): ... + +class c_ubyte(_SimpleCData[int]): ... + +class c_uint(_SimpleCData[int]): ... +class c_uint8(_SimpleCData[int]): ... +class c_uint16(_SimpleCData[int]): ... +class c_uint32(_SimpleCData[int]): ... +class c_uint64(_SimpleCData[int]): ... + +class c_ulong(_SimpleCData[int]): ... +class c_ulonglong(_SimpleCData[int]): ... + +class c_ushort(_SimpleCData[int]): ... + +class c_void_p(_PointerLike, _SimpleCData[Optional[int]]): ... + +class c_wchar(_SimpleCData[Text]): ... +class c_wchar_p(_PointerLike, _SimpleCData[Optional[Text]]): + def __init__(self, value: Optional[_UnionT[int, Text]] = ...) -> None: ... + +class c_bool(_SimpleCData[bool]): + def __init__(self, value: bool) -> None: ... + +if sys.platform == 'win32': + class HRESULT(_SimpleCData[int]): ... # TODO undocumented + +class py_object(_SimpleCData[_T]): ... + +class _CField: + offset: int = ... + size: int = ... +class _StructUnionMeta(_CDataMeta): + _fields_: Sequence[_UnionT[Tuple[str, Type[_CData]], Tuple[str, Type[_CData], int]]] = ... + _pack_: int = ... + _anonymous_: Sequence[str] = ... + def __getattr__(self, name: str) -> _CField: ... +class _StructUnionBase(_CData, metaclass=_StructUnionMeta): + def __init__(self, *args: Any, **kw: Any) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + +class Union(_StructUnionBase): ... +class Structure(_StructUnionBase): ... +class BigEndianStructure(Structure): ... +class LittleEndianStructure(Structure): ... + +class Array(Generic[_CT], _CData): + _length_: ClassVar[int] = ... + _type_: ClassVar[Type[_CT]] = ... + raw: bytes = ... # Note: only available if _CT == c_char + value: Any = ... # Note: bytes if _CT == c_char, Text if _CT == c_wchar, unavailable otherwise + # TODO These methods cannot be annotated correctly at the moment. + # All of these "Any"s stand for the array's element type, but it's not possible to use _CT + # here, because of a special feature of ctypes. + # By default, when accessing an element of an Array[_CT], the returned object has type _CT. + # However, when _CT is a "simple type" like c_int, ctypes automatically "unboxes" the object + # and converts it to the corresponding Python primitive. For example, when accessing an element + # of an Array[c_int], a Python int object is returned, not a c_int. + # This behavior does *not* apply to subclasses of "simple types". + # If MyInt is a subclass of c_int, then accessing an element of an Array[MyInt] returns + # a MyInt, not an int. + # This special behavior is not easy to model in a stub, so for now all places where + # the array element type would belong are annotated with Any instead. + def __init__(self, *args: Any) -> None: ... + @overload + def __getitem__(self, i: int) -> Any: ... + @overload + def __getitem__(self, s: slice) -> List[Any]: ... + @overload + def __setitem__(self, i: int, o: Any) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[Any]) -> None: ... + def __iter__(self) -> Iterator[Any]: ... + # Can't inherit from Sized because the metaclass conflict between + # Sized and _CData prevents using _CDataMeta. + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi new file mode 100644 index 0000000..7077d9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/util.pyi @@ -0,0 +1,8 @@ +# Stubs for ctypes.util + +from typing import Optional +import sys + +def find_library(name: str) -> Optional[str]: ... +if sys.platform == 'win32': + def find_msvcrt() -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi new file mode 100644 index 0000000..c5a6226 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ctypes/wintypes.pyi @@ -0,0 +1,209 @@ +from ctypes import ( + _SimpleCData, Array, Structure, c_byte, c_char, c_char_p, c_double, c_float, c_int, c_long, + c_longlong, c_short, c_uint, c_ulong, c_ulonglong, c_ushort, c_void_p, c_wchar, c_wchar_p, + pointer, +) + +BYTE = c_byte +WORD = c_ushort +DWORD = c_ulong +CHAR = c_char +WCHAR = c_wchar +UINT = c_uint +INT = c_int +DOUBLE = c_double +FLOAT = c_float +BOOLEAN = BYTE +BOOL = c_long +class VARIANT_BOOL(_SimpleCData[bool]): ... +ULONG = c_ulong +LONG = c_long +USHORT = c_ushort +SHORT = c_short +LARGE_INTEGER = c_longlong +_LARGE_INTEGER = c_longlong +ULARGE_INTEGER = c_ulonglong +_ULARGE_INTEGER = c_ulonglong + +OLESTR = c_wchar_p +LPOLESTR = c_wchar_p +LPCOLESTR = c_wchar_p +LPWSTR = c_wchar_p +LPCWSTR = c_wchar_p +LPSTR = c_char_p +LPCSTR = c_char_p +LPVOID = c_void_p +LPCVOID = c_void_p + +# These two types are pointer-sized unsigned and signed ints, respectively. +# At runtime, they are either c_[u]long or c_[u]longlong, depending on the host's pointer size +# (they are not really separate classes). +class WPARAM(_SimpleCData[int]): ... +class LPARAM(_SimpleCData[int]): ... + +ATOM = WORD +LANGID = WORD +COLORREF = DWORD +LGRPID = DWORD +LCTYPE = DWORD +LCID = DWORD + +HANDLE = c_void_p +HACCEL = HANDLE +HBITMAP = HANDLE +HBRUSH = HANDLE +HCOLORSPACE = HANDLE +HDC = HANDLE +HDESK = HANDLE +HDWP = HANDLE +HENHMETAFILE = HANDLE +HFONT = HANDLE +HGDIOBJ = HANDLE +HGLOBAL = HANDLE +HHOOK = HANDLE +HICON = HANDLE +HINSTANCE = HANDLE +HKEY = HANDLE +HKL = HANDLE +HLOCAL = HANDLE +HMENU = HANDLE +HMETAFILE = HANDLE +HMODULE = HANDLE +HMONITOR = HANDLE +HPALETTE = HANDLE +HPEN = HANDLE +HRGN = HANDLE +HRSRC = HANDLE +HSTR = HANDLE +HTASK = HANDLE +HWINSTA = HANDLE +HWND = HANDLE +SC_HANDLE = HANDLE +SERVICE_STATUS_HANDLE = HANDLE + +class RECT(Structure): + left: LONG + top: LONG + right: LONG + bottom: LONG +RECTL = RECT +_RECTL = RECT +tagRECT = RECT + +class _SMALL_RECT(Structure): + Left: SHORT + Top: SHORT + Right: SHORT + Bottom: SHORT +SMALL_RECT = _SMALL_RECT + +class _COORD(Structure): + X: SHORT + Y: SHORT + +class POINT(Structure): + x: LONG + y: LONG +POINTL = POINT +_POINTL = POINT +tagPOINT = POINT + +class SIZE(Structure): + cx: LONG + cy: LONG +SIZEL = SIZE +tagSIZE = SIZE + +def RGB(red: int, green: int, blue: int) -> int: ... + +class FILETIME(Structure): + dwLowDateTime: DWORD + dwHighDateTime: DWORD +_FILETIME = FILETIME + +class MSG(Structure): + hWnd: HWND + message: UINT + wParam: WPARAM + lParam: LPARAM + time: DWORD + pt: POINT +tagMSG = MSG +MAX_PATH: int + +class WIN32_FIND_DATAA(Structure): + dwFileAttributes: DWORD + ftCreationTime: FILETIME + ftLastAccessTime: FILETIME + ftLastWriteTime: FILETIME + nFileSizeHigh: DWORD + nFileSizeLow: DWORD + dwReserved0: DWORD + dwReserved1: DWORD + cFileName: Array[CHAR] + cAlternateFileName: Array[CHAR] + +class WIN32_FIND_DATAW(Structure): + dwFileAttributes: DWORD + ftCreationTime: FILETIME + ftLastAccessTime: FILETIME + ftLastWriteTime: FILETIME + nFileSizeHigh: DWORD + nFileSizeLow: DWORD + dwReserved0: DWORD + dwReserved1: DWORD + cFileName: Array[WCHAR] + cAlternateFileName: Array[WCHAR] + +# These pointer type definitions use pointer[...] instead of POINTER(...), to allow them +# to be used in type annotations. +PBOOL = pointer[BOOL] +LPBOOL = pointer[BOOL] +PBOOLEAN = pointer[BOOLEAN] +PBYTE = pointer[BYTE] +LPBYTE = pointer[BYTE] +PCHAR = pointer[CHAR] +LPCOLORREF = pointer[COLORREF] +PDWORD = pointer[DWORD] +LPDWORD = pointer[DWORD] +PFILETIME = pointer[FILETIME] +LPFILETIME = pointer[FILETIME] +PFLOAT = pointer[FLOAT] +PHANDLE = pointer[HANDLE] +LPHANDLE = pointer[HANDLE] +PHKEY = pointer[HKEY] +LPHKL = pointer[HKL] +PINT = pointer[INT] +LPINT = pointer[INT] +PLARGE_INTEGER = pointer[LARGE_INTEGER] +PLCID = pointer[LCID] +PLONG = pointer[LONG] +LPLONG = pointer[LONG] +PMSG = pointer[MSG] +LPMSG = pointer[MSG] +PPOINT = pointer[POINT] +LPPOINT = pointer[POINT] +PPOINTL = pointer[POINTL] +PRECT = pointer[RECT] +LPRECT = pointer[RECT] +PRECTL = pointer[RECTL] +LPRECTL = pointer[RECTL] +LPSC_HANDLE = pointer[SC_HANDLE] +PSHORT = pointer[SHORT] +PSIZE = pointer[SIZE] +LPSIZE = pointer[SIZE] +PSIZEL = pointer[SIZEL] +LPSIZEL = pointer[SIZEL] +PSMALL_RECT = pointer[SMALL_RECT] +PUINT = pointer[UINT] +LPUINT = pointer[UINT] +PULARGE_INTEGER = pointer[ULARGE_INTEGER] +PULONG = pointer[ULONG] +PUSHORT = pointer[USHORT] +PWCHAR = pointer[WCHAR] +PWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA] +LPWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA] +PWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW] +LPWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW] +PWORD = pointer[WORD] +LPWORD = pointer[WORD] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi new file mode 100644 index 0000000..ccc92ba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/datetime.pyi @@ -0,0 +1,290 @@ +import sys +from time import struct_time +from typing import ( + AnyStr, Optional, SupportsAbs, Tuple, Union, overload, + ClassVar, +) + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +MINYEAR: int +MAXYEAR: int + +class tzinfo: + def tzname(self, dt: Optional[datetime]) -> Optional[str]: ... + def utcoffset(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def fromutc(self, dt: datetime) -> datetime: ... + +if sys.version_info >= (3, 2): + class timezone(tzinfo): + utc: ClassVar[timezone] + min: ClassVar[timezone] + max: ClassVar[timezone] + + def __init__(self, offset: timedelta, name: str = ...) -> None: ... + def __hash__(self) -> int: ... + +_tzinfo = tzinfo + +class date: + min: ClassVar[date] + max: ClassVar[date] + resolution: ClassVar[timedelta] + + def __init__(self, year: int, month: int, day: int) -> None: ... + + @classmethod + def fromtimestamp(cls, t: float) -> date: ... + @classmethod + def today(cls) -> date: ... + @classmethod + def fromordinal(cls, n: int) -> date: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, date_string: str) -> date: ... + + @property + def year(self) -> int: ... + @property + def month(self) -> int: ... + @property + def day(self) -> int: ... + + def ctime(self) -> str: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def isoformat(self) -> str: ... + def timetuple(self) -> struct_time: ... + def toordinal(self) -> int: ... + def replace(self, year: int = ..., month: int = ..., day: int = ...) -> date: ... + def __le__(self, other: date) -> bool: ... + def __lt__(self, other: date) -> bool: ... + def __ge__(self, other: date) -> bool: ... + def __gt__(self, other: date) -> bool: ... + def __add__(self, other: timedelta) -> date: ... + @overload + def __sub__(self, other: timedelta) -> date: ... + @overload + def __sub__(self, other: date) -> timedelta: ... + def __hash__(self) -> int: ... + def weekday(self) -> int: ... + def isoweekday(self) -> int: ... + def isocalendar(self) -> Tuple[int, int, int]: ... + +class time: + min: ClassVar[time] + max: ClassVar[time] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, hour: int = ..., minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ...) -> None: ... + + @property + def hour(self) -> int: ... + @property + def minute(self) -> int: ... + @property + def second(self) -> int: ... + @property + def microsecond(self) -> int: ... + @property + def tzinfo(self) -> Optional[_tzinfo]: ... + if sys.version_info >= (3, 6): + @property + def fold(self) -> int: ... + + def __le__(self, other: time) -> bool: ... + def __lt__(self, other: time) -> bool: ... + def __ge__(self, other: time) -> bool: ... + def __gt__(self, other: time) -> bool: ... + def __hash__(self) -> int: ... + def isoformat(self) -> str: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, time_string: str) -> time: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def utcoffset(self) -> Optional[timedelta]: ... + def tzname(self) -> Optional[str]: ... + def dst(self) -> Optional[int]: ... + if sys.version_info >= (3, 6): + def replace(self, hour: int = ..., minute: int = ..., second: int = ..., + microsecond: int = ..., tzinfo: Optional[_tzinfo] = ..., + *, fold: int = ...) -> time: ... + else: + def replace(self, hour: int = ..., minute: int = ..., second: int = ..., + microsecond: int = ..., tzinfo: Optional[_tzinfo] = ...) -> time: ... + +_date = date +_time = time + +class timedelta(SupportsAbs[timedelta]): + min: ClassVar[timedelta] + max: ClassVar[timedelta] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., + milliseconds: float = ..., minutes: float = ..., hours: float = ..., + weeks: float = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ..., + milliseconds: float = ..., minutes: float = ..., hours: float = ..., + weeks: float = ...) -> None: ... + + @property + def days(self) -> int: ... + @property + def seconds(self) -> int: ... + @property + def microseconds(self) -> int: ... + + def total_seconds(self) -> float: ... + def __add__(self, other: timedelta) -> timedelta: ... + def __radd__(self, other: timedelta) -> timedelta: ... + def __sub__(self, other: timedelta) -> timedelta: ... + def __rsub__(self, other: timedelta) -> timedelta: ... + def __neg__(self) -> timedelta: ... + def __pos__(self) -> timedelta: ... + def __abs__(self) -> timedelta: ... + def __mul__(self, other: float) -> timedelta: ... + def __rmul__(self, other: float) -> timedelta: ... + @overload + def __floordiv__(self, other: timedelta) -> int: ... + @overload + def __floordiv__(self, other: int) -> timedelta: ... + if sys.version_info >= (3,): + @overload + def __truediv__(self, other: timedelta) -> float: ... + @overload + def __truediv__(self, other: float) -> timedelta: ... + def __mod__(self, other: timedelta) -> timedelta: ... + def __divmod__(self, other: timedelta) -> Tuple[int, timedelta]: ... + else: + @overload + def __div__(self, other: timedelta) -> float: ... + @overload + def __div__(self, other: float) -> timedelta: ... + def __le__(self, other: timedelta) -> bool: ... + def __lt__(self, other: timedelta) -> bool: ... + def __ge__(self, other: timedelta) -> bool: ... + def __gt__(self, other: timedelta) -> bool: ... + def __hash__(self) -> int: ... + +class datetime(date): + min: ClassVar[datetime] + max: ClassVar[datetime] + resolution: ClassVar[timedelta] + + if sys.version_info >= (3, 6): + def __init__(self, year: int, month: int, day: int, hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ..., *, fold: int = ...) -> None: ... + else: + def __init__(self, year: int, month: int, day: int, hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., + tzinfo: Optional[_tzinfo] = ...) -> None: ... + + @property + def year(self) -> int: ... + @property + def month(self) -> int: ... + @property + def day(self) -> int: ... + @property + def hour(self) -> int: ... + @property + def minute(self) -> int: ... + @property + def second(self) -> int: ... + @property + def microsecond(self) -> int: ... + @property + def tzinfo(self) -> Optional[_tzinfo]: ... + if sys.version_info >= (3, 6): + @property + def fold(self) -> int: ... + + @classmethod + def fromtimestamp(cls, t: float, tz: Optional[_tzinfo] = ...) -> datetime: ... + @classmethod + def utcfromtimestamp(cls, t: float) -> datetime: ... + @classmethod + def today(cls) -> datetime: ... + @classmethod + def fromordinal(cls, n: int) -> datetime: ... + @classmethod + def now(cls, tz: Optional[_tzinfo] = ...) -> datetime: ... + @classmethod + def utcnow(cls) -> datetime: ... + if sys.version_info >= (3, 6): + @classmethod + def combine(cls, date: date, time: time, tzinfo: Optional[_tzinfo] = ...) -> datetime: ... + else: + @classmethod + def combine(cls, date: date, time: time) -> datetime: ... + if sys.version_info >= (3, 7): + @classmethod + def fromisoformat(cls, date_string: str) -> datetime: ... + def strftime(self, fmt: _Text) -> str: ... + if sys.version_info >= (3,): + def __format__(self, fmt: str) -> str: ... + else: + def __format__(self, fmt: AnyStr) -> AnyStr: ... + def toordinal(self) -> int: ... + def timetuple(self) -> struct_time: ... + if sys.version_info >= (3, 3): + def timestamp(self) -> float: ... + def utctimetuple(self) -> struct_time: ... + def date(self) -> _date: ... + def time(self) -> _time: ... + def timetz(self) -> _time: ... + if sys.version_info >= (3, 6): + def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: + Optional[_tzinfo] = ..., *, fold: int = ...) -> datetime: ... + else: + def replace(self, year: int = ..., month: int = ..., day: int = ..., hour: int = ..., + minute: int = ..., second: int = ..., microsecond: int = ..., tzinfo: + Optional[_tzinfo] = ...) -> datetime: ... + if sys.version_info >= (3, 3): + def astimezone(self, tz: Optional[_tzinfo] = ...) -> datetime: ... + else: + def astimezone(self, tz: _tzinfo) -> datetime: ... + def ctime(self) -> str: ... + if sys.version_info >= (3, 6): + def isoformat(self, sep: str = ..., timespec: str = ...) -> str: ... + else: + def isoformat(self, sep: str = ...) -> str: ... + @classmethod + def strptime(cls, date_string: _Text, format: _Text) -> datetime: ... + def utcoffset(self) -> Optional[timedelta]: ... + def tzname(self) -> Optional[str]: ... + def dst(self) -> Optional[timedelta]: ... + def __le__(self, other: datetime) -> bool: ... # type: ignore + def __lt__(self, other: datetime) -> bool: ... # type: ignore + def __ge__(self, other: datetime) -> bool: ... # type: ignore + def __gt__(self, other: datetime) -> bool: ... # type: ignore + def __add__(self, other: timedelta) -> datetime: ... + @overload # type: ignore + def __sub__(self, other: datetime) -> timedelta: ... + @overload + def __sub__(self, other: timedelta) -> datetime: ... + def __hash__(self) -> int: ... + def weekday(self) -> int: ... + def isoweekday(self) -> int: ... + def isocalendar(self) -> Tuple[int, int, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi new file mode 100644 index 0000000..2018ed8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/decimal.pyi @@ -0,0 +1,315 @@ +import numbers +import sys +from types import TracebackType +from typing import ( + Any, Container, Dict, List, NamedTuple, Optional, overload, Sequence, Text, Tuple, Type, TypeVar, Union, +) + +_Decimal = Union[Decimal, int] +_DecimalNew = Union[Decimal, float, Text, Tuple[int, Sequence[int], int]] +if sys.version_info >= (3,): + _ComparableNum = Union[Decimal, float, numbers.Rational] +else: + _ComparableNum = Union[Decimal, float] +_DecimalT = TypeVar('_DecimalT', bound=Decimal) + +DecimalTuple = NamedTuple('DecimalTuple', + [('sign', int), + ('digits', Tuple[int, ...]), + ('exponent', int)]) + +ROUND_DOWN: str +ROUND_HALF_UP: str +ROUND_HALF_EVEN: str +ROUND_CEILING: str +ROUND_FLOOR: str +ROUND_UP: str +ROUND_HALF_DOWN: str +ROUND_05UP: str + +if sys.version_info >= (3,): + HAVE_THREADS: bool + MAX_EMAX: int + MAX_PREC: int + MIN_EMIN: int + MIN_ETINY: int + +class DecimalException(ArithmeticError): + def handle(self, context: Context, *args: Any) -> Optional[Decimal]: ... + +class Clamped(DecimalException): ... + +class InvalidOperation(DecimalException): ... + +class ConversionSyntax(InvalidOperation): ... + +class DivisionByZero(DecimalException, ZeroDivisionError): ... + +class DivisionImpossible(InvalidOperation): ... + +class DivisionUndefined(InvalidOperation, ZeroDivisionError): ... + +class Inexact(DecimalException): ... + +class InvalidContext(InvalidOperation): ... + +class Rounded(DecimalException): ... + +class Subnormal(DecimalException): ... + +class Overflow(Inexact, Rounded): ... + +class Underflow(Inexact, Rounded, Subnormal): ... + +if sys.version_info >= (3,): + class FloatOperation(DecimalException, TypeError): ... + +def setcontext(context: Context) -> None: ... +def getcontext() -> Context: ... +def localcontext(ctx: Optional[Context] = ...) -> _ContextManager: ... + +class Decimal(object): + def __new__(cls: Type[_DecimalT], value: _DecimalNew = ..., context: Optional[Context] = ...) -> _DecimalT: ... + @classmethod + def from_float(cls, f: float) -> Decimal: ... + if sys.version_info >= (3,): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + def __eq__(self, other: object, context: Optional[Context] = ...) -> bool: ... + if sys.version_info < (3,): + def __ne__(self, other: object, context: Optional[Context] = ...) -> bool: ... + def __lt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __le__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __gt__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def __ge__(self, other: _ComparableNum, context: Optional[Context] = ...) -> bool: ... + def compare(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __hash__(self) -> int: ... + def as_tuple(self) -> DecimalTuple: ... + if sys.version_info >= (3,): + def as_integer_ratio(self) -> Tuple[int, int]: ... + def __str__(self, eng: bool = ..., context: Optional[Context] = ...) -> str: ... + def to_eng_string(self, context: Optional[Context] = ...) -> str: ... + def __neg__(self, context: Optional[Context] = ...) -> Decimal: ... + def __pos__(self, context: Optional[Context] = ...) -> Decimal: ... + def __abs__(self, round: bool = ..., context: Optional[Context] = ...) -> Decimal: ... + def __add__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __radd__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __sub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rsub__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __mul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rmul__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __truediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rtruediv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info < (3,): + def __div__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rdiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __divmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ... + def __rdivmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Tuple[Decimal, Decimal]: ... + def __mod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rmod__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def remainder_near(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __floordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __rfloordiv__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __float__(self) -> float: ... + def __int__(self) -> int: ... + def __trunc__(self) -> int: ... + @property + def real(self) -> Decimal: ... + @property + def imag(self) -> Decimal: ... + def conjugate(self) -> Decimal: ... + def __complex__(self) -> complex: ... + if sys.version_info >= (3,): + @overload + def __round__(self) -> int: ... + @overload + def __round__(self, ndigits: int) -> Decimal: ... + def __floor__(self) -> int: ... + def __ceil__(self) -> int: ... + else: + def __long__(self) -> long: ... + def fma(self, other: _Decimal, third: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __pow__(self, other: _Decimal, modulo: Optional[_Decimal] = ..., context: Optional[Context] = ...) -> Decimal: ... + def __rpow__(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def normalize(self, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info >= (3,): + def quantize(self, exp: _Decimal, rounding: Optional[str] = ..., + context: Optional[Context] = ...) -> Decimal: ... + def same_quantum(self, other: _Decimal, context: Optional[Context] = ...) -> bool: ... + else: + def quantize(self, exp: _Decimal, rounding: Optional[str] = ..., + context: Optional[Context] = ..., watchexp: bool = ...) -> Decimal: ... + def same_quantum(self, other: _Decimal) -> bool: ... + def to_integral_exact(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def to_integral_value(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def to_integral(self, rounding: Optional[str] = ..., context: Optional[Context] = ...) -> Decimal: ... + def sqrt(self, context: Optional[Context] = ...) -> Decimal: ... + def max(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def min(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def adjusted(self) -> int: ... + if sys.version_info >= (3,): + def canonical(self) -> Decimal: ... + else: + def canonical(self, context: Optional[Context] = ...) -> Decimal: ... + def compare_signal(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + if sys.version_info >= (3,): + def compare_total(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def compare_total_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + else: + def compare_total(self, other: _Decimal) -> Decimal: ... + def compare_total_mag(self, other: _Decimal) -> Decimal: ... + def copy_abs(self) -> Decimal: ... + def copy_negate(self) -> Decimal: ... + if sys.version_info >= (3,): + def copy_sign(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + else: + def copy_sign(self, other: _Decimal) -> Decimal: ... + def exp(self, context: Optional[Context] = ...) -> Decimal: ... + def is_canonical(self) -> bool: ... + def is_finite(self) -> bool: ... + def is_infinite(self) -> bool: ... + def is_nan(self) -> bool: ... + def is_normal(self, context: Optional[Context] = ...) -> bool: ... + def is_qnan(self) -> bool: ... + def is_signed(self) -> bool: ... + def is_snan(self) -> bool: ... + def is_subnormal(self, context: Optional[Context] = ...) -> bool: ... + def is_zero(self) -> bool: ... + def ln(self, context: Optional[Context] = ...) -> Decimal: ... + def log10(self, context: Optional[Context] = ...) -> Decimal: ... + def logb(self, context: Optional[Context] = ...) -> Decimal: ... + def logical_and(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def logical_invert(self, context: Optional[Context] = ...) -> Decimal: ... + def logical_or(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def logical_xor(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def max_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def min_mag(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def next_minus(self, context: Optional[Context] = ...) -> Decimal: ... + def next_plus(self, context: Optional[Context] = ...) -> Decimal: ... + def next_toward(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def number_class(self, context: Optional[Context] = ...) -> str: ... + def radix(self) -> Decimal: ... + def rotate(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def scaleb(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def shift(self, other: _Decimal, context: Optional[Context] = ...) -> Decimal: ... + def __reduce__(self) -> Tuple[Type[Decimal], Tuple[str]]: ... + def __copy__(self) -> Decimal: ... + def __deepcopy__(self, memo: Any) -> Decimal: ... + def __format__(self, specifier: str, context: Optional[Context] = ...) -> str: ... + +class _ContextManager(object): + new_context: Context + saved_context: Context + def __init__(self, new_context: Context) -> None: ... + def __enter__(self) -> Context: ... + def __exit__(self, t: Optional[Type[BaseException]], v: Optional[BaseException], tb: Optional[TracebackType]) -> None: ... + +_TrapType = Type[DecimalException] + +class Context(object): + prec: int + rounding: str + Emin: int + Emax: int + capitals: int + if sys.version_info >= (3,): + clamp: int + else: + _clamp: int + traps: Dict[_TrapType, bool] + flags: Dict[_TrapType, bool] + if sys.version_info >= (3,): + def __init__(self, prec: Optional[int] = ..., rounding: Optional[str] = ..., + Emin: Optional[int] = ..., Emax: Optional[int] = ..., + capitals: Optional[int] = ..., clamp: Optional[int] = ..., + flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + _ignored_flags: Optional[List[_TrapType]] = ...) -> None: ... + else: + def __init__(self, prec: Optional[int] = ..., rounding: Optional[str] = ..., + traps: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + flags: Union[None, Dict[_TrapType, bool], Container[_TrapType]] = ..., + Emin: Optional[int] = ..., Emax: Optional[int] = ..., + capitals: Optional[int] = ..., _clamp: Optional[int] = ..., + _ignored_flags: Optional[List[_TrapType]] = ...) -> None: ... + if sys.version_info >= (3,): + # __setattr__() only allows to set a specific set of attributes, + # already defined above. + def __delattr__(self, name: str) -> None: ... + def __reduce__(self) -> Tuple[Type[Context], Tuple[Any, ...]]: ... + def clear_flags(self) -> None: ... + if sys.version_info >= (3,): + def clear_traps(self) -> None: ... + def copy(self) -> Context: ... + def __copy__(self) -> Context: ... + __hash__: Any = ... + def Etiny(self) -> int: ... + def Etop(self) -> int: ... + def create_decimal(self, num: _DecimalNew = ...) -> Decimal: ... + def create_decimal_from_float(self, f: float) -> Decimal: ... + def abs(self, a: _Decimal) -> Decimal: ... + def add(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def canonical(self, a: Decimal) -> Decimal: ... + def compare(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_signal(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_total(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def compare_total_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def copy_abs(self, a: _Decimal) -> Decimal: ... + def copy_decimal(self, a: _Decimal) -> Decimal: ... + def copy_negate(self, a: _Decimal) -> Decimal: ... + def copy_sign(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divide(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divide_int(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def divmod(self, a: _Decimal, b: _Decimal) -> Tuple[Decimal, Decimal]: ... + def exp(self, a: _Decimal) -> Decimal: ... + def fma(self, a: _Decimal, b: _Decimal, c: _Decimal) -> Decimal: ... + def is_canonical(self, a: _Decimal) -> bool: ... + def is_finite(self, a: _Decimal) -> bool: ... + def is_infinite(self, a: _Decimal) -> bool: ... + def is_nan(self, a: _Decimal) -> bool: ... + def is_normal(self, a: _Decimal) -> bool: ... + def is_qnan(self, a: _Decimal) -> bool: ... + def is_signed(self, a: _Decimal) -> bool: ... + def is_snan(self, a: _Decimal) -> bool: ... + def is_subnormal(self, a: _Decimal) -> bool: ... + def is_zero(self, a: _Decimal) -> bool: ... + def ln(self, a: _Decimal) -> Decimal: ... + def log10(self, a: _Decimal) -> Decimal: ... + def logb(self, a: _Decimal) -> Decimal: ... + def logical_and(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def logical_invert(self, a: _Decimal) -> Decimal: ... + def logical_or(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def logical_xor(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def max(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def max_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def min(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def min_mag(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def minus(self, a: _Decimal) -> Decimal: ... + def multiply(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def next_minus(self, a: _Decimal) -> Decimal: ... + def next_plus(self, a: _Decimal) -> Decimal: ... + def next_toward(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def normalize(self, a: _Decimal) -> Decimal: ... + def number_class(self, a: _Decimal) -> str: ... + def plus(self, a: _Decimal) -> Decimal: ... + def power(self, a: _Decimal, b: _Decimal, modulo: Optional[_Decimal] = ...) -> Decimal: ... + def quantize(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def radix(self) -> Decimal: ... + def remainder(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def remainder_near(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def rotate(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def same_quantum(self, a: _Decimal, b: _Decimal) -> bool: ... + def scaleb(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def shift(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def sqrt(self, a: _Decimal) -> Decimal: ... + def subtract(self, a: _Decimal, b: _Decimal) -> Decimal: ... + def to_eng_string(self, a: _Decimal) -> str: ... + def to_sci_string(self, a: _Decimal) -> str: ... + def to_integral_exact(self, a: _Decimal) -> Decimal: ... + def to_integral_value(self, a: _Decimal) -> Decimal: ... + def to_integral(self, a: _Decimal) -> Decimal: ... + +DefaultContext: Context +BasicContext: Context +ExtendedContext: Context diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi new file mode 100644 index 0000000..ddcec11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/difflib.pyi @@ -0,0 +1,87 @@ +# Based on https://docs.python.org/2.7/library/difflib.html and https://docs.python.org/3.2/library/difflib.html + +import sys +from typing import ( + TypeVar, Callable, Iterable, Iterator, List, NamedTuple, Sequence, Tuple, + Generic, Optional, Text, Union, AnyStr +) + +_T = TypeVar('_T') + +if sys.version_info >= (3,): + _StrType = Text +else: + # Aliases can't point to type vars, so we need to redeclare AnyStr + _StrType = TypeVar('_StrType', Text, bytes) + +_JunkCallback = Union[Callable[[Text], bool], Callable[[str], bool]] + +Match = NamedTuple('Match', [ + ('a', int), + ('b', int), + ('size', int), +]) + +class SequenceMatcher(Generic[_T]): + def __init__(self, isjunk: Optional[Callable[[_T], bool]] = ..., + a: Sequence[_T] = ..., b: Sequence[_T] = ..., + autojunk: bool = ...) -> None: ... + def set_seqs(self, a: Sequence[_T], b: Sequence[_T]) -> None: ... + def set_seq1(self, a: Sequence[_T]) -> None: ... + def set_seq2(self, b: Sequence[_T]) -> None: ... + def find_longest_match(self, alo: int, ahi: int, blo: int, + bhi: int) -> Match: ... + def get_matching_blocks(self) -> List[Match]: ... + def get_opcodes(self) -> List[Tuple[str, int, int, int, int]]: ... + def get_grouped_opcodes(self, n: int = ... + ) -> Iterable[List[Tuple[str, int, int, int, int]]]: ... + def ratio(self) -> float: ... + def quick_ratio(self) -> float: ... + def real_quick_ratio(self) -> float: ... + +def get_close_matches(word: Sequence[_T], possibilities: Iterable[Sequence[_T]], + n: int = ..., cutoff: float = ...) -> List[Sequence[_T]]: ... + +class Differ: + def __init__(self, linejunk: _JunkCallback = ..., charjunk: _JunkCallback = ...) -> None: ... + def compare(self, a: Sequence[_StrType], b: Sequence[_StrType]) -> Iterator[_StrType]: ... + +def IS_LINE_JUNK(line: _StrType) -> bool: ... +def IS_CHARACTER_JUNK(line: _StrType) -> bool: ... +def unified_diff(a: Sequence[_StrType], b: Sequence[_StrType], fromfile: _StrType = ..., + tofile: _StrType = ..., fromfiledate: _StrType = ..., tofiledate: _StrType = ..., + n: int = ..., lineterm: _StrType = ...) -> Iterator[_StrType]: ... +def context_diff(a: Sequence[_StrType], b: Sequence[_StrType], fromfile: _StrType = ..., + tofile: _StrType = ..., fromfiledate: _StrType = ..., tofiledate: _StrType = ..., + n: int = ..., lineterm: _StrType = ...) -> Iterator[_StrType]: ... +def ndiff(a: Sequence[_StrType], b: Sequence[_StrType], + linejunk: _JunkCallback = ..., + charjunk: _JunkCallback = ... + ) -> Iterator[_StrType]: ... + +class HtmlDiff(object): + def __init__(self, tabsize: int = ..., wrapcolumn: int = ..., + linejunk: _JunkCallback = ..., + charjunk: _JunkCallback = ... + ) -> None: ... + def make_file(self, fromlines: Sequence[_StrType], tolines: Sequence[_StrType], + fromdesc: _StrType = ..., todesc: _StrType = ..., context: bool = ..., + numlines: int = ...) -> _StrType: ... + def make_table(self, fromlines: Sequence[_StrType], tolines: Sequence[_StrType], + fromdesc: _StrType = ..., todesc: _StrType = ..., context: bool = ..., + numlines: int = ...) -> _StrType: ... + +def restore(delta: Iterable[_StrType], which: int) -> Iterator[_StrType]: ... + +if sys.version_info >= (3, 5): + def diff_bytes( + dfunc: Callable[[Sequence[str], Sequence[str], str, str, str, str, int, str], Iterator[str]], + a: Sequence[bytes], + b: Sequence[bytes], + fromfile: bytes = ..., + tofile: bytes = ..., + fromfiledate: bytes = ..., + tofiledate: bytes = ..., + n: int = ..., + lineterm: bytes = ... + ) -> Iterator[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/dis.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/dis.pyi new file mode 100644 index 0000000..0ef27f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/dis.pyi @@ -0,0 +1,77 @@ +from typing import Callable, List, Union, Iterator, Tuple, Optional, Any, IO, NamedTuple, Dict + +import sys +import types + +from opcode import (hasconst as hasconst, hasname as hasname, hasjrel as hasjrel, + hasjabs as hasjabs, haslocal as haslocal, hascompare as hascompare, + hasfree as hasfree, cmp_op as cmp_op, opname as opname, opmap as opmap, + HAVE_ARGUMENT as HAVE_ARGUMENT, EXTENDED_ARG as EXTENDED_ARG) + +if sys.version_info >= (3, 4): + from opcode import stack_effect as stack_effect + +if sys.version_info >= (3, 6): + from opcode import hasnargs as hasnargs + +# Strictly this should not have to include Callable, but mypy doesn't use FunctionType +# for functions (python/mypy#3171) +_have_code = Union[types.MethodType, types.FunctionType, types.CodeType, type, Callable[..., Any]] +_have_code_or_string = Union[_have_code, str, bytes] + + +if sys.version_info >= (3, 4): + Instruction = NamedTuple( + "Instruction", + [ + ('opname', str), + ('opcode', int), + ('arg', Optional[int]), + ('argval', Any), + ('argrepr', str), + ('offset', int), + ('starts_line', Optional[int]), + ('is_jump_target', bool) + ] + ) + + class Bytecode: + codeobj: types.CodeType + first_line: int + def __init__(self, x: _have_code_or_string, *, first_line: Optional[int] = ..., + current_offset: Optional[int] = ...) -> None: ... + def __iter__(self) -> Iterator[Instruction]: ... + def __repr__(self) -> str: ... + def info(self) -> str: ... + def dis(self) -> str: ... + + @classmethod + def from_traceback(cls, tb: types.TracebackType) -> Bytecode: ... + + +COMPILER_FLAG_NAMES: Dict[int, str] + + +def findlabels(code: _have_code) -> List[int]: ... +def findlinestarts(code: _have_code) -> Iterator[Tuple[int, int]]: ... + +if sys.version_info >= (3, 0): + def pretty_flags(flags: int) -> str: ... + def code_info(x: _have_code_or_string) -> str: ... + +if sys.version_info >= (3, 4): + def dis(x: _have_code_or_string = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def distb(tb: Optional[types.TracebackType] = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def disassemble(co: _have_code, lasti: int = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def disco(co: _have_code, lasti: int = ..., *, file: Optional[IO[str]] = ...) -> None: ... + def show_code(co: _have_code, *, file: Optional[IO[str]] = ...) -> None: ... + + def get_instructions(x: _have_code, *, first_line: Optional[int] = ...) -> Iterator[Instruction]: ... +else: + def dis(x: _have_code_or_string = ...) -> None: ... + def distb(tb: types.TracebackType = ...) -> None: ... + def disassemble(co: _have_code, lasti: int = ...) -> None: ... + def disco(co: _have_code, lasti: int = ...) -> None: ... + + if sys.version_info >= (3, 0): + def show_code(co: _have_code) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi new file mode 100644 index 0000000..12172f3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/archive_util.pyi @@ -0,0 +1,12 @@ +# Stubs for distutils.archive_util + +from typing import Optional + + +def make_archive(base_name: str, format: str, root_dir: Optional[str] = ..., + base_dir: Optional[str] = ..., verbose: int = ..., + dry_run: int = ...) -> str: ... +def make_tarball(base_name: str, base_dir: str, compress: Optional[str] = ..., + verbose: int = ..., dry_run: int = ...) -> str: ... +def make_zipfile(base_name: str, base_dir: str, verbose: int = ..., + dry_run: int = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi new file mode 100644 index 0000000..9f27a0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/bcppcompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.bcppcompiler + +from distutils.ccompiler import CCompiler + + +class BCPPCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi new file mode 100644 index 0000000..94fad8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/ccompiler.pyi @@ -0,0 +1,119 @@ +# Stubs for distutils.ccompiler + +from typing import Any, Callable, List, Optional, Tuple, Union + + +_Macro = Union[Tuple[str], Tuple[str, str]] + + +def gen_lib_options(compiler: CCompiler, library_dirs: List[str], + runtime_library_dirs: List[str], + libraries: List[str]) -> List[str]: ... +def gen_preprocess_options(macros: List[_Macro], + include_dirs: List[str]) -> List[str]: ... +def get_default_compiler(osname: Optional[str] = ..., + platform: Optional[str] = ...) -> str: ... +def new_compiler(plat: Optional[str] = ..., compiler: Optional[str] = ..., + verbose: int = ..., dry_run: int = ..., + force: int = ...) -> CCompiler: ... +def show_compilers() -> None: ... + +class CCompiler: + def __init__(self, verbose: int = ..., dry_run: int = ..., + force: int = ...) -> None: ... + def add_include_dir(self, dir: str) -> None: ... + def set_include_dirs(self, dirs: List[str]) -> None: ... + def add_library(self, libname: str) -> None: ... + def set_libraries(self, libnames: List[str]) -> None: ... + def add_library_dir(self, dir: str) -> None: ... + def set_library_dirs(self, dirs: List[str]) -> None: ... + def add_runtime_library_dir(self, dir: str) -> None: ... + def set_runtime_library_dirs(self, dirs: List[str]) -> None: ... + def define_macro(self, name: str, value: Optional[str] = ...) -> None: ... + def undefine_macro(self, name: str) -> None: ... + def add_link_object(self, object: str) -> None: ... + def set_link_objects(self, objects: List[str]) -> None: ... + def detect_language(self, sources: Union[str, List[str]]) -> Optional[str]: ... + def find_library_file(self, dirs: List[str], lib: str, + debug: bool = ...) -> Optional[str]: ... + def has_function(self, funcname: str, includes: Optional[List[str]] = ..., + include_dirs: Optional[List[str]] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ...) -> bool: ... + def library_dir_option(self, dir: str) -> str: ... + def library_option(self, lib: str) -> str: ... + def runtime_library_dir_option(self, dir: str) -> str: ... + def set_executables(self, **args: str) -> None: ... + def compile(self, sources: List[str], output_dir: Optional[str] = ..., + macros: Optional[_Macro] = ..., + include_dirs: Optional[List[str]] = ..., debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + depends: Optional[List[str]] = ...) -> List[str]: ... + def create_static_lib(self, objects: List[str], output_libname: str, + output_dir: Optional[str] = ..., debug: bool = ..., + target_lang: Optional[str] = ...) -> None: ... + def link(self, target_desc: str, objects: List[str], output_filename: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_executable(self, objects: List[str], output_progname: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_shared_lib(self, objects: List[str], output_libname: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def link_shared_object(self, objects: List[str], output_filename: str, + output_dir: Optional[str] = ..., + libraries: Optional[List[str]] = ..., + library_dirs: Optional[List[str]] = ..., + runtime_library_dirs: Optional[List[str]] = ..., + export_symbols: Optional[List[str]] = ..., + debug: bool = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ..., + build_temp: Optional[str] = ..., + target_lang: Optional[str] = ...) -> None: ... + def preprocess(self, source: str, output_file: Optional[str] = ..., + macros: Optional[List[_Macro]] = ..., + include_dirs: Optional[List[str]] = ..., + extra_preargs: Optional[List[str]] = ..., + extra_postargs: Optional[List[str]] = ...) -> None: ... + def executable_filename(self, basename: str, strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def library_filename(self, libname: str, lib_type: str = ..., + strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def object_filenames(self, source_filenames: List[str], + strip_dir: int = ..., + output_dir: str = ...) -> List[str]: ... + def shared_object_filename(self, basename: str, strip_dir: int = ..., + output_dir: str = ...) -> str: ... + def execute(self, func: Callable[..., None], args: Tuple[Any, ...], + msg: Optional[str] = ..., level: int = ...) -> None: ... + def spawn(self, cmd: List[str]) -> None: ... + def mkpath(self, name: str, mode: int = ...) -> None: ... + def move_file(self, src: str, dst: str) -> str: ... + def announce(self, msg: str, level: int = ...) -> None: ... + def warn(self, msg: str) -> None: ... + def debug_print(self, msg: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi new file mode 100644 index 0000000..2ec5a50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cmd.pyi @@ -0,0 +1,40 @@ +# Stubs for distutils.cmd + +from typing import Callable, List, Tuple, Union, Optional, Iterable, Any, Text +from abc import abstractmethod +from distutils.dist import Distribution + +class Command: + sub_commands: List[Tuple[str, Union[Callable[[], bool], str, None]]] + def __init__(self, dist: Distribution) -> None: ... + @abstractmethod + def initialize_options(self) -> None: ... + @abstractmethod + def finalize_options(self) -> None: ... + @abstractmethod + def run(self) -> None: ... + + def announce(self, msg: Text, level: int = ...) -> None: ... + def debug_print(self, msg: Text) -> None: ... + + def ensure_string(self, option: str, default: Optional[str] = ...) -> None: ... + def ensure_string_list(self, option: Union[str, List[str]]) -> None: ... + def ensure_filename(self, option: str) -> None: ... + def ensure_dirname(self, option: str) -> None: ... + + def get_command_name(self) -> str: ... + def set_undefined_options(self, src_cmd: Text, *option_pairs: Tuple[str, str]) -> None: ... + def get_finalized_command(self, command: Text, create: int = ...) -> Command: ... + def reinitialize_command(self, command: Union[Command, Text], reinit_subcommands: int = ...) -> Command: ... + def run_command(self, command: Text) -> None: ... + def get_sub_commands(self) -> List[str]: ... + + def warn(self, msg: Text) -> None: ... + def execute(self, func: Callable[..., Any], args: Iterable[Any], msg: Optional[Text] = ..., level: int = ...) -> None: ... + def mkpath(self, name: str, mode: int = ...) -> None: ... + def copy_file(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., link: Optional[str] = ..., level: Any = ...) -> Tuple[str, bool]: ... # level is not used + def copy_tree(self, infile: str, outfile: str, preserve_mode: int = ..., preserve_times: int = ..., preserve_symlinks: int = ..., level: Any = ...) -> List[str]: ... # level is not used + def move_file(self, src: str, dest: str, level: Any = ...) -> str: ... # level is not used + def spawn(self, cmd: Iterable[str], search_path: int = ..., level: Any = ...) -> None: ... # level is not used + def make_archive(self, base_name: str, format: str, root_dir: Optional[str] = ..., base_dir: Optional[str] = ..., owner: Optional[str] = ..., group: Optional[str] = ...) -> str: ... + def make_file(self, infiles: Union[str, List[str], Tuple[str]], outfile: str, func: Callable[..., Any], args: List[Any], exec_msg: Optional[str] = ..., skip_msg: Optional[str] = ..., level: Any = ...) -> None: ... # level is not used diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_dumb.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi new file mode 100644 index 0000000..a761792 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_msi.pyi @@ -0,0 +1,6 @@ +from distutils.cmd import Command + +class bdist_msi(Command): + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_packager.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_rpm.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/bdist_wininst.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_clib.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_ext.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi new file mode 100644 index 0000000..34753e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_py.pyi @@ -0,0 +1,10 @@ +from distutils.cmd import Command +import sys + +if sys.version_info >= (3,): + class build_py(Command): + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... + + class build_py_2to3(build_py): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/build_scripts.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/check.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/clean.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/config.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi new file mode 100644 index 0000000..94a9008 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install.pyi @@ -0,0 +1,14 @@ +from distutils.cmd import Command +from typing import Optional, Text + + +class install(Command): + user: bool + prefix: Optional[Text] + home: Optional[Text] + root: Optional[Text] + install_lib: Optional[Text] + + def initialize_options(self) -> None: ... + def finalize_options(self) -> None: ... + def run(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_data.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_headers.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_lib.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/install_scripts.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/register.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/command/sdist.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi new file mode 100644 index 0000000..125b799 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/core.pyi @@ -0,0 +1,50 @@ +# Stubs for distutils.core + +from typing import Any, List, Mapping, Optional, Tuple, Type, Union +from distutils.cmd import Command as Command +from distutils.dist import Distribution as Distribution +from distutils.extension import Extension as Extension + +def setup(name: str = ..., + version: str = ..., + description: str = ..., + long_description: str = ..., + author: str = ..., + author_email: str = ..., + maintainer: str = ..., + maintainer_email: str = ..., + url: str = ..., + download_url: str = ..., + packages: List[str] = ..., + py_modules: List[str] = ..., + scripts: List[str] = ..., + ext_modules: List[Extension] = ..., + classifiers: List[str] = ..., + distclass: Type[Distribution] = ..., + script_name: str = ..., + script_args: List[str] = ..., + options: Mapping[str, Any] = ..., + license: str = ..., + keywords: Union[List[str], str] = ..., + platforms: Union[List[str], str] = ..., + cmdclass: Mapping[str, Type[Command]] = ..., + data_files: List[Tuple[str, List[str]]] = ..., + package_dir: Mapping[str, str] = ..., + obsoletes: List[str] = ..., + provides: List[str] = ..., + requires: List[str] = ..., + command_packages: List[str] = ..., + command_options: Mapping[str, Mapping[str, Tuple[Any, Any]]] = ..., + package_data: Mapping[str, List[str]] = ..., + include_package_data: bool = ..., + libraries: List[str] = ..., + headers: List[str] = ..., + ext_package: str = ..., + include_dirs: List[str] = ..., + password: str = ..., + fullname: str = ..., + **attrs: Any) -> None: ... + +def run_setup(script_name: str, + script_args: Optional[List[str]] = ..., + stop_after: str = ...) -> Distribution: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi new file mode 100644 index 0000000..1bfab90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/cygwinccompiler.pyi @@ -0,0 +1,7 @@ +# Stubs for distutils.cygwinccompiler + +from distutils.unixccompiler import UnixCCompiler + + +class CygwinCCompiler(UnixCCompiler): ... +class Mingw32CCompiler(CygwinCCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi new file mode 100644 index 0000000..76de447 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/debug.pyi @@ -0,0 +1,3 @@ +# Stubs for distutils.debug + +DEBUG: bool diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi new file mode 100644 index 0000000..7df5847 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dep_util.pyi @@ -0,0 +1,8 @@ +# Stubs for distutils.dep_util + +from typing import List, Tuple + +def newer(source: str, target: str) -> bool: ... +def newer_pairwise(sources: List[str], + targets: List[str]) -> List[Tuple[str, str]]: ... +def newer_group(sources: List[str], target: str, missing: str = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi new file mode 100644 index 0000000..667ac2f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dir_util.pyi @@ -0,0 +1,15 @@ +# Stubs for distutils.dir_util + +from typing import List + + +def mkpath(name: str, mode: int = ..., verbose: int = ..., + dry_run: int = ...) -> List[str]: ... +def create_tree(base_dir: str, files: List[str], mode: int = ..., + verbose: int = ..., dry_run: int = ...) -> None: ... +def copy_tree(src: str, dst: str, preserve_mode: int = ..., + preserve_times: int = ..., preserve_symlinks: int = ..., + update: int = ..., verbose: int = ..., + dry_run: int = ...) -> List[str]: ... +def remove_tree(directory: str, verbose: int = ..., + dry_run: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi new file mode 100644 index 0000000..65e766d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/dist.pyi @@ -0,0 +1,11 @@ +# Stubs for distutils.dist +from distutils.cmd import Command + +from typing import Any, Mapping, Optional, Dict, Tuple, Iterable, Text + + +class Distribution: + def __init__(self, attrs: Optional[Mapping[str, Any]] = ...) -> None: ... + def get_option_dict(self, command: str) -> Dict[str, Tuple[str, Text]]: ... + def parse_config_files(self, filenames: Optional[Iterable[Text]] = ...) -> None: ... + def get_command_obj(self, command: str, create: bool = ...) -> Optional[Command]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi new file mode 100644 index 0000000..e483362 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/errors.pyi @@ -0,0 +1,19 @@ +class DistutilsError(Exception): ... +class DistutilsModuleError(DistutilsError): ... +class DistutilsClassError(DistutilsError): ... +class DistutilsGetoptError(DistutilsError): ... +class DistutilsArgError(DistutilsError): ... +class DistutilsFileError(DistutilsError): ... +class DistutilsOptionError(DistutilsError): ... +class DistutilsSetupError(DistutilsError): ... +class DistutilsPlatformError(DistutilsError): ... +class DistutilsExecError(DistutilsError): ... +class DistutilsInternalError(DistutilsError): ... +class DistutilsTemplateError(DistutilsError): ... +class DistutilsByteCompileError(DistutilsError): ... +class CCompilerError(Exception): ... +class PreprocessError(CCompilerError): ... +class CompileError(CCompilerError): ... +class LibError(CCompilerError): ... +class LinkError(CCompilerError): ... +class UnknownFileError(CCompilerError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi new file mode 100644 index 0000000..5aa070e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/extension.pyi @@ -0,0 +1,39 @@ +# Stubs for distutils.extension + +from typing import List, Optional, Tuple +import sys + +class Extension: + if sys.version_info >= (3,): + def __init__(self, + name: str, + sources: List[str], + include_dirs: List[str] = ..., + define_macros: List[Tuple[str, Optional[str]]] = ..., + undef_macros: List[str] = ..., + library_dirs: List[str] = ..., + libraries: List[str] = ..., + runtime_library_dirs: List[str] = ..., + extra_objects: List[str] = ..., + extra_compile_args: List[str] = ..., + extra_link_args: List[str] = ..., + export_symbols: List[str] = ..., + depends: List[str] = ..., + language: str = ..., + optional: bool = ...) -> None: ... + else: + def __init__(self, + name: str, + sources: List[str], + include_dirs: List[str] = ..., + define_macros: List[Tuple[str, Optional[str]]] = ..., + undef_macros: List[str] = ..., + library_dirs: List[str] = ..., + libraries: List[str] = ..., + runtime_library_dirs: List[str] = ..., + extra_objects: List[str] = ..., + extra_compile_args: List[str] = ..., + extra_link_args: List[str] = ..., + export_symbols: List[str] = ..., + depends: List[str] = ..., + language: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi new file mode 100644 index 0000000..aa7e964 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/fancy_getopt.pyi @@ -0,0 +1,27 @@ +# Stubs for distutils.fancy_getopt + +from typing import ( + Any, List, Mapping, Optional, Tuple, Union, + TypeVar, overload, +) + +_Option = Tuple[str, str, str] +_GR = Tuple[List[str], OptionDummy] + +def fancy_getopt(options: List[_Option], + negative_opt: Mapping[_Option, _Option], + object: Any, + args: Optional[List[str]]) -> Union[List[str], _GR]: ... +def wrap_text(text: str, width: int) -> List[str]: ... + +class FancyGetopt: + def __init__(self, option_table: Optional[List[_Option]] = ...) -> None: ... + # TODO kinda wrong, `getopt(object=object())` is invalid + @overload + def getopt(self, args: Optional[List[str]] = ...) -> _GR: ... + @overload + def getopt(self, args: Optional[List[str]], object: Any) -> List[str]: ... + def get_option_order(self) -> List[Tuple[str, str]]: ... + def generate_help(self, header: Optional[str] = ...) -> List[str]: ... + +class OptionDummy: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi new file mode 100644 index 0000000..6324d63 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/file_util.pyi @@ -0,0 +1,12 @@ +# Stubs for distutils.file_util + +from typing import Optional, Sequence, Tuple + + +def copy_file(src: str, dst: str, preserve_mode: bool = ..., + preserve_times: bool = ..., update: bool = ..., + link: Optional[str] = ..., verbose: bool = ..., + dry_run: bool = ...) -> Tuple[str, str]: ... +def move_file(src: str, dst: str, verbose: bool = ..., + dry_run: bool = ...) -> str: ... +def write_file(filename: str, contents: Sequence[str]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi new file mode 100644 index 0000000..4ecaeba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/filelist.pyi @@ -0,0 +1,3 @@ +# Stubs for distutils.filelist + +class FileList: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi new file mode 100644 index 0000000..6c37cc5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/log.pyi @@ -0,0 +1,28 @@ +from typing import Any, Callable, Iterable, Text + +DEBUG: int +INFO: int +WARN: int +ERROR: int +FATAL: int + +class Log: + def __init__(self, threshold: int = ...) -> None: ... + def log(self, level: int, msg: Text, *args: Any) -> None: ... + def debug(self, msg: Text, *args: Any) -> None: ... + def info(self, msg: Text, *args: Any) -> None: ... + def warn(self, msg: Text, *args: Any) -> None: ... + def error(self, msg: Text, *args: Any) -> None: ... + def fatal(self, msg: Text, *args: Any) -> None: ... + +_LogFunc = Callable[[Text, Iterable[Any]], None] + +log: Callable[[int, Text, Iterable[Any]], None] +debug: _LogFunc +info: _LogFunc +warn: _LogFunc +error: _LogFunc +fatal: _LogFunc + +def set_threshold(level: int) -> int: ... +def set_verbosity(v: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi new file mode 100644 index 0000000..ffc9e44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/msvccompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.msvccompiler + +from distutils.ccompiler import CCompiler + + +class MSVCCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi new file mode 100644 index 0000000..8df9eba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/spawn.pyi @@ -0,0 +1,8 @@ +# Stubs for distutils.spawn + +from typing import List, Optional + +def spawn(cmd: List[str], search_path: bool = ..., + verbose: bool = ..., dry_run: bool = ...) -> None: ... +def find_executable(executable: str, + path: Optional[str] = ...) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi new file mode 100644 index 0000000..62fa9af --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/sysconfig.pyi @@ -0,0 +1,19 @@ +# Stubs for distutils.sysconfig + +from typing import Mapping, Optional, Union +from distutils.ccompiler import CCompiler + +PREFIX: str +EXEC_PREFIX: str + +def get_config_var(name: str) -> Union[int, str, None]: ... +def get_config_vars(*args: str) -> Mapping[str, Union[int, str]]: ... +def get_config_h_filename() -> str: ... +def get_makefile_filename() -> str: ... +def get_python_inc(plat_specific: bool = ..., + prefix: Optional[str] = ...) -> str: ... +def get_python_lib(plat_specific: bool = ..., standard_lib: bool = ..., + prefix: Optional[str] = ...) -> str: ... + +def customize_compiler(compiler: CCompiler) -> None: ... +def set_python_build() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi new file mode 100644 index 0000000..8f90d41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/text_file.pyi @@ -0,0 +1,18 @@ +# Stubs for distutils.text_file + +from typing import IO, List, Optional, Tuple, Union + +class TextFile: + def __init__(self, filename: Optional[str] = ..., + file: Optional[IO[str]] = ..., + *, strip_comments: bool = ..., + lstrip_ws: bool = ..., rstrip_ws: bool = ..., + skip_blanks: bool = ..., join_lines: bool = ..., + collapse_join: bool = ...) -> None: ... + def open(self, filename: str) -> None: ... + def close(self) -> None: ... + def warn(self, msg: str, + line: Union[List[int], Tuple[int, int], int] = ...) -> None: ... + def readline(self) -> Optional[str]: ... + def readlines(self) -> List[str]: ... + def unreadline(self, line: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi new file mode 100644 index 0000000..7ab7298 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/unixccompiler.pyi @@ -0,0 +1,6 @@ +# Stubs for distutils.unixccompiler + +from distutils.ccompiler import CCompiler + + +class UnixCCompiler(CCompiler): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi new file mode 100644 index 0000000..942886d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/util.pyi @@ -0,0 +1,20 @@ +# Stubs for distutils.util + +from typing import Any, Callable, List, Mapping, Optional, Tuple + + +def get_platform() -> str: ... +def convert_path(pathname: str) -> str: ... +def change_root(new_root: str, pathname: str) -> str: ... +def check_environ() -> None: ... +def subst_vars(s: str, local_vars: Mapping[str, str]) -> None: ... +def split_quoted(s: str) -> List[str]: ... +def execute(func: Callable[..., None], args: Tuple[Any, ...], + msg: Optional[str] = ..., verbose: bool = ..., + dry_run: bool = ...) -> None: ... +def strtobool(val: str) -> bool: ... +def byte_compile(py_files: List[str], optimize: int = ..., force: bool = ..., + prefix: Optional[str] = ..., base_dir: Optional[str] = ..., + verbose: bool = ..., dry_run: bool = ..., + direct: Optional[bool] = ...) -> None: ... +def rfc822_escape(header: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi new file mode 100644 index 0000000..cb636b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/distutils/version.pyi @@ -0,0 +1,54 @@ +import sys +from abc import abstractmethod +from typing import Any, Optional, TypeVar, Union, Pattern, Text, Tuple + +_T = TypeVar('_T', bound='Version') + +class Version: + def __repr__(self) -> str: ... + + if sys.version_info >= (3,): + def __eq__(self, other: object) -> bool: ... + def __lt__(self: _T, other: Union[_T, str]) -> bool: ... + def __le__(self: _T, other: Union[_T, str]) -> bool: ... + def __gt__(self: _T, other: Union[_T, str]) -> bool: ... + def __ge__(self: _T, other: Union[_T, str]) -> bool: ... + + @abstractmethod + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + @abstractmethod + def parse(self: _T, vstring: Text) -> _T: ... + @abstractmethod + def __str__(self) -> str: ... + if sys.version_info >= (3,): + @abstractmethod + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + @abstractmethod + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... + +class StrictVersion(Version): + version_re: Pattern[str] + version: Tuple[int, int, int] + prerelease: Optional[Tuple[Text, int]] + + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + def parse(self: _T, vstring: Text) -> _T: ... + def __str__(self) -> str: ... + if sys.version_info >= (3,): + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... + +class LooseVersion(Version): + component_re: Pattern[str] + vstring: Text + version: Tuple[Union[Text, int], ...] + + def __init__(self, vstring: Optional[Text] = ...) -> None: ... + def parse(self: _T, vstring: Text) -> _T: ... + def __str__(self) -> str: ... + if sys.version_info >= (3,): + def _cmp(self: _T, other: Union[_T, str]) -> bool: ... + else: + def __cmp__(self: _T, other: Union[_T, str]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi new file mode 100644 index 0000000..8151fb5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/doctest.pyi @@ -0,0 +1,161 @@ +from typing import Any, Callable, Dict, List, NamedTuple, Optional, Tuple, Type, Union + +import sys +import types +import unittest + +TestResults = NamedTuple('TestResults', [ + ('failed', int), + ('attempted', int), +]) + +OPTIONFLAGS_BY_NAME: Dict[str, int] +def register_optionflag(name: str) -> int: ... +DONT_ACCEPT_TRUE_FOR_1: int +DONT_ACCEPT_BLANKLINE: int +NORMALIZE_WHITESPACE: int +ELLIPSIS: int +SKIP: int +IGNORE_EXCEPTION_DETAIL: int + +COMPARISON_FLAGS: int + +REPORT_UDIFF: int +REPORT_CDIFF: int +REPORT_NDIFF: int +REPORT_ONLY_FIRST_FAILURE: int +if sys.version_info >= (3, 4): + FAIL_FAST: int + +REPORTING_FLAGS: int + +BLANKLINE_MARKER: str +ELLIPSIS_MARKER: str + +class Example: + source: str + want: str + exc_msg: Optional[str] + lineno: int + indent: int + options: Dict[int, bool] + def __init__(self, source: str, want: str, exc_msg: Optional[str] = ..., lineno: int = ..., indent: int = ..., + options: Optional[Dict[int, bool]] = ...) -> None: ... + def __hash__(self) -> int: ... + +class DocTest: + examples: List[Example] + globs: Dict[str, Any] + name: str + filename: Optional[str] + lineno: Optional[int] + docstring: Optional[str] + def __init__(self, examples: List[Example], globs: Dict[str, Any], name: str, filename: Optional[str], lineno: Optional[int], docstring: Optional[str]) -> None: ... + def __hash__(self) -> int: ... + def __lt__(self, other: DocTest) -> bool: ... + +class DocTestParser: + def parse(self, string: str, name: str = ...) -> List[Union[str, Example]]: ... + def get_doctest(self, string: str, globs: Dict[str, Any], name: str, filename: Optional[str], lineno: Optional[str]) -> DocTest: ... + def get_examples(self, strin: str, name: str = ...) -> List[Example]: ... + +class DocTestFinder: + def __init__(self, verbose: bool = ..., parser: DocTestParser = ..., + recurse: bool = ..., exclude_empty: bool = ...) -> None: ... + def find(self, obj: object, name: Optional[str] = ..., module: Union[None, bool, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., extraglobs: Optional[Dict[str, Any]] = ...) -> List[DocTest]: ... + +_Out = Callable[[str], Any] +_ExcInfo = Tuple[Type[BaseException], BaseException, types.TracebackType] + +class DocTestRunner: + DIVIDER: str + optionflags: int + original_optionflags: int + tries: int + failures: int + test: DocTest + + def __init__(self, checker: Optional[OutputChecker] = ..., verbose: Optional[bool] = ..., optionflags: int = ...) -> None: ... + def report_start(self, out: _Out, test: DocTest, example: Example) -> None: ... + def report_success(self, out: _Out, test: DocTest, example: Example, got: str) -> None: ... + def report_failure(self, out: _Out, test: DocTest, example: Example, got: str) -> None: ... + def report_unexpected_exception(self, out: _Out, test: DocTest, example: Example, exc_info: _ExcInfo) -> None: ... + def run(self, test: DocTest, compileflags: Optional[int] = ..., out: Optional[_Out] = ..., clear_globs: bool = ...) -> TestResults: ... + def summarize(self, verbose: Optional[bool] = ...) -> TestResults: ... + def merge(self, other: DocTestRunner) -> None: ... + +class OutputChecker: + def check_output(self, want: str, got: str, optionflags: int) -> bool: ... + def output_difference(self, example: Example, got: str, optionflags: int) -> str: ... + +class DocTestFailure(Exception): + test: DocTest + example: Example + got: str + + def __init__(self, test: DocTest, example: Example, got: str) -> None: ... + +class UnexpectedException(Exception): + test: DocTest + example: Example + exc_info: _ExcInfo + + def __init__(self, test: DocTest, example: Example, exc_info: _ExcInfo) -> None: ... + +class DebugRunner(DocTestRunner): ... + +master: Optional[DocTestRunner] + +def testmod(m: Optional[types.ModuleType] = ..., name: Optional[str] = ..., globs: Dict[str, Any] = ..., verbose: Optional[bool] = ..., + report: bool = ..., optionflags: int = ..., extraglobs: Dict[str, Any] = ..., + raise_on_error: bool = ..., exclude_empty: bool = ...) -> TestResults: ... +def testfile(filename: str, module_relative: bool = ..., name: Optional[str] = ..., package: Union[None, str, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., verbose: Optional[bool] = ..., report: bool = ..., optionflags: int = ..., + extraglobs: Optional[Dict[str, Any]] = ..., raise_on_error: bool = ..., parser: DocTestParser = ..., + encoding: Optional[str] = ...) -> TestResults: ... +def run_docstring_examples(f: object, globs: Dict[str, Any], verbose: bool = ..., name: str = ..., + compileflags: Optional[int] = ..., optionflags: int = ...) -> None: ... +def set_unittest_reportflags(flags: int) -> int: ... + +class DocTestCase(unittest.TestCase): + def __init__(self, test: DocTest, optionflags: int = ..., setUp: Optional[Callable[[DocTest], Any]] = ..., + tearDown: Optional[Callable[[DocTest], Any]] = ..., + checker: Optional[OutputChecker] = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + def runTest(self) -> None: ... + def format_failure(self, err: str) -> str: ... + def debug(self) -> None: ... + def id(self) -> str: ... + def __hash__(self) -> int: ... + def shortDescription(self) -> str: ... + +class SkipDocTestCase(DocTestCase): + def __init__(self, module: types.ModuleType) -> None: ... + def setUp(self) -> None: ... + def test_skip(self) -> None: ... + def shortDescription(self) -> str: ... + +if sys.version_info >= (3, 4): + class _DocTestSuite(unittest.TestSuite): ... +else: + _DocTestSuite = unittest.TestSuite + +def DocTestSuite(module: Union[None, str, types.ModuleType] = ..., globs: Optional[Dict[str, Any]] = ..., + extraglobs: Optional[Dict[str, Any]] = ..., test_finder: Optional[DocTestFinder] = ..., + **options: Any) -> _DocTestSuite: ... + +class DocFileCase(DocTestCase): + def id(self) -> str: ... + def format_failure(self, err: str) -> str: ... + +def DocFileTest(path: str, module_relative: bool = ..., package: Union[None, str, types.ModuleType] = ..., + globs: Optional[Dict[str, Any]] = ..., parser: DocTestParser = ..., + encoding: Optional[str] = ..., **options: Any) -> DocFileCase: ... +def DocFileSuite(*paths: str, **kw: Any) -> _DocTestSuite: ... +def script_from_examples(s: str) -> str: ... +def testsource(module: Union[None, str, types.ModuleType], name: str) -> str: ... +def debug_src(src: str, pm: bool = ..., globs: Optional[Dict[str, Any]] = ...) -> None: ... +def debug_script(src: str, pm: bool = ..., globs: Optional[Dict[str, Any]] = ...) -> None: ... +def debug(module: Union[None, str, types.ModuleType], name: str, pm: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/errno.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/errno.pyi new file mode 100644 index 0000000..14987bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/errno.pyi @@ -0,0 +1,130 @@ +# Stubs for errno + +from typing import Mapping +import sys + +errorcode: Mapping[int, str] + +EPERM: int +ENOENT: int +ESRCH: int +EINTR: int +EIO: int +ENXIO: int +E2BIG: int +ENOEXEC: int +EBADF: int +ECHILD: int +EAGAIN: int +ENOMEM: int +EACCES: int +EFAULT: int +ENOTBLK: int +EBUSY: int +EEXIST: int +EXDEV: int +ENODEV: int +ENOTDIR: int +EISDIR: int +EINVAL: int +ENFILE: int +EMFILE: int +ENOTTY: int +ETXTBSY: int +EFBIG: int +ENOSPC: int +ESPIPE: int +EROFS: int +EMLINK: int +EPIPE: int +EDOM: int +ERANGE: int +EDEADLCK: int +ENAMETOOLONG: int +ENOLCK: int +ENOSYS: int +ENOTEMPTY: int +ELOOP: int +EWOULDBLOCK: int +ENOMSG: int +EIDRM: int +ECHRNG: int +EL2NSYNC: int +EL3HLT: int +EL3RST: int +ELNRNG: int +EUNATCH: int +ENOCSI: int +EL2HLT: int +EBADE: int +EBADR: int +EXFULL: int +ENOANO: int +EBADRQC: int +EBADSLT: int +EDEADLOCK: int +EBFONT: int +ENOSTR: int +ENODATA: int +ETIME: int +ENOSR: int +ENONET: int +ENOPKG: int +EREMOTE: int +ENOLINK: int +EADV: int +ESRMNT: int +ECOMM: int +EPROTO: int +EMULTIHOP: int +EDOTDOT: int +EBADMSG: int +EOVERFLOW: int +ENOTUNIQ: int +EBADFD: int +EREMCHG: int +ELIBACC: int +ELIBBAD: int +ELIBSCN: int +ELIBMAX: int +ELIBEXEC: int +EILSEQ: int +ERESTART: int +ESTRPIPE: int +EUSERS: int +ENOTSOCK: int +EDESTADDRREQ: int +EMSGSIZE: int +EPROTOTYPE: int +ENOPROTOOPT: int +EPROTONOSUPPORT: int +ESOCKTNOSUPPORT: int +ENOTSUP: int +EOPNOTSUPP: int +EPFNOSUPPORT: int +EAFNOSUPPORT: int +EADDRINUSE: int +EADDRNOTAVAIL: int +ENETDOWN: int +ENETUNREACH: int +ENETRESET: int +ECONNABORTED: int +ECONNRESET: int +ENOBUFS: int +EISCONN: int +ENOTCONN: int +ESHUTDOWN: int +ETOOMANYREFS: int +ETIMEDOUT: int +ECONNREFUSED: int +EHOSTDOWN: int +EHOSTUNREACH: int +EALREADY: int +EINPROGRESS: int +ESTALE: int +EUCLEAN: int +ENOTNAM: int +ENAVAIL: int +EISNAM: int +EREMOTEIO: int +EDQUOT: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi new file mode 100644 index 0000000..57a8846 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/filecmp.pyi @@ -0,0 +1,48 @@ +# Stubs for filecmp (Python 2/3) +import sys +from typing import AnyStr, Callable, Dict, Generic, Iterable, List, Optional, Sequence, Tuple, Union, Text + +DEFAULT_IGNORES: List[str] + +def cmp(f1: Union[bytes, Text], f2: Union[bytes, Text], shallow: Union[int, bool] = ...) -> bool: ... +def cmpfiles(a: AnyStr, b: AnyStr, common: Iterable[AnyStr], + shallow: Union[int, bool] = ...) -> Tuple[List[AnyStr], List[AnyStr], List[AnyStr]]: ... + +class dircmp(Generic[AnyStr]): + def __init__(self, a: AnyStr, b: AnyStr, + ignore: Optional[Sequence[AnyStr]] = ..., + hide: Optional[Sequence[AnyStr]] = ...) -> None: ... + + left: AnyStr + right: AnyStr + hide: Sequence[AnyStr] + ignore: Sequence[AnyStr] + + # These properties are created at runtime by __getattr__ + subdirs: Dict[AnyStr, dircmp[AnyStr]] + same_files: List[AnyStr] + diff_files: List[AnyStr] + funny_files: List[AnyStr] + common_dirs: List[AnyStr] + common_files: List[AnyStr] + common_funny: List[AnyStr] + common: List[AnyStr] + left_only: List[AnyStr] + right_only: List[AnyStr] + left_list: List[AnyStr] + right_list: List[AnyStr] + + def report(self) -> None: ... + def report_partial_closure(self) -> None: ... + def report_full_closure(self) -> None: ... + + methodmap: Dict[str, Callable[[], None]] + def phase0(self) -> None: ... + def phase1(self) -> None: ... + def phase2(self) -> None: ... + def phase3(self) -> None: ... + def phase4(self) -> None: ... + def phase4_closure(self) -> None: ... + +if sys.version_info >= (3,): + def clear_cache() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi new file mode 100644 index 0000000..0eb8ca9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fileinput.pyi @@ -0,0 +1,62 @@ +from typing import Iterable, Callable, IO, AnyStr, Generic, Any, Text, Union, Iterator, Optional + +import os +import sys + +if sys.version_info >= (3, 6): + _Path = Union[Text, bytes, os.PathLike[Any]] +else: + _Path = Union[Text, bytes] + + +def input( + files: Union[_Path, Iterable[_Path], None] = ..., + inplace: bool = ..., + backup: str = ..., + bufsize: int = ..., + mode: str = ..., + openhook: Callable[[_Path, str], IO[AnyStr]] = ...) -> FileInput[AnyStr]: ... + + +def close() -> None: ... +def nextfile() -> None: ... +def filename() -> str: ... +def lineno() -> int: ... +def filelineno() -> int: ... +def fileno() -> int: ... +def isfirstline() -> bool: ... +def isstdin() -> bool: ... + +class FileInput(Iterable[AnyStr], Generic[AnyStr]): + def __init__( + self, + files: Union[None, _Path, Iterable[_Path]] = ..., + inplace: bool = ..., + backup: str = ..., + bufsize: int = ..., + mode: str = ..., + openhook: Callable[[_Path, str], IO[AnyStr]] = ... + ) -> None: ... + + def __del__(self) -> None: ... + def close(self) -> None: ... + if sys.version_info >= (3, 2): + def __enter__(self) -> FileInput[AnyStr]: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __next__(self) -> AnyStr: ... + def __getitem__(self, i: int) -> AnyStr: ... + def nextfile(self) -> None: ... + def readline(self) -> AnyStr: ... + def filename(self) -> str: ... + def lineno(self) -> int: ... + def filelineno(self) -> int: ... + def fileno(self) -> int: ... + def isfirstline(self) -> bool: ... + def isstdin(self) -> bool: ... + +def hook_compressed(filename: _Path, mode: str) -> IO[Any]: ... +if sys.version_info >= (3, 6): + def hook_encoded(encoding: str, errors: Optional[str] = ...) -> Callable[[_Path, str], IO[Any]]: ... +else: + def hook_encoded(encoding: str) -> Callable[[_Path, str], IO[Any]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi new file mode 100644 index 0000000..77a4956 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/formatter.pyi @@ -0,0 +1,105 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/formatter.py +# and https://github.com/python/cpython/blob/master/Lib/formatter.py +from typing import Any, IO, List, Optional, Tuple + +AS_IS = None +_FontType = Tuple[str, bool, bool, bool] +_StylesType = Tuple[Any, ...] + +class NullFormatter: + writer: Optional[NullWriter] + def __init__(self, writer: Optional[NullWriter] = ...) -> None: ... + def end_paragraph(self, blankline: int) -> None: ... + def add_line_break(self) -> None: ... + def add_hor_rule(self, *args, **kw) -> None: ... + def add_label_data(self, format, counter: int, blankline: Optional[int] = ...) -> None: ... + def add_flowing_data(self, data: str) -> None: ... + def add_literal_data(self, data: str) -> None: ... + def flush_softspace(self) -> None: ... + def push_alignment(self, align: Optional[str]) -> None: ... + def pop_alignment(self) -> None: ... + def push_font(self, x: _FontType) -> None: ... + def pop_font(self) -> None: ... + def push_margin(self, margin: int) -> None: ... + def pop_margin(self) -> None: ... + def set_spacing(self, spacing: Optional[str]) -> None: ... + def push_style(self, *styles: _StylesType) -> None: ... + def pop_style(self, n: int = ...) -> None: ... + def assert_line_data(self, flag: int = ...) -> None: ... + +class AbstractFormatter: + writer: NullWriter + align: Optional[str] + align_stack: List[Optional[str]] + font_stack: List[_FontType] + margin_stack: List[int] + spacing: Optional[str] + style_stack: Any + nospace: int + softspace: int + para_end: int + parskip: int + hard_break: int + have_label: int + def __init__(self, writer: NullWriter) -> None: ... + def end_paragraph(self, blankline: int) -> None: ... + def add_line_break(self) -> None: ... + def add_hor_rule(self, *args, **kw) -> None: ... + def add_label_data(self, format, counter: int, blankline: Optional[int] = ...) -> None: ... + def format_counter(self, format, counter: int) -> str: ... + def format_letter(self, case: str, counter: int) -> str: ... + def format_roman(self, case: str, counter: int) -> str: ... + def add_flowing_data(self, data: str) -> None: ... + def add_literal_data(self, data: str) -> None: ... + def flush_softspace(self) -> None: ... + def push_alignment(self, align: Optional[str]) -> None: ... + def pop_alignment(self) -> None: ... + def push_font(self, font: _FontType) -> None: ... + def pop_font(self) -> None: ... + def push_margin(self, margin: int) -> None: ... + def pop_margin(self) -> None: ... + def set_spacing(self, spacing: Optional[str]) -> None: ... + def push_style(self, *styles: _StylesType) -> None: ... + def pop_style(self, n: int = ...) -> None: ... + def assert_line_data(self, flag: int = ...) -> None: ... + +class NullWriter: + def __init__(self) -> None: ... + def flush(self) -> None: ... + def new_alignment(self, align: Optional[str]) -> None: ... + def new_font(self, font: _FontType) -> None: ... + def new_margin(self, margin: int, level: int) -> None: ... + def new_spacing(self, spacing: Optional[str]) -> None: ... + def new_styles(self, styles) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_label_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + def send_literal_data(self, data: str) -> None: ... + +class AbstractWriter(NullWriter): + def new_alignment(self, align: Optional[str]) -> None: ... + def new_font(self, font: _FontType) -> None: ... + def new_margin(self, margin: int, level: int) -> None: ... + def new_spacing(self, spacing: Optional[str]) -> None: ... + def new_styles(self, styles) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_label_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + def send_literal_data(self, data: str) -> None: ... + +class DumbWriter(NullWriter): + file: IO + maxcol: int + def __init__(self, file: Optional[IO] = ..., maxcol: int = ...) -> None: ... + def reset(self) -> None: ... + def send_paragraph(self, blankline: int) -> None: ... + def send_line_break(self) -> None: ... + def send_hor_rule(self, *args, **kw) -> None: ... + def send_literal_data(self, data: str) -> None: ... + def send_flowing_data(self, data: str) -> None: ... + +def test(file: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi new file mode 100644 index 0000000..8bebe5f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/fractions.pyi @@ -0,0 +1,96 @@ +# Stubs for fractions +# See https://docs.python.org/3/library/fractions.html +# +# Note: these stubs are incomplete. The more complex type +# signatures are currently omitted. Also see numbers.pyi. + +from typing import Optional, TypeVar, Union, overload, Any +from numbers import Real, Integral, Rational +from decimal import Decimal +import sys + +_ComparableNum = Union[int, float, Decimal, Real] + + +@overload +def gcd(a: int, b: int) -> int: ... +@overload +def gcd(a: Integral, b: int) -> Integral: ... +@overload +def gcd(a: int, b: Integral) -> Integral: ... +@overload +def gcd(a: Integral, b: Integral) -> Integral: ... + + +class Fraction(Rational): + @overload + def __init__(self, + numerator: Union[int, Rational] = ..., + denominator: Optional[Union[int, Rational]] = ..., + *, + _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: float, *, _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: Decimal, *, _normalize: bool = ...) -> None: ... + @overload + def __init__(self, value: str, *, _normalize: bool = ...) -> None: ... + + @classmethod + def from_float(cls, f: float) -> Fraction: ... + @classmethod + def from_decimal(cls, dec: Decimal) -> Fraction: ... + def limit_denominator(self, max_denominator: int = ...) -> Fraction: ... + + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... + + def __add__(self, other): ... + def __radd__(self, other): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + def __mul__(self, other): ... + def __rmul__(self, other): ... + def __truediv__(self, other): ... + def __rtruediv__(self, other): ... + if sys.version_info < (3, 0): + def __div__(self, other): ... + def __rdiv__(self, other): ... + def __floordiv__(self, other) -> int: ... + def __rfloordiv__(self, other) -> int: ... + def __mod__(self, other): ... + def __rmod__(self, other): ... + def __divmod__(self, other): ... + def __rdivmod__(self, other): ... + def __pow__(self, other): ... + def __rpow__(self, other): ... + + def __pos__(self) -> Fraction: ... + def __neg__(self) -> Fraction: ... + def __abs__(self) -> Fraction: ... + def __trunc__(self) -> int: ... + if sys.version_info >= (3, 0): + def __floor__(self) -> int: ... + def __ceil__(self) -> int: ... + def __round__(self, ndigits: Optional[Any] = ...): ... + + def __hash__(self) -> int: ... + def __eq__(self, other: object) -> bool: ... + def __lt__(self, other: _ComparableNum) -> bool: ... + def __gt__(self, other: _ComparableNum) -> bool: ... + def __le__(self, other: _ComparableNum) -> bool: ... + def __ge__(self, other: _ComparableNum) -> bool: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + + # Not actually defined within fractions.py, but provides more useful + # overrides + @property + def real(self) -> Fraction: ... + @property + def imag(self) -> Fraction: ... + def conjugate(self) -> Fraction: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi new file mode 100644 index 0000000..dff8c47 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ftplib.pyi @@ -0,0 +1,134 @@ +# Stubs for ftplib (Python 2.7/3) +import sys +from typing import Optional, BinaryIO, Tuple, TextIO, Iterable, Callable, List, Union, Iterator, Dict, Text, Type, TypeVar, Generic, Any +from types import TracebackType +from socket import socket +from ssl import SSLContext + +_T = TypeVar('_T') +_IntOrStr = Union[int, Text] + +MSG_OOB: int +FTP_PORT: int +MAXLINE: int +CRLF: str +if sys.version_info >= (3,): + B_CRLF: bytes + +class Error(Exception): ... +class error_reply(Error): ... +class error_temp(Error): ... +class error_perm(Error): ... +class error_proto(Error): ... + +all_errors = Tuple[Exception, ...] + +class FTP: + debugging: int + + # Note: This is technically the type that's passed in as the host argument. But to make it easier in Python 2 we + # accept Text but return str. + host: str + + port: int + maxline: int + sock: Optional[socket] + welcome: Optional[str] + passiveserver: int + timeout: int + af: int + lastresp: str + + if sys.version_info >= (3,): + file: Optional[TextIO] + encoding: str + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + else: + file: Optional[BinaryIO] + + if sys.version_info >= (3, 3): + source_address: Optional[Tuple[str, int]] + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + timeout: float = ..., source_address: Optional[Tuple[str, int]] = ...) -> None: ... + def connect(self, host: Text = ..., port: int = ..., timeout: float = ..., + source_address: Optional[Tuple[str, int]] = ...) -> str: ... + else: + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + timeout: float = ...) -> None: ... + def connect(self, host: Text = ..., port: int = ..., timeout: float = ...) -> str: ... + + def getwelcome(self) -> str: ... + def set_debuglevel(self, level: int) -> None: ... + def debug(self, level: int) -> None: ... + def set_pasv(self, val: Union[bool, int]) -> None: ... + def sanitize(self, s: Text) -> str: ... + def putline(self, line: Text) -> None: ... + def putcmd(self, line: Text) -> None: ... + def getline(self) -> str: ... + def getmultiline(self) -> str: ... + def getresp(self) -> str: ... + def voidresp(self) -> str: ... + def abort(self) -> str: ... + def sendcmd(self, cmd: Text) -> str: ... + def voidcmd(self, cmd: Text) -> str: ... + def sendport(self, host: Text, port: int) -> str: ... + def sendeprt(self, host: Text, port: int) -> str: ... + def makeport(self) -> socket: ... + def makepasv(self) -> Tuple[str, int]: ... + def login(self, user: Text = ..., passwd: Text = ..., acct: Text = ...) -> str: ... + + # In practice, `rest` rest can actually be anything whose str() is an integer sequence, so to make it simple we allow integers. + def ntransfercmd(self, cmd: Text, rest: Optional[_IntOrStr] = ...) -> Tuple[socket, int]: ... + def transfercmd(self, cmd: Text, rest: Optional[_IntOrStr] = ...) -> socket: ... + def retrbinary(self, cmd: Text, callback: Callable[[bytes], Any], blocksize: int = ..., rest: Optional[_IntOrStr] = ...) -> str: ... + def storbinary(self, cmd: Text, fp: BinaryIO, blocksize: int = ..., callback: Optional[Callable[[bytes], Any]] = ..., rest: Optional[_IntOrStr] = ...) -> str: ... + + def retrlines(self, cmd: Text, callback: Optional[Callable[[str], Any]] = ...) -> str: ... + def storlines(self, cmd: Text, fp: BinaryIO, callback: Optional[Callable[[bytes], Any]] = ...) -> str: ... + + def acct(self, password: Text) -> str: ... + def nlst(self, *args: Text) -> List[str]: ... + + # Technically only the last arg can be a Callable but ... + def dir(self, *args: Union[str, Callable[[str], None]]) -> None: ... + + if sys.version_info >= (3, 3): + def mlsd(self, path: Text = ..., facts: Iterable[str] = ...) -> Iterator[Tuple[str, Dict[str, str]]]: ... + def rename(self, fromname: Text, toname: Text) -> str: ... + def delete(self, filename: Text) -> str: ... + def cwd(self, dirname: Text) -> str: ... + def size(self, filename: Text) -> str: ... + def mkd(self, dirname: Text) -> str: ... + def rmd(self, dirname: Text) -> str: ... + def pwd(self) -> str: ... + def quit(self) -> str: ... + def close(self) -> None: ... + +class FTP_TLS(FTP): + def __init__(self, host: Text = ..., user: Text = ..., passwd: Text = ..., acct: Text = ..., + keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + context: Optional[SSLContext] = ..., timeout: float = ..., + source_address: Optional[Tuple[str, int]] = ...) -> None: ... + + ssl_version: int + keyfile: Optional[str] + certfile: Optional[str] + context: SSLContext + + def login(self, user: Text = ..., passwd: Text = ..., acct: Text = ..., secure: bool = ...) -> str: ... + def auth(self) -> str: ... + def prot_p(self) -> str: ... + def prot_c(self) -> str: ... + + if sys.version_info >= (3, 3): + def ccc(self) -> str: ... + +if sys.version_info < (3,): + class Netrc: + def __init__(self, filename: Optional[Text] = ...) -> None: ... + def get_hosts(self) -> List[str]: ... + def get_account(self, host: Text) -> Tuple[Optional[str], Optional[str], Optional[str]]: ... + def get_macros(self) -> List[str]: ... + def get_macro(self, macro: Text) -> Tuple[str, ...]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi new file mode 100644 index 0000000..e0b1c6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/genericpath.pyi @@ -0,0 +1,21 @@ +from typing import Sequence, AnyStr, Text +import sys + +if sys.version_info >= (3, 0): + def commonprefix(m: Sequence[str]) -> str: ... +else: + def commonprefix(m: Sequence[AnyStr]) -> AnyStr: ... + +def exists(path: Text) -> bool: ... +def isfile(path: Text) -> bool: ... +def isdir(s: Text) -> bool: ... +def getsize(filename: Text) -> int: ... +def getmtime(filename: Text) -> float: ... +def getatime(filename: Text) -> float: ... +def getctime(filename: Text) -> float: ... + + +if sys.version_info >= (3, 4): + def samestat(s1: str, s2: str) -> int: ... + def samefile(f1: str, f2: str) -> int: ... + def sameopenfile(fp1: str, fp2: str) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/grp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/grp.pyi new file mode 100644 index 0000000..6054727 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/grp.pyi @@ -0,0 +1,10 @@ +from typing import List, NamedTuple, Optional + +struct_group = NamedTuple("struct_group", [("gr_name", str), + ("gr_passwd", Optional[str]), + ("gr_gid", int), + ("gr_mem", List[str])]) + +def getgrall() -> List[struct_group]: ... +def getgrgid(gid: int) -> struct_group: ... +def getgrnam(name: str) -> struct_group: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi new file mode 100644 index 0000000..47bbc7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/hmac.pyi @@ -0,0 +1,38 @@ +# Stubs for hmac + +from typing import Any, Callable, Optional, Union, overload, AnyStr +from types import ModuleType +import sys + +_B = Union[bytes, bytearray] + +# TODO more precise type for object of hashlib +_Hash = Any + +digest_size: None + +if sys.version_info >= (3, 4): + def new(key: _B, msg: Optional[_B] = ..., + digestmod: Optional[Union[str, Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ... +else: + def new(key: _B, msg: Optional[_B] = ..., + digestmod: Optional[Union[Callable[[], _Hash], ModuleType]] = ...) -> HMAC: ... + +class HMAC: + if sys.version_info >= (3,): + digest_size: int + if sys.version_info >= (3, 4): + block_size: int + name: str + def update(self, msg: _B) -> None: ... + def digest(self) -> bytes: ... + def hexdigest(self) -> str: ... + def copy(self) -> HMAC: ... + +@overload +def compare_digest(a: bytearray, b: bytearray) -> bool: ... +@overload +def compare_digest(a: AnyStr, b: AnyStr) -> bool: ... + +if sys.version_info >= (3, 7): + def digest(key: _B, msg: _B, digest: str) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi new file mode 100644 index 0000000..ab32e7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imaplib.pyi @@ -0,0 +1,133 @@ +# Stubs for imaplib (Python 2) + +import imaplib +import subprocess +import sys +import time +from socket import socket as _socket +from ssl import SSLSocket +from typing import Any, Callable, Dict, IO, List, Optional, Pattern, Text, Tuple, Type, Union + +CommandResults = Tuple[str, List[Any]] + + +class IMAP4: + error: Type[Exception] = ... + abort: Type[Exception] = ... + readonly: Type[Exception] = ... + mustquote: Pattern[Text] = ... + debug: int = ... + state: str = ... + literal: Optional[Text] = ... + tagged_commands: Dict[str, str] = ... + untagged_responses: Dict[str, str] = ... + continuation_response: str = ... + is_readonly: bool = ... + tagnum: int = ... + tagpre: str = ... + tagre: Pattern[Text] = ... + welcome: bytes = ... + capabilities: Tuple[str] = ... + PROTOCOL_VERSION: str = ... + def __init__(self, host: str, port: int) -> None: ... + def __getattr__(self, attr: str) -> Any: ... + host: str = ... + port: int = ... + sock: _socket = ... + file: Union[IO[Text], IO[bytes]] = ... + def open(self, host: str = ..., port: int = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + def socket(self) -> _socket: ... + def recent(self) -> CommandResults: ... + def response(self, code: str) -> CommandResults: ... + def append(self, mailbox: str, flags: str, date_time: str, message: str) -> str: ... + def authenticate(self, mechanism: str, authobject: Callable) -> Tuple[str, str]: ... + def capability(self) -> CommandResults: ... + def check(self) -> CommandResults: ... + def close(self) -> CommandResults: ... + def copy(self, message_set: str, new_mailbox: str) -> CommandResults: ... + def create(self, mailbox: str) -> CommandResults: ... + def delete(self, mailbox: str) -> CommandResults: ... + def deleteacl(self, mailbox: str, who: str) -> CommandResults: ... + def expunge(self) -> CommandResults: ... + def fetch(self, message_set: str, message_parts: str) -> CommandResults: ... + def getacl(self, mailbox: str) -> CommandResults: ... + def getannotation(self, mailbox: str, entry: str, attribute: str) -> CommandResults: ... + def getquota(self, root: str) -> CommandResults: ... + def getquotaroot(self, mailbox: str) -> CommandResults: ... + def list(self, directory: str = ..., pattern: str = ...) -> CommandResults: ... + def login(self, user: str, password: str) -> CommandResults: ... + def login_cram_md5(self, user: str, password: str) -> CommandResults: ... + def logout(self) -> CommandResults: ... + def lsub(self, directory: str = ..., pattern: str = ...) -> CommandResults: ... + def myrights(self, mailbox: str) -> CommandResults: ... + def namespace(self) -> CommandResults: ... + def noop(self) -> CommandResults: ... + def partial(self, message_num: str, message_part: str, start: str, length: str) -> CommandResults: ... + def proxyauth(self, user: str) -> CommandResults: ... + def rename(self, oldmailbox: str, newmailbox: str) -> CommandResults: ... + def search(self, charset: Optional[str], *criteria: str) -> CommandResults: ... + def select(self, mailbox: str = ..., readonly: bool = ...) -> CommandResults: ... + def setacl(self, mailbox: str, who: str, what: str) -> CommandResults: ... + def setannotation(self, *args: List[str]) -> CommandResults: ... + def setquota(self, root: str, limits: str) -> CommandResults: ... + def sort(self, sort_criteria: str, charset: str, *search_criteria: List[str]) -> CommandResults: ... + if sys.version_info >= (3,): + def starttls(self, ssl_context: Optional[Any] = ...) -> CommandResults: ... + def status(self, mailbox: str, names: str) -> CommandResults: ... + def store(self, message_set: str, command: str, flags: str) -> CommandResults: ... + def subscribe(self, mailbox: str) -> CommandResults: ... + def thread(self, threading_algorithm: str, charset: str, *search_criteria: List[str]) -> CommandResults: ... + def uid(self, command: str, *args: List[str]) -> CommandResults: ... + def unsubscribe(self, mailbox: str) -> CommandResults: ... + def xatom(self, name: str, *args: List[str]) -> CommandResults: ... + def print_log(self) -> None: ... + +class IMAP4_SSL(IMAP4): + keyfile: str = ... + certfile: str = ... + def __init__(self, host: str = ..., port: int = ..., keyfile: Optional[str] = ..., certfile: Optional[str] = ...) -> None: ... + host: str = ... + port: int = ... + sock: _socket = ... + sslobj: SSLSocket = ... + file: IO[Any] = ... + def open(self, host: str = ..., port: Optional[int] = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + def socket(self) -> _socket: ... + def ssl(self) -> SSLSocket: ... + + +class IMAP4_stream(IMAP4): + command: str = ... + def __init__(self, command: str) -> None: ... + host: str = ... + port: int = ... + sock: _socket = ... + file: IO[Any] = ... + process: subprocess.Popen = ... + writefile: IO[Any] = ... + readfile: IO[Any] = ... + def open(self, host: str = ..., port: Optional[int] = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def readline(self) -> bytes: ... + def send(self, data: bytes) -> None: ... + def shutdown(self) -> None: ... + +class _Authenticator: + mech: Callable = ... + def __init__(self, mechinst: Callable) -> None: ... + def process(self, data: str) -> str: ... + def encode(self, inp: bytes) -> str: ... + def decode(self, inp: str) -> bytes: ... + +def Internaldate2tuple(resp: str) -> time.struct_time: ... +def Int2AP(num: int) -> str: ... +def ParseFlags(resp: str) -> Tuple[str]: ... +def Time2Internaldate(date_time: Union[float, time.struct_time, str]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi new file mode 100644 index 0000000..b9d8d17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/imghdr.pyi @@ -0,0 +1,16 @@ +from typing import overload, Union, Text, BinaryIO, Optional, Any, List, Callable +import sys +import os + + +if sys.version_info >= (3, 6): + _File = Union[Text, os.PathLike[Text], BinaryIO] +else: + _File = Union[Text, BinaryIO] + + +@overload +def what(file: _File) -> Optional[str]: ... +@overload +def what(file: Any, h: bytes) -> Optional[str]: ... +tests: List[Callable[[bytes, BinaryIO], Optional[str]]] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi new file mode 100644 index 0000000..f9e3376 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/keyword.pyi @@ -0,0 +1,6 @@ +# Stubs for keyword + +from typing import Sequence, Text, Union + +def iskeyword(s: Union[Text, bytes]) -> bool: ... +kwlist: Sequence[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi new file mode 100644 index 0000000..145e31b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/__init__.pyi @@ -0,0 +1 @@ +# Stubs for lib2to3 (Python 3.6) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi new file mode 100644 index 0000000..1adc82a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/__init__.pyi @@ -0,0 +1,10 @@ +# Stubs for lib2to3.pgen2 (Python 3.6) + +import os +import sys +from typing import Text, Union + +if sys.version_info >= (3, 6): + _Path = Union[Text, os.PathLike] +else: + _Path = Text diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi new file mode 100644 index 0000000..56785f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/driver.pyi @@ -0,0 +1,24 @@ +# Stubs for lib2to3.pgen2.driver (Python 3.6) + +import os +import sys +from typing import Any, Callable, IO, Iterable, List, Optional, Text, Tuple, Union + +from logging import Logger +from lib2to3.pytree import _Convert, _NL +from lib2to3.pgen2 import _Path +from lib2to3.pgen2.grammar import Grammar + + +class Driver: + grammar: Grammar + logger: Logger + convert: _Convert + def __init__(self, grammar: Grammar, convert: Optional[_Convert] = ..., logger: Optional[Logger] = ...) -> None: ... + def parse_tokens(self, tokens: Iterable[Any], debug: bool = ...) -> _NL: ... + def parse_stream_raw(self, stream: IO[Text], debug: bool = ...) -> _NL: ... + def parse_stream(self, stream: IO[Text], debug: bool = ...) -> _NL: ... + def parse_file(self, filename: _Path, encoding: Optional[Text] = ..., debug: bool = ...) -> _NL: ... + def parse_string(self, text: Text, debug: bool = ...) -> _NL: ... + +def load_grammar(gt: Text = ..., gp: Optional[Text] = ..., save: bool = ..., force: bool = ..., logger: Optional[Logger] = ...) -> Grammar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi new file mode 100644 index 0000000..122d771 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/grammar.pyi @@ -0,0 +1,29 @@ +# Stubs for lib2to3.pgen2.grammar (Python 3.6) + +from lib2to3.pgen2 import _Path + +from typing import Any, Dict, List, Optional, Text, Tuple, TypeVar + +_P = TypeVar('_P') +_Label = Tuple[int, Optional[Text]] +_DFA = List[List[Tuple[int, int]]] +_DFAS = Tuple[_DFA, Dict[int, int]] + +class Grammar: + symbol2number: Dict[Text, int] + number2symbol: Dict[int, Text] + states: List[_DFA] + dfas: Dict[int, _DFAS] + labels: List[_Label] + keywords: Dict[Text, int] + tokens: Dict[int, int] + symbol2label: Dict[Text, int] + start: int + def __init__(self) -> None: ... + def dump(self, filename: _Path) -> None: ... + def load(self, filename: _Path) -> None: ... + def copy(self: _P) -> _P: ... + def report(self) -> None: ... + +opmap_raw: Text +opmap: Dict[Text, Text] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi new file mode 100644 index 0000000..8719500 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/literals.pyi @@ -0,0 +1,9 @@ +# Stubs for lib2to3.pgen2.literals (Python 3.6) + +from typing import Dict, Match, Text + +simple_escapes: Dict[Text, Text] + +def escape(m: Match) -> Text: ... +def evalString(s: Text) -> Text: ... +def test() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi new file mode 100644 index 0000000..101d476 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/parse.pyi @@ -0,0 +1,29 @@ +# Stubs for lib2to3.pgen2.parse (Python 3.6) + +from typing import Any, Dict, List, Optional, Sequence, Set, Text, Tuple + +from lib2to3.pgen2.grammar import Grammar, _DFAS +from lib2to3.pytree import _NL, _Convert, _RawNode + +_Context = Sequence[Any] + +class ParseError(Exception): + msg: Text + type: int + value: Optional[Text] + context: _Context + def __init__(self, msg: Text, type: int, value: Optional[Text], context: _Context) -> None: ... + +class Parser: + grammar: Grammar + convert: _Convert + stack: List[Tuple[_DFAS, int, _RawNode]] + rootnode: Optional[_NL] + used_names: Set[Text] + def __init__(self, grammar: Grammar, convert: Optional[_Convert] = ...) -> None: ... + def setup(self, start: Optional[int] = ...) -> None: ... + def addtoken(self, type: int, value: Optional[Text], context: _Context) -> bool: ... + def classify(self, type: int, value: Optional[Text], context: _Context) -> int: ... + def shift(self, type: int, value: Optional[Text], newstate: int, context: _Context) -> None: ... + def push(self, type: int, newdfa: _DFAS, newstate: int, context: _Context) -> None: ... + def pop(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi new file mode 100644 index 0000000..42d503b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/pgen.pyi @@ -0,0 +1,50 @@ +# Stubs for lib2to3.pgen2.pgen (Python 3.6) + +from typing import ( + Any, Dict, IO, Iterable, Iterator, List, NoReturn, Optional, Text, Tuple +) + +from lib2to3.pgen2 import _Path, grammar +from lib2to3.pgen2.tokenize import _TokenInfo + +class PgenGrammar(grammar.Grammar): ... + +class ParserGenerator: + filename: _Path + stream: IO[Text] + generator: Iterator[_TokenInfo] + first: Dict[Text, Dict[Text, int]] + def __init__(self, filename: _Path, stream: Optional[IO[Text]] = ...) -> None: ... + def make_grammar(self) -> PgenGrammar: ... + def make_first(self, c: PgenGrammar, name: Text) -> Dict[int, int]: ... + def make_label(self, c: PgenGrammar, label: Text) -> int: ... + def addfirstsets(self) -> None: ... + def calcfirst(self, name: Text) -> None: ... + def parse(self) -> Tuple[Dict[Text, List[DFAState]], Text]: ... + def make_dfa(self, start: NFAState, finish: NFAState) -> List[DFAState]: ... + def dump_nfa(self, name: Text, start: NFAState, finish: NFAState) -> List[DFAState]: ... + def dump_dfa(self, name: Text, dfa: Iterable[DFAState]) -> None: ... + def simplify_dfa(self, dfa: List[DFAState]) -> None: ... + def parse_rhs(self) -> Tuple[NFAState, NFAState]: ... + def parse_alt(self) -> Tuple[NFAState, NFAState]: ... + def parse_item(self) -> Tuple[NFAState, NFAState]: ... + def parse_atom(self) -> Tuple[NFAState, NFAState]: ... + def expect(self, type: int, value: Optional[Any] = ...) -> Text: ... + def gettoken(self) -> None: ... + def raise_error(self, msg: str, *args: Any) -> NoReturn: ... + +class NFAState: + arcs: List[Tuple[Optional[Text], NFAState]] + def __init__(self) -> None: ... + def addarc(self, next: NFAState, label: Optional[Text] = ...) -> None: ... + +class DFAState: + nfaset: Dict[NFAState, Any] + isfinal: bool + arcs: Dict[Text, DFAState] + def __init__(self, nfaset: Dict[NFAState, Any], final: NFAState) -> None: ... + def addarc(self, next: DFAState, label: Text) -> None: ... + def unifystate(self, old: DFAState, new: DFAState) -> None: ... + def __eq__(self, other: Any) -> bool: ... + +def generate_grammar(filename: _Path = ...) -> PgenGrammar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi new file mode 100644 index 0000000..c256af8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/token.pyi @@ -0,0 +1,73 @@ +# Stubs for lib2to3.pgen2.token (Python 3.6) + +import sys +from typing import Dict, Text + +ENDMARKER: int +NAME: int +NUMBER: int +STRING: int +NEWLINE: int +INDENT: int +DEDENT: int +LPAR: int +RPAR: int +LSQB: int +RSQB: int +COLON: int +COMMA: int +SEMI: int +PLUS: int +MINUS: int +STAR: int +SLASH: int +VBAR: int +AMPER: int +LESS: int +GREATER: int +EQUAL: int +DOT: int +PERCENT: int +BACKQUOTE: int +LBRACE: int +RBRACE: int +EQEQUAL: int +NOTEQUAL: int +LESSEQUAL: int +GREATEREQUAL: int +TILDE: int +CIRCUMFLEX: int +LEFTSHIFT: int +RIGHTSHIFT: int +DOUBLESTAR: int +PLUSEQUAL: int +MINEQUAL: int +STAREQUAL: int +SLASHEQUAL: int +PERCENTEQUAL: int +AMPEREQUAL: int +VBAREQUAL: int +CIRCUMFLEXEQUAL: int +LEFTSHIFTEQUAL: int +RIGHTSHIFTEQUAL: int +DOUBLESTAREQUAL: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +OP: int +COMMENT: int +NL: int +if sys.version_info >= (3,): + RARROW: int +if sys.version_info >= (3, 5): + AT: int + ATEQUAL: int + AWAIT: int + ASYNC: int +ERRORTOKEN: int +N_TOKENS: int +NT_OFFSET: int +tok_name: Dict[int, Text] + +def ISTERMINAL(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISEOF(x: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi new file mode 100644 index 0000000..c10305f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pgen2/tokenize.pyi @@ -0,0 +1,30 @@ +# Stubs for lib2to3.pgen2.tokenize (Python 3.6) +# NOTE: Only elements from __all__ are present. + +from typing import Callable, Iterable, Iterator, List, Text, Tuple +from lib2to3.pgen2.token import * # noqa + + +_Coord = Tuple[int, int] +_TokenEater = Callable[[int, Text, _Coord, _Coord, Text], None] +_TokenInfo = Tuple[int, Text, _Coord, _Coord, Text] + + +class TokenError(Exception): ... +class StopTokenizing(Exception): ... + +def tokenize(readline: Callable[[], Text], tokeneater: _TokenEater = ...) -> None: ... + +class Untokenizer: + tokens: List[Text] + prev_row: int + prev_col: int + def __init__(self) -> None: ... + def add_whitespace(self, start: _Coord) -> None: ... + def untokenize(self, iterable: Iterable[_TokenInfo]) -> Text: ... + def compat(self, token: Tuple[int, Text], iterable: Iterable[_TokenInfo]) -> None: ... + +def untokenize(iterable: Iterable[_TokenInfo]) -> Text: ... +def generate_tokens( + readline: Callable[[], Text] +) -> Iterator[_TokenInfo]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi new file mode 100644 index 0000000..aeb7b93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pygram.pyi @@ -0,0 +1,116 @@ +# Stubs for lib2to3.pygram (Python 3.6) + +from typing import Any +from lib2to3.pgen2.grammar import Grammar + +class Symbols: + def __init__(self, grammar: Grammar) -> None: ... + +class python_symbols(Symbols): + and_expr: int + and_test: int + annassign: int + arglist: int + argument: int + arith_expr: int + assert_stmt: int + async_funcdef: int + async_stmt: int + atom: int + augassign: int + break_stmt: int + classdef: int + comp_for: int + comp_if: int + comp_iter: int + comp_op: int + comparison: int + compound_stmt: int + continue_stmt: int + decorated: int + decorator: int + decorators: int + del_stmt: int + dictsetmaker: int + dotted_as_name: int + dotted_as_names: int + dotted_name: int + encoding_decl: int + eval_input: int + except_clause: int + exec_stmt: int + expr: int + expr_stmt: int + exprlist: int + factor: int + file_input: int + flow_stmt: int + for_stmt: int + funcdef: int + global_stmt: int + if_stmt: int + import_as_name: int + import_as_names: int + import_from: int + import_name: int + import_stmt: int + lambdef: int + listmaker: int + not_test: int + old_lambdef: int + old_test: int + or_test: int + parameters: int + pass_stmt: int + power: int + print_stmt: int + raise_stmt: int + return_stmt: int + shift_expr: int + simple_stmt: int + single_input: int + sliceop: int + small_stmt: int + star_expr: int + stmt: int + subscript: int + subscriptlist: int + suite: int + term: int + test: int + testlist: int + testlist1: int + testlist_gexp: int + testlist_safe: int + testlist_star_expr: int + tfpdef: int + tfplist: int + tname: int + trailer: int + try_stmt: int + typedargslist: int + varargslist: int + vfpdef: int + vfplist: int + vname: int + while_stmt: int + with_item: int + with_stmt: int + with_var: int + xor_expr: int + yield_arg: int + yield_expr: int + yield_stmt: int + +class pattern_symbols(Symbols): + Alternative: int + Alternatives: int + Details: int + Matcher: int + NegatedUnit: int + Repeater: int + Unit: int + +python_grammar: Grammar +python_grammar_no_print_statement: Grammar +pattern_grammar: Grammar diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi new file mode 100644 index 0000000..06a7c12 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/lib2to3/pytree.pyi @@ -0,0 +1,86 @@ +# Stubs for lib2to3.pytree (Python 3.6) + +import sys +from typing import Any, Callable, Dict, Iterator, List, Optional, Text, Tuple, TypeVar, Union + +from lib2to3.pgen2.grammar import Grammar + +_P = TypeVar('_P') +_NL = Union[Node, Leaf] +_Context = Tuple[Text, int, int] +_Results = Dict[Text, _NL] +_RawNode = Tuple[int, Text, _Context, Optional[List[_NL]]] +_Convert = Callable[[Grammar, _RawNode], Any] + +HUGE: int + +def type_repr(type_num: int) -> Text: ... + +class Base: + type: int + parent: Optional[Node] + prefix: Text + children: List[_NL] + was_changed: bool + was_checked: bool + def __eq__(self, other: Any) -> bool: ... + def _eq(self: _P, other: _P) -> bool: ... + def clone(self: _P) -> _P: ... + def post_order(self) -> Iterator[_NL]: ... + def pre_order(self) -> Iterator[_NL]: ... + def replace(self, new: Union[_NL, List[_NL]]) -> None: ... + def get_lineno(self) -> int: ... + def changed(self) -> None: ... + def remove(self) -> Optional[int]: ... + @property + def next_sibling(self) -> Optional[_NL]: ... + @property + def prev_sibling(self) -> Optional[_NL]: ... + def leaves(self) -> Iterator[Leaf]: ... + def depth(self) -> int: ... + def get_suffix(self) -> Text: ... + if sys.version_info < (3,): + def get_prefix(self) -> Text: ... + def set_prefix(self, prefix: Text) -> None: ... + +class Node(Base): + fixers_applied: List[Any] + def __init__(self, type: int, children: List[_NL], context: Optional[Any] = ..., prefix: Optional[Text] = ..., fixers_applied: Optional[List[Any]] = ...) -> None: ... + def set_child(self, i: int, child: _NL) -> None: ... + def insert_child(self, i: int, child: _NL) -> None: ... + def append_child(self, child: _NL) -> None: ... + +class Leaf(Base): + lineno: int + column: int + value: Text + fixers_applied: List[Any] + def __init__(self, type: int, value: Text, context: Optional[_Context] = ..., prefix: Optional[Text] = ..., fixers_applied: List[Any] = ...) -> None: ... + +def convert(gr: Grammar, raw_node: _RawNode) -> _NL: ... + +class BasePattern: + type: int + content: Optional[Text] + name: Optional[Text] + def optimize(self) -> BasePattern: ... # sic, subclasses are free to optimize themselves into different patterns + def match(self, node: _NL, results: Optional[_Results] = ...) -> bool: ... + def match_seq(self, nodes: List[_NL], results: Optional[_Results] = ...) -> bool: ... + def generate_matches(self, nodes: List[_NL]) -> Iterator[Tuple[int, _Results]]: ... + +class LeafPattern(BasePattern): + def __init__(self, type: Optional[int] = ..., content: Optional[Text] = ..., name: Optional[Text] = ...) -> None: ... + +class NodePattern(BasePattern): + wildcards: bool + def __init__(self, type: Optional[int] = ..., content: Optional[Text] = ..., name: Optional[Text] = ...) -> None: ... + +class WildcardPattern(BasePattern): + min: int + max: int + def __init__(self, content: Optional[Text] = ..., min: int = ..., max: int = ..., name: Optional[Text] = ...) -> None: ... + +class NegatedPattern(BasePattern): + def __init__(self, content: Optional[Text] = ...) -> None: ... + +def generate_matches(patterns: List[BasePattern], nodes: List[_NL]) -> Iterator[Tuple[int, _Results]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi new file mode 100644 index 0000000..3f35f46 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/linecache.pyi @@ -0,0 +1,12 @@ +import sys +from typing import Any, Dict, List, Optional, Text + +_ModuleGlobals = Dict[str, Any] + +def getline(filename: Text, lineno: int, module_globals: Optional[_ModuleGlobals] = ...) -> str: ... +def clearcache() -> None: ... +def getlines(filename: Text, module_globals: Optional[_ModuleGlobals] = ...) -> List[str]: ... +def checkcache(filename: Optional[Text] = ...) -> None: ... +def updatecache(filename: Text, module_globals: Optional[_ModuleGlobals] = ...) -> List[str]: ... +if sys.version_info >= (3, 5): + def lazycache(filename: Text, module_globals: _ModuleGlobals) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/locale.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/locale.pyi new file mode 100644 index 0000000..a0d7383 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/locale.pyi @@ -0,0 +1,113 @@ +# Stubs for locale + +from decimal import Decimal +from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple, Union +import sys + +# workaround for mypy#2010 +if sys.version_info < (3,): + from __builtin__ import str as _str +else: + from builtins import str as _str + +CODESET: int +D_T_FMT: int +D_FMT: int +T_FMT: int +T_FMT_AMPM: int + +DAY_1: int +DAY_2: int +DAY_3: int +DAY_4: int +DAY_5: int +DAY_6: int +DAY_7: int +ABDAY_1: int +ABDAY_2: int +ABDAY_3: int +ABDAY_4: int +ABDAY_5: int +ABDAY_6: int +ABDAY_7: int + +MON_1: int +MON_2: int +MON_3: int +MON_4: int +MON_5: int +MON_6: int +MON_7: int +MON_8: int +MON_9: int +MON_10: int +MON_11: int +MON_12: int +ABMON_1: int +ABMON_2: int +ABMON_3: int +ABMON_4: int +ABMON_5: int +ABMON_6: int +ABMON_7: int +ABMON_8: int +ABMON_9: int +ABMON_10: int +ABMON_11: int +ABMON_12: int + +RADIXCHAR: int +THOUSEP: int +YESEXPR: int +NOEXPR: int +CRNCYSTR: int + +ERA: int +ERA_D_T_FMT: int +ERA_D_FMT: int +ERA_T_FMT: int + +ALT_DIGITS: int + +LC_CTYPE: int +LC_COLLATE: int +LC_TIME: int +LC_MONETARY: int +LC_MESSAGES: int +LC_NUMERIC: int +LC_ALL: int + +CHAR_MAX: int + +class Error(Exception): ... + +def setlocale(category: int, + locale: Union[_str, Iterable[_str], None] = ...) -> _str: ... +def localeconv() -> Mapping[_str, Union[int, _str, List[int]]]: ... +def nl_langinfo(option: int) -> _str: ... +def getdefaultlocale(envvars: Tuple[_str, ...] = ...) -> Tuple[Optional[_str], Optional[_str]]: ... +def getlocale(category: int = ...) -> Sequence[_str]: ... +def getpreferredencoding(do_setlocale: bool = ...) -> _str: ... +def normalize(localename: _str) -> _str: ... +def resetlocale(category: int = ...) -> None: ... +def strcoll(string1: _str, string2: _str) -> int: ... +def strxfrm(string: _str) -> _str: ... +def format(format: _str, val: Union[float, Decimal], grouping: bool = ..., + monetary: bool = ...) -> _str: ... +if sys.version_info >= (3, 7): + def format_string(format: _str, val: Any, + grouping: bool = ..., monetary: bool = ...) -> _str: ... +else: + def format_string(format: _str, val: Any, + grouping: bool = ...) -> _str: ... +def currency(val: Union[int, float, Decimal], symbol: bool = ..., grouping: bool = ..., + international: bool = ...) -> _str: ... +if sys.version_info >= (3, 5): + def delocalize(string: _str) -> None: ... +def atof(string: _str) -> float: ... +def atoi(string: _str) -> int: ... +def str(float: float) -> _str: ... + +locale_alias: Dict[_str, _str] # undocumented +locale_encoding_alias: Dict[_str, _str] # undocumented +windows_locale: Dict[int, _str] # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi new file mode 100644 index 0000000..d736b08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/__init__.pyi @@ -0,0 +1,433 @@ +# Stubs for logging (Python 3.4) + +from typing import ( + Any, Callable, Dict, Iterable, List, Mapping, MutableMapping, Optional, IO, + Tuple, Text, Union, overload, +) +from string import Template +from time import struct_time +from types import TracebackType, FrameType +import sys +import threading + +_SysExcInfoType = Union[Tuple[type, BaseException, Optional[TracebackType]], + Tuple[None, None, None]] +if sys.version_info >= (3, 5): + _ExcInfoType = Union[None, bool, _SysExcInfoType, BaseException] +else: + _ExcInfoType = Union[None, bool, _SysExcInfoType] +_ArgsType = Union[Tuple[Any, ...], Mapping[str, Any]] +_FilterType = Union[Filter, Callable[[LogRecord], int]] +_Level = Union[int, Text] +if sys.version_info >= (3, 6): + from os import PathLike + _Path = Union[str, PathLike[str]] +else: + _Path = str + +raiseExceptions: bool + +def currentframe() -> FrameType: ... + +if sys.version_info >= (3,): + _levelToName: Dict[int, str] + _nameToLevel: Dict[str, int] +else: + _levelNames: dict + +class Filterer(object): + filters: List[Filter] + def __init__(self) -> None: ... + def addFilter(self, filter: Filter) -> None: ... + def removeFilter(self, filter: Filter) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + +class Logger(Filterer): + name: str + level: int + parent: Union[Logger, PlaceHolder] + propagate: bool + handlers: List[Handler] + disabled: int + def __init__(self, name: str, level: _Level = ...) -> None: ... + def setLevel(self, level: Union[int, str]) -> None: ... + def isEnabledFor(self, lvl: int) -> bool: ... + def getEffectiveLevel(self) -> int: ... + def getChild(self, suffix: str) -> Logger: ... + if sys.version_info >= (3,): + def debug(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + fatal = critical + def log(self, level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + else: + def debug(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + warn = warning + def error(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + fatal = critical + def log(self, + level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def addFilter(self, filt: _FilterType) -> None: ... + def removeFilter(self, filt: _FilterType) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + def addHandler(self, hdlr: Handler) -> None: ... + def removeHandler(self, hdlr: Handler) -> None: ... + if sys.version_info >= (3,): + def findCaller(self, stack_info: bool = ...) -> Tuple[str, int, str, Optional[str]]: ... + else: + def findCaller(self) -> Tuple[str, int, str]: ... + def handle(self, record: LogRecord) -> None: ... + if sys.version_info >= (3,): + def makeRecord(self, name: str, lvl: int, fn: str, lno: int, msg: Any, + args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + extra: Optional[Mapping[str, Any]] = ..., + sinfo: Optional[str] = ...) -> LogRecord: ... + else: + def makeRecord(self, + name: str, lvl: int, fn: str, lno: int, msg: Any, + args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + extra: Optional[Mapping[str, Any]] = ...) -> LogRecord: ... + if sys.version_info >= (3,): + def hasHandlers(self) -> bool: ... + + +CRITICAL: int +FATAL: int +ERROR: int +WARNING: int +WARN: int +INFO: int +DEBUG: int +NOTSET: int + + +class Handler(Filterer): + level: int # undocumented + formatter: Optional[Formatter] # undocumented + lock: Optional[threading.Lock] # undocumented + name: Optional[str] # undocumented + def __init__(self, level: _Level = ...) -> None: ... + def createLock(self) -> None: ... + def acquire(self) -> None: ... + def release(self) -> None: ... + def setLevel(self, lvl: Union[int, str]) -> None: ... + def setFormatter(self, form: Formatter) -> None: ... + def addFilter(self, filt: _FilterType) -> None: ... + def removeFilter(self, filt: _FilterType) -> None: ... + def filter(self, record: LogRecord) -> bool: ... + def flush(self) -> None: ... + def close(self) -> None: ... + def handle(self, record: LogRecord) -> None: ... + def handleError(self, record: LogRecord) -> None: ... + def format(self, record: LogRecord) -> str: ... + def emit(self, record: LogRecord) -> None: ... + + +class Formatter: + converter: Callable[[Optional[float]], struct_time] + _fmt: Optional[str] + datefmt: Optional[str] + if sys.version_info >= (3,): + _style: PercentStyle + default_time_format: str + default_msec_format: str + + if sys.version_info >= (3,): + def __init__(self, fmt: Optional[str] = ..., + datefmt: Optional[str] = ..., + style: str = ...) -> None: ... + else: + def __init__(self, + fmt: Optional[str] = ..., + datefmt: Optional[str] = ...) -> None: ... + + def format(self, record: LogRecord) -> str: ... + def formatTime(self, record: LogRecord, datefmt: str = ...) -> str: ... + def formatException(self, exc_info: _SysExcInfoType) -> str: ... + if sys.version_info >= (3,): + def formatMessage(self, record: LogRecord) -> str: ... # undocumented + def formatStack(self, stack_info: str) -> str: ... + + +class Filter: + def __init__(self, name: str = ...) -> None: ... + def filter(self, record: LogRecord) -> int: ... + + +class LogRecord: + args: _ArgsType + asctime: str + created: int + exc_info: Optional[_SysExcInfoType] + exc_text: Optional[str] + filename: str + funcName: str + levelname: str + levelno: int + lineno: int + module: str + msecs: int + message: str + msg: str + name: str + pathname: str + process: int + processName: str + relativeCreated: int + if sys.version_info >= (3,): + stack_info: Optional[str] + thread: int + threadName: str + if sys.version_info >= (3,): + def __init__(self, name: str, level: int, pathname: str, lineno: int, + msg: Any, args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ..., + sinfo: Optional[str] = ...) -> None: ... + else: + def __init__(self, + name: str, level: int, pathname: str, lineno: int, + msg: Any, args: _ArgsType, + exc_info: Optional[_SysExcInfoType], + func: Optional[str] = ...) -> None: ... + def getMessage(self) -> str: ... + + +class LoggerAdapter: + logger: Logger + extra: Mapping[str, Any] + def __init__(self, logger: Logger, extra: Mapping[str, Any]) -> None: ... + def process(self, msg: Any, kwargs: MutableMapping[str, Any]) -> Tuple[Any, MutableMapping[str, Any]]: ... + if sys.version_info >= (3,): + def debug(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(self, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def log(self, level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + else: + def debug(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def error(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(self, + msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def log(self, + level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def isEnabledFor(self, lvl: int) -> bool: ... + if sys.version_info >= (3,): + def getEffectiveLevel(self) -> int: ... + def setLevel(self, lvl: Union[int, str]) -> None: ... + def hasHandlers(self) -> bool: ... + + +if sys.version_info >= (3,): + def getLogger(name: Optional[str] = ...) -> Logger: ... +else: + @overload + def getLogger() -> Logger: ... + @overload + def getLogger(name: Union[Text, str]) -> Logger: ... +def getLoggerClass() -> type: ... +if sys.version_info >= (3,): + def getLogRecordFactory() -> Callable[..., LogRecord]: ... + +if sys.version_info >= (3,): + def debug(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def info(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warning(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def warn(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def error(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def critical(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def exception(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... + def log(level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + stack_info: bool = ..., extra: Optional[Dict[str, Any]] = ..., + **kwargs: Any) -> None: ... +else: + def debug(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def info(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def warning(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + warn = warning + def error(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def critical(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def exception(msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... + def log(level: int, msg: Any, *args: Any, exc_info: _ExcInfoType = ..., + extra: Optional[Dict[str, Any]] = ..., **kwargs: Any) -> None: ... +fatal = critical + +def disable(lvl: int) -> None: ... +def addLevelName(lvl: int, levelName: str) -> None: ... +def getLevelName(lvl: Union[int, str]) -> Any: ... + +def makeLogRecord(attrdict: Mapping[str, Any]) -> LogRecord: ... + +if sys.version_info >= (3,): + def basicConfig(*, filename: _Path = ..., filemode: str = ..., + format: str = ..., datefmt: str = ..., style: str = ..., + level: _Level = ..., stream: IO[str] = ..., + handlers: Iterable[Handler] = ...) -> None: ... +else: + @overload + def basicConfig() -> None: ... + @overload + def basicConfig(*, filename: str = ..., filemode: str = ..., + format: str = ..., datefmt: str = ..., + level: _Level = ..., stream: IO[str] = ...) -> None: ... +def shutdown() -> None: ... + +def setLoggerClass(klass: type) -> None: ... + +def captureWarnings(capture: bool) -> None: ... + +if sys.version_info >= (3,): + def setLogRecordFactory(factory: Callable[..., LogRecord]) -> None: ... + + +if sys.version_info >= (3,): + lastResort: Optional[StreamHandler] + + +class StreamHandler(Handler): + stream: IO[str] + if sys.version_info >= (3,): + terminator: str + def __init__(self, stream: Optional[IO[str]] = ...) -> None: ... + + +class FileHandler(Handler): + baseFilename: str + mode: str + encoding: Optional[str] + delay: bool + def __init__(self, filename: _Path, mode: str = ..., + encoding: Optional[str] = ..., delay: bool = ...) -> None: ... + + +class NullHandler(Handler): ... + + +class PlaceHolder: + def __init__(self, alogger: Logger) -> None: ... + def append(self, alogger: Logger) -> None: ... + + +# Below aren't in module docs but still visible + +class RootLogger(Logger): ... + +root: RootLogger + + +if sys.version_info >= (3,): + class PercentStyle(object): + default_format: str + asctime_format: str + asctime_search: str + _fmt: str + + def __init__(self, fmt: str) -> None: ... + def usesTime(self) -> bool: ... + def format(self, record: Any) -> str: ... + + class StrFormatStyle(PercentStyle): + ... + + class StringTemplateStyle(PercentStyle): + _tpl: Template + + _STYLES: Dict[str, Tuple[PercentStyle, str]] + + +BASIC_FORMAT: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi new file mode 100644 index 0000000..c8dbfdf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/config.pyi @@ -0,0 +1,33 @@ +# Stubs for logging.config (Python 3.4) + +from typing import Any, Callable, Dict, Optional, IO, Union +from threading import Thread +import sys +if sys.version_info >= (3,): + from configparser import RawConfigParser +else: + from ConfigParser import RawConfigParser +if sys.version_info >= (3, 6): + from os import PathLike + +if sys.version_info >= (3, 7): + _Path = Union[str, bytes, PathLike[str]] +elif sys.version_info >= (3, 6): + _Path = Union[str, PathLike[str]] +else: + _Path = str + + +def dictConfig(config: Dict[str, Any]) -> None: ... +if sys.version_info >= (3, 4): + def fileConfig(fname: Union[_Path, IO[str], RawConfigParser], + defaults: Optional[Dict[str, str]] = ..., + disable_existing_loggers: bool = ...) -> None: ... + def listen(port: int = ..., + verify: Optional[Callable[[bytes], Optional[bytes]]] = ...) -> Thread: ... +else: + def fileConfig(fname: Union[str, IO[str]], + defaults: Optional[Dict[str, str]] = ..., + disable_existing_loggers: bool = ...) -> None: ... + def listen(port: int = ...) -> Thread: ... +def stopListening() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi new file mode 100644 index 0000000..c18ddcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/logging/handlers.pyi @@ -0,0 +1,213 @@ +# Stubs for logging.handlers (Python 2.4) + +import datetime +from logging import Handler, FileHandler, LogRecord +from socket import SocketType +import ssl +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple, Union, overload +if sys.version_info >= (3,): + from queue import Queue +else: + from Queue import Queue + +# TODO update socket stubs to add SocketKind +_SocketKind = int +if sys.version_info >= (3, 6): + from os import PathLike + _Path = Union[str, PathLike[str]] +else: + _Path = str + +DEFAULT_TCP_LOGGING_PORT: int +DEFAULT_UDP_LOGGING_PORT: int +DEFAULT_HTTP_LOGGING_PORT: int +DEFAULT_SOAP_LOGGING_PORT: int +SYSLOG_UDP_PORT: int +SYSLOG_TCP_PORT: int + +class WatchedFileHandler(FileHandler): + @overload + def __init__(self, filename: _Path) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str, + encoding: Optional[str]) -> None: ... + @overload + def __init__(self, filename: _Path, mode: str, encoding: Optional[str], + delay: bool) -> None: ... + + +if sys.version_info >= (3,): + class BaseRotatingHandler(FileHandler): + terminator: str + namer: Optional[Callable[[str], str]] + rotator: Optional[Callable[[str, str], None]] + def __init__(self, filename: _Path, mode: str, + encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def rotation_filename(self, default_name: str) -> None: ... + def rotate(self, source: str, dest: str) -> None: ... + + +if sys.version_info >= (3,): + class RotatingFileHandler(BaseRotatingHandler): + def __init__(self, filename: _Path, mode: str = ..., maxBytes: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def doRollover(self) -> None: ... +else: + class RotatingFileHandler(Handler): + def __init__(self, filename: str, mode: str = ..., maxBytes: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ...) -> None: ... + def doRollover(self) -> None: ... + + +if sys.version_info >= (3,): + class TimedRotatingFileHandler(BaseRotatingHandler): + if sys.version_info >= (3, 4): + def __init__(self, filename: _Path, when: str = ..., + interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ..., + atTime: Optional[datetime.datetime] = ...) -> None: ... + else: + def __init__(self, + filename: str, when: str = ..., interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ...) -> None: ... + def doRollover(self) -> None: ... +else: + class TimedRotatingFileHandler(Handler): + def __init__(self, + filename: str, when: str = ..., interval: int = ..., + backupCount: int = ..., encoding: Optional[str] = ..., + delay: bool = ..., utc: bool = ...) -> None: ... + def doRollover(self) -> None: ... + + +class SocketHandler(Handler): + retryStart: float + retryFactor: float + retryMax: float + if sys.version_info >= (3, 4): + def __init__(self, host: str, port: Optional[int]) -> None: ... + else: + def __init__(self, host: str, port: int) -> None: ... + def makeSocket(self) -> SocketType: ... + def makePickle(self, record: LogRecord) -> bytes: ... + def send(self, packet: bytes) -> None: ... + def createSocket(self) -> None: ... + + +class DatagramHandler(SocketHandler): ... + + +class SysLogHandler(Handler): + LOG_ALERT: int + LOG_CRIT: int + LOG_DEBUG: int + LOG_EMERG: int + LOG_ERR: int + LOG_INFO: int + LOG_NOTICE: int + LOG_WARNING: int + LOG_AUTH: int + LOG_AUTHPRIV: int + LOG_CRON: int + LOG_DAEMON: int + LOG_FTP: int + LOG_KERN: int + LOG_LPR: int + LOG_MAIL: int + LOG_NEWS: int + LOG_SYSLOG: int + LOG_USER: int + LOG_UUCP: int + LOG_LOCAL0: int + LOG_LOCAL1: int + LOG_LOCAL2: int + LOG_LOCAL3: int + LOG_LOCAL4: int + LOG_LOCAL5: int + LOG_LOCAL6: int + LOG_LOCAL7: int + def __init__(self, address: Union[Tuple[str, int], str] = ..., + facility: int = ..., socktype: _SocketKind = ...) -> None: ... + def encodePriority(self, facility: Union[int, str], + priority: Union[int, str]) -> int: ... + def mapPriority(self, levelName: str) -> str: ... + + +class NTEventLogHandler(Handler): + def __init__(self, appname: str, dllname: str = ..., + logtype: str = ...) -> None: ... + def getEventCategory(self, record: LogRecord) -> int: ... + # TODO correct return value? + def getEventType(self, record: LogRecord) -> int: ... + def getMessageID(self, record: LogRecord) -> int: ... + + +class SMTPHandler(Handler): + # TODO `secure` can also be an empty tuple + if sys.version_info >= (3,): + def __init__(self, mailhost: Union[str, Tuple[str, int]], fromaddr: str, + toaddrs: List[str], subject: str, + credentials: Optional[Tuple[str, str]] = ..., + secure: Union[Tuple[str], Tuple[str, str], None] = ..., + timeout: float = ...) -> None: ... + else: + def __init__(self, + mailhost: Union[str, Tuple[str, int]], fromaddr: str, + toaddrs: List[str], subject: str, + credentials: Optional[Tuple[str, str]] = ..., + secure: Union[Tuple[str], Tuple[str, str], None] = ...) -> None: ... + def getSubject(self, record: LogRecord) -> str: ... + + +class BufferingHandler(Handler): + def __init__(self, capacity: int) -> None: ... + def shouldFlush(self, record: LogRecord) -> bool: ... + +class MemoryHandler(BufferingHandler): + def __init__(self, capacity: int, flushLevel: int = ..., + target: Optional[Handler] = ...) -> None: ... + def setTarget(self, target: Handler) -> None: ... + + +class HTTPHandler(Handler): + if sys.version_info >= (3, 5): + def __init__(self, host: str, url: str, method: str = ..., + secure: bool = ..., + credentials: Optional[Tuple[str, str]] = ..., + context: Optional[ssl.SSLContext] = ...) -> None: ... + elif sys.version_info >= (3,): + def __init__(self, + host: str, url: str, method: str = ..., secure: bool = ..., + credentials: Optional[Tuple[str, str]] = ...) -> None: ... + else: + def __init__(self, + host: str, url: str, method: str = ...) -> None: ... + def mapLogRecord(self, record: LogRecord) -> Dict[str, Any]: ... + + +if sys.version_info >= (3,): + class QueueHandler(Handler): + def __init__(self, queue: Queue) -> None: ... + def prepare(self, record: LogRecord) -> Any: ... + def enqueue(self, record: LogRecord) -> None: ... + + class QueueListener: + if sys.version_info >= (3, 5): + def __init__(self, queue: Queue, *handlers: Handler, + respect_handler_level: bool = ...) -> None: ... + else: + def __init__(self, + queue: Queue, *handlers: Handler) -> None: ... + def dequeue(self, block: bool) -> LogRecord: ... + def prepare(self, record: LogRecord) -> Any: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def enqueue_sentinel(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/macpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi new file mode 100644 index 0000000..6eb3f17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/marshal.pyi @@ -0,0 +1,8 @@ +from typing import Any, IO + +version: int + +def dump(value: Any, file: IO[Any], version: int = ...) -> None: ... +def load(file: IO[Any]) -> Any: ... +def dumps(value: Any, version: int = ...) -> str: ... +def loads(string: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/math.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/math.pyi new file mode 100644 index 0000000..25eb1c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/math.pyi @@ -0,0 +1,71 @@ +# Stubs for math +# See: http://docs.python.org/2/library/math.html + +from typing import Tuple, Iterable, SupportsFloat, SupportsInt + +import sys + +e: float +pi: float +if sys.version_info >= (3, 5): + inf: float + nan: float +if sys.version_info >= (3, 6): + tau: float + +def acos(x: SupportsFloat) -> float: ... +def acosh(x: SupportsFloat) -> float: ... +def asin(x: SupportsFloat) -> float: ... +def asinh(x: SupportsFloat) -> float: ... +def atan(x: SupportsFloat) -> float: ... +def atan2(y: SupportsFloat, x: SupportsFloat) -> float: ... +def atanh(x: SupportsFloat) -> float: ... +if sys.version_info >= (3,): + def ceil(x: SupportsFloat) -> int: ... +else: + def ceil(x: SupportsFloat) -> float: ... +def copysign(x: SupportsFloat, y: SupportsFloat) -> float: ... +def cos(x: SupportsFloat) -> float: ... +def cosh(x: SupportsFloat) -> float: ... +def degrees(x: SupportsFloat) -> float: ... +def erf(x: SupportsFloat) -> float: ... +def erfc(x: SupportsFloat) -> float: ... +def exp(x: SupportsFloat) -> float: ... +def expm1(x: SupportsFloat) -> float: ... +def fabs(x: SupportsFloat) -> float: ... +def factorial(x: SupportsInt) -> int: ... +if sys.version_info >= (3,): + def floor(x: SupportsFloat) -> int: ... +else: + def floor(x: SupportsFloat) -> float: ... +def fmod(x: SupportsFloat, y: SupportsFloat) -> float: ... +def frexp(x: SupportsFloat) -> Tuple[float, int]: ... +def fsum(iterable: Iterable) -> float: ... +def gamma(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 5): + def gcd(a: int, b: int) -> int: ... +def hypot(x: SupportsFloat, y: SupportsFloat) -> float: ... +if sys.version_info >= (3, 5): + def isclose(a: SupportsFloat, b: SupportsFloat, rel_tol: SupportsFloat = ..., abs_tol: SupportsFloat = ...) -> bool: ... +def isinf(x: SupportsFloat) -> bool: ... +if sys.version_info >= (3,): + def isfinite(x: SupportsFloat) -> bool: ... +def isnan(x: SupportsFloat) -> bool: ... +def ldexp(x: SupportsFloat, i: int) -> float: ... +def lgamma(x: SupportsFloat) -> float: ... +def log(x: SupportsFloat, base: SupportsFloat = ...) -> float: ... +def log10(x: SupportsFloat) -> float: ... +def log1p(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 3): + def log2(x: SupportsFloat) -> float: ... +def modf(x: SupportsFloat) -> Tuple[float, float]: ... +def pow(x: SupportsFloat, y: SupportsFloat) -> float: ... +def radians(x: SupportsFloat) -> float: ... +if sys.version_info >= (3, 7): + def remainder(x: SupportsFloat, y: SupportsFloat) -> float: ... +def sin(x: SupportsFloat) -> float: ... +def sinh(x: SupportsFloat) -> float: ... +def sqrt(x: SupportsFloat) -> float: ... +def tan(x: SupportsFloat) -> float: ... +def tanh(x: SupportsFloat) -> float: ... +def trunc(x: SupportsFloat) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi new file mode 100644 index 0000000..eb83027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mimetypes.pyi @@ -0,0 +1,38 @@ +# Stubs for mimetypes + +from typing import Dict, IO, List, Optional, Sequence, Text, Tuple +import sys + +def guess_type(url: Text, + strict: bool = ...) -> Tuple[Optional[str], Optional[str]]: ... +def guess_all_extensions(type: str, strict: bool = ...) -> List[str]: ... +def guess_extension(type: str, strict: bool = ...) -> Optional[str]: ... + +def init(files: Optional[Sequence[str]] = ...) -> None: ... +def read_mime_types(filename: str) -> Optional[Dict[str, str]]: ... +def add_type(type: str, ext: str, strict: bool = ...) -> None: ... + +inited: bool +knownfiles: List[str] +suffix_map: Dict[str, str] +encodings_map: Dict[str, str] +types_map: Dict[str, str] +common_types: Dict[str, str] + +class MimeTypes: + suffix_map: Dict[str, str] + encodings_map: Dict[str, str] + types_map: Tuple[Dict[str, str], Dict[str, str]] + types_map_inv: Tuple[Dict[str, str], Dict[str, str]] + def __init__(self, filenames: Tuple[str, ...] = ..., + strict: bool = ...) -> None: ... + def guess_extension(self, type: str, + strict: bool = ...) -> Optional[str]: ... + def guess_type(self, url: str, + strict: bool = ...) -> Tuple[Optional[str], Optional[str]]: ... + def guess_all_extensions(self, type: str, + strict: bool = ...) -> List[str]: ... + def read(self, filename: str, strict: bool = ...) -> None: ... + def readfp(self, fp: IO[str], strict: bool = ...) -> None: ... + if sys.platform == 'win32': + def read_windows_registry(self, strict: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi new file mode 100644 index 0000000..709d5d9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/mmap.pyi @@ -0,0 +1,73 @@ +import sys +from typing import (Optional, Sequence, Union, Generic, overload, + Iterable, Iterator, Sized, ContextManager, AnyStr) + +ACCESS_DEFAULT: int +ACCESS_READ: int +ACCESS_WRITE: int +ACCESS_COPY: int + +ALLOCATIONGRANULARITY: int + +if sys.platform != 'win32': + MAP_ANON: int + MAP_ANONYMOUS: int + MAP_DENYWRITE: int + MAP_EXECUTABLE: int + MAP_PRIVATE: int + MAP_SHARED: int + PROT_EXEC: int + PROT_READ: int + PROT_WRITE: int + + PAGESIZE: int + +class _mmap(Generic[AnyStr]): + if sys.platform == 'win32': + def __init__(self, fileno: int, length: int, + tagname: Optional[str] = ..., access: int = ..., + offset: int = ...) -> None: ... + else: + def __init__(self, + fileno: int, length: int, flags: int = ..., + prot: int = ..., access: int = ..., + offset: int = ...) -> None: ... + def close(self) -> None: ... + def find(self, sub: AnyStr, + start: int = ..., end: int = ...) -> int: ... + def flush(self, offset: int = ..., size: int = ...) -> int: ... + def move(self, dest: int, src: int, count: int) -> None: ... + def read(self, n: int = ...) -> AnyStr: ... + def read_byte(self) -> AnyStr: ... + def readline(self) -> AnyStr: ... + def resize(self, newsize: int) -> None: ... + def seek(self, pos: int, whence: int = ...) -> None: ... + def size(self) -> int: ... + def tell(self) -> int: ... + def write(self, bytes: AnyStr) -> None: ... + def write_byte(self, byte: AnyStr) -> None: ... + def __len__(self) -> int: ... + +if sys.version_info >= (3,): + class mmap(_mmap, ContextManager[mmap], Iterable[bytes], Sized): + closed: bool + def rfind(self, sub: bytes, start: int = ..., stop: int = ...) -> int: ... + @overload + def __getitem__(self, index: int) -> int: ... + @overload + def __getitem__(self, index: slice) -> bytes: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + @overload + def __setitem__(self, index: int, object: int) -> None: ... + @overload + def __setitem__(self, index: slice, object: bytes) -> None: ... + # Doesn't actually exist, but the object is actually iterable because it has __getitem__ and + # __len__, so we claim that there is also an __iter__ to help type checkers. + def __iter__(self) -> Iterator[bytes]: ... +else: + class mmap(_mmap, Sequence[bytes]): + def rfind(self, string: bytes, start: int = ..., stop: int = ...) -> int: ... + def __getitem__(self, index: Union[int, slice]) -> bytes: ... + def __getslice__(self, i: Optional[int], j: Optional[int]) -> bytes: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __setitem__(self, index: Union[int, slice], object: bytes) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi new file mode 100644 index 0000000..3ceae88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/netrc.pyi @@ -0,0 +1,19 @@ +from typing import AnyStr, Dict, List, Optional, Tuple, overload + + +class NetrcParseError(Exception): + filename: Optional[str] + lineno: Optional[int] + msg: str + + +# (login, account, password) tuple +_NetrcTuple = Tuple[str, Optional[str], Optional[str]] + + +class netrc: + hosts: Dict[str, _NetrcTuple] + macros: Dict[str, List[str]] + + def __init__(self, file: str = ...) -> None: ... + def authenticators(self, host: str) -> Optional[_NetrcTuple]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/nis.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/nis.pyi new file mode 100644 index 0000000..87223ca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/nis.pyi @@ -0,0 +1,10 @@ +import sys +from typing import Dict, List + +if sys.platform != 'win32': + def cat(map: str, domain: str = ...) -> Dict[str, str]: ... + def get_default_domain() -> str: ... + def maps(domain: str = ...) -> List[str]: ... + def match(key: str, map: str, domain: str = ...) -> str: ... + + class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ntpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi new file mode 100644 index 0000000..50b561c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/numbers.pyi @@ -0,0 +1,140 @@ +# Stubs for numbers (Python 3.5) +# See https://docs.python.org/2.7/library/numbers.html +# and https://docs.python.org/3/library/numbers.html +# +# Note: these stubs are incomplete. The more complex type +# signatures are currently omitted. + +from typing import Any, Optional, SupportsFloat +from abc import ABCMeta, abstractmethod +import sys + +class Number(metaclass=ABCMeta): + @abstractmethod + def __hash__(self) -> int: ... + +class Complex(Number): + @abstractmethod + def __complex__(self) -> complex: ... + if sys.version_info >= (3, 0): + def __bool__(self) -> bool: ... + else: + def __nonzero__(self) -> bool: ... + @property + @abstractmethod + def real(self): ... + @property + @abstractmethod + def imag(self): ... + @abstractmethod + def __add__(self, other): ... + @abstractmethod + def __radd__(self, other): ... + @abstractmethod + def __neg__(self): ... + @abstractmethod + def __pos__(self): ... + def __sub__(self, other): ... + def __rsub__(self, other): ... + @abstractmethod + def __mul__(self, other): ... + @abstractmethod + def __rmul__(self, other): ... + if sys.version_info < (3, 0): + @abstractmethod + def __div__(self, other): ... + @abstractmethod + def __rdiv__(self, other): ... + @abstractmethod + def __truediv__(self, other): ... + @abstractmethod + def __rtruediv__(self, other): ... + @abstractmethod + def __pow__(self, exponent): ... + @abstractmethod + def __rpow__(self, base): ... + def __abs__(self): ... + def conjugate(self): ... + def __eq__(self, other: object) -> bool: ... + if sys.version_info < (3, 0): + def __ne__(self, other: object) -> bool: ... + +class Real(Complex, SupportsFloat): + @abstractmethod + def __float__(self) -> float: ... + @abstractmethod + def __trunc__(self) -> int: ... + if sys.version_info >= (3, 0): + @abstractmethod + def __floor__(self) -> int: ... + @abstractmethod + def __ceil__(self) -> int: ... + @abstractmethod + def __round__(self, ndigits: Optional[int] = ...): ... + def __divmod__(self, other): ... + def __rdivmod__(self, other): ... + @abstractmethod + def __floordiv__(self, other): ... + @abstractmethod + def __rfloordiv__(self, other): ... + @abstractmethod + def __mod__(self, other): ... + @abstractmethod + def __rmod__(self, other): ... + @abstractmethod + def __lt__(self, other) -> bool: ... + @abstractmethod + def __le__(self, other) -> bool: ... + def __complex__(self) -> complex: ... + @property + def real(self): ... + @property + def imag(self): ... + def conjugate(self): ... + +class Rational(Real): + @property + @abstractmethod + def numerator(self) -> int: ... + @property + @abstractmethod + def denominator(self) -> int: ... + def __float__(self) -> float: ... + +class Integral(Rational): + if sys.version_info >= (3, 0): + @abstractmethod + def __int__(self) -> int: ... + else: + @abstractmethod + def __long__(self) -> long: ... + def __index__(self) -> int: ... + @abstractmethod + def __pow__(self, exponent, modulus: Optional[Any] = ...): ... + @abstractmethod + def __lshift__(self, other): ... + @abstractmethod + def __rlshift__(self, other): ... + @abstractmethod + def __rshift__(self, other): ... + @abstractmethod + def __rrshift__(self, other): ... + @abstractmethod + def __and__(self, other): ... + @abstractmethod + def __rand__(self, other): ... + @abstractmethod + def __xor__(self, other): ... + @abstractmethod + def __rxor__(self, other): ... + @abstractmethod + def __or__(self, other): ... + @abstractmethod + def __ror__(self, other): ... + @abstractmethod + def __invert__(self): ... + def __float__(self) -> float: ... + @property + def numerator(self) -> int: ... + @property + def denominator(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi new file mode 100644 index 0000000..34350e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/opcode.pyi @@ -0,0 +1,23 @@ +from typing import List, Dict, Optional, Sequence + +import sys + +cmp_op: Sequence[str] +hasconst: List[int] +hasname: List[int] +hasjrel: List[int] +hasjabs: List[int] +haslocal: List[int] +hascompare: List[int] +hasfree: List[int] +opname: List[str] + +opmap: Dict[str, int] +HAVE_ARGUMENT: int +EXTENDED_ARG: int + +if sys.version_info >= (3, 4): + def stack_effect(opcode: int, oparg: Optional[int] = ...) -> int: ... + +if sys.version_info >= (3, 6): + hasnargs: List[int] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/operator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/operator.pyi new file mode 100644 index 0000000..eafc37c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/operator.pyi @@ -0,0 +1,227 @@ +# Stubs for operator + +from typing import ( + Any, Callable, Container, Mapping, MutableMapping, MutableSequence, Sequence, SupportsAbs, Tuple, + TypeVar, overload, +) +import sys + + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + + +def lt(a: Any, b: Any) -> Any: ... +def le(a: Any, b: Any) -> Any: ... +def eq(a: Any, b: Any) -> Any: ... +def ne(a: Any, b: Any) -> Any: ... +def ge(a: Any, b: Any) -> Any: ... +def gt(a: Any, b: Any) -> Any: ... +def __lt__(a: Any, b: Any) -> Any: ... +def __le__(a: Any, b: Any) -> Any: ... +def __eq__(a: Any, b: Any) -> Any: ... +def __ne__(a: Any, b: Any) -> Any: ... +def __ge__(a: Any, b: Any) -> Any: ... +def __gt__(a: Any, b: Any) -> Any: ... + +def not_(obj: Any) -> bool: ... +def __not__(obj: Any) -> bool: ... + +def truth(x: Any) -> bool: ... + +def is_(a: Any, b: Any) -> bool: ... + +def is_not(a: Any, b: Any) -> bool: ... + +def abs(x: SupportsAbs) -> Any: ... +def __abs__(a: SupportsAbs) -> Any: ... + +def add(a: Any, b: Any) -> Any: ... +def __add__(a: Any, b: Any) -> Any: ... + +def and_(a: Any, b: Any) -> Any: ... +def __and__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def div(a: Any, b: Any) -> Any: ... + def __div__(a: Any, b: Any) -> Any: ... + +def floordiv(a: Any, b: Any) -> Any: ... +def __floordiv__(a: Any, b: Any) -> Any: ... + +def index(a: Any) -> int: ... +def __index__(a: Any) -> int: ... + +def inv(obj: Any) -> Any: ... +def invert(obj: Any) -> Any: ... +def __inv__(obj: Any) -> Any: ... +def __invert__(obj: Any) -> Any: ... + +def lshift(a: Any, b: Any) -> Any: ... +def __lshift__(a: Any, b: Any) -> Any: ... + +def mod(a: Any, b: Any) -> Any: ... +def __mod__(a: Any, b: Any) -> Any: ... + +def mul(a: Any, b: Any) -> Any: ... +def __mul__(a: Any, b: Any) -> Any: ... + +if sys.version_info >= (3, 5): + def matmul(a: Any, b: Any) -> Any: ... + def __matmul__(a: Any, b: Any) -> Any: ... + +def neg(obj: Any) -> Any: ... +def __neg__(obj: Any) -> Any: ... + +def or_(a: Any, b: Any) -> Any: ... +def __or__(a: Any, b: Any) -> Any: ... + +def pos(obj: Any) -> Any: ... +def __pos__(obj: Any) -> Any: ... + +def pow(a: Any, b: Any) -> Any: ... +def __pow__(a: Any, b: Any) -> Any: ... + +def rshift(a: Any, b: Any) -> Any: ... +def __rshift__(a: Any, b: Any) -> Any: ... + +def sub(a: Any, b: Any) -> Any: ... +def __sub__(a: Any, b: Any) -> Any: ... + +def truediv(a: Any, b: Any) -> Any: ... +def __truediv__(a: Any, b: Any) -> Any: ... + +def xor(a: Any, b: Any) -> Any: ... +def __xor__(a: Any, b: Any) -> Any: ... + +def concat(a: Sequence[_T], b: Sequence[_T]) -> Sequence[_T]: ... +def __concat__(a: Sequence[_T], b: Sequence[_T]) -> Sequence[_T]: ... + +def contains(a: Container[Any], b: Any) -> bool: ... +def __contains__(a: Container[Any], b: Any) -> bool: ... + +def countOf(a: Container[Any], b: Any) -> int: ... + +@overload +def delitem(a: MutableSequence[_T], b: int) -> None: ... +@overload +def delitem(a: MutableMapping[_K, _V], b: _K) -> None: ... +@overload +def __delitem__(a: MutableSequence[_T], b: int) -> None: ... +@overload +def __delitem__(a: MutableMapping[_K, _V], b: _K) -> None: ... + +if sys.version_info < (3, ): + def delslice(a: MutableSequence[Any], b: int, c: int) -> None: ... + def __delslice__(a: MutableSequence[Any], b: int, c: int) -> None: ... + +@overload +def getitem(a: Sequence[_T], b: int) -> _T: ... +@overload +def getitem(a: Mapping[_K, _V], b: _K) -> _V: ... +@overload +def __getitem__(a: Sequence[_T], b: int) -> _T: ... +@overload +def __getitem__(a: Mapping[_K, _V], b: _K) -> _V: ... + +if sys.version_info < (3, ): + def getslice(a: Sequence[_T], b: int, c: int) -> Sequence[_T]: ... + def __getslice__(a: Sequence[_T], b: int, c: int) -> Sequence[_T]: ... + +def indexOf(a: Sequence[_T], b: _T) -> int: ... + +if sys.version_info < (3, ): + def repeat(a: Any, b: int) -> Any: ... + def __repeat__(a: Any, b: int) -> Any: ... + +if sys.version_info < (3, ): + def sequenceIncludes(a: Container[Any], b: Any) -> bool: ... + +@overload +def setitem(a: MutableSequence[_T], b: int, c: _T) -> None: ... +@overload +def setitem(a: MutableMapping[_K, _V], b: _K, c: _V) -> None: ... +@overload +def __setitem__(a: MutableSequence[_T], b: int, c: _T) -> None: ... +@overload +def __setitem__(a: MutableMapping[_K, _V], b: _K, c: _V) -> None: ... + +if sys.version_info < (3, ): + def setslice(a: MutableSequence[_T], b: int, c: int, v: Sequence[_T]) -> None: ... + def __setslice__(a: MutableSequence[_T], b: int, c: int, v: Sequence[_T]) -> None: ... + + +if sys.version_info >= (3, 4): + def length_hint(obj: Any, default: int = ...) -> int: ... + +@overload +def attrgetter(attr: str) -> Callable[[Any], Any]: ... +@overload +def attrgetter(*attrs: str) -> Callable[[Any], Tuple[Any, ...]]: ... + +@overload +def itemgetter(item: Any) -> Callable[[Any], Any]: ... +@overload +def itemgetter(*items: Any) -> Callable[[Any], Tuple[Any, ...]]: ... + +def methodcaller(name: str, *args: Any, **kwargs: Any) -> Callable[..., Any]: ... + + +def iadd(a: Any, b: Any) -> Any: ... +def __iadd__(a: Any, b: Any) -> Any: ... + +def iand(a: Any, b: Any) -> Any: ... +def __iand__(a: Any, b: Any) -> Any: ... + +def iconcat(a: Any, b: Any) -> Any: ... +def __iconcat__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def idiv(a: Any, b: Any) -> Any: ... + def __idiv__(a: Any, b: Any) -> Any: ... + +def ifloordiv(a: Any, b: Any) -> Any: ... +def __ifloordiv__(a: Any, b: Any) -> Any: ... + +def ilshift(a: Any, b: Any) -> Any: ... +def __ilshift__(a: Any, b: Any) -> Any: ... + +def imod(a: Any, b: Any) -> Any: ... +def __imod__(a: Any, b: Any) -> Any: ... + +def imul(a: Any, b: Any) -> Any: ... +def __imul__(a: Any, b: Any) -> Any: ... + +if sys.version_info >= (3, 5): + def imatmul(a: Any, b: Any) -> Any: ... + def __imatmul__(a: Any, b: Any) -> Any: ... + +def ior(a: Any, b: Any) -> Any: ... +def __ior__(a: Any, b: Any) -> Any: ... + +def ipow(a: Any, b: Any) -> Any: ... +def __ipow__(a: Any, b: Any) -> Any: ... + +if sys.version_info < (3, ): + def irepeat(a: Any, b: int) -> Any: ... + def __irepeat__(a: Any, b: int) -> Any: ... + +def irshift(a: Any, b: Any) -> Any: ... +def __irshift__(a: Any, b: Any) -> Any: ... + +def isub(a: Any, b: Any) -> Any: ... +def __isub__(a: Any, b: Any) -> Any: ... + +def itruediv(a: Any, b: Any) -> Any: ... +def __itruediv__(a: Any, b: Any) -> Any: ... + +def ixor(a: Any, b: Any) -> Any: ... +def __ixor__(a: Any, b: Any) -> Any: ... + + +if sys.version_info < (3, ): + def isCallable(x: Any) -> bool: ... + def isMappingType(x: Any) -> bool: ... + def isNumberType(x: Any) -> bool: ... + def isSequenceType(x: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi new file mode 100644 index 0000000..9b8b8ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/optparse.pyi @@ -0,0 +1,228 @@ +# Generated by pytype, with only minor tweaks. Might be incomplete. +import sys +from typing import Any, AnyStr, Callable, Dict, IO, Iterable, List, Mapping, Optional, Sequence, Tuple, Union + +# See https://groups.google.com/forum/#!topic/python-ideas/gA1gdj3RZ5g +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + +NO_DEFAULT: Tuple[_Text, ...] +SUPPRESS_HELP: _Text +SUPPRESS_USAGE: _Text + +def check_builtin(option: Option, opt: Any, value: _Text) -> Any: ... +def check_choice(option: Option, opt: Any, value: _Text) -> Any: ... +if sys.version_info < (3,): + def isbasestring(x: Any) -> bool: ... + +class OptParseError(Exception): + msg: _Text + def __init__(self, msg: _Text) -> None: ... + +class BadOptionError(OptParseError): + opt_str: _Text + def __init__(self, opt_str: _Text) -> None: ... + +class AmbiguousOptionError(BadOptionError): + possibilities: Iterable[_Text] + def __init__(self, opt_str: _Text, possibilities: Sequence[_Text]) -> None: ... + +class OptionError(OptParseError): + msg: _Text + option_id: _Text + def __init__(self, msg: _Text, option: Option) -> None: ... + +class OptionConflictError(OptionError): ... + +class OptionValueError(OptParseError): ... + + +class HelpFormatter: + NO_DEFAULT_VALUE: _Text + _long_opt_fmt: _Text + _short_opt_fmt: _Text + current_indent: int + default_tag: _Text + help_position: Any + help_width: Any + indent_increment: int + level: int + max_help_position: int + option_strings: Dict[Option, _Text] + parser: OptionParser + short_first: Any + width: int + def __init__(self, indent_increment: int, max_help_position: int, width: Optional[int], short_first: int) -> None: ... + def _format__Text(self, _Text: _Text) -> _Text: ... + def dedent(self) -> None: ... + def expand_default(self, option: Option) -> _Text: ... + def format_description(self, description: _Text) -> _Text: ... + def format_epilog(self, epilog) -> _Text: ... + def format_heading(self, heading: Any) -> _Text: ... + def format_option(self, option: OptionParser) -> _Text: ... + def format_option_strings(self, option: OptionParser) -> Any: ... + def format_usage(self, usage: Any) -> _Text: ... + def indent(self) -> None: ... + def set_long_opt_delimiter(self, delim: _Text) -> None: ... + def set_parser(self, parser: OptionParser) -> None: ... + def set_short_opt_delimiter(self, delim: _Text) -> None: ... + def store_option_strings(self, parser: OptionParser) -> None: ... + +class IndentedHelpFormatter(HelpFormatter): + def __init__(self, + indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ..., + short_first: int = ...) -> None: ... + def format_heading(self, heading: _Text) -> _Text: ... + def format_usage(self, usage: _Text) -> _Text: ... + +class TitledHelpFormatter(HelpFormatter): + def __init__(self, + indent_increment: int = ..., + max_help_position: int = ..., + width: Optional[int] = ..., + short_first: int = ...) -> None: ... + def format_heading(self, heading: _Text) -> _Text: ... + def format_usage(self, usage: _Text) -> _Text: ... + +class Option: + ACTIONS: Tuple[_Text, ...] + ALWAYS_TYPED_ACTIONS: Tuple[_Text, ...] + ATTRS: List[_Text] + CHECK_METHODS: Optional[List[Callable]] + CONST_ACTIONS: Tuple[_Text, ...] + STORE_ACTIONS: Tuple[_Text, ...] + TYPED_ACTIONS: Tuple[_Text, ...] + TYPES: Tuple[_Text, ...] + TYPE_CHECKER: Dict[_Text, Callable] + _long_opts: List[_Text] + _short_opts: List[_Text] + action: _Text + dest: Optional[_Text] + nargs: int + type: Any + def __init__(self, *opts, **attrs) -> None: ... + def _check_action(self) -> None: ... + def _check_callback(self) -> None: ... + def _check_choice(self) -> None: ... + def _check_const(self) -> None: ... + def _check_dest(self) -> None: ... + def _check_nargs(self) -> None: ... + def _check_opt_strings(self, opts: Optional[_Text]) -> Any: ... + def _check_type(self) -> None: ... + def _set_attrs(self, attrs: Dict[_Text, Any]) -> None: ... + def _set_opt_strings(self, opts: _Text) -> None: ... + def check_value(self, opt: Any, value: Any) -> Any: ... + def convert_value(self, opt: Any, value: Any) -> Any: ... + def get_opt_string(self) -> _Text: ... + def process(self, opt: Any, value: Any, values: Any, parser: OptionParser) -> int: ... + def take_action(self, action: _Text, dest: _Text, opt: Any, value: Any, values: Any, parser: OptionParser) -> int: ... + def takes_value(self) -> bool: ... + +make_option = Option + +class OptionContainer: + _long_opt: Dict[_Text, Option] + _short_opt: Dict[_Text, Option] + conflict_handler: _Text + defaults: Dict[_Text, Any] + description: Any + option_class: Any + def __init__(self, option_class: Option, conflict_handler: Any, description: Any) -> None: ... + def _check_conflict(self, option: Any) -> None: ... + def _create_option_mappings(self) -> None: ... + def _share_option_mappings(self, parser: OptionParser) -> None: ... + def add_option(self, *args, **kwargs) -> Any: ... + def add_options(self, option_list: Iterable[Option]) -> None: ... + def destroy(self) -> None: ... + def format_description(self, formatter: Optional[HelpFormatter]) -> Any: ... + def format_help(self, formatter: Optional[HelpFormatter]) -> _Text: ... + def format_option_help(self, formatter: Optional[HelpFormatter]) -> _Text: ... + def get_description(self) -> Any: ... + def get_option(self, opt_str: _Text) -> Optional[Option]: ... + def has_option(self, opt_str: _Text) -> bool: ... + def remove_option(self, opt_str: _Text) -> None: ... + def set_conflict_handler(self, handler: Any) -> None: ... + def set_description(self, description: Any) -> None: ... + +class OptionGroup(OptionContainer): + option_list: List[Option] + parser: OptionParser + title: _Text + def __init__(self, parser: OptionParser, title: _Text, description: Optional[_Text] = ...) -> None: ... + def _create_option_list(self) -> None: ... + def set_title(self, title: _Text) -> None: ... + +class Values: + def __init__(self, defaults: Optional[Mapping[str, Any]] = ...) -> None: ... + def _update(self, dict: Mapping[_Text, Any], mode: Any) -> None: ... + def _update_careful(self, dict: Mapping[_Text, Any]) -> None: ... + def _update_loose(self, dict: Mapping[_Text, Any]) -> None: ... + def ensure_value(self, attr: _Text, value: Any) -> Any: ... + def read_file(self, filename: _Text, mode: _Text) -> None: ... + def read_module(self, modname: _Text, mode: _Text) -> None: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + +class OptionParser(OptionContainer): + allow_interspersed_args: bool + epilog: Optional[_Text] + formatter: HelpFormatter + largs: Optional[List[_Text]] + option_groups: List[OptionParser] + option_list: List[Option] + process_default_values: Any + prog: Optional[_Text] + rargs: Optional[List[Any]] + standard_option_list: List[Option] + usage: Optional[_Text] + values: Optional[Values] + version: _Text + def __init__(self, + usage: Optional[_Text] = ..., + option_list: Iterable[Option] = ..., + option_class: Option = ..., + version: Optional[_Text] = ..., + conflict_handler: _Text = ..., + description: Optional[_Text] = ..., + formatter: Optional[HelpFormatter] = ..., + add_help_option: bool = ..., + prog: Optional[_Text] = ..., + epilog: Optional[_Text] = ...) -> None: ... + def _add_help_option(self) -> None: ... + def _add_version_option(self) -> None: ... + def _create_option_list(self) -> None: ... + def _get_all_options(self) -> List[Option]: ... + def _get_args(self, args: Iterable) -> List[Any]: ... + def _init_parsing_state(self) -> None: ... + def _match_long_opt(self, opt: _Text) -> _Text: ... + def _populate_option_list(self, option_list: Iterable[Option], add_help: bool = ...) -> None: ... + def _process_args(self, largs: List, rargs: List, values: Values) -> None: ... + def _process_long_opt(self, rargs: List, values: Any) -> None: ... + def _process_short_opts(self, rargs: List, values: Any) -> None: ... + def add_option_group(self, *args, **kwargs) -> OptionParser: ... + def check_values(self, values: Values, args: List[_Text]) -> Tuple[Values, List[_Text]]: ... + def disable_interspersed_args(self) -> None: ... + def enable_interspersed_args(self) -> None: ... + def error(self, msg: _Text) -> None: ... + def exit(self, status: int = ..., msg: Optional[str] = ...) -> None: ... + def expand_prog_name(self, s: Optional[_Text]) -> Any: ... + def format_epilog(self, formatter: HelpFormatter) -> Any: ... + def format_help(self, formatter: Optional[HelpFormatter] = ...) -> _Text: ... + def format_option_help(self, formatter: Optional[HelpFormatter] = ...) -> _Text: ... + def get_default_values(self) -> Values: ... + def get_option_group(self, opt_str: _Text) -> Any: ... + def get_prog_name(self) -> _Text: ... + def get_usage(self) -> _Text: ... + def get_version(self) -> _Text: ... + def parse_args(self, args: Optional[Sequence[AnyStr]] = ..., values: Optional[Values] = ...) -> Tuple[Values, List[AnyStr]]: ... + def print_usage(self, file: Optional[IO[str]] = ...) -> None: ... + def print_help(self, file: Optional[IO[str]] = ...) -> None: ... + def print_version(self, file: Optional[IO[str]] = ...) -> None: ... + def set_default(self, dest: Any, value: Any) -> None: ... + def set_defaults(self, **kwargs) -> None: ... + def set_process_default_values(self, process: Any) -> None: ... + def set_usage(self, usage: _Text) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi new file mode 100644 index 0000000..e403c36 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pdb.pyi @@ -0,0 +1,62 @@ +# NOTE: This stub is incomplete - only contains some global functions + +from cmd import Cmd +import sys +from types import FrameType +from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar + +_T = TypeVar('_T') + +class Restart(Exception): ... + +def run(statement: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> None: ... +def runeval(expression: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> Any: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> None: ... +def runcall(*args: Any, **kwds: Any) -> Any: ... + +if sys.version_info >= (3, 7): + def set_trace(*, header: Optional[str] = ...) -> None: ... +else: + def set_trace() -> None: ... + +def post_mortem(t: Optional[Any] = ...) -> None: ... +def pm() -> None: ... + +class Pdb(Cmd): + if sys.version_info >= (3, 6): + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + nosigint: bool = ..., + readrc: bool = ..., + ) -> None: ... + elif sys.version_info >= (3, 2): + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + nosigint: bool = ..., + ) -> None: ... + else: + def __init__( + self, + completekey: str = ..., + stdin: Optional[IO[str]] = ..., + stdout: Optional[IO[str]] = ..., + skip: Optional[Iterable[str]] = ..., + ) -> None: ... + # TODO: The run* and set_trace() methods are actually defined on bdb.Bdb, from which Pdb inherits. + # Move these methods there once we have a bdb stub. + def run(self, statement: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> None: ... + def runeval(self, expression: str, globals: Optional[Dict[str, Any]] = ..., + locals: Optional[Dict[str, Any]] = ...) -> Any: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kwds: Any) -> Optional[_T]: ... + def set_trace(self, frame: Optional[FrameType] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi new file mode 100644 index 0000000..7bfad8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickle.pyi @@ -0,0 +1,140 @@ +import sys +from typing import Any, IO, Mapping, Union, Tuple, Callable, Optional, Iterator + +HIGHEST_PROTOCOL: int +if sys.version_info >= (3, 0): + DEFAULT_PROTOCOL: int + + +if sys.version_info >= (3, 0): + def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> None: ... + def dumps(obj: Any, protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> bytes: ... + def loads(bytes_object: bytes, *, fix_imports: bool = ..., + encoding: str = ..., errors: str = ...) -> Any: ... + def load(file: IO[bytes], *, fix_imports: bool = ..., encoding: str = ..., + errors: str = ...) -> Any: ... +else: + def dump(obj: Any, file: IO[bytes], protocol: Optional[int] = ...) -> None: ... + def dumps(obj: Any, protocol: Optional[int] = ...) -> bytes: ... + def load(file: IO[bytes]) -> Any: ... + def loads(string: bytes) -> Any: ... + +class PickleError(Exception): ... +class PicklingError(PickleError): ... +class UnpicklingError(PickleError): ... + +_reducedtype = Union[str, + Tuple[Callable[..., Any], Tuple], + Tuple[Callable[..., Any], Tuple, Any], + Tuple[Callable[..., Any], Tuple, Any, + Optional[Iterator]], + Tuple[Callable[..., Any], Tuple, Any, + Optional[Iterator], Optional[Iterator]]] + + +class Pickler: + fast: bool + if sys.version_info >= (3, 3): + dispatch_table: Mapping[type, Callable[[Any], _reducedtype]] + + if sys.version_info >= (3, 0): + def __init__(self, file: IO[bytes], protocol: Optional[int] = ..., *, + fix_imports: bool = ...) -> None: ... + else: + def __init__(self, file: IO[bytes], protocol: Optional[int] = ...) -> None: ... + + def dump(self, obj: Any) -> None: ... + def clear_memo(self) -> None: ... + def persistent_id(self, obj: Any) -> Any: ... + + +class Unpickler: + if sys.version_info >= (3, 0): + def __init__(self, file: IO[bytes], *, fix_imports: bool = ..., + encoding: str = ..., errors: str = ...) -> None: ... + else: + def __init__(self, file: IO[bytes]) -> None: ... + + def load(self) -> Any: ... + def find_class(self, module: str, name: str) -> Any: ... + if sys.version_info >= (3, 0): + def persistent_load(self, pid: Any) -> Any: ... + +MARK: bytes +STOP: bytes +POP: bytes +POP_MARK: bytes +DUP: bytes +FLOAT: bytes +INT: bytes +BININT: bytes +BININT1: bytes +LONG: bytes +BININT2: bytes +NONE: bytes +PERSID: bytes +BINPERSID: bytes +REDUCE: bytes +STRING: bytes +BINSTRING: bytes +SHORT_BINSTRING: bytes +UNICODE: bytes +BINUNICODE: bytes +APPEND: bytes +BUILD: bytes +GLOBAL: bytes +DICT: bytes +EMPTY_DICT: bytes +APPENDS: bytes +GET: bytes +BINGET: bytes +INST: bytes +LONG_BINGET: bytes +LIST: bytes +EMPTY_LIST: bytes +OBJ: bytes +PUT: bytes +BINPUT: bytes +LONG_BINPUT: bytes +SETITEM: bytes +TUPLE: bytes +EMPTY_TUPLE: bytes +SETITEMS: bytes +BINFLOAT: bytes + +TRUE: bytes +FALSE: bytes + +# protocol 2 +PROTO: bytes +NEWOBJ: bytes +EXT1: bytes +EXT2: bytes +EXT4: bytes +TUPLE1: bytes +TUPLE2: bytes +TUPLE3: bytes +NEWTRUE: bytes +NEWFALSE: bytes +LONG1: bytes +LONG4: bytes + +if sys.version_info >= (3, 0): + # protocol 3 + BINBYTES: bytes + SHORT_BINBYTES: bytes + +if sys.version_info >= (3, 4): + # protocol 4 + SHORT_BINUNICODE: bytes + BINUNICODE8: bytes + BINBYTES8: bytes + EMPTY_SET: bytes + ADDITEMS: bytes + FROZENSET: bytes + NEWOBJ_EX: bytes + STACK_GLOBAL: bytes + MEMOIZE: bytes + FRAME: bytes diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi new file mode 100644 index 0000000..c036646 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pickletools.pyi @@ -0,0 +1,145 @@ +# Stubs for pickletools (Python 2 and 3) +import sys +from typing import Any, Callable, IO, Iterator, List, MutableMapping, Optional, Text, Tuple, Type, Union + +_Reader = Callable[[IO[bytes]], Any] + +if sys.version_info >= (3, 0): + bytes_types: Tuple[Type[Any], ...] + +UP_TO_NEWLINE: int +TAKEN_FROM_ARGUMENT1: int +TAKEN_FROM_ARGUMENT4: int +if sys.version_info >= (3, 3): + TAKEN_FROM_ARGUMENT4U: int +if sys.version_info >= (3, 4): + TAKEN_FROM_ARGUMENT8U: int + +class ArgumentDescriptor(object): + name: str + n: int + reader: _Reader + doc: str + def __init__(self, name: str, n: int, reader: _Reader, doc: str) -> None: ... + +def read_uint1(f: IO[bytes]) -> int: ... +uint1: ArgumentDescriptor + +def read_uint2(f: IO[bytes]) -> int: ... +uint2: ArgumentDescriptor + +def read_int4(f: IO[bytes]) -> int: ... +int4: ArgumentDescriptor + +if sys.version_info >= (3, 3): + def read_uint4(f: IO[bytes]) -> int: ... + uint4: ArgumentDescriptor + +if sys.version_info >= (3, 5): + def read_uint8(f: IO[bytes]) -> int: ... + uint8: ArgumentDescriptor + +def read_stringnl(f: IO[bytes], decode: bool = ..., stripquotes: bool = ...) -> Union[bytes, Text]: ... +stringnl: ArgumentDescriptor + +def read_stringnl_noescape(f: IO[bytes]) -> str: ... +stringnl_noescape: ArgumentDescriptor + +def read_stringnl_noescape_pair(f: IO[bytes]) -> Text: ... +stringnl_noescape_pair: ArgumentDescriptor + +def read_string1(f: IO[bytes]) -> str: ... +string1: ArgumentDescriptor + +def read_string4(f: IO[bytes]) -> str: ... +string4: ArgumentDescriptor + +if sys.version_info >= (3, 3): + def read_bytes1(f: IO[bytes]) -> bytes: ... + bytes1: ArgumentDescriptor + + def read_bytes4(f: IO[bytes]) -> bytes: ... + bytes4: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_bytes8(f: IO[bytes]) -> bytes: ... + bytes8: ArgumentDescriptor + +def read_unicodestringnl(f: IO[bytes]) -> Text: ... +unicodestringnl: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_unicodestring1(f: IO[bytes]) -> Text: ... + unicodestring1: ArgumentDescriptor + +def read_unicodestring4(f: IO[bytes]) -> Text: ... +unicodestring4: ArgumentDescriptor + +if sys.version_info >= (3, 4): + def read_unicodestring8(f: IO[bytes]) -> Text: ... + unicodestring8: ArgumentDescriptor + +def read_decimalnl_short(f: IO[bytes]) -> int: ... +def read_decimalnl_long(f: IO[bytes]) -> int: ... +decimalnl_short: ArgumentDescriptor +decimalnl_long: ArgumentDescriptor + +def read_floatnl(f: IO[bytes]) -> float: ... +floatnl: ArgumentDescriptor + +def read_float8(f: IO[bytes]) -> float: ... +float8: ArgumentDescriptor + +def read_long1(f: IO[bytes]) -> int: ... +long1: ArgumentDescriptor + +def read_long4(f: IO[bytes]) -> int: ... +long4: ArgumentDescriptor + +class StackObject(object): + name: str + obtype: Union[Type[Any], Tuple[Type[Any], ...]] + doc: str + def __init__(self, name: str, obtype: Union[Type[Any], Tuple[Type[Any], ...]], doc: str) -> None: ... + +pyint: StackObject +pylong: StackObject +pyinteger_or_bool: StackObject +pybool: StackObject +pyfloat: StackObject +if sys.version_info >= (3, 4): + pybytes_or_str: StackObject +pystring: StackObject +if sys.version_info >= (3, 0): + pybytes: StackObject +pyunicode: StackObject +pynone: StackObject +pytuple: StackObject +pylist: StackObject +pydict: StackObject +if sys.version_info >= (3, 4): + pyset: StackObject + pyfrozenset: StackObject +anyobject: StackObject +markobject: StackObject +stackslice: StackObject + +class OpcodeInfo(object): + name: str + code: str + arg: Optional[ArgumentDescriptor] + stack_before: List[StackObject] + stack_after: List[StackObject] + proto: int + doc: str + def __init__(self, name: str, code: str, arg: Optional[ArgumentDescriptor], + stack_before: List[StackObject], stack_after: List[StackObject], proto: int, doc: str) -> None: ... + +opcodes: List[OpcodeInfo] + +def genops(pickle: Union[bytes, IO[bytes]]) -> Iterator[Tuple[OpcodeInfo, Optional[Any], Optional[int]]]: ... +def optimize(p: Union[bytes, IO[bytes]]) -> bytes: ... +if sys.version_info >= (3, 2): + def dis(pickle: Union[bytes, IO[bytes]], out: Optional[IO[str]] = ..., memo: Optional[MutableMapping[int, Any]] = ..., indentlevel: int = ..., annotate: int = ...) -> None: ... +else: + def dis(pickle: Union[bytes, IO[bytes]], out: Optional[IO[str]] = ..., memo: Optional[MutableMapping[int, Any]] = ..., indentlevel: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi new file mode 100644 index 0000000..c7bad42 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pkgutil.pyi @@ -0,0 +1,35 @@ +# Stubs for pkgutil + +from typing import Any, Callable, Generator, IO, Iterable, Optional, Tuple, NamedTuple +import sys + +if sys.version_info >= (3,): + from importlib.abc import Loader +else: + Loader = Any + +if sys.version_info >= (3, 6): + ModuleInfo = NamedTuple('ModuleInfo', [('module_finder', Any), ('name', str), ('ispkg', bool)]) + _YMFNI = Generator[ModuleInfo, None, None] +else: + _YMFNI = Generator[Tuple[Any, str, bool], None, None] + + +def extend_path(path: Iterable[str], name: str) -> Iterable[str]: ... + +class ImpImporter: + def __init__(self, dirname: Optional[str] = ...) -> None: ... + +class ImpLoader: + def __init__(self, fullname: str, file: IO[str], filename: str, + etc: Tuple[str, str, int]) -> None: ... + +def find_loader(fullname: str) -> Loader: ... +def get_importer(path_item: str) -> Any: ... # TODO precise type +def get_loader(module_or_name: str) -> Loader: ... +def iter_importers(fullname: str = ...) -> Generator[Any, None, None]: ... # TODO precise type +def iter_modules(path: Optional[Iterable[str]] = ..., + prefix: str = ...) -> _YMFNI: ... # TODO precise type +def walk_packages(path: Optional[Iterable[str]] = ..., prefix: str = ..., + onerror: Optional[Callable[[str], None]] = ...) -> _YMFNI: ... +def get_data(package: str, resource: str) -> Optional[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi new file mode 100644 index 0000000..64201dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/plistlib.pyi @@ -0,0 +1,57 @@ +# Stubs for plistlib + +from typing import ( + Any, IO, Mapping, MutableMapping, Optional, Union, + Type, TypeVar, +) +from typing import Dict as DictT +import sys +if sys.version_info >= (3,): + from enum import Enum + + class PlistFormat(Enum): + FMT_XML = ... + FMT_BINARY = ... + FMT_XML = PlistFormat.FMT_XML + FMT_BINARY = PlistFormat.FMT_BINARY + +mm = MutableMapping[str, Any] +_D = TypeVar('_D', bound=mm) +if sys.version_info >= (3,): + _Path = str +else: + _Path = Union[str, unicode] + +if sys.version_info >= (3, 4): + def load(fp: IO[bytes], *, fmt: Optional[PlistFormat] = ..., + use_builtin_types: bool = ..., dict_type: Type[_D] = ...) -> _D: ... + def loads(data: bytes, *, fmt: Optional[PlistFormat] = ..., + use_builtin_types: bool = ..., dict_type: Type[_D] = ...) -> _D: ... + def dump(value: Mapping[str, Any], fp: IO[bytes], *, + fmt: PlistFormat = ..., sort_keys: bool = ..., + skipkeys: bool = ...) -> None: ... + def dumps(value: Mapping[str, Any], *, fmt: PlistFormat = ..., + skipkeys: bool = ..., sort_keys: bool = ...) -> bytes: ... + +def readPlist(pathOrFile: Union[_Path, IO[bytes]]) -> DictT[str, Any]: ... +def writePlist(value: Mapping[str, Any], pathOrFile: Union[_Path, IO[bytes]]) -> None: ... +def readPlistFromBytes(data: bytes) -> DictT[str, Any]: ... +def writePlistToBytes(value: Mapping[str, Any]) -> bytes: ... +if sys.version_info < (3,): + def readPlistFromResource(path: _Path, restype: str = ..., + resid: int = ...) -> DictT[str, Any]: ... + def writePlistToResource(rootObject: Mapping[str, Any], path: _Path, + restype: str = ..., + resid: int = ...) -> None: ... + def readPlistFromString(data: str) -> DictT[str, Any]: ... + def writePlistToString(rootObject: Mapping[str, Any]) -> str: ... + +if sys.version_info < (3, 7): + class Dict(dict): + def __getattr__(self, attr: str) -> Any: ... + def __setattr__(self, attr: str, value: Any) -> None: ... + def __delattr__(self, attr: str) -> None: ... + +class Data: + data: bytes + def __init__(self, data: bytes) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi new file mode 100644 index 0000000..d2b7dab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/poplib.pyi @@ -0,0 +1,77 @@ +# Stubs for poplib (Python 2 and 3) + +import socket +import ssl +import sys +from typing import ( + Any, BinaryIO, Dict, List, NoReturn, Optional, overload, Pattern, Text, + Tuple, +) + +_LongResp = Tuple[bytes, List[bytes], int] + +class error_proto(Exception): ... + +POP3_PORT: int +POP3_SSL_PORT: int +CR: bytes +LF: bytes +CRLF: bytes + + +class POP3: + if sys.version_info >= (3, 0): + encoding: Text + + host: Text + port: int + sock: socket.socket + file: BinaryIO + welcome: bytes + + def __init__(self, host: Text, port: int = ..., timeout: float = ...) -> None: ... + def getwelcome(self) -> bytes: ... + def set_debuglevel(self, level: int) -> None: ... + def user(self, user: Text) -> bytes: ... + def pass_(self, pswd: Text) -> bytes: ... + def stat(self) -> Tuple[int, int]: ... + def list(self, which: Optional[Any] = ...) -> _LongResp: ... + def retr(self, which: Any) -> _LongResp: ... + def dele(self, which: Any) -> bytes: ... + def noop(self) -> bytes: ... + def rset(self) -> bytes: ... + def quit(self) -> bytes: ... + def close(self) -> None: ... + def rpop(self, user: Text) -> bytes: ... + + timestamp: Pattern[Text] + + if sys.version_info < (3, 0): + def apop(self, user: Text, secret: Text) -> bytes: ... + else: + def apop(self, user: Text, password: Text) -> bytes: ... + def top(self, which: Any, howmuch: int) -> _LongResp: ... + + @overload + def uidl(self) -> _LongResp: ... + @overload + def uidl(self, which: Any) -> bytes: ... + + if sys.version_info >= (3, 5): + def utf8(self) -> bytes: ... + if sys.version_info >= (3, 4): + def capa(self) -> Dict[Text, List[Text]]: ... + def stls(self, context: Optional[ssl.SSLContext] = ...) -> bytes: ... + + +class POP3_SSL(POP3): + if sys.version_info >= (3, 0): + def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ..., + timeout: float = ..., context: Optional[ssl.SSLContext] = ...) -> None: ... + else: + def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ..., + timeout: float = ...) -> None: ... + + if sys.version_info >= (3, 4): + # "context" is actually the last argument, but that breaks LSP and it doesn't really matter because all the arguments are ignored + def stls(self, context: Any = ..., keyfile: Any = ..., certfile: Any = ...) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/posixpath.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi new file mode 100644 index 0000000..90a87ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pprint.pyi @@ -0,0 +1,40 @@ +# Stubs for pprint + +# Based on http://docs.python.org/2/library/pprint.html +# Based on http://docs.python.org/3/library/pprint.html + +import sys +from typing import Any, Dict, Tuple, IO + +if sys.version_info >= (3, 4): + def pformat(o: object, indent: int = ..., width: int = ..., + depth: int = ..., compact: bool = ...) -> str: ... +else: + def pformat(o: object, indent: int = ..., width: int = ..., + depth: int = ...) -> str: ... + +if sys.version_info >= (3, 4): + def pprint(o: object, stream: IO[str] = ..., indent: int = ..., width: int = ..., + depth: int = ..., compact: bool = ...) -> None: ... +else: + def pprint(o: object, stream: IO[str] = ..., indent: int = ..., width: int = ..., + depth: int = ...) -> None: ... + +def isreadable(o: object) -> bool: ... +def isrecursive(o: object) -> bool: ... +def saferepr(o: object) -> str: ... + +class PrettyPrinter: + if sys.version_info >= (3, 4): + def __init__(self, indent: int = ..., width: int = ..., depth: int = ..., + stream: IO[str] = ..., compact: bool = ...) -> None: ... + else: + def __init__(self, indent: int = ..., width: int = ..., depth: int = ..., + stream: IO[str] = ...) -> None: ... + + def pformat(self, o: object) -> str: ... + def pprint(self, o: object) -> None: ... + def isreadable(self, o: object) -> bool: ... + def isrecursive(self, o: object) -> bool: ... + def format(self, o: object, context: Dict[int, Any], maxlevels: int, + level: int) -> Tuple[str, bool, bool]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/profile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/profile.pyi new file mode 100644 index 0000000..31236bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/profile.pyi @@ -0,0 +1,27 @@ +import os +import sys +from typing import Any, Callable, Dict, Optional, Text, TypeVar, Union + +def run(statement: str, filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... +def runctx(statement: str, globals: Dict[str, Any], locals: Dict[str, Any], filename: Optional[str] = ..., sort: Union[str, int] = ...) -> None: ... + +_SelfT = TypeVar('_SelfT', bound='Profile') +_T = TypeVar('_T') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Profile: + def __init__(self, timer: Optional[Callable[[], float]] = ..., bias: Optional[int] = ...) -> None: ... + def set_cmd(self, cmd: str) -> None: ... + def simulate_call(self, name: str) -> None: ... + def simulate_cmd_complete(self) -> None: ... + def print_stats(self, sort: Union[str, int] = ...) -> None: ... + def dump_stats(self, file: _Path) -> None: ... + def create_stats(self) -> None: ... + def snapshot_stats(self) -> None: ... + def run(self: _SelfT, cmd: str) -> _SelfT: ... + def runctx(self: _SelfT, cmd: str, globals: Dict[str, Any], locals: Dict[str, Any]) -> _SelfT: ... + def runcall(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... + def calibrate(self, m: int, verbose: int = ...) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi new file mode 100644 index 0000000..8bf1b0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pstats.pyi @@ -0,0 +1,39 @@ +from profile import Profile +from cProfile import Profile as _cProfile +import os +import sys +from typing import Any, Dict, IO, Iterable, List, Text, Tuple, TypeVar, Union, overload + +_Selector = Union[str, float, int] +_T = TypeVar('_T', bound='Stats') +if sys.version_info >= (3, 6): + _Path = Union[bytes, Text, os.PathLike[Any]] +else: + _Path = Union[bytes, Text] + +class Stats: + def __init__(self: _T, __arg: Union[None, str, Text, Profile, _cProfile] = ..., + *args: Union[None, str, Text, Profile, _cProfile, _T], + stream: IO[Any] = ...) -> None: ... + def init(self, arg: Union[None, str, Text, Profile, _cProfile]) -> None: ... + def load_stats(self, arg: Union[None, str, Text, Profile, _cProfile]) -> None: ... + def get_top_level_stats(self) -> None: ... + def add(self: _T, *arg_list: Union[None, str, Text, Profile, _cProfile, _T]) -> _T: ... + def dump_stats(self, filename: _Path) -> None: ... + def get_sort_arg_defs(self) -> Dict[str, Tuple[Tuple[Tuple[int, int], ...], str]]: ... + @overload + def sort_stats(self: _T, field: int) -> _T: ... + @overload + def sort_stats(self: _T, *field: str) -> _T: ... + def reverse_order(self: _T) -> _T: ... + def strip_dirs(self: _T) -> _T: ... + def calc_callees(self) -> None: ... + def eval_print_amount(self, sel: _Selector, list: List[str], msg: str) -> Tuple[List[str], str]: ... + def get_print_list(self, sel_list: Iterable[_Selector]) -> Tuple[int, List[str]]: ... + def print_stats(self: _T, *amount: _Selector) -> _T: ... + def print_callees(self: _T, *amount: _Selector) -> _T: ... + def print_callers(self: _T, *amount: _Selector) -> _T: ... + def print_call_heading(self, name_size: int, column_title: str) -> None: ... + def print_call_line(self, name_size: int, source: str, call_dict: Dict[str, Any], arrow: str = ...) -> None: ... + def print_title(self) -> None: ... + def print_line(self, func: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pty.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pty.pyi new file mode 100644 index 0000000..3931bb0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pty.pyi @@ -0,0 +1,20 @@ +# Stubs for pty (Python 2 and 3) +import sys +from typing import Callable, Iterable, Tuple, Union + +_Reader = Callable[[int], bytes] + +STDIN_FILENO: int +STDOUT_FILENO: int +STDERR_FILENO: int + +CHILD: int + +def openpty() -> Tuple[int, int]: ... +def master_open() -> Tuple[int, str]: ... +def slave_open(tty_name: str) -> int: ... +def fork() -> Tuple[int, int]: ... +if sys.version_info >= (3, 4): + def spawn(argv: Union[str, Iterable[str]], master_read: _Reader = ..., stdin_read: _Reader = ...) -> int: ... +else: + def spawn(argv: Union[str, Iterable[str]], master_read: _Reader = ..., stdin_read: _Reader = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi new file mode 100644 index 0000000..5bd0bbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pwd.pyi @@ -0,0 +1,13 @@ +from typing import List, NamedTuple + +struct_passwd = NamedTuple("struct_passwd", [("pw_name", str), + ("pw_passwd", str), + ("pw_uid", int), + ("pw_gid", int), + ("pw_gecos", str), + ("pw_dir", str), + ("pw_shell", str)]) + +def getpwall() -> List[struct_passwd]: ... +def getpwuid(uid: int) -> struct_passwd: ... +def getpwnam(name: str) -> struct_passwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi new file mode 100644 index 0000000..a8be113 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/py_compile.pyi @@ -0,0 +1,20 @@ +# Stubs for py_compile (Python 2 and 3) +import sys + +from typing import Optional, List, Text, AnyStr, Union + +_EitherStr = Union[bytes, Text] + +class PyCompileError(Exception): + exc_type_name: str + exc_value: BaseException + file: str + msg: str + def __init__(self, exc_type: str, exc_value: BaseException, file: str, msg: str = ...) -> None: ... + +if sys.version_info >= (3, 2): + def compile(file: AnyStr, cfile: Optional[AnyStr] = ..., dfile: Optional[AnyStr] = ..., doraise: bool = ..., optimize: int = ...) -> Optional[AnyStr]: ... +else: + def compile(file: _EitherStr, cfile: Optional[_EitherStr] = ..., dfile: Optional[_EitherStr] = ..., doraise: bool = ...) -> None: ... + +def main(args: Optional[List[Text]] = ...) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi new file mode 100644 index 0000000..efecf32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyclbr.pyi @@ -0,0 +1,40 @@ +from typing import List, Union, Sequence, Optional, Dict + + +class Class: + module: str + name: str + super: Optional[List[Union[Class, str]]] + methods: Dict[str, int] + file: int + lineno: int + + def __init__(self, + module: str, + name: str, + super: Optional[List[Union[Class, str]]], + file: str, + lineno: int) -> None: ... + + +class Function: + module: str + name: str + file: int + lineno: int + + def __init__(self, + module: str, + name: str, + file: str, + lineno: int) -> None: ... + + +def readmodule(module: str, + path: Optional[Sequence[str]] = ... + ) -> Dict[str, Class]: ... + + +def readmodule_ex(module: str, + path: Optional[Sequence[str]] = ... + ) -> Dict[str, Union[Class, Function, List[str]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi new file mode 100644 index 0000000..1150741 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pydoc.pyi @@ -0,0 +1,180 @@ +import sys +from typing import Any, AnyStr, Callable, Container, Dict, IO, List, Mapping, MutableMapping, NoReturn, Optional, Text, Tuple, Type, Union +from types import FunctionType, MethodType, ModuleType, TracebackType +if sys.version_info >= (3,): + from reprlib import Repr +else: + from repr import Repr + +# the return type of sys.exc_info(), used by ErrorDuringImport.__init__ +_Exc_Info = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +__author__: str +__date__: str +__version__: str +__credits__: str + +def pathdirs() -> List[str]: ... +def getdoc(object: object) -> Text: ... +def splitdoc(doc: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +def classname(object: object, modname: str) -> str: ... +def isdata(object: object) -> bool: ... +def replace(text: AnyStr, *pairs: AnyStr) -> AnyStr: ... +def cram(text: str, maxlen: int) -> str: ... +def stripid(text: str) -> str: ... +def allmethods(cl: type) -> MutableMapping[str, MethodType]: ... +def visiblename(name: str, all: Optional[Container[str]] = ..., obj: Optional[object] = ...) -> bool: ... +def classify_class_attrs(object: object) -> List[Tuple[str, str, type, str]]: ... + +def ispackage(path: str) -> bool: ... +def source_synopsis(file: IO[AnyStr]) -> Optional[AnyStr]: ... +def synopsis(filename: str, cache: MutableMapping[str, Tuple[int, str]] = ...) -> Optional[str]: ... + +class ErrorDuringImport(Exception): + filename: str + exc: Optional[Type[BaseException]] + value: Optional[BaseException] + tb: Optional[TracebackType] + def __init__(self, filename: str, exc_info: _Exc_Info) -> None: ... + +def importfile(path: str) -> ModuleType: ... +def safeimport(path: str, forceload: bool = ..., cache: MutableMapping[str, ModuleType] = ...) -> ModuleType: ... + +class Doc: + def document(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def fail(self, object: object, name: Optional[str] = ..., *args: Any) -> NoReturn: ... + def docmodule(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., *args: Any) -> str: ... + def getdocloc(self, object: object) -> Optional[str]: ... + +class HTMLRepr(Repr): + maxlist: int + maxtuple: int + maxdict: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def escape(self, text: str) -> str: ... + def repr(self, object: object) -> str: ... + def repr1(self, x: object, level: complex) -> str: ... + def repr_string(self, x: Text, level: complex) -> str: ... + def repr_str(self, x: Text, level: complex) -> str: ... + def repr_instance(self, x: object, level: complex) -> str: ... + def repr_unicode(self, x: AnyStr, level: complex) -> str: ... + +class HTMLDoc(Doc): + def repr(self, object: object) -> str: ... + def escape(self, test: str) -> str: ... + def page(self, title: str, contents: str) -> str: ... + def heading(self, title: str, fgcol: str, bgcol: str, extras: str = ...) -> str: ... + def section(self, title: str, fgcol: str, bgcol: str, contents: str, width: int = ..., prelude: str = ..., marginalia: Optional[str] = ..., gap: str = ...) -> str: ... + def bigsection(self, title: str, *args) -> str: ... + def preformat(self, text: str) -> str: ... + def multicolumn(self, list: List[Any], format: Callable[[Any], str], cols: int = ...) -> str: ... + def grey(self, text: str) -> str: ... + def namelink(self, name: str, *dicts: MutableMapping[str, str]) -> str: ... + def classlink(self, object: object, modname: str) -> str: ... + def modulelink(self, object: object) -> str: ... + def modpkglink(self, data: Tuple[str, str, bool, bool]) -> str: ... + def markup(self, text: str, escape: Optional[Callable[[str], str]] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., methods: Mapping[str, str] = ...) -> str: ... + def formattree(self, tree: List[Union[Tuple[type, Tuple[type, ...]], list]], modname: str, parent: Optional[type] = ...) -> str: ... + def docmodule(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., *ignored) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., *ignored) -> str: ... + def formatvalue(self, object: object) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., funcs: Mapping[str, str] = ..., classes: Mapping[str, str] = ..., methods: Mapping[str, str] = ..., cl: Optional[type] = ..., *ignored) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., *ignored) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def index(self, dir: str, shadowed: Optional[MutableMapping[str, bool]] = ...) -> str: ... + +class TextRepr(Repr): + maxlist: int + maxtuple: int + maxdict: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def repr1(self, x: object, level: complex) -> str: ... + def repr_string(self, x: str, level: complex) -> str: ... + def repr_str(self, x: str, level: complex) -> str: ... + def repr_instance(self, x: object, level: complex) -> str: ... + +class TextDoc(Doc): + def repr(self, object: object) -> str: ... + def bold(self, text: str) -> str: ... + def indent(self, text: str, prefix: str = ...) -> str: ... + def section(self, title: str, contents: str) -> str: ... + def formattree(self, tree: List[Union[Tuple[type, Tuple[type, ...]], list]], modname: str, parent: Optional[type] = ..., prefix: str = ...) -> str: ... + def docmodule(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., *ignored) -> str: ... + def docclass(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., *ignored) -> str: ... + def formatvalue(self, object: object) -> str: ... + def docroutine(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docproperty(self, object: object, name: Optional[str] = ..., mod: Optional[Any] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docdata(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., cl: Optional[Any] = ..., *ignored) -> str: ... + def docother(self, object: object, name: Optional[str] = ..., mod: Optional[str] = ..., parent: Optional[str] = ..., maxlen: Optional[int] = ..., doc: Optional[Any] = ..., *ignored) -> str: ... + +def pager(text: str) -> None: ... +def getpager() -> Callable[[str], None]: ... +def plain(text: str) -> str: ... +def pipepager(text: str, cmd: str) -> None: ... +def tempfilepager(text: str, cmd: str) -> None: ... +def ttypager(text: str) -> None: ... +def plainpager(text: str) -> None: ... +def describe(thing: Any) -> str: ... +def locate(path: str, forceload: bool = ...) -> object: ... + +text: TextDoc +html: HTMLDoc + +class _OldStyleClass: ... + +def resolve(thing: Union[str, object], forceload: bool = ...) -> Optional[Tuple[object, str]]: ... +def render_doc(thing: Union[str, object], title: str = ..., forceload: bool = ...) -> str: ... +def doc(thing: Union[str, object], title: str = ..., forceload: bool = ...) -> None: ... +def writedoc(thing: Union[str, object], forceload: bool = ...) -> None: ... +def writedocs(dir: str, pkgpath: str = ..., done: Optional[Any] = ...) -> None: ... + +class Helper: + keywords: Dict[str, Union[str, Tuple[str, str]]] + symbols: Dict[str, str] + topics: Dict[str, Union[str, Tuple[str, ...]]] + def __init__(self, input: Optional[IO[str]] = ..., output: Optional[IO[str]] = ...) -> None: ... + input: IO[str] + output: IO[str] + def __call__(self, request: Union[str, Helper, object] = ...) -> None: ... + def interact(self) -> None: ... + def getline(self, prompt: str) -> str: ... + def help(self, request: Any) -> None: ... + def intro(self) -> None: ... + def list(self, items: List[str], columns: int = ..., width: int = ...) -> None: ... + def listkeywords(self) -> None: ... + def listsymbols(self) -> None: ... + def listtopics(self) -> None: ... + def showtopic(self, topic: str, more_xrefs: str = ...) -> None: ... + def showsymbol(self, symbol: str) -> None: ... + def listmodules(self, key: str = ...) -> None: ... + +help: Helper + +# See Python issue #11182: "remove the unused and undocumented pydoc.Scanner class" +# class Scanner: +# roots = ... # type: Any +# state = ... # type: Any +# children = ... # type: Any +# descendp = ... # type: Any +# def __init__(self, roots, children, descendp) -> None: ... +# def next(self): ... + +class ModuleScanner: + quit: bool + def run(self, callback: Callable[[Optional[str], str, str], None], key: Optional[Any] = ..., completer: Optional[Callable[[], None]] = ..., onerror: Optional[Callable] = ...) -> None: ... + +def apropos(key: str) -> None: ... +def serve(port: int, callback: Optional[Callable[[Any], None]] = ..., completer: Optional[Callable[[], None]] = ...) -> None: ... +def gui() -> None: ... +def ispath(x: Any) -> bool: ... +def cli() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi new file mode 100644 index 0000000..670e561 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/__init__.pyi @@ -0,0 +1,75 @@ +from typing import List, Tuple, Optional, Callable, Any, Protocol, Union, Dict, Text + +import pyexpat.errors as errors +import pyexpat.model as model + +EXPAT_VERSION: str # undocumented +version_info: Tuple[int, int, int] # undocumented +native_encoding: str # undocumented +features: List[Tuple[str, int]] # undocumented + +class ExpatError(Exception): + code: int + lineno: int + offset: int + +error = ExpatError + +class _Reader(Protocol): + def read(self, length: int) -> bytes: ... + +XML_PARAM_ENTITY_PARSING_NEVER: int +XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE: int +XML_PARAM_ENTITY_PARSING_ALWAYS: int + +_Model = Tuple[int, int, Optional[str], tuple] + +class XMLParserType(object): + def Parse(self, data: Union[Text, bytes], isfinal: bool = ...) -> int: ... + def ParseFile(self, file: _Reader) -> int: ... + def SetBase(self, base: Text) -> None: ... + def GetBase(self) -> Optional[str]: ... + def GetInputContext(self) -> Optional[bytes]: ... + def ExternalEntityParserCreate(self, context: Optional[Text], encoding: Text = ...) -> XMLParserType: ... + def SetParamEntityParsing(self, flag: int) -> int: ... + def UseForeignDTD(self, flag: bool = ...) -> None: ... + buffer_size: int + buffer_text: bool + buffer_used: int + namespace_prefixes: bool # undocumented + ordered_attributes: bool + specified_attributes: bool + ErrorByteIndex: int + ErrorCode: int + ErrorColumnNumber: int + ErrorLineNumber: int + CurrentByteIndex: int + CurrentColumnNumber: int + CurrentLineNumber: int + XmlDeclHandler: Optional[Callable[[str, Optional[str], int], Any]] + StartDoctypeDeclHandler: Optional[Callable[[str, Optional[str], Optional[str], bool], Any]] + EndDoctypeDeclHandler: Optional[Callable[[], Any]] + ElementDeclHandler: Optional[Callable[[str, _Model], Any]] + AttlistDeclHandler: Optional[Callable[[str, str, str, Optional[str], bool], Any]] + StartElementHandler: Optional[Union[ + Callable[[str, Dict[str, str]], Any], + Callable[[str, List[str]], Any], + Callable[[str, Union[Dict[str, str]], List[str]], Any]]] + EndElementHandler: Optional[Callable[[str], Any]] + ProcessingInstructionHandler: Optional[Callable[[str, str], Any]] + CharacterDataHandler: Optional[Callable[[str], Any]] + UnparsedEntityDeclHandler: Optional[Callable[[str, Optional[str], str, Optional[str], str], Any]] + EntityDeclHandler: Optional[Callable[[str, bool, Optional[str], Optional[str], str, Optional[str], Optional[str]], Any]] + NotationDeclHandler: Optional[Callable[[str, Optional[str], str, Optional[str]], Any]] + StartNamespaceDeclHandler: Optional[Callable[[str, str], Any]] + EndNamespaceDeclHandler: Optional[Callable[[str], Any]] + CommentHandler: Optional[Callable[[str], Any]] + StartCdataSectionHandler: Optional[Callable[[], Any]] + EndCdataSectionHandler: Optional[Callable[[], Any]] + DefaultHandler: Optional[Callable[[str], Any]] + DefaultHandlerExpand: Optional[Callable[[str], Any]] + NotStandaloneHandler: Optional[Callable[[], int]] + ExternalEntityRefHandler: Optional[Callable[[str, Optional[str], Optional[str], Optional[str]], int]] + +def ErrorString(errno: int) -> str: ... +def ParserCreate(encoding: Optional[Text] = ..., namespace_separator: Optional[Text] = ...) -> XMLParserType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi new file mode 100644 index 0000000..6cde43e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/errors.pyi @@ -0,0 +1,44 @@ +import sys +from typing import Dict + +if sys.version_info >= (3, 2): + codes: Dict[str, int] + messages: Dict[int, str] + +XML_ERROR_ABORTED: str +XML_ERROR_ASYNC_ENTITY: str +XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF: str +XML_ERROR_BAD_CHAR_REF: str +XML_ERROR_BINARY_ENTITY_REF: str +XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING: str +XML_ERROR_DUPLICATE_ATTRIBUTE: str +XML_ERROR_ENTITY_DECLARED_IN_PE: str +XML_ERROR_EXTERNAL_ENTITY_HANDLING: str +XML_ERROR_FEATURE_REQUIRES_XML_DTD: str +XML_ERROR_FINISHED: str +XML_ERROR_INCOMPLETE_PE: str +XML_ERROR_INCORRECT_ENCODING: str +XML_ERROR_INVALID_TOKEN: str +XML_ERROR_JUNK_AFTER_DOC_ELEMENT: str +XML_ERROR_MISPLACED_XML_PI: str +XML_ERROR_NOT_STANDALONE: str +XML_ERROR_NOT_SUSPENDED: str +XML_ERROR_NO_ELEMENTS: str +XML_ERROR_NO_MEMORY: str +XML_ERROR_PARAM_ENTITY_REF: str +XML_ERROR_PARTIAL_CHAR: str +XML_ERROR_PUBLICID: str +XML_ERROR_RECURSIVE_ENTITY_REF: str +XML_ERROR_SUSPENDED: str +XML_ERROR_SUSPEND_PE: str +XML_ERROR_SYNTAX: str +XML_ERROR_TAG_MISMATCH: str +XML_ERROR_TEXT_DECL: str +XML_ERROR_UNBOUND_PREFIX: str +XML_ERROR_UNCLOSED_CDATA_SECTION: str +XML_ERROR_UNCLOSED_TOKEN: str +XML_ERROR_UNDECLARING_PREFIX: str +XML_ERROR_UNDEFINED_ENTITY: str +XML_ERROR_UNEXPECTED_STATE: str +XML_ERROR_UNKNOWN_ENCODING: str +XML_ERROR_XML_DECL: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi new file mode 100644 index 0000000..f357cf6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/pyexpat/model.pyi @@ -0,0 +1,11 @@ +XML_CTYPE_ANY: int +XML_CTYPE_CHOICE: int +XML_CTYPE_EMPTY: int +XML_CTYPE_MIXED: int +XML_CTYPE_NAME: int +XML_CTYPE_SEQ: int + +XML_CQUANT_NONE: int +XML_CQUANT_OPT: int +XML_CQUANT_PLUS: int +XML_CQUANT_REP: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi new file mode 100644 index 0000000..2823f8c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/quopri.pyi @@ -0,0 +1,8 @@ +# Stubs for quopri (Python 2 and 3) + +from typing import BinaryIO + +def encode(input: BinaryIO, output: BinaryIO, quotetabs: int, header: int = ...) -> None: ... +def encodestring(s: bytes, quotetabs: int = ..., header: int = ...) -> bytes: ... +def decode(input: BinaryIO, output: BinaryIO, header: int = ...) -> None: ... +def decodestring(s: bytes, header: int = ...) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/readline.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/readline.pyi new file mode 100644 index 0000000..aff2deb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/readline.pyi @@ -0,0 +1,41 @@ +# Stubs for readline + +from typing import Callable, Optional, Sequence +import sys + +_CompleterT = Optional[Callable[[str, int], Optional[str]]] +_CompDispT = Optional[Callable[[str, Sequence[str], int], None]] + + +def parse_and_bind(string: str) -> None: ... +def read_init_file(filename: str = ...) -> None: ... + +def get_line_buffer() -> str: ... +def insert_text(string: str) -> None: ... +def redisplay() -> None: ... + +def read_history_file(filename: str = ...) -> None: ... +def write_history_file(filename: str = ...) -> None: ... +if sys.version_info >= (3, 5): + def append_history_file(nelements: int, filename: str = ...) -> None: ... +def get_history_length() -> int: ... +def set_history_length(length: int) -> None: ... + +def clear_history() -> None: ... +def get_current_history_length() -> int: ... +def get_history_item(index: int) -> str: ... +def remove_history_item(pos: int) -> None: ... +def replace_history_item(pos: int, line: str) -> None: ... +def add_history(string: str) -> None: ... + +def set_startup_hook(function: Optional[Callable[[], None]] = ...) -> None: ... +def set_pre_input_hook(function: Optional[Callable[[], None]] = ...) -> None: ... + +def set_completer(function: _CompleterT = ...) -> None: ... +def get_completer() -> _CompleterT: ... +def get_completion_type() -> int: ... +def get_begidx() -> int: ... +def get_endidx() -> int: ... +def set_completer_delims(string: str) -> None: ... +def get_completer_delims() -> str: ... +def set_completion_display_matches_hook(function: _CompDispT = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi new file mode 100644 index 0000000..3db9d0c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/rlcompleter.pyi @@ -0,0 +1,14 @@ +# Stubs for rlcompleter + +from typing import Any, Dict, Optional, Union +import sys + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, unicode] + + +class Completer: + def __init__(self, namespace: Optional[Dict[str, Any]] = ...) -> None: ... + def complete(self, text: _Text, state: int) -> Optional[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sched.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sched.pyi new file mode 100644 index 0000000..5d5cf33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sched.pyi @@ -0,0 +1,27 @@ +import sys +from typing import Any, Callable, Dict, List, NamedTuple, Optional, Text, Tuple + +Event = NamedTuple('Event', [ + ('time', float), + ('priority', Any), + ('action', Callable[..., Any]), + ('argument', Tuple[Any, ...]), + ('kwargs', Dict[Text, Any]), +]) + +class scheduler: + if sys.version_info >= (3, 3): + def __init__(self, timefunc: Callable[[], float] = ..., delayfunc: Callable[[float], None] = ...) -> None: ... + def enterabs(self, time: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...] = ..., kwargs: Dict[str, Any] = ...) -> Event: ... + def enter(self, delay: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...] = ..., kwargs: Dict[str, Any] = ...) -> Event: ... + def run(self, blocking: bool = ...) -> Optional[float]: ... + else: + def __init__(self, timefunc: Callable[[], float], delayfunc: Callable[[float], None]) -> None: ... + def enterabs(self, time: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...]) -> Event: ... + def enter(self, delay: float, priority: Any, action: Callable[..., Any], argument: Tuple[Any, ...]) -> Event: ... + def run(self) -> None: ... + + def cancel(self, event: Event) -> None: ... + def empty(self) -> bool: ... + @property + def queue(self) -> List[Event]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/select.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/select.pyi new file mode 100644 index 0000000..ab9ffc6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/select.pyi @@ -0,0 +1,137 @@ +import sys +from typing import Any, Optional, Sequence, Tuple, Iterable, List, Union + +# When we have protocols, this should change to a protocol with a fileno method +# See https://docs.python.org/3/c-api/file.html#c.PyObject_AsFileDescriptor +_FileDescriptor = Union[int, Any] + +EPOLLERR: int +EPOLLET: int +EPOLLHUP: int +EPOLLIN: int +EPOLLMSG: int +EPOLLONESHOT: int +EPOLLOUT: int +EPOLLPRI: int +EPOLLRDBAND: int +EPOLLRDNORM: int +EPOLLWRBAND: int +EPOLLWRNORM: int +EPOLL_RDHUP: int +KQ_EV_ADD: int +KQ_EV_CLEAR: int +KQ_EV_DELETE: int +KQ_EV_DISABLE: int +KQ_EV_ENABLE: int +KQ_EV_EOF: int +KQ_EV_ERROR: int +KQ_EV_FLAG1: int +KQ_EV_ONESHOT: int +KQ_EV_SYSFLAGS: int +KQ_FILTER_AIO: int +KQ_FILTER_NETDEV: int +KQ_FILTER_PROC: int +KQ_FILTER_READ: int +KQ_FILTER_SIGNAL: int +KQ_FILTER_TIMER: int +KQ_FILTER_VNODE: int +KQ_FILTER_WRITE: int +KQ_NOTE_ATTRIB: int +KQ_NOTE_CHILD: int +KQ_NOTE_DELETE: int +KQ_NOTE_EXEC: int +KQ_NOTE_EXIT: int +KQ_NOTE_EXTEND: int +KQ_NOTE_FORK: int +KQ_NOTE_LINK: int +KQ_NOTE_LINKDOWN: int +KQ_NOTE_LINKINV: int +KQ_NOTE_LINKUP: int +KQ_NOTE_LOWAT: int +KQ_NOTE_PCTRLMASK: int +KQ_NOTE_PDATAMASK: int +KQ_NOTE_RENAME: int +KQ_NOTE_REVOKE: int +KQ_NOTE_TRACK: int +KQ_NOTE_TRACKERR: int +KQ_NOTE_WRITE: int +PIPE_BUF: int +POLLERR: int +POLLHUP: int +POLLIN: int +POLLMSG: int +POLLNVAL: int +POLLOUT: int +POLLPRI: int +POLLRDBAND: int +POLLRDNORM: int +POLLWRBAND: int +POLLWRNORM: int + +class poll: + def __init__(self) -> None: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: Optional[float] = ...) -> List[Tuple[int, int]]: ... + +def select(rlist: Sequence[Any], wlist: Sequence[Any], xlist: Sequence[Any], + timeout: Optional[float] = ...) -> Tuple[List[Any], + List[Any], + List[Any]]: ... + +if sys.version_info >= (3, 3): + error = OSError +else: + class error(Exception): ... + +# BSD only +class kevent(object): + data: Any + fflags: int + filter: int + flags: int + ident: int + udata: Any + def __init__(self, ident: _FileDescriptor, filter: int = ..., flags: int = ..., fflags: int = ..., data: Any = ..., udata: Any = ...) -> None: ... + +# BSD only +class kqueue(object): + closed: bool + def __init__(self) -> None: ... + def close(self) -> None: ... + def control(self, changelist: Optional[Iterable[kevent]], max_events: int, timeout: float = ...) -> List[kevent]: ... + def fileno(self) -> int: ... + @classmethod + def fromfd(cls, fd: _FileDescriptor) -> kqueue: ... + +# Linux only +class epoll(object): + if sys.version_info >= (3, 3): + def __init__(self, sizehint: int = ..., flags: int = ...) -> None: ... + else: + def __init__(self, sizehint: int = ...) -> None: ... + if sys.version_info >= (3, 4): + def __enter__(self) -> epoll: ... + def __exit__(self, *args: Any) -> None: ... + def close(self) -> None: ... + closed: bool + def fileno(self) -> int: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: float = ..., maxevents: int = ...) -> List[Tuple[int, int]]: ... + @classmethod + def fromfd(cls, fd: _FileDescriptor) -> epoll: ... + +if sys.version_info >= (3, 3): + # Solaris only + class devpoll: + if sys.version_info >= (3, 4): + def close(self) -> None: ... + closed: bool + def fileno(self) -> int: ... + def register(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def modify(self, fd: _FileDescriptor, eventmask: int = ...) -> None: ... + def unregister(self, fd: _FileDescriptor) -> None: ... + def poll(self, timeout: Optional[float] = ...) -> List[Tuple[int, int]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi new file mode 100644 index 0000000..de1f8fc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/shutil.pyi @@ -0,0 +1,135 @@ +import os +import sys + +# 'bytes' paths are not properly supported: they don't work with all functions, +# sometimes they only work partially (broken exception messages), and the test +# cases don't use them. + +from typing import ( + List, Iterable, Callable, Any, Tuple, Sequence, NamedTuple, IO, + AnyStr, Optional, Union, Set, TypeVar, overload, Type, Protocol, Text +) + +if sys.version_info >= (3, 6): + _Path = Union[str, os.PathLike[str]] + _AnyStr = str + _AnyPath = TypeVar("_AnyPath", str, os.PathLike[str]) + # Return value of some functions that may either return a path-like object that was passed in or + # a string + _PathReturn = Any +elif sys.version_info >= (3,): + _Path = str + _AnyStr = str + _AnyPath = str + _PathReturn = str +else: + _Path = Text + _AnyStr = TypeVar("_AnyStr", str, unicode) + _AnyPath = TypeVar("_AnyPath", str, unicode) + _PathReturn = Type[None] + +if sys.version_info >= (3,): + class Error(OSError): ... + class SameFileError(Error): ... + class SpecialFileError(OSError): ... + class ExecError(OSError): ... + class ReadError(OSError): ... + class RegistryError(Exception): ... +else: + class Error(EnvironmentError): ... + class SpecialFileError(EnvironmentError): ... + class ExecError(EnvironmentError): ... + +_S_co = TypeVar("_S_co", covariant=True) +_S_contra = TypeVar("_S_contra", contravariant=True) + +class _Reader(Protocol[_S_co]): + def read(self, length: int) -> _S_co: ... + +class _Writer(Protocol[_S_contra]): + def write(self, data: _S_contra) -> Any: ... + +def copyfileobj(fsrc: _Reader[AnyStr], fdst: _Writer[AnyStr], + length: int = ...) -> None: ... + +if sys.version_info >= (3,): + def copyfile(src: _Path, dst: _AnyPath, *, + follow_symlinks: bool = ...) -> _AnyPath: ... + def copymode(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> None: ... + def copystat(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> None: ... + def copy(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> _PathReturn: ... + def copy2(src: _Path, dst: _Path, *, + follow_symlinks: bool = ...) -> _PathReturn: ... +else: + def copyfile(src: _Path, dst: _Path) -> None: ... + def copymode(src: _Path, dst: _Path) -> None: ... + def copystat(src: _Path, dst: _Path) -> None: ... + def copy(src: _Path, dst: _Path) -> _PathReturn: ... + def copy2(src: _Path, dst: _Path) -> _PathReturn: ... + +def ignore_patterns(*patterns: _Path) -> Callable[[Any, List[_AnyStr]], Set[_AnyStr]]: ... + +if sys.version_info >= (3,): + _IgnoreFn = Union[None, Callable[[str, List[str]], Iterable[str]], Callable[[_Path, List[str]], Iterable[str]]] + def copytree(src: _Path, dst: _Path, symlinks: bool = ..., + ignore: _IgnoreFn = ..., + copy_function: Callable[[str, str], None] = ..., + ignore_dangling_symlinks: bool = ...) -> _PathReturn: ... +else: + _IgnoreFn = Union[None, Callable[[AnyStr, List[AnyStr]], Iterable[AnyStr]]] + def copytree(src: AnyStr, dst: AnyStr, symlinks: bool = ..., + ignore: _IgnoreFn = ...) -> _PathReturn: ... + +if sys.version_info >= (3,): + @overload + def rmtree(path: bytes, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, str, Any], Any]] = ...) -> None: ... + @overload + def rmtree(path: _AnyPath, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, _AnyPath, Any], Any]] = ...) -> None: ... +else: + def rmtree(path: _AnyPath, ignore_errors: bool = ..., + onerror: Optional[Callable[[Any, _AnyPath, Any], Any]] = ...) -> None: ... + +if sys.version_info >= (3, 5): + _CopyFn = Union[Callable[[str, str], None], Callable[[_Path, _Path], None]] + def move(src: _Path, dst: _Path, + copy_function: _CopyFn = ...) -> _PathReturn: ... +else: + def move(src: _Path, dst: _Path) -> _PathReturn: ... + +if sys.version_info >= (3,): + _ntuple_diskusage = NamedTuple('usage', [('total', int), + ('used', int), + ('free', int)]) + def disk_usage(path: _Path) -> _ntuple_diskusage: ... + def chown(path: _Path, user: Optional[str] = ..., + group: Optional[str] = ...) -> None: ... + def which(cmd: _Path, mode: int = ..., + path: Optional[_Path] = ...) -> Optional[str]: ... + +def make_archive(base_name: _AnyStr, format: str, root_dir: Optional[_Path] = ..., + base_dir: Optional[_Path] = ..., verbose: bool = ..., + dry_run: bool = ..., owner: Optional[str] = ..., group: Optional[str] = ..., + logger: Optional[Any] = ...) -> _AnyStr: ... +def get_archive_formats() -> List[Tuple[str, str]]: ... + +def register_archive_format(name: str, function: Callable[..., Any], + extra_args: Optional[Sequence[Union[Tuple[str, Any], List[Any]]]] = ..., + description: str = ...) -> None: ... +def unregister_archive_format(name: str) -> None: ... + +if sys.version_info >= (3,): + # Should be _Path once http://bugs.python.org/issue30218 is fixed + def unpack_archive(filename: str, extract_dir: Optional[_Path] = ..., + format: Optional[str] = ...) -> None: ... + def register_unpack_format(name: str, extensions: List[str], function: Any, + extra_args: Sequence[Tuple[str, Any]] = ..., + description: str = ...) -> None: ... + def unregister_unpack_format(name: str) -> None: ... + def get_unpack_formats() -> List[Tuple[str, List[str], str]]: ... + + def get_terminal_size(fallback: Tuple[int, int] = ...) -> os.terminal_size: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/site.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/site.pyi new file mode 100644 index 0000000..4fdbad8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/site.pyi @@ -0,0 +1,17 @@ +# Stubs for site + +from typing import List, Iterable, Optional +import sys + +PREFIXES: List[str] +ENABLE_USER_SITE: Optional[bool] +USER_SITE: Optional[str] +USER_BASE: Optional[str] + +if sys.version_info < (3,): + def main() -> None: ... +def addsitedir(sitedir: str, + known_paths: Optional[Iterable[str]] = ...) -> None: ... +def getsitepackages(prefixes: Optional[Iterable[str]] = ...) -> List[str]: ... +def getuserbase() -> str: ... +def getusersitepackages() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi new file mode 100644 index 0000000..923b8bc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/smtpd.pyi @@ -0,0 +1,87 @@ +# Stubs for smtpd (Python 2 and 3) +import sys +import socket +import asyncore +import asynchat + +from typing import Any, DefaultDict, List, Optional, Text, Tuple, Type + +_Address = Tuple[str, int] # (host, port) + + +class SMTPChannel(asynchat.async_chat): + COMMAND: int + DATA: int + + if sys.version_info >= (3, 3): + command_size_limits: DefaultDict[str, int] + + if sys.version_info >= (3,): + smtp_server: SMTPServer + conn: socket.socket + addr: Any + received_lines: List[Text] + smtp_state: int + seen_greeting: str + mailfrom: str + rcpttos: List[str] + received_data: str + fqdn: str + peer: str + + command_size_limit: int + data_size_limit: int + + if sys.version_info >= (3, 5): + enable_SMTPUTF8: bool + + if sys.version_info >= (3, 3): + @property + def max_command_size_limit(self) -> int: ... + + if sys.version_info >= (3, 5): + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ..., + map: Optional[asyncore._maptype] = ..., enable_SMTPUTF8: bool = ..., decode_data: bool = ...) -> None: ... + elif sys.version_info >= (3, 4): + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ..., + map: Optional[asyncore._maptype] = ...) -> None: ... + else: + def __init__(self, server: SMTPServer, conn: socket.socket, addr: Any, data_size_limit: int = ...) -> None: ... + def push(self, msg: bytes) -> None: ... + def collect_incoming_data(self, data: bytes) -> None: ... + def found_terminator(self) -> None: ... + def smtp_HELO(self, arg: str) -> None: ... + def smtp_NOOP(self, arg: str) -> None: ... + def smtp_QUIT(self, arg: str) -> None: ... + def smtp_MAIL(self, arg: str) -> None: ... + def smtp_RCPT(self, arg: str) -> None: ... + def smtp_RSET(self, arg: str) -> None: ... + def smtp_DATA(self, arg: str) -> None: ... + if sys.version_info >= (3, 3): + def smtp_EHLO(self, arg: str) -> None: ... + def smtp_HELP(self, arg: str) -> None: ... + def smtp_VRFY(self, arg: str) -> None: ... + def smtp_EXPN(self, arg: str) -> None: ... + +class SMTPServer(asyncore.dispatcher): + channel_class: Type[SMTPChannel] + + data_size_limit: int + enable_SMTPUTF8: bool + + if sys.version_info >= (3, 5): + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ..., map: Optional[asyncore._maptype] = ..., + enable_SMTPUTF8: bool = ..., decode_data: bool = ...) -> None: ... + elif sys.version_info >= (3, 4): + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ..., map: Optional[asyncore._maptype] = ...) -> None: ... + else: + def __init__(self, localaddr: _Address, remoteaddr: _Address, + data_size_limit: int = ...) -> None: ... + def handle_accepted(self, conn: socket.socket, addr: Any) -> None: ... + def process_message(self, peer: _Address, mailfrom: str, rcpttos: List[Text], data: str, **kwargs: Any) -> Optional[str]: ... + +class DebuggingServer(SMTPServer): ... +class PureProxy(SMTPServer): ... +class MailmanProxy(PureProxy): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi new file mode 100644 index 0000000..aecd70b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sndhdr.pyi @@ -0,0 +1,25 @@ +# Stubs for sndhdr (Python 2 and 3) + +import os +import sys +from typing import Any, NamedTuple, Optional, Tuple, Union + +if sys.version_info >= (3, 5): + SndHeaders = NamedTuple('SndHeaders', [ + ('filetype', str), + ('framerate', int), + ('nchannels', int), + ('nframes', int), + ('sampwidth', Union[int, str]), + ]) + _SndHeaders = SndHeaders +else: + _SndHeaders = Tuple[str, int, int, int, Union[int, str]] + +if sys.version_info >= (3, 6): + _Path = Union[str, bytes, os.PathLike[Any]] +else: + _Path = Union[str, bytes] + +def what(filename: _Path) -> Optional[_SndHeaders]: ... +def whathdr(filename: _Path) -> Optional[_SndHeaders]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/socket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/socket.pyi new file mode 100644 index 0000000..22b2f91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/socket.pyi @@ -0,0 +1,626 @@ +# Stubs for socket +# Ron Murawski + +# based on: http://docs.python.org/3.2/library/socket.html +# see: http://hg.python.org/cpython/file/3d0686d90f55/Lib/socket.py +# see: http://nullege.com/codes/search/socket +# adapted for Python 2.7 by Michal Pokorny +import sys +from typing import Any, Iterable, Tuple, List, Optional, Union, overload, TypeVar, Text + +_WriteBuffer = Union[bytearray, memoryview] + +# ----- variables and constants ----- + +AF_UNIX: AddressFamily +AF_INET: AddressFamily +AF_INET6: AddressFamily +SOCK_STREAM: SocketKind +SOCK_DGRAM: SocketKind +SOCK_RAW: SocketKind +SOCK_RDM: SocketKind +SOCK_SEQPACKET: SocketKind +SOCK_CLOEXEC: SocketKind +SOCK_NONBLOCK: SocketKind +SOMAXCONN: int +has_ipv6: bool +_GLOBAL_DEFAULT_TIMEOUT: Any +SocketType: Any +SocketIO: Any + +# These are flags that may exist on Python 3.6. Many don't exist on all platforms. +AF_AAL5: AddressFamily +AF_APPLETALK: AddressFamily +AF_ASH: AddressFamily +AF_ATMPVC: AddressFamily +AF_ATMSVC: AddressFamily +AF_AX25: AddressFamily +AF_BLUETOOTH: AddressFamily +AF_BRIDGE: AddressFamily +AF_CAN: AddressFamily +AF_DECnet: AddressFamily +AF_ECONET: AddressFamily +AF_IPX: AddressFamily +AF_IRDA: AddressFamily +AF_KEY: AddressFamily +AF_LLC: AddressFamily +AF_NETBEUI: AddressFamily +AF_NETLINK: AddressFamily +AF_NETROM: AddressFamily +AF_PACKET: AddressFamily +AF_PPPOX: AddressFamily +AF_RDS: AddressFamily +AF_ROSE: AddressFamily +AF_ROUTE: AddressFamily +AF_SECURITY: AddressFamily +AF_SNA: AddressFamily +AF_SYSTEM: AddressFamily +AF_TIPC: AddressFamily +AF_UNSPEC: AddressFamily +AF_WANPIPE: AddressFamily +AF_X25: AddressFamily +AI_ADDRCONFIG: AddressInfo +AI_ALL: AddressInfo +AI_CANONNAME: AddressInfo +AI_DEFAULT: AddressInfo +AI_MASK: AddressInfo +AI_NUMERICHOST: AddressInfo +AI_NUMERICSERV: AddressInfo +AI_PASSIVE: AddressInfo +AI_V4MAPPED: AddressInfo +AI_V4MAPPED_CFG: AddressInfo +BDADDR_ANY: str +BDADDR_LOCAL: str +BTPROTO_HCI: int +BTPROTO_L2CAP: int +BTPROTO_RFCOMM: int +BTPROTO_SCO: int +CAN_EFF_FLAG: int +CAN_EFF_MASK: int +CAN_ERR_FLAG: int +CAN_ERR_MASK: int +CAN_RAW: int +CAN_RAW_ERR_FILTER: int +CAN_RAW_FILTER: int +CAN_RAW_LOOPBACK: int +CAN_RAW_RECV_OWN_MSGS: int +CAN_RTR_FLAG: int +CAN_SFF_MASK: int +CAPI: int +EAGAIN: int +EAI_ADDRFAMILY: int +EAI_AGAIN: int +EAI_BADFLAGS: int +EAI_BADHINTS: int +EAI_FAIL: int +EAI_FAMILY: int +EAI_MAX: int +EAI_MEMORY: int +EAI_NODATA: int +EAI_NONAME: int +EAI_OVERFLOW: int +EAI_PROTOCOL: int +EAI_SERVICE: int +EAI_SOCKTYPE: int +EAI_SYSTEM: int +EBADF: int +EINTR: int +EWOULDBLOCK: int +HCI_DATA_DIR: int +HCI_FILTER: int +HCI_TIME_STAMP: int +INADDR_ALLHOSTS_GROUP: int +INADDR_ANY: int +INADDR_BROADCAST: int +INADDR_LOOPBACK: int +INADDR_MAX_LOCAL_GROUP: int +INADDR_NONE: int +INADDR_UNSPEC_GROUP: int +IPPORT_RESERVED: int +IPPORT_USERRESERVED: int +IPPROTO_AH: int +IPPROTO_BIP: int +IPPROTO_DSTOPTS: int +IPPROTO_EGP: int +IPPROTO_EON: int +IPPROTO_ESP: int +IPPROTO_FRAGMENT: int +IPPROTO_GGP: int +IPPROTO_GRE: int +IPPROTO_HELLO: int +IPPROTO_HOPOPTS: int +IPPROTO_ICMP: int +IPPROTO_ICMPV6: int +IPPROTO_IDP: int +IPPROTO_IGMP: int +IPPROTO_IP: int +IPPROTO_IPCOMP: int +IPPROTO_IPIP: int +IPPROTO_IPV4: int +IPPROTO_IPV6: int +IPPROTO_MAX: int +IPPROTO_MOBILE: int +IPPROTO_ND: int +IPPROTO_NONE: int +IPPROTO_PIM: int +IPPROTO_PUP: int +IPPROTO_RAW: int +IPPROTO_ROUTING: int +IPPROTO_RSVP: int +IPPROTO_SCTP: int +IPPROTO_TCP: int +IPPROTO_TP: int +IPPROTO_UDP: int +IPPROTO_VRRP: int +IPPROTO_XTP: int +IPV6_CHECKSUM: int +IPV6_DONTFRAG: int +IPV6_DSTOPTS: int +IPV6_HOPLIMIT: int +IPV6_HOPOPTS: int +IPV6_JOIN_GROUP: int +IPV6_LEAVE_GROUP: int +IPV6_MULTICAST_HOPS: int +IPV6_MULTICAST_IF: int +IPV6_MULTICAST_LOOP: int +IPV6_NEXTHOP: int +IPV6_PATHMTU: int +IPV6_PKTINFO: int +IPV6_RECVDSTOPTS: int +IPV6_RECVHOPLIMIT: int +IPV6_RECVHOPOPTS: int +IPV6_RECVPATHMTU: int +IPV6_RECVPKTINFO: int +IPV6_RECVRTHDR: int +IPV6_RECVTCLASS: int +IPV6_RTHDR: int +IPV6_RTHDR_TYPE_0: int +IPV6_RTHDRDSTOPTS: int +IPV6_TCLASS: int +IPV6_UNICAST_HOPS: int +IPV6_USE_MIN_MTU: int +IPV6_V6ONLY: int +IP_ADD_MEMBERSHIP: int +IP_DEFAULT_MULTICAST_LOOP: int +IP_DEFAULT_MULTICAST_TTL: int +IP_DROP_MEMBERSHIP: int +IP_HDRINCL: int +IP_MAX_MEMBERSHIPS: int +IP_MULTICAST_IF: int +IP_MULTICAST_LOOP: int +IP_MULTICAST_TTL: int +IP_OPTIONS: int +IP_RECVDSTADDR: int +IP_RECVOPTS: int +IP_RECVRETOPTS: int +IP_RETOPTS: int +IP_TOS: int +IP_TRANSPARENT: int +IP_TTL: int +IPX_TYPE: int +LOCAL_PEERCRED: int +MSG_BCAST: MsgFlag +MSG_BTAG: MsgFlag +MSG_CMSG_CLOEXEC: MsgFlag +MSG_CONFIRM: MsgFlag +MSG_CTRUNC: MsgFlag +MSG_DONTROUTE: MsgFlag +MSG_DONTWAIT: MsgFlag +MSG_EOF: MsgFlag +MSG_EOR: MsgFlag +MSG_ERRQUEUE: MsgFlag +MSG_ETAG: MsgFlag +MSG_FASTOPEN: MsgFlag +MSG_MCAST: MsgFlag +MSG_MORE: MsgFlag +MSG_NOSIGNAL: MsgFlag +MSG_NOTIFICATION: MsgFlag +MSG_OOB: MsgFlag +MSG_PEEK: MsgFlag +MSG_TRUNC: MsgFlag +MSG_WAITALL: MsgFlag +NETLINK_ARPD: int +NETLINK_CRYPTO: int +NETLINK_DNRTMSG: int +NETLINK_FIREWALL: int +NETLINK_IP6_FW: int +NETLINK_NFLOG: int +NETLINK_ROUTE6: int +NETLINK_ROUTE: int +NETLINK_SKIP: int +NETLINK_TAPBASE: int +NETLINK_TCPDIAG: int +NETLINK_USERSOCK: int +NETLINK_W1: int +NETLINK_XFRM: int +NI_DGRAM: int +NI_MAXHOST: int +NI_MAXSERV: int +NI_NAMEREQD: int +NI_NOFQDN: int +NI_NUMERICHOST: int +NI_NUMERICSERV: int +PACKET_BROADCAST: int +PACKET_FASTROUTE: int +PACKET_HOST: int +PACKET_LOOPBACK: int +PACKET_MULTICAST: int +PACKET_OTHERHOST: int +PACKET_OUTGOING: int +PF_CAN: int +PF_PACKET: int +PF_RDS: int +PF_SYSTEM: int +SCM_CREDENTIALS: int +SCM_CREDS: int +SCM_RIGHTS: int +SHUT_RD: int +SHUT_RDWR: int +SHUT_WR: int +SOL_ATALK: int +SOL_AX25: int +SOL_CAN_BASE: int +SOL_CAN_RAW: int +SOL_HCI: int +SOL_IP: int +SOL_IPX: int +SOL_NETROM: int +SOL_RDS: int +SOL_ROSE: int +SOL_SOCKET: int +SOL_TCP: int +SOL_TIPC: int +SOL_UDP: int +SO_ACCEPTCONN: int +SO_BINDTODEVICE: int +SO_BROADCAST: int +SO_DEBUG: int +SO_DONTROUTE: int +SO_ERROR: int +SO_EXCLUSIVEADDRUSE: int +SO_KEEPALIVE: int +SO_LINGER: int +SO_MARK: int +SO_OOBINLINE: int +SO_PASSCRED: int +SO_PEERCRED: int +SO_PRIORITY: int +SO_RCVBUF: int +SO_RCVLOWAT: int +SO_RCVTIMEO: int +SO_REUSEADDR: int +SO_REUSEPORT: int +SO_SETFIB: int +SO_SNDBUF: int +SO_SNDLOWAT: int +SO_SNDTIMEO: int +SO_TYPE: int +SO_USELOOPBACK: int +SYSPROTO_CONTROL: int +TCP_CORK: int +TCP_DEFER_ACCEPT: int +TCP_FASTOPEN: int +TCP_INFO: int +TCP_KEEPCNT: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_LINGER2: int +TCP_MAXSEG: int +TCP_NODELAY: int +TCP_NOTSENT_LOWAT: int +TCP_QUICKACK: int +TCP_SYNCNT: int +TCP_WINDOW_CLAMP: int +TIPC_ADDR_ID: int +TIPC_ADDR_NAME: int +TIPC_ADDR_NAMESEQ: int +TIPC_CFG_SRV: int +TIPC_CLUSTER_SCOPE: int +TIPC_CONN_TIMEOUT: int +TIPC_CRITICAL_IMPORTANCE: int +TIPC_DEST_DROPPABLE: int +TIPC_HIGH_IMPORTANCE: int +TIPC_IMPORTANCE: int +TIPC_LOW_IMPORTANCE: int +TIPC_MEDIUM_IMPORTANCE: int +TIPC_NODE_SCOPE: int +TIPC_PUBLISHED: int +TIPC_SRC_DROPPABLE: int +TIPC_SUB_CANCEL: int +TIPC_SUB_PORTS: int +TIPC_SUB_SERVICE: int +TIPC_SUBSCR_TIMEOUT: int +TIPC_TOP_SRV: int +TIPC_WAIT_FOREVER: int +TIPC_WITHDRAWN: int +TIPC_ZONE_SCOPE: int + +if sys.version_info >= (3, 3): + RDS_CANCEL_SENT_TO: int + RDS_CMSG_RDMA_ARGS: int + RDS_CMSG_RDMA_DEST: int + RDS_CMSG_RDMA_MAP: int + RDS_CMSG_RDMA_STATUS: int + RDS_CMSG_RDMA_UPDATE: int + RDS_CONG_MONITOR: int + RDS_FREE_MR: int + RDS_GET_MR: int + RDS_GET_MR_FOR_DEST: int + RDS_RDMA_DONTWAIT: int + RDS_RDMA_FENCE: int + RDS_RDMA_INVALIDATE: int + RDS_RDMA_NOTIFY_ME: int + RDS_RDMA_READWRITE: int + RDS_RDMA_SILENT: int + RDS_RDMA_USE_ONCE: int + RDS_RECVERR: int + +if sys.version_info >= (3, 4): + CAN_BCM: int + CAN_BCM_TX_SETUP: int + CAN_BCM_TX_DELETE: int + CAN_BCM_TX_READ: int + CAN_BCM_TX_SEND: int + CAN_BCM_RX_SETUP: int + CAN_BCM_RX_DELETE: int + CAN_BCM_RX_READ: int + CAN_BCM_TX_STATUS: int + CAN_BCM_TX_EXPIRED: int + CAN_BCM_RX_STATUS: int + CAN_BCM_RX_TIMEOUT: int + CAN_BCM_RX_CHANGED: int + AF_LINK: AddressFamily + +if sys.version_info >= (3, 5): + CAN_RAW_FD_FRAMES: int + +if sys.version_info >= (3, 6): + SO_DOMAIN: int + SO_PROTOCOL: int + SO_PEERSEC: int + SO_PASSSEC: int + TCP_USER_TIMEOUT: int + TCP_CONGESTION: int + AF_ALG: AddressFamily + SOL_ALG: int + ALG_SET_KEY: int + ALG_SET_IV: int + ALG_SET_OP: int + ALG_SET_AEAD_ASSOCLEN: int + ALG_SET_AEAD_AUTHSIZE: int + ALG_SET_PUBKEY: int + ALG_OP_DECRYPT: int + ALG_OP_ENCRYPT: int + ALG_OP_SIGN: int + ALG_OP_VERIFY: int + +if sys.platform == 'win32': + SIO_RCVALL: int + SIO_KEEPALIVE_VALS: int + RCVALL_IPLEVEL: int + RCVALL_MAX: int + RCVALL_OFF: int + RCVALL_ON: int + RCVALL_SOCKETLEVELONLY: int + + if sys.version_info >= (3, 6): + SIO_LOOPBACK_FAST_PATH: int + +# enum versions of above flags py 3.4+ +if sys.version_info >= (3, 4): + from enum import IntEnum + + class AddressFamily(IntEnum): + AF_UNIX = ... + AF_INET = ... + AF_INET6 = ... + AF_APPLETALK = ... + AF_ASH = ... + AF_ATMPVC = ... + AF_ATMSVC = ... + AF_AX25 = ... + AF_BLUETOOTH = ... + AF_BRIDGE = ... + AF_DECnet = ... + AF_ECONET = ... + AF_IPX = ... + AF_IRDA = ... + AF_KEY = ... + AF_LLC = ... + AF_NETBEUI = ... + AF_NETLINK = ... + AF_NETROM = ... + AF_PACKET = ... + AF_PPPOX = ... + AF_ROSE = ... + AF_ROUTE = ... + AF_SECURITY = ... + AF_SNA = ... + AF_TIPC = ... + AF_UNSPEC = ... + AF_WANPIPE = ... + AF_X25 = ... + AF_LINK = ... + + class SocketKind(IntEnum): + SOCK_STREAM = ... + SOCK_DGRAM = ... + SOCK_RAW = ... + SOCK_RDM = ... + SOCK_SEQPACKET = ... + SOCK_CLOEXEC = ... + SOCK_NONBLOCK = ... +else: + AddressFamily = int + SocketKind = int + +if sys.version_info >= (3, 6): + from enum import IntFlag + + class AddressInfo(IntFlag): + AI_ADDRCONFIG = ... + AI_ALL = ... + AI_CANONNAME = ... + AI_NUMERICHOST = ... + AI_NUMERICSERV = ... + AI_PASSIVE = ... + AI_V4MAPPED = ... + + class MsgFlag(IntFlag): + MSG_CTRUNC = ... + MSG_DONTROUTE = ... + MSG_DONTWAIT = ... + MSG_EOR = ... + MSG_OOB = ... + MSG_PEEK = ... + MSG_TRUNC = ... + MSG_WAITALL = ... +else: + AddressInfo = int + MsgFlag = int + + +# ----- exceptions ----- +class error(IOError): + ... + +class herror(error): + def __init__(self, herror: int, string: str) -> None: ... + +class gaierror(error): + def __init__(self, error: int, string: str) -> None: ... + +class timeout(error): + ... + + +# Addresses can be either tuples of varying lengths (AF_INET, AF_INET6, +# AF_NETLINK, AF_TIPC) or strings (AF_UNIX). + +_Address = Union[tuple, str] +_RetAddress = Any + +# TODO AF_PACKET and AF_BLUETOOTH address objects + +_CMSG = Tuple[int, int, bytes] +_SelfT = TypeVar('_SelfT', bound=socket) + +# ----- classes ----- +class socket: + family: int + type: int + proto: int + + if sys.version_info < (3,): + def __init__(self, family: int = ..., type: int = ..., proto: int = ...) -> None: ... + else: + def __init__(self, family: int = ..., type: int = ..., proto: int = ..., fileno: Optional[int] = ...) -> None: ... + + if sys.version_info >= (3, 2): + def __enter__(self: _SelfT) -> _SelfT: ... + def __exit__(self, *args: Any) -> None: ... + + # --- methods --- + def accept(self) -> Tuple[socket, _RetAddress]: ... + def bind(self, address: Union[_Address, bytes]) -> None: ... + def close(self) -> None: ... + def connect(self, address: Union[_Address, bytes]) -> None: ... + def connect_ex(self, address: Union[_Address, bytes]) -> int: ... + def detach(self) -> int: ... + def fileno(self) -> int: ... + + def getpeername(self) -> _RetAddress: ... + def getsockname(self) -> _RetAddress: ... + + @overload + def getsockopt(self, level: int, optname: int) -> int: ... + @overload + def getsockopt(self, level: int, optname: int, buflen: int) -> bytes: ... + + def gettimeout(self) -> Optional[float]: ... + def ioctl(self, control: object, + option: Tuple[int, int, int]) -> None: ... + if sys.version_info < (3, 5): + def listen(self, backlog: int) -> None: ... + else: + def listen(self, backlog: int = ...) -> None: ... + # TODO the return value may be BinaryIO or TextIO, depending on mode + def makefile(self, mode: str = ..., buffering: int = ..., + encoding: str = ..., errors: str = ..., + newline: str = ...) -> Any: + ... + def recv(self, bufsize: int, flags: int = ...) -> bytes: ... + + def recvfrom(self, bufsize: int, flags: int = ...) -> Tuple[bytes, _RetAddress]: ... + def recvfrom_into(self, buffer: _WriteBuffer, nbytes: int, + flags: int = ...) -> Tuple[int, _RetAddress]: ... + def recv_into(self, buffer: _WriteBuffer, nbytes: int, + flags: int = ...) -> int: ... + def send(self, data: bytes, flags: int = ...) -> int: ... + def sendall(self, data: bytes, flags: int = ...) -> None: + ... # return type: None on success + @overload + def sendto(self, data: bytes, address: _Address) -> int: ... + @overload + def sendto(self, data: bytes, flags: int, address: _Address) -> int: ... + def setblocking(self, flag: bool) -> None: ... + def settimeout(self, value: Optional[float]) -> None: ... + def setsockopt(self, level: int, optname: int, value: Union[int, bytes]) -> None: ... + def shutdown(self, how: int) -> None: ... + + if sys.version_info >= (3, 3): + def recvmsg(self, __bufsize: int, __ancbufsize: int = ..., + __flags: int = ...) -> Tuple[bytes, List[_CMSG], int, Any]: ... + def recvmsg_into(self, __buffers: Iterable[_WriteBuffer], __ancbufsize: int = ..., + __flags: int = ...) -> Tuple[int, List[_CMSG], int, Any]: ... + def sendmsg(self, __buffers: Iterable[bytes], __ancdata: Iterable[_CMSG] = ..., + __flags: int = ..., __address: _Address = ...) -> int: ... + if sys.version_info >= (3, 4): + def set_inheritable(self, inheritable: bool) -> None: ... + + +# ----- functions ----- +def create_connection(address: Tuple[Optional[str], int], + timeout: Optional[float] = ..., + source_address: Tuple[Union[bytearray, bytes, Text], int] = ...) -> socket: ... + +# the 5th tuple item is an address +# TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers +# https://github.com/python/mypy/issues/2509 +def getaddrinfo( + host: Optional[Union[bytearray, bytes, Text]], port: Union[str, int, None], family: int = ..., + socktype: int = ..., proto: int = ..., + flags: int = ...) -> List[Tuple[int, int, int, str, Tuple[Any, ...]]]: + ... + +def getfqdn(name: str = ...) -> str: ... +def gethostbyname(hostname: str) -> str: ... +def gethostbyname_ex(hostname: str) -> Tuple[str, List[str], List[str]]: ... +def gethostname() -> str: ... +def gethostbyaddr(ip_address: str) -> Tuple[str, List[str], List[str]]: ... +def getnameinfo(sockaddr: tuple, flags: int) -> Tuple[str, int]: ... +def getprotobyname(protocolname: str) -> int: ... +def getservbyname(servicename: str, protocolname: str = ...) -> int: ... +def getservbyport(port: int, protocolname: str = ...) -> str: ... +def socketpair(family: int = ..., + type: int = ..., + proto: int = ...) -> Tuple[socket, socket]: ... +def fromfd(fd: int, family: int, type: int, proto: int = ...) -> socket: ... +def ntohl(x: int) -> int: ... # param & ret val are 32-bit ints +def ntohs(x: int) -> int: ... # param & ret val are 16-bit ints +def htonl(x: int) -> int: ... # param & ret val are 32-bit ints +def htons(x: int) -> int: ... # param & ret val are 16-bit ints +def inet_aton(ip_string: str) -> bytes: ... # ret val 4 bytes in length +def inet_ntoa(packed_ip: bytes) -> str: ... +def inet_pton(address_family: int, ip_string: str) -> bytes: ... +def inet_ntop(address_family: int, packed_ip: bytes) -> str: ... +def getdefaulttimeout() -> Optional[float]: ... +def setdefaulttimeout(timeout: Optional[float]) -> None: ... + +if sys.version_info >= (3, 3): + def CMSG_LEN(length: int) -> int: ... + def CMSG_SPACE(length: int) -> int: ... + def sethostname(name: str) -> None: ... + def if_nameindex() -> List[Tuple[int, str]]: ... + def if_nametoindex(name: str) -> int: ... + def if_indextoname(index: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi new file mode 100644 index 0000000..d5d20d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/__init__.pyi @@ -0,0 +1 @@ +from sqlite3.dbapi2 import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi new file mode 100644 index 0000000..5b3d2a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sqlite3/dbapi2.pyi @@ -0,0 +1,289 @@ +# Filip Hron +# based heavily on Andrey Vlasovskikh's python-skeletons https://github.com/JetBrains/python-skeletons/blob/master/sqlite3.py + +import os +import sys +from typing import Any, Callable, Iterable, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union +from datetime import date, time, datetime + +_T = TypeVar('_T') + +paramstyle: str +threadsafety: int +apilevel: str +Date = date +Time = time +Timestamp = datetime + +def DateFromTicks(ticks): ... +def TimeFromTicks(ticks): ... +def TimestampFromTicks(ticks): ... + +version_info: str +sqlite_version_info: Tuple[int, int, int] +if sys.version_info >= (3,): + Binary = memoryview +else: + Binary = buffer + +def register_adapters_and_converters(): ... + +# The remaining definitions are imported from _sqlite3. + +PARSE_COLNAMES: int +PARSE_DECLTYPES: int +SQLITE_ALTER_TABLE: int +SQLITE_ANALYZE: int +SQLITE_ATTACH: int +SQLITE_CREATE_INDEX: int +SQLITE_CREATE_TABLE: int +SQLITE_CREATE_TEMP_INDEX: int +SQLITE_CREATE_TEMP_TABLE: int +SQLITE_CREATE_TEMP_TRIGGER: int +SQLITE_CREATE_TEMP_VIEW: int +SQLITE_CREATE_TRIGGER: int +SQLITE_CREATE_VIEW: int +SQLITE_DELETE: int +SQLITE_DENY: int +SQLITE_DETACH: int +SQLITE_DROP_INDEX: int +SQLITE_DROP_TABLE: int +SQLITE_DROP_TEMP_INDEX: int +SQLITE_DROP_TEMP_TABLE: int +SQLITE_DROP_TEMP_TRIGGER: int +SQLITE_DROP_TEMP_VIEW: int +SQLITE_DROP_TRIGGER: int +SQLITE_DROP_VIEW: int +SQLITE_IGNORE: int +SQLITE_INSERT: int +SQLITE_OK: int +SQLITE_PRAGMA: int +SQLITE_READ: int +SQLITE_REINDEX: int +SQLITE_SELECT: int +SQLITE_TRANSACTION: int +SQLITE_UPDATE: int +adapters: Any +converters: Any +sqlite_version: str +version: str + +# TODO: adapt needs to get probed +def adapt(obj, protocol, alternate): ... +def complete_statement(sql: str) -> bool: ... +if sys.version_info >= (3, 7): + def connect(database: Union[bytes, Text, os.PathLike[Text]], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ..., + uri: bool = ...) -> Connection: ... +elif sys.version_info >= (3, 4): + def connect(database: Union[bytes, Text], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ..., + uri: bool = ...) -> Connection: ... +else: + def connect(database: Union[bytes, Text], + timeout: float = ..., + detect_types: int = ..., + isolation_level: Optional[str] = ..., + check_same_thread: bool = ..., + factory: Optional[Type[Connection]] = ..., + cached_statements: int = ...) -> Connection: ... +def enable_callback_tracebacks(flag: bool) -> None: ... +def enable_shared_cache(do_enable: int) -> None: ... +def register_adapter(type: Type[_T], callable: Callable[[_T], Union[int, float, str, bytes]]) -> None: ... +def register_converter(typename: str, callable: Callable[[bytes], Any]) -> None: ... + +class Cache(object): + def __init__(self, *args, **kwargs) -> None: ... + def display(self, *args, **kwargs) -> None: ... + def get(self, *args, **kwargs) -> None: ... + +class Connection(object): + DataError: Any + DatabaseError: Any + Error: Any + IntegrityError: Any + InterfaceError: Any + InternalError: Any + NotSupportedError: Any + OperationalError: Any + ProgrammingError: Any + Warning: Any + in_transaction: Any + isolation_level: Any + row_factory: Any + text_factory: Any + total_changes: Any + def __init__(self, *args, **kwargs): ... + def close(self) -> None: ... + def commit(self) -> None: ... + def create_aggregate(self, name: str, num_params: int, aggregate_class: type) -> None: ... + def create_collation(self, name: str, callable: Any) -> None: ... + def create_function(self, name: str, num_params: int, func: Any) -> None: ... + def cursor(self, cursorClass: Optional[type] = ...) -> Cursor: ... + def execute(self, sql: str, parameters: Iterable = ...) -> Cursor: ... + # TODO: please check in executemany() if seq_of_parameters type is possible like this + def executemany(self, sql: str, seq_of_parameters: Iterable[Iterable]) -> Cursor: ... + def executescript(self, sql_script: Union[bytes, Text]) -> Cursor: ... + def interrupt(self, *args, **kwargs) -> None: ... + def iterdump(self, *args, **kwargs) -> None: ... + def rollback(self, *args, **kwargs) -> None: ... + # TODO: set_authorizer(authorzer_callback) + # see https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.set_authorizer + # returns [SQLITE_OK, SQLITE_DENY, SQLITE_IGNORE] so perhaps int + def set_authorizer(self, *args, **kwargs) -> None: ... + # set_progress_handler(handler, n) -> see https://docs.python.org/2/library/sqlite3.html#sqlite3.Connection.set_progress_handler + def set_progress_handler(self, *args, **kwargs) -> None: ... + def set_trace_callback(self, *args, **kwargs): ... + # enable_load_extension and load_extension is not available on python distributions compiled + # without sqlite3 loadable extension support. see footnotes https://docs.python.org/3/library/sqlite3.html#f1 + def enable_load_extension(self, enabled: bool) -> None: ... + def load_extension(self, path: str) -> None: ... + if sys.version_info >= (3, 7): + def backup(self, target: Connection, *, pages: int = ..., + progress: Optional[Callable[[int, int, int], object]] = ..., name: str = ..., + sleep: float = ...) -> None: ... + def __call__(self, *args, **kwargs): ... + def __enter__(self, *args, **kwargs): ... + def __exit__(self, *args, **kwargs): ... + +class Cursor(Iterator[Any]): + arraysize: Any + connection: Any + description: Any + lastrowid: Any + row_factory: Any + rowcount: Any + # TODO: Cursor class accepts exactly 1 argument + # required type is sqlite3.Connection (which is imported as _Connection) + # however, the name of the __init__ variable is unknown + def __init__(self, *args, **kwargs) -> None: ... + def close(self, *args, **kwargs) -> None: ... + def execute(self, sql: str, parameters: Iterable = ...) -> Cursor: ... + def executemany(self, sql: str, seq_of_parameters: Iterable[Iterable]) -> Cursor: ... + def executescript(self, sql_script: Union[bytes, Text]) -> Cursor: ... + def fetchall(self) -> List[Any]: ... + def fetchmany(self, size: Optional[int] = ...) -> List[Any]: ... + def fetchone(self) -> Any: ... + def setinputsizes(self, *args, **kwargs) -> None: ... + def setoutputsize(self, *args, **kwargs) -> None: ... + def __iter__(self) -> Cursor: ... + if sys.version_info >= (3, 0): + def __next__(self) -> Any: ... + else: + def next(self) -> Any: ... + + +class DataError(DatabaseError): ... + +class DatabaseError(Error): ... + +class Error(Exception): ... + +class IntegrityError(DatabaseError): ... + +class InterfaceError(Error): ... + +class InternalError(DatabaseError): ... + +class NotSupportedError(DatabaseError): ... + +class OperationalError(DatabaseError): ... + +class OptimizedUnicode(object): + maketrans: Any + def __init__(self, *args, **kwargs): ... + def capitalize(self, *args, **kwargs): ... + def casefold(self, *args, **kwargs): ... + def center(self, *args, **kwargs): ... + def count(self, *args, **kwargs): ... + def encode(self, *args, **kwargs): ... + def endswith(self, *args, **kwargs): ... + def expandtabs(self, *args, **kwargs): ... + def find(self, *args, **kwargs): ... + def format(self, *args, **kwargs): ... + def format_map(self, *args, **kwargs): ... + def index(self, *args, **kwargs): ... + def isalnum(self, *args, **kwargs): ... + def isalpha(self, *args, **kwargs): ... + def isdecimal(self, *args, **kwargs): ... + def isdigit(self, *args, **kwargs): ... + def isidentifier(self, *args, **kwargs): ... + def islower(self, *args, **kwargs): ... + def isnumeric(self, *args, **kwargs): ... + def isprintable(self, *args, **kwargs): ... + def isspace(self, *args, **kwargs): ... + def istitle(self, *args, **kwargs): ... + def isupper(self, *args, **kwargs): ... + def join(self, *args, **kwargs): ... + def ljust(self, *args, **kwargs): ... + def lower(self, *args, **kwargs): ... + def lstrip(self, *args, **kwargs): ... + def partition(self, *args, **kwargs): ... + def replace(self, *args, **kwargs): ... + def rfind(self, *args, **kwargs): ... + def rindex(self, *args, **kwargs): ... + def rjust(self, *args, **kwargs): ... + def rpartition(self, *args, **kwargs): ... + def rsplit(self, *args, **kwargs): ... + def rstrip(self, *args, **kwargs): ... + def split(self, *args, **kwargs): ... + def splitlines(self, *args, **kwargs): ... + def startswith(self, *args, **kwargs): ... + def strip(self, *args, **kwargs): ... + def swapcase(self, *args, **kwargs): ... + def title(self, *args, **kwargs): ... + def translate(self, *args, **kwargs): ... + def upper(self, *args, **kwargs): ... + def zfill(self, *args, **kwargs): ... + def __add__(self, other): ... + def __contains__(self, *args, **kwargs): ... + def __eq__(self, other): ... + def __format__(self, *args, **kwargs): ... + def __ge__(self, other): ... + def __getitem__(self, index): ... + def __getnewargs__(self, *args, **kwargs): ... + def __gt__(self, other): ... + def __hash__(self): ... + def __iter__(self): ... + def __le__(self, other): ... + def __len__(self, *args, **kwargs): ... + def __lt__(self, other): ... + def __mod__(self, other): ... + def __mul__(self, other): ... + def __ne__(self, other): ... + def __rmod__(self, other): ... + def __rmul__(self, other): ... + +class PrepareProtocol(object): + def __init__(self, *args, **kwargs): ... + +class ProgrammingError(DatabaseError): ... + +class Row(object): + def __init__(self, *args, **kwargs): ... + def keys(self, *args, **kwargs): ... + def __eq__(self, other): ... + def __ge__(self, other): ... + def __getitem__(self, index): ... + def __gt__(self, other): ... + def __hash__(self): ... + def __iter__(self): ... + def __le__(self, other): ... + def __len__(self, *args, **kwargs): ... + def __lt__(self, other): ... + def __ne__(self, other): ... + +class Statement(object): + def __init__(self, *args, **kwargs): ... + +class Warning(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi new file mode 100644 index 0000000..be39a31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sre_compile.pyi @@ -0,0 +1,18 @@ +# Source: https://hg.python.org/cpython/file/2.7/Lib/sre_compile.py +# and https://github.com/python/cpython/blob/master/Lib/sre_compile.py + +import sys +from sre_parse import SubPattern +from typing import Any, List, Pattern, Tuple, Type, TypeVar, Union + +MAXCODE: int +if sys.version_info < (3, 0): + STRING_TYPES: Tuple[Type[str], Type[unicode]] + _IsStringType = int +else: + from sre_constants import _NamedIntConstant + def dis(code: List[_NamedIntConstant]) -> None: ... + _IsStringType = bool + +def isstring(obj: Any) -> _IsStringType: ... +def compile(p: Union[str, bytes, SubPattern], flags: int = ...) -> Pattern: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi new file mode 100644 index 0000000..4b51e40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/ssl.pyi @@ -0,0 +1,313 @@ +# Stubs for ssl + +from typing import ( + Any, Dict, Callable, List, NamedTuple, Optional, Set, Tuple, Union, +) +import socket +import sys + +_PCTRTT = Tuple[Tuple[str, str], ...] +_PCTRTTT = Tuple[_PCTRTT, ...] +_PeerCertRetDictType = Dict[str, Union[str, _PCTRTTT, _PCTRTT]] +_PeerCertRetType = Union[_PeerCertRetDictType, bytes, None] +_EnumRetType = List[Tuple[bytes, str, Union[Set[str], bool]]] +_PasswordType = Union[Callable[[], Union[str, bytes]], str, bytes] + +if sys.version_info >= (3, 5): + _SC1ArgT = Union[SSLSocket, SSLObject] +else: + _SC1ArgT = SSLSocket +_SrvnmeCbType = Callable[[_SC1ArgT, Optional[str], SSLSocket], Optional[int]] + +class SSLError(OSError): + library: str + reason: str +class SSLZeroReturnError(SSLError): ... +class SSLWantReadError(SSLError): ... +class SSLWantWriteError(SSLError): ... +class SSLSyscallError(SSLError): ... +class SSLEOFError(SSLError): ... + +if sys.version_info >= (3, 7): + class SSLCertVerificationError(SSLError, ValueError): + verify_code: int + verify_message: str + + CertificateError = SSLCertVerificationError +else: + class CertificateError(ValueError): ... + + +def wrap_socket(sock: socket.socket, keyfile: Optional[str] = ..., + certfile: Optional[str] = ..., server_side: bool = ..., + cert_reqs: int = ..., ssl_version: int = ..., + ca_certs: Optional[str] = ..., + do_handshake_on_connect: bool = ..., + suppress_ragged_eofs: bool = ..., + ciphers: Optional[str] = ...) -> SSLSocket: ... + + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + def create_default_context(purpose: Any = ..., *, + cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Optional[str] = ...) -> SSLContext: ... + +if sys.version_info >= (3, 4): + def _create_unverified_context(protocol: int = ..., *, + cert_reqs: int = ..., + check_hostname: bool = ..., + purpose: Any = ..., + certfile: Optional[str] = ..., + keyfile: Optional[str] = ..., + cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Optional[str] = ...) -> SSLContext: ... + _create_default_https_context: Callable[..., SSLContext] + +if sys.version_info >= (3, 3): + def RAND_bytes(num: int) -> bytes: ... + def RAND_pseudo_bytes(num: int) -> Tuple[bytes, bool]: ... +def RAND_status() -> bool: ... +def RAND_egd(path: str) -> None: ... +def RAND_add(bytes: bytes, entropy: float) -> None: ... + + +def match_hostname(cert: _PeerCertRetType, hostname: str) -> None: ... +def cert_time_to_seconds(cert_time: str) -> int: ... +def get_server_certificate(addr: Tuple[str, int], ssl_version: int = ..., + ca_certs: Optional[str] = ...) -> str: ... +def DER_cert_to_PEM_cert(der_cert_bytes: bytes) -> str: ... +def PEM_cert_to_DER_cert(pem_cert_string: str) -> bytes: ... +if sys.version_info < (3,) or sys.version_info >= (3, 4): + DefaultVerifyPaths = NamedTuple('DefaultVerifyPaths', + [('cafile', str), ('capath', str), + ('openssl_cafile_env', str), + ('openssl_cafile', str), + ('openssl_capath_env', str), + ('openssl_capath', str)]) + def get_default_verify_paths() -> DefaultVerifyPaths: ... + +if sys.platform == 'win32': + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def enum_certificates(store_name: str) -> _EnumRetType: ... + def enum_crls(store_name: str) -> _EnumRetType: ... + + +CERT_NONE: int +CERT_OPTIONAL: int +CERT_REQUIRED: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + VERIFY_DEFAULT: int + VERIFY_CRL_CHECK_LEAF: int + VERIFY_CRL_CHECK_CHAIN: int + VERIFY_X509_STRICT: int + VERIFY_X509_TRUSTED_FIRST: int + +PROTOCOL_SSLv23: int +PROTOCOL_SSLv2: int +PROTOCOL_SSLv3: int +PROTOCOL_TLSv1: int +if sys.version_info < (3,) or sys.version_info >= (3, 4): + PROTOCOL_TLSv1_1: int + PROTOCOL_TLSv1_2: int +if sys.version_info >= (3, 5): + PROTOCOL_TLS: int +if sys.version_info >= (3, 6): + PROTOCOL_TLS_CLIENT: int + PROTOCOL_TLS_SERVER: int + +OP_ALL: int +OP_NO_SSLv2: int +OP_NO_SSLv3: int +OP_NO_TLSv1: int +if sys.version_info < (3,) or sys.version_info >= (3, 4): + OP_NO_TLSv1_1: int + OP_NO_TLSv1_2: int +OP_CIPHER_SERVER_PREFERENCE: int +OP_SINGLE_DH_USE: int +OP_SINGLE_ECDH_USE: int +OP_NO_COMPRESSION: int +if sys.version_info >= (3, 6): + OP_NO_TICKET: int + +if sys.version_info < (3,) or sys.version_info >= (3, 5): + HAS_ALPN: int +HAS_ECDH: bool +HAS_SNI: bool +HAS_NPN: bool +CHANNEL_BINDING_TYPES: List[str] + +OPENSSL_VERSION: str +OPENSSL_VERSION_INFO: Tuple[int, int, int, int, int] +OPENSSL_VERSION_NUMBER: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + ALERT_DESCRIPTION_HANDSHAKE_FAILURE: int + ALERT_DESCRIPTION_INTERNAL_ERROR: int + ALERT_DESCRIPTION_ACCESS_DENIED: int + ALERT_DESCRIPTION_BAD_CERTIFICATE: int + ALERT_DESCRIPTION_BAD_CERTIFICATE_HASH_VALUE: int + ALERT_DESCRIPTION_BAD_CERTIFICATE_STATUS_RESPONSE: int + ALERT_DESCRIPTION_BAD_RECORD_MAC: int + ALERT_DESCRIPTION_CERTIFICATE_EXPIRED: int + ALERT_DESCRIPTION_CERTIFICATE_REVOKED: int + ALERT_DESCRIPTION_CERTIFICATE_UNKNOWN: int + ALERT_DESCRIPTION_CERTIFICATE_UNOBTAINABLE: int + ALERT_DESCRIPTION_CLOSE_NOTIFY: int + ALERT_DESCRIPTION_DECODE_ERROR: int + ALERT_DESCRIPTION_DECOMPRESSION_FAILURE: int + ALERT_DESCRIPTION_DECRYPT_ERROR: int + ALERT_DESCRIPTION_ILLEGAL_PARAMETER: int + ALERT_DESCRIPTION_INSUFFICIENT_SECURITY: int + ALERT_DESCRIPTION_NO_RENEGOTIATION: int + ALERT_DESCRIPTION_PROTOCOL_VERSION: int + ALERT_DESCRIPTION_RECORD_OVERFLOW: int + ALERT_DESCRIPTION_UNEXPECTED_MESSAGE: int + ALERT_DESCRIPTION_UNKNOWN_CA: int + ALERT_DESCRIPTION_UNKNOWN_PSK_IDENTITY: int + ALERT_DESCRIPTION_UNRECOGNIZED_NAME: int + ALERT_DESCRIPTION_UNSUPPORTED_CERTIFICATE: int + ALERT_DESCRIPTION_UNSUPPORTED_EXTENSION: int + ALERT_DESCRIPTION_USER_CANCELLED: int + +if sys.version_info < (3,) or sys.version_info >= (3, 4): + _PurposeType = NamedTuple('_PurposeType', [('nid', int), ('shortname', str), ('longname', str), ('oid', str)]) + class Purpose: + SERVER_AUTH: _PurposeType + CLIENT_AUTH: _PurposeType + + +class SSLSocket(socket.socket): + context: SSLContext + server_side: bool + server_hostname: Optional[str] + if sys.version_info >= (3, 6): + session: Optional[SSLSession] + session_reused: Optional[bool] + + def read(self, len: int = ..., + buffer: Optional[bytearray] = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def do_handshake(self) -> None: ... + def getpeercert(self, binary_form: bool = ...) -> _PeerCertRetType: ... + def cipher(self) -> Tuple[str, int, int]: ... + if sys.version_info >= (3, 5): + def shared_cipher(self) -> Optional[List[Tuple[str, int, int]]]: ... + def compression(self) -> Optional[str]: ... + def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def selected_alpn_protocol(self) -> Optional[str]: ... + def selected_npn_protocol(self) -> Optional[str]: ... + def unwrap(self) -> socket.socket: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def version(self) -> Optional[str]: ... + def pending(self) -> int: ... + + +class SSLContext: + if sys.version_info < (3,) or sys.version_info >= (3, 4): + check_hostname: bool + options: int + @property + def protocol(self) -> int: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + verify_flags: int + verify_mode: int + if sys.version_info >= (3, 5): + def __init__(self, protocol: int = ...) -> None: ... + else: + def __init__(self, protocol: int) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def cert_store_stats(self) -> Dict[str, int]: ... + def load_cert_chain(self, certfile: str, keyfile: Optional[str] = ..., + password: _PasswordType = ...) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 4): + def load_default_certs(self, purpose: _PurposeType = ...) -> None: ... + def load_verify_locations(self, cafile: Optional[str] = ..., + capath: Optional[str] = ..., + cadata: Union[str, bytes, None] = ...) -> None: ... + def get_ca_certs(self, + binary_form: bool = ...) -> Union[List[_PeerCertRetDictType], List[bytes]]: ... + else: + def load_verify_locations(self, + cafile: Optional[str] = ..., + capath: Optional[str] = ...) -> None: ... + def set_default_verify_paths(self) -> None: ... + def set_ciphers(self, ciphers: str) -> None: ... + if sys.version_info < (3,) or sys.version_info >= (3, 5): + def set_alpn_protocols(self, protocols: List[str]) -> None: ... + def set_npn_protocols(self, protocols: List[str]) -> None: ... + def set_servername_callback(self, + server_name_callback: Optional[_SrvnmeCbType]) -> None: ... + def load_dh_params(self, dhfile: str) -> None: ... + def set_ecdh_curve(self, curve_name: str) -> None: ... + def wrap_socket(self, sock: socket.socket, server_side: bool = ..., + do_handshake_on_connect: bool = ..., + suppress_ragged_eofs: bool = ..., + server_hostname: Optional[str] = ...) -> SSLSocket: ... + if sys.version_info >= (3, 5): + def wrap_bio(self, incoming: MemoryBIO, outgoing: MemoryBIO, + server_side: bool = ..., + server_hostname: Optional[str] = ...) -> SSLObject: ... + def session_stats(self) -> Dict[str, int]: ... + + +if sys.version_info >= (3, 5): + class SSLObject: + context: SSLContext + server_side: bool + server_hostname: Optional[str] + if sys.version_info >= (3, 6): + session: Optional[SSLSession] + session_reused: bool + def read(self, len: int = ..., + buffer: Optional[bytearray] = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def getpeercert(self, binary_form: bool = ...) -> _PeerCertRetType: ... + def selected_npn_protocol(self) -> Optional[str]: ... + def cipher(self) -> Tuple[str, int, int]: ... + def shared_cipher(self) -> Optional[List[Tuple[str, int, int]]]: ... + def compression(self) -> Optional[str]: ... + def pending(self) -> int: ... + def do_handshake(self) -> None: ... + def unwrap(self) -> None: ... + def get_channel_binding(self, cb_type: str = ...) -> Optional[bytes]: ... + + class MemoryBIO: + pending: int + eof: bool + def read(self, n: int = ...) -> bytes: ... + def write(self, buf: bytes) -> int: ... + def write_eof(self) -> None: ... + +if sys.version_info >= (3, 6): + class SSLSession: + id: bytes + time: int + timeout: int + ticket_lifetime_hint: int + has_ticket: bool + + +# TODO below documented in cpython but not in docs.python.org +# taken from python 3.4 +SSL_ERROR_EOF: int +SSL_ERROR_INVALID_ERROR_CODE: int +SSL_ERROR_SSL: int +SSL_ERROR_SYSCALL: int +SSL_ERROR_WANT_CONNECT: int +SSL_ERROR_WANT_READ: int +SSL_ERROR_WANT_WRITE: int +SSL_ERROR_WANT_X509_LOOKUP: int +SSL_ERROR_ZERO_RETURN: int + +def get_protocol_name(protocol_code: int) -> str: ... + +AF_INET: int +PEM_FOOTER: str +PEM_HEADER: str +SOCK_STREAM: int +SOL_SOCKET: int +SO_TYPE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi new file mode 100644 index 0000000..e3b7e9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/stringprep.pyi @@ -0,0 +1,23 @@ +# Stubs for stringprep (Python 2 and 3) + +from typing import Text + +def in_table_a1(code: Text) -> bool: ... +def in_table_b1(code: Text) -> bool: ... +def map_table_b3(code: Text) -> Text: ... +def map_table_b2(a: Text) -> Text: ... +def in_table_c11(code: Text) -> bool: ... +def in_table_c12(code: Text) -> bool: ... +def in_table_c11_c12(code: Text) -> bool: ... +def in_table_c21(code: Text) -> bool: ... +def in_table_c22(code: Text) -> bool: ... +def in_table_c21_c22(code: Text) -> bool: ... +def in_table_c3(code: Text) -> bool: ... +def in_table_c4(code: Text) -> bool: ... +def in_table_c5(code: Text) -> bool: ... +def in_table_c6(code: Text) -> bool: ... +def in_table_c7(code: Text) -> bool: ... +def in_table_c8(code: Text) -> bool: ... +def in_table_c9(code: Text) -> bool: ... +def in_table_d1(code: Text) -> bool: ... +def in_table_d2(code: Text) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/struct.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/struct.pyi new file mode 100644 index 0000000..552ee22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/struct.pyi @@ -0,0 +1,44 @@ +# Stubs for struct + +# Based on http://docs.python.org/3.2/library/struct.html +# Based on http://docs.python.org/2/library/struct.html + +import sys +from typing import Any, Tuple, Text, Union, Iterator +from array import array +from mmap import mmap + +class error(Exception): ... + +_FmtType = Union[bytes, Text] +if sys.version_info >= (3,): + _BufferType = Union[array[int], bytes, bytearray, memoryview, mmap] + _WriteBufferType = Union[array, bytearray, memoryview, mmap] +else: + _BufferType = Union[array[int], bytes, bytearray, buffer, memoryview, mmap] + _WriteBufferType = Union[array[Any], bytearray, buffer, memoryview, mmap] + +def pack(fmt: _FmtType, *v: Any) -> bytes: ... +def pack_into(fmt: _FmtType, buffer: _WriteBufferType, offset: int, *v: Any) -> None: ... +def unpack(fmt: _FmtType, buffer: _BufferType) -> Tuple[Any, ...]: ... +def unpack_from(fmt: _FmtType, buffer: _BufferType, offset: int = ...) -> Tuple[Any, ...]: ... +if sys.version_info >= (3, 4): + def iter_unpack(fmt: _FmtType, buffer: _BufferType) -> Iterator[Tuple[Any, ...]]: ... + +def calcsize(fmt: _FmtType) -> int: ... + +class Struct: + if sys.version_info >= (3, 7): + format: str + else: + format: bytes + size: int + + def __init__(self, format: _FmtType) -> None: ... + + def pack(self, *v: Any) -> bytes: ... + def pack_into(self, buffer: _WriteBufferType, offset: int, *v: Any) -> None: ... + def unpack(self, buffer: _BufferType) -> Tuple[Any, ...]: ... + def unpack_from(self, buffer: _BufferType, offset: int = ...) -> Tuple[Any, ...]: ... + if sys.version_info >= (3, 4): + def iter_unpack(self, buffer: _BufferType) -> Iterator[Tuple[Any, ...]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi new file mode 100644 index 0000000..6577c31 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sunau.pyi @@ -0,0 +1,87 @@ +# Stubs for sunau (Python 2 and 3) + +import sys +from typing import Any, NamedTuple, NoReturn, Optional, Text, IO, Union, Tuple + +_File = Union[Text, IO[bytes]] + +class Error(Exception): ... + +AUDIO_FILE_MAGIC: int +AUDIO_FILE_ENCODING_MULAW_8: int +AUDIO_FILE_ENCODING_LINEAR_8: int +AUDIO_FILE_ENCODING_LINEAR_16: int +AUDIO_FILE_ENCODING_LINEAR_24: int +AUDIO_FILE_ENCODING_LINEAR_32: int +AUDIO_FILE_ENCODING_FLOAT: int +AUDIO_FILE_ENCODING_DOUBLE: int +AUDIO_FILE_ENCODING_ADPCM_G721: int +AUDIO_FILE_ENCODING_ADPCM_G722: int +AUDIO_FILE_ENCODING_ADPCM_G723_3: int +AUDIO_FILE_ENCODING_ADPCM_G723_5: int +AUDIO_FILE_ENCODING_ALAW_8: int +AUDIO_UNKNOWN_SIZE: int + +if sys.version_info < (3, 0): + _sunau_params = Tuple[int, int, int, int, str, str] +else: + _sunau_params = NamedTuple('_sunau_params', [ + ('nchannels', int), + ('sampwidth', int), + ('framerate', int), + ('nframes', int), + ('comptype', str), + ('compname', str), + ]) + +class Au_read: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 3): + def __enter__(self) -> Au_read: ... + def __exit__(self, *args: Any) -> None: ... + def getfp(self) -> Optional[IO[bytes]]: ... + def rewind(self) -> None: ... + def close(self) -> None: ... + def tell(self) -> int: ... + def getnchannels(self) -> int: ... + def getnframes(self) -> int: ... + def getsampwidth(self) -> int: ... + def getframerate(self) -> int: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def getparams(self) -> _sunau_params: ... + def getmarkers(self) -> None: ... + def getmark(self, id: Any) -> NoReturn: ... + def setpos(self, pos: int) -> None: ... + def readframes(self, nframes: int) -> Optional[bytes]: ... + +class Au_write: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 3): + def __enter__(self) -> Au_write: ... + def __exit__(self, *args: Any) -> None: ... + def setnchannels(self, nchannels: int) -> None: ... + def getnchannels(self) -> int: ... + def setsampwidth(self, sampwidth: int) -> None: ... + def getsampwidth(self) -> int: ... + def setframerate(self, framerate: float) -> None: ... + def getframerate(self) -> int: ... + def setnframes(self, nframes: int) -> None: ... + def getnframes(self) -> int: ... + def setcomptype(self, comptype: str, compname: str) -> None: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def setparams(self, params: _sunau_params) -> None: ... + def getparams(self) -> _sunau_params: ... + def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... + def getmark(self, id: Any) -> NoReturn: ... + def getmarkers(self) -> None: ... + def tell(self) -> int: ... + # should be any bytes-like object after 3.4, but we don't have a type for that + def writeframesraw(self, data: bytes) -> None: ... + def writeframes(self, data: bytes) -> None: ... + def close(self) -> None: ... + +# Returns a Au_read if mode is rb and Au_write if mode is wb +def open(f: _File, mode: Optional[str] = ...) -> Any: ... +openfp = open diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi new file mode 100644 index 0000000..fd8b9ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/symtable.pyi @@ -0,0 +1,45 @@ +import sys +from typing import List, Sequence, Tuple, Text + +def symtable(code: Text, filename: Text, compile_type: Text) -> SymbolTable: ... + +class SymbolTable(object): + def get_type(self) -> str: ... + def get_id(self) -> int: ... + def get_name(self) -> str: ... + def get_lineno(self) -> int: ... + def is_optimized(self) -> bool: ... + def is_nested(self) -> bool: ... + def has_children(self) -> bool: ... + def has_exec(self) -> bool: ... + if sys.version_info < (3, 0): + def has_import_star(self) -> bool: ... + def get_identifiers(self) -> Sequence[str]: ... + def lookup(self, name: str) -> Symbol: ... + def get_symbols(self) -> List[Symbol]: ... + def get_children(self) -> List[SymbolTable]: ... + +class Function(SymbolTable): + def get_parameters(self) -> Tuple[str, ...]: ... + def get_locals(self) -> Tuple[str, ...]: ... + def get_globals(self) -> Tuple[str, ...]: ... + def get_frees(self) -> Tuple[str, ...]: ... + +class Class(SymbolTable): + def get_methods(self) -> Tuple[str, ...]: ... + +class Symbol(object): + def get_name(self) -> str: ... + def is_referenced(self) -> bool: ... + def is_parameter(self) -> bool: ... + def is_global(self) -> bool: ... + def is_declared_global(self) -> bool: ... + def is_local(self) -> bool: ... + if sys.version_info >= (3, 6): + def is_annotated(self) -> bool: ... + def is_free(self) -> bool: ... + def is_imported(self) -> bool: ... + def is_assigned(self) -> bool: ... + def is_namespace(self) -> bool: ... + def get_namespaces(self) -> Sequence[SymbolTable]: ... + def get_namespace(self) -> SymbolTable: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi new file mode 100644 index 0000000..5d6c9cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/sysconfig.pyi @@ -0,0 +1,19 @@ +# Stubs for sysconfig + +from typing import overload, Any, Dict, IO, List, Optional, Tuple, Union + +@overload +def get_config_vars() -> Dict[str, Any]: ... +@overload +def get_config_vars(arg: str, *args: str) -> List[Any]: ... +def get_config_var(name: str) -> Optional[str]: ... +def get_scheme_names() -> Tuple[str, ...]: ... +def get_path_names() -> Tuple[str, ...]: ... +def get_path(name: str, scheme: str = ..., vars: Optional[Dict[str, Any]] = ..., expand: bool = ...) -> Optional[str]: ... +def get_paths(scheme: str = ..., vars: Optional[Dict[str, Any]] = ..., expand: bool = ...) -> Dict[str, str]: ... +def get_python_version() -> str: ... +def get_platform() -> str: ... +def is_python_build() -> bool: ... +def parse_config_h(fp: IO[Any], vars: Optional[Dict[str, Any]]) -> Dict[str, Any]: ... +def get_config_h_filename() -> str: ... +def get_makefile_filename() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi new file mode 100644 index 0000000..1237a6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/syslog.pyi @@ -0,0 +1,44 @@ +from typing import overload + +LOG_ALERT: int +LOG_AUTH: int +LOG_CONS: int +LOG_CRIT: int +LOG_CRON: int +LOG_DAEMON: int +LOG_DEBUG: int +LOG_EMERG: int +LOG_ERR: int +LOG_INFO: int +LOG_KERN: int +LOG_LOCAL0: int +LOG_LOCAL1: int +LOG_LOCAL2: int +LOG_LOCAL3: int +LOG_LOCAL4: int +LOG_LOCAL5: int +LOG_LOCAL6: int +LOG_LOCAL7: int +LOG_LPR: int +LOG_MAIL: int +LOG_NDELAY: int +LOG_NEWS: int +LOG_NOTICE: int +LOG_NOWAIT: int +LOG_PERROR: int +LOG_PID: int +LOG_SYSLOG: int +LOG_USER: int +LOG_UUCP: int +LOG_WARNING: int + +def LOG_MASK(a: int) -> int: ... +def LOG_UPTO(a: int) -> int: ... +def closelog() -> None: ... +def openlog(ident: str = ..., logoption: int = ..., facility: int = ...) -> None: ... +def setlogmask(x: int) -> int: ... + +@overload +def syslog(priority: int, message: str) -> None: ... +@overload +def syslog(message: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi new file mode 100644 index 0000000..cbc8353 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tabnanny.pyi @@ -0,0 +1,22 @@ +# Stubs for tabnanny (Python 2 and 3) + +import os +import sys +from typing import Iterable, Tuple, Union + +if sys.version_info >= (3, 6): + _Path = Union[str, bytes, os.PathLike] +else: + _Path = Union[str, bytes] + +verbose: int +filename_only: int + +class NannyNag(Exception): + def __init__(self, lineno: int, msg: str, line: str) -> None: ... + def get_lineno(self) -> int: ... + def get_msg(self) -> str: ... + def get_line(self) -> str: ... + +def check(file: _Path) -> None: ... +def process_tokens(tokens: Iterable[Tuple[int, str, Tuple[int, int], Tuple[int, int], str]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi new file mode 100644 index 0000000..f598494 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tarfile.pyi @@ -0,0 +1,189 @@ +# Stubs for tarfile + +from typing import ( + Callable, IO, Iterable, Iterator, List, Mapping, Optional, Type, + Union, +) +import os +import sys +from types import TracebackType + +if sys.version_info >= (3, 6): + _Path = Union[bytes, str, os.PathLike] +elif sys.version_info >= (3,): + _Path = Union[bytes, str] +else: + _Path = Union[str, unicode] + +ENCODING: str + +USTAR_FORMAT: int +GNU_FORMAT: int +PAX_FORMAT: int +DEFAULT_FORMAT: int + +REGTYPE: bytes +AREGTYPE: bytes +LNKTYPE: bytes +SYMTYPE: bytes +DIRTYPE: bytes +FIFOTYPE: bytes +CONTTYPE: bytes +CHRTYPE: bytes +BLKTYPE: bytes +GNUTYPE_SPARSE: bytes + +if sys.version_info < (3,): + TAR_PLAIN: int + TAR_GZIPPED: int + +def open(name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., bufsize: int = ..., + *, format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ..., + compresslevel: Optional[int] = ...) -> TarFile: ... + +class TarFile(Iterable[TarInfo]): + name: Optional[_Path] + mode: str + fileobj: Optional[IO[bytes]] + format: Optional[int] + tarinfo: Optional[TarInfo] + dereference: Optional[bool] + ignore_zeros: Optional[bool] + encoding: Optional[str] + errors: str + pax_headers: Optional[Mapping[str, str]] + debug: Optional[int] + errorlevel: Optional[int] + if sys.version_info < (3,): + posix: bool + def __init__(self, name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., + format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ..., + compresslevel: Optional[int] = ...) -> None: ... + def __enter__(self) -> TarFile: ... + def __exit__(self, + exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def __iter__(self) -> Iterator[TarInfo]: ... + @classmethod + def open(cls, name: Optional[_Path] = ..., mode: str = ..., + fileobj: Optional[IO[bytes]] = ..., bufsize: int = ..., + *, format: Optional[int] = ..., tarinfo: Optional[TarInfo] = ..., + dereference: Optional[bool] = ..., + ignore_zeros: Optional[bool] = ..., + encoding: Optional[str] = ..., errors: str = ..., + pax_headers: Optional[Mapping[str, str]] = ..., + debug: Optional[int] = ..., + errorlevel: Optional[int] = ...) -> TarFile: ... + def getmember(self, name: str) -> TarInfo: ... + def getmembers(self) -> List[TarInfo]: ... + def getnames(self) -> List[str]: ... + if sys.version_info >= (3, 5): + def list(self, verbose: bool = ..., + *, members: Optional[List[TarInfo]] = ...) -> None: ... + else: + def list(self, verbose: bool = ...) -> None: ... + def next(self) -> Optional[TarInfo]: ... + if sys.version_info >= (3, 5): + def extractall(self, path: _Path = ..., + members: Optional[List[TarInfo]] = ..., + *, numeric_owner: bool = ...) -> None: ... + else: + def extractall(self, path: _Path = ..., + members: Optional[List[TarInfo]] = ...) -> None: ... + if sys.version_info >= (3, 5): + def extract(self, member: Union[str, TarInfo], path: _Path = ..., + set_attrs: bool = ..., + *, numeric_owner: bool = ...) -> None: ... + elif sys.version_info >= (3,): + def extract(self, member: Union[str, TarInfo], path: _Path = ..., + set_attrs: bool = ...) -> None: ... + else: + def extract(self, member: Union[str, TarInfo], + path: _Path = ...) -> None: ... + def extractfile(self, + member: Union[str, TarInfo]) -> Optional[IO[bytes]]: ... + if sys.version_info >= (3, 7): + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., *, + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + elif sys.version_info >= (3,): + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., + exclude: Optional[Callable[[str], bool]] = ..., *, + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + else: + def add(self, name: str, arcname: Optional[str] = ..., + recursive: bool = ..., + exclude: Optional[Callable[[str], bool]] = ..., + filter: Optional[Callable[[TarInfo], Optional[TarInfo]]] = ...) -> None: ... + def addfile(self, tarinfo: TarInfo, + fileobj: Optional[IO[bytes]] = ...) -> None: ... + def gettarinfo(self, name: Optional[str] = ..., + arcname: Optional[str] = ..., + fileobj: Optional[IO[bytes]] = ...) -> TarInfo: ... + def close(self) -> None: ... + +def is_tarfile(name: str) -> bool: ... + +if sys.version_info < (3, 8): + def filemode(mode: int) -> str: ... # undocumented + +if sys.version_info < (3,): + class TarFileCompat: + def __init__(self, filename: str, mode: str = ..., + compression: int = ...) -> None: ... + +class TarError(Exception): ... +class ReadError(TarError): ... +class CompressionError(TarError): ... +class StreamError(TarError): ... +class ExtractError(TarError): ... +class HeaderError(TarError): ... + +class TarInfo: + name: str + size: int + mtime: int + mode: int + type: bytes + linkname: str + uid: int + gid: int + uname: str + gname: str + pax_headers: Mapping[str, str] + def __init__(self, name: str = ...) -> None: ... + if sys.version_info >= (3,): + @classmethod + def frombuf(cls, buf: bytes, encoding: str, errors: str) -> TarInfo: ... + else: + @classmethod + def frombuf(cls, buf: bytes) -> TarInfo: ... + @classmethod + def fromtarfile(cls, tarfile: TarFile) -> TarInfo: ... + def tobuf(self, format: Optional[int] = ..., + encoding: Optional[str] = ..., errors: str = ...) -> bytes: ... + def isfile(self) -> bool: ... + def isreg(self) -> bool: ... + def isdir(self) -> bool: ... + def issym(self) -> bool: ... + def islnk(self) -> bool: ... + def ischr(self) -> bool: ... + def isblk(self) -> bool: ... + def isfifo(self) -> bool: ... + def isdev(self) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi new file mode 100644 index 0000000..50b90b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/telnetlib.pyi @@ -0,0 +1,115 @@ +# Stubs for telnetlib (Python 2 and 3) + +import socket +import sys +from typing import Any, Callable, Match, Optional, Pattern, Sequence, Tuple, Union + +DEBUGLEVEL: int +TELNET_PORT: int + +IAC: bytes +DONT: bytes +DO: bytes +WONT: bytes +WILL: bytes +theNULL: bytes + +SE: bytes +NOP: bytes +DM: bytes +BRK: bytes +IP: bytes +AO: bytes +AYT: bytes +EC: bytes +EL: bytes +GA: bytes +SB: bytes + +BINARY: bytes +ECHO: bytes +RCP: bytes +SGA: bytes +NAMS: bytes +STATUS: bytes +TM: bytes +RCTE: bytes +NAOL: bytes +NAOP: bytes +NAOCRD: bytes +NAOHTS: bytes +NAOHTD: bytes +NAOFFD: bytes +NAOVTS: bytes +NAOVTD: bytes +NAOLFD: bytes +XASCII: bytes +LOGOUT: bytes +BM: bytes +DET: bytes +SUPDUP: bytes +SUPDUPOUTPUT: bytes +SNDLOC: bytes +TTYPE: bytes +EOR: bytes +TUID: bytes +OUTMRK: bytes +TTYLOC: bytes +VT3270REGIME: bytes +X3PAD: bytes +NAWS: bytes +TSPEED: bytes +LFLOW: bytes +LINEMODE: bytes +XDISPLOC: bytes +OLD_ENVIRON: bytes +AUTHENTICATION: bytes +ENCRYPT: bytes +NEW_ENVIRON: bytes + +TN3270E: bytes +XAUTH: bytes +CHARSET: bytes +RSP: bytes +COM_PORT_OPTION: bytes +SUPPRESS_LOCAL_ECHO: bytes +TLS: bytes +KERMIT: bytes +SEND_URL: bytes +FORWARD_X: bytes +PRAGMA_LOGON: bytes +SSPI_LOGON: bytes +PRAGMA_HEARTBEAT: bytes +EXOPL: bytes +NOOPT: bytes + +class Telnet: + def __init__(self, host: Optional[str] = ..., port: int = ..., + timeout: int = ...) -> None: ... + def open(self, host: str, port: int = ..., timeout: int = ...) -> None: ... + def msg(self, msg: str, *args: Any) -> None: ... + def set_debuglevel(self, debuglevel: int) -> None: ... + def close(self) -> None: ... + def get_socket(self) -> socket.socket: ... + def fileno(self) -> int: ... + def write(self, buffer: bytes) -> None: ... + def read_until(self, match: bytes, timeout: Optional[int] = ...) -> bytes: ... + def read_all(self) -> bytes: ... + def read_some(self) -> bytes: ... + def read_very_eager(self) -> bytes: ... + def read_eager(self) -> bytes: ... + def read_lazy(self) -> bytes: ... + def read_very_lazy(self) -> bytes: ... + def read_sb_data(self) -> bytes: ... + def set_option_negotiation_callback(self, callback: Optional[Callable[[socket.socket, bytes, bytes], Any]]) -> None: ... + def process_rawq(self) -> None: ... + def rawq_getchar(self) -> bytes: ... + def fill_rawq(self) -> None: ... + def sock_avail(self) -> bool: ... + def interact(self) -> None: ... + def mt_interact(self) -> None: ... + def listener(self) -> None: ... + def expect(self, list: Sequence[Union[Pattern[bytes], bytes]], timeout: Optional[int] = ...) -> Tuple[int, Optional[Match[bytes]], bytes]: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> Telnet: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/termios.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/termios.pyi new file mode 100644 index 0000000..d788e16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/termios.pyi @@ -0,0 +1,248 @@ +# Stubs for termios + +from typing import IO, List, Union + +_FD = Union[int, IO[str]] +_Attr = List[Union[int, List[bytes]]] + +# TODO constants not really documented +B0: int +B1000000: int +B110: int +B115200: int +B1152000: int +B1200: int +B134: int +B150: int +B1500000: int +B1800: int +B19200: int +B200: int +B2000000: int +B230400: int +B2400: int +B2500000: int +B300: int +B3000000: int +B3500000: int +B38400: int +B4000000: int +B460800: int +B4800: int +B50: int +B500000: int +B57600: int +B576000: int +B600: int +B75: int +B921600: int +B9600: int +BRKINT: int +BS0: int +BS1: int +BSDLY: int +CBAUD: int +CBAUDEX: int +CDSUSP: int +CEOF: int +CEOL: int +CEOT: int +CERASE: int +CFLUSH: int +CIBAUD: int +CINTR: int +CKILL: int +CLNEXT: int +CLOCAL: int +CQUIT: int +CR0: int +CR1: int +CR2: int +CR3: int +CRDLY: int +CREAD: int +CRPRNT: int +CRTSCTS: int +CS5: int +CS6: int +CS7: int +CS8: int +CSIZE: int +CSTART: int +CSTOP: int +CSTOPB: int +CSUSP: int +CWERASE: int +ECHO: int +ECHOCTL: int +ECHOE: int +ECHOK: int +ECHOKE: int +ECHONL: int +ECHOPRT: int +EXTA: int +EXTB: int +FF0: int +FF1: int +FFDLY: int +FIOASYNC: int +FIOCLEX: int +FIONBIO: int +FIONCLEX: int +FIONREAD: int +FLUSHO: int +HUPCL: int +ICANON: int +ICRNL: int +IEXTEN: int +IGNBRK: int +IGNCR: int +IGNPAR: int +IMAXBEL: int +INLCR: int +INPCK: int +IOCSIZE_MASK: int +IOCSIZE_SHIFT: int +ISIG: int +ISTRIP: int +IUCLC: int +IXANY: int +IXOFF: int +IXON: int +NCC: int +NCCS: int +NL0: int +NL1: int +NLDLY: int +NOFLSH: int +N_MOUSE: int +N_PPP: int +N_SLIP: int +N_STRIP: int +N_TTY: int +OCRNL: int +OFDEL: int +OFILL: int +OLCUC: int +ONLCR: int +ONLRET: int +ONOCR: int +OPOST: int +PARENB: int +PARMRK: int +PARODD: int +PENDIN: int +TAB0: int +TAB1: int +TAB2: int +TAB3: int +TABDLY: int +TCFLSH: int +TCGETA: int +TCGETS: int +TCIFLUSH: int +TCIOFF: int +TCIOFLUSH: int +TCION: int +TCOFLUSH: int +TCOOFF: int +TCOON: int +TCSADRAIN: int +TCSAFLUSH: int +TCSANOW: int +TCSBRK: int +TCSBRKP: int +TCSETA: int +TCSETAF: int +TCSETAW: int +TCSETS: int +TCSETSF: int +TCSETSW: int +TCXONC: int +TIOCCONS: int +TIOCEXCL: int +TIOCGETD: int +TIOCGICOUNT: int +TIOCGLCKTRMIOS: int +TIOCGPGRP: int +TIOCGSERIAL: int +TIOCGSOFTCAR: int +TIOCGWINSZ: int +TIOCINQ: int +TIOCLINUX: int +TIOCMBIC: int +TIOCMBIS: int +TIOCMGET: int +TIOCMIWAIT: int +TIOCMSET: int +TIOCM_CAR: int +TIOCM_CD: int +TIOCM_CTS: int +TIOCM_DSR: int +TIOCM_DTR: int +TIOCM_LE: int +TIOCM_RI: int +TIOCM_RNG: int +TIOCM_RTS: int +TIOCM_SR: int +TIOCM_ST: int +TIOCNOTTY: int +TIOCNXCL: int +TIOCOUTQ: int +TIOCPKT: int +TIOCPKT_DATA: int +TIOCPKT_DOSTOP: int +TIOCPKT_FLUSHREAD: int +TIOCPKT_FLUSHWRITE: int +TIOCPKT_NOSTOP: int +TIOCPKT_START: int +TIOCPKT_STOP: int +TIOCSCTTY: int +TIOCSERCONFIG: int +TIOCSERGETLSR: int +TIOCSERGETMULTI: int +TIOCSERGSTRUCT: int +TIOCSERGWILD: int +TIOCSERSETMULTI: int +TIOCSERSWILD: int +TIOCSER_TEMT: int +TIOCSETD: int +TIOCSLCKTRMIOS: int +TIOCSPGRP: int +TIOCSSERIAL: int +TIOCSSOFTCAR: int +TIOCSTI: int +TIOCSWINSZ: int +TOSTOP: int +VDISCARD: int +VEOF: int +VEOL: int +VEOL2: int +VERASE: int +VINTR: int +VKILL: int +VLNEXT: int +VMIN: int +VQUIT: int +VREPRINT: int +VSTART: int +VSTOP: int +VSUSP: int +VSWTC: int +VSWTCH: int +VT0: int +VT1: int +VTDLY: int +VTIME: int +VWERASE: int +XCASE: int +XTABS: int + +def tcgetattr(fd: _FD) -> _Attr: ... +def tcsetattr(fd: _FD, when: int, attributes: _Attr) -> None: ... +def tcsendbreak(fd: _FD, duration: int) -> None: ... +def tcdrain(fd: _FD) -> None: ... +def tcflush(fd: _FD, queue: int) -> None: ... +def tcflow(fd: _FD, action: int) -> None: ... + +class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/threading.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/threading.pyi new file mode 100644 index 0000000..3008f7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/threading.pyi @@ -0,0 +1,187 @@ +# Stubs for threading + +from typing import ( + Any, Callable, Iterable, List, Mapping, Optional, Tuple, Type, Union, + TypeVar, +) +from types import FrameType, TracebackType +import sys + +# TODO recursive type +_TF = Callable[[FrameType, str, Any], Optional[Callable[..., Any]]] + +_PF = Callable[[FrameType, str, Any], None] +_T = TypeVar('_T') + + +def active_count() -> int: ... +if sys.version_info < (3,): + def activeCount() -> int: ... + +def current_thread() -> Thread: ... +def currentThread() -> Thread: ... + +if sys.version_info >= (3,): + def get_ident() -> int: ... + +def enumerate() -> List[Thread]: ... + +if sys.version_info >= (3, 4): + def main_thread() -> Thread: ... + +def settrace(func: _TF) -> None: ... +def setprofile(func: _PF) -> None: ... +def stack_size(size: int = ...) -> int: ... + +if sys.version_info >= (3,): + TIMEOUT_MAX: float + +class ThreadError(Exception): ... + + +class local(object): + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + + +class Thread: + name: str + ident: Optional[int] + daemon: bool + if sys.version_info >= (3,): + def __init__(self, group: None = ..., + target: Optional[Callable[..., Any]] = ..., + name: Optional[str] = ..., + args: Iterable = ..., + kwargs: Mapping[str, Any] = ..., + *, daemon: Optional[bool] = ...) -> None: ... + else: + def __init__(self, group: None = ..., + target: Optional[Callable[..., Any]] = ..., + name: Optional[str] = ..., + args: Iterable = ..., + kwargs: Mapping[str, Any] = ...) -> None: ... + def start(self) -> None: ... + def run(self) -> None: ... + def join(self, timeout: Optional[float] = ...) -> None: ... + def getName(self) -> str: ... + def setName(self, name: str) -> None: ... + def is_alive(self) -> bool: ... + def isAlive(self) -> bool: ... + def isDaemon(self) -> bool: ... + def setDaemon(self, daemonic: bool) -> None: ... + + +class _DummyThread(Thread): ... + + +class Lock: + def __init__(self) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + def locked(self) -> bool: ... + + +class _RLock: + def __init__(self) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + + +RLock = _RLock + + +class Condition: + def __init__(self, lock: Union[Lock, _RLock, None] = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + if sys.version_info >= (3,): + def wait_for(self, predicate: Callable[[], _T], + timeout: Optional[float] = ...) -> _T: ... + def notify(self, n: int = ...) -> None: ... + def notify_all(self) -> None: ... + def notifyAll(self) -> None: ... + + +class Semaphore: + def __init__(self, value: int = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + +class BoundedSemaphore: + def __init__(self, value: int = ...) -> None: ... + def __enter__(self) -> bool: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + if sys.version_info >= (3,): + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + else: + def acquire(self, blocking: bool = ...) -> bool: ... + def release(self) -> None: ... + + +class Event: + def __init__(self) -> None: ... + def is_set(self) -> bool: ... + if sys.version_info < (3,): + def isSet(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + + +class Timer(Thread): + if sys.version_info >= (3,): + def __init__(self, interval: float, function: Callable[..., None], + args: Optional[List[Any]] = ..., + kwargs: Optional[Mapping[str, Any]] = ...) -> None: ... + else: + def __init__(self, interval: float, function: Callable[..., None], + args: List[Any] = ..., + kwargs: Mapping[str, Any] = ...) -> None: ... + def cancel(self) -> None: ... + + +if sys.version_info >= (3,): + class Barrier: + parties: int + n_waiting: int + broken: bool + def __init__(self, parties: int, action: Optional[Callable[[], None]] = ..., + timeout: Optional[float] = ...) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> int: ... + def reset(self) -> None: ... + def abort(self) -> None: ... + + class BrokenBarrierError(RuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/time.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/time.pyi new file mode 100644 index 0000000..b04e616 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/time.pyi @@ -0,0 +1,103 @@ +"""Stub file for the 'time' module.""" +# See https://docs.python.org/3/library/time.html + +import sys +from typing import Any, NamedTuple, Tuple, Union, Optional +if sys.version_info >= (3, 3): + from types import SimpleNamespace + +_TimeTuple = Tuple[int, int, int, int, int, int, int, int, int] + +if sys.version_info < (3, 3): + accept2dyear: bool +altzone: int +daylight: int +timezone: int +tzname: Tuple[str, str] + +if sys.version_info >= (3, 7) and sys.platform != 'win32': + CLOCK_BOOTTIME: int # Linux + CLOCK_PROF: int # FreeBSD, NetBSD, OpenBSD + CLOCK_UPTIME: int # FreeBSD, OpenBSD + +if sys.version_info >= (3, 3) and sys.platform != 'win32': + CLOCK_HIGHRES: int = ... # Solaris only + CLOCK_MONOTONIC: int = ... # Unix only + CLOCK_MONOTONIC_RAW: int = ... # Linux 2.6.28 or later + CLOCK_PROCESS_CPUTIME_ID: int = ... # Unix only + CLOCK_REALTIME: int = ... # Unix only + CLOCK_THREAD_CPUTIME_ID: int = ... # Unix only + + +if sys.version_info >= (3, 3): + class struct_time( + NamedTuple( + '_struct_time', + [('tm_year', int), ('tm_mon', int), ('tm_mday', int), + ('tm_hour', int), ('tm_min', int), ('tm_sec', int), + ('tm_wday', int), ('tm_yday', int), ('tm_isdst', int), + ('tm_zone', str), ('tm_gmtoff', int)] + ) + ): + def __init__( + self, + o: Union[ + Tuple[int, int, int, int, int, int, int, int, int], + Tuple[int, int, int, int, int, int, int, int, int, str], + Tuple[int, int, int, int, int, int, int, int, int, str, int] + ], + _arg: Any = ..., + ) -> None: ... + def __new__( + cls, + o: Union[ + Tuple[int, int, int, int, int, int, int, int, int], + Tuple[int, int, int, int, int, int, int, int, int, str], + Tuple[int, int, int, int, int, int, int, int, int, str, int] + ], + _arg: Any = ..., + ) -> struct_time: ... +else: + class struct_time( + NamedTuple( + '_struct_time', + [('tm_year', int), ('tm_mon', int), ('tm_mday', int), + ('tm_hour', int), ('tm_min', int), ('tm_sec', int), + ('tm_wday', int), ('tm_yday', int), ('tm_isdst', int)] + ) + ): + def __init__(self, o: _TimeTuple, _arg: Any = ...) -> None: ... + def __new__(cls, o: _TimeTuple, _arg: Any = ...) -> struct_time: ... + +def asctime(t: Union[_TimeTuple, struct_time] = ...) -> str: ... +def clock() -> float: ... +def ctime(secs: Optional[float] = ...) -> str: ... +def gmtime(secs: Optional[float] = ...) -> struct_time: ... +def localtime(secs: Optional[float] = ...) -> struct_time: ... +def mktime(t: Union[_TimeTuple, struct_time]) -> float: ... +def sleep(secs: float) -> None: ... +def strftime(format: str, t: Union[_TimeTuple, struct_time] = ...) -> str: ... +def strptime(string: str, format: str = ...) -> struct_time: ... +def time() -> float: ... +if sys.platform != 'win32': + def tzset() -> None: ... # Unix only + +if sys.version_info >= (3, 3): + def get_clock_info(name: str) -> SimpleNamespace: ... + def monotonic() -> float: ... + def perf_counter() -> float: ... + def process_time() -> float: ... + if sys.platform != 'win32': + def clock_getres(clk_id: int) -> float: ... # Unix only + def clock_gettime(clk_id: int) -> float: ... # Unix only + def clock_settime(clk_id: int, time: float) -> None: ... # Unix only + +if sys.version_info >= (3, 7): + def clock_gettime_ns(clock_id: int) -> int: ... + def clock_settime_ns(clock_id: int, time: int) -> int: ... + def monotonic_ns() -> int: ... + def perf_counter_ns() -> int: ... + def process_time_ns() -> int: ... + def time_ns() -> int: ... + def thread_time() -> float: ... + def thread_time_ns() -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi new file mode 100644 index 0000000..bc4cbba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/timeit.pyi @@ -0,0 +1,34 @@ +# Stubs for timeit (Python 2 and 3) + +import sys +from typing import Any, Callable, Dict, IO, List, Optional, Sequence, Text, Tuple, Union + +_str = Union[str, Text] +_Timer = Callable[[], float] +_stmt = Union[_str, Callable[[], Any]] + +default_timer: _Timer + +class Timer: + if sys.version_info >= (3, 5): + def __init__(self, stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + globals: Optional[Dict[str, Any]] = ...) -> None: ... + else: + def __init__(self, stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ...) -> None: ... + def print_exc(self, file: Optional[IO[str]] = ...) -> None: ... + def timeit(self, number: int = ...) -> float: ... + def repeat(self, repeat: int = ..., number: int = ...) -> List[float]: ... + if sys.version_info >= (3, 6): + def autorange(self, callback: Optional[Callable[[int, float], Any]] = ...) -> Tuple[int, float]: ... + +if sys.version_info >= (3, 5): + def timeit(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + number: int = ..., globals: Optional[Dict[str, Any]] = ...) -> float: ... + def repeat(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + repeat: int = ..., number: int = ..., globals: Optional[Dict[str, Any]] = ...) -> List[float]: ... +else: + def timeit(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + number: int = ...) -> float: ... + def repeat(stmt: _stmt = ..., setup: _stmt = ..., timer: _Timer = ..., + repeat: int = ..., number: int = ...) -> List[float]: ... +def main(args: Optional[Sequence[str]]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/token.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/token.pyi new file mode 100644 index 0000000..fa50862 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/token.pyi @@ -0,0 +1,71 @@ +import sys +from typing import Dict + +ENDMARKER: int +NAME: int +NUMBER: int +STRING: int +NEWLINE: int +INDENT: int +DEDENT: int +LPAR: int +RPAR: int +LSQB: int +RSQB: int +COLON: int +COMMA: int +SEMI: int +PLUS: int +MINUS: int +STAR: int +SLASH: int +VBAR: int +AMPER: int +LESS: int +GREATER: int +EQUAL: int +DOT: int +PERCENT: int +if sys.version_info < (3,): + BACKQUOTE: int +LBRACE: int +RBRACE: int +EQEQUAL: int +NOTEQUAL: int +LESSEQUAL: int +GREATEREQUAL: int +TILDE: int +CIRCUMFLEX: int +LEFTSHIFT: int +RIGHTSHIFT: int +DOUBLESTAR: int +PLUSEQUAL: int +MINEQUAL: int +STAREQUAL: int +SLASHEQUAL: int +PERCENTEQUAL: int +AMPEREQUAL: int +VBAREQUAL: int +CIRCUMFLEXEQUAL: int +LEFTSHIFTEQUAL: int +RIGHTSHIFTEQUAL: int +DOUBLESTAREQUAL: int +DOUBLESLASH: int +DOUBLESLASHEQUAL: int +AT: int +if sys.version_info >= (3,): + RARROW: int + ELLIPSIS: int +if sys.version_info >= (3, 5): + ATEQUAL: int + AWAIT: int + ASYNC: int +OP: int +ERRORTOKEN: int +N_TOKENS: int +NT_OFFSET: int +tok_name: Dict[int, str] + +def ISTERMINAL(x: int) -> bool: ... +def ISNONTERMINAL(x: int) -> bool: ... +def ISEOF(x: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/trace.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/trace.pyi new file mode 100644 index 0000000..af06d39 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/trace.pyi @@ -0,0 +1,35 @@ +# Stubs for trace (Python 2 and 3) + +import os +import sys +import types +from typing import Any, Callable, Mapping, Optional, Sequence, Text, Tuple, TypeVar, Union + +_T = TypeVar('_T') +_localtrace = Callable[[types.FrameType, str, Any], Callable[..., Any]] + +if sys.version_info >= (3, 6): + _Path = Union[Text, os.PathLike] +else: + _Path = Text + +class CoverageResults: + def update(self, other: CoverageResults) -> None: ... + def write_results(self, show_missing: bool = ..., summary: bool = ..., coverdir: Optional[_Path] = ...) -> None: ... + def write_results_file(self, path: _Path, lines: Sequence[str], lnotab: Any, lines_hit: Mapping[int, int], encoding: Optional[str] = ...) -> Tuple[int, int]: ... + +class Trace: + def __init__(self, count: int = ..., trace: int = ..., countfuncs: int = ..., countcallers: int = ..., + ignoremods: Sequence[str] = ..., ignoredirs: Sequence[str] = ..., infile: Optional[_Path] = ..., + outfile: Optional[_Path] = ..., timing: bool = ...) -> None: ... + def run(self, cmd: Union[str, types.CodeType]) -> None: ... + def runctx(self, cmd: Union[str, types.CodeType], globals: Optional[Mapping[str, Any]] = ..., locals: Optional[Mapping[str, Any]] = ...) -> None: ... + def runfunc(self, func: Callable[..., _T], *args: Any, **kw: Any) -> _T: ... + def file_module_function_of(self, frame: types.FrameType) -> Tuple[str, Optional[str], str]: ... + def globaltrace_trackcallers(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def globaltrace_countfuncs(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def globaltrace_lt(self, frame: types.FrameType, why: str, arg: Any) -> None: ... + def localtrace_trace_and_count(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def localtrace_trace(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def localtrace_count(self, frame: types.FrameType, why: str, arg: Any) -> _localtrace: ... + def results(self) -> CoverageResults: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi new file mode 100644 index 0000000..7adc5eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/traceback.pyi @@ -0,0 +1,120 @@ +# Stubs for traceback + +from typing import Any, Dict, Generator, IO, Iterator, List, Mapping, Optional, Protocol, Tuple, Type, Iterable +from types import FrameType, TracebackType +import sys + +_PT = Tuple[str, int, str, Optional[str]] + + +def print_tb(tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... +if sys.version_info >= (3,): + def print_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... + def print_exc(limit: Optional[int] = ..., file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... + def print_last(limit: Optional[int] = ..., file: Optional[IO[str]] = ..., + chain: bool = ...) -> None: ... +else: + def print_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + def print_exc(limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + def print_last(limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... +def print_stack(f: Optional[FrameType] = ..., limit: Optional[int] = ..., + file: Optional[IO[str]] = ...) -> None: ... + +if sys.version_info >= (3, 5): + def extract_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> StackSummary: ... + def extract_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> StackSummary: ... + def format_list(extracted_list: List[FrameSummary]) -> List[str]: ... + class _Writer(Protocol): + def write(self, s: str) -> Any: ... + # undocumented + def print_list(extracted_list: List[FrameSummary], file: Optional[_Writer] = ...) -> None: ... +else: + def extract_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> List[_PT]: ... + def extract_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> List[_PT]: ... + def format_list(extracted_list: List[_PT]) -> List[str]: ... +def format_exception_only(etype: Optional[Type[BaseException]], + value: Optional[BaseException]) -> List[str]: ... +if sys.version_info >= (3,): + def format_exception(etype: Optional[Type[BaseException]], value: Optional[BaseException], + tb: Optional[TracebackType], limit: Optional[int] = ..., + chain: bool = ...) -> List[str]: ... + def format_exc(limit: Optional[int] = ..., chain: bool = ...) -> str: ... +else: + def format_exception(etype: Optional[Type[BaseException]], + value: Optional[BaseException], + tb: Optional[TracebackType], + limit: Optional[int] = ...) -> List[str]: ... + def format_exc(limit: Optional[int] = ...) -> str: ... +def format_tb(tb: Optional[TracebackType], limit: Optional[int] = ...) -> List[str]: ... +def format_stack(f: Optional[FrameType] = ..., + limit: Optional[int] = ...) -> List[str]: ... +if sys.version_info >= (3, 4): + def clear_frames(tb: TracebackType) -> None: ... +if sys.version_info >= (3, 5): + def walk_stack(f: Optional[FrameType]) -> Iterator[Tuple[FrameType, int]]: ... + def walk_tb(tb: Optional[TracebackType]) -> Iterator[Tuple[FrameType, int]]: ... +if sys.version_info < (3,): + def tb_lineno(tb: TracebackType) -> int: ... + + +if sys.version_info >= (3, 5): + class TracebackException: + __cause__ = ... # type:TracebackException + __context__ = ... # type:TracebackException + __suppress_context__: bool + stack: StackSummary + exc_type: Type[BaseException] + filename: str + lineno: int + text: str + offset: int + msg: str + def __init__(self, exc_type: Type[BaseException], + exc_value: BaseException, exc_traceback: TracebackType, + *, limit: Optional[int] = ..., lookup_lines: bool = ..., + capture_locals: bool = ...) -> None: ... + @classmethod + def from_exception(cls, exc: BaseException, + *, limit: Optional[int] = ..., + lookup_lines: bool = ..., + capture_locals: bool = ...) -> TracebackException: ... + def format(self, *, chain: bool = ...) -> Generator[str, None, None]: ... + def format_exception_only(self) -> Generator[str, None, None]: ... + + class FrameSummary(Iterable): + filename: str + lineno: int + name: str + line: str + locals: Optional[Dict[str, str]] + def __init__(self, filename: str, lineno: int, name: str, + lookup_line: bool = ..., + locals: Optional[Mapping[str, str]] = ..., + line: Optional[str] = ...) -> None: ... + # TODO: more precise typing for __getitem__ and __iter__, + # for a namedtuple-like view on (filename, lineno, name, str). + def __getitem__(self, i: int) -> Any: ... + def __iter__(self) -> Iterator[Any]: ... + + class StackSummary(List[FrameSummary]): + @classmethod + def extract(cls, + frame_gen: Generator[Tuple[FrameType, int], None, None], + *, limit: Optional[int] = ..., lookup_lines: bool = ..., + capture_locals: bool = ...) -> StackSummary: ... + @classmethod + def from_list(cls, a_list: List[_PT]) -> StackSummary: ... + def format(self) -> List[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tty.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tty.pyi new file mode 100644 index 0000000..2bce1ec --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/tty.pyi @@ -0,0 +1,17 @@ +# Stubs for tty (Python 3.6) + +from typing import IO, Union + +_FD = Union[int, IO[str]] + +# XXX: Undocumented integer constants +IFLAG: int +OFLAG: int +CFLAG: int +LFLAG: int +ISPEED: int +OSPEED: int +CC: int + +def setraw(fd: _FD, when: int = ...) -> None: ... +def setcbreak(fd: _FD, when: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi new file mode 100644 index 0000000..c9d9d90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/turtle.pyi @@ -0,0 +1,501 @@ +from typing import Tuple, overload, Optional, Union, Dict, Any, Sequence, TypeVar, List, Callable, Text +import sys +if sys.version_info >= (3,): + from tkinter import Canvas, PhotoImage +else: + # TODO: Replace these aliases once we have Python 2 stubs for the Tkinter module. + Canvas = Any + PhotoImage = Any + +# Note: '_Color' is the alias we use for arguments and _AnyColor is the +# alias we use for return types. Really, these two aliases should be the +# same, but as per the "no union returns" typeshed policy, we'll return +# Any instead. +_Color = Union[Text, Tuple[float, float, float]] +_AnyColor = Any + +# TODO: Replace this with a TypedDict once it becomes standardized. +_PenState = Dict[str, Any] + +_Speed = Union[str, float] +_PolygonCoords = Sequence[Tuple[float, float]] + +# TODO: Type this more accurately +# Vec2D is actually a custom subclass of 'tuple'. +Vec2D = Tuple[float, float] + +class TurtleScreenBase(object): + cv: Canvas = ... + canvwidth: int = ... + canvheight: int = ... + xscale: float = ... + yscale: float = ... + def __init__(self, cv: Canvas) -> None: ... + if sys.version_info >= (3,): + def mainloop(self) -> None: ... + def textinput(self, title: str, prompt: str) -> Optional[str]: ... + def numinput(self, title: str, prompt: str, default: Optional[float] = ..., minval: Optional[float] = ..., maxval: Optional[float] = ...) -> Optional[float]: ... + +class Terminator(Exception): ... +class TurtleGraphicsError(Exception): ... + +class Shape(object): + def __init__(self, type_: str, data: Union[_PolygonCoords, PhotoImage, None] = ...) -> None: ... + def addcomponent(self, poly: _PolygonCoords, fill: _Color, outline: Optional[_Color] = ...) -> None: ... + +class TurtleScreen(TurtleScreenBase): + def __init__(self, cv: Canvas, mode: str = ..., colormode: float = ..., delay: int = ...) -> None: ... + def clear(self) -> None: ... + @overload + def mode(self) -> str: ... + @overload + def mode(self, mode: str) -> None: ... + def setworldcoordinates(self, llx: float, lly: float, urx: float, ury: float) -> None: ... + def register_shape(self, name: str, shape: Union[_PolygonCoords, Shape, None] = ...) -> None: ... + @overload + def colormode(self) -> float: ... + @overload + def colormode(self, cmode: float) -> None: ... + def reset(self) -> None: ... + def turtles(self) -> List[Turtle]: ... + @overload + def bgcolor(self) -> _AnyColor: ... + @overload + def bgcolor(self, color: _Color) -> None: ... + @overload + def bgcolor(self, r: float, g: float, b: float) -> None: ... + @overload + def tracer(self) -> int: ... + @overload + def tracer(self, n: int, delay: Optional[int] = ...) -> None: ... + @overload + def delay(self) -> int: ... + @overload + def delay(self, delay: int) -> None: ... + def update(self) -> None: ... + def window_width(self) -> int: ... + def window_height(self) -> int: ... + def getcanvas(self) -> Canvas: ... + def getshapes(self) -> List[str]: ... + def onclick(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... + def onkey(self, fun: Callable[[], Any], key: str) -> None: ... + def listen(self, xdummy: Optional[float] = ..., ydummy: Optional[float] = ...) -> None: ... + def ontimer(self, fun: Callable[[], Any], t: int = ...) -> None: ... + @overload + def bgpic(self) -> str: ... + @overload + def bgpic(self, picname: str) -> None: ... + @overload + def screensize(self) -> Tuple[int, int]: ... + @overload + def screensize(self, canvwidth: int, canvheight: int, bg: Optional[_Color] = ...) -> None: ... + onscreenclick = onclick + resetscreen = reset + clearscreen = clear + addshape = register_shape + if sys.version_info >= (3,): + def onkeypress(self, fun: Callable[[], Any], key: Optional[str] = ...) -> None: ... + onkeyrelease = onkey + +class TNavigator(object): + START_ORIENTATION: Dict[str, Vec2D] = ... + DEFAULT_MODE: str = ... + DEFAULT_ANGLEOFFSET: int = ... + DEFAULT_ANGLEORIENT: int = ... + def __init__(self, mode: str = ...) -> None: ... + def reset(self) -> None: ... + def degrees(self, fullcircle: float = ...) -> None: ... + def radians(self) -> None: ... + def forward(self, distance: float) -> None: ... + def back(self, distance: float) -> None: ... + def right(self, angle: float) -> None: ... + def left(self, angle: float) -> None: ... + def pos(self) -> Vec2D: ... + def xcor(self) -> float: ... + def ycor(self) -> float: ... + @overload + def goto(self, x: Tuple[float, float]) -> None: ... + @overload + def goto(self, x: float, y: float) -> None: ... + def home(self) -> None: ... + def setx(self, x: float) -> None: ... + def sety(self, y: float) -> None: ... + @overload + def distance(self, x: Union[TNavigator, Tuple[float, float]]) -> float: ... + @overload + def distance(self, x: float, y: float) -> float: ... + @overload + def towards(self, x: Union[TNavigator, Tuple[float, float]]) -> float: ... + @overload + def towards(self, x: float, y: float) -> float: ... + def heading(self) -> float: ... + def setheading(self, to_angle: float) -> None: ... + def circle(self, radius: float, extent: Optional[float] = ..., steps: Optional[int] = ...) -> None: ... + fd = forward + bk = back + backward = back + rt = right + lt = left + position = pos + setpos = goto + setposition = goto + seth = setheading + + +class TPen(object): + def __init__(self, resizemode: str = ...) -> None: ... + @overload + def resizemode(self) -> str: ... + @overload + def resizemode(self, rmode: str) -> None: ... + @overload + def pensize(self) -> int: ... + @overload + def pensize(self, width: int) -> None: ... + def penup(self) -> None: ... + def pendown(self) -> None: ... + def isdown(self) -> bool: ... + @overload + def speed(self) -> int: ... + @overload + def speed(self, speed: _Speed) -> None: ... + @overload + def pencolor(self) -> _AnyColor: ... + @overload + def pencolor(self, color: _Color) -> None: ... + @overload + def pencolor(self, r: float, g: float, b: float) -> None: ... + @overload + def fillcolor(self) -> _AnyColor: ... + @overload + def fillcolor(self, color: _Color) -> None: ... + @overload + def fillcolor(self, r: float, g: float, b: float) -> None: ... + @overload + def color(self) -> Tuple[_AnyColor, _AnyColor]: ... + @overload + def color(self, color: _Color) -> None: ... + @overload + def color(self, r: float, g: float, b: float) -> None: ... + @overload + def color(self, color1: _Color, color2: _Color) -> None: ... + def showturtle(self) -> None: ... + def hideturtle(self) -> None: ... + def isvisible(self) -> bool: ... + # Note: signatures 1 and 2 overlap unsafely when no arguments are provided + @overload + def pen(self) -> _PenState: ... # type: ignore + @overload + def pen(self, pen: Optional[_PenState] = ..., *, + shown: bool = ..., pendown: bool = ..., pencolor: _Color = ..., fillcolor: _Color = ..., + pensize: int = ..., speed: int = ..., resizemode: str = ..., stretchfactor: Tuple[float, float] = ..., + outline: int = ..., tilt: float = ...) -> None: ... + width = pensize + up = penup + pu = penup + pd = pendown + down = pendown + st = showturtle + ht = hideturtle + +_T = TypeVar('_T') + +class RawTurtle(TPen, TNavigator): + def __init__(self, canvas: Union[Canvas, TurtleScreen, None] = ..., shape: str = ..., undobuffersize: int = ..., visible: bool = ...) -> None: ... + def reset(self) -> None: ... + def setundobuffer(self, size: Optional[int]) -> None: ... + def undobufferentries(self) -> int: ... + def clear(self) -> None: ... + def clone(self: _T) -> _T: ... + @overload + def shape(self) -> str: ... + @overload + def shape(self, name: str) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapesize(self) -> Tuple[float, float, float]: ... # type: ignore + @overload + def shapesize(self, stretch_wid: Optional[float] = ..., stretch_len: Optional[float] = ..., outline: Optional[float] = ...) -> None: ... + if sys.version_info >= (3,): + @overload + def shearfactor(self) -> float: ... + @overload + def shearfactor(self, shear: float) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapetransform(self) -> Tuple[float, float, float, float]: ... # type: ignore + @overload + def shapetransform(self, t11: Optional[float] = ..., t12: Optional[float] = ..., t21: Optional[float] = ..., t22: Optional[float] = ...) -> None: ... + def get_shapepoly(self) -> Optional[_PolygonCoords]: ... + def settiltangle(self, angle: float) -> None: ... + @overload + def tiltangle(self) -> float: ... + @overload + def tiltangle(self, angle: float) -> None: ... + def tilt(self, angle: float) -> None: ... + # Can return either 'int' or Tuple[int, ...] based on if the stamp is + # a compound stamp or not. So, as per the "no Union return" policy, + # we return Any. + def stamp(self) -> Any: ... + def clearstamp(self, stampid: Union[int, Tuple[int, ...]]) -> None: ... + def clearstamps(self, n: Optional[int] = ...) -> None: ... + def filling(self) -> bool: ... + def begin_fill(self) -> None: ... + def end_fill(self) -> None: ... + def dot(self, size: Optional[int] = ..., *color: _Color) -> None: ... + def write(self, arg: object, move: bool = ..., align: str = ..., font: Tuple[str, int, str] = ...) -> None: ... + def begin_poly(self) -> None: ... + def end_poly(self) -> None: ... + def get_poly(self) -> Optional[_PolygonCoords]: ... + def getscreen(self) -> TurtleScreen: ... + def getturtle(self: _T) -> _T: ... + getpen = getturtle + def onclick(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def onrelease(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def ondrag(self, fun: Callable[[float, float], Any], btn: int = ..., add: Optional[bool] = ...) -> None: ... + def undo(self) -> None: ... + turtlesize = shapesize + +class _Screen(TurtleScreen): + def __init__(self) -> None: ... + def setup(self, width: int = ..., height: int = ..., startx: int = ..., starty: int = ...) -> None: ... + def title(self, titlestring: str) -> None: ... + def bye(self) -> None: ... + def exitonclick(self) -> None: ... + +def Screen() -> _Screen: ... + +class Turtle(RawTurtle): + def __init__(self, shape: str = ..., undobuffersize: int = ..., visible: bool = ...) -> None: ... + +RawPen = RawTurtle +Pen = Turtle + +def write_docstringdict(filename: str) -> None: ... + +# Note: it's somewhat unfortunate that we have to copy the function signatures. +# It would be nice if we could partially reduce the redundancy by doing something +# like the following: +# +# _screen: Screen +# clear = _screen.clear +# +# However, it seems pytype does not support this type of syntax in pyi files. + +# Functions copied from TurtleScreenBase: + +# Note: mainloop() was always present in the global scope, but was added to +# TurtleScreenBase in Python 3.0 +def mainloop() -> None: ... +if sys.version_info >= (3,): + def textinput(title: str, prompt: str) -> Optional[str]: ... + def numinput(title: str, prompt: str, default: Optional[float] = ..., minval: Optional[float] = ..., maxval: Optional[float] = ...) -> Optional[float]: ... + +# Functions copied from TurtleScreen: + +def clear() -> None: ... +@overload +def mode() -> str: ... +@overload +def mode(mode: str) -> None: ... +def setworldcoordinates(llx: float, lly: float, urx: float, ury: float) -> None: ... +def register_shape(name: str, shape: Union[_PolygonCoords, Shape, None] = ...) -> None: ... +@overload +def colormode() -> float: ... +@overload +def colormode(cmode: float) -> None: ... +def reset() -> None: ... +def turtles() -> List[Turtle]: ... +@overload +def bgcolor() -> _AnyColor: ... +@overload +def bgcolor(color: _Color) -> None: ... +@overload +def bgcolor(r: float, g: float, b: float) -> None: ... +@overload +def tracer() -> int: ... +@overload +def tracer(n: int, delay: Optional[int] = ...) -> None: ... +@overload +def delay() -> int: ... +@overload +def delay(delay: int) -> None: ... +def update() -> None: ... +def window_width() -> int: ... +def window_height() -> int: ... +def getcanvas() -> Canvas: ... +def getshapes() -> List[str]: ... +def onclick(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def onkey(fun: Callable[[], Any], key: str) -> None: ... +def listen(xdummy: Optional[float] = ..., ydummy: Optional[float] = ...) -> None: ... +def ontimer(fun: Callable[[], Any], t: int = ...) -> None: ... +@overload +def bgpic() -> str: ... +@overload +def bgpic(picname: str) -> None: ... +@overload +def screensize() -> Tuple[int, int]: ... +@overload +def screensize(canvwidth: int, canvheight: int, bg: Optional[_Color] = ...) -> None: ... +onscreenclick = onclick +resetscreen = reset +clearscreen = clear +addshape = register_shape +if sys.version_info >= (3,): + def onkeypress(fun: Callable[[], Any], key: Optional[str] = ...) -> None: ... + onkeyrelease = onkey + +# Functions copied from TNavigator: + +def degrees(fullcircle: float = ...) -> None: ... +def radians() -> None: ... +def forward(distance: float) -> None: ... +def back(distance: float) -> None: ... +def right(angle: float) -> None: ... +def left(angle: float) -> None: ... +def pos() -> Vec2D: ... +def xcor() -> float: ... +def ycor() -> float: ... +@overload +def goto(x: Tuple[float, float]) -> None: ... +@overload +def goto(x: float, y: float) -> None: ... +def home() -> None: ... +def setx(x: float) -> None: ... +def sety(y: float) -> None: ... +@overload +def distance(x: Union[TNavigator, Tuple[float, float]]) -> float: ... +@overload +def distance(x: float, y: float) -> float: ... +@overload +def towards(x: Union[TNavigator, Tuple[float, float]]) -> float: ... +@overload +def towards(x: float, y: float) -> float: ... +def heading() -> float: ... +def setheading(to_angle: float) -> None: ... +def circle(radius: float, extent: Optional[float] = ..., steps: Optional[int] = ...) -> None: ... +fd = forward +bk = back +backward = back +rt = right +lt = left +position = pos +setpos = goto +setposition = goto +seth = setheading + +# Functions copied from TPen: + +@overload +def resizemode() -> str: ... +@overload +def resizemode(rmode: str) -> None: ... +@overload +def pensize() -> int: ... +@overload +def pensize(width: int) -> None: ... +def penup() -> None: ... +def pendown() -> None: ... +def isdown() -> bool: ... +@overload +def speed() -> int: ... +@overload +def speed(speed: _Speed) -> None: ... +@overload +def pencolor() -> _AnyColor: ... +@overload +def pencolor(color: _Color) -> None: ... +@overload +def pencolor(r: float, g: float, b: float) -> None: ... +@overload +def fillcolor() -> _AnyColor: ... +@overload +def fillcolor(color: _Color) -> None: ... +@overload +def fillcolor(r: float, g: float, b: float) -> None: ... +@overload +def color() -> Tuple[_AnyColor, _AnyColor]: ... +@overload +def color(color: _Color) -> None: ... +@overload +def color(r: float, g: float, b: float) -> None: ... +@overload +def color(color1: _Color, color2: _Color) -> None: ... +def showturtle() -> None: ... +def hideturtle() -> None: ... +def isvisible() -> bool: ... +# Note: signatures 1 and 2 overlap unsafely when no arguments are provided +@overload +def pen() -> _PenState: ... # type: ignore +@overload +def pen(pen: Optional[_PenState] = ..., *, + shown: bool = ..., pendown: bool = ..., pencolor: _Color = ..., fillcolor: _Color = ..., + pensize: int = ..., speed: int = ..., resizemode: str = ..., stretchfactor: Tuple[float, float] = ..., + outline: int = ..., tilt: float = ...) -> None: ... +width = pensize +up = penup +pu = penup +pd = pendown +down = pendown +st = showturtle +ht = hideturtle + +# Functions copied from RawTurtle: + +def setundobuffer(size: Optional[int]) -> None: ... +def undobufferentries() -> int: ... +@overload +def shape() -> str: ... +@overload +def shape(name: str) -> None: ... +# Unsafely overlaps when no arguments are provided +@overload +def shapesize() -> Tuple[float, float, float]: ... # type: ignore +@overload +def shapesize(stretch_wid: Optional[float] = ..., stretch_len: Optional[float] = ..., outline: Optional[float] = ...) -> None: ... +if sys.version_info >= (3,): + @overload + def shearfactor() -> float: ... + @overload + def shearfactor(shear: float) -> None: ... + # Unsafely overlaps when no arguments are provided + @overload + def shapetransform() -> Tuple[float, float, float, float]: ... # type: ignore + @overload + def shapetransform(t11: Optional[float] = ..., t12: Optional[float] = ..., t21: Optional[float] = ..., t22: Optional[float] = ...) -> None: ... + def get_shapepoly() -> Optional[_PolygonCoords]: ... +def settiltangle(angle: float) -> None: ... +@overload +def tiltangle() -> float: ... +@overload +def tiltangle(angle: float) -> None: ... +def tilt(angle: float) -> None: ... +# Can return either 'int' or Tuple[int, ...] based on if the stamp is +# a compound stamp or not. So, as per the "no Union return" policy, +# we return Any. +def stamp() -> Any: ... +def clearstamp(stampid: Union[int, Tuple[int, ...]]) -> None: ... +def clearstamps(n: Optional[int] = ...) -> None: ... +def filling() -> bool: ... +def begin_fill() -> None: ... +def end_fill() -> None: ... +def dot(size: Optional[int] = ..., *color: _Color) -> None: ... +def write(arg: object, move: bool = ..., align: str = ..., font: Tuple[str, int, str] = ...) -> None: ... +def begin_poly() -> None: ... +def end_poly() -> None: ... +def get_poly() -> Optional[_PolygonCoords]: ... +def getscreen() -> TurtleScreen: ... +def getturtle() -> Turtle: ... +getpen = getturtle +def onrelease(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def ondrag(fun: Callable[[float, float], Any], btn: int = ..., add: Optional[Any] = ...) -> None: ... +def undo() -> None: ... +turtlesize = shapesize + +# Functions copied from RawTurtle with a few tweaks: + +def clone() -> Turtle: ... + +# Extra functions present only in the global scope: + +done = mainloop diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi new file mode 100644 index 0000000..bf4f30b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/unicodedata.pyi @@ -0,0 +1,38 @@ +# Stubs for unicodedata (Python 2.7 and 3.4) +from typing import Any, Text, TypeVar, Union + +ucd_3_2_0: UCD +ucnhash_CAPI: Any +unidata_version: str + +_default = TypeVar('_default') + +def bidirectional(__chr: Text) -> Text: ... +def category(__chr: Text) -> Text: ... +def combining(__chr: Text) -> int: ... +def decimal(__chr: Text, __default: _default = ...) -> Union[int, _default]: ... +def decomposition(__chr: Text) -> Text: ... +def digit(__chr: Text, __default: _default = ...) -> Union[int, _default]: ... +def east_asian_width(__chr: Text) -> Text: ... +def lookup(__name: Union[Text, bytes]) -> Text: ... +def mirrored(__chr: Text) -> int: ... +def name(__chr: Text, __default: _default = ...) -> Union[Text, _default]: ... +def normalize(__form: Text, __unistr: Text) -> Text: ... +def numeric(__chr: Text, __default: _default = ...) -> Union[float, _default]: ... + +class UCD(object): + # The methods below are constructed from the same array in C + # (unicodedata_functions) and hence identical to the methods above. + unidata_version: str + def bidirectional(self, __chr: Text) -> str: ... + def category(self, __chr: Text) -> str: ... + def combining(self, __chr: Text) -> int: ... + def decimal(self, __chr: Text, __default: _default = ...) -> Union[int, _default]: ... + def decomposition(self, __chr: Text) -> str: ... + def digit(self, __chr: Text, __default: _default = ...) -> Union[int, _default]: ... + def east_asian_width(self, __chr: Text) -> str: ... + def lookup(self, __name: Union[Text, bytes]) -> Text: ... + def mirrored(self, __chr: Text) -> int: ... + def name(self, __chr: Text, __default: _default = ...) -> Union[Text, _default]: ... + def normalize(self, __form: Text, __unistr: Text) -> Text: ... + def numeric(self, __chr: Text, __default: _default = ...) -> Union[float, _default]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uu.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uu.pyi new file mode 100644 index 0000000..c926dbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uu.pyi @@ -0,0 +1,13 @@ +# Stubs for uu (Python 2 and 3) +import sys +from typing import BinaryIO, Union, Optional, Text + +_File = Union[Text, BinaryIO] + +class Error(Exception): ... + +if sys.version_info >= (3, 7): + def encode(in_file: _File, out_file: _File, name: Optional[str] = ..., mode: Optional[int] = ..., backtick: bool = ...) -> None: ... +else: + def encode(in_file: _File, out_file: _File, name: Optional[str] = ..., mode: Optional[int] = ...) -> None: ... +def decode(in_file: _File, out_file: Optional[_File] = ..., mode: Optional[int] = ..., quiet: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi new file mode 100644 index 0000000..9c009d9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/uuid.pyi @@ -0,0 +1,90 @@ +# Stubs for uuid + +import sys +from typing import Tuple, Optional, Any, Text + +# Because UUID has properties called int and bytes we need to rename these temporarily. +_Int = int +_Bytes = bytes +_FieldsType = Tuple[int, int, int, int, int, int] + +class UUID: + def __init__(self, hex: Optional[Text] = ..., + bytes: Optional[_Bytes] = ..., + bytes_le: Optional[_Bytes] = ..., + fields: Optional[_FieldsType] = ..., + int: Optional[_Int] = ..., + version: Optional[_Int] = ...) -> None: ... + @property + def bytes(self) -> _Bytes: ... + @property + def bytes_le(self) -> _Bytes: ... + @property + def clock_seq(self) -> _Int: ... + @property + def clock_seq_hi_variant(self) -> _Int: ... + @property + def clock_seq_low(self) -> _Int: ... + @property + def fields(self) -> _FieldsType: ... + @property + def hex(self) -> str: ... + @property + def int(self) -> _Int: ... + @property + def node(self) -> _Int: ... + @property + def time(self) -> _Int: ... + @property + def time_hi_version(self) -> _Int: ... + @property + def time_low(self) -> _Int: ... + @property + def time_mid(self) -> _Int: ... + @property + def urn(self) -> str: ... + @property + def variant(self) -> str: ... + @property + def version(self) -> Optional[_Int]: ... + + def __int__(self) -> _Int: ... + + if sys.version_info >= (3,): + def __eq__(self, other: Any) -> bool: ... + def __lt__(self, other: Any) -> bool: ... + def __le__(self, other: Any) -> bool: ... + def __gt__(self, other: Any) -> bool: ... + def __ge__(self, other: Any) -> bool: ... + else: + def get_bytes(self) -> _Bytes: ... + def get_bytes_le(self) -> _Bytes: ... + def get_clock_seq(self) -> _Int: ... + def get_clock_seq_hi_variant(self) -> _Int: ... + def get_clock_seq_low(self) -> _Int: ... + def get_fields(self) -> _FieldsType: ... + def get_hex(self) -> str: ... + def get_node(self) -> _Int: ... + def get_time(self) -> _Int: ... + def get_time_hi_version(self) -> _Int: ... + def get_time_low(self) -> _Int: ... + def get_time_mid(self) -> _Int: ... + def get_urn(self) -> str: ... + def get_variant(self) -> str: ... + def get_version(self) -> Optional[_Int]: ... + def __cmp__(self, other: Any) -> _Int: ... + +def getnode() -> int: ... +def uuid1(node: Optional[_Int] = ..., clock_seq: Optional[_Int] = ...) -> UUID: ... +def uuid3(namespace: UUID, name: str) -> UUID: ... +def uuid4() -> UUID: ... +def uuid5(namespace: UUID, name: str) -> UUID: ... + +NAMESPACE_DNS: UUID +NAMESPACE_URL: UUID +NAMESPACE_OID: UUID +NAMESPACE_X500: UUID +RESERVED_NCS: str +RFC_4122: str +RESERVED_MICROSOFT: str +RESERVED_FUTURE: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi new file mode 100644 index 0000000..a44e43e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/warnings.pyi @@ -0,0 +1,38 @@ +# Stubs for warnings + +from typing import Any, Dict, List, NamedTuple, Optional, TextIO, Tuple, Type, Union +from types import ModuleType, TracebackType + +def warn(message: Union[str, Warning], category: Optional[Type[Warning]] = ..., + stacklevel: int = ...) -> None: ... +def warn_explicit(message: Union[str, Warning], category: Type[Warning], + filename: str, lineno: int, module: Optional[str] = ..., + registry: Optional[Dict[Union[str, Tuple[str, Type[Warning], int]], int]] = ..., + module_globals: Optional[Dict[str, Any]] = ...) -> None: ... +def showwarning(message: str, category: Type[Warning], filename: str, + lineno: int, file: Optional[TextIO] = ..., + line: Optional[str] = ...) -> None: ... +def formatwarning(message: str, category: Type[Warning], filename: str, + lineno: int, line: Optional[str] = ...) -> str: ... +def filterwarnings(action: str, message: str = ..., + category: Type[Warning] = ..., module: str = ..., + lineno: int = ..., append: bool = ...) -> None: ... +def simplefilter(action: str, category: Type[Warning] = ..., lineno: int = ..., + append: bool = ...) -> None: ... +def resetwarnings() -> None: ... + +_Record = NamedTuple('_Record', + [('message', str), + ('category', Type[Warning]), + ('filename', str), + ('lineno', int), + ('file', Optional[TextIO]), + ('line', Optional[str])]) + +class catch_warnings: + def __init__(self, *, record: bool = ..., + module: Optional[ModuleType] = ...) -> None: ... + def __enter__(self) -> Optional[List[_Record]]: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wave.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wave.pyi new file mode 100644 index 0000000..951142a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wave.pyi @@ -0,0 +1,76 @@ +# Stubs for wave (Python 2 and 3) + +import sys +from typing import ( + Any, NamedTuple, NoReturn, Optional, Text, BinaryIO, Union, Tuple +) + +_File = Union[Text, BinaryIO] + +class Error(Exception): ... + +WAVE_FORMAT_PCM: int + +if sys.version_info < (3, 0): + _wave_params = Tuple[int, int, int, int, str, str] +else: + _wave_params = NamedTuple('_wave_params', [ + ('nchannels', int), + ('sampwidth', int), + ('framerate', int), + ('nframes', int), + ('comptype', str), + ('compname', str), + ]) + +class Wave_read: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 0): + def __enter__(self) -> Wave_read: ... + def __exit__(self, *args: Any) -> None: ... + def getfp(self) -> Optional[BinaryIO]: ... + def rewind(self) -> None: ... + def close(self) -> None: ... + def tell(self) -> int: ... + def getnchannels(self) -> int: ... + def getnframes(self) -> int: ... + def getsampwidth(self) -> int: ... + def getframerate(self) -> int: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def getparams(self) -> _wave_params: ... + def getmarkers(self) -> None: ... + def getmark(self, id: Any) -> NoReturn: ... + def setpos(self, pos: int) -> None: ... + def readframes(self, nframes: int) -> bytes: ... + +class Wave_write: + def __init__(self, f: _File) -> None: ... + if sys.version_info >= (3, 0): + def __enter__(self) -> Wave_write: ... + def __exit__(self, *args: Any) -> None: ... + def setnchannels(self, nchannels: int) -> None: ... + def getnchannels(self) -> int: ... + def setsampwidth(self, sampwidth: int) -> None: ... + def getsampwidth(self) -> int: ... + def setframerate(self, framerate: float) -> None: ... + def getframerate(self) -> int: ... + def setnframes(self, nframes: int) -> None: ... + def getnframes(self) -> int: ... + def setcomptype(self, comptype: str, compname: str) -> None: ... + def getcomptype(self) -> str: ... + def getcompname(self) -> str: ... + def setparams(self, params: _wave_params) -> None: ... + def getparams(self) -> _wave_params: ... + def setmark(self, id: Any, pos: Any, name: Any) -> NoReturn: ... + def getmark(self, id: Any) -> NoReturn: ... + def getmarkers(self) -> None: ... + def tell(self) -> int: ... + # should be any bytes-like object after 3.4, but we don't have a type for that + def writeframesraw(self, data: bytes) -> None: ... + def writeframes(self, data: bytes) -> None: ... + def close(self) -> None: ... + +# Returns a Wave_read if mode is rb and Wave_write if mode is wb +def open(f: _File, mode: Optional[str] = ...) -> Any: ... +openfp = open diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi new file mode 100644 index 0000000..e3ddbf2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/weakref.pyi @@ -0,0 +1,110 @@ +import sys +import types +from typing import ( + TypeVar, Generic, Any, Callable, overload, Mapping, Iterator, Tuple, + Iterable, Optional, Type, MutableMapping, Union, List, Dict +) + +from _weakref import ( + getweakrefcount as getweakrefcount, + getweakrefs as getweakrefs, + ref as ref, + proxy as proxy, + CallableProxyType as CallableProxyType, + ProxyType as ProxyType, + ReferenceType as ReferenceType) +from _weakrefset import WeakSet as WeakSet + +if sys.version_info < (3, 0): + from exceptions import ReferenceError as ReferenceError + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +ProxyTypes: Tuple[Type[Any], ...] + +if sys.version_info >= (3, 4): + class WeakMethod(ref[types.MethodType]): + def __new__(cls, meth: types.MethodType, callback: Optional[Callable[[types.MethodType], Any]] = ...) -> WeakMethod: ... + def __call__(self) -> Optional[types.MethodType]: ... + +class WeakValueDictionary(MutableMapping[_KT, _VT]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ... + + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, key: object) -> bool: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + + def copy(self) -> WeakValueDictionary[_KT, _VT]: ... + + if sys.version_info < (3, 0): + def keys(self) -> List[_KT]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + else: + # These are incompatible with Mapping + def keys(self) -> Iterator[_KT]: ... # type: ignore + def values(self) -> Iterator[_VT]: ... # type: ignore + def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore + def itervaluerefs(self) -> Iterator[KeyedRef[_KT, _VT]]: ... + def valuerefs(self) -> List[KeyedRef[_KT, _VT]]: ... + +class KeyedRef(ref[_T], Generic[_KT, _T]): + key: _KT + def __init__(self, ob: _T, callback: Callable[[_T], Any], key: _KT) -> None: ... + +class WeakKeyDictionary(MutableMapping[_KT, _VT]): + @overload + def __init__(self) -> None: ... + @overload + def __init__(self, __map: Union[Mapping[_KT, _VT], Iterable[Tuple[_KT, _VT]]], **kwargs: _VT) -> None: ... + + def __len__(self) -> int: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, key: object) -> bool: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT]: ... + def __str__(self) -> str: ... + + def copy(self) -> WeakKeyDictionary[_KT, _VT]: ... + + if sys.version_info < (3, 0): + def keys(self) -> List[_KT]: ... + def values(self) -> List[_VT]: ... + def items(self) -> List[Tuple[_KT, _VT]]: ... + def iterkeys(self) -> Iterator[_KT]: ... + def itervalues(self) -> Iterator[_VT]: ... + def iteritems(self) -> Iterator[Tuple[_KT, _VT]]: ... + def iterkeyrefs(self) -> Iterator[ref[_KT]]: ... + else: + # These are incompatible with Mapping + def keys(self) -> Iterator[_KT]: ... # type: ignore + def values(self) -> Iterator[_VT]: ... # type: ignore + def items(self) -> Iterator[Tuple[_KT, _VT]]: ... # type: ignore + def keyrefs(self) -> List[ref[_KT]]: ... + +if sys.version_info >= (3, 4): + class finalize: + def __init__(self, obj: _S, func: Callable[..., _T], *args: Any, **kwargs: Any) -> None: ... + def __call__(self, _: Any = ...) -> Optional[_T]: ... + def detach(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ... + def peek(self) -> Optional[Tuple[_S, _T, Tuple[Any, ...], Dict[str, Any]]]: ... + alive: bool + atexit: bool diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi new file mode 100644 index 0000000..7d1b4cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/webbrowser.pyi @@ -0,0 +1,99 @@ +import sys +from typing import Any, Optional, Callable, List, Text, Union, Sequence + +class Error(Exception): ... + +if sys.version_info >= (3, 7): + def register(name: Text, klass: Optional[Callable[[], BaseBrowser]], instance: BaseBrowser = ..., *, preferred: bool = ...) -> None: ... +else: + def register(name: Text, klass: Optional[Callable[[], BaseBrowser]], instance: BaseBrowser = ..., update_tryorder: int = ...) -> None: ... +def get(using: Optional[Text] = ...) -> BaseBrowser: ... +def open(url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... +def open_new(url: Text) -> bool: ... +def open_new_tab(url: Text) -> bool: ... + +class BaseBrowser: + args: List[str] + name: str + basename: str + def __init__(self, name: Text = ...) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + def open_new(self, url: Text) -> bool: ... + def open_new_tab(self, url: Text) -> bool: ... + +class GenericBrowser(BaseBrowser): + args: List[str] + name: str + basename: str + def __init__(self, name: Union[Text, Sequence[Text]]) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class BackgroundBrowser(GenericBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class UnixBrowser(BaseBrowser): + raise_opts: List[str] + background: bool + redirect_stdout: bool + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class Mozilla(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Galeon(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + background: bool + +if sys.version_info[:2] == (2, 7) or sys.version_info >= (3, 3): + class Chrome(UnixBrowser): + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Opera(UnixBrowser): + raise_opts: List[str] + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + +class Elinks(UnixBrowser): + remote_args: List[str] + remote_action: str + remote_action_newwin: str + remote_action_newtab: str + background: bool + redirect_stdout: bool + +class Konqueror(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class Grail(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class WindowsDefault(BaseBrowser): + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class MacOSX(BaseBrowser): + name: str + def __init__(self, name: Text) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... + +class MacOSXOSAScript(BaseBrowser): + def __init__(self, name: Text) -> None: ... + def open(self, url: Text, new: int = ..., autoraise: bool = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi new file mode 100644 index 0000000..3271c88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/handlers.pyi @@ -0,0 +1,87 @@ +import sys +from abc import abstractmethod +from types import TracebackType +from typing import Optional, Dict, MutableMapping, Type, Text, Callable, List, Tuple, IO + +from .headers import Headers +from .types import WSGIApplication, WSGIEnvironment, StartResponse, InputStream, ErrorStream +from .util import FileWrapper, guess_scheme + +_exc_info = Tuple[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]] + +def format_date_time(timestamp: Optional[float]) -> str: ... # undocumented +if sys.version_info >= (3, 2): + def read_environ() -> Dict[str, str]: ... + +class BaseHandler: + wsgi_version: Tuple[int, int] # undocumented + wsgi_multithread: bool + wsgi_multiprocess: bool + wsgi_run_once: bool + + origin_server: bool + http_version: str + server_software: Optional[str] + + os_environ: MutableMapping[str, str] + + wsgi_file_wrapper: Optional[Type[FileWrapper]] + headers_class: Type[Headers] # undocumented + + traceback_limit: Optional[int] + error_status: str + error_headers: List[Tuple[Text, Text]] + error_body: bytes + + def run(self, application: WSGIApplication) -> None: ... + + def setup_environ(self) -> None: ... + def finish_response(self) -> None: ... + def get_scheme(self) -> str: ... + def set_content_length(self) -> None: ... + def cleanup_headers(self) -> None: ... + def start_response(self, status: Text, headers: List[Tuple[Text, Text]], exc_info: Optional[_exc_info] = ...) -> Callable[[bytes], None]: ... + def send_preamble(self) -> None: ... + def write(self, data: bytes) -> None: ... + def sendfile(self) -> bool: ... + def finish_content(self) -> None: ... + def close(self) -> None: ... + def send_headers(self) -> None: ... + def result_is_file(self) -> bool: ... + def client_is_modern(self) -> bool: ... + def log_exception(self, exc_info: _exc_info) -> None: ... + def handle_error(self) -> None: ... + def error_output(self, environ: WSGIEnvironment, start_response: StartResponse) -> List[bytes]: ... + + @abstractmethod + def _write(self, data: bytes) -> None: ... + @abstractmethod + def _flush(self) -> None: ... + @abstractmethod + def get_stdin(self) -> InputStream: ... + @abstractmethod + def get_stderr(self) -> ErrorStream: ... + @abstractmethod + def add_cgi_vars(self) -> None: ... + +class SimpleHandler(BaseHandler): + stdin: InputStream + stdout: IO[bytes] + stderr: ErrorStream + base_env: MutableMapping[str, str] + def __init__(self, stdin: InputStream, stdout: IO[bytes], stderr: ErrorStream, environ: MutableMapping[str, str], multithread: bool = ..., multiprocess: bool = ...) -> None: ... + def get_stdin(self) -> InputStream: ... + def get_stderr(self) -> ErrorStream: ... + def add_cgi_vars(self) -> None: ... + def _write(self, data: bytes) -> None: ... + def _flush(self) -> None: ... + +class BaseCGIHandler(SimpleHandler): ... + +class CGIHandler(BaseCGIHandler): + def __init__(self) -> None: ... + +class IISCGIHandler(BaseCGIHandler): + def __init__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi new file mode 100644 index 0000000..8539225 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/headers.pyi @@ -0,0 +1,31 @@ +import sys +from typing import overload, Pattern, Optional, List, Tuple + +_HeaderList = List[Tuple[str, str]] + +tspecials: Pattern[str] # undocumented + +class Headers: + if sys.version_info < (3, 5): + def __init__(self, headers: _HeaderList) -> None: ... + else: + def __init__(self, headers: Optional[_HeaderList] = ...) -> None: ... + def __len__(self) -> int: ... + def __setitem__(self, name: str, val: str) -> None: ... + def __delitem__(self, name: str) -> None: ... + def __getitem__(self, name: str) -> Optional[str]: ... + if sys.version_info < (3,): + def has_key(self, name: str) -> bool: ... + def __contains__(self, name: str) -> bool: ... + def get_all(self, name: str) -> List[str]: ... + @overload + def get(self, name: str, default: str) -> str: ... + @overload + def get(self, name: str, default: Optional[str] = ...) -> Optional[str]: ... + def keys(self) -> List[str]: ... + def values(self) -> List[str]: ... + def items(self) -> _HeaderList: ... + if sys.version_info >= (3,): + def __bytes__(self) -> bytes: ... + def setdefault(self, name: str, value: str) -> str: ... + def add_header(self, _name: str, _value: Optional[str], **_params: Optional[str]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi new file mode 100644 index 0000000..50b8377 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/simple_server.pyi @@ -0,0 +1,40 @@ +import sys +from typing import Optional, List, Type, TypeVar, overload + +from .handlers import SimpleHandler +from .types import WSGIApplication, WSGIEnvironment, StartResponse, ErrorStream + +if sys.version_info < (3,): + from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer +else: + from http.server import HTTPServer, BaseHTTPRequestHandler + +server_version: str # undocumented +sys_version: str # undocumented +software_version: str # undocumented + +class ServerHandler(SimpleHandler): # undocumented + server_software: str + def close(self) -> None: ... + +class WSGIServer(HTTPServer): + application: Optional[WSGIApplication] + base_environ: WSGIEnvironment # only available after call to setup_environ() + def setup_environ(self) -> None: ... + def get_app(self) -> Optional[WSGIApplication]: ... + def set_app(self, application: Optional[WSGIApplication]) -> None: ... + +class WSGIRequestHandler(BaseHTTPRequestHandler): + server_version: str + def get_environ(self) -> WSGIEnvironment: ... + def get_stderr(self) -> ErrorStream: ... + def handle(self) -> None: ... + +def demo_app(environ: WSGIEnvironment, start_response: StartResponse) -> List[bytes]: ... + +_S = TypeVar("_S", bound=WSGIServer) + +@overload +def make_server(host: str, port: int, app: WSGIApplication, *, handler_class: Type[WSGIRequestHandler] = ...) -> WSGIServer: ... +@overload +def make_server(host: str, port: int, app: WSGIApplication, server_class: Type[_S], handler_class: Type[WSGIRequestHandler] = ...) -> _S: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi new file mode 100644 index 0000000..39a913e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/types.pyi @@ -0,0 +1,44 @@ +# Type declaration for a WSGI Function +# +# wsgiref/types.py doesn't exist and neither do the types defined in this +# file. They are provided for type checking purposes. +# +# This means you cannot simply import wsgiref.types in your code. Instead, +# use the `TYPE_CHECKING` flag from the typing module: +# +# from typing import TYPE_CHECKING +# +# if TYPE_CHECKING: +# from wsgiref.types import WSGIApplication +# +# This import is now only taken into account by the type checker. Consequently, +# you need to use 'WSGIApplication' and not simply WSGIApplication when type +# hinting your code. Otherwise Python will raise NameErrors. + +from sys import _OptExcInfo +from typing import Callable, Dict, Iterable, List, Any, Text, Protocol, Tuple, Optional + +class StartResponse(Protocol): + def __call__(self, status: str, headers: List[Tuple[str, str]], exc_info: Optional[_OptExcInfo] = ...) -> Callable[[bytes], Any]: ... + +WSGIEnvironment = Dict[Text, Any] +WSGIApplication = Callable[[WSGIEnvironment, StartResponse], Iterable[bytes]] + +# WSGI input streams per PEP 3333 +class InputStream(Protocol): + def read(self, size: int = ...) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def __iter__(self) -> Iterable[bytes]: ... + +# WSGI error streams per PEP 3333 +class ErrorStream(Protocol): + def flush(self) -> None: ... + def write(self, s: str) -> None: ... + def writelines(self, seq: List[str]) -> None: ... + +class _Readable(Protocol): + def read(self, size: int = ...) -> bytes: ... +# Optional file wrapper in wsgi.file_wrapper +class FileWrapper(Protocol): + def __call__(self, file: _Readable, block_size: int = ...) -> Iterable[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi new file mode 100644 index 0000000..501ddcd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/util.pyi @@ -0,0 +1,23 @@ +import sys +from typing import IO, Any, Optional + +from .types import WSGIEnvironment + +class FileWrapper: + filelike: IO[bytes] + blksize: int + def __init__(self, filelike: IO[bytes], bklsize: int = ...) -> None: ... + def __getitem__(self, key: Any) -> bytes: ... + def __iter__(self) -> FileWrapper: ... + if sys.version_info < (3,): + def next(self) -> bytes: ... + else: + def __next__(self) -> bytes: ... + def close(self) -> None: ... # only exists if filelike.close exists + +def guess_scheme(environ: WSGIEnvironment) -> str: ... +def application_uri(environ: WSGIEnvironment) -> str: ... +def request_uri(environ: WSGIEnvironment, include_query: bool = ...) -> str: ... +def shift_path_info(environ: WSGIEnvironment) -> Optional[str]: ... +def setup_testing_defaults(environ: WSGIEnvironment) -> None: ... +def is_hop_by_hop(header_name: str) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi new file mode 100644 index 0000000..c7fa699 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/wsgiref/validate.pyi @@ -0,0 +1,53 @@ +import sys +from typing import Any, Iterable, Iterator, Optional, NoReturn, Callable + +from wsgiref.types import WSGIApplication, InputStream, ErrorStream + +class WSGIWarning(Warning): ... + +def validator(application: WSGIApplication) -> WSGIApplication: ... + +class InputWrapper: + input: InputStream + def __init__(self, wsgi_input: InputStream) -> None: ... + if sys.version_info < (3,): + def read(self, size: int = ...) -> bytes: ... + def readline(self) -> bytes: ... + else: + def read(self, size: int) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> bytes: ... + def __iter__(self) -> Iterable[bytes]: ... + def close(self) -> NoReturn: ... + +class ErrorWrapper: + errors: ErrorStream + def __init__(self, wsgi_errors: ErrorStream) -> None: ... + def write(self, s: str) -> None: ... + def flush(self) -> None: ... + def writelines(self, seq: Iterable[str]) -> None: ... + def close(self) -> NoReturn: ... + +class WriteWrapper: + writer: Callable[[bytes], Any] + def __init__(self, wsgi_writer: Callable[[bytes], Any]) -> None: ... + def __call__(self, s: bytes) -> None: ... + +class PartialIteratorWrapper: + iterator: Iterator[bytes] + def __init__(self, wsgi_iterator: Iterator[bytes]) -> None: ... + def __iter__(self) -> IteratorWrapper: ... + +class IteratorWrapper: + original_iterator: Iterator[bytes] + iterator: Iterator[bytes] + closed: bool + check_start_response: Optional[bool] + def __init__(self, wsgi_iterator: Iterator[bytes], check_start_response: Optional[bool]) -> None: ... + def __iter__(self) -> IteratorWrapper: ... + if sys.version_info < (3,): + def next(self) -> bytes: ... + else: + def __next__(self) -> bytes: ... + def close(self) -> None: ... + def __del__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi new file mode 100644 index 0000000..864aced --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xdrlib.pyi @@ -0,0 +1,56 @@ +# Structs for xdrlib (Python 2 and 3) +from typing import Callable, List, Sequence, TypeVar + +_T = TypeVar('_T') + +class Error(Exception): + msg: str + def __init__(self, msg: str) -> None: ... + +class ConversionError(Error): ... + +class Packer: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def get_buffer(self) -> bytes: ... + def get_buf(self) -> bytes: ... + def pack_uint(self, x: int) -> None: ... + def pack_int(self, x: int) -> None: ... + def pack_enum(self, x: int) -> None: ... + def pack_bool(self, x: bool) -> None: ... + def pack_uhyper(self, x: int) -> None: ... + def pack_hyper(self, x: int) -> None: ... + def pack_float(self, x: float) -> None: ... + def pack_double(self, x: float) -> None: ... + def pack_fstring(self, n: int, s: bytes) -> None: ... + def pack_fopaque(self, n: int, s: bytes) -> None: ... + def pack_string(self, s: bytes) -> None: ... + def pack_opaque(self, s: bytes) -> None: ... + def pack_bytes(self, s: bytes) -> None: ... + def pack_list(self, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + def pack_farray(self, n: int, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + def pack_array(self, list: Sequence[_T], pack_item: Callable[[_T], None]) -> None: ... + +class Unpacker: + def __init__(self, data: bytes) -> None: ... + def reset(self, data: bytes) -> None: ... + def get_position(self) -> int: ... + def set_position(self, position: int) -> None: ... + def get_buffer(self) -> bytes: ... + def done(self) -> None: ... + def unpack_uint(self) -> int: ... + def unpack_int(self) -> int: ... + def unpack_enum(self) -> int: ... + def unpack_bool(self) -> bool: ... + def unpack_uhyper(self) -> int: ... + def unpack_hyper(self) -> int: ... + def unpack_float(self) -> float: ... + def unpack_double(self) -> float: ... + def unpack_fstring(self, n: int) -> bytes: ... + def unpack_fopaque(self, n: int) -> bytes: ... + def unpack_string(self) -> bytes: ... + def unpack_opaque(self) -> bytes: ... + def unpack_bytes(self) -> bytes: ... + def unpack_list(self, unpack_item: Callable[[], _T]) -> List[_T]: ... + def unpack_farray(self, n: int, unpack_item: Callable[[], _T]) -> List[_T]: ... + def unpack_array(self, unpack_item: Callable[[], _T]) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi new file mode 100644 index 0000000..c524ac2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/__init__.pyi @@ -0,0 +1 @@ +import xml.parsers as parsers diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi new file mode 100644 index 0000000..e8c3cd5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementInclude.pyi @@ -0,0 +1,17 @@ +# Stubs for xml.etree.ElementInclude (Python 3.4) + +from typing import Union, Optional, Callable +from xml.etree.ElementTree import Element + +XINCLUDE: str +XINCLUDE_INCLUDE: str +XINCLUDE_FALLBACK: str + +class FatalIncludeError(SyntaxError): ... + +def default_loader(href: Union[str, bytes, int], parse: str, encoding: Optional[str] = ...) -> Union[str, Element]: ... + +# TODO: loader is of type default_loader ie it takes a callable that has the +# same signature as default_loader. But default_loader has a keyword argument +# Which can't be represented using Callable... +def include(elem: Element, loader: Optional[Callable[..., Union[str, Element]]] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi new file mode 100644 index 0000000..1477b32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementPath.pyi @@ -0,0 +1,33 @@ +# Stubs for xml.etree.ElementPath (Python 3.4) + +from typing import Pattern, Dict, Generator, Tuple, List, Union, TypeVar, Callable, Optional +from xml.etree.ElementTree import Element + +xpath_tokenizer_re: Pattern + +_token = Tuple[str, str] +_next = Callable[[], _token] +_callback = Callable[[_SelectorContext, List[Element]], Generator[Element, None, None]] + +def xpath_tokenizer(pattern: str, namespaces: Optional[Dict[str, str]] = ...) -> Generator[_token, None, None]: ... +def get_parent_map(context: _SelectorContext) -> Dict[Element, Element]: ... +def prepare_child(next: _next, token: _token) -> _callback: ... +def prepare_star(next: _next, token: _token) -> _callback: ... +def prepare_self(next: _next, token: _token) -> _callback: ... +def prepare_descendant(next: _next, token: _token) -> _callback: ... +def prepare_parent(next: _next, token: _token) -> _callback: ... +def prepare_predicate(next: _next, token: _token) -> _callback: ... + +ops: Dict[str, Callable[[_next, _token], _callback]] + +class _SelectorContext: + parent_map: Dict[Element, Element] + root: Element + def __init__(self, root: Element) -> None: ... + +_T = TypeVar('_T') + +def iterfind(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> List[Element]: ... +def find(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> Optional[Element]: ... +def findall(elem: Element, path: str, namespaces: Optional[Dict[str, str]] = ...) -> List[Element]: ... +def findtext(elem: Element, path: str, default: Optional[_T] = ..., namespaces: Optional[Dict[str, str]] = ...) -> Union[_T, str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi new file mode 100644 index 0000000..d5f64b6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/ElementTree.pyi @@ -0,0 +1,167 @@ +# Stubs for xml.etree.ElementTree + +from typing import Any, Callable, Dict, Generator, IO, ItemsView, Iterable, Iterator, KeysView, List, MutableSequence, Optional, overload, Sequence, Text, Tuple, TypeVar, Union +import io +import sys + +VERSION: str + +class ParseError(SyntaxError): ... + +def iselement(element: object) -> bool: ... + +_T = TypeVar('_T') + +# Type for parser inputs. Parser will accept any unicode/str/bytes and coerce, +# and this is true in py2 and py3 (even fromstringlist() in python3 can be +# called with a heterogeneous list) +_parser_input_type = Union[bytes, Text] + +# Type for individual tag/attr/ns/text values in args to most functions. +# In py2, the library accepts str or unicode everywhere and coerces +# aggressively. +# In py3, bytes is not coerced to str and so use of bytes is probably an error, +# so we exclude it. (why? the parser never produces bytes when it parses XML, +# so e.g., element.get(b'name') will always return None for parsed XML, even if +# there is a 'name' attribute.) +_str_argument_type = Union[str, Text] + +# Type for return values from individual tag/attr/text values and serialization +if sys.version_info >= (3,): + # note: in python3, everything comes out as str, yay: + _str_result_type = str + # unfortunately, tostring and tostringlist can return either bytes or str + # depending on the value of `encoding` parameter. Client code knows best: + _tostring_result_type = Any +else: + # in python2, if the tag/attribute/text wasn't decode-able as ascii, it + # comes out as a unicode string; otherwise it comes out as str. (see + # _fixtext function in the source). Client code knows best: + _str_result_type = Any + # On the bright side, tostring and tostringlist always return bytes: + _tostring_result_type = bytes + +class Element(MutableSequence[Element]): + tag: _str_result_type + attrib: Dict[_str_result_type, _str_result_type] + text: Optional[_str_result_type] + tail: Optional[_str_result_type] + def __init__(self, tag: Union[_str_argument_type, Callable[..., Element]], attrib: Dict[_str_argument_type, _str_argument_type] = ..., **extra: _str_argument_type) -> None: ... + def append(self, subelement: Element) -> None: ... + def clear(self) -> None: ... + def copy(self) -> Element: ... + def extend(self, elements: Iterable[Element]) -> None: ... + def find(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Optional[Element]: ... + def findall(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def findtext(self, path: _str_argument_type, default: Optional[_T] = ..., namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Union[_T, _str_result_type]: ... + def get(self, key: _str_argument_type, default: Optional[_T] = ...) -> Union[_str_result_type, _T]: ... + def getchildren(self) -> List[Element]: ... + def getiterator(self, tag: Optional[_str_argument_type] = ...) -> List[Element]: ... + if sys.version_info >= (3, 2): + def insert(self, index: int, subelement: Element) -> None: ... + else: + def insert(self, index: int, element: Element) -> None: ... + def items(self) -> ItemsView[_str_result_type, _str_result_type]: ... + def iter(self, tag: Optional[_str_argument_type] = ...) -> Generator[Element, None, None]: ... + def iterfind(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def itertext(self) -> Generator[_str_result_type, None, None]: ... + def keys(self) -> KeysView[_str_result_type]: ... + def makeelement(self, tag: _str_argument_type, attrib: Dict[_str_argument_type, _str_argument_type]) -> Element: ... + def remove(self, subelement: Element) -> None: ... + def set(self, key: _str_argument_type, value: _str_argument_type) -> None: ... + def __bool__(self) -> bool: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + @overload + def __getitem__(self, i: int) -> Element: ... + @overload + def __getitem__(self, s: slice) -> MutableSequence[Element]: ... + def __len__(self) -> int: ... + @overload + def __setitem__(self, i: int, o: Element) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[Element]) -> None: ... + + +def SubElement(parent: Element, tag: _str_argument_type, attrib: Dict[_str_argument_type, _str_argument_type] = ..., **extra: _str_argument_type) -> Element: ... +def Comment(text: Optional[_str_argument_type] = ...) -> Element: ... +def ProcessingInstruction(target: _str_argument_type, text: Optional[_str_argument_type] = ...) -> Element: ... + +PI: Callable[..., Element] + +class QName: + text: str + def __init__(self, text_or_uri: _str_argument_type, tag: Optional[_str_argument_type] = ...) -> None: ... + + +_file_or_filename = Union[str, bytes, int, IO[Any]] + +class ElementTree: + def __init__(self, element: Optional[Element] = ..., file: Optional[_file_or_filename] = ...) -> None: ... + def getroot(self) -> Element: ... + def parse(self, source: _file_or_filename, parser: Optional[XMLParser] = ...) -> Element: ... + def iter(self, tag: Optional[_str_argument_type] = ...) -> Generator[Element, None, None]: ... + def getiterator(self, tag: Optional[_str_argument_type] = ...) -> List[Element]: ... + def find(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Optional[Element]: ... + def findtext(self, path: _str_argument_type, default: Optional[_T] = ..., namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> Union[_T, _str_result_type]: ... + def findall(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + def iterfind(self, path: _str_argument_type, namespaces: Optional[Dict[_str_argument_type, _str_argument_type]] = ...) -> List[Element]: ... + if sys.version_info >= (3, 4): + def write(self, file_or_filename: _file_or_filename, encoding: Optional[str] = ..., xml_declaration: Optional[bool] = ..., default_namespace: Optional[_str_argument_type] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> None: ... + else: + def write(self, file_or_filename: _file_or_filename, encoding: Optional[str] = ..., xml_declaration: Optional[bool] = ..., default_namespace: Optional[_str_argument_type] = ..., method: Optional[str] = ...) -> None: ... + def write_c14n(self, file: _file_or_filename) -> None: ... + +def register_namespace(prefix: _str_argument_type, uri: _str_argument_type) -> None: ... +if sys.version_info >= (3, 4): + def tostring(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> _tostring_result_type: ... + def tostringlist(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ..., *, short_empty_elements: bool = ...) -> List[_tostring_result_type]: ... +else: + def tostring(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ...) -> _tostring_result_type: ... + def tostringlist(element: Element, encoding: Optional[str] = ..., method: Optional[str] = ...) -> List[_tostring_result_type]: ... +def dump(elem: Element) -> None: ... +def parse(source: _file_or_filename, parser: Optional[XMLParser] = ...) -> ElementTree: ... +def iterparse(source: _file_or_filename, events: Optional[Sequence[str]] = ..., parser: Optional[XMLParser] = ...) -> Iterator[Tuple[str, Any]]: ... + +if sys.version_info >= (3, 4): + class XMLPullParser: + def __init__(self, events: Optional[Sequence[str]] = ..., *, _parser: Optional[XMLParser] = ...) -> None: ... + def feed(self, data: bytes) -> None: ... + def close(self) -> None: ... + def read_events(self) -> Iterator[Tuple[str, Element]]: ... + +def XML(text: _parser_input_type, parser: Optional[XMLParser] = ...) -> Element: ... +def XMLID(text: _parser_input_type, parser: Optional[XMLParser] = ...) -> Tuple[Element, Dict[_str_result_type, Element]]: ... + +# This is aliased to XML in the source. +fromstring = XML + +def fromstringlist(sequence: Sequence[_parser_input_type], parser: Optional[XMLParser] = ...) -> Element: ... + +# This type is both not precise enough and too precise. The TreeBuilder +# requires the elementfactory to accept tag and attrs in its args and produce +# some kind of object that has .text and .tail properties. +# I've chosen to constrain the ElementFactory to always produce an Element +# because that is how almost everyone will use it. +# Unfortunately, the type of the factory arguments is dependent on how +# TreeBuilder is called by client code (they could pass strs, bytes or whatever); +# but we don't want to use a too-broad type, or it would be too hard to write +# elementfactories. +_ElementFactory = Callable[[Any, Dict[Any, Any]], Element] + +class TreeBuilder: + def __init__(self, element_factory: Optional[_ElementFactory] = ...) -> None: ... + def close(self) -> Element: ... + def data(self, data: _parser_input_type) -> None: ... + def start(self, tag: _parser_input_type, attrs: Dict[_parser_input_type, _parser_input_type]) -> Element: ... + def end(self, tag: _parser_input_type) -> Element: ... + +class XMLParser: + parser: Any + target: TreeBuilder + # TODO-what is entity used for??? + entity: Any + version: str + def __init__(self, html: int = ..., target: Optional[TreeBuilder] = ..., encoding: Optional[str] = ...) -> None: ... + def doctype(self, name: str, pubid: str, system: str) -> None: ... + def close(self) -> Element: ... + def feed(self, data: _parser_input_type) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi new file mode 100644 index 0000000..c384968 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/etree/cElementTree.pyi @@ -0,0 +1,3 @@ +# Stubs for xml.etree.cElementTree (Python 3.4) + +from xml.etree.ElementTree import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi new file mode 100644 index 0000000..cac0862 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/__init__.pyi @@ -0,0 +1 @@ +import xml.parsers.expat as expat diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi new file mode 100644 index 0000000..73f3758 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/__init__.pyi @@ -0,0 +1 @@ +from pyexpat import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi new file mode 100644 index 0000000..e22d769 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/errors.pyi @@ -0,0 +1 @@ +from pyexpat.errors import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi new file mode 100644 index 0000000..d8f44b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/parsers/expat/model.pyi @@ -0,0 +1 @@ +from pyexpat.model import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi new file mode 100644 index 0000000..6edf12d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/__init__.pyi @@ -0,0 +1,34 @@ +from typing import Any, List, NoReturn, Optional, Text, Union, IO + +import xml.sax +from xml.sax.xmlreader import InputSource, Locator +from xml.sax.handler import ContentHandler, ErrorHandler + +class SAXException(Exception): + def __init__(self, msg: str, exception: Optional[Exception] = ...) -> None: ... + def getMessage(self) -> str: ... + def getException(self) -> Exception: ... + def __getitem__(self, ix: Any) -> NoReturn: ... + +class SAXParseException(SAXException): + def __init__(self, msg: str, exception: Exception, locator: Locator) -> None: ... + def getColumnNumber(self) -> int: ... + def getLineNumber(self) -> int: ... + def getPublicId(self): ... + def getSystemId(self): ... + +class SAXNotRecognizedException(SAXException): ... +class SAXNotSupportedException(SAXException): ... +class SAXReaderNotAvailable(SAXNotSupportedException): ... + +default_parser_list: List[str] + +def make_parser(parser_list: List[str] = ...) -> xml.sax.xmlreader.XMLReader: ... + +def parse(source: Union[str, IO[str]], handler: xml.sax.handler.ContentHandler, + errorHandler: xml.sax.handler.ErrorHandler = ...) -> None: ... + +def parseString(string: Union[bytes, Text], handler: xml.sax.handler.ContentHandler, + errorHandler: Optional[xml.sax.handler.ErrorHandler] = ...) -> None: ... + +def _create_parser(parser_name: str) -> xml.sax.xmlreader.XMLReader: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi new file mode 100644 index 0000000..3a51933 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/handler.pyi @@ -0,0 +1,46 @@ +from typing import Any + +version: Any + +class ErrorHandler: + def error(self, exception): ... + def fatalError(self, exception): ... + def warning(self, exception): ... + +class ContentHandler: + def __init__(self) -> None: ... + def setDocumentLocator(self, locator): ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, whitespace): ... + def processingInstruction(self, target, data): ... + def skippedEntity(self, name): ... + +class DTDHandler: + def notationDecl(self, name, publicId, systemId): ... + def unparsedEntityDecl(self, name, publicId, systemId, ndata): ... + +class EntityResolver: + def resolveEntity(self, publicId, systemId): ... + +feature_namespaces: Any +feature_namespace_prefixes: Any +feature_string_interning: Any +feature_validation: Any +feature_external_ges: Any +feature_external_pes: Any +all_features: Any +property_lexical_handler: Any +property_declaration_handler: Any +property_dom_node: Any +property_xml_string: Any +property_encoding: Any +property_interning_dict: Any +all_properties: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi new file mode 100644 index 0000000..342d6ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/saxutils.pyi @@ -0,0 +1,58 @@ +import sys +from typing import Mapping, Text + +from xml.sax import handler +from xml.sax import xmlreader + +def escape(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... +def unescape(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... +def quoteattr(data: Text, entities: Mapping[Text, Text] = ...) -> Text: ... + +class XMLGenerator(handler.ContentHandler): + if sys.version_info >= (3, 0): + def __init__(self, out=..., encoding=..., short_empty_elements: bool = ...) -> None: ... + else: + def __init__(self, out=..., encoding=...) -> None: ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, content): ... + def processingInstruction(self, target, data): ... + +class XMLFilterBase(xmlreader.XMLReader): + def __init__(self, parent=...) -> None: ... + def error(self, exception): ... + def fatalError(self, exception): ... + def warning(self, exception): ... + def setDocumentLocator(self, locator): ... + def startDocument(self): ... + def endDocument(self): ... + def startPrefixMapping(self, prefix, uri): ... + def endPrefixMapping(self, prefix): ... + def startElement(self, name, attrs): ... + def endElement(self, name): ... + def startElementNS(self, name, qname, attrs): ... + def endElementNS(self, name, qname): ... + def characters(self, content): ... + def ignorableWhitespace(self, chars): ... + def processingInstruction(self, target, data): ... + def skippedEntity(self, name): ... + def notationDecl(self, name, publicId, systemId): ... + def unparsedEntityDecl(self, name, publicId, systemId, ndata): ... + def resolveEntity(self, publicId, systemId): ... + def parse(self, source): ... + def setLocale(self, locale): ... + def getFeature(self, name): ... + def setFeature(self, name, state): ... + def getProperty(self, name): ... + def setProperty(self, name, value): ... + def getParent(self): ... + def setParent(self, parent): ... + +def prepare_input_source(source, base=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi new file mode 100644 index 0000000..fbc1ac1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/xml/sax/xmlreader.pyi @@ -0,0 +1,71 @@ +class XMLReader: + def __init__(self) -> None: ... + def parse(self, source): ... + def getContentHandler(self): ... + def setContentHandler(self, handler): ... + def getDTDHandler(self): ... + def setDTDHandler(self, handler): ... + def getEntityResolver(self): ... + def setEntityResolver(self, resolver): ... + def getErrorHandler(self): ... + def setErrorHandler(self, handler): ... + def setLocale(self, locale): ... + def getFeature(self, name): ... + def setFeature(self, name, state): ... + def getProperty(self, name): ... + def setProperty(self, name, value): ... + +class IncrementalParser(XMLReader): + def __init__(self, bufsize=...) -> None: ... + def parse(self, source): ... + def feed(self, data): ... + def prepareParser(self, source): ... + def close(self): ... + def reset(self): ... + +class Locator: + def getColumnNumber(self): ... + def getLineNumber(self): ... + def getPublicId(self): ... + def getSystemId(self): ... + +class InputSource: + def __init__(self, system_id=...) -> None: ... + def setPublicId(self, public_id): ... + def getPublicId(self): ... + def setSystemId(self, system_id): ... + def getSystemId(self): ... + def setEncoding(self, encoding): ... + def getEncoding(self): ... + def setByteStream(self, bytefile): ... + def getByteStream(self): ... + def setCharacterStream(self, charfile): ... + def getCharacterStream(self): ... + +class AttributesImpl: + def __init__(self, attrs) -> None: ... + def getLength(self): ... + def getType(self, name): ... + def getValue(self, name): ... + def getValueByQName(self, name): ... + def getNameByQName(self, name): ... + def getQNameByName(self, name): ... + def getNames(self): ... + def getQNames(self): ... + def __len__(self): ... + def __getitem__(self, name): ... + def keys(self): ... + def has_key(self, name): ... + def __contains__(self, name): ... + def get(self, name, alternative=...): ... + def copy(self): ... + def items(self): ... + def values(self): ... + +class AttributesNSImpl(AttributesImpl): + def __init__(self, attrs, qnames) -> None: ... + def getValueByQName(self, name): ... + def getNameByQName(self, name): ... + def getQNameByName(self, name): ... + def getQNames(self): ... + def copy(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi new file mode 100644 index 0000000..a06d3fd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipfile.pyi @@ -0,0 +1,105 @@ +# Stubs for zipfile + +from typing import Callable, Dict, IO, Iterable, List, Optional, Text, Tuple, Type, Union +from types import TracebackType +import os +import sys + + +if sys.version_info >= (3, 6): + _Path = Union[os.PathLike[Text], Text] +else: + _Path = Text +_SZI = Union[Text, ZipInfo] +_DT = Tuple[int, int, int, int, int, int] + + +if sys.version_info >= (3,): + class BadZipFile(Exception): ... + BadZipfile = BadZipFile +else: + class BadZipfile(Exception): ... +error = BadZipfile + +class LargeZipFile(Exception): ... + +class ZipFile: + debug: int + comment: bytes + filelist: List[ZipInfo] + fp: IO[bytes] + NameToInfo: Dict[Text, ZipInfo] + def __init__(self, file: Union[_Path, IO[bytes]], mode: Text = ..., compression: int = ..., + allowZip64: bool = ...) -> None: ... + def __enter__(self) -> ZipFile: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def close(self) -> None: ... + def getinfo(self, name: Text) -> ZipInfo: ... + def infolist(self) -> List[ZipInfo]: ... + def namelist(self) -> List[Text]: ... + def open(self, name: _SZI, mode: Text = ..., + pwd: Optional[bytes] = ...) -> IO[bytes]: ... + def extract(self, member: _SZI, path: Optional[_SZI] = ..., + pwd: bytes = ...) -> str: ... + def extractall(self, path: Optional[_Path] = ..., + members: Optional[Iterable[Text]] = ..., + pwd: Optional[bytes] = ...) -> None: ... + def printdir(self) -> None: ... + def setpassword(self, pwd: bytes) -> None: ... + def read(self, name: _SZI, pwd: Optional[bytes] = ...) -> bytes: ... + def testzip(self) -> Optional[str]: ... + def write(self, filename: _Path, arcname: Optional[_Path] = ..., + compress_type: Optional[int] = ...) -> None: ... + if sys.version_info >= (3,): + def writestr(self, zinfo_or_arcname: _SZI, data: Union[bytes, str], + compress_type: Optional[int] = ...) -> None: ... + else: + def writestr(self, + zinfo_or_arcname: _SZI, bytes: bytes, + compress_type: Optional[int] = ...) -> None: ... + +class PyZipFile(ZipFile): + if sys.version_info >= (3,): + def __init__(self, file: Union[str, IO[bytes]], mode: str = ..., + compression: int = ..., allowZip64: bool = ..., + opimize: int = ...) -> None: ... + def writepy(self, pathname: str, basename: str = ..., + filterfunc: Optional[Callable[[str], bool]] = ...) -> None: ... + else: + def writepy(self, + pathname: Text, basename: Text = ...) -> None: ... + +class ZipInfo: + filename: Text + date_time: _DT + compress_type: int + comment: bytes + extra: bytes + create_system: int + create_version: int + extract_version: int + reserved: int + flag_bits: int + volume: int + internal_attr: int + external_attr: int + header_offset: int + CRC: int + compress_size: int + file_size: int + def __init__(self, filename: Optional[Text] = ..., + date_time: Optional[_DT] = ...) -> None: ... + if sys.version_info >= (3, 6): + def is_dir(self) -> bool: ... + def FileHeader(self, zip64: Optional[bool] = ...) -> bytes: ... + + +def is_zipfile(filename: Union[_Path, IO[bytes]]) -> bool: ... + +ZIP_STORED: int +ZIP_DEFLATED: int +if sys.version_info >= (3, 3): + ZIP_BZIP2: int + ZIP_LZMA: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi new file mode 100644 index 0000000..c22531a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zipimport.pyi @@ -0,0 +1,18 @@ +"""Stub file for the 'zipimport' module.""" + +from typing import Optional +from types import CodeType, ModuleType + +class ZipImportError(ImportError): ... + +class zipimporter(object): + archive: str + prefix: str + def __init__(self, archivepath: str) -> None: ... + def find_module(self, fullname: str, path: str = ...) -> Optional[zipimporter]: ... + def get_code(self, fullname: str) -> CodeType: ... + def get_data(self, pathname: str) -> str: ... + def get_filename(self, fullname: str) -> str: ... + def get_source(self, fullname: str) -> Optional[str]: ... + def is_package(self, fullname: str) -> bool: ... + def load_module(self, fullname: str) -> ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi new file mode 100644 index 0000000..4ea5372 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/2and3/zlib.pyi @@ -0,0 +1,55 @@ +# Stubs for zlib +import sys + +DEFLATED: int +DEF_MEM_LEVEL: int +MAX_WBITS: int +ZLIB_VERSION: str +Z_BEST_COMPRESSION: int +Z_BEST_SPEED: int +Z_DEFAULT_COMPRESSION: int +Z_DEFAULT_STRATEGY: int +Z_FILTERED: int +Z_FINISH: int +Z_FULL_FLUSH: int +Z_HUFFMAN_ONLY: int +Z_NO_FLUSH: int +Z_SYNC_FLUSH: int +if sys.version_info >= (3,): + DEF_BUF_SIZE: int + ZLIB_RUNTIME_VERSION: str + +class error(Exception): ... + + +class _Compress: + def compress(self, data: bytes) -> bytes: ... + def flush(self, mode: int = ...) -> bytes: ... + def copy(self) -> _Compress: ... + + +class _Decompress: + unused_data: bytes + unconsumed_tail: bytes + if sys.version_info >= (3,): + eof: bool + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + def flush(self, length: int = ...) -> bytes: ... + def copy(self) -> _Decompress: ... + + +def adler32(data: bytes, value: int = ...) -> int: ... +def compress(data: bytes, level: int = ...) -> bytes: ... +if sys.version_info >= (3,): + def compressobj(level: int = ..., method: int = ..., wbits: int = ..., + memLevel: int = ..., strategy: int = ..., + zdict: bytes = ...) -> _Compress: ... +else: + def compressobj(level: int = ..., method: int = ..., wbits: int = ..., + memlevel: int = ..., strategy: int = ...) -> _Compress: ... +def crc32(data: bytes, value: int = ...) -> int: ... +def decompress(data: bytes, wbits: int = ..., bufsize: int = ...) -> bytes: ... +if sys.version_info >= (3,): + def decompressobj(wbits: int = ..., zdict: bytes = ...) -> _Decompress: ... +else: + def decompressobj(wbits: int = ...) -> _Decompress: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi new file mode 100644 index 0000000..b90b755 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.5/zipapp.pyi @@ -0,0 +1,16 @@ +# Stubs for zipapp (Python 3.5+) + +from pathlib import Path +import sys +from typing import BinaryIO, Callable, Optional, Union + +_Path = Union[str, Path, BinaryIO] + +class ZipAppError(Exception): ... + +if sys.version_info >= (3, 7): + def create_archive(source: _Path, target: Optional[_Path] = ..., interpreter: Optional[str] = ..., main: Optional[str] = ..., + filter: Optional[Callable[[Path], bool]] = ..., compressed: bool = ...) -> None: ... +else: + def create_archive(source: _Path, target: Optional[_Path] = ..., interpreter: Optional[str] = ..., main: Optional[str] = ...) -> None: ... +def get_interpreter(archive: _Path) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi new file mode 100644 index 0000000..5069dba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.6/secrets.pyi @@ -0,0 +1,14 @@ +# Stubs for secrets (Python 3.6) + +from typing import Optional, Sequence, TypeVar +from hmac import compare_digest as compare_digest +from random import SystemRandom as SystemRandom + +_T = TypeVar('_T') + +def randbelow(exclusive_upper_bound: int) -> int: ... +def randbits(k: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +def token_bytes(nbytes: Optional[int] = ...) -> bytes: ... +def token_hex(nbytes: Optional[int] = ...) -> str: ... +def token_urlsafe(nbytes: Optional[int] = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi new file mode 100644 index 0000000..ab2ae9e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/contextvars.pyi @@ -0,0 +1,30 @@ +from typing import Any, Callable, ClassVar, Generic, Iterator, Mapping, TypeVar, Union + +_T = TypeVar('_T') + +class ContextVar(Generic[_T]): + def __init__(self, name: str, *, default: _T = ...) -> None: ... + @property + def name(self) -> str: ... + def get(self, default: _T = ...) -> _T: ... + def set(self, value: _T) -> Token[_T]: ... + def reset(self, token: Token[_T]) -> None: ... + +class Token(Generic[_T]): + @property + def var(self) -> ContextVar[_T]: ... + @property + def old_value(self) -> Any: ... # returns either _T or MISSING, but that's hard to express + MISSING: ClassVar[object] + +def copy_context() -> Context: ... + +# It doesn't make sense to make this generic, because for most Contexts each ContextVar will have +# a different value. +class Context(Mapping[ContextVar[Any], Any]): + def __init__(self) -> None: ... + def run(self, callable: Callable[..., _T], *args: Any, **kwargs: Any) -> _T: ... + def copy(self) -> Context: ... + def __getitem__(self, key: ContextVar[Any]) -> Any: ... + def __iter__(self) -> Iterator[ContextVar[Any]]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi new file mode 100644 index 0000000..f8bcd52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3.7/dataclasses.pyi @@ -0,0 +1,71 @@ +from typing import overload, Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Tuple, Type, TypeVar, Union + + +_T = TypeVar('_T') + +class _MISSING_TYPE: ... +MISSING: _MISSING_TYPE + +@overload +def asdict(obj: Any) -> Dict[str, Any]: ... +@overload +def asdict(obj: Any, *, dict_factory: Callable[[List[Tuple[str, Any]]], _T]) -> _T: ... + +@overload +def astuple(obj: Any) -> Tuple[Any, ...]: ... +@overload +def astuple(obj: Any, *, tuple_factory: Callable[[List[Any]], _T]) -> _T: ... + + +@overload +def dataclass(_cls: Type[_T]) -> Type[_T]: ... + +@overload +def dataclass(*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., + unsafe_hash: bool = ..., frozen: bool = ...) -> Callable[[Type[_T]], Type[_T]]: ... + + +class Field(Generic[_T]): + name: str + type: Type[_T] + default: _T + default_factory: Callable[[], _T] + repr: bool + hash: Optional[bool] + init: bool + compare: bool + metadata: Optional[Mapping[str, Any]] + + +# NOTE: Actual return type is 'Field[_T]', but we want to help type checkers +# to understand the magic that happens at runtime. +@overload # `default` and `default_factory` are optional and mutually exclusive. +def field(*, default: _T, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, default_factory: Callable[[], _T], + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> Any: ... + + +def fields(class_or_instance: Any) -> Tuple[Field[Any], ...]: ... + +def is_dataclass(obj: Any) -> bool: ... + +class FrozenInstanceError(AttributeError): ... + +class InitVar(Generic[_T]): ... + +def make_dataclass(cls_name: str, fields: Iterable[Union[str, Tuple[str, type], Tuple[str, type, Field[Any]]]], *, + bases: Tuple[type, ...] = ..., namespace: Optional[Dict[str, Any]] = ..., + init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., hash: bool = ..., + frozen: bool = ...): ... + +def replace(obj: _T, **changes: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_ast.pyi new file mode 100644 index 0000000..9f4284e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_ast.pyi @@ -0,0 +1,409 @@ +import sys +import typing +from typing import Any, Optional, ClassVar + +PyCF_ONLY_AST: int + +_identifier = str + +class AST: + _attributes: ClassVar[typing.Tuple[str, ...]] + _fields: ClassVar[typing.Tuple[str, ...]] + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + # TODO: Not all nodes have all of the following attributes + lineno: int + col_offset: int + if sys.version_info >= (3, 8): + end_lineno: Optional[int] + end_col_offset: Optional[int] + type_comment: Optional[str] + +class mod(AST): + ... + +if sys.version_info >= (3, 8): + class type_ignore(AST): ... + + class TypeIgnore(type_ignore): ... + + class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Module(mod): + body: typing.List[stmt] + if sys.version_info >= (3, 7): + docstring: Optional[str] + if sys.version_info >= (3, 8): + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): ... + +class FunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class AsyncFunctionDef(stmt): + name: _identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class ClassDef(stmt): + name: _identifier + bases: typing.List[expr] + keywords: typing.List[keyword] + body: typing.List[stmt] + decorator_list: typing.List[expr] + if sys.version_info >= (3, 7): + docstring: Optional[str] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +if sys.version_info >= (3, 6): + class AnnAssign(stmt): + target: expr + annotation: expr + value: Optional[expr] + simple: int + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class AsyncFor(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + +class AsyncWith(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + +class Raise(stmt): + exc: Optional[expr] + cause: Optional[expr] + +class Try(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[_identifier] + names: typing.List[alias] + level: int + +class Global(stmt): + names: typing.List[_identifier] + +class Nonlocal(stmt): + names: typing.List[_identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + + +class expr(AST): ... + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Await(expr): + value: expr + +class Yield(expr): + value: Optional[expr] + +class YieldFrom(expr): + value: expr + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + +class Num(expr): # Deprecated in 3.8; use Constant + n: complex + +class Str(expr): # Deprecated in 3.8; use Constant + s: str + +if sys.version_info >= (3, 6): + class FormattedValue(expr): + value: expr + conversion: Optional[int] + format_spec: Optional[expr] + + class JoinedStr(expr): + values: typing.List[expr] + +class Bytes(expr): # Deprecated in 3.8; use Constant + s: bytes + +class NameConstant(expr): + value: Any + +if sys.version_info >= (3, 8): + class Constant(expr): + value: Any # None, str, bytes, bool, int, float, complex, Ellipsis + kind: Optional[str] + # Aliases for value, for backwards compatibility + s: Any + n: complex + + class NamedExpr(expr): + target: expr + value: expr + +class Ellipsis(expr): ... + +class Attribute(expr): + value: expr + attr: _identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Starred(expr): + value: expr + ctx: expr_context + +class Name(expr): + id: _identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class MatMult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + if sys.version_info >= (3, 6): + is_async: int + + +class excepthandler(AST): + ... + +class ExceptHandler(excepthandler): + type: Optional[expr] + name: Optional[_identifier] + body: typing.List[stmt] + + +class arguments(AST): + args: typing.List[arg] + vararg: Optional[arg] + kwonlyargs: typing.List[arg] + kw_defaults: typing.List[expr] + kwarg: Optional[arg] + defaults: typing.List[expr] + +class arg(AST): + arg: _identifier + annotation: Optional[expr] + +class keyword(AST): + arg: Optional[_identifier] + value: expr + +class alias(AST): + name: _identifier + asname: Optional[_identifier] + +class withitem(AST): + context_expr: expr + optional_vars: Optional[expr] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_compression.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_compression.pyi new file mode 100644 index 0000000..bf474e6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_compression.pyi @@ -0,0 +1,16 @@ +from typing import Any +import io + +BUFFER_SIZE: Any + +class BaseStream(io.BufferedIOBase): ... + +class DecompressReader(io.RawIOBase): + def readable(self): ... + def __init__(self, fp, decomp_factory, trailing_error=..., **decomp_args): ... + def close(self): ... + def seekable(self): ... + def readinto(self, b): ... + def read(self, size: int = ...): ... + def seek(self, offset, whence=...): ... + def tell(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_curses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_curses.pyi new file mode 100644 index 0000000..16c6fd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_curses.pyi @@ -0,0 +1,447 @@ +from typing import Any, BinaryIO, IO, Optional, Tuple, Union, overload + +_chtype = Union[str, bytes, int] + +ALL_MOUSE_EVENTS: int +A_ALTCHARSET: int +A_ATTRIBUTES: int +A_BLINK: int +A_BOLD: int +A_CHARTEXT: int +A_COLOR: int +A_DIM: int +A_HORIZONTAL: int +A_INVIS: int +A_LEFT: int +A_LOW: int +A_NORMAL: int +A_PROTECT: int +A_REVERSE: int +A_RIGHT: int +A_STANDOUT: int +A_TOP: int +A_UNDERLINE: int +A_VERTICAL: int +BUTTON1_CLICKED: int +BUTTON1_DOUBLE_CLICKED: int +BUTTON1_PRESSED: int +BUTTON1_RELEASED: int +BUTTON1_TRIPLE_CLICKED: int +BUTTON2_CLICKED: int +BUTTON2_DOUBLE_CLICKED: int +BUTTON2_PRESSED: int +BUTTON2_RELEASED: int +BUTTON2_TRIPLE_CLICKED: int +BUTTON3_CLICKED: int +BUTTON3_DOUBLE_CLICKED: int +BUTTON3_PRESSED: int +BUTTON3_RELEASED: int +BUTTON3_TRIPLE_CLICKED: int +BUTTON4_CLICKED: int +BUTTON4_DOUBLE_CLICKED: int +BUTTON4_PRESSED: int +BUTTON4_RELEASED: int +BUTTON4_TRIPLE_CLICKED: int +BUTTON_ALT: int +BUTTON_CTRL: int +BUTTON_SHIFT: int +COLOR_BLACK: int +COLOR_BLUE: int +COLOR_CYAN: int +COLOR_GREEN: int +COLOR_MAGENTA: int +COLOR_RED: int +COLOR_WHITE: int +COLOR_YELLOW: int +ERR: int +KEY_A1: int +KEY_A3: int +KEY_B2: int +KEY_BACKSPACE: int +KEY_BEG: int +KEY_BREAK: int +KEY_BTAB: int +KEY_C1: int +KEY_C3: int +KEY_CANCEL: int +KEY_CATAB: int +KEY_CLEAR: int +KEY_CLOSE: int +KEY_COMMAND: int +KEY_COPY: int +KEY_CREATE: int +KEY_CTAB: int +KEY_DC: int +KEY_DL: int +KEY_DOWN: int +KEY_EIC: int +KEY_END: int +KEY_ENTER: int +KEY_EOL: int +KEY_EOS: int +KEY_EXIT: int +KEY_F0: int +KEY_F1: int +KEY_F10: int +KEY_F11: int +KEY_F12: int +KEY_F13: int +KEY_F14: int +KEY_F15: int +KEY_F16: int +KEY_F17: int +KEY_F18: int +KEY_F19: int +KEY_F2: int +KEY_F20: int +KEY_F21: int +KEY_F22: int +KEY_F23: int +KEY_F24: int +KEY_F25: int +KEY_F26: int +KEY_F27: int +KEY_F28: int +KEY_F29: int +KEY_F3: int +KEY_F30: int +KEY_F31: int +KEY_F32: int +KEY_F33: int +KEY_F34: int +KEY_F35: int +KEY_F36: int +KEY_F37: int +KEY_F38: int +KEY_F39: int +KEY_F4: int +KEY_F40: int +KEY_F41: int +KEY_F42: int +KEY_F43: int +KEY_F44: int +KEY_F45: int +KEY_F46: int +KEY_F47: int +KEY_F48: int +KEY_F49: int +KEY_F5: int +KEY_F50: int +KEY_F51: int +KEY_F52: int +KEY_F53: int +KEY_F54: int +KEY_F55: int +KEY_F56: int +KEY_F57: int +KEY_F58: int +KEY_F59: int +KEY_F6: int +KEY_F60: int +KEY_F61: int +KEY_F62: int +KEY_F63: int +KEY_F7: int +KEY_F8: int +KEY_F9: int +KEY_FIND: int +KEY_HELP: int +KEY_HOME: int +KEY_IC: int +KEY_IL: int +KEY_LEFT: int +KEY_LL: int +KEY_MARK: int +KEY_MAX: int +KEY_MESSAGE: int +KEY_MIN: int +KEY_MOUSE: int +KEY_MOVE: int +KEY_NEXT: int +KEY_NPAGE: int +KEY_OPEN: int +KEY_OPTIONS: int +KEY_PPAGE: int +KEY_PREVIOUS: int +KEY_PRINT: int +KEY_REDO: int +KEY_REFERENCE: int +KEY_REFRESH: int +KEY_REPLACE: int +KEY_RESET: int +KEY_RESIZE: int +KEY_RESTART: int +KEY_RESUME: int +KEY_RIGHT: int +KEY_SAVE: int +KEY_SBEG: int +KEY_SCANCEL: int +KEY_SCOMMAND: int +KEY_SCOPY: int +KEY_SCREATE: int +KEY_SDC: int +KEY_SDL: int +KEY_SELECT: int +KEY_SEND: int +KEY_SEOL: int +KEY_SEXIT: int +KEY_SF: int +KEY_SFIND: int +KEY_SHELP: int +KEY_SHOME: int +KEY_SIC: int +KEY_SLEFT: int +KEY_SMESSAGE: int +KEY_SMOVE: int +KEY_SNEXT: int +KEY_SOPTIONS: int +KEY_SPREVIOUS: int +KEY_SPRINT: int +KEY_SR: int +KEY_SREDO: int +KEY_SREPLACE: int +KEY_SRESET: int +KEY_SRIGHT: int +KEY_SRSUME: int +KEY_SSAVE: int +KEY_SSUSPEND: int +KEY_STAB: int +KEY_SUNDO: int +KEY_SUSPEND: int +KEY_UNDO: int +KEY_UP: int +OK: int +REPORT_MOUSE_POSITION: int +_C_API: Any +version: bytes + +def baudrate() -> int: ... +def beep() -> None: ... +def can_change_color() -> bool: ... +def cbreak(flag: bool = ...) -> None: ... +def color_content(color_number: int) -> Tuple[int, int, int]: ... +def color_pair(color_number: int) -> int: ... +def curs_set(visibility: int) -> int: ... +def def_prog_mode() -> None: ... +def def_shell_mode() -> None: ... +def delay_output(ms: int) -> None: ... +def doupdate() -> None: ... +def echo(flag: bool = ...) -> None: ... +def endwin() -> None: ... +def erasechar() -> bytes: ... +def filter() -> None: ... +def flash() -> None: ... +def flushinp() -> None: ... +def getmouse() -> Tuple[int, int, int, int, int]: ... +def getsyx() -> Tuple[int, int]: ... +def getwin(f: BinaryIO) -> _CursesWindow: ... +def halfdelay(tenths: int) -> None: ... +def has_colors() -> bool: ... +def has_ic() -> bool: ... +def has_il() -> bool: ... +def has_key(ch: int) -> bool: ... +def init_color(color_number: int, r: int, g: int, b: int) -> None: ... +def init_pair(pair_number: int, fg: int, bg: int) -> None: ... +def initscr() -> _CursesWindow: ... +def intrflush(ch: bool) -> None: ... +def is_term_resized(nlines: int, ncols: int) -> bool: ... +def isendwin() -> bool: ... +def keyname(k: int) -> bytes: ... +def killchar() -> bytes: ... +def longname() -> bytes: ... +def meta(yes: bool) -> None: ... +def mouseinterval(interval: int) -> None: ... +def mousemask(mousemask: int) -> Tuple[int, int]: ... +def napms(ms: int) -> int: ... +def newpad(nlines: int, ncols: int) -> _CursesWindow: ... +def newwin(nlines: int, ncols: int, begin_y: int = ..., begin_x: int = ...) -> _CursesWindow: ... +def nl(flag: bool = ...) -> None: ... +def nocbreak() -> None: ... +def noecho() -> None: ... +def nonl() -> None: ... +def noqiflush() -> None: ... +def noraw() -> None: ... +def pair_content(pair_number: int) -> Tuple[int, int]: ... +def pair_number(attr: int) -> int: ... +def putp(string: bytes) -> None: ... +def qiflush(flag: bool = ...) -> None: ... +def raw(flag: bool = ...) -> None: ... +def reset_prog_mode() -> None: ... +def reset_shell_mode() -> None: ... +def resetty() -> None: ... +def resize_term(nlines: int, ncols: int) -> None: ... +def resizeterm(nlines: int, ncols: int) -> None: ... +def savetty() -> None: ... +def setsyx(y: int, x: int) -> None: ... +def setupterm(termstr: str = ..., fd: int = ...) -> None: ... +def start_color() -> None: ... +def termattrs() -> int: ... +def termname() -> bytes: ... +def tigetflag(capname: str) -> int: ... +def tigetnum(capname: str) -> int: ... +def tigetstr(capname: str) -> bytes: ... +def tparm(fmt: bytes, i1: int = ..., i2: int = ..., i3: int = ..., i4: int = ..., i5: int = ..., i6: int = ..., i7: int = ..., i8: int = ..., i9: int = ...) -> bytes: ... +def typeahead(fd: int) -> None: ... +def unctrl(ch: _chtype) -> bytes: ... +def unget_wch(ch: _chtype) -> None: ... +def ungetch(ch: _chtype) -> None: ... +def ungetmouse(id: int, x: int, y: int, z: int, bstate: int) -> None: ... +def update_lines_cols() -> int: ... +def use_default_colors() -> None: ... +def use_env(flag: bool) -> None: ... + +class error(Exception): ... + +class _CursesWindow: + encoding: str + @overload + def addch(self, ch: _chtype, attr: int = ...) -> None: ... + @overload + def addch(self, y: int, x: int, ch: _chtype, attr: int = ...) -> None: ... + @overload + def addnstr(self, str: str, n: int, attr: int = ...) -> None: ... + @overload + def addnstr(self, y: int, x: int, str: str, n: int, attr: int = ...) -> None: ... + @overload + def addstr(self, str: str, attr: int = ...) -> None: ... + @overload + def addstr(self, y: int, x: int, str: str, attr: int = ...) -> None: ... + def attroff(self, attr: int) -> None: ... + def attron(self, attr: int) -> None: ... + def attrset(self, attr: int) -> None: ... + def bkgd(self, ch: _chtype, attr: int = ...) -> None: ... + def bkgset(self, ch: _chtype, attr: int = ...) -> None: ... + def border(self, ls: _chtype = ..., rs: _chtype = ..., ts: _chtype = ..., bs: _chtype = ..., tl: _chtype = ..., tr: _chtype = ..., bl: _chtype = ..., br: _chtype = ...) -> None: ... + @overload + def box(self) -> None: ... + @overload + def box(self, vertch: _chtype = ..., horch: _chtype = ...) -> None: ... + @overload + def chgat(self, attr: int) -> None: ... + @overload + def chgat(self, num: int, attr: int) -> None: ... + @overload + def chgat(self, y: int, x: int, attr: int) -> None: ... + @overload + def chgat(self, y: int, x: int, num: int, attr: int) -> None: ... + def clear(self) -> None: ... + def clearok(self, yes: int) -> None: ... + def clrtobot(self) -> None: ... + def clrtoeol(self) -> None: ... + def cursyncup(self) -> None: ... + @overload + def delch(self) -> None: ... + @overload + def delch(self, y: int, x: int) -> None: ... + def deleteln(self) -> None: ... + @overload + def derwin(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def derwin(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + def echochar(self, ch: _chtype, attr: int = ...) -> None: ... + def enclose(self, y: int, x: int) -> bool: ... + def erase(self) -> None: ... + def getbegyx(self) -> Tuple[int, int]: ... + def getbkgd(self) -> Tuple[int, int]: ... + @overload + def getch(self) -> _chtype: ... + @overload + def getch(self, y: int, x: int) -> _chtype: ... + @overload + def get_wch(self) -> _chtype: ... + @overload + def get_wch(self, y: int, x: int) -> _chtype: ... + @overload + def getkey(self) -> str: ... + @overload + def getkey(self, y: int, x: int) -> str: ... + def getmaxyx(self) -> Tuple[int, int]: ... + def getparyx(self) -> Tuple[int, int]: ... + @overload + def getstr(self) -> _chtype: ... + @overload + def getstr(self, n: int) -> _chtype: ... + @overload + def getstr(self, y: int, x: int) -> _chtype: ... + @overload + def getstr(self, y: int, x: int, n: int) -> _chtype: ... + def getyx(self) -> Tuple[int, int]: ... + @overload + def hline(self, ch: _chtype, n: int) -> None: ... + @overload + def hline(self, y: int, x: int, ch: _chtype, n: int) -> None: ... + def idcok(self, flag: bool) -> None: ... + def idlok(self, yes: bool) -> None: ... + def immedok(self, flag: bool) -> None: ... + @overload + def inch(self) -> _chtype: ... + @overload + def inch(self, y: int, x: int) -> _chtype: ... + @overload + def insch(self, ch: _chtype, attr: int = ...) -> None: ... + @overload + def insch(self, y: int, x: int, ch: _chtype, attr: int = ...) -> None: ... + def insdelln(self, nlines: int) -> None: ... + def insertln(self) -> None: ... + @overload + def insnstr(self, str: str, n: int, attr: int = ...) -> None: ... + @overload + def insnstr(self, y: int, x: int, str: str, n: int, attr: int = ...) -> None: ... + @overload + def insstr(self, str: str, attr: int = ...) -> None: ... + @overload + def insstr(self, y: int, x: int, str: str, attr: int = ...) -> None: ... + @overload + def instr(self, n: int = ...) -> _chtype: ... + @overload + def instr(self, y: int, x: int, n: int = ...) -> _chtype: ... + def is_linetouched(self, line: int) -> bool: ... + def is_wintouched(self) -> bool: ... + def keypad(self, yes: bool) -> None: ... + def leaveok(self, yes: bool) -> None: ... + def move(self, new_y: int, new_x: int) -> None: ... + def mvderwin(self, y: int, x: int) -> None: ... + def mvwin(self, new_y: int, new_x: int) -> None: ... + def nodelay(self, yes: bool) -> None: ... + def notimeout(self, yes: bool) -> None: ... + def noutrefresh(self) -> None: ... + @overload + def overlay(self, destwin: _CursesWindow) -> None: ... + @overload + def overlay(self, destwin: _CursesWindow, sminrow: int, smincol: int, dminrow: int, dmincol: int, dmaxrow: int, dmaxcol: int) -> None: ... + @overload + def overwrite(self, destwin: _CursesWindow) -> None: ... + @overload + def overwrite(self, destwin: _CursesWindow, sminrow: int, smincol: int, dminrow: int, dmincol: int, dmaxrow: int, dmaxcol: int) -> None: ... + def putwin(self, file: IO[Any]) -> None: ... + def redrawln(self, beg: int, num: int) -> None: ... + def redrawwin(self) -> None: ... + @overload + def refresh(self) -> None: ... + @overload + def refresh(self, pminrow: int, pmincol: int, sminrow: int, smincol: int, smaxrow: int, smaxcol: int) -> None: ... + def resize(self, nlines: int, ncols: int) -> None: ... + def scroll(self, lines: int = ...) -> None: ... + def scrollok(self, flag: bool) -> None: ... + def setscrreg(self, top: int, bottom: int) -> None: ... + def standend(self) -> None: ... + def standout(self) -> None: ... + @overload + def subpad(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subpad(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subwin(self, begin_y: int, begin_x: int) -> _CursesWindow: ... + @overload + def subwin(self, nlines: int, ncols: int, begin_y: int, begin_x: int) -> _CursesWindow: ... + def syncdown(self) -> None: ... + def syncok(self, flag: bool) -> None: ... + def syncup(self) -> None: ... + def timeout(self, delay: int) -> None: ... + def touchline(self, start: int, count: int, changed: bool = ...) -> None: ... + def touchwin(self) -> None: ... + def untouchwin(self) -> None: ... + @overload + def vline(self, ch: _chtype, n: int) -> None: ... + @overload + def vline(self, y: int, x: int, ch: _chtype, n: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi new file mode 100644 index 0000000..1260d42 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_dummy_thread.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple + +TIMEOUT_MAX: int +error = RuntimeError + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> None: ... +def exit() -> NoReturn: ... +def get_ident() -> int: ... +def allocate_lock() -> LockType: ... +def stack_size(size: Optional[int] = ...) -> int: ... + +class LockType(object): + locked_status: bool + def __init__(self) -> None: ... + def acquire(self, waitflag: Optional[bool] = ..., timeout: int = ...) -> bool: ... + def __enter__(self, waitflag: Optional[bool] = ..., timeout: int = ...) -> bool: ... + def __exit__(self, typ: Any, val: Any, tb: Any) -> None: ... + def release(self) -> bool: ... + def locked(self) -> bool: ... + +def interrupt_main() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_imp.pyi new file mode 100644 index 0000000..7015b3b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_imp.pyi @@ -0,0 +1,22 @@ +# Stubs for _imp (Python 3.6) + +import sys +import types +from typing import Any, List + +if sys.version_info >= (3, 5): + from importlib.machinery import ModuleSpec + def create_builtin(spec: ModuleSpec) -> types.ModuleType: ... + def create_dynamic(spec: ModuleSpec, file: Any = ...) -> None: ... + +def acquire_lock() -> None: ... +def exec_builtin(mod: types.ModuleType) -> int: ... +def exec_dynamic(mod: types.ModuleType) -> int: ... +def extension_suffixes() -> List[str]: ... +def get_frozen_object(name: str) -> types.CodeType: ... +def init_frozen(name: str) -> types.ModuleType: ... +def is_builtin(name: str) -> int: ... +def is_frozen(name: str) -> bool: ... +def is_frozen_package(name: str) -> bool: ... +def lock_held() -> bool: ... +def release_lock() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi new file mode 100644 index 0000000..51cb489 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_importlib_modulespec.pyi @@ -0,0 +1,45 @@ +# ModuleSpec, ModuleType, Loader are part of a dependency cycle. +# They are officially defined/exported in other places: +# +# - ModuleType in types +# - Loader in importlib.abc +# - ModuleSpec in importlib.machinery (3.4 and later only) +# +# _Loader is the PEP-451-defined interface for a loader type/object. + +from abc import ABCMeta +import sys +from typing import Any, Dict, List, Optional, Protocol + +class _Loader(Protocol): + def load_module(self, fullname: str) -> ModuleType: ... + +class ModuleSpec: + def __init__(self, name: str, loader: Optional[Loader], *, + origin: Optional[str] = ..., loader_state: Any = ..., + is_package: Optional[bool] = ...) -> None: ... + name: str + loader: Optional[_Loader] + origin: Optional[str] + submodule_search_locations: Optional[List[str]] + loader_state: Any + cached: Optional[str] + parent: Optional[str] + has_location: bool + +class ModuleType: + __name__: str + __file__: str + __dict__: Dict[str, Any] + __loader__: Optional[_Loader] + __package__: Optional[str] + __spec__: Optional[ModuleSpec] + def __init__(self, name: str, doc: Optional[str] = ...) -> None: ... + +class Loader(metaclass=ABCMeta): + def load_module(self, fullname: str) -> ModuleType: ... + def module_repr(self, module: ModuleType) -> str: ... + def create_module(self, spec: ModuleSpec) -> Optional[ModuleType]: ... + # Not defined on the actual class for backwards-compatibility reasons, + # but expected in new code. + def exec_module(self, module: ModuleType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_json.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_json.pyi new file mode 100644 index 0000000..217fadd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_json.pyi @@ -0,0 +1,30 @@ +"""Stub file for the '_json' module.""" + +from typing import Any, Tuple + +class make_encoder: + sort_keys: Any + skipkeys: Any + key_separator: Any + indent: Any + markers: Any + default: Any + encoder: Any + item_separator: Any + def __init__(self, markers, default, encoder, indent, key_separator, + item_separator, sort_keys, skipkeys, allow_nan) -> None: ... + def __call__(self, *args, **kwargs) -> Any: ... + +class make_scanner: + object_hook: Any + object_pairs_hook: Any + parse_int: Any + parse_constant: Any + parse_float: Any + strict: bool + # TODO: 'context' needs the attrs above (ducktype), but not __call__. + def __init__(self, context: make_scanner) -> None: ... + def __call__(self, string: str, index: int) -> Tuple[Any, int]: ... + +def encode_basestring_ascii(s: str) -> str: ... +def scanstring(string: str, end: int, strict: bool = ...) -> Tuple[str, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi new file mode 100644 index 0000000..09f69c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_markupbase.pyi @@ -0,0 +1,9 @@ +from typing import Tuple + +class ParserBase: + def __init__(self) -> None: ... + def error(self, message: str) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + + def unknown_decl(self, data: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_operator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_operator.pyi new file mode 100644 index 0000000..6d08cd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_operator.pyi @@ -0,0 +1,64 @@ +# Stubs for _operator (Python 3.5) + +import sys +from typing import AnyStr + +# In reality the import is the other way around, but this way we can keep the operator stub in 2and3 +from operator import ( + truth as truth, + contains as contains, + indexOf as indexOf, + countOf as countOf, + is_ as is_, + is_not as is_not, + index as index, + add as add, + sub as sub, + mul as mul, + floordiv as floordiv, + truediv as truediv, + mod as mod, + neg as neg, + pos as pos, + abs as abs, + inv as inv, + invert as invert, + length_hint as length_hint, + lshift as lshift, + rshift as rshift, + not_ as not_, + and_ as and_, + xor as xor, + or_ as or_, + iadd as iadd, + isub as isub, + imul as imul, + ifloordiv as ifloordiv, + itruediv as itruediv, + imod as imod, + ilshift as ilshift, + irshift as irshift, + iand as iand, + ixor as ixor, + ior as ior, + concat as concat, + iconcat as iconcat, + getitem as getitem, + setitem as setitem, + delitem as delitem, + pow as pow, + ipow as ipow, + eq as eq, + ne as ne, + lt as lt, + le as le, + gt as gt, + ge as ge, + itemgetter as itemgetter, + attrgetter as attrgetter, + methodcaller as methodcaller, +) +if sys.version_info >= (3, 5): + from operator import matmul as matmul, imatmul as imatmul + +def _compare_digest(a: AnyStr, b: AnyStr) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi new file mode 100644 index 0000000..67b7d7c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_posixsubprocess.pyi @@ -0,0 +1,14 @@ +# Stubs for _posixsubprocess + +# NOTE: These are incomplete! + +from typing import Tuple, Sequence, Callable + +def cloexec_pipe() -> Tuple[int, int]: ... +def fork_exec(args: Sequence[str], + executable_list: Sequence[bytes], close_fds: bool, fds_to_keep: Sequence[int], + cwd: str, env_list: Sequence[bytes], + p2cread: int, p2cwrite: int, c2pred: int, c2pwrite: int, + errread: int, errwrite: int, errpipe_read: int, + errpipe_write: int, restore_signals: int, start_new_session: int, + preexec_fn: Callable[[], None]) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_stat.pyi new file mode 100644 index 0000000..ffd28cb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_stat.pyi @@ -0,0 +1,69 @@ +"""Stub file for the '_stat' module.""" + +SF_APPEND: int +SF_ARCHIVED: int +SF_IMMUTABLE: int +SF_NOUNLINK: int +SF_SNAPSHOT: int +ST_ATIME: int +ST_CTIME: int +ST_DEV: int +ST_GID: int +ST_INO: int +ST_MODE: int +ST_MTIME: int +ST_NLINK: int +ST_SIZE: int +ST_UID: int +S_ENFMT: int +S_IEXEC: int +S_IFBLK: int +S_IFCHR: int +S_IFDIR: int +S_IFDOOR: int +S_IFIFO: int +S_IFLNK: int +S_IFPORT: int +S_IFREG: int +S_IFSOCK: int +S_IFWHT: int +S_IREAD: int +S_IRGRP: int +S_IROTH: int +S_IRUSR: int +S_IRWXG: int +S_IRWXO: int +S_IRWXU: int +S_ISGID: int +S_ISUID: int +S_ISVTX: int +S_IWGRP: int +S_IWOTH: int +S_IWRITE: int +S_IWUSR: int +S_IXGRP: int +S_IXOTH: int +S_IXUSR: int +UF_APPEND: int +UF_COMPRESSED: int +UF_HIDDEN: int +UF_IMMUTABLE: int +UF_NODUMP: int +UF_NOUNLINK: int +UF_OPAQUE: int + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +def S_ISBLK(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISDIR(mode: int) -> bool: ... +def S_ISDOOR(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISPORT(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... +def S_ISWHT(mode: int) -> bool: ... + +def filemode(mode: int) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi new file mode 100644 index 0000000..76967b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_subprocess.pyi @@ -0,0 +1,38 @@ +# Stubs for _subprocess + +# NOTE: These are incomplete! + +from typing import Mapping, Any, Tuple + +CREATE_NEW_CONSOLE = 0 +CREATE_NEW_PROCESS_GROUP = 0 +STD_INPUT_HANDLE = 0 +STD_OUTPUT_HANDLE = 0 +STD_ERROR_HANDLE = 0 +SW_HIDE = 0 +STARTF_USESTDHANDLES = 0 +STARTF_USESHOWWINDOW = 0 +INFINITE = 0 +DUPLICATE_SAME_ACCESS = 0 +WAIT_OBJECT_0 = 0 + +# TODO not exported by the Python module +class Handle: + def Close(self) -> None: ... + +def GetVersion() -> int: ... +def GetExitCodeProcess(handle: Handle) -> int: ... +def WaitForSingleObject(handle: Handle, timeout: int) -> int: ... +def CreateProcess(executable: str, cmd_line: str, + proc_attrs, thread_attrs, + inherit: int, flags: int, + env_mapping: Mapping[str, str], + curdir: str, + startupinfo: Any) -> Tuple[Any, Handle, int, int]: ... +def GetModuleFileName(module: int) -> str: ... +def GetCurrentProcess() -> Handle: ... +def DuplicateHandle(source_proc: Handle, source: Handle, target_proc: Handle, + target: Any, access: int, inherit: int) -> int: ... +def CreatePipe(pipe_attrs, size: int) -> Tuple[Handle, Handle]: ... +def GetStdHandle(arg: int) -> int: ... +def TerminateProcess(handle: Handle, exit_code: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_thread.pyi new file mode 100644 index 0000000..41f02b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_thread.pyi @@ -0,0 +1,31 @@ +# Stubs for _thread + +from types import TracebackType +from typing import Any, Callable, Dict, NoReturn, Optional, Tuple, Type + +error = RuntimeError + +def _count() -> int: ... + +_dangling: Any + +class LockType: + def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ... + def release(self) -> None: ... + def locked(self) -> bool: ... + def __enter__(self) -> bool: ... + def __exit__( + self, + type: Optional[Type[BaseException]], + value: Optional[BaseException], + traceback: Optional[TracebackType], + ) -> None: ... + +def start_new_thread(function: Callable[..., Any], args: Tuple[Any, ...], kwargs: Dict[str, Any] = ...) -> int: ... +def interrupt_main() -> None: ... +def exit() -> NoReturn: ... +def allocate_lock() -> LockType: ... +def get_ident() -> int: ... +def stack_size(size: int = ...) -> int: ... + +TIMEOUT_MAX: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi new file mode 100644 index 0000000..a286d2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_threading_local.pyi @@ -0,0 +1,18 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/_threading_local.py +from typing import Any, Dict, List, Tuple +from weakref import ReferenceType + +__all__: List[str] +localdict = Dict[Any, Any] + +class _localimpl: + key: str + dicts: Dict[int, Tuple[ReferenceType, localdict]] + def __init__(self) -> None: ... + def get_dict(self) -> localdict: ... + def create_dict(self) -> localdict: ... + +class local: + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi new file mode 100644 index 0000000..21d0033 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_tracemalloc.pyi @@ -0,0 +1,26 @@ +"""Stub file for the '_tracemalloc' module.""" +# This is an autogenerated file. It serves as a starting point +# for a more precise manual annotation of this module. +# Feel free to edit the source below, but remove this header when you do. + +from typing import Any + +def _get_object_traceback(*args, **kwargs) -> Any: ... + +def _get_traces() -> Any: + raise MemoryError() + +def clear_traces() -> None: ... + +def get_traceback_limit() -> int: ... + +def get_traced_memory() -> tuple: ... + +def get_tracemalloc_memory() -> Any: ... + +def is_tracing() -> bool: ... + +def start(*args, **kwargs) -> None: + raise ValueError() + +def stop() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_warnings.pyi new file mode 100644 index 0000000..6529c40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_warnings.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Optional, Type + +_defaultaction: str +_onceregistry: dict +filters: List[tuple] + +def warn(message: Warning, category: Optional[Type[Warning]] = ..., stacklevel: int = ...) -> None: ... +def warn_explicit(message: Warning, category: Optional[Type[Warning]], + filename: str, lineno: int, + module: Any = ..., registry: dict = ..., + module_globals: dict = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_winapi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_winapi.pyi new file mode 100644 index 0000000..af6c923 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/_winapi.pyi @@ -0,0 +1,96 @@ +from typing import Any, Union, Tuple, Optional, overload, Dict, NoReturn, Sequence + +CREATE_NEW_CONSOLE: int +CREATE_NEW_PROCESS_GROUP: int +DUPLICATE_CLOSE_SOURCE: int +DUPLICATE_SAME_ACCESS: int +ERROR_ALREADY_EXISTS: int +ERROR_BROKEN_PIPE: int +ERROR_IO_PENDING: int +ERROR_MORE_DATA: int +ERROR_NETNAME_DELETED: int +ERROR_NO_DATA: int +ERROR_NO_SYSTEM_RESOURCES: int +ERROR_OPERATION_ABORTED: int +ERROR_PIPE_BUSY: int +ERROR_PIPE_CONNECTED: int +ERROR_SEM_TIMEOUT: int +FILE_FLAG_FIRST_PIPE_INSTANCE: int +FILE_FLAG_OVERLAPPED: int +FILE_GENERIC_READ: int +FILE_GENERIC_WRITE: int +GENERIC_READ: int +GENERIC_WRITE: int +INFINITE: int +NMPWAIT_WAIT_FOREVER: int +NULL: int +OPEN_EXISTING: int +PIPE_ACCESS_DUPLEX: int +PIPE_ACCESS_INBOUND: int +PIPE_READMODE_MESSAGE: int +PIPE_TYPE_MESSAGE: int +PIPE_UNLIMITED_INSTANCES: int +PIPE_WAIT: int +PROCESS_ALL_ACCESS: int +PROCESS_DUP_HANDLE: int +STARTF_USESHOWWINDOW: int +STARTF_USESTDHANDLES: int +STD_ERROR_HANDLE: int +STD_INPUT_HANDLE: int +STD_OUTPUT_HANDLE: int +STILL_ACTIVE: int +SW_HIDE: int +WAIT_ABANDONED_0: int +WAIT_OBJECT_0: int +WAIT_TIMEOUT: int + +def CloseHandle(handle: int) -> None: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def ConnectNamedPipe(handle: int, overlapped: Union[int, bool]) -> Any: ... +@overload +def ConnectNamedPipe(handle: int) -> None: ... + +def CreateFile(file_name: str, desired_access: int, share_mode: int, security_attributes: int, creation_disposition: int, flags_and_attributes: int, template_file: int) -> int: ... +def CreateJunction(src_path: str, dest_path: str) -> None: ... +def CreateNamedPipe(name: str, open_mode: int, pipe_mode: int, max_instances: int, out_buffer_size: int, in_buffer_size: int, default_timeout: int, security_attributes: int) -> int: ... +def CreatePipe(pipe_attrs: Any, size: int) -> Tuple[int, int]: ... +def CreateProcess(application_name: Optional[str], command_line: Optional[str], proc_attrs: Any, thread_attrs: Any, inherit_handles: bool, creation_flags: int, env_mapping: Dict[str, str], cwd: Optional[str], startup_info: Any) -> Tuple[int, int, int, int]: ... +def DuplicateHandle(source_process_handle: int, source_handle: int, target_process_handle: int, desired_access: int, inherit_handle: bool, options: int = ...) -> int: ... +def ExitProcess(ExitCode: int) -> NoReturn: ... +def GetACP() -> int: ... +def GetFileType(handle: int) -> int: ... +def GetCurrentProcess() -> int: ... +def GetExitCodeProcess(process: int) -> int: ... +def GetLastError() -> int: ... +def GetModuleFileName(module_handle: int) -> str: ... +def GetStdHandle(std_handle: int) -> int: ... +def GetVersion() -> int: ... +def OpenProcess(desired_access: int, inherit_handle: bool, process_id: int) -> int: ... +def PeekNamedPipe(handle: int, size: int = ...) -> Union[Tuple[int, int], Tuple[bytes, int, int]]: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def ReadFile(handle: int, size: int, overlapped: Union[int, bool]) -> Any: ... +@overload +def ReadFile(handle: int, size: int) -> Tuple[int, int]: ... + +def SetNamedPipeHandleState(named_pipe: int, mode: Optional[int], max_collection_count: Optional[int], collect_data_timeout: Optional[int]) -> None: ... +def TerminateProcess(handle: int, exit_code: int) -> None: ... +def WaitForMultipleObjects(handle_seq: Sequence[int], wait_flag: bool, milliseconds: int = ...) -> int: ... +def WaitForSingleObject(handle: int, milliseconds: int) -> int: ... +def WaitNamedPipe(name: str, timeout: int) -> None: ... + +# TODO: once literal types are supported, overload with Literal[True/False] +@overload +def WriteFile(handle: int, buffer: bytes, overlapped: Union[int, bool]) -> Any: ... +@overload +def WriteFile(handle: int, buffer: bytes) -> Tuple[bytes, int]: ... + + +class Overlapped: + event: int = ... + def GetOverlappedResult(self, wait: bool) -> Tuple[int, int]: ... + def cancel(self) -> None: ... + def getbuffer(self) -> Optional[bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/abc.pyi new file mode 100644 index 0000000..e9c530d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/abc.pyi @@ -0,0 +1,19 @@ +from typing import Any, Callable, Type, TypeVar +# Stubs for abc. + +_T = TypeVar('_T') +_FuncT = TypeVar('_FuncT', bound=Callable[..., Any]) + +# Thesee definitions have special processing in mypy +class ABCMeta(type): + def register(cls: ABCMeta, subclass: Type[_T]) -> Type[_T]: ... + +def abstractmethod(callable: _FuncT) -> _FuncT: ... +class abstractproperty(property): ... +# These two are deprecated and not supported by mypy +def abstractstaticmethod(callable: _FuncT) -> _FuncT: ... +def abstractclassmethod(callable: _FuncT) -> _FuncT: ... + +class ABC(metaclass=ABCMeta): ... + +def get_cache_token() -> object: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ast.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ast.pyi new file mode 100644 index 0000000..090d5f8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ast.pyi @@ -0,0 +1,39 @@ +# Python 3.5 ast + +import sys +# Rename typing to _typing, as not to conflict with typing imported +# from _ast below when loaded in an unorthodox way by the Dropbox +# internal Bazel integration. +import typing as _typing +from typing import Any, Iterator, Optional, Union, TypeVar + +# The same unorthodox Bazel integration causes issues with sys, which +# is imported in both modules. unfortunately we can't just rename sys, +# since mypy only supports version checks with a sys that is named +# sys. +from _ast import * # type: ignore + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> Any: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> Optional[AST]: ... + +_T = TypeVar('_T', bound=AST) + +if sys.version_info >= (3, 8): + def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ..., + type_comments: bool = ..., feature_version: int = ...) -> AST: ... +else: + def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ...) -> AST: ... + +def copy_location(new_node: _T, old_node: AST) -> _T: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: _T) -> _T: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: _T, n: int = ...) -> _T: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[_typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi new file mode 100644 index 0000000..b98c2d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/__init__.pyi @@ -0,0 +1,125 @@ +import sys +from typing import List, Type + +from asyncio.coroutines import ( + coroutine as coroutine, + iscoroutinefunction as iscoroutinefunction, + iscoroutine as iscoroutine, +) +from asyncio.protocols import ( + BaseProtocol as BaseProtocol, + Protocol as Protocol, + DatagramProtocol as DatagramProtocol, + SubprocessProtocol as SubprocessProtocol, +) +from asyncio.streams import ( + StreamReader as StreamReader, + StreamWriter as StreamWriter, + StreamReaderProtocol as StreamReaderProtocol, + open_connection as open_connection, + start_server as start_server, + IncompleteReadError as IncompleteReadError, + LimitOverrunError as LimitOverrunError, +) +from asyncio.subprocess import ( + create_subprocess_exec as create_subprocess_exec, + create_subprocess_shell as create_subprocess_shell, +) +from asyncio.transports import ( + BaseTransport as BaseTransport, + ReadTransport as ReadTransport, + WriteTransport as WriteTransport, + Transport as Transport, + DatagramTransport as DatagramTransport, + SubprocessTransport as SubprocessTransport, +) +from asyncio.futures import ( + Future as Future, + CancelledError as CancelledError, + TimeoutError as TimeoutError, + InvalidStateError as InvalidStateError, + wrap_future as wrap_future, +) +from asyncio.tasks import ( + FIRST_COMPLETED as FIRST_COMPLETED, + FIRST_EXCEPTION as FIRST_EXCEPTION, + ALL_COMPLETED as ALL_COMPLETED, + as_completed as as_completed, + ensure_future as ensure_future, + gather as gather, + run_coroutine_threadsafe as run_coroutine_threadsafe, + shield as shield, + sleep as sleep, + wait as wait, + wait_for as wait_for, + Task as Task, +) +from asyncio.base_events import BaseEventLoop as BaseEventLoop +from asyncio.events import ( + AbstractEventLoopPolicy as AbstractEventLoopPolicy, + AbstractEventLoop as AbstractEventLoop, + AbstractServer as AbstractServer, + Handle as Handle, + TimerHandle as TimerHandle, + get_event_loop_policy as get_event_loop_policy, + set_event_loop_policy as set_event_loop_policy, + get_event_loop as get_event_loop, + set_event_loop as set_event_loop, + new_event_loop as new_event_loop, + get_child_watcher as get_child_watcher, + set_child_watcher as set_child_watcher, +) +from asyncio.queues import ( + Queue as Queue, + PriorityQueue as PriorityQueue, + LifoQueue as LifoQueue, + QueueFull as QueueFull, + QueueEmpty as QueueEmpty, +) +from asyncio.locks import ( + Lock as Lock, + Event as Event, + Condition as Condition, + Semaphore as Semaphore, + BoundedSemaphore as BoundedSemaphore, +) + +if sys.version_info < (3, 5): + from asyncio.queues import JoinableQueue as JoinableQueue +else: + from asyncio.futures import isfuture as isfuture + from asyncio.events import ( + _set_running_loop as _set_running_loop, + _get_running_loop as _get_running_loop, + ) +if sys.platform != 'win32': + from asyncio.streams import ( + open_unix_connection as open_unix_connection, + start_unix_server as start_unix_server, + ) + +if sys.version_info >= (3, 7): + from asyncio.events import ( + get_running_loop as get_running_loop, + ) + from asyncio.tasks import ( + all_tasks as all_tasks, + create_task as create_task, + current_task as current_task, + ) + from asyncio.runners import ( + run as run, + ) + + +# TODO: It should be possible to instantiate these classes, but mypy +# currently disallows this. +# See https://github.com/python/mypy/issues/1843 +SelectorEventLoop: Type[AbstractEventLoop] +if sys.platform == 'win32': + ProactorEventLoop: Type[AbstractEventLoop] +DefaultEventLoopPolicy: Type[AbstractEventLoopPolicy] + +# TODO: AbstractChildWatcher (UNIX only) + +__all__: List[str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi new file mode 100644 index 0000000..2262a67 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/base_events.pyi @@ -0,0 +1,140 @@ +import selectors +from socket import socket +import ssl +import sys +from typing import Any, Awaitable, Callable, Dict, Generator, List, Optional, Sequence, Tuple, TypeVar, Union, overload +from asyncio.futures import Future +from asyncio.coroutines import coroutine +from asyncio.events import AbstractEventLoop, AbstractServer, Handle, TimerHandle +from asyncio.protocols import BaseProtocol +from asyncio.tasks import Task +from asyncio.transports import BaseTransport + +_T = TypeVar('_T') +_Context = Dict[str, Any] +_ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any] +_ProtocolFactory = Callable[[], BaseProtocol] +_SSLContext = Union[bool, None, ssl.SSLContext] +_TransProtPair = Tuple[BaseTransport, BaseProtocol] + +class BaseEventLoop(AbstractEventLoop): + def run_forever(self) -> None: ... + + # Can't use a union, see mypy issue # 1873. + @overload + def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ... + @overload + def run_until_complete(self, future: Awaitable[_T]) -> _T: ... + + def stop(self) -> None: ... + def is_running(self) -> bool: ... + def is_closed(self) -> bool: ... + def close(self) -> None: ... + if sys.version_info >= (3, 6): + @coroutine + def shutdown_asyncgens(self) -> Generator[Any, None, None]: ... + # Methods scheduling callbacks. All these return Handles. + def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + def time(self) -> float: ... + # Future methods + if sys.version_info >= (3, 5): + def create_future(self) -> Future[Any]: ... + # Tasks methods + def create_task(self, coro: Union[Awaitable[_T], Generator[Any, None, _T]]) -> Task[_T]: ... + def set_task_factory(self, factory: Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]) -> None: ... + def get_task_factory(self) -> Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]: ... + # Methods for interacting with threads + def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @coroutine + def run_in_executor(self, executor: Any, + func: Callable[..., _T], *args: Any) -> Generator[Any, None, _T]: ... + def set_default_executor(self, executor: Any) -> None: ... + # Network I/O methods returning Futures. + @coroutine + # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers + # https://github.com/python/mypy/issues/2509 + def getaddrinfo(self, host: Optional[str], port: Union[str, int, None], *, + family: int = ..., type: int = ..., proto: int = ..., + flags: int = ...) -> Generator[Any, None, List[Tuple[int, int, int, str, Tuple[Any, ...]]]]: ... + @coroutine + def getnameinfo(self, sockaddr: tuple, flags: int = ...) -> Generator[Any, None, Tuple[str, int]]: ... + @overload + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: str = ..., port: int = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: None = ..., + local_addr: Optional[str] = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: socket, + local_addr: None = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: Optional[Union[str, Sequence[str]]] = ..., port: int = ..., *, + family: int = ..., flags: int = ..., + sock: None = ..., backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @overload + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + family: int = ..., flags: int = ..., + sock: socket, backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @coroutine + def create_unix_connection(self, protocol_factory: _ProtocolFactory, path: str, *, + ssl: _SSLContext = ..., sock: Optional[socket] = ..., + server_hostname: str = ...) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def create_unix_server(self, protocol_factory: _ProtocolFactory, path: str, *, + sock: Optional[socket] = ..., backlog: int = ..., ssl: _SSLContext = ...) -> Generator[Any, None, AbstractServer]: ... + @coroutine + def create_datagram_endpoint(self, protocol_factory: _ProtocolFactory, + local_addr: Optional[Tuple[str, int]] = ..., remote_addr: Optional[Tuple[str, int]] = ..., *, + family: int = ..., proto: int = ..., flags: int = ..., + reuse_address: Optional[bool] = ..., reuse_port: Optional[bool] = ..., + allow_broadcast: Optional[bool] = ..., + sock: Optional[socket] = ...) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def connect_accepted_socket(self, protocol_factory: _ProtocolFactory, sock: socket, *, ssl: _SSLContext = ...) -> Generator[Any, None, _TransProtPair]: ... + # Pipes and subprocesses. + @coroutine + def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def subprocess_shell(self, protocol_factory: _ProtocolFactory, cmd: Union[bytes, str], *, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @coroutine + def subprocess_exec(self, protocol_factory: _ProtocolFactory, *args: Any, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + def add_reader(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_reader(self, fd: selectors._FileObject) -> None: ... + def add_writer(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_writer(self, fd: selectors._FileObject) -> None: ... + # Completion based I/O methods returning Futures. + @coroutine + def sock_recv(self, sock: socket, nbytes: int) -> Generator[Any, None, bytes]: ... + @coroutine + def sock_sendall(self, sock: socket, data: bytes) -> Generator[Any, None, None]: ... + @coroutine + def sock_connect(self, sock: socket, address: str) -> Generator[Any, None, None]: ... + @coroutine + def sock_accept(self, sock: socket) -> Generator[Any, None, Tuple[socket, Any]]: ... + # Signal handling. + def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ... + def remove_signal_handler(self, sig: int) -> None: ... + # Error handlers. + def set_exception_handler(self, handler: Optional[_ExceptionHandler]) -> None: ... + if sys.version_info >= (3, 5): + def get_exception_handler(self) -> Optional[_ExceptionHandler]: ... + def default_exception_handler(self, context: _Context) -> None: ... + def call_exception_handler(self, context: _Context) -> None: ... + # Debug flag management. + def get_debug(self) -> bool: ... + def set_debug(self, enabled: bool) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi new file mode 100644 index 0000000..981ccd5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/coroutines.pyi @@ -0,0 +1,9 @@ +from typing import Any, Callable, Generator, List, TypeVar + +__all__: List[str] + +_F = TypeVar('_F', bound=Callable[..., Any]) + +def coroutine(func: _F) -> _F: ... +def iscoroutinefunction(func: Callable[..., Any]) -> bool: ... +def iscoroutine(obj: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi new file mode 100644 index 0000000..c81d027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/events.pyi @@ -0,0 +1,246 @@ +import selectors +from socket import socket +import ssl +import sys +from typing import Any, Awaitable, Callable, Dict, Generator, List, Optional, Sequence, Tuple, TypeVar, Union, overload +from abc import ABCMeta, abstractmethod +from asyncio.futures import Future +from asyncio.coroutines import coroutine +from asyncio.protocols import BaseProtocol +from asyncio.tasks import Task +from asyncio.transports import BaseTransport + +__all__: List[str] + +_T = TypeVar('_T') +_Context = Dict[str, Any] +_ExceptionHandler = Callable[[AbstractEventLoop, _Context], Any] +_ProtocolFactory = Callable[[], BaseProtocol] +_SSLContext = Union[bool, None, ssl.SSLContext] +_TransProtPair = Tuple[BaseTransport, BaseProtocol] + +class Handle: + _cancelled = False + _args: List[Any] + def __init__(self, callback: Callable[..., Any], args: List[Any], loop: AbstractEventLoop) -> None: ... + def __repr__(self) -> str: ... + def cancel(self) -> None: ... + def _run(self) -> None: ... + +class TimerHandle(Handle): + def __init__(self, when: float, callback: Callable[..., Any], args: List[Any], + loop: AbstractEventLoop) -> None: ... + def __hash__(self) -> int: ... + +class AbstractServer: + sockets: Optional[List[socket]] + def close(self) -> None: ... + @coroutine + def wait_closed(self) -> Generator[Any, None, None]: ... + +class AbstractEventLoop(metaclass=ABCMeta): + slow_callback_duration: float = ... + @abstractmethod + def run_forever(self) -> None: ... + + # Can't use a union, see mypy issue # 1873. + @overload + @abstractmethod + def run_until_complete(self, future: Generator[Any, None, _T]) -> _T: ... + @overload + @abstractmethod + def run_until_complete(self, future: Awaitable[_T]) -> _T: ... + + @abstractmethod + def stop(self) -> None: ... + @abstractmethod + def is_running(self) -> bool: ... + @abstractmethod + def is_closed(self) -> bool: ... + @abstractmethod + def close(self) -> None: ... + if sys.version_info >= (3, 6): + @abstractmethod + @coroutine + def shutdown_asyncgens(self) -> Generator[Any, None, None]: ... + # Methods scheduling callbacks. All these return Handles. + @abstractmethod + def call_soon(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @abstractmethod + def call_later(self, delay: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + @abstractmethod + def call_at(self, when: float, callback: Callable[..., Any], *args: Any) -> TimerHandle: ... + @abstractmethod + def time(self) -> float: ... + # Future methods + if sys.version_info >= (3, 5): + @abstractmethod + def create_future(self) -> Future[Any]: ... + # Tasks methods + @abstractmethod + def create_task(self, coro: Union[Awaitable[_T], Generator[Any, None, _T]]) -> Task[_T]: ... + @abstractmethod + def set_task_factory(self, factory: Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]) -> None: ... + @abstractmethod + def get_task_factory(self) -> Optional[Callable[[AbstractEventLoop, Generator[Any, None, _T]], Future[_T]]]: ... + # Methods for interacting with threads + @abstractmethod + def call_soon_threadsafe(self, callback: Callable[..., Any], *args: Any) -> Handle: ... + @abstractmethod + @coroutine + def run_in_executor(self, executor: Any, + func: Callable[..., _T], *args: Any) -> Generator[Any, None, _T]: ... + @abstractmethod + def set_default_executor(self, executor: Any) -> None: ... + # Network I/O methods returning Futures. + @abstractmethod + @coroutine + # TODO the "Tuple[Any, ...]" should be "Union[Tuple[str, int], Tuple[str, int, int, int]]" but that triggers + # https://github.com/python/mypy/issues/2509 + def getaddrinfo(self, host: Optional[str], port: Union[str, int, None], *, + family: int = ..., type: int = ..., proto: int = ..., + flags: int = ...) -> Generator[Any, None, List[Tuple[int, int, int, str, Tuple[Any, ...]]]]: ... + @abstractmethod + @coroutine + def getnameinfo(self, sockaddr: tuple, flags: int = ...) -> Generator[Any, None, Tuple[str, int]]: ... + @overload + @abstractmethod + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: str = ..., port: int = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: None = ..., + local_addr: Optional[str] = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @abstractmethod + @coroutine + def create_connection(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + ssl: _SSLContext = ..., family: int = ..., proto: int = ..., flags: int = ..., sock: socket, + local_addr: None = ..., server_hostname: Optional[str] = ...) -> Generator[Any, None, _TransProtPair]: ... + @overload + @abstractmethod + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: Optional[Union[str, Sequence[str]]] = ..., port: int = ..., *, + family: int = ..., flags: int = ..., + sock: None = ..., backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @overload + @abstractmethod + @coroutine + def create_server(self, protocol_factory: _ProtocolFactory, host: None = ..., port: None = ..., *, + family: int = ..., flags: int = ..., + sock: socket, backlog: int = ..., ssl: _SSLContext = ..., + reuse_address: Optional[bool] = ..., + reuse_port: Optional[bool] = ...) -> Generator[Any, None, AbstractServer]: ... + @abstractmethod + @coroutine + def create_unix_connection(self, protocol_factory: _ProtocolFactory, path: str, *, + ssl: _SSLContext = ..., sock: Optional[socket] = ..., + server_hostname: str = ...) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def create_unix_server(self, protocol_factory: _ProtocolFactory, path: str, *, + sock: Optional[socket] = ..., backlog: int = ..., ssl: _SSLContext = ...) -> Generator[Any, None, AbstractServer]: ... + @abstractmethod + @coroutine + def create_datagram_endpoint(self, protocol_factory: _ProtocolFactory, + local_addr: Optional[Tuple[str, int]] = ..., remote_addr: Optional[Tuple[str, int]] = ..., *, + family: int = ..., proto: int = ..., flags: int = ..., + reuse_address: Optional[bool] = ..., reuse_port: Optional[bool] = ..., + allow_broadcast: Optional[bool] = ..., + sock: Optional[socket] = ...) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def connect_accepted_socket(self, protocol_factory: _ProtocolFactory, sock: socket, *, ssl: _SSLContext = ...) -> Generator[Any, None, _TransProtPair]: ... + # Pipes and subprocesses. + @abstractmethod + @coroutine + def connect_read_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def connect_write_pipe(self, protocol_factory: _ProtocolFactory, pipe: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def subprocess_shell(self, protocol_factory: _ProtocolFactory, cmd: Union[bytes, str], *, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + @coroutine + def subprocess_exec(self, protocol_factory: _ProtocolFactory, *args: Any, stdin: Any = ..., + stdout: Any = ..., stderr: Any = ..., + **kwargs: Any) -> Generator[Any, None, _TransProtPair]: ... + @abstractmethod + def add_reader(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_reader(self, fd: selectors._FileObject) -> None: ... + @abstractmethod + def add_writer(self, fd: selectors._FileObject, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_writer(self, fd: selectors._FileObject) -> None: ... + # Completion based I/O methods returning Futures. + @abstractmethod + @coroutine + def sock_recv(self, sock: socket, nbytes: int) -> Generator[Any, None, bytes]: ... + @abstractmethod + @coroutine + def sock_sendall(self, sock: socket, data: bytes) -> Generator[Any, None, None]: ... + @abstractmethod + @coroutine + def sock_connect(self, sock: socket, address: str) -> Generator[Any, None, None]: ... + @abstractmethod + @coroutine + def sock_accept(self, sock: socket) -> Generator[Any, None, Tuple[socket, Any]]: ... + # Signal handling. + @abstractmethod + def add_signal_handler(self, sig: int, callback: Callable[..., Any], *args: Any) -> None: ... + @abstractmethod + def remove_signal_handler(self, sig: int) -> None: ... + # Error handlers. + @abstractmethod + def set_exception_handler(self, handler: Optional[_ExceptionHandler]) -> None: ... + if sys.version_info >= (3, 5): + @abstractmethod + def get_exception_handler(self) -> Optional[_ExceptionHandler]: ... + @abstractmethod + def default_exception_handler(self, context: _Context) -> None: ... + @abstractmethod + def call_exception_handler(self, context: _Context) -> None: ... + # Debug flag management. + @abstractmethod + def get_debug(self) -> bool: ... + @abstractmethod + def set_debug(self, enabled: bool) -> None: ... + +class AbstractEventLoopPolicy(metaclass=ABCMeta): + @abstractmethod + def get_event_loop(self) -> AbstractEventLoop: ... + @abstractmethod + def set_event_loop(self, loop: Optional[AbstractEventLoop]) -> None: ... + @abstractmethod + def new_event_loop(self) -> AbstractEventLoop: ... + # Child processes handling (Unix only). + @abstractmethod + def get_child_watcher(self) -> Any: ... # TODO: unix_events.AbstractChildWatcher + @abstractmethod + def set_child_watcher(self, watcher: Any) -> None: ... # TODO: unix_events.AbstractChildWatcher + +class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy, metaclass=ABCMeta): + def __init__(self) -> None: ... + def get_event_loop(self) -> AbstractEventLoop: ... + def set_event_loop(self, loop: Optional[AbstractEventLoop]) -> None: ... + def new_event_loop(self) -> AbstractEventLoop: ... + +def get_event_loop_policy() -> AbstractEventLoopPolicy: ... +def set_event_loop_policy(policy: AbstractEventLoopPolicy) -> None: ... + +def get_event_loop() -> AbstractEventLoop: ... +def set_event_loop(loop: Optional[AbstractEventLoop]) -> None: ... +def new_event_loop() -> AbstractEventLoop: ... + +def get_child_watcher() -> Any: ... # TODO: unix_events.AbstractChildWatcher +def set_child_watcher(watcher: Any) -> None: ... # TODO: unix_events.AbstractChildWatcher + +def _set_running_loop(loop: Optional[AbstractEventLoop]) -> None: ... +def _get_running_loop() -> AbstractEventLoop: ... + +if sys.version_info >= (3, 7): + def get_running_loop() -> AbstractEventLoop: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi new file mode 100644 index 0000000..ed2e4a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/futures.pyi @@ -0,0 +1,64 @@ +import sys +from typing import Any, Union, Callable, TypeVar, Type, List, Generic, Iterable, Generator, Awaitable, Optional, Tuple +from .events import AbstractEventLoop +from concurrent.futures import ( + CancelledError as CancelledError, + TimeoutError as TimeoutError, + Future as _ConcurrentFuture, + Error, +) + +if sys.version_info >= (3, 7): + from contextvars import Context + +__all__: List[str] + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Future) + +class InvalidStateError(Error): ... + +class _TracebackLogger: + exc: BaseException + tb: List[str] + def __init__(self, exc: Any, loop: AbstractEventLoop) -> None: ... + def activate(self) -> None: ... + def clear(self) -> None: ... + def __del__(self) -> None: ... + +if sys.version_info >= (3, 5): + def isfuture(obj: object) -> bool: ... + +class Future(Awaitable[_T], Iterable[_T]): + _state: str + _exception: BaseException + _blocking = False + _log_traceback = False + _tb_logger: Type[_TracebackLogger] + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def __repr__(self) -> str: ... + def __del__(self) -> None: ... + if sys.version_info >= (3, 7): + def get_loop(self) -> AbstractEventLoop: ... + def _callbacks(self: _S) -> List[Tuple[Callable[[_S], Any], Context]]: ... + def add_done_callback(self: _S, __fn: Callable[[_S], Any], *, context: Optional[Context] = ...) -> None: ... + else: + @property + def _callbacks(self: _S) -> List[Callable[[_S], Any]]: ... + def add_done_callback(self: _S, __fn: Callable[[_S], Any]) -> None: ... + def cancel(self) -> bool: ... + def _schedule_callbacks(self) -> None: ... + def cancelled(self) -> bool: ... + def done(self) -> bool: ... + def result(self) -> _T: ... + def exception(self) -> BaseException: ... + def remove_done_callback(self: _S, fn: Callable[[_S], Any]) -> int: ... + def set_result(self, result: _T) -> None: ... + def set_exception(self, exception: Union[type, BaseException]) -> None: ... + def _copy_state(self, other: Any) -> None: ... + def __iter__(self) -> Generator[Any, None, _T]: ... + def __await__(self) -> Generator[Any, None, _T]: ... + @property + def _loop(self) -> AbstractEventLoop: ... + +def wrap_future(f: Union[_ConcurrentFuture[_T], Future[_T]]) -> Future[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi new file mode 100644 index 0000000..56b8a67 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/locks.pyi @@ -0,0 +1,60 @@ +from typing import Any, Callable, Generator, Iterable, Iterator, List, Type, TypeVar, Union, Optional, Awaitable + +from .coroutines import coroutine +from .events import AbstractEventLoop +from .futures import Future +from types import TracebackType + +_T = TypeVar('_T') + +__all__: List[str] + +class _ContextManager: + def __init__(self, lock: Union[Lock, Semaphore]) -> None: ... + def __enter__(self) -> object: ... + def __exit__(self, *args: Any) -> None: ... + +class _ContextManagerMixin(Future[_ContextManager]): + # Apparently this exists to *prohibit* use as a context manager. + def __enter__(self) -> object: ... + def __exit__(self, *args: Any) -> None: ... + def __aenter__(self) -> Awaitable[None]: ... + def __aexit__(self, exc_type: Optional[Type[BaseException]], exc: Optional[BaseException], tb: Optional[TracebackType]) -> Awaitable[None]: ... + +class Lock(_ContextManagerMixin): + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + +class Event: + def __init__(self, *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def is_set(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + @coroutine + def wait(self) -> Generator[Any, None, bool]: ... + +class Condition(_ContextManagerMixin): + def __init__(self, lock: Optional[Lock] = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + @coroutine + def wait(self) -> Generator[Any, None, bool]: ... + @coroutine + def wait_for(self, predicate: Callable[[], _T]) -> Generator[Any, None, _T]: ... + def notify(self, n: int = ...) -> None: ... + def notify_all(self) -> None: ... + +class Semaphore(_ContextManagerMixin): + def __init__(self, value: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def locked(self) -> bool: ... + @coroutine + def acquire(self) -> Generator[Any, None, bool]: ... + def release(self) -> None: ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi new file mode 100644 index 0000000..bb258e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/protocols.pyi @@ -0,0 +1,24 @@ +from asyncio import transports +from typing import List, Optional, Text, Tuple, Union + +__all__: List[str] + + +class BaseProtocol: + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def connection_lost(self, exc: Optional[Exception]) -> None: ... + def pause_writing(self) -> None: ... + def resume_writing(self) -> None: ... + +class Protocol(BaseProtocol): + def data_received(self, data: bytes) -> None: ... + def eof_received(self) -> Optional[bool]: ... + +class DatagramProtocol(BaseProtocol): + def datagram_received(self, data: Union[bytes, Text], addr: Tuple[str, int]) -> None: ... + def error_received(self, exc: Exception) -> None: ... + +class SubprocessProtocol(BaseProtocol): + def pipe_data_received(self, fd: int, data: Union[bytes, Text]) -> None: ... + def pipe_connection_lost(self, fd: int, exc: Optional[Exception]) -> None: ... + def process_exited(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi new file mode 100644 index 0000000..dc4e9ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/queues.pyi @@ -0,0 +1,50 @@ +import sys +from asyncio.events import AbstractEventLoop +from .coroutines import coroutine +from .futures import Future +from typing import Any, Generator, Generic, List, TypeVar, Optional + +__all__: List[str] + + +class QueueEmpty(Exception): ... +class QueueFull(Exception): ... + +_T = TypeVar('_T') + +class Queue(Generic[_T]): + def __init__(self, maxsize: int = ..., *, loop: Optional[AbstractEventLoop] = ...) -> None: ... + def _init(self, maxsize: int) -> None: ... + def _get(self) -> _T: ... + def _put(self, item: _T) -> None: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def _format(self) -> str: ... + def _consume_done_getters(self) -> None: ... + def _consume_done_putters(self) -> None: ... + def qsize(self) -> int: ... + @property + def maxsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + @coroutine + def put(self, item: _T) -> Generator[Any, None, None]: ... + def put_nowait(self, item: _T) -> None: ... + @coroutine + def get(self) -> Generator[Any, None, _T]: ... + def get_nowait(self) -> _T: ... + @coroutine + def join(self) -> Generator[Any, None, bool]: ... + def task_done(self) -> None: ... + + +class PriorityQueue(Queue[_T]): ... + + +class LifoQueue(Queue[_T]): ... + +if sys.version_info < (3, 5): + class JoinableQueue(Queue[_T]): + def task_done(self) -> None: ... + @coroutine + def join(self) -> Generator[Any, None, bool]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi new file mode 100644 index 0000000..7d8c28c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/runners.pyi @@ -0,0 +1,9 @@ +import sys + + +if sys.version_info >= (3, 7): + from typing import Awaitable, TypeVar + + _T = TypeVar('_T') + + def run(main: Awaitable[_T], *, debug: bool = ...) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi new file mode 100644 index 0000000..68271c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/streams.pyi @@ -0,0 +1,119 @@ +import sys +from typing import Any, Awaitable, Callable, Generator, Iterable, List, Optional, Tuple, Union + +from . import coroutines +from . import events +from . import protocols +from . import transports + +_ClientConnectedCallback = Callable[[StreamReader, StreamWriter], Optional[Awaitable[None]]] + + +__all__: List[str] + +class IncompleteReadError(EOFError): + expected: Optional[int] + partial: bytes + def __init__(self, partial: bytes, expected: Optional[int]) -> None: ... + +class LimitOverrunError(Exception): + consumed: int + def __init__(self, message: str, consumed: int) -> None: ... + +@coroutines.coroutine +def open_connection( + host: str = ..., + port: Union[int, str] = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Tuple[StreamReader, StreamWriter]]: ... + +@coroutines.coroutine +def start_server( + client_connected_cb: _ClientConnectedCallback, + host: Optional[str] = ..., + port: Optional[Union[int, str]] = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, events.AbstractServer]: ... + +if sys.platform != 'win32': + if sys.version_info >= (3, 7): + from os import PathLike + _PathType = Union[str, PathLike[str]] + else: + _PathType = str + + @coroutines.coroutine + def open_unix_connection( + path: _PathType = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any + ) -> Generator[Any, None, Tuple[StreamReader, StreamWriter]]: ... + + @coroutines.coroutine + def start_unix_server( + client_connected_cb: _ClientConnectedCallback, + path: _PathType = ..., + *, + loop: Optional[events.AbstractEventLoop] = ..., + limit: int = ..., + **kwds: Any) -> Generator[Any, None, events.AbstractServer]: ... + +class FlowControlMixin(protocols.Protocol): ... + +class StreamReaderProtocol(FlowControlMixin, protocols.Protocol): + def __init__(self, + stream_reader: StreamReader, + client_connected_cb: _ClientConnectedCallback = ..., + loop: Optional[events.AbstractEventLoop] = ...) -> None: ... + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def connection_lost(self, exc: Optional[Exception]) -> None: ... + def data_received(self, data: bytes) -> None: ... + def eof_received(self) -> bool: ... + +class StreamWriter: + def __init__(self, + transport: transports.BaseTransport, + protocol: protocols.BaseProtocol, + reader: Optional[StreamReader], + loop: events.AbstractEventLoop) -> None: ... + @property + def transport(self) -> transports.BaseTransport: ... + def write(self, data: bytes) -> None: ... + def writelines(self, data: Iterable[bytes]) -> None: ... + def write_eof(self) -> None: ... + def can_write_eof(self) -> bool: ... + def close(self) -> None: ... + if sys.version_info >= (3, 7): + def is_closing(self) -> bool: ... + @coroutines.coroutine + def wait_closed(self) -> None: ... + def get_extra_info(self, name: str, default: Any = ...) -> Any: ... + @coroutines.coroutine + def drain(self) -> Generator[Any, None, None]: ... + +class StreamReader: + def __init__(self, + limit: int = ..., + loop: Optional[events.AbstractEventLoop] = ...) -> None: ... + def exception(self) -> Exception: ... + def set_exception(self, exc: Exception) -> None: ... + def set_transport(self, transport: transports.BaseTransport) -> None: ... + def feed_eof(self) -> None: ... + def at_eof(self) -> bool: ... + def feed_data(self, data: bytes) -> None: ... + @coroutines.coroutine + def readline(self) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def readuntil(self, separator: bytes = ...) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def read(self, n: int = ...) -> Generator[Any, None, bytes]: ... + @coroutines.coroutine + def readexactly(self, n: int) -> Generator[Any, None, bytes]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi new file mode 100644 index 0000000..46ed302 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/subprocess.pyi @@ -0,0 +1,67 @@ +from asyncio import events +from asyncio import protocols +from asyncio import streams +from asyncio import transports +from asyncio.coroutines import coroutine +from typing import Any, Generator, List, Optional, Text, Tuple, Union, IO + +__all__: List[str] + +PIPE: int +STDOUT: int +DEVNULL: int + +class SubprocessStreamProtocol(streams.FlowControlMixin, + protocols.SubprocessProtocol): + stdin: Optional[streams.StreamWriter] + stdout: Optional[streams.StreamReader] + stderr: Optional[streams.StreamReader] + def __init__(self, limit: int, loop: events.AbstractEventLoop) -> None: ... + def connection_made(self, transport: transports.BaseTransport) -> None: ... + def pipe_data_received(self, fd: int, data: Union[bytes, Text]) -> None: ... + def pipe_connection_lost(self, fd: int, exc: Optional[Exception]) -> None: ... + def process_exited(self) -> None: ... + + +class Process: + stdin: Optional[streams.StreamWriter] + stdout: Optional[streams.StreamReader] + stderr: Optional[streams.StreamReader] + pid: int + def __init__(self, + transport: transports.BaseTransport, + protocol: protocols.BaseProtocol, + loop: events.AbstractEventLoop) -> None: ... + @property + def returncode(self) -> int: ... + @coroutine + def wait(self) -> Generator[Any, None, int]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + @coroutine + def communicate(self, input: Optional[bytes] = ...) -> Generator[Any, None, Tuple[bytes, bytes]]: ... + + +@coroutine +def create_subprocess_shell( + *Args: Union[str, bytes], # Union used instead of AnyStr due to mypy issue #1236 + stdin: Union[int, IO[Any], None] = ..., + stdout: Union[int, IO[Any], None] = ..., + stderr: Union[int, IO[Any], None] = ..., + loop: events.AbstractEventLoop = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Process]: ... + +@coroutine +def create_subprocess_exec( + program: Union[str, bytes], # Union used instead of AnyStr due to mypy issue #1236 + *args: Any, + stdin: Union[int, IO[Any], None] = ..., + stdout: Union[int, IO[Any], None] = ..., + stderr: Union[int, IO[Any], None] = ..., + loop: events.AbstractEventLoop = ..., + limit: int = ..., + **kwds: Any +) -> Generator[Any, None, Process]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi new file mode 100644 index 0000000..6fe13f5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/tasks.pyi @@ -0,0 +1,77 @@ +import concurrent.futures +import sys +from typing import (Any, TypeVar, Set, Dict, List, TextIO, Union, Tuple, Generic, Callable, + Coroutine, Generator, Iterable, Awaitable, overload, Sequence, Iterator, + Optional) +from types import FrameType +from .events import AbstractEventLoop +from .futures import Future + +__all__: List[str] + +_T = TypeVar('_T') +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_FutureT = Union[Future[_T], Generator[Any, None, _T], Awaitable[_T]] + +FIRST_EXCEPTION: str +FIRST_COMPLETED: str +ALL_COMPLETED: str + +def as_completed(fs: Sequence[_FutureT[_T]], *, loop: AbstractEventLoop = ..., + timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... +def ensure_future(coro_or_future: _FutureT[_T], + *, loop: Optional[AbstractEventLoop] = ...) -> Future[_T]: ... +# Prior to Python 3.7 'async' was an alias for 'ensure_future'. +# It became a keyword in 3.7. +@overload +def gather(coro_or_future1: _FutureT[_T1], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + coro_or_future4: _FutureT[_T4], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def gather(coro_or_future1: _FutureT[_T1], coro_or_future2: _FutureT[_T2], coro_or_future3: _FutureT[_T3], + coro_or_future4: _FutureT[_T4], coro_or_future5: _FutureT[_T5], + *, loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def gather(coro_or_future1: _FutureT[Any], coro_or_future2: _FutureT[Any], coro_or_future3: _FutureT[Any], + coro_or_future4: _FutureT[Any], coro_or_future5: _FutureT[Any], coro_or_future6: _FutureT[Any], + *coros_or_futures: _FutureT[Any], + loop: AbstractEventLoop = ..., return_exceptions: bool = ...) -> Future[Tuple[Any, ...]]: ... +def run_coroutine_threadsafe(coro: _FutureT[_T], + loop: AbstractEventLoop) -> concurrent.futures.Future[_T]: ... +def shield(arg: _FutureT[_T], *, loop: AbstractEventLoop = ...) -> Future[_T]: ... +def sleep(delay: float, result: _T = ..., loop: AbstractEventLoop = ...) -> Future[_T]: ... +def wait(fs: Iterable[_FutureT[_T]], *, loop: AbstractEventLoop = ..., timeout: Optional[float] = ..., + return_when: str = ...) -> Future[Tuple[Set[Future[_T]], Set[Future[_T]]]]: ... +def wait_for(fut: _FutureT[_T], timeout: Optional[float], + *, loop: AbstractEventLoop = ...) -> Future[_T]: ... + +class Task(Future[_T], Generic[_T]): + @classmethod + def current_task(cls, loop: Optional[AbstractEventLoop] = ...) -> Task: ... + @classmethod + def all_tasks(cls, loop: Optional[AbstractEventLoop] = ...) -> Set[Task]: ... + def __init__(self, coro: Union[Generator[Any, None, _T], Awaitable[_T]], *, loop: AbstractEventLoop = ...) -> None: ... + def __repr__(self) -> str: ... + def get_stack(self, *, limit: int = ...) -> List[FrameType]: ... + def print_stack(self, *, limit: int = ..., file: TextIO = ...) -> None: ... + def cancel(self) -> bool: ... + def _step(self, value: Any = ..., exc: Exception = ...) -> None: ... + def _wakeup(self, future: Future[Any]) -> None: ... + +if sys.version_info >= (3, 7): + def all_tasks(loop: Optional[AbstractEventLoop] = ...) -> Set[Task]: ... + def create_task(coro: Union[Generator[Any, None, _T], Awaitable[_T]]) -> Task: ... + def current_task(loop: Optional[AbstractEventLoop] = ...) -> Optional[Task]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi new file mode 100644 index 0000000..9ea6688 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/asyncio/transports.pyi @@ -0,0 +1,38 @@ +from typing import Dict, Any, TypeVar, Mapping, List, Optional, Tuple + +__all__: List[str] + +class BaseTransport: + def __init__(self, extra: Mapping[Any, Any] = ...) -> None: ... + def get_extra_info(self, name: Any, default: Any = ...) -> Any: ... + def is_closing(self) -> bool: ... + def close(self) -> None: ... + +class ReadTransport(BaseTransport): + def pause_reading(self) -> None: ... + def resume_reading(self) -> None: ... + +class WriteTransport(BaseTransport): + def set_write_buffer_limits( + self, high: int = ..., low: int = ... + ) -> None: ... + def get_write_buffer_size(self) -> int: ... + def write(self, data: Any) -> None: ... + def writelines(self, list_of_data: List[Any]) -> None: ... + def write_eof(self) -> None: ... + def can_write_eof(self) -> bool: ... + def abort(self) -> None: ... + +class Transport(ReadTransport, WriteTransport): ... + +class DatagramTransport(BaseTransport): + def sendto(self, data: Any, addr: Optional[Tuple[str, int]] = ...) -> None: ... + def abort(self) -> None: ... + +class SubprocessTransport(BaseTransport): + def get_pid(self) -> int: ... + def get_returncode(self) -> int: ... + def get_pipe_transport(self, fd: int) -> BaseTransport: ... + def send_signal(self, signal: int) -> int: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/atexit.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/atexit.pyi new file mode 100644 index 0000000..24f9389 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/atexit.pyi @@ -0,0 +1,9 @@ +"""Stub file for the 'atexit' module.""" + +from typing import Any, Callable + +def _clear() -> None: ... +def _ncallbacks() -> int: ... +def _run_exitfuncs() -> None: ... +def register(func: Callable[..., Any], *args: Any, **kwargs: Any) -> Callable[..., Any]: ... +def unregister(func: Callable[..., Any]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi new file mode 100644 index 0000000..524ff6f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/__init__.pyi @@ -0,0 +1,348 @@ +# These are not exported. +import sys +import typing +from typing import ( + TypeVar, Generic, Dict, overload, List, Tuple, + Any, Type, Optional, Union +) +# These are exported. +from . import abc + +from typing import ( + Callable as Callable, + Container as Container, + Hashable as Hashable, + Iterable as Iterable, + Iterator as Iterator, + Sized as Sized, + Generator as Generator, + ByteString as ByteString, + Reversible as Reversible, + Mapping as Mapping, + MappingView as MappingView, + ItemsView as ItemsView, + KeysView as KeysView, + ValuesView as ValuesView, + MutableMapping as MutableMapping, + Sequence as Sequence, + MutableSequence as MutableSequence, + MutableSet as MutableSet, + AbstractSet as Set, +) +if sys.version_info >= (3, 6): + from typing import ( + Collection as Collection, + AsyncGenerator as AsyncGenerator, + ) +if sys.version_info >= (3, 5): + from typing import ( + Awaitable as Awaitable, + Coroutine as Coroutine, + AsyncIterable as AsyncIterable, + AsyncIterator as AsyncIterator, + ) + +_S = TypeVar('_S') +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + + +# namedtuple is special-cased in the type checker; the initializer is ignored. +if sys.version_info >= (3, 7): + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], *, + rename: bool = ..., module: Optional[str] = ..., defaults: Optional[Iterable[Any]] = ...) -> Type[tuple]: ... +elif sys.version_info >= (3, 6): + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], *, + verbose: bool = ..., rename: bool = ..., module: Optional[str] = ...) -> Type[tuple]: ... +else: + def namedtuple(typename: str, field_names: Union[str, Iterable[str]], + verbose: bool = ..., rename: bool = ...) -> Type[tuple]: ... + +_UserDictT = TypeVar('_UserDictT', bound=UserDict) + +class UserDict(MutableMapping[_KT, _VT]): + data: Dict[_KT, _VT] + def __init__(self, dict: Optional[Mapping[_KT, _VT]] = ..., **kwargs: _VT) -> None: ... + def __len__(self) -> int: ... + def __getitem__(self, key: _KT) -> _VT: ... + def __setitem__(self, key: _KT, item: _VT) -> None: ... + def __delitem__(self, key: _KT) -> None: ... + def __iter__(self) -> Iterator[_KT]: ... + def __contains__(self, key: object) -> bool: ... + def copy(self: _UserDictT) -> _UserDictT: ... + @classmethod + def fromkeys(cls: Type[_UserDictT], iterable: Iterable[_KT], value: Optional[_VT] = ...) -> _UserDictT: ... + +_UserListT = TypeVar('_UserListT', bound=UserList) + +class UserList(MutableSequence[_T]): + data: List[_T] + def __init__(self, initlist: Optional[Iterable[_T]] = ...) -> None: ... + def __lt__(self, other: object) -> bool: ... + def __le__(self, other: object) -> bool: ... + def __gt__(self, other: object) -> bool: ... + def __ge__(self, other: object) -> bool: ... + def __contains__(self, item: object) -> bool: ... + def __len__(self) -> int: ... + @overload + def __getitem__(self, i: int) -> _T: ... + @overload + def __getitem__(self, i: slice) -> MutableSequence[_T]: ... + @overload + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + def __setitem__(self, i: slice, o: Iterable[_T]) -> None: ... + def __delitem__(self, i: Union[int, slice]) -> None: ... + def __add__(self: _UserListT, other: Iterable[_T]) -> _UserListT: ... + def __iadd__(self: _UserListT, other: Iterable[_T]) -> _UserListT: ... + def __mul__(self: _UserListT, n: int) -> _UserListT: ... + def __imul__(self: _UserListT, n: int) -> _UserListT: ... + def append(self, item: _T) -> None: ... + def insert(self, i: int, item: _T) -> None: ... + def pop(self, i: int = ...) -> _T: ... + def remove(self, item: _T) -> None: ... + def clear(self) -> None: ... + def copy(self: _UserListT) -> _UserListT: ... + def count(self, item: _T) -> int: ... + def index(self, item: _T, *args: Any) -> int: ... + def reverse(self) -> None: ... + def sort(self, *args: Any, **kwds: Any) -> None: ... + def extend(self, other: Iterable[_T]) -> None: ... + +_UserStringT = TypeVar('_UserStringT', bound=UserString) + +class UserString(Sequence[str]): + data: str + def __init__(self, seq: object) -> None: ... + def __int__(self) -> int: ... + def __float__(self) -> float: ... + def __complex__(self) -> complex: ... + if sys.version_info >= (3, 5): + def __getnewargs__(self) -> Tuple[str]: ... + def __lt__(self, string: Union[str, UserString]) -> bool: ... + def __le__(self, string: Union[str, UserString]) -> bool: ... + def __gt__(self, string: Union[str, UserString]) -> bool: ... + def __ge__(self, string: Union[str, UserString]) -> bool: ... + def __contains__(self, char: object) -> bool: ... + def __len__(self) -> int: ... + # It should return a str to implement Sequence correctly, but it doesn't. + def __getitem__(self: _UserStringT, i: Union[int, slice]) -> _UserStringT: ... # type: ignore + def __add__(self: _UserStringT, other: object) -> _UserStringT: ... + def __mul__(self: _UserStringT, n: int) -> _UserStringT: ... + def __mod__(self: _UserStringT, args: Any) -> _UserStringT: ... + def capitalize(self: _UserStringT) -> _UserStringT: ... + if sys.version_info >= (3, 5): + def casefold(self: _UserStringT) -> _UserStringT: ... + def center(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def count(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def encode(self: _UserStringT, encoding: Optional[str] = ..., errors: Optional[str] = ...) -> _UserStringT: ... + def endswith(self, suffix: Union[str, Tuple[str, ...]], start: int = ..., end: int = ...) -> bool: ... + def expandtabs(self: _UserStringT, tabsize: int = ...) -> _UserStringT: ... + def find(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def format(self, *args: Any, **kwds: Any) -> str: ... + if sys.version_info >= (3, 5): + def format_map(self, mapping: Mapping[str, Any]) -> str: ... + def index(self, sub: str, start: int = ..., end: int = ...) -> int: ... + def isalpha(self) -> bool: ... + def isalnum(self) -> bool: ... + def isdecimal(self) -> bool: ... + def isdigit(self) -> bool: ... + def isidentifier(self) -> bool: ... + def islower(self) -> bool: ... + def isnumeric(self) -> bool: ... + if sys.version_info >= (3, 5): + def isprintable(self) -> bool: ... + def isspace(self) -> bool: ... + def istitle(self) -> bool: ... + def isupper(self) -> bool: ... + def join(self, seq: Iterable[str]) -> str: ... + def ljust(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def lower(self: _UserStringT) -> _UserStringT: ... + def lstrip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + if sys.version_info >= (3, 5): + @staticmethod + @overload + def maketrans(x: Union[Dict[int, _T], Dict[str, _T], Dict[Union[str, int], _T]]) -> Dict[int, _T]: ... + @staticmethod + @overload + def maketrans(x: str, y: str, z: str = ...) -> Dict[int, Union[int, None]]: ... + def partition(self, sep: str) -> Tuple[str, str, str]: ... + def replace(self: _UserStringT, old: Union[str, UserString], new: Union[str, UserString], maxsplit: int = ...) -> _UserStringT: ... + def rfind(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def rindex(self, sub: Union[str, UserString], start: int = ..., end: int = ...) -> int: ... + def rjust(self: _UserStringT, width: int, *args: Any) -> _UserStringT: ... + def rpartition(self, sep: str) -> Tuple[str, str, str]: ... + def rstrip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + def split(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def rsplit(self, sep: Optional[str] = ..., maxsplit: int = ...) -> List[str]: ... + def splitlines(self, keepends: bool = ...) -> List[str]: ... + def startswith(self, prefix: Union[str, Tuple[str, ...]], start: int = ..., end: int = ...) -> bool: ... + def strip(self: _UserStringT, chars: Optional[str] = ...) -> _UserStringT: ... + def swapcase(self: _UserStringT) -> _UserStringT: ... + def title(self: _UserStringT) -> _UserStringT: ... + def translate(self: _UserStringT, *args: Any) -> _UserStringT: ... + def upper(self: _UserStringT) -> _UserStringT: ... + def zfill(self: _UserStringT, width: int) -> _UserStringT: ... + + +# Technically, deque only derives from MutableSequence in 3.5 (before then, the insert and index +# methods did not exist). +# But in practice it's not worth losing sleep over. +class deque(MutableSequence[_T], Generic[_T]): + @property + def maxlen(self) -> Optional[int]: ... + def __init__(self, iterable: Iterable[_T] = ..., + maxlen: Optional[int] = ...) -> None: ... + def append(self, x: _T) -> None: ... + def appendleft(self, x: _T) -> None: ... + def clear(self) -> None: ... + if sys.version_info >= (3, 5): + def copy(self) -> deque[_T]: ... + def count(self, x: _T) -> int: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def extendleft(self, iterable: Iterable[_T]) -> None: ... + def insert(self, i: int, x: _T) -> None: ... + def index(self, x: _T, start: int = ..., stop: int = ...) -> int: ... + def pop(self, i: int = ...) -> _T: ... + def popleft(self) -> _T: ... + def remove(self, value: _T) -> None: ... + def reverse(self) -> None: ... + def rotate(self, n: int) -> None: ... + + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[_T]: ... + def __str__(self) -> str: ... + def __hash__(self) -> int: ... + + # These methods of deque don't really take slices, but we need to + # define them as taking a slice to satisfy MutableSequence. + @overload + def __getitem__(self, index: int) -> _T: ... + @overload + def __getitem__(self, s: slice) -> MutableSequence[_T]: + raise TypeError + @overload + def __setitem__(self, i: int, x: _T) -> None: ... + @overload + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: + raise TypeError + @overload + def __delitem__(self, i: int) -> None: ... + @overload + def __delitem__(self, s: slice) -> None: + raise TypeError + + def __contains__(self, o: object) -> bool: ... + def __reversed__(self) -> Iterator[_T]: ... + + def __iadd__(self: _S, iterable: Iterable[_T]) -> _S: ... + + if sys.version_info >= (3, 5): + def __add__(self, other: deque[_T]) -> deque[_T]: ... + def __mul__(self, other: int) -> deque[_T]: ... + def __imul__(self, other: int) -> None: ... + +_CounterT = TypeVar('_CounterT', bound=Counter) + +class Counter(Dict[_T, int], Generic[_T]): + @overload + def __init__(self, **kwargs: int) -> None: ... + @overload + def __init__(self, mapping: Mapping[_T, int]) -> None: ... + @overload + def __init__(self, iterable: Iterable[_T]) -> None: ... + def copy(self: _CounterT) -> _CounterT: ... + def elements(self) -> Iterator[_T]: ... + + def most_common(self, n: Optional[int] = ...) -> List[Tuple[_T, int]]: ... + + @overload + def subtract(self, __mapping: Mapping[_T, int]) -> None: ... + @overload + def subtract(self, iterable: Iterable[_T]) -> None: ... + + # The Iterable[Tuple[...]] argument type is not actually desirable + # (the tuples will be added as keys, breaking type safety) but + # it's included so that the signature is compatible with + # Dict.update. Not sure if we should use '# type: ignore' instead + # and omit the type from the union. + @overload + def update(self, __m: Mapping[_T, int], **kwargs: int) -> None: ... + @overload + def update(self, __m: Union[Iterable[_T], Iterable[Tuple[_T, int]]], **kwargs: int) -> None: ... + @overload + def update(self, **kwargs: int) -> None: ... + + def __add__(self, other: Counter[_T]) -> Counter[_T]: ... + def __sub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __and__(self, other: Counter[_T]) -> Counter[_T]: ... + def __or__(self, other: Counter[_T]) -> Counter[_T]: ... + def __pos__(self) -> Counter[_T]: ... + def __neg__(self) -> Counter[_T]: ... + def __iadd__(self, other: Counter[_T]) -> Counter[_T]: ... + def __isub__(self, other: Counter[_T]) -> Counter[_T]: ... + def __iand__(self, other: Counter[_T]) -> Counter[_T]: ... + def __ior__(self, other: Counter[_T]) -> Counter[_T]: ... + +_OrderedDictT = TypeVar('_OrderedDictT', bound=OrderedDict) + +class _OrderedDictKeysView(KeysView[_KT], Reversible[_KT]): + def __reversed__(self) -> Iterator[_KT]: ... +class _OrderedDictItemsView(ItemsView[_KT, _VT], Reversible[Tuple[_KT, _VT]]): + def __reversed__(self) -> Iterator[Tuple[_KT, _VT]]: ... +class _OrderedDictValuesView(ValuesView[_VT], Reversible[_VT]): + def __reversed__(self) -> Iterator[_VT]: ... + +class OrderedDict(Dict[_KT, _VT], Reversible[_KT], Generic[_KT, _VT]): + def popitem(self, last: bool = ...) -> Tuple[_KT, _VT]: ... + def move_to_end(self, key: _KT, last: bool = ...) -> None: ... + def copy(self: _OrderedDictT) -> _OrderedDictT: ... + def __reversed__(self) -> Iterator[_KT]: ... + def keys(self) -> _OrderedDictKeysView[_KT]: ... + def items(self) -> _OrderedDictItemsView[_KT, _VT]: ... + def values(self) -> _OrderedDictValuesView[_VT]: ... + +_DefaultDictT = TypeVar('_DefaultDictT', bound=defaultdict) + +class defaultdict(Dict[_KT, _VT], Generic[_KT, _VT]): + default_factory: Optional[Callable[[], _VT]] + + @overload + def __init__(self, **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]]) -> None: ... + @overload + def __init__(self, default_factory: Optional[Callable[[], _VT]], + iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + def __missing__(self, key: _KT) -> _VT: ... + # TODO __reversed__ + def copy(self: _DefaultDictT) -> _DefaultDictT: ... + +class ChainMap(MutableMapping[_KT, _VT], Generic[_KT, _VT]): + def __init__(self, *maps: Mapping[_KT, _VT]) -> None: ... + + @property + def maps(self) -> List[Mapping[_KT, _VT]]: ... + + def new_child(self, m: Mapping[_KT, _VT] = ...) -> typing.ChainMap[_KT, _VT]: ... + + @property + def parents(self) -> typing.ChainMap[_KT, _VT]: ... + + def __setitem__(self, k: _KT, v: _VT) -> None: ... + def __delitem__(self, v: _KT) -> None: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __iter__(self) -> Iterator[_KT]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi new file mode 100644 index 0000000..a957728 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/collections/abc.pyi @@ -0,0 +1,40 @@ +# Stubs for collections.abc (introduced from Python 3.3) +# +# https://docs.python.org/3.3/whatsnew/3.3.html#collections +import sys + +from . import ( + Container as Container, + Hashable as Hashable, + Iterable as Iterable, + Iterator as Iterator, + Sized as Sized, + Callable as Callable, + Mapping as Mapping, + MutableMapping as MutableMapping, + Sequence as Sequence, + MutableSequence as MutableSequence, + Set as Set, + MutableSet as MutableSet, + MappingView as MappingView, + ItemsView as ItemsView, + KeysView as KeysView, + ValuesView as ValuesView, +) + +if sys.version_info >= (3, 5): + from . import ( + Generator as Generator, + ByteString as ByteString, + Awaitable as Awaitable, + Coroutine as Coroutine, + AsyncIterable as AsyncIterable, + AsyncIterator as AsyncIterator, + ) + +if sys.version_info >= (3, 6): + from . import ( + Collection as Collection, + Reversible as Reversible, + AsyncGenerator as AsyncGenerator, + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/compileall.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/compileall.pyi new file mode 100644 index 0000000..8d2731c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/compileall.pyi @@ -0,0 +1,20 @@ +# Stubs for compileall (Python 3) + +import os +import sys +from typing import Optional, Union, Pattern + +if sys.version_info < (3, 6): + _Path = Union[str, bytes] + _SuccessType = bool +else: + _Path = Union[str, bytes, os.PathLike] + _SuccessType = int + +# rx can be any object with a 'search' method; once we have Protocols we can change the type +if sys.version_info < (3, 5): + def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... +else: + def compile_dir(dir: _Path, maxlevels: int = ..., ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ..., workers: int = ...) -> _SuccessType: ... +def compile_file(fullname: _Path, ddir: Optional[_Path] = ..., force: bool = ..., rx: Optional[Pattern] = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... +def compile_path(skip_curdir: bool = ..., maxlevels: int = ..., force: bool = ..., quiet: int = ..., legacy: bool = ..., optimize: int = ...) -> _SuccessType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi new file mode 100644 index 0000000..4439dca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/__init__.pyi @@ -0,0 +1,3 @@ +from ._base import * # noqa: F403 +from .thread import * # noqa: F403 +from .process import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi new file mode 100644 index 0000000..95189a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/_base.pyi @@ -0,0 +1,56 @@ +from typing import TypeVar, Generic, Any, Iterable, Iterator, Callable, Tuple, Optional, Set, NamedTuple +from types import TracebackType +import sys + +FIRST_COMPLETED: str +FIRST_EXCEPTION: str +ALL_COMPLETED: str +PENDING: Any +RUNNING: Any +CANCELLED: Any +CANCELLED_AND_NOTIFIED: Any +FINISHED: Any +LOGGER: Any + +class Error(Exception): ... +class CancelledError(Error): ... +class TimeoutError(Error): ... + +_T = TypeVar('_T') + +class Future(Generic[_T]): + def __init__(self) -> None: ... + def cancel(self) -> bool: ... + def cancelled(self) -> bool: ... + def running(self) -> bool: ... + def done(self) -> bool: ... + def add_done_callback(self, fn: Callable[[Future[_T]], Any]) -> None: ... + def result(self, timeout: Optional[float] = ...) -> _T: ... + def set_running_or_notify_cancel(self) -> bool: ... + def set_result(self, result: _T) -> None: ... + + if sys.version_info >= (3,): + def exception(self, timeout: Optional[float] = ...) -> Optional[BaseException]: ... + def set_exception(self, exception: Optional[BaseException]) -> None: ... + else: + def exception(self, timeout: Optional[float] = ...) -> Any: ... + def exception_info(self, timeout: Optional[float] = ...) -> Tuple[Any, Optional[TracebackType]]: ... + def set_exception(self, exception: Any) -> None: ... + def set_exception_info(self, exception: Any, traceback: Optional[TracebackType]) -> None: ... + + +class Executor: + def submit(self, fn: Callable[..., _T], *args: Any, **kwargs: Any) -> Future[_T]: ... + if sys.version_info >= (3, 5): + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ..., + chunksize: int = ...) -> Iterator[_T]: ... + else: + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ...,) -> Iterator[_T]: ... + def shutdown(self, wait: bool = ...) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool: ... + +def as_completed(fs: Iterable[Future[_T]], timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... + +def wait(fs: Iterable[Future[_T]], timeout: Optional[float] = ..., return_when: str = ...) -> Tuple[Set[Future[_T]], + Set[Future[_T]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi new file mode 100644 index 0000000..ba0cd61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/process.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Future, Executor +import sys + +EXTRA_QUEUED_CALLS: Any + +if sys.version_info >= (3,): + class BrokenProcessPool(RuntimeError): ... + +if sys.version_info >= (3, 7): + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... +else: + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi new file mode 100644 index 0000000..983594d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/concurrent/futures/thread.pyi @@ -0,0 +1,15 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Executor, Future +import sys + +class ThreadPoolExecutor(Executor): + if sys.version_info >= (3, 7): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... + elif sys.version_info >= (3, 6) or sys.version_info < (3,): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ...) -> None: ... + else: + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/configparser.pyi new file mode 100644 index 0000000..17501c1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/configparser.pyi @@ -0,0 +1,234 @@ +# Based on http://docs.python.org/3.5/library/configparser.html and on +# reading configparser.py. + +import sys +from typing import (AbstractSet, MutableMapping, Mapping, Dict, Sequence, List, + Union, Iterable, Iterator, Callable, Any, IO, overload, + Optional, Pattern, Type, TypeVar) +# Types only used in type comments only +from typing import Optional, Tuple # noqa + +if sys.version_info >= (3, 6): + from os import PathLike + +# Internal type aliases +_section = Mapping[str, str] +_parser = MutableMapping[str, _section] +_converter = Callable[[str], Any] +_converters = Dict[str, _converter] +_T = TypeVar('_T') + +if sys.version_info >= (3, 7): + _Path = Union[str, bytes, PathLike[str]] +elif sys.version_info >= (3, 6): + _Path = Union[str, PathLike[str]] +else: + _Path = str + +DEFAULTSECT: str +MAX_INTERPOLATION_DEPTH: int + +class Interpolation: + def before_get(self, parser: _parser, + section: str, + option: str, + value: str, + defaults: _section) -> str: ... + + def before_set(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + def before_read(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + def before_write(self, parser: _parser, + section: str, + option: str, + value: str) -> str: ... + + +class BasicInterpolation(Interpolation): ... +class ExtendedInterpolation(Interpolation): ... +class LegacyInterpolation(Interpolation): ... + + +class RawConfigParser(_parser): + def __init__(self, + defaults: Optional[_section] = ..., + dict_type: Type[Mapping[str, str]] = ..., + allow_no_value: bool = ..., + *, + delimiters: Sequence[str] = ..., + comment_prefixes: Sequence[str] = ..., + inline_comment_prefixes: Optional[Sequence[str]] = ..., + strict: bool = ..., + empty_lines_in_values: bool = ..., + default_section: str = ..., + interpolation: Optional[Interpolation] = ...) -> None: ... + + def __len__(self) -> int: ... + + def __getitem__(self, section: str) -> SectionProxy: ... + + def __setitem__(self, section: str, options: _section) -> None: ... + + def __delitem__(self, section: str) -> None: ... + + def __iter__(self) -> Iterator[str]: ... + + def defaults(self) -> _section: ... + + def sections(self) -> List[str]: ... + + def add_section(self, section: str) -> None: ... + + def has_section(self, section: str) -> bool: ... + + def options(self, section: str) -> List[str]: ... + + def has_option(self, section: str, option: str) -> bool: ... + + def read(self, filenames: Union[_Path, Iterable[_Path]], + encoding: Optional[str] = ...) -> List[str]: ... + def read_file(self, f: Iterable[str], source: Optional[str] = ...) -> None: ... + def read_string(self, string: str, source: str = ...) -> None: ... + def read_dict(self, dictionary: Mapping[str, Mapping[str, Any]], + source: str = ...) -> None: ... + def readfp(self, fp: Iterable[str], filename: Optional[str] = ...) -> None: ... + + # These get* methods are partially applied (with the same names) in + # SectionProxy; the stubs should be kept updated together + def getint(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: int = ...) -> int: ... + + def getfloat(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: float = ...) -> float: ... + + def getboolean(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: bool = ...) -> bool: ... + + def _get_conv(self, section: str, option: str, conv: Callable[[str], _T], *, raw: bool = ..., vars: Optional[_section] = ..., fallback: _T = ...) -> _T: ... + + # This is incompatible with MutableMapping so we ignore the type + @overload # type: ignore + def get(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ...) -> str: ... + + @overload # type: ignore + def get(self, section: str, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: _T) -> Union[str, _T]: ... + + @overload + def items(self, *, raw: bool = ..., vars: Optional[_section] = ...) -> AbstractSet[Tuple[str, SectionProxy]]: ... + + @overload + def items(self, section: str, raw: bool = ..., vars: Optional[_section] = ...) -> List[Tuple[str, str]]: ... + + def set(self, section: str, option: str, value: str) -> None: ... + + def write(self, + fileobject: IO[str], + space_around_delimiters: bool = ...) -> None: ... + + def remove_option(self, section: str, option: str) -> bool: ... + + def remove_section(self, section: str) -> bool: ... + + def optionxform(self, option: str) -> str: ... + + +class ConfigParser(RawConfigParser): + def __init__(self, + defaults: Optional[_section] = ..., + dict_type: Type[Mapping[str, str]] = ..., + allow_no_value: bool = ..., + delimiters: Sequence[str] = ..., + comment_prefixes: Sequence[str] = ..., + inline_comment_prefixes: Optional[Sequence[str]] = ..., + strict: bool = ..., + empty_lines_in_values: bool = ..., + default_section: str = ..., + interpolation: Optional[Interpolation] = ..., + converters: _converters = ...) -> None: ... + +class SafeConfigParser(ConfigParser): ... + +class SectionProxy(MutableMapping[str, str]): + def __init__(self, parser: RawConfigParser, name: str) -> None: ... + def __getitem__(self, key: str) -> str: ... + def __setitem__(self, key: str, value: str) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __contains__(self, key: object) -> bool: ... + def __len__(self) -> int: ... + def __iter__(self) -> Iterator[str]: ... + @property + def parser(self) -> RawConfigParser: ... + @property + def name(self) -> str: ... + def get(self, option: str, fallback: Optional[str] = ..., *, raw: bool = ..., vars: Optional[_section] = ..., **kwargs: Any) -> str: ... # type: ignore + + # These are partially-applied version of the methods with the same names in + # RawConfigParser; the stubs should be kept updated together + def getint(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: int = ...) -> int: ... + def getfloat(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: float = ...) -> float: ... + def getboolean(self, option: str, *, raw: bool = ..., vars: Optional[_section] = ..., fallback: bool = ...) -> bool: ... + + # SectionProxy can have arbitrary attributes when custon converters are used + def __getattr__(self, key: str) -> Callable[..., Any]: ... + +class ConverterMapping(MutableMapping[str, Optional[_converter]]): + GETTERCRE: Pattern + def __init__(self, parser: RawConfigParser) -> None: ... + def __getitem__(self, key: str) -> _converter: ... + def __setitem__(self, key: str, value: Optional[_converter]) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + + +class Error(Exception): ... + + +class NoSectionError(Error): ... + + +class DuplicateSectionError(Error): + section: str + source: Optional[str] + lineno: Optional[int] + + +class DuplicateOptionError(Error): + section: str + option: str + source: Optional[str] + lineno: Optional[int] + + +class NoOptionError(Error): + section: str + option: str + + +class InterpolationError(Error): + section: str + option: str + + +class InterpolationDepthError(InterpolationError): ... + + +class InterpolationMissingOptionError(InterpolationError): + reference: str + + +class InterpolationSyntaxError(InterpolationError): ... + + +class ParsingError(Error): + source: str + errors: Sequence[Tuple[int, str]] + + +class MissingSectionHeaderError(ParsingError): + lineno: int + line: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi new file mode 100644 index 0000000..a8d6df4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/__init__.pyi @@ -0,0 +1,12 @@ +import _curses +from _curses import * # noqa: F403 +from typing import TypeVar, Callable, Any, Sequence, Mapping + +_T = TypeVar('_T') + +LINES: int +COLS: int + +def initscr() -> _curses._CursesWindow: ... +def start_color() -> None: ... +def wrapper(func: Callable[..., _T], *arg: Any, **kwds: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi new file mode 100644 index 0000000..4033769 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/ascii.pyi @@ -0,0 +1,62 @@ +from typing import List, Union, overload, TypeVar + +_Ch = TypeVar('_Ch', str, int) + +NUL: int +SOH: int +STX: int +ETX: int +EOT: int +ENQ: int +ACK: int +BEL: int +BS: int +TAB: int +HT: int +LF: int +NL: int +VT: int +FF: int +CR: int +SO: int +SI: int +DLE: int +DC1: int +DC2: int +DC3: int +DC4: int +NAK: int +SYN: int +ETB: int +CAN: int +EM: int +SUB: int +ESC: int +FS: int +GS: int +RS: int +US: int +SP: int +DEL: int + +controlnames: List[int] + +def isalnum(c: Union[str, int]) -> bool: ... +def isalpha(c: Union[str, int]) -> bool: ... +def isascii(c: Union[str, int]) -> bool: ... +def isblank(c: Union[str, int]) -> bool: ... +def iscntrl(c: Union[str, int]) -> bool: ... +def isdigit(c: Union[str, int]) -> bool: ... +def isgraph(c: Union[str, int]) -> bool: ... +def islower(c: Union[str, int]) -> bool: ... +def isprint(c: Union[str, int]) -> bool: ... +def ispunct(c: Union[str, int]) -> bool: ... +def isspace(c: Union[str, int]) -> bool: ... +def isupper(c: Union[str, int]) -> bool: ... +def isxdigit(c: Union[str, int]) -> bool: ... +def isctrl(c: Union[str, int]) -> bool: ... +def ismeta(c: Union[str, int]) -> bool: ... +def ascii(c: _Ch) -> _Ch: ... +def ctrl(c: _Ch) -> _Ch: ... +def alt(c: _Ch) -> _Ch: ... +def unctrl(c: Union[str, int]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi new file mode 100644 index 0000000..90f70c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/panel.pyi @@ -0,0 +1,20 @@ +from _curses import _CursesWindow + +class _Curses_Panel: # type is (note the space in the class name) + def above(self) -> _Curses_Panel: ... + def below(self) -> _Curses_Panel: ... + def bottom(self) -> None: ... + def hidden(self) -> bool: ... + def hide(self) -> None: ... + def move(self, y: int, x: int) -> None: ... + def replace(self, win: _CursesWindow) -> None: ... + def set_userptr(self, obj: object) -> None: ... + def show(self) -> None: ... + def top(self) -> None: ... + def userptr(self) -> object: ... + def window(self) -> _CursesWindow: ... + +def bottom_panel() -> _Curses_Panel: ... +def new_panel(win: _CursesWindow) -> _Curses_Panel: ... +def top_panel() -> _Curses_Panel: ... +def update_panels() -> _Curses_Panel: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi new file mode 100644 index 0000000..a218564 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/curses/textpad.pyi @@ -0,0 +1,11 @@ +from _curses import _CursesWindow +from typing import Callable, Union + +def rectangle(win: _CursesWindow, uly: int, ulx: int, lry: int, lrx: int) -> None: ... + +class Textbox: + stripspaces: bool + def __init__(self, w: _CursesWindow, insert_mode: bool = ...) -> None: ... + def edit(self, validate: Callable[[int], int]) -> str: ... + def do_command(self, ch: Union[str, int]) -> None: ... + def gather(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi new file mode 100644 index 0000000..ec7c25b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/__init__.pyi @@ -0,0 +1,26 @@ +# Stubs for email (Python 3.4) + +from typing import Callable, Optional, IO +import sys +from email.message import Message +from email.policy import Policy + +def message_from_string(s: str, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_bytes(s: bytes, _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_file(fp: IO[str], _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... +def message_from_binary_file(fp: IO[bytes], _class: Callable[[], Message] = ..., *, policy: Policy = ...) -> Message: ... + +# Names in __all__ with no definition: +# base64mime +# charset +# encoders +# errors +# feedparser +# generator +# header +# iterators +# message +# mime +# parser +# quoprimime +# utils diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/charset.pyi new file mode 100644 index 0000000..3a6c19d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/charset.pyi @@ -0,0 +1,31 @@ +# Stubs for email.charset (Python 3.4) + +from typing import List, Optional, Iterator, Any + +QP: int # undocumented +BASE64: int # undocumented +SHORTEST: int # undocumented + +class Charset: + input_charset: str + header_encoding: int + body_encoding: int + output_charset: Optional[str] + input_codec: Optional[str] + output_codec: Optional[str] + def __init__(self, input_charset: str = ...) -> None: ... + def get_body_encoding(self) -> str: ... + def get_output_charset(self) -> Optional[str]: ... + def header_encode(self, string: str) -> str: ... + def header_encode_lines(self, string: str, + maxlengths: Iterator[int]) -> List[str]: ... + def body_encode(self, string: str) -> str: ... + def __str__(self) -> str: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +def add_charset(charset: str, header_enc: Optional[int] = ..., + body_enc: Optional[int] = ..., + output_charset: Optional[str] = ...) -> None: ... +def add_alias(alias: str, canonical: str) -> None: ... +def add_codec(charset: str, codecname: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi new file mode 100644 index 0000000..ed55ef6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/contentmanager.pyi @@ -0,0 +1,15 @@ +# Stubs for email.contentmanager (Python 3.4) + +from typing import Any, Callable +from email.message import Message + +class ContentManager: + def __init__(self) -> None: ... + def get_content(self, msg: Message, *args: Any, **kw: Any) -> Any: ... + def set_content(self, msg: Message, obj: Any, *args: Any, + **kw: Any) -> Any: ... + def add_get_handler(self, key: str, handler: Callable[..., Any]) -> None: ... + def add_set_handler(self, typekey: type, + handler: Callable[..., Any]) -> None: ... + +raw_data_manager: ContentManager diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi new file mode 100644 index 0000000..bb5c84c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/encoders.pyi @@ -0,0 +1,8 @@ +# Stubs for email.encoders (Python 3.4) + +from email.message import Message + +def encode_base64(msg: Message) -> None: ... +def encode_quopri(msg: Message) -> None: ... +def encode_7or8bit(msg: Message) -> None: ... +def encode_noop(msg: Message) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/errors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/errors.pyi new file mode 100644 index 0000000..77d9902 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/errors.pyi @@ -0,0 +1,19 @@ +# Stubs for email.errors (Python 3.4) + +class MessageError(Exception): ... +class MessageParseError(MessageError): ... +class HeaderParseError(MessageParseError): ... +class BoundaryError(MessageParseError): ... +class MultipartConversionError(MessageError, TypeError): ... + +class MessageDefect(ValueError): ... +class NoBoundaryInMultipartDefect(MessageDefect): ... +class StartBoundaryNotFoundDefect(MessageDefect): ... +class FirstHeaderLineIsContinuationDefect(MessageDefect): ... +class MisplacedEnvelopeHeaderDefect(MessageDefect): ... +class MalformedHeaderDefect(MessageDefect): ... +class MultipartInvariantViolationDefect(MessageDefect): ... +class InvalidBase64PaddingDefect(MessageDefect): ... +class InvalidBase64CharactersDefect(MessageDefect): ... +class CloseBoundaryNotFoundDefect(MessageDefect): ... +class MissingHeaderBodySeparatorDefect(MessageDefect): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi new file mode 100644 index 0000000..48d940b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/feedparser.pyi @@ -0,0 +1,18 @@ +# Stubs for email.feedparser (Python 3.4) + +from typing import Callable +import sys +from email.message import Message +from email.policy import Policy + +class FeedParser: + def __init__(self, _factory: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def feed(self, data: str) -> None: ... + def close(self) -> Message: ... + +class BytesFeedParser: + def __init__(self, _factory: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def feed(self, data: str) -> None: ... + def close(self) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/generator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/generator.pyi new file mode 100644 index 0000000..81e733b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/generator.pyi @@ -0,0 +1,27 @@ +# Stubs for email.generator (Python 3.4) + +from typing import TextIO, Optional +from email.message import Message +from email.policy import Policy + +class Generator: + def clone(self, fp: TextIO) -> Generator: ... + def write(self, s: str) -> None: ... + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, + policy: Policy = ...) -> None: ... + def flatten(self, msg: Message, unixfrom: bool = ..., + linesep: Optional[str] = ...) -> None: ... + +class BytesGenerator: + def clone(self, fp: TextIO) -> Generator: ... + def write(self, s: str) -> None: ... + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, + policy: Policy = ...) -> None: ... + def flatten(self, msg: Message, unixfrom: bool = ..., + linesep: Optional[str] = ...) -> None: ... + +class DecodedGenerator(Generator): + def __init__(self, outfp: TextIO, mangle_from_: bool = ..., + maxheaderlen: int = ..., *, fmt: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/header.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/header.pyi new file mode 100644 index 0000000..21b9995 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/header.pyi @@ -0,0 +1,25 @@ +# Stubs for email.header (Python 3.4) + +from typing import Union, Optional, Any, List, Tuple +from email.charset import Charset + +class Header: + def __init__(self, s: Union[bytes, str, None] = ..., + charset: Union[Charset, str, None] = ..., + maxlinelen: Optional[int] = ..., + header_name: Optional[str] = ..., continuation_ws: str = ..., + errors: str = ...) -> None: ... + def append(self, s: Union[bytes, str], + charset: Union[Charset, str, None] = ..., + errors: str = ...) -> None: ... + def encode(self, splitchars: str = ..., maxlinelen: Optional[int] = ..., + linesep: str = ...) -> str: ... + def __str__(self) -> str: ... + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +def decode_header(header: Union[Header, str]) -> List[Tuple[bytes, Optional[str]]]: ... +def make_header(decoded_seq: List[Tuple[bytes, Optional[str]]], + maxlinelen: Optional[int] = ..., + header_name: Optional[str] = ..., + continuation_ws: str = ...) -> Header: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi new file mode 100644 index 0000000..6af1abf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/headerregistry.pyi @@ -0,0 +1,97 @@ +# Stubs for email.headerregistry (Python 3.4) + +from datetime import datetime as _datetime +from typing import Dict, Tuple, Optional, Any, Union, Mapping +from email.errors import MessageDefect +from email.policy import Policy + +class BaseHeader(str): + @property + def name(self) -> str: ... + @property + def defects(self) -> Tuple[MessageDefect, ...]: ... + @property + def max_count(self) -> Optional[int]: ... + def __new__(cls, name: str, value: Any) -> BaseHeader: ... + def init(self, *args: Any, **kw: Any) -> None: ... + def fold(self, *, policy: Policy) -> str: ... + +class UnstructuredHeader: + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class UniqueUnstructuredHeader(UnstructuredHeader): ... + +class DateHeader: + datetime: _datetime + @classmethod + def parse(cls, string: Union[str, _datetime], + kwds: Dict[str, Any]) -> None: ... + +class UniqueDateHeader(DateHeader): ... + +class AddressHeader: + groups: Tuple[Group, ...] + addresses: Tuple[Address, ...] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class UniqueAddressHeader(AddressHeader): ... + +class SingleAddressHeader(AddressHeader): + @property + def address(self) -> Address: ... + +class UniqueSingleAddressHeader(SingleAddressHeader): ... + +class MIMEVersionHeader: + version: Optional[str] + major: Optional[int] + minor: Optional[int] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class ParameterizedMIMEHeader: + params: Mapping[str, Any] + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class ContentTypeHeader(ParameterizedMIMEHeader): + content_type: str + maintype: str + subtype: str + +class ContentDispositionHeader(ParameterizedMIMEHeader): + content_disposition: str + +class ContentTransferEncodingHeader: + cte: str + @classmethod + def parse(cls, string: str, kwds: Dict[str, Any]) -> None: ... + +class HeaderRegistry: + def __init__(self, base_class: BaseHeader = ..., + default_class: BaseHeader = ..., + use_default_map: bool = ...) -> None: ... + def map_to_type(self, name: str, cls: BaseHeader) -> None: ... + def __getitem__(self, name: str) -> BaseHeader: ... + def __call__(self, name: str, value: Any) -> BaseHeader: ... + +class Address: + display_name: str + username: str + domain: str + @property + def addr_spec(self) -> str: ... + def __init__(self, display_name: str = ..., + username: Optional[str] = ..., + domain: Optional[str] = ..., + addr_spec: Optional[str] = ...) -> None: ... + def __str__(self) -> str: ... + +class Group: + display_name: Optional[str] + addresses: Tuple[Address, ...] + def __init__(self, display_name: Optional[str] = ..., + addresses: Optional[Tuple[Address, ...]] = ...) -> None: ... + def __str__(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi new file mode 100644 index 0000000..6a69f39 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/iterators.pyi @@ -0,0 +1,8 @@ +# Stubs for email.iterators (Python 3.4) + +from typing import Iterator, Optional +from email.message import Message + +def body_line_iterator(msg: Message, decode: bool = ...) -> Iterator[str]: ... +def typed_subpart_iterator(msg: Message, maintype: str = ..., + subtype: Optional[str] = ...) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/message.pyi new file mode 100644 index 0000000..09fbdda --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/message.pyi @@ -0,0 +1,105 @@ +# Stubs for email.message (Python 3.4) + +from typing import ( + List, Optional, Union, Tuple, TypeVar, Generator, Sequence, Iterator, Any +) +import sys +from email.charset import Charset +from email.errors import MessageDefect +from email.header import Header +from email.policy import Policy +from email.contentmanager import ContentManager + +_T = TypeVar('_T') + +_PayloadType = Union[List[Message], str, bytes] +_CharsetType = Union[Charset, str, None] +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] +_ParamType = Union[str, Tuple[Optional[str], Optional[str], str]] +_HeaderType = Union[str, Header] + +class Message: + preamble: Optional[str] + epilogue: Optional[str] + defects: List[MessageDefect] + def __str__(self) -> str: ... + def is_multipart(self) -> bool: ... + def set_unixfrom(self, unixfrom: str) -> None: ... + def get_unixfrom(self) -> Optional[str]: ... + def attach(self, payload: Message) -> None: ... + def get_payload(self, i: int = ..., decode: bool = ...) -> Optional[_PayloadType]: ... + def set_payload(self, payload: _PayloadType, + charset: _CharsetType = ...) -> None: ... + def set_charset(self, charset: _CharsetType) -> None: ... + def get_charset(self) -> _CharsetType: ... + def __len__(self) -> int: ... + def __contains__(self, name: str) -> bool: ... + def __getitem__(self, name: str) -> Optional[_HeaderType]: ... + def __setitem__(self, name: str, val: _HeaderType) -> None: ... + def __delitem__(self, name: str) -> None: ... + def keys(self) -> List[str]: ... + def values(self) -> List[_HeaderType]: ... + def items(self) -> List[Tuple[str, _HeaderType]]: ... + def get(self, name: str, failobj: _T = ...) -> Union[_HeaderType, _T]: ... + def get_all(self, name: str, failobj: _T = ...) -> Union[List[_HeaderType], _T]: ... + def add_header(self, _name: str, _value: str, **_params: _ParamsType) -> None: ... + def replace_header(self, _name: str, _value: _HeaderType) -> None: ... + def get_content_type(self) -> str: ... + def get_content_maintype(self) -> str: ... + def get_content_subtype(self) -> str: ... + def get_default_type(self) -> str: ... + def set_default_type(self, ctype: str) -> None: ... + def get_params(self, failobj: _T = ..., header: str = ..., + unquote: bool = ...) -> Union[List[Tuple[str, str]], _T]: ... + def get_param(self, param: str, failobj: _T = ..., header: str = ..., + unquote: bool = ...) -> Union[_T, _ParamType]: ... + def del_param(self, param: str, header: str = ..., + requote: bool = ...) -> None: ... + def set_type(self, type: str, header: str = ..., + requote: bool = ...) -> None: ... + def get_filename(self, failobj: _T = ...) -> Union[_T, str]: ... + def get_boundary(self, failobj: _T = ...) -> Union[_T, str]: ... + def set_boundary(self, boundary: str) -> None: ... + def get_content_charset(self, failobj: _T = ...) -> Union[_T, str]: ... + def get_charsets(self, failobj: _T = ...) -> Union[_T, List[str]]: ... + def walk(self) -> Generator[Message, None, None]: ... + if sys.version_info >= (3, 5): + def get_content_disposition(self) -> Optional[str]: ... + def as_string(self, unixfrom: bool = ..., maxheaderlen: int = ..., + policy: Optional[Policy] = ...) -> str: ... + def as_bytes(self, unixfrom: bool = ..., + policy: Optional[Policy] = ...) -> bytes: ... + def __bytes__(self) -> bytes: ... + def set_param(self, param: str, value: str, header: str = ..., + requote: bool = ..., charset: str = ..., + language: str = ..., replace: bool = ...) -> None: ... + def __init__(self, policy: Policy = ...) -> None: ... + +class MIMEPart(Message): + def get_body(self, + preferencelist: Sequence[str] = ...) -> Optional[Message]: ... + def iter_attachments(self) -> Iterator[Message]: ... + def iter_parts(self) -> Iterator[Message]: ... + def get_content(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> Any: ... + def set_content(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def make_related(self, boundary: Optional[str] = ...) -> None: ... + def make_alternative(self, boundary: Optional[str] = ...) -> None: ... + def make_mixed(self, boundary: Optional[str] = ...) -> None: ... + def add_related(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def add_alternative(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def add_attachment(self, *args: Any, + content_manager: Optional[ContentManager] = ..., + **kw: Any) -> None: ... + def clear(self) -> None: ... + def clear_content(self) -> None: ... + def is_attachment(self) -> bool: ... + +class EmailMessage(MIMEPart): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi new file mode 100644 index 0000000..1a40e28 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/application.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.application (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEApplication(MIMENonMultipart): + def __init__(self, _data: Union[str, bytes], _subtype: str = ..., + _encoder: Callable[[MIMEApplication], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi new file mode 100644 index 0000000..5bb57d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/audio.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.audio (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEAudio(MIMENonMultipart): + def __init__(self, _audiodata: Union[str, bytes], _subtype: Optional[str] = ..., + _encoder: Callable[[MIMEAudio], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi new file mode 100644 index 0000000..448d34b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/base.pyi @@ -0,0 +1,10 @@ +# Stubs for email.mime.base (Python 3.4) + +from typing import Optional, Tuple, Union +import email.message + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEBase(email.message.Message): + def __init__(self, _maintype: str, _subtype: str, + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi new file mode 100644 index 0000000..d32d9ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/image.pyi @@ -0,0 +1,11 @@ +# Stubs for email.mime.image (Python 3.4) + +from typing import Callable, Optional, Tuple, Union +from email.mime.nonmultipart import MIMENonMultipart + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEImage(MIMENonMultipart): + def __init__(self, _imagedata: Union[str, bytes], _subtype: Optional[str] = ..., + _encoder: Callable[[MIMEImage], None] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi new file mode 100644 index 0000000..561e8c3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/message.pyi @@ -0,0 +1,7 @@ +# Stubs for email.mime.message (Python 3.4) + +from email.message import Message +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEMessage(MIMENonMultipart): + def __init__(self, _msg: Message, _subtype: str = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi new file mode 100644 index 0000000..ea5eba1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/multipart.pyi @@ -0,0 +1,12 @@ +# Stubs for email.mime.multipart (Python 3.4) + +from typing import Optional, Sequence, Tuple, Union +from email.message import Message +from email.mime.base import MIMEBase + +_ParamsType = Union[str, None, Tuple[str, Optional[str], str]] + +class MIMEMultipart(MIMEBase): + def __init__(self, _subtype: str = ..., boundary: Optional[str] = ..., + _subparts: Optional[Sequence[Message]] = ..., + **_params: _ParamsType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi new file mode 100644 index 0000000..1fd3ea9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/nonmultipart.pyi @@ -0,0 +1,5 @@ +# Stubs for email.mime.nonmultipart (Python 3.4) + +from email.mime.base import MIMEBase + +class MIMENonMultipart(MIMEBase): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi new file mode 100644 index 0000000..73adaf5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/mime/text.pyi @@ -0,0 +1,8 @@ +# Stubs for email.mime.text (Python 3.4) + +from typing import Optional +from email.mime.nonmultipart import MIMENonMultipart + +class MIMEText(MIMENonMultipart): + def __init__(self, _text: str, _subtype: str = ..., + _charset: Optional[str] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/parser.pyi new file mode 100644 index 0000000..180e382 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/parser.pyi @@ -0,0 +1,33 @@ +# Stubs for email.parser (Python 3.4) + +import email.feedparser +from email.message import Message +from email.policy import Policy +from typing import BinaryIO, Callable, Optional, TextIO + +FeedParser = email.feedparser.FeedParser +BytesFeedParser = email.feedparser.BytesFeedParser + +class Parser: + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: TextIO, headersonly: bool = ...) -> Message: ... + def parsestr(self, text: str, headersonly: bool = ...) -> Message: ... + +class HeaderParser(Parser): + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: TextIO, headersonly: bool = ...) -> Message: ... + def parsestr(self, text: str, headersonly: bool = ...) -> Message: ... + +class BytesHeaderParser(BytesParser): + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: BinaryIO, headersonly: bool = ...) -> Message: ... + def parsebytes(self, text: bytes, headersonly: bool = ...) -> Message: ... + +class BytesParser: + def __init__(self, _class: Callable[[], Message] = ..., *, + policy: Policy = ...) -> None: ... + def parse(self, fp: BinaryIO, headersonly: bool = ...) -> Message: ... + def parsebytes(self, text: bytes, headersonly: bool = ...) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/policy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/policy.pyi new file mode 100644 index 0000000..e47e643 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/policy.pyi @@ -0,0 +1,64 @@ +# Stubs for email.policy (Python 3.4) + +from abc import abstractmethod +from typing import Any, List, Optional, Tuple, Union, Callable +import sys +from email.message import Message +from email.errors import MessageDefect +from email.header import Header +from email.contentmanager import ContentManager + +class Policy: + max_line_length: Optional[int] + linesep: str + cte_type: str + raise_on_defect: bool + if sys.version_info >= (3, 5): + mange_from: bool + def __init__(self, **kw: Any) -> None: ... + def clone(self, **kw: Any) -> Policy: ... + def handle_defect(self, obj: Message, + defect: MessageDefect) -> None: ... + def register_defect(self, obj: Message, + defect: MessageDefect) -> None: ... + def header_max_count(self, name: str) -> Optional[int]: ... + @abstractmethod + def header_source_parse(self, sourcelines: List[str]) -> str: ... + @abstractmethod + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + @abstractmethod + def header_fetch_parse(self, name: str, + value: str) -> str: ... + @abstractmethod + def fold(self, name: str, value: str) -> str: ... + @abstractmethod + def fold_binary(self, name: str, value: str) -> bytes: ... + +class Compat32(Policy): + def header_source_parse(self, sourcelines: List[str]) -> str: ... + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + def header_fetch_parse(self, name: str, value: str) -> Union[str, Header]: ... # type: ignore + def fold(self, name: str, value: str) -> str: ... + def fold_binary(self, name: str, value: str) -> bytes: ... + +compat32: Compat32 + +class EmailPolicy(Policy): + utf8: bool + refold_source: str + header_factory: Callable[[str, str], str] + content_manager: ContentManager + def header_source_parse(self, sourcelines: List[str]) -> str: ... + def header_store_parse(self, name: str, + value: str) -> Tuple[str, str]: ... + def header_fetch_parse(self, name: str, value: str) -> str: ... + def fold(self, name: str, value: str) -> str: ... + def fold_binary(self, name: str, value: str) -> bytes: ... + +default: EmailPolicy +SMTP: EmailPolicy +SMTPUTF8: EmailPolicy +HTTP: EmailPolicy +strict: EmailPolicy diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/utils.pyi new file mode 100644 index 0000000..6c0a183 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/email/utils.pyi @@ -0,0 +1,33 @@ +# Stubs for email.utils (Python 3.4) + +from typing import List, Optional, Tuple, Union +from email.charset import Charset +import datetime + +_ParamType = Union[str, Tuple[Optional[str], Optional[str], str]] +_PDTZ = Tuple[int, int, int, int, int, int, int, int, int, Optional[int]] + +def quote(str: str) -> str: ... +def unquote(str: str) -> str: ... +def parseaddr(address: Optional[str]) -> Tuple[str, str]: ... +def formataddr(pair: Tuple[Optional[str], str], + charset: Union[str, Charset] = ...) -> str: ... +def getaddresses(fieldvalues: List[str]) -> List[Tuple[str, str]]: ... +def parsedate(date: str) -> Optional[Tuple[int, int, int, int, int, int, int, int, int]]: ... +def parsedate_tz(date: str) -> Optional[_PDTZ]: ... +def parsedate_to_datetime(date: str) -> datetime.datetime: ... +def mktime_tz(tuple: _PDTZ) -> int: ... +def formatdate(timeval: Optional[float] = ..., localtime: bool = ..., + usegmt: bool = ...) -> str: ... +def format_datetime(dt: datetime.datetime, usegmt: bool = ...) -> str: ... +def localtime(dt: Optional[datetime.datetime] = ...) -> datetime.datetime: ... +def make_msgid(idstring: Optional[str] = ..., + domain: Optional[str] = ...) -> str: ... +def decode_rfc2231(s: str) -> Tuple[Optional[str], Optional[str], str]: ... +def encode_rfc2231(s: str, charset: Optional[str] = ..., + language: Optional[str] = ...) -> str: ... +def collapse_rfc2231_value(value: _ParamType, errors: str = ..., + fallback_charset: str = ...) -> str: ... +def decode_params( + params: List[Tuple[str, str]] +) -> List[Tuple[str, _ParamType]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi new file mode 100644 index 0000000..2ae6c0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/__init__.pyi @@ -0,0 +1,6 @@ +import codecs + +import typing + +def search_function(encoding: str) -> codecs.CodecInfo: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi new file mode 100644 index 0000000..d38bd58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/encodings/utf_8.pyi @@ -0,0 +1,15 @@ +import codecs +from typing import Text, Tuple + +class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input: Text, final: bool = ...) -> bytes: ... + +class IncrementalDecoder(codecs.BufferedIncrementalDecoder): + def _buffer_decode(self, input: bytes, errors: str, final: bool) -> Tuple[Text, int]: ... + +class StreamWriter(codecs.StreamWriter): ... +class StreamReader(codecs.StreamReader): ... + +def getregentry() -> codecs.CodecInfo: ... +def encode(input: Text, errors: Text = ...) -> bytes: ... +def decode(input: bytes, errors: Text = ...) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/enum.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/enum.pyi new file mode 100644 index 0000000..703c7cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/enum.pyi @@ -0,0 +1,77 @@ +# NB: third_party/2/enum.pyi and stdlib/3.4/enum.pyi must remain consistent! +import sys +from typing import Any, Dict, Iterator, List, Mapping, Type, TypeVar, Union +from abc import ABCMeta + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Type[Enum]) + +# Note: EnumMeta actually subclasses type directly, not ABCMeta. +# This is a temporary workaround to allow multiple creation of enums with builtins +# such as str as mixins, which due to the handling of ABCs of builtin types, cause +# spurious inconsistent metaclass structure. See #1595. +# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself +class EnumMeta(ABCMeta): + def __iter__(self: Type[_T]) -> Iterator[_T]: ... + def __reversed__(self: Type[_T]) -> Iterator[_T]: ... + def __contains__(self: Type[_T], member: object) -> bool: ... + def __getitem__(self: Type[_T], name: str) -> _T: ... + @property + def __members__(self: Type[_T]) -> Mapping[str, _T]: ... + def __len__(self) -> int: ... + +class Enum(metaclass=EnumMeta): + name: str + value: Any + _name_: str + _value_: Any + _member_names_: List[str] # undocumented + _member_map_: Dict[str, Enum] # undocumented + _value2member_map_: Dict[int, Enum] # undocumented + if sys.version_info >= (3, 7): + _ignore_: Union[str, List[str]] + if sys.version_info >= (3, 6): + _order_: str + @classmethod + def _missing_(cls, value: object) -> Any: ... + @staticmethod + def _generate_next_value_(name: str, start: int, count: int, last_values: List[Any]) -> Any: ... + def __new__(cls: Type[_T], value: object) -> _T: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __dir__(self) -> List[str]: ... + def __format__(self, format_spec: str) -> str: ... + def __hash__(self) -> Any: ... + def __reduce_ex__(self, proto: object) -> Any: ... + +class IntEnum(int, Enum): + value: int + +def unique(enumeration: _S) -> _S: ... + +if sys.version_info >= (3, 6): + _auto_null: Any + + # subclassing IntFlag so it picks up all implemented base functions, best modeling behavior of enum.auto() + class auto(IntFlag): + value: Any + + class Flag(Enum): + def __contains__(self: _T, other: _T) -> bool: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __bool__(self) -> bool: ... + def __or__(self: _T, other: _T) -> _T: ... + def __and__(self: _T, other: _T) -> _T: ... + def __xor__(self: _T, other: _T) -> _T: ... + def __invert__(self: _T) -> _T: ... + + # The `type: ignore` comment is needed because mypy considers the type + # signatures of several methods defined in int and Flag to be incompatible. + class IntFlag(int, Flag): # type: ignore + def __or__(self: _T, other: Union[int, _T]) -> _T: ... + def __and__(self: _T, other: Union[int, _T]) -> _T: ... + def __xor__(self: _T, other: Union[int, _T]) -> _T: ... + __ror__ = __or__ + __rand__ = __and__ + __rxor__ = __xor__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi new file mode 100644 index 0000000..1a87c9c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/faulthandler.pyi @@ -0,0 +1,23 @@ +import sys +from typing import Union, Protocol + + +class _HasFileno(Protocol): + def fileno(self) -> int: ... + + +if sys.version_info >= (3, 5): + _File = Union[_HasFileno, int] +else: + _File = _HasFileno + + +def cancel_dump_traceback_later() -> None: ... +def disable() -> None: ... +def dump_traceback(file: _File = ..., all_threads: bool = ...) -> None: ... +def dump_traceback_later(timeout: int, repeat: bool = ..., file: _File = ..., exit: bool = ...) -> None: ... +def enable(file: _File = ..., all_threads: bool = ...) -> None: ... +def is_enabled() -> bool: ... +if sys.platform != "win32": + def register(signum: int, file: _File = ..., all_threads: bool = ..., chain: bool = ...) -> None: ... + def unregister(signum: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fcntl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fcntl.pyi new file mode 100644 index 0000000..fdcb4fc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fcntl.pyi @@ -0,0 +1,96 @@ +# Stubs for fcntl +from io import IOBase +from typing import Any, IO, Union + +FASYNC: int +FD_CLOEXEC: int +DN_ACCESS: int +DN_ATTRIB: int +DN_CREATE: int +DN_DELETE: int +DN_MODIFY: int +DN_MULTISHOT: int +DN_RENAME: int +F_DUPFD: int +F_DUPFD_CLOEXEC: int +F_FULLFSYNC: int +F_EXLCK: int +F_GETFD: int +F_GETFL: int +F_GETLEASE: int +F_GETLK: int +F_GETLK64: int +F_GETOWN: int +F_NOCACHE: int +F_GETSIG: int +F_NOTIFY: int +F_RDLCK: int +F_SETFD: int +F_SETFL: int +F_SETLEASE: int +F_SETLK: int +F_SETLK64: int +F_SETLKW: int +F_SETLKW64: int +F_SETOWN: int +F_SETSIG: int +F_SHLCK: int +F_UNLCK: int +F_WRLCK: int +I_ATMARK: int +I_CANPUT: int +I_CKBAND: int +I_FDINSERT: int +I_FIND: int +I_FLUSH: int +I_FLUSHBAND: int +I_GETBAND: int +I_GETCLTIME: int +I_GETSIG: int +I_GRDOPT: int +I_GWROPT: int +I_LINK: int +I_LIST: int +I_LOOK: int +I_NREAD: int +I_PEEK: int +I_PLINK: int +I_POP: int +I_PUNLINK: int +I_PUSH: int +I_RECVFD: int +I_SENDFD: int +I_SETCLTIME: int +I_SETSIG: int +I_SRDOPT: int +I_STR: int +I_SWROPT: int +I_UNLINK: int +LOCK_EX: int +LOCK_MAND: int +LOCK_NB: int +LOCK_READ: int +LOCK_RW: int +LOCK_SH: int +LOCK_UN: int +LOCK_WRITE: int + +_AnyFile = Union[int, IO[Any], IOBase] + +# TODO All these return either int or bytes depending on the value of +# cmd (not on the type of arg). +def fcntl(fd: _AnyFile, + cmd: int, + arg: Union[int, bytes] = ...) -> Any: ... +# TODO This function accepts any object supporting a buffer interface, +# as arg, is there a better way to express this than bytes? +def ioctl(fd: _AnyFile, + request: int, + arg: Union[int, bytes] = ..., + mutate_flag: bool = ...) -> Any: ... +def flock(fd: _AnyFile, operation: int) -> None: ... +def lockf(fd: _AnyFile, + cmd: int, + len: int = ..., + start: int = ..., + whence: int = ...) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi new file mode 100644 index 0000000..4f99b4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/fnmatch.pyi @@ -0,0 +1,11 @@ +# Stubs for fnmatch + +# Based on http://docs.python.org/3.2/library/fnmatch.html and +# python-lib/fnmatch.py + +from typing import Iterable, List, AnyStr + +def fnmatch(name: AnyStr, pat: AnyStr) -> bool: ... +def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ... +def filter(names: Iterable[AnyStr], pat: AnyStr) -> List[AnyStr]: ... +def translate(pat: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/functools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/functools.pyi new file mode 100644 index 0000000..409e84b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/functools.pyi @@ -0,0 +1,143 @@ +import sys +from typing import Any, Callable, Generic, Dict, Iterable, Mapping, Optional, Sequence, Tuple, Type, TypeVar, NamedTuple, Union, overload + +_AnyCallable = Callable[..., Any] + +_T = TypeVar("_T") +_T2 = TypeVar("_T2") +_T3 = TypeVar("_T3") +_T4 = TypeVar("_T4") +_T5 = TypeVar("_T5") +_S = TypeVar("_S") +@overload +def reduce(function: Callable[[_T, _S], _T], + sequence: Iterable[_S], initial: _T) -> _T: ... +@overload +def reduce(function: Callable[[_T, _T], _T], + sequence: Iterable[_T]) -> _T: ... + + +class _CacheInfo(NamedTuple('CacheInfo', [ + ('hits', int), + ('misses', int), + ('maxsize', int), + ('currsize', int) +])): ... + +class _lru_cache_wrapper(Generic[_T]): + __wrapped__: Callable[..., _T] + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + def cache_info(self) -> _CacheInfo: ... + def cache_clear(self) -> None: ... + +class lru_cache(): + def __init__(self, maxsize: Optional[int] = ..., typed: bool = ...) -> None: ... + def __call__(self, f: Callable[..., _T]) -> _lru_cache_wrapper[_T]: ... + + +WRAPPER_ASSIGNMENTS: Sequence[str] +WRAPPER_UPDATES: Sequence[str] + +def update_wrapper(wrapper: _AnyCallable, wrapped: _AnyCallable, assigned: Sequence[str] = ..., + updated: Sequence[str] = ...) -> _AnyCallable: ... +def wraps(wrapped: _AnyCallable, assigned: Sequence[str] = ..., updated: Sequence[str] = ...) -> Callable[[_AnyCallable], _AnyCallable]: ... +def total_ordering(cls: type) -> type: ... +def cmp_to_key(mycmp: Callable[[_T, _T], int]) -> Callable[[_T], Any]: ... + +@overload +def partial(__func: Callable[[_T], _S], __arg: _T) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2], _S], __arg: _T) -> Callable[[_T2], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], __arg: _T) -> Callable[[_T2, _T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], __arg: _T) -> Callable[[_T2, _T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], __arg: _T) -> Callable[[_T2, _T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2) -> Callable[[_T3, _T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3) -> Callable[[_T4, _T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[], _S]: ... +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4) -> Callable[[_T5], _S]: ... + +@overload +def partial(__func: Callable[[_T, _T2, _T3, _T4, _T5], _S], + __arg1: _T, + __arg2: _T2, + __arg3: _T3, + __arg4: _T4, + __arg5: _T5) -> Callable[[], _S]: ... + +@overload +def partial(__func: Callable[..., _S], + *args: Any, + **kwargs: Any) -> Callable[..., _S]: ... + +# With protocols, this could change into a generic protocol that defines __get__ and returns _T +_Descriptor = Any + +class partialmethod(Generic[_T]): + func: Union[Callable[..., _T], _Descriptor] + args: Tuple[Any, ...] + keywords: Dict[str, Any] + + @overload + def __init__(self, func: Callable[..., _T], *args: Any, **keywords: Any) -> None: ... + @overload + def __init__(self, func: _Descriptor, *args: Any, **keywords: Any) -> None: ... + def __get__(self, obj: Any, cls: Type[Any]) -> Callable[..., _T]: ... + @property + def __isabstractmethod__(self) -> bool: ... + +class _SingleDispatchCallable(Generic[_T]): + registry: Mapping[Any, Callable[..., _T]] + def dispatch(self, cls: Any) -> Callable[..., _T]: ... + @overload + def register(self, cls: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + @overload + def register(self, cls: Any, func: Callable[..., _T]) -> Callable[..., _T]: ... + def _clear_cache(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + +def singledispatch(func: Callable[..., _T]) -> _SingleDispatchCallable[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gc.pyi new file mode 100644 index 0000000..d4bb109 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gc.pyi @@ -0,0 +1,28 @@ +# Stubs for gc + +from typing import Any, Dict, List, Tuple + + +DEBUG_COLLECTABLE: int +DEBUG_LEAK: int +DEBUG_SAVEALL: int +DEBUG_STATS: int +DEBUG_UNCOLLECTABLE: int +callbacks: List[Any] +garbage: List[Any] + +def collect(generations: int = ...) -> int: ... +def disable() -> None: ... +def enable() -> None: ... +def get_count() -> Tuple[int, int, int]: ... +def get_debug() -> int: ... +def get_objects() -> List[Any]: ... +def get_referents(*objs: Any) -> List[Any]: ... +def get_referrers(*objs: Any) -> List[Any]: ... +def get_stats() -> List[Dict[str, Any]]: ... +def get_threshold() -> Tuple[int, int, int]: ... +def is_tracked(obj: Any) -> bool: ... +def isenabled() -> bool: ... +def set_debug(flags: int) -> None: ... +def set_threshold(threshold0: int, threshold1: int = ..., + threshold2: int = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getopt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getopt.pyi new file mode 100644 index 0000000..0417a82 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getopt.pyi @@ -0,0 +1,14 @@ +# Stubs for getopt + +# Based on http://docs.python.org/3.2/library/getopt.html + +from typing import List, Tuple + +def getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... +def gnu_getopt(args: List[str], shortopts: str, longopts: List[str] = ...) -> Tuple[List[Tuple[str, str]], List[str]]: ... + +class GetoptError(Exception): + msg: str + opt: str + +error = GetoptError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getpass.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getpass.pyi new file mode 100644 index 0000000..55a8433 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/getpass.pyi @@ -0,0 +1,12 @@ +# Stubs for getpass + +from typing import Optional, TextIO + + +def getpass(prompt: str = ..., stream: Optional[TextIO] = ...) -> str: ... + + +def getuser() -> str: ... + + +class GetPassWarning(UserWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gettext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gettext.pyi new file mode 100644 index 0000000..eeb9b09 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gettext.pyi @@ -0,0 +1,44 @@ +# Stubs for gettext (Python 3.4) + +from typing import Any, IO, List, Optional, Union, Callable + +class NullTranslations: + def __init__(self, fp: IO[str] = ...) -> None: ... + def add_fallback(self, fallback: NullTranslations) -> None: ... + def gettext(self, message: str) -> str: ... + def lgettext(self, message: str) -> str: ... + def ngettext(self, singular: str, plural: str, n: int) -> str: ... + def lngettext(self, singular: str, plural: str, n: int) -> str: ... + def info(self) -> Any: ... + def charset(self) -> Any: ... + def output_charset(self) -> Any: ... + def set_output_charset(self, charset: Any) -> None: ... + def install(self, names: List[str] = ...) -> None: ... + +class GNUTranslations(NullTranslations): + LE_MAGIC: int + BE_MAGIC: int + +def find(domain: str, localedir: str = ..., languages: List[str] = ..., + all: bool = ...): ... + +def translation(domain: str, localedir: str = ..., languages: List[str] = ..., + class_: Callable[[IO[str]], NullTranslations] = ..., + fallback: bool = ..., codeset: Any = ...) -> NullTranslations: ... + +def install(domain: str, localedir: str = ..., codeset: Any = ..., + names: List[str] = ...): ... + +def textdomain(domain: str = ...) -> str: ... +def bindtextdomain(domain: str, localedir: str = ...) -> str: ... +def bind_textdomain_codeset(domain: str, codeset: str = ...) -> str: ... +def dgettext(domain: str, message: str) -> str: ... +def ldgettext(domain: str, message: str) -> str: ... +def dngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def ldngettext(domain: str, singular: str, plural: str, n: int) -> str: ... +def gettext(message: str) -> str: ... +def lgettext(message: str) -> str: ... +def ngettext(singular: str, plural: str, n: int) -> str: ... +def lngettext(singular: str, plural: str, n: int) -> str: ... + +Catalog = translation diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/glob.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/glob.pyi new file mode 100644 index 0000000..22ee205 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/glob.pyi @@ -0,0 +1,23 @@ +# Stubs for glob +# Based on http://docs.python.org/3/library/glob.html + +from typing import List, Iterator, AnyStr, Union +import sys + +if sys.version_info >= (3, 6): + def glob0(dirname: AnyStr, pattern: AnyStr) -> List[AnyStr]: ... +else: + def glob0(dirname: AnyStr, basename: AnyStr) -> List[AnyStr]: ... + +def glob1(dirname: AnyStr, pattern: AnyStr) -> List[AnyStr]: ... + +if sys.version_info >= (3, 5): + def glob(pathname: AnyStr, *, recursive: bool = ...) -> List[AnyStr]: ... + def iglob(pathname: AnyStr, *, recursive: bool = ...) -> Iterator[AnyStr]: ... +else: + def glob(pathname: AnyStr) -> List[AnyStr]: ... + def iglob(pathname: AnyStr) -> Iterator[AnyStr]: ... + +def escape(pathname: AnyStr) -> AnyStr: ... + +def has_magic(s: Union[str, bytes]) -> bool: ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gzip.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gzip.pyi new file mode 100644 index 0000000..6f1bf7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/gzip.pyi @@ -0,0 +1,49 @@ +from typing import Any, IO, Optional +from os.path import _PathType +import _compression +import zlib + +def open(filename, mode: str = ..., compresslevel: int = ..., encoding: Optional[str] = ..., errors: Optional[str] = ..., newline: Optional[str] = ...) -> IO[Any]: ... + +class _PaddedFile: + file: IO[bytes] + def __init__(self, f: IO[bytes], prepend: bytes = ...) -> None: ... + def read(self, size: int) -> bytes: ... + def prepend(self, prepend: bytes = ...) -> None: ... + def seek(self, off: int) -> int: ... + def seekable(self) -> bool: ... + +class GzipFile(_compression.BaseStream): + myfileobj: Optional[IO[bytes]] + mode: str + name: str + compress: zlib._Compress + fileobj: IO[bytes] + def __init__(self, filename: Optional[_PathType] = ..., mode: Optional[str] = ..., compresslevel: int = ..., fileobj: Optional[IO[bytes]] = ..., mtime: Optional[float] = ...) -> None: ... + @property + def filename(self) -> str: ... + @property + def mtime(self) -> Optional[int]: ... + crc: int + def write(self, data: bytes) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + def peek(self, n: int) -> bytes: ... + @property + def closed(self) -> bool: ... + def close(self) -> None: ... + def flush(self, zlib_mode: int = ...) -> None: ... + def fileno(self) -> int: ... + def rewind(self) -> None: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def readline(self, size: int = ...) -> bytes: ... + +class _GzipReader(_compression.DecompressReader): + def __init__(self, fp: IO[bytes]) -> None: ... + def read(self, size: int = ...) -> bytes: ... + +def compress(data, compresslevel: int = ...) -> bytes: ... +def decompress(data: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/hashlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/hashlib.pyi new file mode 100644 index 0000000..616bb0f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/hashlib.pyi @@ -0,0 +1,69 @@ +# Stubs for hashlib + +import sys +from typing import AbstractSet, Optional, Union + +_DataType = Union[bytes, bytearray, memoryview] + +class _Hash(object): + digest_size: int + block_size: int + + # [Python documentation note] Changed in version 3.4: The name attribute has + # been present in CPython since its inception, but until Python 3.4 was not + # formally specified, so may not exist on some platforms + name: str + + def __init__(self, data: _DataType = ...) -> None: ... + + def copy(self) -> _Hash: ... + def digest(self) -> bytes: ... + def hexdigest(self) -> str: ... + def update(self, arg: _DataType) -> None: ... + +def md5(arg: _DataType = ...) -> _Hash: ... +def sha1(arg: _DataType = ...) -> _Hash: ... +def sha224(arg: _DataType = ...) -> _Hash: ... +def sha256(arg: _DataType = ...) -> _Hash: ... +def sha384(arg: _DataType = ...) -> _Hash: ... +def sha512(arg: _DataType = ...) -> _Hash: ... + +def new(name: str, data: _DataType = ...) -> _Hash: ... + +algorithms_guaranteed: AbstractSet[str] +algorithms_available: AbstractSet[str] + +def pbkdf2_hmac(hash_name: str, password: _DataType, salt: _DataType, iterations: int, dklen: Optional[int] = ...) -> bytes: ... + +if sys.version_info >= (3, 6): + class _VarLenHash(object): + digest_size: int + block_size: int + name: str + + def __init__(self, data: _DataType = ...) -> None: ... + + def copy(self) -> _VarLenHash: ... + def digest(self, length: int) -> bytes: ... + def hexdigest(self, length: int) -> str: ... + def update(self, arg: _DataType) -> None: ... + + sha3_224 = _Hash + sha3_256 = _Hash + sha3_384 = _Hash + sha3_512 = _Hash + shake_128 = _VarLenHash + shake_256 = _VarLenHash + + def scrypt(password: _DataType, *, salt: _DataType, n: int, r: int, p: int, maxmem: int = ..., dklen: int = ...) -> bytes: ... + + class _BlakeHash(_Hash): + MAX_DIGEST_SIZE: int + MAX_KEY_SIZE: int + PERSON_SIZE: int + SALT_SIZE: int + + def __init__(self, data: _DataType = ..., digest_size: int = ..., key: _DataType = ..., salt: _DataType = ..., person: _DataType = ..., fanout: int = ..., depth: int = ..., leaf_size: int = ..., node_offset: int = ..., node_depth: int = ..., inner_size: int = ..., last_node: bool = ...) -> None: ... + + blake2b = _BlakeHash + blake2s = _BlakeHash diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/heapq.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/heapq.pyi new file mode 100644 index 0000000..5c49dfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/heapq.pyi @@ -0,0 +1,23 @@ +# Stubs for heapq + +# Based on http://docs.python.org/3.2/library/heapq.html + +import sys +from typing import TypeVar, List, Iterable, Any, Callable, Optional + +_T = TypeVar('_T') + +def heappush(heap: List[_T], item: _T) -> None: ... +def heappop(heap: List[_T]) -> _T: ... +def heappushpop(heap: List[_T], item: _T) -> _T: ... +def heapify(x: List[_T]) -> None: ... +def heapreplace(heap: List[_T], item: _T) -> _T: ... +if sys.version_info >= (3, 5): + def merge(*iterables: Iterable[_T], key: Callable[[_T], Any] = ..., + reverse: bool = ...) -> Iterable[_T]: ... +else: + def merge(*iterables: Iterable[_T]) -> Iterable[_T]: ... +def nlargest(n: int, iterable: Iterable[_T], + key: Optional[Callable[[_T], Any]] = ...) -> List[_T]: ... +def nsmallest(n: int, iterable: Iterable[_T], + key: Callable[[_T], Any] = ...) -> List[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi new file mode 100644 index 0000000..af2a800 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/__init__.pyi @@ -0,0 +1,4 @@ +from typing import AnyStr + +def escape(s: AnyStr, quote: bool = ...) -> AnyStr: ... +def unescape(s: AnyStr) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/entities.pyi new file mode 100644 index 0000000..e8ce9f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/entities.pyi @@ -0,0 +1,6 @@ +from typing import Any + +name2codepoint: Any +html5: Any +codepoint2name: Any +entitydefs: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/parser.pyi new file mode 100644 index 0000000..102a2cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/html/parser.pyi @@ -0,0 +1,31 @@ +from typing import List, Tuple +from _markupbase import ParserBase +import sys + +class HTMLParser(ParserBase): + if sys.version_info >= (3, 5): + def __init__(self, *, convert_charrefs: bool = ...) -> None: ... + else: + def __init__(self, strict: bool = ..., *, + convert_charrefs: bool = ...) -> None: ... + def feed(self, feed: str) -> None: ... + def close(self) -> None: ... + def reset(self) -> None: ... + def getpos(self) -> Tuple[int, int]: ... + def get_starttag_text(self) -> str: ... + + def handle_starttag(self, tag: str, + attrs: List[Tuple[str, str]]) -> None: ... + def handle_endtag(self, tag: str) -> None: ... + def handle_startendtag(self, tag: str, + attrs: List[Tuple[str, str]]) -> None: ... + def handle_data(self, data: str) -> None: ... + def handle_entityref(self, name: str) -> None: ... + def handle_charref(self, name: str) -> None: ... + def handle_comment(self, data: str) -> None: ... + def handle_decl(self, decl: str) -> None: ... + def handle_pi(self, data: str) -> None: ... + def unknown_decl(self, data: str) -> None: ... + +if sys.version_info < (3, 5): + class HTMLParseError(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi new file mode 100644 index 0000000..580250b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/__init__.pyi @@ -0,0 +1,69 @@ +import sys + +from enum import IntEnum + +if sys.version_info >= (3, 5): + class HTTPStatus(IntEnum): + + def __init__(self, *a) -> None: ... + + phrase: str + description: str + + CONTINUE = ... + SWITCHING_PROTOCOLS = ... + PROCESSING = ... + OK = ... + CREATED = ... + ACCEPTED = ... + NON_AUTHORITATIVE_INFORMATION = ... + NO_CONTENT = ... + RESET_CONTENT = ... + PARTIAL_CONTENT = ... + MULTI_STATUS = ... + ALREADY_REPORTED = ... + IM_USED = ... + MULTIPLE_CHOICES = ... + MOVED_PERMANENTLY = ... + FOUND = ... + SEE_OTHER = ... + NOT_MODIFIED = ... + USE_PROXY = ... + TEMPORARY_REDIRECT = ... + PERMANENT_REDIRECT = ... + BAD_REQUEST = ... + UNAUTHORIZED = ... + PAYMENT_REQUIRED = ... + FORBIDDEN = ... + NOT_FOUND = ... + METHOD_NOT_ALLOWED = ... + NOT_ACCEPTABLE = ... + PROXY_AUTHENTICATION_REQUIRED = ... + REQUEST_TIMEOUT = ... + CONFLICT = ... + GONE = ... + LENGTH_REQUIRED = ... + PRECONDITION_FAILED = ... + REQUEST_ENTITY_TOO_LARGE = ... + REQUEST_URI_TOO_LONG = ... + UNSUPPORTED_MEDIA_TYPE = ... + REQUESTED_RANGE_NOT_SATISFIABLE = ... + EXPECTATION_FAILED = ... + UNPROCESSABLE_ENTITY = ... + LOCKED = ... + FAILED_DEPENDENCY = ... + UPGRADE_REQUIRED = ... + PRECONDITION_REQUIRED = ... + TOO_MANY_REQUESTS = ... + REQUEST_HEADER_FIELDS_TOO_LARGE = ... + INTERNAL_SERVER_ERROR = ... + NOT_IMPLEMENTED = ... + BAD_GATEWAY = ... + SERVICE_UNAVAILABLE = ... + GATEWAY_TIMEOUT = ... + HTTP_VERSION_NOT_SUPPORTED = ... + VARIANT_ALSO_NEGOTIATES = ... + INSUFFICIENT_STORAGE = ... + LOOP_DETECTED = ... + NOT_EXTENDED = ... + NETWORK_AUTHENTICATION_REQUIRED = ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/client.pyi new file mode 100644 index 0000000..5528b01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/client.pyi @@ -0,0 +1,223 @@ +from typing import ( + Any, Dict, IO, Iterable, List, Iterator, Mapping, Optional, + Protocol, Tuple, Type, TypeVar, + Union, + overload, + BinaryIO, +) +import email.message +import io +from socket import socket +import sys +import ssl +import types + +_DataType = Union[bytes, IO[Any], Iterable[bytes], str] +_T = TypeVar('_T') + +HTTP_PORT: int +HTTPS_PORT: int + +CONTINUE: int +SWITCHING_PROTOCOLS: int +PROCESSING: int + +OK: int +CREATED: int +ACCEPTED: int +NON_AUTHORITATIVE_INFORMATION: int +NO_CONTENT: int +RESET_CONTENT: int +PARTIAL_CONTENT: int +MULTI_STATUS: int +IM_USED: int + +MULTIPLE_CHOICES: int +MOVED_PERMANENTLY: int +FOUND: int +SEE_OTHER: int +NOT_MODIFIED: int +USE_PROXY: int +TEMPORARY_REDIRECT: int + +BAD_REQUEST: int +UNAUTHORIZED: int +PAYMENT_REQUIRED: int +FORBIDDEN: int +NOT_FOUND: int +METHOD_NOT_ALLOWED: int +NOT_ACCEPTABLE: int +PROXY_AUTHENTICATION_REQUIRED: int +REQUEST_TIMEOUT: int +CONFLICT: int +GONE: int +LENGTH_REQUIRED: int +PRECONDITION_FAILED: int +REQUEST_ENTITY_TOO_LARGE: int +REQUEST_URI_TOO_LONG: int +UNSUPPORTED_MEDIA_TYPE: int +REQUESTED_RANGE_NOT_SATISFIABLE: int +EXPECTATION_FAILED: int +UNPROCESSABLE_ENTITY: int +LOCKED: int +FAILED_DEPENDENCY: int +UPGRADE_REQUIRED: int +PRECONDITION_REQUIRED: int +TOO_MANY_REQUESTS: int +REQUEST_HEADER_FIELDS_TOO_LARGE: int + +INTERNAL_SERVER_ERROR: int +NOT_IMPLEMENTED: int +BAD_GATEWAY: int +SERVICE_UNAVAILABLE: int +GATEWAY_TIMEOUT: int +HTTP_VERSION_NOT_SUPPORTED: int +INSUFFICIENT_STORAGE: int +NOT_EXTENDED: int +NETWORK_AUTHENTICATION_REQUIRED: int + +responses: Dict[int, str] + +class HTTPMessage(email.message.Message): ... + +if sys.version_info >= (3, 5): + # Ignore errors to work around python/mypy#5027 + class HTTPResponse(io.BufferedIOBase, BinaryIO): # type: ignore + msg: HTTPMessage + headers: HTTPMessage + version: int + debuglevel: int + closed: bool + status: int + reason: str + def __init__(self, sock: socket, debuglevel: int = ..., + method: Optional[str] = ..., url: Optional[str] = ...) -> None: ... + def read(self, amt: Optional[int] = ...) -> bytes: ... + @overload + def getheader(self, name: str) -> Optional[str]: ... + @overload + def getheader(self, name: str, default: _T) -> Union[str, _T]: ... + def getheaders(self) -> List[Tuple[str, str]]: ... + def fileno(self) -> int: ... + def isclosed(self) -> bool: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> HTTPResponse: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + def info(self) -> email.message.Message: ... + def geturl(self) -> str: ... + def getcode(self) -> int: ... + def begin(self) -> None: ... +else: + class HTTPResponse(io.RawIOBase, BinaryIO): # type: ignore + msg: HTTPMessage + headers: HTTPMessage + version: int + debuglevel: int + closed: bool + status: int + reason: str + def read(self, amt: Optional[int] = ...) -> bytes: ... + def readinto(self, b: bytearray) -> int: ... + @overload + def getheader(self, name: str) -> Optional[str]: ... + @overload + def getheader(self, name: str, default: _T) -> Union[str, _T]: ... + def getheaders(self) -> List[Tuple[str, str]]: ... + def fileno(self) -> int: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> HTTPResponse: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + def info(self) -> email.message.Message: ... + def geturl(self) -> str: ... + def getcode(self) -> int: ... + def begin(self) -> None: ... + +# This is an API stub only for the class below, not a class itself. +# urllib.request uses it for a parameter. +class HTTPConnectionProtocol(Protocol): + if sys.version_info >= (3, 7): + def __call__(self, host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., + blocksize: int = ...): ... + else: + def __call__(self, host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ...): ... + +class HTTPConnection: + host: str = ... + port: int = ... + if sys.version_info >= (3, 7): + def __init__( + self, + host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., blocksize: int = ... + ) -> None: ... + else: + def __init__( + self, + host: str, port: Optional[int] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ... + ) -> None: ... + if sys.version_info >= (3, 6): + def request(self, method: str, url: str, + body: Optional[_DataType] = ..., + headers: Mapping[str, str] = ..., + *, encode_chunked: bool = ...) -> None: ... + else: + def request(self, method: str, url: str, + body: Optional[_DataType] = ..., + headers: Mapping[str, str] = ...) -> None: ... + def getresponse(self) -> HTTPResponse: ... + def set_debuglevel(self, level: int) -> None: ... + def set_tunnel(self, host: str, port: Optional[int] = ..., + headers: Optional[Mapping[str, str]] = ...) -> None: ... + def connect(self) -> None: ... + def close(self) -> None: ... + def putrequest(self, request: str, selector: str, skip_host: bool = ..., + skip_accept_encoding: bool = ...) -> None: ... + def putheader(self, header: str, *argument: str) -> None: ... + if sys.version_info >= (3, 6): + def endheaders(self, message_body: Optional[_DataType] = ..., + *, encode_chunked: bool = ...) -> None: ... + else: + def endheaders(self, message_body: Optional[_DataType] = ...) -> None: ... + def send(self, data: _DataType) -> None: ... + +class HTTPSConnection(HTTPConnection): + def __init__(self, + host: str, port: Optional[int] = ..., + key_file: Optional[str] = ..., + cert_file: Optional[str] = ..., + timeout: int = ..., + source_address: Optional[Tuple[str, int]] = ..., + *, context: Optional[ssl.SSLContext] = ..., + check_hostname: Optional[bool] = ...) -> None: ... + +class HTTPException(Exception): ... +error = HTTPException + +class NotConnected(HTTPException): ... +class InvalidURL(HTTPException): ... +class UnknownProtocol(HTTPException): ... +class UnknownTransferEncoding(HTTPException): ... +class UnimplementedFileMode(HTTPException): ... +class IncompleteRead(HTTPException): ... + +class ImproperConnectionState(HTTPException): ... +class CannotSendRequest(ImproperConnectionState): ... +class CannotSendHeader(ImproperConnectionState): ... +class ResponseNotReady(ImproperConnectionState): ... + +class BadStatusLine(HTTPException): ... +class LineTooLong(HTTPException): ... + +if sys.version_info >= (3, 5): + class RemoteDisconnected(ConnectionResetError, BadStatusLine): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi new file mode 100644 index 0000000..25701ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookiejar.pyi @@ -0,0 +1,115 @@ +from typing import Dict, Iterable, Iterator, Optional, Sequence, Tuple, TypeVar, Union, overload +from http.client import HTTPResponse +from urllib.request import Request + +_T = TypeVar('_T') + +class LoadError(OSError): ... + + +class CookieJar(Iterable[Cookie]): + def __init__(self, policy: Optional[CookiePolicy] = ...) -> None: ... + def add_cookie_header(self, request: Request) -> None: ... + def extract_cookies(self, response: HTTPResponse, + request: Request) -> None: ... + def set_policy(self, policy: CookiePolicy) -> None: ... + def make_cookies(self, response: HTTPResponse, + request: Request) -> Sequence[Cookie]: ... + def set_cookie(self, cookie: Cookie) -> None: ... + def set_cookie_if_ok(self, cookie: Cookie, + request: Request) -> None: ... + def clear(self, domain: str = ..., path: str = ..., + name: str = ...) -> None: ... + def clear_session_cookies(self) -> None: ... + def __iter__(self) -> Iterator[Cookie]: ... + def __len__(self) -> int: ... + +class FileCookieJar(CookieJar): + filename: str + delayload: bool + def __init__(self, filename: str = ..., delayload: bool = ..., + policy: Optional[CookiePolicy] = ...) -> None: ... + def save(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + def load(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + def revert(self, filename: Optional[str] = ..., ignore_discard: bool = ..., + ignore_expires: bool = ...) -> None: ... + +class MozillaCookieJar(FileCookieJar): ... +class LWPCookieJar(FileCookieJar): ... + + +class CookiePolicy: + netscape: bool + rfc2965: bool + hide_cookie2: bool + def set_ok(self, cookie: Cookie, request: Request) -> bool: ... + def return_ok(self, cookie: Cookie, request: Request) -> bool: ... + def domain_return_ok(self, domain: str, request: Request) -> bool: ... + def path_return_ok(self, path: str, request: Request) -> bool: ... + + +class DefaultCookiePolicy(CookiePolicy): + rfc2109_as_netscape: bool + strict_domain: bool + strict_rfc2965_unverifiable: bool + strict_ns_unverifiable: bool + strict_ns_domain: int + strict_ns_set_initial_dollar: bool + strict_ns_set_path: bool + DomainStrictNoDots: int + DomainStrictNonDomain: int + DomainRFC2965Match: int + DomainLiberal: int + DomainStrict: int + def __init__(self, blocked_domains: Optional[Sequence[str]] = ..., + allowed_domains: Optional[Sequence[str]] = ..., + netscape: bool = ..., + rfc2965: bool = ..., + rfc2109_as_netscape: Optional[bool] = ..., + hide_cookie2: bool = ..., strict_domain: bool = ..., + strict_rfc2965_unverifiable: bool = ..., + strict_ns_unverifiable: bool = ..., + strict_ns_domain: int = ..., + strict_ns_set_initial_dollar: bool = ..., + strict_ns_set_path: bool = ...) -> None: ... + def blocked_domains(self) -> Tuple[str, ...]: ... + def set_blocked_domains(self, blocked_domains: Sequence[str]) -> None: ... + def is_blocked(self, domain: str) -> bool: ... + def allowed_domains(self) -> Optional[Tuple[str, ...]]: ... + def set_allowed_domains(self, allowed_domains: Optional[Sequence[str]]) -> None: ... + def is_not_allowed(self, domain: str) -> bool: ... + + +class Cookie: + version: Optional[int] + name: str + value: Optional[str] + port: Optional[str] + path: str + secure: bool + expires: Optional[int] + discard: bool + comment: Optional[str] + comment_url: Optional[str] + rfc2109: bool + port_specified: bool + domain: str # undocumented + domain_specified: bool + domain_initial_dot: bool + def __init__(self, version: Optional[int], name: str, value: Optional[str], # undocumented + port: Optional[str], port_specified: bool, + domain: str, domain_specified: bool, domain_initial_dot: bool, + path: str, path_specified: bool, + secure: bool, expires: Optional[int], discard: bool, + comment: Optional[str], comment_url: Optional[str], + rest: Dict[str, str], + rfc2109: bool = ...) -> None: ... + def has_nonstandard_attr(self, name: str) -> bool: ... + @overload + def get_nonstandard_attr(self, name: str) -> Optional[str]: ... + @overload + def get_nonstandard_attr(self, name: str, default: _T = ...) -> Union[str, _T]: ... + def set_nonstandard_attr(self, name: str, value: str) -> None: ... + def is_expired(self, now: int = ...) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi new file mode 100644 index 0000000..5e5d58a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/cookies.pyi @@ -0,0 +1,31 @@ +# Stubs for http.cookies (Python 3.5) + +from typing import Generic, Dict, List, Mapping, MutableMapping, Optional, TypeVar, Union + +_DataType = Union[str, Mapping[str, Union[str, Morsel]]] +_T = TypeVar('_T') + +class CookieError(Exception): ... + +class Morsel(Dict[str, str], Generic[_T]): + value: str + coded_value: _T + key: str + def set(self, key: str, val: str, coded_val: _T) -> None: ... + def isReservedKey(self, K: str) -> bool: ... + def output(self, attrs: Optional[List[str]] = ..., + header: str = ...) -> str: ... + def js_output(self, attrs: Optional[List[str]] = ...) -> str: ... + def OutputString(self, attrs: Optional[List[str]] = ...) -> str: ... + +class BaseCookie(Dict[str, Morsel], Generic[_T]): + def __init__(self, input: Optional[_DataType] = ...) -> None: ... + def value_decode(self, val: str) -> _T: ... + def value_encode(self, val: _T) -> str: ... + def output(self, attrs: Optional[List[str]] = ..., header: str = ..., + sep: str = ...) -> str: ... + def js_output(self, attrs: Optional[List[str]] = ...) -> str: ... + def load(self, rawdata: _DataType) -> None: ... + def __setitem__(self, key: str, value: Union[str, Morsel]) -> None: ... + +class SimpleCookie(BaseCookie): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/server.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/server.pyi new file mode 100644 index 0000000..7a7729f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/http/server.pyi @@ -0,0 +1,71 @@ +# Stubs for http.server (Python 3.4) + +import sys +from typing import Any, BinaryIO, Dict, List, Mapping, Optional, Tuple, Union +import socketserver +import email.message + +if sys.version_info >= (3, 7): + from builtins import _PathLike + +class HTTPServer(socketserver.TCPServer): + server_name: str + server_port: int + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + +class BaseHTTPRequestHandler: + client_address: Tuple[str, int] + server: socketserver.BaseServer + close_connection: bool + requestline: str + command: str + path: str + request_version: str + headers: email.message.Message + rfile: BinaryIO + wfile: BinaryIO + server_version: str + sys_version: str + error_message_format: str + error_content_type: str + protocol_version: str + MessageClass: type + responses: Mapping[int, Tuple[str, str]] + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer) -> None: ... + def handle(self) -> None: ... + def handle_one_request(self) -> None: ... + def handle_expect_100(self) -> bool: ... + def send_error(self, code: int, message: Optional[str] = ..., + explain: Optional[str] = ...) -> None: ... + def send_response(self, code: int, + message: Optional[str] = ...) -> None: ... + def send_header(self, keyword: str, value: str) -> None: ... + def send_response_only(self, code: int, + message: Optional[str] = ...) -> None: ... + def end_headers(self) -> None: ... + def flush_headers(self) -> None: ... + def log_request(self, code: Union[int, str] = ..., + size: Union[int, str] = ...) -> None: ... + def log_error(self, format: str, *args: Any) -> None: ... + def log_message(self, format: str, *args: Any) -> None: ... + def version_string(self) -> str: ... + def date_time_string(self, timestamp: Optional[int] = ...) -> str: ... + def log_date_time_string(self) -> str: ... + def address_string(self) -> str: ... + +class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): + extensions_map: Dict[str, str] + if sys.version_info >= (3, 7): + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer, directory: Optional[Union[str, _PathLike[str]]]) -> None: ... + else: + def __init__(self, request: bytes, client_address: Tuple[str, int], + server: socketserver.BaseServer) -> None: ... + def do_GET(self) -> None: ... + def do_HEAD(self) -> None: ... + +class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): + cgi_directories: List[str] + def do_POST(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/imp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/imp.pyi new file mode 100644 index 0000000..3344091 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/imp.pyi @@ -0,0 +1,55 @@ +# Stubs for imp (Python 3.6) + +import os +import sys +import types +from typing import Any, IO, List, Optional, Tuple, TypeVar, Union + +from _imp import (lock_held as lock_held, acquire_lock as acquire_lock, release_lock as release_lock, + get_frozen_object as get_frozen_object, is_frozen_package as is_frozen_package, + init_frozen as init_frozen, is_builtin as is_builtin, is_frozen as is_frozen) + +if sys.version_info >= (3, 5): + from _imp import create_dynamic as create_dynamic + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + _Path = Union[str, os.PathLike[str]] +else: + _Path = str + +SEARCH_ERROR: int +PY_SOURCE: int +PY_COMPILED: int +C_EXTENSION: int +PY_RESOURCE: int +PKG_DIRECTORY: int +C_BUILTIN: int +PY_FROZEN: int +PY_CODERESOURCE: int +IMP_HOOK: int + +def new_module(name: str) -> types.ModuleType: ... +def get_magic() -> bytes: ... +def get_tag() -> str: ... +def cache_from_source(path: _Path, debug_override: Optional[bool] = ...) -> str: ... +def source_from_cache(path: _Path) -> str: ... +def get_suffixes() -> List[Tuple[str, str, int]]: ... + +class NullImporter: + def __init__(self, path: _Path) -> None: ... + def find_module(self, fullname: Any) -> None: ... + +# PathLike doesn't work for the pathname argument here +def load_source(name: str, pathname: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... +def load_compiled(name: str, pathname: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... +def load_package(name: str, path: _Path) -> types.ModuleType: ... +def load_module(name: str, file: IO[Any], filename: str, details: Tuple[str, str, int]) -> types.ModuleType: ... +if sys.version_info >= (3, 6): + def find_module(name: str, path: Union[None, List[str], List[os.PathLike[str]], List[_Path]] = ...) -> Tuple[str, str, Tuple[IO[Any], str, int]]: ... +else: + def find_module(name: str, path: Optional[List[str]] = ...) -> Tuple[str, str, Tuple[IO[Any], str, int]]: ... +def reload(module: types.ModuleType) -> types.ModuleType: ... +def init_builtin(name: str) -> Optional[types.ModuleType]: ... +def load_dynamic(name: str, path: str, file: Optional[IO[Any]] = ...) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi new file mode 100644 index 0000000..d46f7e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/__init__.pyi @@ -0,0 +1,17 @@ +from importlib.abc import Loader +import sys +import types +from typing import Any, Mapping, Optional, Sequence + +def __import__(name: str, globals: Optional[Mapping[str, Any]] = ..., + locals: Optional[Mapping[str, Any]] = ..., + fromlist: Sequence[str] = ..., + level: int = ...) -> types.ModuleType: ... + +def import_module(name: str, package: Optional[str] = ...) -> types.ModuleType: ... + +def find_loader(name: str, path: Optional[str] = ...) -> Optional[Loader]: ... + +def invalidate_caches() -> None: ... + +def reload(module: types.ModuleType) -> types.ModuleType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi new file mode 100644 index 0000000..a86e194 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/abc.pyi @@ -0,0 +1,97 @@ +from abc import ABCMeta, abstractmethod +import os +import sys +import types +from typing import Any, IO, Iterator, Mapping, Optional, Sequence, Tuple, Union + +# Loader is exported from this module, but for circular import reasons +# exists in its own stub file (with ModuleSpec and ModuleType). +from _importlib_modulespec import Loader as Loader # Exported + +from _importlib_modulespec import ModuleSpec + +_Path = Union[bytes, str] + +class Finder(metaclass=ABCMeta): + ... + # Technically this class defines the following method, but its subclasses + # in this module violate its signature. Since this class is deprecated, it's + # easier to simply ignore that this method exists. + # @abstractmethod + # def find_module(self, fullname: str, + # path: Optional[Sequence[_Path]] = ...) -> Optional[Loader]: ... + +class ResourceLoader(Loader): + @abstractmethod + def get_data(self, path: _Path) -> bytes: ... + +class InspectLoader(Loader): + def is_package(self, fullname: str) -> bool: ... + def get_code(self, fullname: str) -> Optional[types.CodeType]: ... + def load_module(self, fullname: str) -> types.ModuleType: ... + @abstractmethod + def get_source(self, fullname: str) -> Optional[str]: ... + def exec_module(self, module: types.ModuleType) -> None: ... + if sys.version_info < (3, 5): + def source_to_code(self, data: Union[bytes, str], + path: str = ...) -> types.CodeType: ... + else: + @staticmethod + def source_to_code(data: Union[bytes, str], + path: str = ...) -> types.CodeType: ... + +class ExecutionLoader(InspectLoader): + @abstractmethod + def get_filename(self, fullname: str) -> _Path: ... + def get_code(self, fullname: str) -> Optional[types.CodeType]: ... + +class SourceLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta): + def path_mtime(self, path: _Path) -> float: ... + def set_data(self, path: _Path, data: bytes) -> None: ... + def get_source(self, fullname: str) -> Optional[str]: ... + def path_stats(self, path: _Path) -> Mapping[str, Any]: ... + + +class MetaPathFinder(Finder): + def find_module(self, fullname: str, + path: Optional[Sequence[_Path]]) -> Optional[Loader]: + ... + def invalidate_caches(self) -> None: ... + # Not defined on the actual class, but expected to exist. + def find_spec( + self, fullname: str, path: Optional[Sequence[_Path]], + target: Optional[types.ModuleType] = ... + ) -> Optional[ModuleSpec]: + ... + +class PathEntryFinder(Finder): + def find_module(self, fullname: str) -> Optional[Loader]: ... + def find_loader( + self, fullname: str + ) -> Tuple[Optional[Loader], Sequence[_Path]]: ... + def invalidate_caches(self) -> None: ... + # Not defined on the actual class, but expected to exist. + def find_spec( + self, fullname: str, + target: Optional[types.ModuleType] = ... + ) -> Optional[ModuleSpec]: ... + +class FileLoader(ResourceLoader, ExecutionLoader, metaclass=ABCMeta): + name: str + path: _Path + def __init__(self, fullname: str, path: _Path) -> None: ... + def get_data(self, path: _Path) -> bytes: ... + def get_filename(self, fullname: str) -> _Path: ... + +if sys.version_info >= (3, 7): + _PathLike = Union[bytes, str, os.PathLike[Any]] + + class ResourceReader(metaclass=ABCMeta): + @abstractmethod + def open_resource(self, resource: _PathLike) -> IO[bytes]: ... + @abstractmethod + def resource_path(self, resource: _PathLike) -> str: ... + @abstractmethod + def is_resource(self, name: str) -> bool: ... + @abstractmethod + def contents(self) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi new file mode 100644 index 0000000..036a91f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/machinery.pyi @@ -0,0 +1,116 @@ +import importlib.abc +import sys +import types +from typing import Any, Callable, List, Optional, Sequence, Tuple, Union + +# ModuleSpec is exported from this module, but for circular import +# reasons exists in its own stub file (with Loader and ModuleType). +from _importlib_modulespec import ModuleSpec as ModuleSpec # Exported + +class BuiltinImporter(importlib.abc.MetaPathFinder, + importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... + @classmethod + def get_source(cls, fullname: str) -> None: ... + # Loader + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: ... + @classmethod + def exec_module(cls, module: types.ModuleType) -> None: ... + +class FrozenImporter(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader): + # MetaPathFinder + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + # InspectLoader + @classmethod + def is_package(cls, fullname: str) -> bool: ... + @classmethod + def load_module(cls, fullname: str) -> types.ModuleType: ... + @classmethod + def get_code(cls, fullname: str) -> None: ... + @classmethod + def get_source(cls, fullname: str) -> None: ... + # Loader + @staticmethod + def module_repr(module: types.ModuleType) -> str: ... + @classmethod + def create_module(cls, spec: ModuleSpec) -> Optional[types.ModuleType]: + ... + @staticmethod + def exec_module(module: types.ModuleType) -> None: ... + +class WindowsRegistryFinder(importlib.abc.MetaPathFinder): + @classmethod + def find_module( + cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]] + ) -> Optional[importlib.abc.Loader]: + ... + @classmethod + def find_spec(cls, fullname: str, + path: Optional[Sequence[importlib.abc._Path]], + target: Optional[types.ModuleType] = ...) -> Optional[ModuleSpec]: + ... + +class PathFinder(importlib.abc.MetaPathFinder): ... + +SOURCE_SUFFIXES: List[str] +DEBUG_BYTECODE_SUFFIXES: List[str] +OPTIMIZED_BYTECODE_SUFFIXES: List[str] +BYTECODE_SUFFIXES: List[str] +EXTENSION_SUFFIXES: List[str] + +def all_suffixes() -> List[str]: ... + +class FileFinder(importlib.abc.PathEntryFinder): + path: str + def __init__( + self, path: str, + *loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> None: ... + @classmethod + def path_hook( + cls, *loader_details: Tuple[importlib.abc.Loader, List[str]] + ) -> Callable[[str], importlib.abc.PathEntryFinder]: ... + +class SourceFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + +class SourcelessFileLoader(importlib.abc.FileLoader, + importlib.abc.SourceLoader): + ... + +class ExtensionFileLoader(importlib.abc.ExecutionLoader): + def get_filename(self, fullname: str) -> importlib.abc._Path: ... + def get_source(self, fullname: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi new file mode 100644 index 0000000..007477d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/resources.pyi @@ -0,0 +1,25 @@ +import sys +# This is a >=3.7 module, so we conditionally include its source. +if sys.version_info >= (3, 7): + import os + + from pathlib import Path + from types import ModuleType + from typing import ContextManager, Iterator, Union, BinaryIO, TextIO + + Package = Union[str, ModuleType] + Resource = Union[str, os.PathLike] + + def open_binary(package: Package, resource: Resource) -> BinaryIO: ... + def open_text(package: Package, + resource: Resource, + encoding: str = ..., + errors: str = ...) -> TextIO: ... + def read_binary(package: Package, resource: Resource) -> bytes: ... + def read_text(package: Package, + resource: Resource, + encoding: str = ..., + errors: str = ...) -> str: ... + def path(package: Package, resource: Resource) -> ContextManager[Path]: ... + def is_resource(package: Package, name: str) -> bool: ... + def contents(package: Package) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi new file mode 100644 index 0000000..706a5dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/importlib/util.pyi @@ -0,0 +1,53 @@ +import importlib.abc +import importlib.machinery +import sys +import types +from typing import Any, Callable, List, Optional + +def module_for_loader( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... +def set_loader( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... +def set_package( + fxn: Callable[..., types.ModuleType] +) -> Callable[..., types.ModuleType]: ... + +def resolve_name(name: str, package: str) -> str: ... + +MAGIC_NUMBER: bytes + +def cache_from_source(path: str, debug_override: Optional[bool] = ..., *, + optimization: Optional[Any] = ...) -> str: ... +def source_from_cache(path: str) -> str: ... +def decode_source(source_bytes: bytes) -> str: ... +def find_spec( + name: str, package: Optional[str] = ... +) -> Optional[importlib.machinery.ModuleSpec]: ... +def spec_from_loader( + name: str, loader: Optional[importlib.abc.Loader], *, + origin: Optional[str] = ..., loader_state: Optional[Any] = ..., + is_package: Optional[bool] = ... +) -> importlib.machinery.ModuleSpec: ... +def spec_from_file_location( + name: str, location: str, *, + loader: Optional[importlib.abc.Loader] = ..., + submodule_search_locations: Optional[List[str]] = ... +) -> importlib.machinery.ModuleSpec: ... + +if sys.version_info >= (3, 5): + def module_from_spec( + spec: importlib.machinery.ModuleSpec + ) -> types.ModuleType: ... + + class LazyLoader(importlib.abc.Loader): + def __init__(self, loader: importlib.abc.Loader) -> None: ... + @classmethod + def factory( + cls, loader: importlib.abc.Loader + ) -> Callable[..., LazyLoader]: ... + def create_module( + self, spec: importlib.machinery.ModuleSpec + ) -> Optional[types.ModuleType]: ... + def exec_module(self, module: types.ModuleType) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/inspect.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/inspect.pyi new file mode 100644 index 0000000..6173715 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/inspect.pyi @@ -0,0 +1,329 @@ +import sys +from typing import (AbstractSet, Any, Callable, Dict, Generator, List, Mapping, + NamedTuple, Optional, Sequence, Tuple, Union, + ) +from types import CodeType, FrameType, ModuleType, TracebackType +from collections import OrderedDict + +# +# Types and members +# +class EndOfBlock(Exception): ... + +class BlockFinder: + indent: int + islambda: bool + started: bool + passline: bool + indecorator: bool + decoratorhasargs: bool + last: int + def tokeneater(self, type: int, token: str, srow_scol: Tuple[int, int], + erow_ecol: Tuple[int, int], line: str) -> None: ... + +CO_OPTIMIZED: int +CO_NEWLOCALS: int +CO_VARARGS: int +CO_VARKEYWORDS: int +CO_NESTED: int +CO_GENERATOR: int +CO_NOFREE: int +if sys.version_info >= (3, 5): + CO_COROUTINE: int + CO_ITERABLE_COROUTINE: int +if sys.version_info >= (3, 6): + CO_ASYNC_GENERATOR: int +TPFLAGS_IS_ABSTRACT: int + +if sys.version_info < (3, 6): + ModuleInfo = NamedTuple('ModuleInfo', [('name', str), + ('suffix', str), + ('mode', str), + ('module_type', int), + ]) + def getmoduleinfo(path: str) -> Optional[ModuleInfo]: ... + +def getmembers(object: object, + predicate: Optional[Callable[[Any], bool]] = ..., + ) -> List[Tuple[str, Any]]: ... +def getmodulename(path: str) -> Optional[str]: ... + +def ismodule(object: object) -> bool: ... +def isclass(object: object) -> bool: ... +def ismethod(object: object) -> bool: ... +def isfunction(object: object) -> bool: ... +def isgeneratorfunction(object: object) -> bool: ... +def isgenerator(object: object) -> bool: ... + +if sys.version_info >= (3, 5): + def iscoroutinefunction(object: object) -> bool: ... + def iscoroutine(object: object) -> bool: ... + def isawaitable(object: object) -> bool: ... +if sys.version_info >= (3, 6): + def isasyncgenfunction(object: object) -> bool: ... + def isasyncgen(object: object) -> bool: ... +def istraceback(object: object) -> bool: ... +def isframe(object: object) -> bool: ... +def iscode(object: object) -> bool: ... +def isbuiltin(object: object) -> bool: ... +def isroutine(object: object) -> bool: ... +def isabstract(object: object) -> bool: ... +def ismethoddescriptor(object: object) -> bool: ... +def isdatadescriptor(object: object) -> bool: ... +def isgetsetdescriptor(object: object) -> bool: ... +def ismemberdescriptor(object: object) -> bool: ... + + +# +# Retrieving source code +# +def findsource(object: object) -> Tuple[List[str], int]: ... +def getabsfile(object: object) -> str: ... +def getblock(lines: Sequence[str]) -> Sequence[str]: ... +def getdoc(object: object) -> str: ... +def getcomments(object: object) -> str: ... +def getfile(object: object) -> str: ... +def getmodule(object: object) -> ModuleType: ... +def getsourcefile(object: object) -> str: ... +# TODO restrict to "module, class, method, function, traceback, frame, +# or code object" +def getsourcelines(object: object) -> Tuple[List[str], int]: ... +# TODO restrict to "a module, class, method, function, traceback, frame, +# or code object" +def getsource(object: object) -> str: ... +def cleandoc(doc: str) -> str: ... +def indentsize(line: str) -> int: ... + + +# +# Introspecting callables with the Signature object +# +def signature(callable: Callable[..., Any], + *, + follow_wrapped: bool = ...) -> Signature: ... + +class Signature: + def __init__(self, + parameters: Optional[Sequence[Parameter]] = ..., + *, + return_annotation: Any = ...) -> None: ... + # TODO: can we be more specific here? + empty: object = ... + + parameters: Mapping[str, Parameter] + + # TODO: can we be more specific here? + return_annotation: Any + + def bind(self, *args: Any, **kwargs: Any) -> BoundArguments: ... + def bind_partial(self, *args: Any, **kwargs: Any) -> BoundArguments: ... + def replace(self, + *, + parameters: Optional[Sequence[Parameter]] = ..., + return_annotation: Any = ...) -> Signature: ... + + if sys.version_info >= (3, 5): + @classmethod + def from_callable(cls, + obj: Callable[..., Any], + *, + follow_wrapped: bool = ...) -> Signature: ... + +# The name is the same as the enum's name in CPython +class _ParameterKind: ... + +class Parameter: + def __init__(self, + name: str, + kind: _ParameterKind, + *, + default: Any = ..., + annotation: Any = ...) -> None: ... + empty: Any = ... + name: str + default: Any + annotation: Any + + kind: _ParameterKind + POSITIONAL_ONLY: _ParameterKind = ... + POSITIONAL_OR_KEYWORD: _ParameterKind = ... + VAR_POSITIONAL: _ParameterKind = ... + KEYWORD_ONLY: _ParameterKind = ... + VAR_KEYWORD: _ParameterKind = ... + + def replace(self, + *, + name: Optional[str] = ..., + kind: Optional[_ParameterKind] = ..., + default: Any = ..., + annotation: Any = ...) -> Parameter: ... + +class BoundArguments: + arguments: OrderedDict[str, Any] + args: Tuple[Any, ...] + kwargs: Dict[str, Any] + signature: Signature + + if sys.version_info >= (3, 5): + def apply_defaults(self) -> None: ... + + +# +# Classes and functions +# + +# TODO: The actual return type should be List[_ClassTreeItem] but mypy doesn't +# seem to be supporting this at the moment: +# _ClassTreeItem = Union[List[_ClassTreeItem], Tuple[type, Tuple[type, ...]]] +def getclasstree(classes: List[type], unique: bool = ...) -> Any: ... + +ArgSpec = NamedTuple('ArgSpec', [('args', List[str]), + ('varargs', str), + ('keywords', str), + ('defaults', tuple), + ]) + +Arguments = NamedTuple('Arguments', [('args', List[str]), + ('varargs', Optional[str]), + ('varkw', Optional[str]), + ]) + +def getargs(co: CodeType) -> Arguments: ... +def getargspec(func: object) -> ArgSpec: ... + +FullArgSpec = NamedTuple('FullArgSpec', [('args', List[str]), + ('varargs', Optional[str]), + ('varkw', Optional[str]), + ('defaults', tuple), + ('kwonlyargs', List[str]), + ('kwonlydefaults', Dict[str, Any]), + ('annotations', Dict[str, Any]), + ]) + +def getfullargspec(func: object) -> FullArgSpec: ... + +# TODO make the field types more specific here +ArgInfo = NamedTuple('ArgInfo', [('args', List[str]), + ('varargs', Optional[str]), + ('keywords', Optional[str]), + ('locals', Dict[str, Any]), + ]) + +def getargvalues(frame: FrameType) -> ArgInfo: ... +def formatannotation(annotation: object, base_module: Optional[str] = ...) -> str: ... +def formatannotationrelativeto(object: object) -> Callable[[object], str]: ... +def formatargspec(args: List[str], + varargs: Optional[str] = ..., + varkw: Optional[str] = ..., + defaults: Optional[Tuple[Any, ...]] = ..., + kwonlyargs: Optional[List[str]] = ..., + kwonlydefaults: Optional[Dict[str, Any]] = ..., + annotations: Dict[str, Any] = ..., + formatarg: Callable[[str], str] = ..., + formatvarargs: Callable[[str], str] = ..., + formatvarkw: Callable[[str], str] = ..., + formatvalue: Callable[[Any], str] = ..., + formatreturns: Callable[[Any], str] = ..., + formatannotations: Callable[[Any], str] = ..., + ) -> str: ... +def formatargvalues(args: List[str], + varargs: Optional[str] = ..., + varkw: Optional[str] = ..., + locals: Optional[Dict[str, Any]] = ..., + formatarg: Optional[Callable[[str], str]] = ..., + formatvarargs: Optional[Callable[[str], str]] = ..., + formatvarkw: Optional[Callable[[str], str]] = ..., + formatvalue: Optional[Callable[[Any], str]] = ..., + ) -> str: ... +def getmro(cls: type) -> Tuple[type, ...]: ... + +def getcallargs(func: Callable[..., Any], + *args: Any, + **kwds: Any) -> Dict[str, Any]: ... + + +ClosureVars = NamedTuple('ClosureVars', [('nonlocals', Mapping[str, Any]), + ('globals', Mapping[str, Any]), + ('builtins', Mapping[str, Any]), + ('unbound', AbstractSet[str]), + ]) +def getclosurevars(func: Callable[..., Any]) -> ClosureVars: ... + +def unwrap(func: Callable[..., Any], + *, + stop: Optional[Callable[[Any], Any]] = ...) -> Any: ... + + +# +# The interpreter stack +# + +Traceback = NamedTuple( + 'Traceback', + [ + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ] +) + +# Python 3.5+ (functions returning it used to return regular tuples) +FrameInfo = NamedTuple('FrameInfo', [('frame', FrameType), + ('filename', str), + ('lineno', int), + ('function', str), + ('code_context', List[str]), + ('index', int), + ]) + +def getframeinfo(frame: Union[FrameType, TracebackType], context: int = ...) -> Traceback: ... +def getouterframes(frame: Any, context: int = ...) -> List[FrameInfo]: ... +def getinnerframes(traceback: TracebackType, context: int = ...) -> List[FrameInfo]: ... +def getlineno(frame: FrameType) -> int: ... +def currentframe() -> Optional[FrameType]: ... +def stack(context: int = ...) -> List[FrameInfo]: ... +def trace(context: int = ...) -> List[FrameInfo]: ... + +# +# Fetching attributes statically +# + +def getattr_static(obj: object, attr: str, default: Optional[Any] = ...) -> Any: ... + + +# +# Current State of Generators and Coroutines +# + +# TODO In the next two blocks of code, can we be more specific regarding the +# type of the "enums"? + +GEN_CREATED: str +GEN_RUNNING: str +GEN_SUSPENDED: str +GEN_CLOSED: str +def getgeneratorstate(generator: Generator[Any, Any, Any]) -> str: ... + +if sys.version_info >= (3, 5): + CORO_CREATED: str + CORO_RUNNING: str + CORO_SUSPENDED: str + CORO_CLOSED: str + # TODO can we be more specific than "object"? + def getcoroutinestate(coroutine: object) -> str: ... + +def getgeneratorlocals(generator: Generator[Any, Any, Any]) -> Dict[str, Any]: ... + +if sys.version_info >= (3, 5): + # TODO can we be more specific than "object"? + def getcoroutinelocals(coroutine: object) -> Dict[str, Any]: ... + +Attribute = NamedTuple('Attribute', [('name', str), + ('kind', str), + ('defining_class', type), + ('object', object), + ]) + +def classify_class_attrs(cls: type) -> List[Attribute]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/io.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/io.pyi new file mode 100644 index 0000000..903fab2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/io.pyi @@ -0,0 +1,210 @@ +from typing import ( + List, BinaryIO, TextIO, Iterator, Union, Optional, Callable, Tuple, Type, Any, IO, Iterable +) +import builtins +import codecs +from mmap import mmap +import sys +from types import TracebackType +from typing import TypeVar + +_bytearray_like = Union[bytearray, mmap] + +DEFAULT_BUFFER_SIZE: int + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int + +_T = TypeVar('_T', bound='IOBase') + +open = builtins.open + +BlockingIOError = builtins.BlockingIOError +class UnsupportedOperation(OSError, ValueError): ... + +class IOBase: + def __iter__(self) -> Iterator[bytes]: ... + def __next__(self) -> bytes: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def writelines(self, lines: Iterable[Union[bytes, bytearray]]) -> None: ... + def readline(self, size: int = ...) -> bytes: ... + def __del__(self) -> None: ... + @property + def closed(self) -> bool: ... + +class RawIOBase(IOBase): + def readall(self) -> bytes: ... + def readinto(self, b: bytearray) -> Optional[int]: ... + def write(self, b: Union[bytes, bytearray]) -> Optional[int]: ... + def read(self, size: int = ...) -> Optional[bytes]: ... + +class BufferedIOBase(IOBase): + def detach(self) -> RawIOBase: ... + def readinto(self, b: _bytearray_like) -> int: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + if sys.version_info >= (3, 5): + def readinto1(self, b: _bytearray_like) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + + +class FileIO(RawIOBase): + mode: str + name: Union[int, str] + def __init__( + self, + name: Union[str, bytes, int], + mode: str = ..., + closefd: bool = ..., + opener: Optional[Callable[[Union[int, str], str], int]] = ... + ) -> None: ... + +# TODO should extend from BufferedIOBase +class BytesIO(BinaryIO): + def __init__(self, initial_bytes: bytes = ...) -> None: ... + # BytesIO does not contain a "name" field. This workaround is necessary + # to allow BytesIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> bytes: ... + def getbuffer(self) -> memoryview: ... + # copied from IOBase + def __iter__(self) -> Iterator[bytes]: ... + def __next__(self) -> bytes: ... + def __enter__(self) -> BytesIO: ... + def __exit__(self, t: Optional[Type[BaseException]] = ..., value: Optional[BaseException] = ..., + traceback: Optional[TracebackType] = ...) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + # TODO should be the next line instead + # def writelines(self, lines: List[Union[bytes, bytearray]]) -> None: ... + def writelines(self, lines: Any) -> None: ... + def readline(self, size: int = ...) -> bytes: ... + def __del__(self) -> None: ... + closed: bool + # copied from BufferedIOBase + def detach(self) -> RawIOBase: ... + def readinto(self, b: _bytearray_like) -> int: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + if sys.version_info >= (3, 5): + def readinto1(self, b: _bytearray_like) -> int: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + +class BufferedReader(BufferedIOBase): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def peek(self, size: int = ...) -> bytes: ... + +class BufferedWriter(BufferedIOBase): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def flush(self) -> None: ... + def write(self, b: Union[bytes, bytearray]) -> int: ... + +class BufferedRandom(BufferedReader, BufferedWriter): + def __init__(self, raw: RawIOBase, buffer_size: int = ...) -> None: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +class BufferedRWPair(BufferedIOBase): + def __init__(self, reader: RawIOBase, writer: RawIOBase, + buffer_size: int = ...) -> None: ... + + +class TextIOBase(IOBase): + encoding: str + errors: Optional[str] + newlines: Union[str, Tuple[str, ...], None] + def __iter__(self) -> Iterator[str]: ... # type: ignore + def __next__(self) -> str: ... # type: ignore + def detach(self) -> IOBase: ... + def write(self, s: str) -> int: ... + def writelines(self, lines: List[str]) -> None: ... # type: ignore + def readline(self, size: int = ...) -> str: ... # type: ignore + def readlines(self, hint: int = ...) -> List[str]: ... # type: ignore + def read(self, size: Optional[int] = ...) -> str: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +# TODO should extend from TextIOBase +class TextIOWrapper(TextIO): + line_buffering: bool + # TODO uncomment after fixing mypy about using write_through + # def __init__(self, buffer: IO[bytes], encoding: str = ..., + # errors: Optional[str] = ..., newline: Optional[str] = ..., + # line_buffering: bool = ..., write_through: bool = ...) \ + # -> None: ... + def __init__( + self, + buffer: IO[bytes], + encoding: str = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ..., + line_buffering: bool = ..., + write_through: bool = ... + ) -> None: ... + # copied from IOBase + def __exit__(self, t: Optional[Type[BaseException]] = ..., value: Optional[BaseException] = ..., + traceback: Optional[TracebackType] = ...) -> bool: ... + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def readable(self) -> bool: ... + def readlines(self, hint: int = ...) -> List[str]: ... + def seekable(self) -> bool: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + # TODO should be the next line instead + # def writelines(self, lines: List[str]) -> None: ... + def writelines(self, lines: Any) -> None: ... + def __del__(self) -> None: ... + closed: bool + # copied from TextIOBase + encoding: str + errors: Optional[str] + newlines: Union[str, Tuple[str, ...], None] + def __iter__(self) -> Iterator[str]: ... + def __next__(self) -> str: ... + def __enter__(self) -> TextIO: ... + def detach(self) -> IOBase: ... + def write(self, s: str) -> int: ... + def readline(self, size: int = ...) -> str: ... + def read(self, size: Optional[int] = ...) -> str: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + +class StringIO(TextIOWrapper): + def __init__(self, initial_value: str = ..., + newline: Optional[str] = ...) -> None: ... + # StringIO does not contain a "name" field. This workaround is necessary + # to allow StringIO sub-classes to add this field, as it is defined + # as a read-only property on IO[]. + name: Any + def getvalue(self) -> str: ... + def __enter__(self) -> StringIO: ... + +class IncrementalNewlineDecoder(codecs.IncrementalDecoder): + def decode(self, input: bytes, final: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi new file mode 100644 index 0000000..f706330 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/ipaddress.pyi @@ -0,0 +1,151 @@ +import sys +from typing import (Any, Container, Generic, Iterable, Iterator, Optional, + overload, SupportsInt, Tuple, TypeVar) + +# Undocumented length constants +IPV4LENGTH: int +IPV6LENGTH: int + +_A = TypeVar("_A", IPv4Address, IPv6Address) +_N = TypeVar("_N", IPv4Network, IPv6Network) +_T = TypeVar("_T") + +def ip_address(address: object) -> Any: ... # morally Union[IPv4Address, IPv6Address] +def ip_network(address: object, strict: bool = ...) -> Any: ... # morally Union[IPv4Network, IPv6Network] +def ip_interface(address: object) -> Any: ... # morally Union[IPv4Interface, IPv6Interface] + +class _IPAddressBase: + def __eq__(self, other: Any) -> bool: ... + def __ge__(self: _T, other: _T) -> bool: ... + def __gt__(self: _T, other: _T) -> bool: ... + def __le__(self: _T, other: _T) -> bool: ... + def __lt__(self: _T, other: _T) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + @property + def compressed(self) -> str: ... + @property + def exploded(self) -> str: ... + if sys.version_info >= (3, 5): + @property + def reverse_pointer(self) -> str: ... + @property + def version(self) -> int: ... + +class _BaseAddress(_IPAddressBase, SupportsInt): + def __init__(self, address: object) -> None: ... + def __add__(self: _T, other: int) -> _T: ... + def __hash__(self) -> int: ... + def __int__(self) -> int: ... + def __sub__(self: _T, other: int) -> _T: ... + @property + def is_global(self) -> bool: ... + @property + def is_link_local(self) -> bool: ... + @property + def is_loopback(self) -> bool: ... + @property + def is_multicast(self) -> bool: ... + @property + def is_private(self) -> bool: ... + @property + def is_reserved(self) -> bool: ... + @property + def is_unspecified(self) -> bool: ... + @property + def max_prefixlen(self) -> int: ... + @property + def packed(self) -> bytes: ... + +class _BaseNetwork(_IPAddressBase, Container, Iterable[_A], Generic[_A]): + network_address: _A + netmask: _A + def __init__(self, address: object, strict: bool = ...) -> None: ... + def __contains__(self, other: Any) -> bool: ... + def __getitem__(self, n: int) -> _A: ... + def __iter__(self) -> Iterator[_A]: ... + def address_exclude(self: _T, other: _T) -> Iterator[_T]: ... + @property + def broadcast_address(self) -> _A: ... + def compare_networks(self: _T, other: _T) -> int: ... + def hosts(self) -> Iterator[_A]: ... + @property + def is_global(self) -> bool: ... + @property + def is_link_local(self) -> bool: ... + @property + def is_loopback(self) -> bool: ... + @property + def is_multicast(self) -> bool: ... + @property + def is_private(self) -> bool: ... + @property + def is_reserved(self) -> bool: ... + @property + def is_unspecified(self) -> bool: ... + @property + def max_prefixlen(self) -> int: ... + @property + def num_addresses(self) -> int: ... + def overlaps(self: _T, other: _T) -> bool: ... + @property + def prefixlen(self) -> int: ... + def subnets(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> Iterator[_T]: ... + def supernet(self: _T, prefixlen_diff: int = ..., new_prefix: Optional[int] = ...) -> _T: ... + @property + def with_hostmask(self) -> str: ... + @property + def with_netmask(self) -> str: ... + @property + def with_prefixlen(self) -> str: ... + @property + def hostmask(self) -> _A: ... + +class _BaseInterface(_BaseAddress, Generic[_A, _N]): + hostmask: _A + netmask: _A + network: _N + @property + def ip(self) -> _A: ... + @property + def with_hostmask(self) -> str: ... + @property + def with_netmask(self) -> str: ... + @property + def with_prefixlen(self) -> str: ... + +class IPv4Address(_BaseAddress): ... +class IPv4Network(_BaseNetwork[IPv4Address]): ... +class IPv4Interface(IPv4Address, _BaseInterface[IPv4Address, IPv4Network]): ... + +class IPv6Address(_BaseAddress): + @property + def ipv4_mapped(self) -> Optional[IPv4Address]: ... + @property + def is_site_local(self) -> bool: ... + @property + def sixtofour(self) -> Optional[IPv4Address]: ... + @property + def teredo(self) -> Optional[Tuple[IPv4Address, IPv4Address]]: ... + +class IPv6Network(_BaseNetwork[IPv6Address]): + @property + def is_site_local(self) -> bool: ... + +class IPv6Interface(IPv6Address, _BaseInterface[IPv6Address, IPv6Network]): ... + +def v4_int_to_packed(address: int) -> bytes: ... +def v6_int_to_packed(address: int) -> bytes: ... +@overload +def summarize_address_range(first: IPv4Address, last: IPv4Address) -> Iterator[IPv4Network]: ... +@overload +def summarize_address_range(first: IPv6Address, last: IPv6Address) -> Iterator[IPv6Network]: ... +def collapse_addresses(addresses: Iterable[_N]) -> Iterator[_N]: ... +@overload +def get_mixed_type_key(obj: _A) -> Tuple[int, _A]: ... +@overload +def get_mixed_type_key(obj: IPv4Network) -> Tuple[int, IPv4Address, IPv4Address]: ... +@overload +def get_mixed_type_key(obj: IPv6Network) -> Tuple[int, IPv6Address, IPv6Address]: ... + +class AddressValueError(ValueError): ... +class NetmaskValueError(ValueError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/itertools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/itertools.pyi new file mode 100644 index 0000000..f34dd5b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/itertools.pyi @@ -0,0 +1,106 @@ +# Stubs for itertools + +# Based on http://docs.python.org/3.2/library/itertools.html + +from typing import (Iterator, TypeVar, Iterable, overload, Any, Callable, Tuple, + Generic, Optional) + +_T = TypeVar('_T') +_S = TypeVar('_S') +_N = TypeVar('_N', int, float) +Predicate = Callable[[_T], object] + +def count(start: _N = ..., + step: _N = ...) -> Iterator[_N]: ... # more general types? +def cycle(iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def repeat(object: _T) -> Iterator[_T]: ... +@overload +def repeat(object: _T, times: int) -> Iterator[_T]: ... + +def accumulate(iterable: Iterable[_T], func: Callable[[_T, _T], _T] = ...) -> Iterator[_T]: ... + +class chain(Iterator[_T], Generic[_T]): + def __init__(self, *iterables: Iterable[_T]) -> None: ... + def __next__(self) -> _T: ... + def __iter__(self) -> Iterator[_T]: ... + @staticmethod + def from_iterable(iterable: Iterable[Iterable[_S]]) -> Iterator[_S]: ... + +def compress(data: Iterable[_T], selectors: Iterable[Any]) -> Iterator[_T]: ... +def dropwhile(predicate: Predicate[_T], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def filterfalse(predicate: Optional[Predicate[_T]], + iterable: Iterable[_T]) -> Iterator[_T]: ... + +@overload +def groupby(iterable: Iterable[_T], key: None = ...) -> Iterator[Tuple[_T, Iterator[_T]]]: ... +@overload +def groupby(iterable: Iterable[_T], key: Callable[[_T], _S]) -> Iterator[Tuple[_S, Iterator[_T]]]: ... + +@overload +def islice(iterable: Iterable[_T], stop: Optional[int]) -> Iterator[_T]: ... +@overload +def islice(iterable: Iterable[_T], start: Optional[int], stop: Optional[int], + step: Optional[int] = ...) -> Iterator[_T]: ... + +def starmap(func: Callable[..., _S], iterable: Iterable[Iterable[Any]]) -> Iterator[_S]: ... +def takewhile(predicate: Predicate[_T], + iterable: Iterable[_T]) -> Iterator[_T]: ... +def tee(iterable: Iterable[_T], n: int = ...) -> Tuple[Iterator[_T], ...]: ... +def zip_longest(*p: Iterable[Any], + fillvalue: Any = ...) -> Iterator[Any]: ... + +_T1 = TypeVar('_T1') +_T2 = TypeVar('_T2') +_T3 = TypeVar('_T3') +_T4 = TypeVar('_T4') +_T5 = TypeVar('_T5') +_T6 = TypeVar('_T6') + +@overload +def product(iter1: Iterable[_T1]) -> Iterator[Tuple[_T1]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2]) -> Iterator[Tuple[_T1, _T2]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3]) -> Iterator[Tuple[_T1, _T2, _T3]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4]) -> Iterator[Tuple[_T1, _T2, _T3, _T4]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5]]: ... +@overload +def product(iter1: Iterable[_T1], + iter2: Iterable[_T2], + iter3: Iterable[_T3], + iter4: Iterable[_T4], + iter5: Iterable[_T5], + iter6: Iterable[_T6]) -> Iterator[Tuple[_T1, _T2, _T3, _T4, _T5, _T6]]: ... +@overload +def product(iter1: Iterable[Any], + iter2: Iterable[Any], + iter3: Iterable[Any], + iter4: Iterable[Any], + iter5: Iterable[Any], + iter6: Iterable[Any], + iter7: Iterable[Any], + *iterables: Iterable[Any]) -> Iterator[Tuple[Any, ...]]: ... +@overload +def product(*iterables: Iterable[Any], repeat: int = ...) -> Iterator[Tuple[Any, ...]]: ... + +def permutations(iterable: Iterable[_T], + r: Optional[int] = ...) -> Iterator[Tuple[_T, ...]]: ... +def combinations(iterable: Iterable[_T], + r: int) -> Iterator[Tuple[_T, ...]]: ... +def combinations_with_replacement(iterable: Iterable[_T], + r: int) -> Iterator[Tuple[_T, ...]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi new file mode 100644 index 0000000..620b239 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/__init__.pyi @@ -0,0 +1,58 @@ +import sys +from typing import Any, IO, Optional, Tuple, Callable, Dict, List, Union, Protocol + +from .decoder import JSONDecoder as JSONDecoder +from .encoder import JSONEncoder as JSONEncoder +if sys.version_info >= (3, 5): + from .decoder import JSONDecodeError as JSONDecodeError + +def dumps(obj: Any, + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Union[None, int, str] = ..., + separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> str: ... + +def dump(obj: Any, + fp: IO[str], + skipkeys: bool = ..., + ensure_ascii: bool = ..., + check_circular: bool = ..., + allow_nan: bool = ..., + cls: Any = ..., + indent: Union[None, int, str] = ..., + separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable[[Any], Any]] = ..., + sort_keys: bool = ..., + **kwds: Any) -> None: ... + +if sys.version_info >= (3, 6): + _LoadsString = Union[str, bytes, bytearray] +else: + _LoadsString = str +def loads(s: _LoadsString, + encoding: Any = ..., # ignored and deprecated + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... + +class _Reader(Protocol): + def read(self) -> _LoadsString: ... + +def load(fp: _Reader, + cls: Any = ..., + object_hook: Optional[Callable[[Dict], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any]] = ..., + **kwds: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi new file mode 100644 index 0000000..8e30c1e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/decoder.pyi @@ -0,0 +1,28 @@ +import sys +from typing import Any, Callable, Dict, List, Optional, Tuple + +if sys.version_info >= (3, 5): + class JSONDecodeError(ValueError): + msg: str + doc: str + pos: int + lineno: int + colno: int + def __init__(self, msg: str, doc: str, pos: int) -> None: ... + +class JSONDecoder: + object_hook: Callable[[Dict[str, Any]], Any] + parse_float: Callable[[str], Any] + parse_int: Callable[[str], Any] + parse_constant = ... # Callable[[str], Any] + strict: bool + object_pairs_hook: Callable[[List[Tuple[str, Any]]], Any] + + def __init__(self, object_hook: Optional[Callable[[Dict[str, Any]], Any]] = ..., + parse_float: Optional[Callable[[str], Any]] = ..., + parse_int: Optional[Callable[[str], Any]] = ..., + parse_constant: Optional[Callable[[str], Any]] = ..., + strict: bool = ..., + object_pairs_hook: Optional[Callable[[List[Tuple[str, Any]]], Any]] = ...) -> None: ... + def decode(self, s: str) -> Any: ... + def raw_decode(self, s: str, idx: int = ...) -> Tuple[Any, int]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi new file mode 100644 index 0000000..e35f344 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/json/encoder.pyi @@ -0,0 +1,21 @@ +from typing import Any, Callable, Iterator, Optional, Tuple + +class JSONEncoder: + item_separator: str + key_separator: str + + skipkeys: bool + ensure_ascii: bool + check_circular: bool + allow_nan: bool + sort_keys: bool + indent: int + + def __init__(self, skipkeys: bool = ..., ensure_ascii: bool = ..., + check_circular: bool = ..., allow_nan: bool = ..., sort_keys: bool = ..., + indent: Optional[int] = ..., separators: Optional[Tuple[str, str]] = ..., + default: Optional[Callable] = ...) -> None: ... + + def default(self, o: Any) -> Any: ... + def encode(self, o: Any) -> str: ... + def iterencode(self, o: Any, _one_shot: bool = ...) -> Iterator[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/lzma.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/lzma.pyi new file mode 100644 index 0000000..cd0a088 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/lzma.pyi @@ -0,0 +1,107 @@ +import io +import sys +from typing import Any, IO, Mapping, Optional, Sequence, Union + +if sys.version_info >= (3, 6): + from os import PathLike + _PathOrFile = Union[str, bytes, IO[Any], PathLike[Any]] +else: + _PathOrFile = Union[str, bytes, IO[Any]] + +_FilterChain = Sequence[Mapping[str, Any]] + +FORMAT_AUTO: int +FORMAT_XZ: int +FORMAT_ALONE: int +FORMAT_RAW: int +CHECK_NONE: int +CHECK_CRC32: int +CHECK_CRC64: int +CHECK_SHA256: int +CHECK_ID_MAX: int +CHECK_UNKNOWN: int +FILTER_LZMA1: int +FILTER_LZMA2: int +FILTER_DELTA: int +FILTER_X86: int +FILTER_IA64: int +FILTER_ARM: int +FILTER_ARMTHUMB: int +FILTER_SPARC: int +FILTER_POWERPC: int +MF_HC3: int +MF_HC4: int +MF_BT2: int +MF_BT3: int +MF_BT4: int +MODE_FAST: int +MODE_NORMAL: int +PRESET_DEFAULT: int +PRESET_EXTREME: int + +# from _lzma.c +class LZMADecompressor(object): + def __init__(self, format: Optional[int] = ..., memlimit: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> None: ... + def decompress(self, data: bytes, max_length: int = ...) -> bytes: ... + @property + def check(self) -> int: ... + @property + def eof(self) -> bool: ... + @property + def unused_data(self) -> bytes: ... + if sys.version_info >= (3, 5): + @property + def needs_input(self) -> bool: ... + +# from _lzma.c +class LZMACompressor(object): + def __init__(self, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ...) -> None: ... + def compress(self, data: bytes) -> bytes: ... + def flush(self) -> bytes: ... + + +class LZMAError(Exception): ... + + +class LZMAFile(io.BufferedIOBase, IO[bytes]): # type: ignore # python/mypy#5027 + def __init__(self, + filename: Optional[_PathOrFile] = ..., + mode: str = ..., + *, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ...) -> None: ... + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + def fileno(self) -> int: ... + def seekable(self) -> bool: ... + def readable(self) -> bool: ... + def writable(self) -> bool: ... + def peek(self, size: int = ...) -> bytes: ... + def read(self, size: Optional[int] = ...) -> bytes: ... + def read1(self, size: int = ...) -> bytes: ... + def readline(self, size: int = ...) -> bytes: ... + def write(self, data: bytes) -> int: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def tell(self) -> int: ... + + +def open(filename: _PathOrFile, + mode: str = ..., + *, + format: Optional[int] = ..., + check: int = ..., + preset: Optional[int] = ..., + filters: Optional[_FilterChain] = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... +def compress(data: bytes, format: int = ..., check: int = ..., preset: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> bytes: ... +def decompress(data: bytes, format: int = ..., memlimit: Optional[int] = ..., filters: Optional[_FilterChain] = ...) -> bytes: ... +def is_check_supported(check: int) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi new file mode 100644 index 0000000..bcab64c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/msvcrt.pyi @@ -0,0 +1,8 @@ +# Stubs for msvcrt + +# NOTE: These are incomplete! + +from typing import overload, BinaryIO, TextIO + +def get_osfhandle(file: int) -> int: ... +def open_osfhandle(handle: int, flags: int) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi new file mode 100644 index 0000000..e5fad0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/__init__.pyi @@ -0,0 +1,85 @@ +# Stubs for multiprocessing + +from typing import ( + Any, Callable, ContextManager, Iterable, Mapping, Optional, Dict, List, + Union, Sequence, Tuple +) + +from logging import Logger +from multiprocessing import connection, pool, spawn, synchronize +from multiprocessing.context import ( + BaseContext, + ProcessError as ProcessError, BufferTooShort as BufferTooShort, TimeoutError as TimeoutError, AuthenticationError as AuthenticationError) +from multiprocessing.managers import SyncManager +from multiprocessing.process import current_process as current_process +from multiprocessing.queues import Queue as Queue, SimpleQueue as SimpleQueue, JoinableQueue as JoinableQueue +from multiprocessing.spawn import freeze_support as freeze_support +from multiprocessing.spawn import set_executable as set_executable + +import sys + +# N.B. The functions below are generated at runtime by partially applying +# multiprocessing.context.BaseContext's methods, so the two signatures should +# be identical (modulo self). + +# Sychronization primitives +_LockLike = Union[synchronize.Lock, synchronize.RLock] +def Barrier(parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ...) -> synchronize.Barrier: ... +def BoundedSemaphore(value: int = ...) -> synchronize.BoundedSemaphore: ... +def Condition(lock: Optional[_LockLike] = ...) -> synchronize.Condition: ... +def Event(lock: Optional[_LockLike] = ...) -> synchronize.Event: ... +def Lock() -> synchronize.Lock: ... +def RLock() -> synchronize.RLock: ... +def Semaphore(value: int = ...) -> synchronize.Semaphore: ... + +def Pipe(duplex: bool = ...) -> Tuple[connection.Connection, connection.Connection]: ... + +def Pool(processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ...) -> pool.Pool: ... + +class Process(): + name: str + daemon: bool + pid: Optional[int] + exitcode: Optional[int] + authkey: bytes + sentinel: int + # TODO: set type of group to None + def __init__(self, + group: Any = ..., + target: Optional[Callable] = ..., + name: Optional[str] = ..., + args: Iterable[Any] = ..., + kwargs: Mapping[Any, Any] = ..., + *, + daemon: Optional[bool] = ...) -> None: ... + def start(self) -> None: ... + def run(self) -> None: ... + def terminate(self) -> None: ... + if sys.version_info >= (3, 7): + def kill(self) -> None: ... + def close(self) -> None: ... + def is_alive(self) -> bool: ... + def join(self, timeout: Optional[float] = ...) -> None: ... + +class Value(): + value: Any = ... + def __init__(self, typecode_or_type: str, *args: Any, lock: Union[bool, _LockLike] = ...) -> None: ... + def get_lock(self) -> _LockLike: ... + +# ----- multiprocessing function stubs ----- +def active_children() -> List[Process]: ... +def allow_connection_pickling() -> None: ... +def cpu_count() -> int: ... +def get_logger() -> Logger: ... +def log_to_stderr(level: Optional[Union[str, int]] = ...) -> Logger: ... +def Manager() -> SyncManager: ... +def set_forkserver_preload(module_names: List[str]) -> None: ... +def get_all_start_methods() -> List[str]: ... +def get_context(method: Optional[str] = ...) -> BaseContext: ... +def get_start_method(allow_none: Optional[bool]) -> Optional[str]: ... +def set_start_method(method: str, force: Optional[bool] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi new file mode 100644 index 0000000..76bdca0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/connection.pyi @@ -0,0 +1,48 @@ +from typing import Any, Iterable, List, Optional, Tuple, Type, Union +import socket +import sys +import types + +# https://docs.python.org/3/library/multiprocessing.html#address-formats +_Address = Union[str, Tuple[str, int]] + +class _ConnectionBase: + @property + def closed(self) -> bool: ... # undocumented + @property + def readable(self) -> bool: ... # undocumented + @property + def writable(self) -> bool: ... # undocumented + def fileno(self) -> int: ... + def close(self) -> None: ... + def send_bytes(self, + buf: bytes, + offset: int = ..., + size: Optional[int] = ...) -> None: ... + def send(self, obj: Any) -> None: ... + def recv_bytes(self, maxlength: Optional[int] = ...) -> bytes: ... + def recv_bytes_into(self, buf: Any, offset: int = ...) -> int: ... + def recv(self) -> Any: ... + def poll(self, timeout: Optional[float] = ...) -> bool: ... + +class Connection(_ConnectionBase): ... + +if sys.platform == "win32": + class PipeConnection(_ConnectionBase): ... + +class Listener: + def __init__(self, address: Optional[_Address] = ..., family: Optional[str] = ..., backlog: int = ..., authkey: Optional[bytes] = ...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + @property + def address(self) -> _Address: ... + @property + def last_accepted(self) -> Optional[_Address]: ... + def __enter__(self) -> Listener: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_value: Optional[BaseException], exc_tb: Optional[types.TracebackType]) -> None: ... + +def deliver_challenge(connection: Connection, authkey: bytes) -> None: ... +def answer_challenge(connection: Connection, authkey: bytes) -> None: ... +def wait(object_list: Iterable[Union[Connection, socket.socket, int]], timeout: Optional[float] = ...) -> List[Union[Connection, socket.socket, int]]: ... +def Client(address: _Address, family: Optional[str] = ..., authkey: Optional[bytes] = ...) -> Connection: ... +def Pipe(duplex: bool = ...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi new file mode 100644 index 0000000..dada9b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/context.pyi @@ -0,0 +1,179 @@ +# Stubs for multiprocessing.context + +from logging import Logger +import multiprocessing +from multiprocessing import synchronize +from multiprocessing import queues +import sys +from typing import ( + Any, Callable, Iterable, Optional, List, Mapping, Sequence, Tuple, Type, + Union, +) + +_LockLike = Union[synchronize.Lock, synchronize.RLock] + +class ProcessError(Exception): ... + +class BufferTooShort(ProcessError): ... + +class TimeoutError(ProcessError): ... + +class AuthenticationError(ProcessError): ... + +class BaseContext(object): + ProcessError: Type[Exception] + BufferTooShort: Type[Exception] + TimeoutError: Type[Exception] + AuthenticationError: Type[Exception] + + # N.B. The methods below are applied at runtime to generate + # multiprocessing.*, so the signatures should be identical (modulo self). + + @staticmethod + def current_process() -> multiprocessing.Process: ... + @staticmethod + def active_children() -> List[multiprocessing.Process]: ... + def cpu_count(self) -> int: ... + # TODO: change return to SyncManager once a stub exists in multiprocessing.managers + def Manager(self) -> Any: ... + # TODO: change return to Pipe once a stub exists in multiprocessing.connection + def Pipe(self, duplex: bool) -> Any: ... + + def Barrier(self, + parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ...) -> synchronize.Barrier: ... + def BoundedSemaphore(self, + value: int = ...) -> synchronize.BoundedSemaphore: ... + def Condition(self, + lock: Optional[_LockLike] = ...) -> synchronize.Condition: ... + def Event(self, lock: Optional[_LockLike] = ...) -> synchronize.Event: ... + def Lock(self) -> synchronize.Lock: ... + def RLock(self) -> synchronize.RLock: ... + def Semaphore(self, value: int = ...) -> synchronize.Semaphore: ... + + def Queue(self, maxsize: int = ...) -> queues.Queue: ... + def JoinableQueue(self, maxsize: int = ...) -> queues.JoinableQueue: ... + def SimpleQueue(self) -> queues.SimpleQueue: ... + def Pool( + self, + processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ... + ) -> multiprocessing.pool.Pool: ... + def Process( + self, + group: Any = ..., + target: Optional[Callable] = ..., + name: Optional[str] = ..., + args: Iterable[Any] = ..., + kwargs: Mapping[Any, Any] = ..., + *, + daemon: Optional[bool] = ... + ) -> multiprocessing.Process: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to RawValue once a stub exists in multiprocessing.sharedctypes + def RawValue(self, typecode_or_type: Any, *args: Any) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to RawArray once a stub exists in multiprocessing.sharedctypes + def RawArray(self, typecode_or_type: Any, size_or_initializer: Union[int, Sequence[Any]]) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to Value once a stub exists in multiprocessing.sharedctypes + def Value( + self, + typecode_or_type: Any, + *args: Any, + lock: bool = ... + ) -> Any: ... + # TODO: typecode_or_type param is a ctype with a base class of _SimpleCData or array.typecode Need to figure out + # how to handle the ctype + # TODO: change return to Array once a stub exists in multiprocessing.sharedctypes + def Array( + self, + typecode_or_type: Any, + size_or_initializer: Union[int, Sequence[Any]], + *, + lock: bool = ... + ) -> Any: ... + def freeze_support(self) -> None: ... + def get_logger(self) -> Logger: ... + def log_to_stderr(self, level: Optional[str] = ...) -> Logger: ... + def allow_connection_pickling(self) -> None: ... + def set_executable(self, executable: str) -> None: ... + def set_forkserver_preload(self, module_names: List[str]) -> None: ... + def get_context(self, method: Optional[str] = ...) -> BaseContext: ... + def get_start_method(self, allow_none: bool = ...) -> str: ... + def set_start_method(self, method: Optional[str] = ...) -> None: ... + @property + def reducer(self) -> str: ... + @reducer.setter + def reducer(self, reduction: str) -> None: ... + def _check_available(self) -> None: ... + +class Process(object): + _start_method: Optional[str] + @staticmethod + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + def _Popen(process_obj: Any) -> DefaultContext: ... + +class DefaultContext(object): + Process: Type[multiprocessing.Process] + + def __init__(self, context: BaseContext) -> None: ... + def get_context(self, method: Optional[str] = ...) -> BaseContext: ... + def set_start_method(self, method: str, force: bool = ...) -> None: ... + def get_start_method(self, allow_none: bool = ...) -> str: ... + def get_all_start_methods(self) -> List[str]: ... + +if sys.platform != 'win32': + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class ForkProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> Any: ... + + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class SpawnProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> SpawnProcess: ... + + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class ForkServerProcess(Any): # type: ignore + _start_method: str + @staticmethod + def _Popen(process_obj: Any) -> Any: ... + + class ForkContext(BaseContext): + _name: str + Process: Type[ForkProcess] + + class SpawnContext(BaseContext): + _name: str + Process: Type[SpawnProcess] + + class ForkServerContext(BaseContext): + _name: str + Process: Type[ForkServerProcess] +else: + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + class SpawnProcess(Any): # type: ignore + _start_method: str + @staticmethod + # TODO: type should be BaseProcess once a stub in multiprocessing.process exists + def _Popen(process_obj: Process) -> Any: ... + + class SpawnContext(BaseContext): + _name: str + Process: Type[SpawnProcess] + +def _force_start_method(method: str) -> None: ... +# TODO: type should be BaseProcess once a stub in multiprocessing.process exists +def get_spawning_popen() -> Optional[Any]: ... +# TODO: type should be BaseProcess once a stub in multiprocessing.process exists +def set_spawning_popen(popen: Any) -> None: ... +def assert_spawning(obj: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi new file mode 100644 index 0000000..c169d2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/__init__.pyi @@ -0,0 +1,42 @@ +from typing import Any, Optional, List, Type + +import array +import sys +import threading +import weakref + +from .connection import Pipe +from threading import Lock, RLock, Semaphore, BoundedSemaphore +from threading import Event, Condition, Barrier +from queue import Queue + +JoinableQueue = Queue + + +class DummyProcess(threading.Thread): + _children: weakref.WeakKeyDictionary + _parent: threading.Thread + _pid: None + _start_called: int + exitcode: Optional[int] + def __init__(self, group=..., target=..., name=..., args=..., kwargs=...) -> None: ... + +Process = DummyProcess + +class Namespace(object): + def __init__(self, **kwds) -> None: ... + +class Value(object): + _typecode: Any + _value: Any + value: Any + def __init__(self, typecode, value, lock=...) -> None: ... + + +def Array(typecode, sequence, lock=...) -> array.array: ... +def Manager() -> Any: ... +def Pool(processes=..., initializer=..., initargs=...) -> Any: ... +def active_children() -> List: ... +def current_process() -> threading.Thread: ... +def freeze_support() -> None: ... +def shutdown() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi new file mode 100644 index 0000000..3baaf28 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/dummy/connection.pyi @@ -0,0 +1,35 @@ +from typing import Any, List, Optional, Tuple, Type, TypeVar + +from queue import Queue + +families: List[None] + +_TConnection = TypeVar('_TConnection', bound=Connection) +_TListener = TypeVar('_TListener', bound=Listener) + +class Connection(object): + _in: Any + _out: Any + recv: Any + recv_bytes: Any + send: Any + send_bytes: Any + def __enter__(self: _TConnection) -> _TConnection: ... + def __exit__(self, exc_type, exc_value, exc_tb) -> None: ... + def __init__(self, _in, _out) -> None: ... + def close(self) -> None: ... + def poll(self, timeout: float = ...) -> bool: ... + +class Listener(object): + _backlog_queue: Optional[Queue] + @property + def address(self) -> Optional[Queue]: ... + def __enter__(self: _TListener) -> _TListener: ... + def __exit__(self, exc_type, exc_value, exc_tb) -> None: ... + def __init__(self, address=..., family=..., backlog=...) -> None: ... + def accept(self) -> Connection: ... + def close(self) -> None: ... + + +def Client(address) -> Connection: ... +def Pipe(duplex: bool = ...) -> Tuple[Connection, Connection]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi new file mode 100644 index 0000000..a5ec399 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/managers.pyi @@ -0,0 +1,47 @@ +# Stubs for multiprocessing.managers + +# NOTE: These are incomplete! + +import queue +import threading +from typing import ( + Any, Callable, ContextManager, Dict, Iterable, List, Mapping, Optional, + Sequence, Tuple, TypeVar, Union, +) + +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +class Namespace: ... + +_Namespace = Namespace + +class BaseManager(ContextManager[BaseManager]): + address: Union[str, Tuple[str, int]] + def connect(self) -> None: ... + @classmethod + def register(cls, typeid: str, callable: Optional[Callable] = ..., + proxytype: Any = ..., + exposed: Optional[Sequence[str]] = ..., + method_to_typeid: Optional[Mapping[str, str]] = ..., + create_method: bool = ...) -> None: ... + def shutdown(self) -> None: ... + def start(self, initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... + +class SyncManager(BaseManager): + def BoundedSemaphore(self, value: Any = ...) -> threading.BoundedSemaphore: ... + def Condition(self, lock: Any = ...) -> threading.Condition: ... + def Event(self) -> threading.Event: ... + def Lock(self) -> threading.Lock: ... + def Namespace(self) -> _Namespace: ... + def Queue(self, maxsize: int = ...) -> queue.Queue: ... + def RLock(self) -> threading.RLock: ... + def Semaphore(self, value: Any = ...) -> threading.Semaphore: ... + def Array(self, typecode: Any, sequence: Sequence[_T]) -> Sequence[_T]: ... + def Value(self, typecode: Any, value: _T) -> _T: ... + def dict(self, sequence: Mapping[_KT, _VT] = ...) -> Dict[_KT, _VT]: ... + def list(self, sequence: Sequence[_T] = ...) -> List[_T]: ... + +class RemoteError(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi new file mode 100644 index 0000000..469d83a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/pool.pyi @@ -0,0 +1,87 @@ +from typing import ( + Any, Callable, ContextManager, Iterable, Mapping, Optional, List, + Type, TypeVar, Generic, Iterator +) +from types import TracebackType + +_PT = TypeVar('_PT', bound='Pool') +_S = TypeVar('_S') +_T = TypeVar('_T') + +class ApplyResult(Generic[_T]): + def get(self, timeout: Optional[float] = ...) -> _T: ... + def wait(self, timeout: Optional[float] = ...) -> None: ... + def ready(self) -> bool: ... + def successful(self) -> bool: ... + +# alias created during issue #17805 +AsyncResult = ApplyResult + +_IMIT = TypeVar('_IMIT', bound=IMapIterator) + +class IMapIterator(Iterator[_T]): + def __iter__(self: _IMIT) -> _IMIT: ... + def next(self, timeout: Optional[float] = ...) -> _T: ... + def __next__(self, timeout: Optional[float] = ...) -> _T: ... + +class IMapUnorderedIterator(IMapIterator): ... + +class Pool(ContextManager[Pool]): + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Iterable[Any] = ..., + maxtasksperchild: Optional[int] = ..., + context: Optional[Any] = ...) -> None: ... + def apply(self, + func: Callable[..., _T], + args: Iterable[Any] = ..., + kwds: Mapping[str, Any] = ...) -> _T: ... + def apply_async(self, + func: Callable[..., _T], + args: Iterable[Any] = ..., + kwds: Mapping[str, Any] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[_T]: ... + def map(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> List[_T]: ... + def map_async(self, func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[List[_T]]: ... + def imap(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> IMapIterator[_T]: ... + def imap_unordered(self, + func: Callable[[_S], _T], + iterable: Iterable[_S] = ..., + chunksize: Optional[int] = ...) -> IMapIterator[_T]: ... + def starmap(self, + func: Callable[..., _T], + iterable: Iterable[Iterable[Any]] = ..., + chunksize: Optional[int] = ...) -> List[_T]: ... + def starmap_async(self, + func: Callable[..., _T], + iterable: Iterable[Iterable[Any]] = ..., + chunksize: Optional[int] = ..., + callback: Optional[Callable[[_T], None]] = ..., + error_callback: Optional[Callable[[BaseException], None]] = ...) -> AsyncResult[List[_T]]: ... + def close(self) -> None: ... + def terminate(self) -> None: ... + def join(self) -> None: ... + def __enter__(self: _PT) -> _PT: ... + + +class ThreadPool(Pool, ContextManager[ThreadPool]): + + def __init__(self, processes: Optional[int] = ..., + initializer: Optional[Callable[..., Any]] = ..., + initargs: Iterable[Any] = ...) -> None: ... + +# undocumented +RUN: int +CLOSE: int +TERMINATE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi new file mode 100644 index 0000000..df8ea93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/process.pyi @@ -0,0 +1,5 @@ +from typing import List +from multiprocessing import Process + +def current_process() -> Process: ... +def active_children() -> List[Process]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi new file mode 100644 index 0000000..c6dd0f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/queues.pyi @@ -0,0 +1,30 @@ +from typing import Any, Generic, Optional, TypeVar + +import queue + +_T = TypeVar('_T') + +class Queue(queue.Queue[_T]): + # FIXME: `ctx` is a circular dependency and it's not actually optional. + # It's marked as such to be able to use the generic Queue in __init__.pyi. + def __init__(self, maxsize: int = ..., *, ctx: Any = ...) -> None: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def put(self, obj: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def qsize(self) -> int: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def put_nowait(self, item: _T) -> None: ... + def get_nowait(self) -> _T: ... + def close(self) -> None: ... + def join_thread(self) -> None: ... + def cancel_join_thread(self) -> None: ... + +class JoinableQueue(Queue[_T]): + def task_done(self) -> None: ... + def join(self) -> None: ... + +class SimpleQueue(Generic[_T]): + def __init__(self, *, ctx: Any = ...) -> None: ... + def empty(self) -> bool: ... + def get(self) -> _T: ... + def put(self, item: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi new file mode 100644 index 0000000..659253c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/spawn.pyi @@ -0,0 +1,18 @@ +from typing import Any, Dict, List, Mapping, Optional, Sequence +from types import ModuleType + +WINEXE: bool +WINSERVICE: bool + +def set_executable(exe: str) -> None: ... +def get_executable() -> str: ... +def is_forking(argv: Sequence[str]) -> bool: ... +def freeze_support() -> None: ... +def get_command_line(**kwds: Any) -> List[str]: ... +def spawn_main(pipe_handle: int, parent_pid: Optional[int] = ..., tracker_fd: Optional[int] = ...) -> None: ... +# undocumented +def _main(fd: int) -> Any: ... +def get_preparation_data(name: str) -> Dict[str, Any]: ... +old_main_modules: List[ModuleType] = ... +def prepare(data: Mapping[str, Any]) -> None: ... +def import_main_path(main_path: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi new file mode 100644 index 0000000..9b22681 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/multiprocessing/synchronize.pyi @@ -0,0 +1,63 @@ +from typing import Callable, ContextManager, Optional, Union + +from multiprocessing.context import BaseContext +import threading +import sys + +_LockLike = Union[Lock, RLock] + +class Barrier(threading.Barrier): + def __init__(self, + parties: int, + action: Optional[Callable] = ..., + timeout: Optional[float] = ..., + * + ctx: BaseContext) -> None: ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ..., *, ctx: BaseContext) -> None: ... + +class Condition(ContextManager[bool]): + def __init__(self, + lock: Optional[_LockLike] = ..., + *, + ctx: BaseContext) -> None: ... + if sys.version_info >= (3, 7): + def notify(self, n: int = ...) -> None: ... + else: + def notify(self) -> None: ... + def notify_all(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + def wait_for(self, + predicate: Callable[[], bool], + timeout: Optional[float] = ...) -> bool: ... + def acquire(self, + block: bool = ..., + timeout: Optional[float] = ...) -> bool: ... + def release(self) -> None: ... + +class Event(ContextManager[bool]): + def __init__(self, + lock: Optional[_LockLike] = ..., + *, + ctx: BaseContext) -> None: ... + def is_set(self) -> bool: ... + def set(self) -> None: ... + def clear(self) -> None: ... + def wait(self, timeout: Optional[float] = ...) -> bool: ... + +class Lock(SemLock): + def __init__(self, *, ctx: BaseContext) -> None: ... + +class RLock(SemLock): + def __init__(self, *, ctx: BaseContext) -> None: ... + +class Semaphore(SemLock): + def __init__(self, value: int = ..., *, ctx: BaseContext) -> None: ... + +# Not part of public API +class SemLock(ContextManager[bool]): + def acquire(self, + block: bool = ..., + timeout: Optional[float] = ...) -> bool: ... + def release(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nntplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nntplib.pyi new file mode 100644 index 0000000..00abdd9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nntplib.pyi @@ -0,0 +1,102 @@ +# Stubs for nntplib (Python 3) + +import datetime +import socket +import ssl +from typing import Any, Dict, IO, Iterable, List, NamedTuple, Optional, Tuple, TypeVar, Union + +_SelfT = TypeVar('_SelfT', bound=_NNTPBase) +_File = Union[IO[bytes], bytes, str, None] + + +class NNTPError(Exception): + response: str +class NNTPReplyError(NNTPError): ... +class NNTPTemporaryError(NNTPError): ... +class NNTPPermanentError(NNTPError): ... +class NNTPProtocolError(NNTPError): ... +class NNTPDataError(NNTPError): ... + +NNTP_PORT: int +NNTP_SSL_PORT: int + +GroupInfo = NamedTuple('GroupInfo', [ + ('group', str), + ('last', str), + ('first', str), + ('flag', str), +]) +ArticleInfo = NamedTuple('ArticleInfo', [ + ('number', int), + ('message_id', str), + ('lines', List[bytes]), +]) + +def decode_header(header_str: str) -> str: ... + +class _NNTPBase: + encoding: str + errors: str + + host: str + file: IO[bytes] + debugging: int + welcome: str + readermode_afterauth: bool + tls_on: bool + authenticated: bool + nntp_implementation: str + nntp_version: int + + def __init__(self, file: IO[bytes], host: str, + readermode: Optional[bool] = ..., timeout: float = ...) -> None: ... + def __enter__(self: _SelfT) -> _SelfT: ... + def __exit__(self, *args: Any) -> None: ... + def getwelcome(self) -> str: ... + def getcapabilities(self) -> Dict[str, List[str]]: ... + def set_debuglevel(self, level: int) -> None: ... + def debug(self, level: int) -> None: ... + def capabilities(self) -> Tuple[str, Dict[str, List[str]]]: ... + def newgroups(self, date: Union[datetime.date, datetime.datetime], *, file: _File = ...) -> Tuple[str, List[str]]: ... + def newnews(self, group: str, date: Union[datetime.date, datetime.datetime], *, file: _File = ...) -> Tuple[str, List[str]]: ... + def list(self, group_pattern: Optional[str] = ..., *, file: _File = ...) -> Tuple[str, List[str]]: ... + def description(self, group: str) -> str: ... + def descriptions(self, group_pattern: str) -> Tuple[str, Dict[str, str]]: ... + def group(self, name: str) -> Tuple[str, int, int, int, str]: ... + def help(self, *, file: _File = ...) -> Tuple[str, List[str]]: ... + def stat(self, message_spec: Any = ...) -> Tuple[str, int, str]: ... + def next(self) -> Tuple[str, int, str]: ... + def last(self) -> Tuple[str, int, str]: ... + def head(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def body(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def article(self, message_spec: Any = ..., *, file: _File = ...) -> Tuple[str, ArticleInfo]: ... + def slave(self) -> str: ... + def xhdr(self, hdr: str, str: Any, *, file: _File = ...) -> Tuple[str, List[str]]: ... + def xover(self, start: int, end: int, *, file: _File = ...) -> Tuple[str, List[Tuple[int, Dict[str, str]]]]: ... + def over(self, message_spec: Union[None, str, List[Any], Tuple[Any, ...]], *, file: _File = ...) -> Tuple[str, List[Tuple[int, Dict[str, str]]]]: ... + def xgtitle(self, group: str, *, file: _File = ...) -> Tuple[str, List[Tuple[str, str]]]: ... + def xpath(self, id: Any) -> Tuple[str, str]: ... + def date(self) -> Tuple[str, datetime.datetime]: ... + def post(self, data: Union[bytes, Iterable[bytes]]) -> str: ... + def ihave(self, message_id: Any, data: Union[bytes, Iterable[bytes]]) -> str: ... + def quit(self) -> str: ... + def login(self, user: Optional[str] = ..., password: Optional[str] = ..., usenetrc: bool = ...) -> None: ... + def starttls(self, ssl_context: Optional[ssl.SSLContext] = ...) -> None: ... + + +class NNTP(_NNTPBase): + port: int + sock: socket.socket + + def __init__(self, host: str, port: int = ..., user: Optional[str] = ..., password: Optional[str] = ..., + readermode: Optional[bool] = ..., usenetrc: bool = ..., + timeout: float = ...) -> None: ... + + +class NNTP_SSL(_NNTPBase): + sock: socket.socket + + def __init__(self, host: str, port: int = ..., user: Optional[str] = ..., password: Optional[str] = ..., + ssl_context: Optional[ssl.SSLContext] = ..., + readermode: Optional[bool] = ..., usenetrc: bool = ..., + timeout: float = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi new file mode 100644 index 0000000..b8ad8d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/nturl2path.pyi @@ -0,0 +1,2 @@ +def url2pathname(url: str) -> str: ... +def pathname2url(p: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi new file mode 100644 index 0000000..b717926 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/__init__.pyi @@ -0,0 +1,722 @@ +# Stubs for os +# Ron Murawski + +from io import TextIOWrapper as _TextIOWrapper +import sys +from typing import ( + Mapping, MutableMapping, Dict, List, Any, Tuple, IO, Iterable, Iterator, NoReturn, overload, Union, AnyStr, + Optional, Generic, Set, Callable, Text, Sequence, NamedTuple, TypeVar, ContextManager +) + +# Re-exported names from other modules. +from builtins import OSError as error +from . import path as path + +_T = TypeVar('_T') + +# ----- os variables ----- + +if sys.version_info >= (3, 2): + supports_bytes_environ: bool + +if sys.version_info >= (3, 3): + supports_dir_fd: Set[Callable[..., Any]] + supports_fd: Set[Callable[..., Any]] + supports_effective_ids: Set[Callable[..., Any]] + supports_follow_symlinks: Set[Callable[..., Any]] + + if sys.platform != 'win32': + # Unix only + PRIO_PROCESS: int + PRIO_PGRP: int + PRIO_USER: int + + F_LOCK: int + F_TLOCK: int + F_ULOCK: int + F_TEST: int + + POSIX_FADV_NORMAL: int + POSIX_FADV_SEQUENTIAL: int + POSIX_FADV_RANDOM: int + POSIX_FADV_NOREUSE: int + POSIX_FADV_WILLNEED: int + POSIX_FADV_DONTNEED: int + + SF_NODISKIO: int + SF_MNOWAIT: int + SF_SYNC: int + + XATTR_SIZE_MAX: int # Linux only + XATTR_CREATE: int # Linux only + XATTR_REPLACE: int # Linux only + + P_PID: int + P_PGID: int + P_ALL: int + + WEXITED: int + WSTOPPED: int + WNOWAIT: int + + CLD_EXITED: int + CLD_DUMPED: int + CLD_TRAPPED: int + CLD_CONTINUED: int + + SCHED_OTHER: int # some flavors of Unix + SCHED_BATCH: int # some flavors of Unix + SCHED_IDLE: int # some flavors of Unix + SCHED_SPORADIC: int # some flavors of Unix + SCHED_FIFO: int # some flavors of Unix + SCHED_RR: int # some flavors of Unix + SCHED_RESET_ON_FORK: int # some flavors of Unix + + RTLD_LAZY: int + RTLD_NOW: int + RTLD_GLOBAL: int + RTLD_LOCAL: int + RTLD_NODELETE: int + RTLD_NOLOAD: int + RTLD_DEEPBIND: int + + +SEEK_SET: int +SEEK_CUR: int +SEEK_END: int +if sys.version_info >= (3, 3) and sys.platform != 'win32': + SEEK_DATA: int # some flavors of Unix + SEEK_HOLE: int # some flavors of Unix + +O_RDONLY: int +O_WRONLY: int +O_RDWR: int +O_APPEND: int +O_CREAT: int +O_EXCL: int +O_TRUNC: int +# We don't use sys.platform for O_* flags to denote platform-dependent APIs because some codes, +# including tests for mypy, use a more finer way than sys.platform before using these APIs +# See https://github.com/python/typeshed/pull/2286 for discussions +O_DSYNC: int # Unix only +O_RSYNC: int # Unix only +O_SYNC: int # Unix only +O_NDELAY: int # Unix only +O_NONBLOCK: int # Unix only +O_NOCTTY: int # Unix only +if sys.version_info >= (3, 3): + O_CLOEXEC: int # Unix only +O_SHLOCK: int # Unix only +O_EXLOCK: int # Unix only +O_BINARY: int # Windows only +O_NOINHERIT: int # Windows only +O_SHORT_LIVED: int # Windows only +O_TEMPORARY: int # Windows only +O_RANDOM: int # Windows only +O_SEQUENTIAL: int # Windows only +O_TEXT: int # Windows only +O_ASYNC: int # Gnu extension if in C library +O_DIRECT: int # Gnu extension if in C library +O_DIRECTORY: int # Gnu extension if in C library +O_NOFOLLOW: int # Gnu extension if in C library +O_NOATIME: int # Gnu extension if in C library +if sys.version_info >= (3, 4): + O_PATH: int # Gnu extension if in C library + O_TMPFILE: int # Gnu extension if in C library +O_LARGEFILE: int # Gnu extension if in C library + +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +linesep: str +devnull: str +name: str + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +class _Environ(MutableMapping[AnyStr, AnyStr], Generic[AnyStr]): + def copy(self) -> Dict[AnyStr, AnyStr]: ... + def __delitem__(self, key: AnyStr) -> None: ... + def __getitem__(self, key: AnyStr) -> AnyStr: ... + def __setitem__(self, key: AnyStr, value: AnyStr) -> None: ... + def __iter__(self) -> Iterator[AnyStr]: ... + def __len__(self) -> int: ... + +environ: _Environ[str] +if sys.version_info >= (3, 2): + environb: _Environ[bytes] + +if sys.platform != 'win32': + confstr_names: Dict[str, int] + pathconf_names: Dict[str, int] + sysconf_names: Dict[str, int] + + EX_OK: int + EX_USAGE: int + EX_DATAERR: int + EX_NOINPUT: int + EX_NOUSER: int + EX_NOHOST: int + EX_UNAVAILABLE: int + EX_SOFTWARE: int + EX_OSERR: int + EX_OSFILE: int + EX_CANTCREAT: int + EX_IOERR: int + EX_TEMPFAIL: int + EX_PROTOCOL: int + EX_NOPERM: int + EX_CONFIG: int + EX_NOTFOUND: int + +P_NOWAIT: int +P_NOWAITO: int +P_WAIT: int +if sys.platform == 'win32': + P_DETACH: int + P_OVERLAY: int + +# wait()/waitpid() options +if sys.platform != 'win32': + WNOHANG: int # Unix only + WCONTINUED: int # some Unix systems + WUNTRACED: int # Unix only + +TMP_MAX: int # Undocumented, but used by tempfile + +# ----- os classes (structures) ----- +class stat_result: + # For backward compatibility, the return value of stat() is also + # accessible as a tuple of at least 10 integers giving the most important + # (and portable) members of the stat structure, in the order st_mode, + # st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, + # st_ctime. More items may be added at the end by some implementations. + + st_mode: int # protection bits, + st_ino: int # inode number, + st_dev: int # device, + st_nlink: int # number of hard links, + st_uid: int # user id of owner, + st_gid: int # group id of owner, + st_size: int # size of file, in bytes, + st_atime: float # time of most recent access, + st_mtime: float # time of most recent content modification, + st_ctime: float # platform dependent (time of most recent metadata change on Unix, or the time of creation on Windows) + st_atime_ns: int # time of most recent access, in nanoseconds + st_mtime_ns: int # time of most recent content modification in nanoseconds + st_ctime_ns: int # platform dependent (time of most recent metadata change on Unix, or the time of creation on Windows) in nanoseconds + + def __getitem__(self, i: int) -> int: ... + + # not documented + def __init__(self, tuple: Tuple[int, ...]) -> None: ... + + # On some Unix systems (such as Linux), the following attributes may also + # be available: + st_blocks: int # number of blocks allocated for file + st_blksize: int # filesystem blocksize + st_rdev: int # type of device if an inode device + st_flags: int # user defined flags for file + + # On other Unix systems (such as FreeBSD), the following attributes may be + # available (but may be only filled out if root tries to use them): + st_gen: int # file generation number + st_birthtime: int # time of file creation + + # On Mac OS systems, the following attributes may also be available: + st_rsize: int + st_creator: int + st_type: int + +if sys.version_info >= (3, 6): + from builtins import _PathLike as PathLike # See comment in builtins + +_PathType = path._PathType +if sys.version_info >= (3, 3): + _FdOrPathType = Union[int, _PathType] +else: + _FdOrPathType = _PathType + +if sys.version_info >= (3, 6): + class DirEntry(PathLike[AnyStr]): + # This is what the scandir interator yields + # The constructor is hidden + + name: AnyStr + path: AnyStr + def inode(self) -> int: ... + def is_dir(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_file(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_symlink(self) -> bool: ... + def stat(self, *, follow_symlinks: bool = ...) -> stat_result: ... + + def __fspath__(self) -> AnyStr: ... +elif sys.version_info >= (3, 5): + class DirEntry(Generic[AnyStr]): + # This is what the scandir interator yields + # The constructor is hidden + + name: AnyStr + path: AnyStr + def inode(self) -> int: ... + def is_dir(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_file(self, *, follow_symlinks: bool = ...) -> bool: ... + def is_symlink(self) -> bool: ... + def stat(self, *, follow_symlinks: bool = ...) -> stat_result: ... + + +if sys.platform != 'win32': + class statvfs_result: # Unix only + f_bsize: int + f_frsize: int + f_blocks: int + f_bfree: int + f_bavail: int + f_files: int + f_ffree: int + f_favail: int + f_flag: int + f_namemax: int + +# ----- os function stubs ----- +if sys.version_info >= (3, 6): + def fsencode(filename: Union[str, bytes, PathLike]) -> bytes: ... +else: + def fsencode(filename: Union[str, bytes]) -> bytes: ... + +if sys.version_info >= (3, 6): + def fsdecode(filename: Union[str, bytes, PathLike]) -> str: ... +else: + def fsdecode(filename: Union[str, bytes]) -> str: ... + +if sys.version_info >= (3, 6): + @overload + def fspath(path: str) -> str: ... + @overload + def fspath(path: bytes) -> bytes: ... + @overload + def fspath(path: PathLike) -> Any: ... + +def get_exec_path(env: Optional[Mapping[str, str]] = ...) -> List[str]: ... +# NOTE: get_exec_path(): returns List[bytes] when env not None +def getlogin() -> str: ... +def getpid() -> int: ... +def getppid() -> int: ... +def strerror(code: int) -> str: ... +def umask(mask: int) -> int: ... + +if sys.platform != 'win32': + # Unix only + def ctermid() -> str: ... + def getegid() -> int: ... + def geteuid() -> int: ... + def getgid() -> int: ... + if sys.version_info >= (3, 3): + def getgrouplist(user: str, gid: int) -> List[int]: ... + def getgroups() -> List[int]: ... # Unix only, behaves differently on Mac + def initgroups(username: str, gid: int) -> None: ... + def getpgid(pid: int) -> int: ... + def getpgrp() -> int: ... + if sys.version_info >= (3, 3): + def getpriority(which: int, who: int) -> int: ... + def setpriority(which: int, who: int, priority: int) -> None: ... + def getresuid() -> Tuple[int, int, int]: ... + def getresgid() -> Tuple[int, int, int]: ... + def getuid() -> int: ... + def setegid(egid: int) -> None: ... + def seteuid(euid: int) -> None: ... + def setgid(gid: int) -> None: ... + def setgroups(groups: Sequence[int]) -> None: ... + def setpgrp() -> None: ... + def setpgid(pid: int, pgrp: int) -> None: ... + def setregid(rgid: int, egid: int) -> None: ... + def setresgid(rgid: int, egid: int, sgid: int) -> None: ... + def setresuid(ruid: int, euid: int, suid: int) -> None: ... + def setreuid(ruid: int, euid: int) -> None: ... + def getsid(pid: int) -> int: ... + def setsid() -> None: ... + def setuid(uid: int) -> None: ... + if sys.version_info >= (3, 3): + from posix import uname_result + def uname() -> uname_result: ... + else: + def uname() -> Tuple[str, str, str, str, str]: ... + +@overload +def getenv(key: Text) -> Optional[str]: ... +@overload +def getenv(key: Text, default: _T) -> Union[str, _T]: ... +def getenvb(key: bytes, default: bytes = ...) -> bytes: ... +def putenv(key: Union[bytes, Text], value: Union[bytes, Text]) -> None: ... +def unsetenv(key: Union[bytes, Text]) -> None: ... + +# Return IO or TextIO +def fdopen(fd: int, mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + errors: str = ..., newline: str = ..., closefd: bool = ...) -> Any: ... +def close(fd: int) -> None: ... +def closerange(fd_low: int, fd_high: int) -> None: ... +def device_encoding(fd: int) -> Optional[str]: ... +def dup(fd: int) -> int: ... +if sys.version_info >= (3, 7): + def dup2(fd: int, fd2: int, inheritable: bool = ...) -> int: ... +elif sys.version_info >= (3, 4): + def dup2(fd: int, fd2: int, inheritable: bool = ...) -> None: ... +else: + def dup2(fd: int, fd2: int) -> None: ... +def fstat(fd: int) -> stat_result: ... +def fsync(fd: int) -> None: ... +def lseek(fd: int, pos: int, how: int) -> int: ... +if sys.version_info >= (3, 3): + def open(file: _PathType, flags: int, mode: int = ..., *, dir_fd: Optional[int] = ...) -> int: ... +else: + def open(file: _PathType, flags: int, mode: int = ...) -> int: ... +def pipe() -> Tuple[int, int]: ... +def read(fd: int, n: int) -> bytes: ... + +if sys.platform != 'win32': + # Unix only + def fchmod(fd: int, mode: int) -> None: ... + def fchown(fd: int, uid: int, gid: int) -> None: ... + def fdatasync(fd: int) -> None: ... # Unix only, not Mac + def fpathconf(fd: int, name: Union[str, int]) -> int: ... + def fstatvfs(fd: int) -> statvfs_result: ... + def ftruncate(fd: int, length: int) -> None: ... + if sys.version_info >= (3, 5): + def get_blocking(fd: int) -> bool: ... + def set_blocking(fd: int, blocking: bool) -> None: ... + def isatty(fd: int) -> bool: ... + if sys.version_info >= (3, 3): + def lockf(__fd: int, __cmd: int, __length: int) -> None: ... + def openpty() -> Tuple[int, int]: ... # some flavors of Unix + if sys.version_info >= (3, 3): + def pipe2(flags: int) -> Tuple[int, int]: ... # some flavors of Unix + def posix_fallocate(fd: int, offset: int, length: int) -> None: ... + def posix_fadvise(fd: int, offset: int, length: int, advice: int) -> None: ... + def pread(fd: int, buffersize: int, offset: int) -> bytes: ... + def pwrite(fd: int, string: bytes, offset: int) -> int: ... + @overload + def sendfile(__out_fd: int, __in_fd: int, offset: Optional[int], count: int) -> int: ... + @overload + def sendfile(__out_fd: int, __in_fd: int, offset: int, count: int, + headers: Sequence[bytes] = ..., trailers: Sequence[bytes] = ..., flags: int = ...) -> int: ... # FreeBSD and Mac OS X only + def readv(fd: int, buffers: Sequence[bytearray]) -> int: ... + def writev(fd: int, buffers: Sequence[bytes]) -> int: ... + +terminal_size = NamedTuple('terminal_size', [('columns', int), ('lines', int)]) +def get_terminal_size(fd: int = ...) -> terminal_size: ... + +if sys.version_info >= (3, 4): + def get_inheritable(fd: int) -> bool: ... + def set_inheritable(fd: int, inheritable: bool) -> None: ... + +if sys.platform != 'win32': + # Unix only + def tcgetpgrp(fd: int) -> int: ... + def tcsetpgrp(fd: int, pg: int) -> None: ... + def ttyname(fd: int) -> str: ... +def write(fd: int, string: bytes) -> int: ... +if sys.version_info >= (3, 3): + def access(path: _FdOrPathType, mode: int, *, dir_fd: Optional[int] = ..., + effective_ids: bool = ..., follow_symlinks: bool = ...) -> bool: ... +else: + def access(path: _PathType, mode: int) -> bool: ... +def chdir(path: _FdOrPathType) -> None: ... +def fchdir(fd: int) -> None: ... +def getcwd() -> str: ... +def getcwdb() -> bytes: ... +if sys.version_info >= (3, 3): + def chmod(path: _FdOrPathType, mode: int, *, dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... + if sys.platform != 'win32': + def chflags(path: _PathType, flags: int, follow_symlinks: bool = ...) -> None: ... # some flavors of Unix + def chown(path: _FdOrPathType, uid: int, gid: int, *, dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... # Unix only +else: + def chmod(path: _PathType, mode: int) -> None: ... + if sys.platform != 'win32': + def chflags(path: _PathType, flags: int) -> None: ... # Some flavors of Unix + def chown(path: _PathType, uid: int, gid: int) -> None: ... # Unix only +if sys.platform != 'win32': + # Unix only + def chroot(path: _PathType) -> None: ... + def lchflags(path: _PathType, flags: int) -> None: ... + def lchmod(path: _PathType, mode: int) -> None: ... + def lchown(path: _PathType, uid: int, gid: int) -> None: ... +if sys.version_info >= (3, 3): + def link(src: _PathType, link_name: _PathType, *, src_dir_fd: Optional[int] = ..., + dst_dir_fd: Optional[int] = ..., follow_symlinks: bool = ...) -> None: ... +else: + def link(src: _PathType, link_name: _PathType) -> None: ... + +if sys.version_info >= (3, 6): + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + @overload + def listdir(path: int) -> List[str]: ... + @overload + def listdir(path: PathLike[str]) -> List[str]: ... +elif sys.version_info >= (3, 3): + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + @overload + def listdir(path: int) -> List[str]: ... +else: + @overload + def listdir(path: Optional[str] = ...) -> List[str]: ... + @overload + def listdir(path: bytes) -> List[bytes]: ... + +if sys.version_info >= (3, 3): + def lstat(path: _PathType, *, dir_fd: Optional[int] = ...) -> stat_result: ... + def mkdir(path: _PathType, mode: int = ..., *, dir_fd: Optional[int] = ...) -> None: ... + if sys.platform != 'win32': + def mkfifo(path: _PathType, mode: int = ..., *, dir_fd: Optional[int] = ...) -> None: ... # Unix only +else: + def lstat(path: _PathType) -> stat_result: ... + def mkdir(path: _PathType, mode: int = ...) -> None: ... + if sys.platform != 'win32': + def mkfifo(path: _PathType, mode: int = ...) -> None: ... # Unix only +if sys.version_info >= (3, 4): + def makedirs(name: _PathType, mode: int = ..., exist_ok: bool = ...) -> None: ... +else: + def makedirs(path: _PathType, mode: int = ..., exist_ok: bool = ...) -> None: ... +if sys.version_info >= (3, 4): + def mknod(path: _PathType, mode: int = ..., device: int = ..., + *, dir_fd: Optional[int] = ...) -> None: ... +elif sys.version_info >= (3, 3): + def mknod(filename: _PathType, mode: int = ..., device: int = ..., + *, dir_fd: Optional[int] = ...) -> None: ... +else: + def mknod(filename: _PathType, mode: int = ..., device: int = ...) -> None: ... +def major(device: int) -> int: ... +def minor(device: int) -> int: ... +def makedev(major: int, minor: int) -> int: ... +if sys.platform != 'win32': + def pathconf(path: _FdOrPathType, name: Union[str, int]) -> int: ... # Unix only +if sys.version_info >= (3, 6): + def readlink(path: Union[AnyStr, PathLike[AnyStr]], *, dir_fd: Optional[int] = ...) -> AnyStr: ... +elif sys.version_info >= (3, 3): + def readlink(path: AnyStr, *, dir_fd: Optional[int] = ...) -> AnyStr: ... +else: + def readlink(path: AnyStr) -> AnyStr: ... +if sys.version_info >= (3, 3): + def remove(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... +else: + def remove(path: _PathType) -> None: ... +if sys.version_info >= (3, 4): + def removedirs(name: _PathType) -> None: ... +else: + def removedirs(path: _PathType) -> None: ... +if sys.version_info >= (3, 3): + def rename(src: _PathType, dst: _PathType, *, + src_dir_fd: Optional[int] = ..., dst_dir_fd: Optional[int] = ...) -> None: ... +else: + def rename(src: _PathType, dst: _PathType) -> None: ... +def renames(old: _PathType, new: _PathType) -> None: ... +if sys.version_info >= (3, 3): + def replace(src: _PathType, dst: _PathType, *, + src_dir_fd: Optional[int] = ..., dst_dir_fd: Optional[int] = ...) -> None: ... + def rmdir(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... +else: + def rmdir(path: _PathType) -> None: ... +if sys.version_info >= (3, 7): + class _ScandirIterator(Iterator[DirEntry[AnyStr]], ContextManager[_ScandirIterator[AnyStr]]): + def __next__(self) -> DirEntry[AnyStr]: ... + def close(self) -> None: ... + @overload + def scandir() -> _ScandirIterator[str]: ... + @overload + def scandir(path: int) -> _ScandirIterator[str]: ... + @overload + def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> _ScandirIterator[AnyStr]: ... +elif sys.version_info >= (3, 6): + class _ScandirIterator(Iterator[DirEntry[AnyStr]], ContextManager[_ScandirIterator[AnyStr]]): + def __next__(self) -> DirEntry[AnyStr]: ... + def close(self) -> None: ... + @overload + def scandir() -> _ScandirIterator[str]: ... + @overload + def scandir(path: Union[AnyStr, PathLike[AnyStr]]) -> _ScandirIterator[AnyStr]: ... +elif sys.version_info >= (3, 5): + @overload + def scandir() -> Iterator[DirEntry[str]]: ... + @overload + def scandir(path: AnyStr) -> Iterator[DirEntry[AnyStr]]: ... +if sys.version_info >= (3, 3): + def stat(path: _FdOrPathType, *, dir_fd: Optional[int] = ..., + follow_symlinks: bool = ...) -> stat_result: ... +else: + def stat(path: _PathType) -> stat_result: ... +if sys.version_info < (3, 7): + @overload + def stat_float_times() -> bool: ... + @overload + def stat_float_times(__newvalue: bool) -> None: ... +if sys.platform != 'win32': + def statvfs(path: _FdOrPathType) -> statvfs_result: ... # Unix only +if sys.version_info >= (3, 3): + def symlink(source: _PathType, link_name: _PathType, + target_is_directory: bool = ..., *, dir_fd: Optional[int] = ...) -> None: ... + if sys.platform != 'win32': + def sync() -> None: ... # Unix only + def truncate(path: _FdOrPathType, length: int) -> None: ... # Unix only up to version 3.4 + def unlink(path: _PathType, *, dir_fd: Optional[int] = ...) -> None: ... + def utime(path: _FdOrPathType, times: Optional[Union[Tuple[int, int], Tuple[float, float]]] = ..., *, + ns: Tuple[int, int] = ..., dir_fd: Optional[int] = ..., + follow_symlinks: bool = ...) -> None: ... +else: + def symlink(source: _PathType, link_name: _PathType, + target_is_directory: bool = ...) -> None: + ... # final argument in Windows only + def unlink(path: _PathType) -> None: ... + def utime(path: _PathType, times: Optional[Tuple[float, float]]) -> None: ... + +if sys.version_info >= (3, 6): + def walk(top: Union[AnyStr, PathLike[AnyStr]], topdown: bool = ..., + onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +else: + def walk(top: AnyStr, topdown: bool = ..., onerror: Optional[Callable[[OSError], Any]] = ..., + followlinks: bool = ...) -> Iterator[Tuple[AnyStr, List[AnyStr], + List[AnyStr]]]: ... +if sys.platform != 'win32' and sys.version_info >= (3, 3): + if sys.version_info >= (3, 7): + @overload + def fwalk(top: Union[str, PathLike[str]] = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + @overload + def fwalk(top: bytes, topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[bytes, List[bytes], List[bytes], int]]: ... + elif sys.version_info >= (3, 6): + def fwalk(top: Union[str, PathLike[str]] = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + else: + def fwalk(top: str = ..., topdown: bool = ..., + onerror: Optional[Callable] = ..., *, follow_symlinks: bool = ..., + dir_fd: Optional[int] = ...) -> Iterator[Tuple[str, List[str], List[str], int]]: ... + def getxattr(path: _FdOrPathType, attribute: _PathType, *, follow_symlinks: bool = ...) -> bytes: ... # Linux only + def listxattr(path: _FdOrPathType, *, follow_symlinks: bool = ...) -> List[str]: ... # Linux only + def removexattr(path: _FdOrPathType, attribute: _PathType, *, follow_symlinks: bool = ...) -> None: ... # Linux only + def setxattr(path: _FdOrPathType, attribute: _PathType, value: bytes, flags: int = ..., *, + follow_symlinks: bool = ...) -> None: ... # Linux only + +def abort() -> NoReturn: ... +# These are defined as execl(file, *args) but the first *arg is mandatory. +def execl(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... +def execlp(file: _PathType, __arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> NoReturn: ... + +# These are: execle(file, *args, env) but env is pulled from the last element of the args. +def execle(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... +def execlpe(file: _PathType, __arg0: Union[bytes, Text], *args: Any) -> NoReturn: ... + +# The docs say `args: tuple or list of strings` +# The implementation enforces tuple or list so we can't use Sequence. +_ExecVArgs = Union[Tuple[Union[bytes, Text], ...], List[bytes], List[Text], List[Union[bytes, Text]]] +def execv(path: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execve(path: _FdOrPathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... +def execvp(file: _PathType, args: _ExecVArgs) -> NoReturn: ... +def execvpe(file: _PathType, args: _ExecVArgs, env: Mapping[str, str]) -> NoReturn: ... + +def _exit(n: int) -> NoReturn: ... +def kill(pid: int, sig: int) -> None: ... +if sys.platform != 'win32': + # Unix only + def fork() -> int: ... + def forkpty() -> Tuple[int, int]: ... # some flavors of Unix + def killpg(pgid: int, sig: int) -> None: ... + def nice(increment: int) -> int: ... + def plock(op: int) -> None: ... # ???op is int? + +if sys.version_info >= (3, 0): + class _wrap_close(_TextIOWrapper): + def close(self) -> Optional[int]: ... # type: ignore + def popen(command: str, mode: str = ..., buffering: int = ...) -> _wrap_close: ... +else: + class _wrap_close(IO[Text]): + def close(self) -> Optional[int]: ... + def popen(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> _wrap_close: ... + def popen2(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text]]: ... + def popen3(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text], IO[Text]]: ... + def popen4(__cmd: Text, __mode: Text = ..., __bufsize: int = ...) -> Tuple[IO[Text], IO[Text]]: ... + +def spawnl(mode: int, path: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... +def spawnle(mode: int, path: _PathType, arg0: Union[bytes, Text], + *args: Any) -> int: ... # Imprecise sig +def spawnv(mode: int, path: _PathType, args: List[Union[bytes, Text]]) -> int: ... +def spawnve(mode: int, path: _PathType, args: List[Union[bytes, Text]], + env: Mapping[str, str]) -> int: ... +def system(command: _PathType) -> int: ... +if sys.version_info >= (3, 3): + from posix import times_result + def times() -> times_result: ... +else: + def times() -> Tuple[float, float, float, float, float]: ... +def waitpid(pid: int, options: int) -> Tuple[int, int]: ... + +if sys.platform == 'win32': + def startfile(path: _PathType, operation: Optional[str] = ...) -> None: ... +else: + # Unix only + def spawnlp(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Union[bytes, Text]) -> int: ... + def spawnlpe(mode: int, file: _PathType, arg0: Union[bytes, Text], *args: Any) -> int: ... # Imprecise signature + def spawnvp(mode: int, file: _PathType, args: List[Union[bytes, Text]]) -> int: ... + def spawnvpe(mode: int, file: _PathType, args: List[Union[bytes, Text]], env: Mapping[str, str]) -> int: ... + def wait() -> Tuple[int, int]: ... # Unix only + if sys.version_info >= (3, 3): + from posix import waitid_result + def waitid(idtype: int, ident: int, options: int) -> waitid_result: ... + def wait3(options: int) -> Tuple[int, int, Any]: ... + def wait4(pid: int, options: int) -> Tuple[int, int, Any]: ... + def WCOREDUMP(status: int) -> bool: ... + def WIFCONTINUED(status: int) -> bool: ... + def WIFSTOPPED(status: int) -> bool: ... + def WIFSIGNALED(status: int) -> bool: ... + def WIFEXITED(status: int) -> bool: ... + def WEXITSTATUS(status: int) -> int: ... + def WSTOPSIG(status: int) -> int: ... + def WTERMSIG(status: int) -> int: ... + +if sys.platform != 'win32' and sys.version_info >= (3, 3): + from posix import sched_param + def sched_get_priority_min(policy: int) -> int: ... # some flavors of Unix + def sched_get_priority_max(policy: int) -> int: ... # some flavors of Unix + def sched_setscheduler(pid: int, policy: int, param: sched_param) -> None: ... # some flavors of Unix + def sched_getscheduler(pid: int) -> int: ... # some flavors of Unix + def sched_setparam(pid: int, param: sched_param) -> None: ... # some flavors of Unix + def sched_getparam(pid: int) -> sched_param: ... # some flavors of Unix + def sched_rr_get_interval(pid: int) -> float: ... # some flavors of Unix + def sched_yield() -> None: ... # some flavors of Unix + def sched_setaffinity(pid: int, mask: Iterable[int]) -> None: ... # some flavors of Unix + def sched_getaffinity(pid: int) -> Set[int]: ... # some flavors of Unix + +if sys.version_info >= (3, 4): + def cpu_count() -> Optional[int]: ... +if sys.platform != 'win32': + # Unix only + def confstr(name: Union[str, int]) -> Optional[str]: ... + def getloadavg() -> Tuple[float, float, float]: ... + def sysconf(name: Union[str, int]) -> int: ... +if sys.version_info >= (3, 6): + def getrandom(size: int, flags: int = ...) -> bytes: ... + def urandom(size: int) -> bytes: ... +else: + def urandom(n: int) -> bytes: ... + +if sys.version_info >= (3, 7): + def register_at_fork(func: Callable[..., object], when: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/path.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/path.pyi new file mode 100644 index 0000000..c0bf576 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/os/path.pyi @@ -0,0 +1,180 @@ +# NB: path.pyi and stdlib/2 and stdlib/3 must remain consistent! +# Stubs for os.path +# Ron Murawski + +import os +import sys +from typing import ( + overload, List, Any, AnyStr, Sequence, Tuple, BinaryIO, TextIO, + TypeVar, Union, Text, Callable, Optional +) + +_T = TypeVar('_T') + +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PathType = Union[bytes, Text, _PathLike] + _StrPath = Union[Text, _PathLike[Text]] + _BytesPath = Union[bytes, _PathLike[bytes]] +else: + _PathType = Union[bytes, Text] + _StrPath = Text + _BytesPath = bytes + +# ----- os.path variables ----- +supports_unicode_filenames: bool +# aliases (also in os) +curdir: str +pardir: str +sep: str +if sys.platform == 'win32': + altsep: str +else: + altsep: Optional[str] +extsep: str +pathsep: str +defpath: str +devnull: str + +# ----- os.path function stubs ----- +if sys.version_info >= (3, 6): + # Overloads are necessary to work around python/mypy#3644. + @overload + def abspath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def abspath(path: AnyStr) -> AnyStr: ... + @overload + def basename(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def basename(path: AnyStr) -> AnyStr: ... + @overload + def dirname(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def dirname(path: AnyStr) -> AnyStr: ... + @overload + def expanduser(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expanduser(path: AnyStr) -> AnyStr: ... + @overload + def expandvars(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def expandvars(path: AnyStr) -> AnyStr: ... + @overload + def normcase(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normcase(path: AnyStr) -> AnyStr: ... + @overload + def normpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + @overload + def realpath(path: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(path: AnyStr) -> AnyStr: ... + else: + @overload + def realpath(filename: _PathLike[AnyStr]) -> AnyStr: ... + @overload + def realpath(filename: AnyStr) -> AnyStr: ... + +else: + def abspath(path: AnyStr) -> AnyStr: ... + def basename(path: AnyStr) -> AnyStr: ... + def dirname(path: AnyStr) -> AnyStr: ... + def expanduser(path: AnyStr) -> AnyStr: ... + def expandvars(path: AnyStr) -> AnyStr: ... + def normcase(path: AnyStr) -> AnyStr: ... + def normpath(path: AnyStr) -> AnyStr: ... + if sys.platform == 'win32': + def realpath(path: AnyStr) -> AnyStr: ... + else: + def realpath(filename: AnyStr) -> AnyStr: ... + +if sys.version_info >= (3, 6): + # In reality it returns str for sequences of _StrPath and bytes for sequences + # of _BytesPath, but mypy does not accept such a signature. + def commonpath(paths: Sequence[_PathType]) -> Any: ... +elif sys.version_info >= (3, 5): + def commonpath(paths: Sequence[AnyStr]) -> AnyStr: ... + +# NOTE: Empty lists results in '' (str) regardless of contained type. +# Also, in Python 2 mixed sequences of Text and bytes results in either Text or bytes +# So, fall back to Any +def commonprefix(list: Sequence[_PathType]) -> Any: ... + +if sys.version_info >= (3, 3): + def exists(path: Union[_PathType, int]) -> bool: ... +else: + def exists(path: _PathType) -> bool: ... +def lexists(path: _PathType) -> bool: ... + +# These return float if os.stat_float_times() == True, +# but int is a subclass of float. +def getatime(path: _PathType) -> float: ... +def getmtime(path: _PathType) -> float: ... +def getctime(path: _PathType) -> float: ... + +def getsize(path: _PathType) -> int: ... +def isabs(path: _PathType) -> bool: ... +def isfile(path: _PathType) -> bool: ... +def isdir(path: _PathType) -> bool: ... +def islink(path: _PathType) -> bool: ... +def ismount(path: _PathType) -> bool: ... + +if sys.version_info < (3, 0): + # Make sure signatures are disjunct, and allow combinations of bytes and unicode. + # (Since Python 2 allows that, too) + # Note that e.g. os.path.join("a", "b", "c", "d", u"e") will still result in + # a type error. + @overload + def join(__p1: bytes, *p: bytes) -> bytes: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: bytes, __p4: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: bytes, __p3: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: bytes, __p2: Text, *p: _PathType) -> Text: ... + @overload + def join(__p1: Text, *p: _PathType) -> Text: ... +elif sys.version_info >= (3, 6): + # Mypy complains that the signatures overlap (same for relpath below), but things seem to behave correctly anyway. + @overload + def join(path: _StrPath, *paths: _StrPath) -> Text: ... + @overload + def join(path: _BytesPath, *paths: _BytesPath) -> bytes: ... +else: + def join(path: AnyStr, *paths: AnyStr) -> AnyStr: ... + +@overload +def relpath(path: _BytesPath, start: Optional[_BytesPath] = ...) -> bytes: ... +@overload +def relpath(path: _StrPath, start: Optional[_StrPath] = ...) -> Text: ... + +def samefile(path1: _PathType, path2: _PathType) -> bool: ... +def sameopenfile(fp1: int, fp2: int) -> bool: ... +def samestat(stat1: os.stat_result, stat2: os.stat_result) -> bool: ... + +if sys.version_info >= (3, 6): + @overload + def split(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... + @overload + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... +else: + def split(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitdrive(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + def splitext(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... + +if sys.platform == 'win32': + def splitunc(path: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated + +if sys.version_info < (3,): + def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pathlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pathlib.pyi new file mode 100644 index 0000000..42968fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pathlib.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generator, IO, Optional, Sequence, Tuple, Type, TypeVar, Union, List +from types import TracebackType +import os +import sys + +_P = TypeVar('_P', bound='PurePath') + +if sys.version_info >= (3, 6): + _PurePathBase = os.PathLike[str] +else: + _PurePathBase = object + +class PurePath(_PurePathBase): + parts: Tuple[str, ...] + drive: str + root: str + anchor: str + name: str + suffix: str + suffixes: List[str] + stem: str + if sys.version_info < (3, 5): + def __init__(self, *pathsegments: str) -> None: ... + elif sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath]) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]]) -> _P: ... + def __hash__(self) -> int: ... + def __lt__(self, other: PurePath) -> bool: ... + def __le__(self, other: PurePath) -> bool: ... + def __gt__(self, other: PurePath) -> bool: ... + def __ge__(self, other: PurePath) -> bool: ... + def __truediv__(self: _P, key: Union[str, PurePath]) -> _P: ... + if sys.version_info < (3,): + def __div__(self: _P, key: Union[str, PurePath]) -> _P: ... + def __bytes__(self) -> bytes: ... + def as_posix(self) -> str: ... + def as_uri(self) -> str: ... + def is_absolute(self) -> bool: ... + def is_reserved(self) -> bool: ... + def match(self, path_pattern: str) -> bool: ... + def relative_to(self: _P, *other: Union[str, PurePath]) -> _P: ... + def with_name(self: _P, name: str) -> _P: ... + def with_suffix(self: _P, suffix: str) -> _P: ... + def joinpath(self: _P, *other: Union[str, PurePath]) -> _P: ... + + @property + def parents(self: _P) -> Sequence[_P]: ... + @property + def parent(self: _P) -> _P: ... + +class PurePosixPath(PurePath): ... +class PureWindowsPath(PurePath): ... + +class Path(PurePath): + def __enter__(self) -> Path: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Optional[bool]: ... + @classmethod + def cwd(cls: Type[_P]) -> _P: ... + def stat(self) -> os.stat_result: ... + def chmod(self, mode: int) -> None: ... + def exists(self) -> bool: ... + def glob(self, pattern: str) -> Generator[Path, None, None]: ... + def group(self) -> str: ... + def is_dir(self) -> bool: ... + def is_file(self) -> bool: ... + def is_symlink(self) -> bool: ... + def is_socket(self) -> bool: ... + def is_fifo(self) -> bool: ... + def is_block_device(self) -> bool: ... + def is_char_device(self) -> bool: ... + def iterdir(self) -> Generator[Path, None, None]: ... + def lchmod(self, mode: int) -> None: ... + def lstat(self) -> os.stat_result: ... + if sys.version_info < (3, 5): + def mkdir(self, mode: int = ..., + parents: bool = ...) -> None: ... + else: + def mkdir(self, mode: int = ..., parents: bool = ..., + exist_ok: bool = ...) -> None: ... + def open(self, mode: str = ..., buffering: int = ..., + encoding: Optional[str] = ..., errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + def owner(self) -> str: ... + def rename(self, target: Union[str, PurePath]) -> None: ... + def replace(self, target: Union[str, PurePath]) -> None: ... + if sys.version_info < (3, 6): + def resolve(self: _P) -> _P: ... + else: + def resolve(self: _P, strict: bool = ...) -> _P: ... + def rglob(self, pattern: str) -> Generator[Path, None, None]: ... + def rmdir(self) -> None: ... + def symlink_to(self, target: Union[str, Path], + target_is_directory: bool = ...) -> None: ... + def touch(self, mode: int = ..., exist_ok: bool = ...) -> None: ... + def unlink(self) -> None: ... + + if sys.version_info >= (3, 5): + @classmethod + def home(cls: Type[_P]) -> _P: ... + if sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath], + **kwargs: Any) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]], + **kwargs: Any) -> _P: ... + + def absolute(self: _P) -> _P: ... + def expanduser(self: _P) -> _P: ... + def read_bytes(self) -> bytes: ... + def read_text(self, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> str: ... + def samefile(self, other_path: Union[str, bytes, int, Path]) -> bool: ... + def write_bytes(self, data: bytes) -> int: ... + def write_text(self, data: str, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> int: ... + + +class PosixPath(Path, PurePosixPath): ... +class WindowsPath(Path, PureWindowsPath): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pipes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pipes.pyi new file mode 100644 index 0000000..658373e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/pipes.pyi @@ -0,0 +1,19 @@ +# Stubs for pipes + +# Based on http://docs.python.org/3.5/library/pipes.html + +import os + +class Template: + def __init__(self) -> None: ... + def reset(self) -> None: ... + def clone(self) -> Template: ... + def debug(self, flag: bool) -> None: ... + def append(self, cmd: str, kind: str) -> None: ... + def prepend(self, cmd: str, kind: str) -> None: ... + def open(self, file: str, rw: str) -> os._wrap_close: ... + def copy(self, file: str, rw: str) -> os._wrap_close: ... + +# Not documented, but widely used. +# Documented as shlex.quote since 3.3. +def quote(s: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/platform.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/platform.pyi new file mode 100644 index 0000000..728e259 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/platform.pyi @@ -0,0 +1,34 @@ +# Stubs for platform (Python 3.5) + +from os import devnull as DEV_NULL +from os import popen +from typing import Tuple, NamedTuple + +def libc_ver(executable: str = ..., lib: str = ..., version: str = ..., chunksize: int = ...) -> Tuple[str, str]: ... +def linux_distribution(distname: str = ..., version: str = ..., id: str = ..., supported_dists: Tuple[str, ...] = ..., full_distribution_name: bool = ...) -> Tuple[str, str, str]: ... +def dist(distname: str = ..., version: str = ..., id: str = ..., supported_dists: Tuple[str, ...] = ...) -> Tuple[str, str, str]: ... +def win32_ver(release: str = ..., version: str = ..., csd: str = ..., ptype: str = ...) -> Tuple[str, str, str, str]: ... +def mac_ver(release: str = ..., versioninfo: Tuple[str, str, str] = ..., machine: str = ...) -> Tuple[str, Tuple[str, str, str], str]: ... +def java_ver(release: str = ..., vendor: str = ..., vminfo: Tuple[str, str, str] = ..., osinfo: Tuple[str, str, str] = ...) -> Tuple[str, str, Tuple[str, str, str], Tuple[str, str, str]]: ... +def system_alias(system: str, release: str, version: str) -> Tuple[str, str, str]: ... +def architecture(executable: str = ..., bits: str = ..., linkage: str = ...) -> Tuple[str, str]: ... + +uname_result = NamedTuple('uname_result', [('system', str), ('node', str), ('release', str), ('version', str), ('machine', str), ('processor', str)]) + +def uname() -> uname_result: ... +def system() -> str: ... +def node() -> str: ... +def release() -> str: ... +def version() -> str: ... +def machine() -> str: ... +def processor() -> str: ... + +def python_implementation() -> str: ... +def python_version() -> str: ... +def python_version_tuple() -> Tuple[str, str, str]: ... +def python_branch() -> str: ... +def python_revision() -> str: ... +def python_build() -> Tuple[str, str]: ... +def python_compiler() -> str: ... + +def platform(aliased: bool = ..., terse: bool = ...) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/posix.pyi new file mode 100644 index 0000000..6902e5f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/posix.pyi @@ -0,0 +1,112 @@ +# Stubs for posix + +# NOTE: These are incomplete! + +import sys +from typing import NamedTuple, Tuple + +from os import stat_result as stat_result + +uname_result = NamedTuple('uname_result', [ + ('sysname', str), + ('nodename', str), + ('release', str), + ('version', str), + ('machine', str), +]) + +times_result = NamedTuple('times_result', [ + ('user', float), + ('system', float), + ('children_user', float), + ('children_system', float), + ('elapsed', float), +]) + +waitid_result = NamedTuple('waitid_result', [ + ('si_pid', int), + ('si_uid', int), + ('si_signo', int), + ('si_status', int), + ('si_code', int), +]) + +sched_param = NamedTuple('sched_param', [ + ('sched_priority', int), +]) + + +EX_CANTCREAT: int +EX_CONFIG: int +EX_DATAERR: int +EX_IOERR: int +EX_NOHOST: int +EX_NOINPUT: int +EX_NOPERM: int +EX_NOTFOUND: int +EX_NOUSER: int +EX_OK: int +EX_OSERR: int +EX_OSFILE: int +EX_PROTOCOL: int +EX_SOFTWARE: int +EX_TEMPFAIL: int +EX_UNAVAILABLE: int +EX_USAGE: int + +F_OK: int +R_OK: int +W_OK: int +X_OK: int + +if sys.version_info >= (3, 6): + GRND_NONBLOCK: int + GRND_RANDOM: int +NGROUPS_MAX: int + +O_APPEND: int +if sys.version_info >= (3, 4): + O_ACCMODE: int +O_ASYNC: int +O_CREAT: int +O_DIRECT: int +O_DIRECTORY: int +O_DSYNC: int +O_EXCL: int +O_LARGEFILE: int +O_NDELAY: int +O_NOATIME: int +O_NOCTTY: int +O_NOFOLLOW: int +O_NONBLOCK: int +O_RDONLY: int +O_RDWR: int +O_RSYNC: int +O_SYNC: int +O_TRUNC: int +O_WRONLY: int + +ST_APPEND: int +ST_MANDLOCK: int +ST_NOATIME: int +ST_NODEV: int +ST_NODIRATIME: int +ST_NOEXEC: int +ST_NOSUID: int +ST_RDONLY: int +ST_RELATIME: int +ST_SYNCHRONOUS: int +ST_WRITE: int + +TMP_MAX: int +WCONTINUED: int +WCOREDUMP: int +WEXITSTATUS: int +WIFCONTINUED: int +WIFEXITED: int +WIFSIGNALED: int +WIFSTOPPED: int +WNOHANG: int +WSTOPSIG: int +WTERMSIG: int +WUNTRACED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/queue.pyi new file mode 100644 index 0000000..9874524 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/queue.pyi @@ -0,0 +1,32 @@ +# Stubs for queue + +# NOTE: These are incomplete! + +from collections import deque +from typing import Any, TypeVar, Generic, Optional + +_T = TypeVar('_T') + +class Empty(Exception): ... +class Full(Exception): ... + +class Queue(Generic[_T]): + maxsize: int + queue: deque # undocumented + def __init__(self, maxsize: int = ...) -> None: ... + def _init(self, maxsize: int) -> None: ... + def empty(self) -> bool: ... + def full(self) -> bool: ... + def get(self, block: bool = ..., timeout: Optional[float] = ...) -> _T: ... + def get_nowait(self) -> _T: ... + def _get(self) -> _T: ... + def put(self, item: _T, block: bool = ..., timeout: Optional[float] = ...) -> None: ... + def put_nowait(self, item: _T) -> None: ... + def _put(self, item: _T) -> None: ... + def join(self) -> None: ... + def qsize(self) -> int: ... + def _qsize(self) -> int: ... + def task_done(self) -> None: ... + +class PriorityQueue(Queue[_T]): ... +class LifoQueue(Queue[_T]): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/random.pyi new file mode 100644 index 0000000..35ee634 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/random.pyi @@ -0,0 +1,71 @@ +# Stubs for random +# Ron Murawski +# Updated by Jukka Lehtosalo + +# based on http://docs.python.org/3.2/library/random.html + +# ----- random classes ----- + +import _random +import sys +from typing import ( + Any, TypeVar, Sequence, List, Callable, AbstractSet, Union, Optional +) + +_T = TypeVar('_T') + +class Random(_random.Random): + def __init__(self, x: Any = ...) -> None: ... + def seed(self, a: Any = ..., version: int = ...) -> None: ... + def getstate(self) -> tuple: ... + def setstate(self, state: tuple) -> None: ... + def getrandbits(self, k: int) -> int: ... + def randrange(self, start: int, stop: Union[int, None] = ..., step: int = ...) -> int: ... + def randint(self, a: int, b: int) -> int: ... + def choice(self, seq: Sequence[_T]) -> _T: ... + if sys.version_info >= (3, 6): + def choices(self, population: Sequence[_T], weights: Optional[Sequence[float]] = ..., *, cum_weights: Optional[Sequence[float]] = ..., k: int = ...) -> List[_T]: ... + def shuffle(self, x: List[Any], random: Union[Callable[[], float], None] = ...) -> None: ... + def sample(self, population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... + def random(self) -> float: ... + def uniform(self, a: float, b: float) -> float: ... + def triangular(self, low: float = ..., high: float = ..., mode: float = ...) -> float: ... + def betavariate(self, alpha: float, beta: float) -> float: ... + def expovariate(self, lambd: float) -> float: ... + def gammavariate(self, alpha: float, beta: float) -> float: ... + def gauss(self, mu: float, sigma: float) -> float: ... + def lognormvariate(self, mu: float, sigma: float) -> float: ... + def normalvariate(self, mu: float, sigma: float) -> float: ... + def vonmisesvariate(self, mu: float, kappa: float) -> float: ... + def paretovariate(self, alpha: float) -> float: ... + def weibullvariate(self, alpha: float, beta: float) -> float: ... + +# SystemRandom is not implemented for all OS's; good on Windows & Linux +class SystemRandom(Random): + ... + +# ----- random function stubs ----- +def seed(a: Any = ..., version: int = ...) -> None: ... +def getstate() -> object: ... +def setstate(state: object) -> None: ... +def getrandbits(k: int) -> int: ... +def randrange(start: int, stop: Union[None, int] = ..., step: int = ...) -> int: ... +def randint(a: int, b: int) -> int: ... +def choice(seq: Sequence[_T]) -> _T: ... +if sys.version_info >= (3, 6): + def choices(population: Sequence[_T], weights: Optional[Sequence[float]] = ..., *, cum_weights: Optional[Sequence[float]] = ..., k: int = ...) -> List[_T]: ... +def shuffle(x: List[Any], random: Union[Callable[[], float], None] = ...) -> None: ... +def sample(population: Union[Sequence[_T], AbstractSet[_T]], k: int) -> List[_T]: ... +def random() -> float: ... +def uniform(a: float, b: float) -> float: ... +def triangular(low: float = ..., high: float = ..., + mode: float = ...) -> float: ... +def betavariate(alpha: float, beta: float) -> float: ... +def expovariate(lambd: float) -> float: ... +def gammavariate(alpha: float, beta: float) -> float: ... +def gauss(mu: float, sigma: float) -> float: ... +def lognormvariate(mu: float, sigma: float) -> float: ... +def normalvariate(mu: float, sigma: float) -> float: ... +def vonmisesvariate(mu: float, kappa: float) -> float: ... +def paretovariate(alpha: float) -> float: ... +def weibullvariate(alpha: float, beta: float) -> float: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/re.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/re.pyi new file mode 100644 index 0000000..a75bfe6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/re.pyi @@ -0,0 +1,155 @@ +# Stubs for re +# Ron Murawski +# 'bytes' support added by Jukka Lehtosalo + +# based on: http://docs.python.org/3.2/library/re.html +# and http://hg.python.org/cpython/file/618ea5612e83/Lib/re.py + +import sys +from typing import ( + List, Iterator, overload, Callable, Tuple, Sequence, Dict, + Generic, AnyStr, Match, Pattern, Any, Optional, Union +) + +# ----- re variables and constants ----- +if sys.version_info >= (3, 6): + import enum + class RegexFlag(enum.IntFlag): + A = 0 + ASCII = 0 + DEBUG = 0 + I = 0 + IGNORECASE = 0 + L = 0 + LOCALE = 0 + M = 0 + MULTILINE = 0 + S = 0 + DOTALL = 0 + X = 0 + VERBOSE = 0 + U = 0 + UNICODE = 0 + T = 0 + TEMPLATE = 0 + + A = RegexFlag.A + ASCII = RegexFlag.ASCII + DEBUG = RegexFlag.DEBUG + I = RegexFlag.I + IGNORECASE = RegexFlag.IGNORECASE + L = RegexFlag.L + LOCALE = RegexFlag.LOCALE + M = RegexFlag.M + MULTILINE = RegexFlag.MULTILINE + S = RegexFlag.S + DOTALL = RegexFlag.DOTALL + X = RegexFlag.X + VERBOSE = RegexFlag.VERBOSE + U = RegexFlag.U + UNICODE = RegexFlag.UNICODE + T = RegexFlag.T + TEMPLATE = RegexFlag.TEMPLATE + _FlagsType = Union[int, RegexFlag] +else: + A = 0 + ASCII = 0 + DEBUG = 0 + I = 0 + IGNORECASE = 0 + L = 0 + LOCALE = 0 + M = 0 + MULTILINE = 0 + S = 0 + DOTALL = 0 + X = 0 + VERBOSE = 0 + U = 0 + UNICODE = 0 + T = 0 + TEMPLATE = 0 + _FlagsType = int + +if sys.version_info < (3, 7): + # undocumented + _pattern_type: type + +class error(Exception): ... + +@overload +def compile(pattern: AnyStr, flags: _FlagsType = ...) -> Pattern[AnyStr]: ... +@overload +def compile(pattern: Pattern[AnyStr], flags: _FlagsType = ...) -> Pattern[AnyStr]: ... + +@overload +def search(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def search(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def match(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def match(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +# New in Python 3.4 +@overload +def fullmatch(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... +@overload +def fullmatch(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> Optional[Match[AnyStr]]: ... + +@overload +def split(pattern: AnyStr, string: AnyStr, + maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ... +@overload +def split(pattern: Pattern[AnyStr], string: AnyStr, + maxsplit: int = ..., flags: _FlagsType = ...) -> List[AnyStr]: ... + +@overload +def findall(pattern: AnyStr, string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ... +@overload +def findall(pattern: Pattern[AnyStr], string: AnyStr, flags: _FlagsType = ...) -> List[Any]: ... + +# Return an iterator yielding match objects over all non-overlapping matches +# for the RE pattern in string. The string is scanned left-to-right, and +# matches are returned in the order found. Empty matches are included in the +# result unless they touch the beginning of another match. +@overload +def finditer(pattern: AnyStr, string: AnyStr, + flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ... +@overload +def finditer(pattern: Pattern[AnyStr], string: AnyStr, + flags: _FlagsType = ...) -> Iterator[Match[AnyStr]]: ... + +@overload +def sub(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> AnyStr: ... +@overload +def sub(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., flags: _FlagsType = ...) -> AnyStr: ... + +@overload +def subn(pattern: AnyStr, repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: AnyStr, repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Pattern[AnyStr], repl: AnyStr, string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... +@overload +def subn(pattern: Pattern[AnyStr], repl: Callable[[Match[AnyStr]], AnyStr], + string: AnyStr, count: int = ..., + flags: _FlagsType = ...) -> Tuple[AnyStr, int]: ... + +def escape(string: AnyStr) -> AnyStr: ... + +def purge() -> None: ... +def template(pattern: Union[AnyStr, Pattern[AnyStr]], flags: _FlagsType = ...) -> Pattern[AnyStr]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/reprlib.pyi new file mode 100644 index 0000000..4622518 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/reprlib.pyi @@ -0,0 +1,37 @@ +# Stubs for reprlib (Python 3) + +from array import array +from typing import Any, Callable, Deque, Dict, FrozenSet, List, Set, Tuple + +_ReprFunc = Callable[[Any], str] + +def recursive_repr(fillvalue: str = ...) -> Callable[[_ReprFunc], _ReprFunc]: ... + +class Repr: + maxlevel: int + maxdict: int + maxlist: int + maxtuple: int + maxset: int + maxfrozenset: int + maxdeque: int + maxarray: int + maxlong: int + maxstring: int + maxother: int + def __init__(self) -> None: ... + def repr(self, x: Any) -> str: ... + def repr1(self, x: Any, level: int) -> str: ... + def repr_tuple(self, x: Tuple[Any, ...], level: int) -> str: ... + def repr_list(self, x: List[Any], level: int) -> str: ... + def repr_array(self, x: array, level: int) -> str: ... + def repr_set(self, x: Set[Any], level: int) -> str: ... + def repr_frozenset(self, x: FrozenSet[Any], level: int) -> str: ... + def repr_deque(self, x: Deque[Any], level: int) -> str: ... + def repr_dict(self, x: Dict[Any, Any], level: int) -> str: ... + def repr_str(self, x: str, level: int) -> str: ... + def repr_int(self, x: int, level: int) -> str: ... + def repr_instance(self, x: Any, level: int) -> str: ... + +aRepr: Repr +def repr(x: object) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/resource.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/resource.pyi new file mode 100644 index 0000000..0d2e30b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/resource.pyi @@ -0,0 +1,42 @@ +# Stubs for resource + +# NOTE: These are incomplete! + +from typing import Tuple, Optional, NamedTuple + +RLIMIT_AS: int +RLIMIT_CORE: int +RLIMIT_CPU: int +RLIMIT_DATA: int +RLIMIT_FSIZE: int +RLIMIT_MEMLOCK: int +RLIMIT_MSGQUEUE: int +RLIMIT_NICE: int +RLIMIT_NOFILE: int +RLIMIT_NPROC: int +RLIMIT_OFILE: int +RLIMIT_RSS: int +RLIMIT_RTPRIO: int +RLIMIT_RTTIME: int +RLIMIT_SIGPENDING: int +RLIMIT_STACK: int +RLIM_INFINITY: int +RUSAGE_CHILDREN: int +RUSAGE_SELF: int +RUSAGE_THREAD: int + +_RUsage = NamedTuple('_RUsage', [('ru_utime', float), ('ru_stime', float), ('ru_maxrss', int), + ('ru_ixrss', int), ('ru_idrss', int), ('ru_isrss', int), + ('ru_minflt', int), ('ru_majflt', int), ('ru_nswap', int), + ('ru_inblock', int), ('ru_oublock', int), ('ru_msgsnd', int), + ('ru_msgrcv', int), ('ru_nsignals', int), ('ru_nvcsw', int), + ('ru_nivcsw', int)]) + +def getpagesize() -> int: ... +def getrlimit(resource: int) -> Tuple[int, int]: ... +def getrusage(who: int) -> _RUsage: ... +def prlimit(pid: int, resource: int, limits: Optional[Tuple[int, int]]) -> Tuple[int, int]: ... +def setrlimit(resource: int, limits: Tuple[int, int]) -> None: ... + +# NOTE: This is an alias of OSError in Python 3.3. +class error(Exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/runpy.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/runpy.pyi new file mode 100644 index 0000000..654c53c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/runpy.pyi @@ -0,0 +1,23 @@ +from types import ModuleType +from typing import Dict, Optional, Any + +class _TempModule: + mod_name: str = ... + module: ModuleType = ... + def __init__(self, mod_name): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +class _ModifiedArgv0: + value: Any = ... + def __init__(self, value): ... + def __enter__(self): ... + def __exit__(self, *args): ... + +def run_module(mod_name: str, + init_globals: Optional[Dict[str, Any]] = ..., + run_name: Optional[str] = ..., + alter_sys: bool = ...): ... +def run_path(path_name: str, + init_globals: Optional[Dict[str, Any]] = ..., + run_name: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/selectors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/selectors.pyi new file mode 100644 index 0000000..39e68ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/selectors.pyi @@ -0,0 +1,90 @@ +# Stubs for selector +# See https://docs.python.org/3/library/selectors.html + +from typing import Any, List, NamedTuple, Mapping, Tuple, Optional, Union +from abc import ABCMeta, abstractmethod +import socket + + +# Type aliases added mainly to preserve some context +# +# See https://github.com/python/typeshed/issues/482 +# for details regarding how _FileObject is typed. +_FileObject = Union[int, socket.socket] +_FileDescriptor = int +_EventMask = int + + +EVENT_READ: _EventMask +EVENT_WRITE: _EventMask + + +SelectorKey = NamedTuple('SelectorKey', [ + ('fileobj', _FileObject), + ('fd', _FileDescriptor), + ('events', _EventMask), + ('data', Any) +]) + + +class BaseSelector(metaclass=ABCMeta): + @abstractmethod + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + + @abstractmethod + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + + def modify(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + + @abstractmethod + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + + def close(self) -> None: ... + + def get_key(self, fileobj: _FileObject) -> SelectorKey: ... + + @abstractmethod + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + + def __enter__(self) -> BaseSelector: ... + + def __exit__(self, *args: Any) -> None: ... + +class SelectSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class PollSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class EpollSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class DevpollSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class KqueueSelector(BaseSelector): + def fileno(self) -> int: ... + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... + +class DefaultSelector(BaseSelector): + def register(self, fileobj: _FileObject, events: _EventMask, data: Any = ...) -> SelectorKey: ... + def unregister(self, fileobj: _FileObject) -> SelectorKey: ... + def select(self, timeout: Optional[float] = ...) -> List[Tuple[SelectorKey, _EventMask]]: ... + def get_map(self) -> Mapping[_FileObject, SelectorKey]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shelve.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shelve.pyi new file mode 100644 index 0000000..4a33969 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shelve.pyi @@ -0,0 +1,31 @@ +from typing import Any, Dict, Iterator, Optional, Tuple +import collections + + +class Shelf(collections.MutableMapping): + def __init__(self, dict: Dict[bytes, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + def __contains__(self, key: Any) -> bool: ... # key should be str, but it would conflict with superclass's type signature + def get(self, key: str, default: Any = ...) -> Any: ... + def __getitem__(self, key: str) -> Any: ... + def __setitem__(self, key: str, value: Any) -> None: ... + def __delitem__(self, key: str) -> None: ... + def __enter__(self) -> Shelf: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... + def close(self) -> None: ... + def __del__(self) -> None: ... + def sync(self) -> None: ... + +class BsdDbShelf(Shelf): + def __init__(self, dict: Dict[bytes, Any], protocol: Optional[int] = ..., writeback: bool = ..., keyencoding: str = ...) -> None: ... + def set_location(self, key: Any) -> Tuple[str, Any]: ... + def next(self) -> Tuple[str, Any]: ... + def previous(self) -> Tuple[str, Any]: ... + def first(self) -> Tuple[str, Any]: ... + def last(self) -> Tuple[str, Any]: ... + +class DbfilenameShelf(Shelf): + def __init__(self, filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> None: ... + +def open(filename: str, flag: str = ..., protocol: Optional[int] = ..., writeback: bool = ...) -> DbfilenameShelf: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shlex.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shlex.pyi new file mode 100644 index 0000000..fb398ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/shlex.pyi @@ -0,0 +1,50 @@ +# Stubs for shlex + +# Based on http://docs.python.org/3.2/library/shlex.html + +from typing import List, Tuple, Any, TextIO, Union, Optional, Iterable, TypeVar +import sys + +def split(s: str, comments: bool = ..., + posix: bool = ...) -> List[str]: ... + +# Added in 3.3, use (undocumented) pipes.quote in previous versions. +def quote(s: str) -> str: ... + +_SLT = TypeVar('_SLT', bound=shlex) + +class shlex(Iterable[str]): + commenters: str + wordchars: str + whitespace: str + escape: str + quotes: str + escapedquotes: str + whitespace_split: bool + infile: str + instream: TextIO + source: str + debug = 0 + lineno = 0 + token: str + eof: str + if sys.version_info >= (3, 6): + punctuation_chars: str + + if sys.version_info >= (3, 6): + def __init__(self, instream: Union[str, TextIO] = ..., infile: Optional[str] = ..., + posix: bool = ..., punctuation_chars: Union[bool, str] = ...) -> None: ... + else: + def __init__(self, instream: Union[str, TextIO] = ..., infile: Optional[str] = ..., + posix: bool = ...) -> None: ... + def get_token(self) -> str: ... + def push_token(self, tok: str) -> None: ... + def read_token(self) -> str: ... + def sourcehook(self, filename: str) -> Tuple[str, TextIO]: ... + # TODO argument types + def push_source(self, newstream: Any, newfile: Any = ...) -> None: ... + def pop_source(self) -> None: ... + def error_leader(self, infile: str = ..., + lineno: int = ...) -> None: ... + def __iter__(self: _SLT) -> _SLT: ... + def __next__(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/signal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/signal.pyi new file mode 100644 index 0000000..34a8cdd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/signal.pyi @@ -0,0 +1,187 @@ +"""Stub file for the 'signal' module.""" + +import sys +from enum import IntEnum +from typing import Any, Callable, List, Tuple, Dict, Generic, Union, Optional, Iterable, Set +from types import FrameType + +class ItimerError(IOError): ... + +ITIMER_PROF: int = ... +ITIMER_REAL: int = ... +ITIMER_VIRTUAL: int = ... + +NSIG: int = ... + +if sys.version_info >= (3, 5): + class Signals(IntEnum): + SIGABRT = ... + SIGALRM = ... + SIGBREAK = ... # Windows + SIGBUS = ... + SIGCHLD = ... + SIGCLD = ... + SIGCONT = ... + SIGEMT = ... + SIGFPE = ... + SIGHUP = ... + SIGILL = ... + SIGINFO = ... + SIGINT = ... + SIGIO = ... + SIGIOT = ... + SIGKILL = ... + SIGPIPE = ... + SIGPOLL = ... + SIGPROF = ... + SIGPWR = ... + SIGQUIT = ... + SIGRTMAX = ... + SIGRTMIN = ... + SIGSEGV = ... + SIGSTOP = ... + SIGSYS = ... + SIGTERM = ... + SIGTRAP = ... + SIGTSTP = ... + SIGTTIN = ... + SIGTTOU = ... + SIGURG = ... + SIGUSR1 = ... + SIGUSR2 = ... + SIGVTALRM = ... + SIGWINCH = ... + SIGXCPU = ... + SIGXFSZ = ... + + class Handlers(IntEnum): + SIG_DFL = ... + SIG_IGN = ... + + SIG_DFL = Handlers.SIG_DFL + SIG_IGN = Handlers.SIG_IGN + + class Sigmasks(IntEnum): + SIG_BLOCK = ... + SIG_UNBLOCK = ... + SIG_SETMASK = ... + + SIG_BLOCK = Sigmasks.SIG_BLOCK + SIG_UNBLOCK = Sigmasks.SIG_UNBLOCK + SIG_SETMASK = Sigmasks.SIG_SETMASK + + _SIG = Signals + _SIGNUM = Union[int, Signals] + _HANDLER = Union[Callable[[Signals, FrameType], None], int, Handlers, None] +else: + SIG_DFL: int = ... + SIG_IGN: int = ... + + SIG_BLOCK: int = ... + SIG_UNBLOCK: int = ... + SIG_SETMASK: int = ... + + _SIG = int + _SIGNUM = int + _HANDLER = Union[Callable[[int, FrameType], None], int, None] + +SIGABRT: _SIG = ... +SIGALRM: _SIG = ... +SIGBREAK: _SIG = ... # Windows +SIGBUS: _SIG = ... +SIGCHLD: _SIG = ... +SIGCLD: _SIG = ... +SIGCONT: _SIG = ... +SIGEMT: _SIG = ... +SIGFPE: _SIG = ... +SIGHUP: _SIG = ... +SIGILL: _SIG = ... +SIGINFO: _SIG = ... +SIGINT: _SIG = ... +SIGIO: _SIG = ... +SIGIOT: _SIG = ... +SIGKILL: _SIG = ... +SIGPIPE: _SIG = ... +SIGPOLL: _SIG = ... +SIGPROF: _SIG = ... +SIGPWR: _SIG = ... +SIGQUIT: _SIG = ... +SIGRTMAX: _SIG = ... +SIGRTMIN: _SIG = ... +SIGSEGV: _SIG = ... +SIGSTOP: _SIG = ... +SIGSYS: _SIG = ... +SIGTERM: _SIG = ... +SIGTRAP: _SIG = ... +SIGTSTP: _SIG = ... +SIGTTIN: _SIG = ... +SIGTTOU: _SIG = ... +SIGURG: _SIG = ... +SIGUSR1: _SIG = ... +SIGUSR2: _SIG = ... +SIGVTALRM: _SIG = ... +SIGWINCH: _SIG = ... +SIGXCPU: _SIG = ... +SIGXFSZ: _SIG = ... + +# Windows +CTRL_C_EVENT: _SIG = ... +CTRL_BREAK_EVENT: _SIG = ... + +class struct_siginfo(Tuple[int, int, int, int, int, int, int]): + def __init__(self, sequence: Iterable[int]) -> None: ... + @property + def si_signo(self) -> int: ... + @property + def si_code(self) -> int: ... + @property + def si_errno(self) -> int: ... + @property + def si_pid(self) -> int: ... + @property + def si_uid(self) -> int: ... + @property + def si_status(self) -> int: ... + @property + def si_band(self) -> int: ... + +def alarm(time: int) -> int: ... + +def default_int_handler(signum: int, frame: FrameType) -> None: + raise KeyboardInterrupt() + +def getitimer(which: int) -> Tuple[float, float]: ... + +def getsignal(signalnum: _SIGNUM) -> _HANDLER: + raise ValueError() + +def pause() -> None: ... + +def pthread_kill(thread_id: int, signum: int) -> None: + raise OSError() + +def pthread_sigmask(how: int, mask: Iterable[int]) -> Set[_SIGNUM]: + raise OSError() + +def set_wakeup_fd(fd: int) -> int: ... + +def setitimer(which: int, seconds: float, interval: float = ...) -> Tuple[float, float]: ... + +def siginterrupt(signalnum: int, flag: bool) -> None: + raise OSError() + +def signal(signalnum: _SIGNUM, handler: _HANDLER) -> _HANDLER: + raise OSError() + +def sigpending() -> Any: + raise OSError() + +def sigtimedwait(sigset: Iterable[int], timeout: float) -> Optional[struct_siginfo]: + raise OSError() + raise ValueError() + +def sigwait(sigset: Iterable[int]) -> _SIGNUM: + raise OSError() + +def sigwaitinfo(sigset: Iterable[int]) -> struct_siginfo: + raise OSError() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/smtplib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/smtplib.pyi new file mode 100644 index 0000000..ec8e27f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/smtplib.pyi @@ -0,0 +1,141 @@ +from email.message import Message as _Message +from socket import socket +from ssl import SSLContext +from types import TracebackType +from typing import ( + Any, AnyStr, Dict, Generic, List, Optional, Sequence, Tuple, Union, + Pattern, Type, Callable, Protocol, overload) +import sys + +_Reply = Tuple[int, bytes] +_SendErrs = Dict[str, _Reply] +# Should match source_address for socket.create_connection +_SourceAddress = Tuple[Union[bytearray, bytes, str], int] + +SMTP_PORT: int +SMTP_SSL_PORT: int +CRLF: str +bCRLF: bytes + +OLDSTYLE_AUTH: Pattern[str] + +class SMTPException(OSError): ... +class SMTPServerDisconnected(SMTPException): ... + +class SMTPResponseException(SMTPException): + smtp_code: int + smtp_error: Union[bytes, str] + args: Union[Tuple[int, Union[bytes, str]], Tuple[int, bytes, str]] + def __init__(self, code: int, msg: Union[bytes, str]) -> None: ... + +class SMTPSenderRefused(SMTPResponseException): + smtp_code: int + smtp_error: bytes + sender: str + args: Tuple[int, bytes, str] + def __init__(self, code: int, msg: bytes, sender: str) -> None: ... + +class SMTPRecipientsRefused(SMTPException): + recipients: _SendErrs + args: Tuple[_SendErrs] + def __init__(self, recipients: _SendErrs) -> None: ... + +class SMTPDataError(SMTPResponseException): ... +class SMTPConnectError(SMTPResponseException): ... +class SMTPHeloError(SMTPResponseException): ... +class SMTPAuthenticationError(SMTPResponseException): ... + +def quoteaddr(addrstring: str) -> str: ... +def quotedata(data: str) -> str: ... + +class _AuthObject(Protocol): + @overload + def __call__(self, challenge: None = ...) -> Optional[str]: ... + @overload + def __call__(self, challenge: bytes) -> str: ... + +class SMTP: + debuglevel: int = ... + # Type of file should match what socket.makefile() returns + file: Any = ... + helo_resp: Optional[bytes] = ... + ehlo_msg: str = ... + ehlo_resp: Optional[bytes] = ... + does_esmtp: int = ... + default_port: int = ... + timeout: float + esmtp_features: Dict[str, str] + command_encoding: str + source_address: Optional[_SourceAddress] + local_hostname: str + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., timeout: float = ..., + source_address: Optional[_SourceAddress] = ...) -> None: ... + def __enter__(self) -> SMTP: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + tb: Optional[TracebackType]) -> None: ... + def set_debuglevel(self, debuglevel: int) -> None: ... + sock: Optional[socket] + def connect(self, host: str = ..., port: int = ..., + source_address: Optional[_SourceAddress] = ...) -> _Reply: ... + def send(self, s: Union[bytes, str]) -> None: ... + def putcmd(self, cmd: str, args: str = ...) -> None: ... + def getreply(self) -> _Reply: ... + def docmd(self, cmd: str, args: str = ...) -> _Reply: ... + def helo(self, name: str = ...) -> _Reply: ... + def ehlo(self, name: str = ...) -> _Reply: ... + def has_extn(self, opt: str) -> bool: ... + def help(self, args: str = ...) -> bytes: ... + def rset(self) -> _Reply: ... + def noop(self) -> _Reply: ... + def mail(self, sender: str, options: Sequence[str] = ...) -> _Reply: ... + def rcpt(self, recip: str, options: Sequence[str] = ...) -> _Reply: ... + def data(self, msg: Union[bytes, str]) -> _Reply: ... + def verify(self, address: str) -> _Reply: ... + vrfy = verify + def expn(self, address: str) -> _Reply: ... + def ehlo_or_helo_if_needed(self) -> None: ... + if sys.version_info >= (3, 5): + user: str + password: str + def auth(self, mechanism: str, authobject: _AuthObject, *, initial_response_ok: bool = ...) -> _Reply: ... + @overload + def auth_cram_md5(self, challenge: None = ...) -> None: ... + @overload + def auth_cram_md5(self, challenge: bytes) -> str: ... + def auth_plain(self, challenge: Optional[bytes] = ...) -> str: ... + def auth_login(self, challenge: Optional[bytes] = ...) -> str: ... + def login(self, user: str, password: str, *, + initial_response_ok: bool = ...) -> _Reply: ... + else: + def login(self, user: str, password: str) -> _Reply: ... + def starttls(self, keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + context: Optional[SSLContext] = ...) -> _Reply: ... + def sendmail(self, from_addr: str, to_addrs: Union[str, Sequence[str]], + msg: Union[bytes, str], mail_options: Sequence[str] = ..., + rcpt_options: List[str] = ...) -> _SendErrs: ... + def send_message(self, msg: _Message, from_addr: Optional[str] = ..., + to_addrs: Optional[Union[str, Sequence[str]]] = ..., + mail_options: List[str] = ..., + rcpt_options: Sequence[str] = ...) -> _SendErrs: ... + def close(self) -> None: ... + def quit(self) -> _Reply: ... + +class SMTP_SSL(SMTP): + keyfile: Optional[str] + certfile: Optional[str] + context: SSLContext + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., + keyfile: Optional[str] = ..., certfile: Optional[str] = ..., + timeout: float = ..., + source_address: Optional[_SourceAddress] = ..., + context: Optional[SSLContext] = ...) -> None: ... + +LMTP_PORT: int + +class LMTP(SMTP): + def __init__(self, host: str = ..., port: int = ..., + local_hostname: Optional[str] = ..., + source_address: Optional[_SourceAddress] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/socketserver.pyi new file mode 100644 index 0000000..d485b8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/socketserver.pyi @@ -0,0 +1,99 @@ +# NB: SocketServer.pyi and socketserver.pyi must remain consistent! +# Stubs for socketserver + +from typing import Any, BinaryIO, Optional, Tuple, Type +from socket import SocketType +import sys +import types + +class BaseServer: + address_family: int + RequestHandlerClass: type + server_address: Tuple[str, int] + socket: SocketType + allow_reuse_address: bool + request_queue_size: int + socket_type: int + timeout: Optional[float] + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type) -> None: ... + def fileno(self) -> int: ... + def handle_request(self) -> None: ... + def serve_forever(self, poll_interval: float = ...) -> None: ... + def shutdown(self) -> None: ... + def server_close(self) -> None: ... + def finish_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def get_request(self) -> None: ... + def handle_error(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def handle_timeout(self) -> None: ... + def process_request(self, request: bytes, + client_address: Tuple[str, int]) -> None: ... + def server_activate(self) -> None: ... + def server_bind(self) -> None: ... + def verify_request(self, request: bytes, + client_address: Tuple[str, int]) -> bool: ... + if sys.version_info >= (3, 6): + def __enter__(self) -> BaseServer: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[types.TracebackType]) -> bool: ... + if sys.version_info >= (3, 3): + def service_actions(self) -> None: ... + +class TCPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class UDPServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +if sys.platform != 'win32': + class UnixStreamServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + + class UnixDatagramServer(BaseServer): + def __init__(self, server_address: Tuple[str, int], + RequestHandlerClass: type, + bind_and_activate: bool = ...) -> None: ... + +class ForkingMixIn: ... +class ThreadingMixIn: ... + +class ForkingTCPServer(ForkingMixIn, TCPServer): ... +class ForkingUDPServer(ForkingMixIn, UDPServer): ... +class ThreadingTCPServer(ThreadingMixIn, TCPServer): ... +class ThreadingUDPServer(ThreadingMixIn, UDPServer): ... +if sys.platform != 'win32': + class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): ... + class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): ... + + +class BaseRequestHandler: + # Those are technically of types, respectively: + # * Union[SocketType, Tuple[bytes, SocketType]] + # * Union[Tuple[str, int], str] + # But there are some concerns that having unions here would cause + # too much inconvenience to people using it (see + # https://github.com/python/typeshed/pull/384#issuecomment-234649696) + request: Any + client_address: Any + + server: BaseServer + def setup(self) -> None: ... + def handle(self) -> None: ... + def finish(self) -> None: ... + +class StreamRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO + +class DatagramRequestHandler(BaseRequestHandler): + rfile: BinaryIO + wfile: BinaryIO diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/spwd.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/spwd.pyi new file mode 100644 index 0000000..0e55d74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/spwd.pyi @@ -0,0 +1,14 @@ +from typing import List, NamedTuple + +struct_spwd = NamedTuple("struct_spwd", [("sp_namp", str), + ("sp_pwdp", str), + ("sp_lstchg", int), + ("sp_min", int), + ("sp_max", int), + ("sp_warn", int), + ("sp_inact", int), + ("sp_expire", int), + ("sp_flag", int)]) + +def getspall() -> List[struct_spwd]: ... +def getspnam(name: str) -> struct_spwd: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi new file mode 100644 index 0000000..85f50ca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_constants.pyi @@ -0,0 +1,114 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/sre_constants.py + +from typing import Any, Dict, List, Optional, Union + +MAGIC: int + +class error(Exception): + msg: str + pattern: Optional[Union[str, bytes]] + pos: Optional[int] + lineno: int + colno: int + def __init__(self, msg: str, pattern: Union[str, bytes] = ..., pos: int = ...) -> None: ... + +class _NamedIntConstant(int): + name: Any + def __new__(cls, value: int, name: str): ... + +MAXREPEAT: _NamedIntConstant +OPCODES: List[_NamedIntConstant] +ATCODES: List[_NamedIntConstant] +CHCODES: List[_NamedIntConstant] +OP_IGNORE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_MULTILINE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_LOCALE: Dict[_NamedIntConstant, _NamedIntConstant] +AT_UNICODE: Dict[_NamedIntConstant, _NamedIntConstant] +CH_LOCALE: Dict[_NamedIntConstant, _NamedIntConstant] +CH_UNICODE: Dict[_NamedIntConstant, _NamedIntConstant] +SRE_FLAG_TEMPLATE: int +SRE_FLAG_IGNORECASE: int +SRE_FLAG_LOCALE: int +SRE_FLAG_MULTILINE: int +SRE_FLAG_DOTALL: int +SRE_FLAG_UNICODE: int +SRE_FLAG_VERBOSE: int +SRE_FLAG_DEBUG: int +SRE_FLAG_ASCII: int +SRE_INFO_PREFIX: int +SRE_INFO_LITERAL: int +SRE_INFO_CHARSET: int + + +# Stubgen above; manually defined constants below (dynamic at runtime) + +# from OPCODES +FAILURE: _NamedIntConstant +SUCCESS: _NamedIntConstant +ANY: _NamedIntConstant +ANY_ALL: _NamedIntConstant +ASSERT: _NamedIntConstant +ASSERT_NOT: _NamedIntConstant +AT: _NamedIntConstant +BRANCH: _NamedIntConstant +CALL: _NamedIntConstant +CATEGORY: _NamedIntConstant +CHARSET: _NamedIntConstant +BIGCHARSET: _NamedIntConstant +GROUPREF: _NamedIntConstant +GROUPREF_EXISTS: _NamedIntConstant +GROUPREF_IGNORE: _NamedIntConstant +IN: _NamedIntConstant +IN_IGNORE: _NamedIntConstant +INFO: _NamedIntConstant +JUMP: _NamedIntConstant +LITERAL: _NamedIntConstant +LITERAL_IGNORE: _NamedIntConstant +MARK: _NamedIntConstant +MAX_UNTIL: _NamedIntConstant +MIN_UNTIL: _NamedIntConstant +NOT_LITERAL: _NamedIntConstant +NOT_LITERAL_IGNORE: _NamedIntConstant +NEGATE: _NamedIntConstant +RANGE: _NamedIntConstant +REPEAT: _NamedIntConstant +REPEAT_ONE: _NamedIntConstant +SUBPATTERN: _NamedIntConstant +MIN_REPEAT_ONE: _NamedIntConstant +RANGE_IGNORE: _NamedIntConstant +MIN_REPEAT: _NamedIntConstant +MAX_REPEAT: _NamedIntConstant + +# from ATCODES +AT_BEGINNING: _NamedIntConstant +AT_BEGINNING_LINE: _NamedIntConstant +AT_BEGINNING_STRING: _NamedIntConstant +AT_BOUNDARY: _NamedIntConstant +AT_NON_BOUNDARY: _NamedIntConstant +AT_END: _NamedIntConstant +AT_END_LINE: _NamedIntConstant +AT_END_STRING: _NamedIntConstant +AT_LOC_BOUNDARY: _NamedIntConstant +AT_LOC_NON_BOUNDARY: _NamedIntConstant +AT_UNI_BOUNDARY: _NamedIntConstant +AT_UNI_NON_BOUNDARY: _NamedIntConstant + +# from CHCODES +CATEGORY_DIGIT: _NamedIntConstant +CATEGORY_NOT_DIGIT: _NamedIntConstant +CATEGORY_SPACE: _NamedIntConstant +CATEGORY_NOT_SPACE: _NamedIntConstant +CATEGORY_WORD: _NamedIntConstant +CATEGORY_NOT_WORD: _NamedIntConstant +CATEGORY_LINEBREAK: _NamedIntConstant +CATEGORY_NOT_LINEBREAK: _NamedIntConstant +CATEGORY_LOC_WORD: _NamedIntConstant +CATEGORY_LOC_NOT_WORD: _NamedIntConstant +CATEGORY_UNI_DIGIT: _NamedIntConstant +CATEGORY_UNI_NOT_DIGIT: _NamedIntConstant +CATEGORY_UNI_SPACE: _NamedIntConstant +CATEGORY_UNI_NOT_SPACE: _NamedIntConstant +CATEGORY_UNI_WORD: _NamedIntConstant +CATEGORY_UNI_NOT_WORD: _NamedIntConstant +CATEGORY_UNI_LINEBREAK: _NamedIntConstant +CATEGORY_UNI_NOT_LINEBREAK: _NamedIntConstant diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi new file mode 100644 index 0000000..93b3c1d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sre_parse.pyi @@ -0,0 +1,81 @@ +# Source: https://github.com/python/cpython/blob/master/Lib/sre_parse.py + +from typing import ( + Any, Dict, FrozenSet, Iterable, List, Match, + Optional, Pattern as _Pattern, Tuple, Union +) +from sre_constants import _NamedIntConstant as NIC, error as _Error + +SPECIAL_CHARS: str +REPEAT_CHARS: str +DIGITS: FrozenSet[str] +OCTDIGITS: FrozenSet[str] +HEXDIGITS: FrozenSet[str] +ASCIILETTERS: FrozenSet[str] +WHITESPACE: FrozenSet[str] +ESCAPES: Dict[str, Tuple[NIC, int]] +CATEGORIES: Dict[str, Union[Tuple[NIC, NIC], Tuple[NIC, List[Tuple[NIC, NIC]]]]] +FLAGS: Dict[str, int] +GLOBAL_FLAGS: int + +class Verbose(Exception): ... + +class Pattern: + flags: int + groupdict: Dict[str, int] + groupwidths: List[Optional[int]] + lookbehindgroups: Optional[int] + def __init__(self) -> None: ... + @property + def groups(self) -> int: ... + def opengroup(self, name: str = ...) -> int: ... + def closegroup(self, gid: int, p: SubPattern) -> None: ... + def checkgroup(self, gid: int) -> bool: ... + def checklookbehindgroup(self, gid: int, source: Tokenizer) -> None: ... + + +_OpSubpatternType = Tuple[Optional[int], int, int, SubPattern] +_OpGroupRefExistsType = Tuple[int, SubPattern, SubPattern] +_OpInType = List[Tuple[NIC, int]] +_OpBranchType = Tuple[None, List[SubPattern]] +_AvType = Union[_OpInType, _OpBranchType, Iterable[SubPattern], _OpGroupRefExistsType, _OpSubpatternType] +_CodeType = Tuple[NIC, _AvType] + + +class SubPattern: + pattern: Pattern + data: List[_CodeType] + width: Optional[int] + def __init__(self, pattern: Pattern, data: List[_CodeType] = ...) -> None: ... + def dump(self, level: int = ...) -> None: ... + def __len__(self) -> int: ... + def __delitem__(self, index: Union[int, slice]) -> None: ... + def __getitem__(self, index: Union[int, slice]) -> Union[SubPattern, _CodeType]: ... + def __setitem__(self, index: Union[int, slice], code: _CodeType) -> None: ... + def insert(self, index: int, code: _CodeType) -> None: ... + def append(self, code: _CodeType) -> None: ... + def getwidth(self) -> int: ... + + +class Tokenizer: + istext: bool + string: Any + decoded_string: str + index: int + next: Optional[str] + def __init__(self, string: Any) -> None: ... + def match(self, char: str) -> bool: ... + def get(self) -> Optional[str]: ... + def getwhile(self, n: int, charset: Iterable[str]) -> str: ... + def getuntil(self, terminator: str) -> str: ... + @property + def pos(self) -> int: ... + def tell(self) -> int: ... + def seek(self, index: int) -> None: ... + def error(self, msg: str, offset: int = ...) -> _Error: ... + +def fix_flags(src: Union[str, bytes], flag: int) -> int: ... +def parse(str: str, flags: int = ..., pattern: Pattern = ...) -> SubPattern: ... +_TemplateType = Tuple[List[Tuple[int, int]], List[str]] +def parse_template(source: str, pattern: _Pattern) -> _TemplateType: ... +def expand_template(template: _TemplateType, match: Match) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/stat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/stat.pyi new file mode 100644 index 0000000..c45a068 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/stat.pyi @@ -0,0 +1,75 @@ +# Stubs for stat + +# Based on http://docs.python.org/3.2/library/stat.html + +import sys +import typing + +def S_ISDIR(mode: int) -> bool: ... +def S_ISCHR(mode: int) -> bool: ... +def S_ISBLK(mode: int) -> bool: ... +def S_ISREG(mode: int) -> bool: ... +def S_ISFIFO(mode: int) -> bool: ... +def S_ISLNK(mode: int) -> bool: ... +def S_ISSOCK(mode: int) -> bool: ... + +def S_IMODE(mode: int) -> int: ... +def S_IFMT(mode: int) -> int: ... + +def filemode(mode: int) -> str: ... + +ST_MODE = 0 +ST_INO = 0 +ST_DEV = 0 +ST_NLINK = 0 +ST_UID = 0 +ST_GID = 0 +ST_SIZE = 0 +ST_ATIME = 0 +ST_MTIME = 0 +ST_CTIME = 0 + +S_IFSOCK = 0 +S_IFLNK = 0 +S_IFREG = 0 +S_IFBLK = 0 +S_IFDIR = 0 +S_IFCHR = 0 +S_IFIFO = 0 +S_ISUID = 0 +S_ISGID = 0 +S_ISVTX = 0 + +S_IRWXU = 0 +S_IRUSR = 0 +S_IWUSR = 0 +S_IXUSR = 0 + +S_IRWXG = 0 +S_IRGRP = 0 +S_IWGRP = 0 +S_IXGRP = 0 + +S_IRWXO = 0 +S_IROTH = 0 +S_IWOTH = 0 +S_IXOTH = 0 + +S_ENFMT = 0 +S_IREAD = 0 +S_IWRITE = 0 +S_IEXEC = 0 + +UF_NODUMP = 0 +UF_IMMUTABLE = 0 +UF_APPEND = 0 +UF_OPAQUE = 0 +UF_NOUNLINK = 0 +if sys.platform == 'darwin': + UF_COMPRESSED = 0 # OS X 10.6+ only + UF_HIDDEN = 0 # OX X 10.5+ only +SF_ARCHIVED = 0 +SF_IMMUTABLE = 0 +SF_APPEND = 0 +SF_NOUNLINK = 0 +SF_SNAPSHOT = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/statistics.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/statistics.pyi new file mode 100644 index 0000000..d9116e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/statistics.pyi @@ -0,0 +1,24 @@ +# Stubs for statistics + +from decimal import Decimal +from fractions import Fraction +import sys +from typing import Iterable, Optional, TypeVar + +# Most functions in this module accept homogeneous collections of one of these types +_Number = TypeVar('_Number', float, Decimal, Fraction) + +class StatisticsError(ValueError): ... + +def mean(data: Iterable[_Number]) -> _Number: ... +if sys.version_info >= (3, 6): + def harmonic_mean(data: Iterable[_Number]) -> _Number: ... +def median(data: Iterable[_Number]) -> _Number: ... +def median_low(data: Iterable[_Number]) -> _Number: ... +def median_high(data: Iterable[_Number]) -> _Number: ... +def median_grouped(data: Iterable[_Number]) -> _Number: ... +def mode(data: Iterable[_Number]) -> _Number: ... +def pstdev(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ... +def pvariance(data: Iterable[_Number], mu: Optional[_Number] = ...) -> _Number: ... +def stdev(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ... +def variance(data: Iterable[_Number], xbar: Optional[_Number] = ...) -> _Number: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/string.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/string.pyi new file mode 100644 index 0000000..92fc036 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/string.pyi @@ -0,0 +1,42 @@ +# Stubs for string + +# Based on http://docs.python.org/3.2/library/string.html + +from typing import Mapping, Sequence, Any, Optional, Union, List, Tuple, Iterable + +ascii_letters: str +ascii_lowercase: str +ascii_uppercase: str +digits: str +hexdigits: str +octdigits: str +punctuation: str +printable: str +whitespace: str + +def capwords(s: str, sep: str = ...) -> str: ... + +class Template: + template: str + + def __init__(self, template: str) -> None: ... + def substitute(self, mapping: Mapping[str, str] = ..., **kwds: str) -> str: ... + def safe_substitute(self, mapping: Mapping[str, str] = ..., + **kwds: str) -> str: ... + +# TODO(MichalPokorny): This is probably badly and/or loosely typed. +class Formatter: + def format(self, format_string: str, *args: Any, **kwargs: Any) -> str: ... + def vformat(self, format_string: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> str: ... + def parse(self, format_string: str) -> Iterable[Tuple[str, Optional[str], Optional[str], Optional[str]]]: ... + def get_field(self, field_name: str, args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: ... + def get_value(self, key: Union[int, str], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> Any: + raise IndexError() + raise KeyError() + def check_unused_args(self, used_args: Sequence[Union[int, str]], args: Sequence[Any], + kwargs: Mapping[str, Any]) -> None: ... + def format_field(self, value: Any, format_spec: str) -> Any: ... + def convert_field(self, value: Any, conversion: str) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/subprocess.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/subprocess.pyi new file mode 100644 index 0000000..b242449 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/subprocess.pyi @@ -0,0 +1,365 @@ +# Stubs for subprocess + +# Based on http://docs.python.org/3.6/library/subprocess.html +import sys +from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Optional, Union, List, Type, Text +from types import TracebackType + +# We prefer to annotate inputs to methods (eg subprocess.check_call) with these +# union types. However, outputs (eg check_call return) and class attributes +# (eg TimeoutError.cmd) we prefer to annotate with Any, so the caller does not +# have to use an assertion to confirm which type. +# +# For example: +# +# try: +# x = subprocess.check_output(["ls", "-l"]) +# reveal_type(x) # Any, but morally is _TXT +# except TimeoutError as e: +# reveal_type(e.cmd) # Any, but morally is _CMD +_FILE = Union[None, int, IO[Any]] +_TXT = Union[bytes, Text] +if sys.version_info >= (3, 6): + from builtins import _PathLike + _PATH = Union[bytes, Text, _PathLike] +else: + _PATH = Union[bytes, Text] +# Python 3.6 does't support _CMD being a single PathLike. +# See: https://bugs.python.org/issue31961 +_CMD = Union[_TXT, Sequence[_PATH]] +_ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]] + +if sys.version_info >= (3, 5): + class CompletedProcess: + # morally: _CMD + args: Any + returncode: int + # morally: Optional[_TXT] + stdout: Any + stderr: Any + def __init__(self, args: _CMD, + returncode: int, + stdout: Optional[_TXT] = ..., + stderr: Optional[_TXT] = ...) -> None: ... + def check_returncode(self) -> None: ... + + if sys.version_info >= (3, 7): + # Nearly the same args as for 3.6, except for capture_output and text + def run(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + capture_output: bool = ..., + check: bool = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + input: Optional[_TXT] = ..., + text: Optional[bool] = ..., + timeout: Optional[float] = ...) -> CompletedProcess: ... + elif sys.version_info >= (3, 6): + # Nearly same args as Popen.__init__ except for timeout, input, and check + def run(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + check: bool = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + input: Optional[_TXT] = ..., + timeout: Optional[float] = ...) -> CompletedProcess: ... + else: + # Nearly same args as Popen.__init__ except for timeout, input, and check + def run(args: _CMD, + timeout: Optional[float] = ..., + input: Optional[_TXT] = ..., + check: bool = ..., + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ...) -> CompletedProcess: ... + +# Same args as Popen.__init__ +def call(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ...) -> int: ... + +# Same args as Popen.__init__ +def check_call(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stdout: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ...) -> int: ... + +if sys.version_info >= (3, 7): + # 3.7 added text + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + timeout: float = ..., + input: _TXT = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + text: Optional[bool] = ..., + ) -> Any: ... # morally: -> _TXT +elif sys.version_info >= (3, 6): + # 3.6 added encoding and errors + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + timeout: float = ..., + input: _TXT = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + ) -> Any: ... # morally: -> _TXT +else: + def check_output(args: _CMD, + bufsize: int = ..., + executable: _PATH = ..., + stdin: _FILE = ..., + stderr: _FILE = ..., + preexec_fn: Callable[[], Any] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Any = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + timeout: float = ..., + input: _TXT = ..., + ) -> Any: ... # morally: -> _TXT + + +PIPE: int +STDOUT: int +DEVNULL: int +class SubprocessError(Exception): ... +class TimeoutExpired(SubprocessError): + def __init__(self, cmd: _CMD, timeout: float, output: Optional[_TXT] = ..., stderr: Optional[_TXT] = ...) -> None: ... + # morally: _CMD + cmd: Any + timeout: float + # morally: Optional[_TXT] + output: Any + stdout: Any + stderr: Any + + +class CalledProcessError(Exception): + returncode = 0 + # morally: _CMD + cmd: Any + # morally: Optional[_TXT] + output: Any + + if sys.version_info >= (3, 5): + # morally: Optional[_TXT] + stdout: Any + stderr: Any + + def __init__(self, + returncode: int, + cmd: _CMD, + output: Optional[_TXT] = ..., + stderr: Optional[_TXT] = ...) -> None: ... + +class Popen: + args: _CMD + stdin: IO[Any] + stdout: IO[Any] + stderr: IO[Any] + pid = 0 + returncode = 0 + + if sys.version_info >= (3, 6): + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_PATH] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ..., + *, + encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> None: ... + else: + def __init__(self, + args: _CMD, + bufsize: int = ..., + executable: Optional[_PATH] = ..., + stdin: Optional[_FILE] = ..., + stdout: Optional[_FILE] = ..., + stderr: Optional[_FILE] = ..., + preexec_fn: Optional[Callable[[], Any]] = ..., + close_fds: bool = ..., + shell: bool = ..., + cwd: Optional[_PATH] = ..., + env: Optional[_ENV] = ..., + universal_newlines: bool = ..., + startupinfo: Optional[Any] = ..., + creationflags: int = ..., + restore_signals: bool = ..., + start_new_session: bool = ..., + pass_fds: Any = ...) -> None: ... + + def poll(self) -> int: ... + def wait(self, timeout: Optional[float] = ...) -> int: ... + # Return str/bytes + def communicate(self, + input: Optional[_TXT] = ..., + timeout: Optional[float] = ..., + # morally: -> Tuple[Optional[_TXT], Optional[_TXT]] + ) -> Tuple[Any, Any]: ... + def send_signal(self, signal: int) -> None: ... + def terminate(self) -> None: ... + def kill(self) -> None: ... + def __enter__(self) -> Popen: ... + def __exit__(self, type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> bool: ... + +# The result really is always a str. +def getstatusoutput(cmd: _TXT) -> Tuple[int, str]: ... +def getoutput(cmd: _TXT) -> str: ... + +def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented + +if sys.platform == 'win32': + class STARTUPINFO: + if sys.version_info >= (3, 7): + def __init__(self, *, dwFlags: int = ..., hStdInput: Optional[Any] = ..., hStdOutput: Optional[Any] = ..., hStdError: Optional[Any] = ..., wShowWindow: int = ..., lpAttributeList: Optional[Mapping[str, Any]] = ...) -> None: ... + dwFlags: int + hStdInput: Optional[Any] + hStdOutput: Optional[Any] + hStdError: Optional[Any] + wShowWindow: int + if sys.version_info >= (3, 7): + lpAttributeList: Mapping[str, Any] + + STD_INPUT_HANDLE: Any + STD_OUTPUT_HANDLE: Any + STD_ERROR_HANDLE: Any + SW_HIDE: int + STARTF_USESTDHANDLES: int + STARTF_USESHOWWINDOW: int + CREATE_NEW_CONSOLE: int + CREATE_NEW_PROCESS_GROUP: int + if sys.version_info >= (3, 7): + ABOVE_NORMAL_PRIORITY_CLASS: int + BELOW_NORMAL_PRIORITY_CLASS: int + HIGH_PRIORITY_CLASS: int + IDLE_PRIORITY_CLASS: int + NORMAL_PRIORITY_CLASS: int + REALTIME_PRIORITY_CLASS: int + CREATE_NO_WINDOW: int + DETACHED_PROCESS: int + CREATE_DEFAULT_ERROR_MODE: int + CREATE_BREAKAWAY_FROM_JOB: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/symbol.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/symbol.pyi new file mode 100644 index 0000000..0cf5f1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/symbol.pyi @@ -0,0 +1,97 @@ +# Stubs for symbol (Python 3) + +import sys +from typing import Dict + +single_input: int +file_input: int +eval_input: int +decorator: int +decorators: int +decorated: int +if sys.version_info >= (3, 5): + async_funcdef: int +funcdef: int +parameters: int +typedargslist: int +tfpdef: int +varargslist: int +vfpdef: int +stmt: int +simple_stmt: int +small_stmt: int +expr_stmt: int +if sys.version_info >= (3, 6): + annassign: int +testlist_star_expr: int +augassign: int +del_stmt: int +pass_stmt: int +flow_stmt: int +break_stmt: int +continue_stmt: int +return_stmt: int +yield_stmt: int +raise_stmt: int +import_stmt: int +import_name: int +import_from: int +import_as_name: int +dotted_as_name: int +import_as_names: int +dotted_as_names: int +dotted_name: int +global_stmt: int +nonlocal_stmt: int +assert_stmt: int +compound_stmt: int +if sys.version_info >= (3, 5): + async_stmt: int +if_stmt: int +while_stmt: int +for_stmt: int +try_stmt: int +with_stmt: int +with_item: int +except_clause: int +suite: int +test: int +test_nocond: int +lambdef: int +lambdef_nocond: int +or_test: int +and_test: int +not_test: int +comparison: int +comp_op: int +star_expr: int +expr: int +xor_expr: int +and_expr: int +shift_expr: int +arith_expr: int +term: int +factor: int +power: int +if sys.version_info >= (3, 5): + atom_expr: int +atom: int +testlist_comp: int +trailer: int +subscriptlist: int +subscript: int +sliceop: int +exprlist: int +testlist: int +dictorsetmaker: int +classdef: int +arglist: int +argument: int +comp_iter: int +comp_for: int +comp_if: int +encoding_decl: int +yield_expr: int +yield_arg: int + +sym_name: Dict[int, str] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sys.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sys.pyi new file mode 100644 index 0000000..3f856bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/sys.pyi @@ -0,0 +1,201 @@ +# Stubs for sys +# Ron Murawski + +# based on http://docs.python.org/3.2/library/sys.html + +from typing import ( + List, NoReturn, Sequence, Any, Dict, Tuple, TextIO, overload, Optional, + Union, TypeVar, Callable, Type +) +import sys +from types import FrameType, ModuleType, TracebackType + +from importlib.abc import MetaPathFinder + +_T = TypeVar('_T') + +# The following type alias are stub-only and do not exist during runtime +_ExcInfo = Tuple[Type[BaseException], BaseException, TracebackType] +_OptExcInfo = Tuple[Optional[Type[BaseException]], Optional[BaseException], Optional[TracebackType]] + +# ----- sys variables ----- +abiflags: str +argv: List[str] +base_exec_prefix: str +base_prefix: str +byteorder: str +builtin_module_names: Sequence[str] # actually a tuple of strings +copyright: str +# dllhandle = 0 # Windows only +dont_write_bytecode: bool +__displayhook__: Any # contains the original value of displayhook +__excepthook__: Any # contains the original value of excepthook +exec_prefix: str +executable: str +float_repr_style: str +hexversion: int +last_type: Optional[Type[BaseException]] +last_value: Optional[BaseException] +last_traceback: Optional[TracebackType] +maxsize: int +maxunicode: int +meta_path: List[MetaPathFinder] +modules: Dict[str, ModuleType] +path: List[str] +path_hooks: List[Any] # TODO precise type; function, path to finder +path_importer_cache: Dict[str, Any] # TODO precise type +platform: str +prefix: str +ps1: str +ps2: str +stdin: TextIO +stdout: TextIO +stderr: TextIO +__stdin__: TextIO +__stdout__: TextIO +__stderr__: TextIO +# deprecated and removed in Python 3.3: +subversion: Tuple[str, str, str] +tracebacklimit: int +version: str +api_version: int +warnoptions: Any +# Each entry is a tuple of the form (action, message, category, module, +# lineno) +# winver = '' # Windows only +_xoptions: Dict[Any, Any] + + +flags: _flags +class _flags: + debug: int + division_warning: int + inspect: int + interactive: int + optimize: int + dont_write_bytecode: int + no_user_site: int + no_site: int + ignore_environment: int + verbose: int + bytes_warning: int + quiet: int + hash_randomization: int + if sys.version_info >= (3, 7): + dev_mode: int + +float_info: _float_info +class _float_info: + epsilon: float # DBL_EPSILON + dig: int # DBL_DIG + mant_dig: int # DBL_MANT_DIG + max: float # DBL_MAX + max_exp: int # DBL_MAX_EXP + max_10_exp: int # DBL_MAX_10_EXP + min: float # DBL_MIN + min_exp: int # DBL_MIN_EXP + min_10_exp: int # DBL_MIN_10_EXP + radix: int # FLT_RADIX + rounds: int # FLT_ROUNDS + +hash_info: _hash_info +class _hash_info: + width: int + modulus: int + inf: int + nan: int + imag: int + +implementation: _implementation +class _implementation: + name: str + version: _version_info + hexversion: int + cache_tag: str + +int_info: _int_info +class _int_info: + bits_per_digit: int + sizeof_digit: int + +class _version_info(Tuple[int, int, int, str, int]): + major: int + minor: int + micro: int + releaselevel: str + serial: int +version_info: _version_info + +def call_tracing(fn: Callable[..., _T], args: Any) -> _T: ... +def _clear_type_cache() -> None: ... +def _current_frames() -> Dict[int, Any]: ... +def displayhook(value: Optional[int]) -> None: ... +def excepthook(type_: Type[BaseException], value: BaseException, + traceback: TracebackType) -> None: ... +def exc_info() -> _OptExcInfo: ... +# sys.exit() accepts an optional argument of anything printable +def exit(arg: object = ...) -> NoReturn: + raise SystemExit() +def getcheckinterval() -> int: ... # deprecated +def getdefaultencoding() -> str: ... +if sys.platform != 'win32': + # Unix only + def getdlopenflags() -> int: ... +def getfilesystemencoding() -> str: ... +def getrefcount(arg: Any) -> int: ... +def getrecursionlimit() -> int: ... + +@overload +def getsizeof(obj: object) -> int: ... +@overload +def getsizeof(obj: object, default: int) -> int: ... + +def getswitchinterval() -> float: ... + +@overload +def _getframe() -> FrameType: ... +@overload +def _getframe(depth: int) -> FrameType: ... + +_ProfileFunc = Callable[[FrameType, str, Any], Any] +def getprofile() -> Optional[_ProfileFunc]: ... +def setprofile(profilefunc: Optional[_ProfileFunc]) -> None: ... + +_TraceFunc = Callable[[FrameType, str, Any], Optional[Callable[[FrameType, str, Any], Any]]] +def gettrace() -> Optional[_TraceFunc]: ... +def settrace(tracefunc: Optional[_TraceFunc]) -> None: ... + + +class _WinVersion(Tuple[int, int, int, int, + str, int, int, int, int, + Tuple[int, int, int]]): + major: int + minor: int + build: int + platform: int + service_pack: str + service_pack_minor: int + service_pack_major: int + suite_mast: int + product_type: int + platform_version: Tuple[int, int, int] + + +def getwindowsversion() -> _WinVersion: ... # Windows only + +def intern(string: str) -> str: ... + +if sys.version_info >= (3, 5): + def is_finalizing() -> bool: ... + +if sys.version_info >= (3, 7): + __breakpointhook__: Any # contains the original value of breakpointhook + def breakpointhook(*args: Any, **kwargs: Any) -> Any: ... + +def setcheckinterval(interval: int) -> None: ... # deprecated +def setdlopenflags(n: int) -> None: ... # Linux only +def setrecursionlimit(limit: int) -> None: ... +def setswitchinterval(interval: float) -> None: ... +def settscdump(on_flag: bool) -> None: ... + +def gettotalrefcount() -> int: ... # Debug builds only diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tempfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tempfile.pyi new file mode 100644 index 0000000..e041b44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tempfile.pyi @@ -0,0 +1,123 @@ +# Stubs for tempfile +# Ron Murawski + +# based on http://docs.python.org/3.3/library/tempfile.html + +import sys +from types import TracebackType +from typing import Any, AnyStr, Generic, IO, Iterable, Iterator, List, Optional, overload, Tuple, Type + +# global variables +TMP_MAX: int +tempdir: Optional[str] +template: str + + +if sys.version_info >= (3, 5): + def TemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ... + ) -> IO[Any]: + ... + def NamedTemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ..., delete: bool = ... + ) -> IO[Any]: + ... + + # It does not actually derive from IO[AnyStr], but it does implement the + # protocol. + class SpooledTemporaryFile(IO[AnyStr]): + def __init__(self, max_size: int = ..., mode: str = ..., + buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: Optional[str] = ..., + prefix: Optional[str] = ..., dir: Optional[str] = ... + ) -> None: ... + def rollover(self) -> None: ... + def __enter__(self) -> SpooledTemporaryFile: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + # These methods are copied from the abstract methods of IO, because + # SpooledTemporaryFile implements IO. + # See also https://github.com/python/typeshed/pull/2452#issuecomment-420657918. + def close(self) -> None: ... + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, n: int = ...) -> AnyStr: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> AnyStr: ... + def readlines(self, hint: int = ...) -> List[AnyStr]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: AnyStr) -> int: ... + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + def __next__(self) -> AnyStr: ... + def __iter__(self) -> Iterator[AnyStr]: ... + + class TemporaryDirectory(Generic[AnyStr]): + name: str + def __init__(self, suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> AnyStr: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + def mkstemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ..., + text: bool = ...) -> Tuple[int, AnyStr]: ... + @overload + def mkdtemp() -> str: ... + @overload + def mkdtemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., + dir: Optional[AnyStr] = ...) -> AnyStr: ... + def mktemp(suffix: Optional[AnyStr] = ..., prefix: Optional[AnyStr] = ..., dir: Optional[AnyStr] = ...) -> AnyStr: ... + + def gettempdirb() -> bytes: ... + def gettempprefixb() -> bytes: ... +else: + def TemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ... + ) -> IO[Any]: + ... + def NamedTemporaryFile( + mode: str = ..., buffering: int = ..., encoding: Optional[str] = ..., + newline: Optional[str] = ..., suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ..., delete: bool = ... + ) -> IO[Any]: + ... + def SpooledTemporaryFile( + max_size: int = ..., mode: str = ..., buffering: int = ..., + encoding: str = ..., newline: str = ..., suffix: str = ..., + prefix: str = ..., dir: Optional[str] = ... + ) -> IO[Any]: + ... + + class TemporaryDirectory: + name: str + def __init__(self, suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ...) -> None: ... + def cleanup(self) -> None: ... + def __enter__(self) -> str: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + + def mkstemp(suffix: str = ..., prefix: str = ..., dir: Optional[str] = ..., + text: bool = ...) -> Tuple[int, str]: ... + def mkdtemp(suffix: str = ..., prefix: str = ..., + dir: Optional[str] = ...) -> str: ... + def mktemp(suffix: str = ..., prefix: str = ..., dir: Optional[str] = ...) -> str: ... + +def gettempdir() -> str: ... +def gettempprefix() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/textwrap.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/textwrap.pyi new file mode 100644 index 0000000..f61f975 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/textwrap.pyi @@ -0,0 +1,113 @@ +from typing import Callable, List, Optional, Dict, Pattern + +class TextWrapper: + width: int = ... + initial_indent: str = ... + subsequent_indent: str = ... + expand_tabs: bool = ... + replace_whitespace: bool = ... + fix_sentence_endings: bool = ... + drop_whitespace: bool = ... + break_long_words: bool = ... + break_on_hyphens: bool = ... + tabsize: int = ... + max_lines: Optional[int] = ... + placeholder: str = ... + + # Attributes not present in documentation + sentence_end_re: Pattern[str] = ... + wordsep_re: Pattern[str] = ... + wordsep_simple_re: Pattern[str] = ... + whitespace_trans: str = ... + unicode_whitespace_trans: Dict[int, int] = ... + uspace: int = ... + x: int = ... + + def __init__( + self, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + drop_whitespace: bool = ..., + break_on_hyphens: bool = ..., + tabsize: int = ..., + *, + max_lines: Optional[int] = ..., + placeholder: str = ...) -> None: + ... + + # Private methods *are* part of the documented API for subclasses. + def _munge_whitespace(self, text: str) -> str: ... + def _split(self, text: str) -> List[str]: ... + def _fix_sentence_endings(self, chunks: List[str]) -> None: ... + def _handle_long_word(self, reversed_chunks: List[str], cur_line: List[str], cur_len: int, width: int) -> None: ... + def _wrap_chunks(self, chunks: List[str]) -> List[str]: ... + def _split_chunks(self, text: str) -> List[str]: ... + + def wrap(self, text: str) -> List[str]: ... + def fill(self, text: str) -> str: ... + + +def wrap( + text: str = ..., + width: int = ..., + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + max_lines: int = ..., + placeholder: str = ... +) -> List[str]: + ... + +def fill( + text: str, + width: int = ..., + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + max_lines: int = ..., + placeholder: str = ... +) -> str: + ... + +def shorten( + text: str, + width: int, + *, + initial_indent: str = ..., + subsequent_indent: str = ..., + expand_tabs: bool = ..., + tabsize: int = ..., + replace_whitespace: bool = ..., + fix_sentence_endings: bool = ..., + break_long_words: bool = ..., + break_on_hyphens: bool = ..., + drop_whitespace: bool = ..., + # Omit `max_lines: int = None`, it is forced to 1 here. + placeholder: str = ... +) -> str: + ... + +def dedent(text: str) -> str: + ... + +def indent(text: str, prefix: str, predicate: Callable[[str], bool] = ...) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi new file mode 100644 index 0000000..c638394 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/__init__.pyi @@ -0,0 +1,663 @@ +from types import TracebackType +from typing import Any, Optional, Dict, Callable, Type +from tkinter.constants import * # noqa: F403 + +TclError: Any +wantobjects: Any +TkVersion: Any +TclVersion: Any +READABLE: Any +WRITABLE: Any +EXCEPTION: Any + +class Event: ... + +def NoDefaultRoot(): ... + +class Variable: + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def __del__(self): ... + def set(self, value): ... + initialize: Any + def get(self): ... + def trace_variable(self, mode, callback): ... + trace: Any + def trace_vdelete(self, mode, cbname): ... + def trace_vinfo(self): ... + def __eq__(self, other): ... + +class StringVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class IntVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class DoubleVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def get(self): ... + +class BooleanVar(Variable): + def __init__(self, master: Optional[Any] = ..., value: Optional[Any] = ..., name: Optional[Any] = ...): ... + def set(self, value): ... + initialize: Any + def get(self): ... + +def mainloop(n: int = ...): ... + +getint: Any +getdouble: Any + +def getboolean(s): ... + +class Misc: + def destroy(self): ... + def deletecommand(self, name): ... + def tk_strictMotif(self, boolean: Optional[Any] = ...): ... + def tk_bisque(self): ... + def tk_setPalette(self, *args, **kw): ... + def tk_menuBar(self, *args): ... + def wait_variable(self, name: str = ...): ... + waitvar: Any + def wait_window(self, window: Optional[Any] = ...): ... + def wait_visibility(self, window: Optional[Any] = ...): ... + def setvar(self, name: str = ..., value: str = ...): ... + def getvar(self, name: str = ...): ... + def getint(self, s): ... + def getdouble(self, s): ... + def getboolean(self, s): ... + def focus_set(self): ... + focus: Any + def focus_force(self): ... + def focus_get(self): ... + def focus_displayof(self): ... + def focus_lastfor(self): ... + def tk_focusFollowsMouse(self): ... + def tk_focusNext(self): ... + def tk_focusPrev(self): ... + def after(self, ms, func: Optional[Any] = ..., *args): ... + def after_idle(self, func, *args): ... + def after_cancel(self, id): ... + def bell(self, displayof: int = ...): ... + def clipboard_get(self, **kw): ... + def clipboard_clear(self, **kw): ... + def clipboard_append(self, string, **kw): ... + def grab_current(self): ... + def grab_release(self): ... + def grab_set(self): ... + def grab_set_global(self): ... + def grab_status(self): ... + def option_add(self, pattern, value, priority: Optional[Any] = ...): ... + def option_clear(self): ... + def option_get(self, name, className): ... + def option_readfile(self, fileName, priority: Optional[Any] = ...): ... + def selection_clear(self, **kw): ... + def selection_get(self, **kw): ... + def selection_handle(self, command, **kw): ... + def selection_own(self, **kw): ... + def selection_own_get(self, **kw): ... + def send(self, interp, cmd, *args): ... + def lower(self, belowThis: Optional[Any] = ...): ... + def tkraise(self, aboveThis: Optional[Any] = ...): ... + lift: Any + def winfo_atom(self, name, displayof: int = ...): ... + def winfo_atomname(self, id, displayof: int = ...): ... + def winfo_cells(self): ... + def winfo_children(self): ... + def winfo_class(self): ... + def winfo_colormapfull(self): ... + def winfo_containing(self, rootX, rootY, displayof: int = ...): ... + def winfo_depth(self): ... + def winfo_exists(self): ... + def winfo_fpixels(self, number): ... + def winfo_geometry(self): ... + def winfo_height(self): ... + def winfo_id(self): ... + def winfo_interps(self, displayof: int = ...): ... + def winfo_ismapped(self): ... + def winfo_manager(self): ... + def winfo_name(self): ... + def winfo_parent(self): ... + def winfo_pathname(self, id, displayof: int = ...): ... + def winfo_pixels(self, number): ... + def winfo_pointerx(self): ... + def winfo_pointerxy(self): ... + def winfo_pointery(self): ... + def winfo_reqheight(self): ... + def winfo_reqwidth(self): ... + def winfo_rgb(self, color): ... + def winfo_rootx(self): ... + def winfo_rooty(self): ... + def winfo_screen(self): ... + def winfo_screencells(self): ... + def winfo_screendepth(self): ... + def winfo_screenheight(self): ... + def winfo_screenmmheight(self): ... + def winfo_screenmmwidth(self): ... + def winfo_screenvisual(self): ... + def winfo_screenwidth(self): ... + def winfo_server(self): ... + def winfo_toplevel(self): ... + def winfo_viewable(self): ... + def winfo_visual(self): ... + def winfo_visualid(self): ... + def winfo_visualsavailable(self, includeids: int = ...): ... + def winfo_vrootheight(self): ... + def winfo_vrootwidth(self): ... + def winfo_vrootx(self): ... + def winfo_vrooty(self): ... + def winfo_width(self): ... + def winfo_x(self): ... + def winfo_y(self): ... + def update(self): ... + def update_idletasks(self): ... + def bindtags(self, tagList: Optional[Any] = ...): ... + def bind(self, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind(self, sequence, funcid: Optional[Any] = ...): ... + def bind_all(self, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind_all(self, sequence): ... + def bind_class(self, className, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def unbind_class(self, className, sequence): ... + def mainloop(self, n: int = ...): ... + def quit(self): ... + def nametowidget(self, name): ... + register: Any + def configure(self, cnf: Optional[Any] = ..., **kw): ... + config: Any + def cget(self, key): ... + __getitem__: Any + def __setitem__(self, key, value): ... + def keys(self): ... + def pack_propagate(self, flag=...): ... + propagate: Any + def pack_slaves(self): ... + slaves: Any + def place_slaves(self): ... + def grid_anchor(self, anchor: Optional[Any] = ...): ... + anchor: Any + def grid_bbox(self, column: Optional[Any] = ..., row: Optional[Any] = ..., col2: Optional[Any] = ..., + row2: Optional[Any] = ...): ... + bbox: Any + def grid_columnconfigure(self, index, cnf=..., **kw): ... + columnconfigure: Any + def grid_location(self, x, y): ... + def grid_propagate(self, flag=...): ... + def grid_rowconfigure(self, index, cnf=..., **kw): ... + rowconfigure: Any + def grid_size(self): ... + size: Any + def grid_slaves(self, row: Optional[Any] = ..., column: Optional[Any] = ...): ... + def event_add(self, virtual, *sequences): ... + def event_delete(self, virtual, *sequences): ... + def event_generate(self, sequence, **kw): ... + def event_info(self, virtual: Optional[Any] = ...): ... + def image_names(self): ... + def image_types(self): ... + +class CallWrapper: + func: Any + subst: Any + widget: Any + def __init__(self, func, subst, widget): ... + def __call__(self, *args): ... + +class XView: + def xview(self, *args): ... + def xview_moveto(self, fraction): ... + def xview_scroll(self, number, what): ... + +class YView: + def yview(self, *args): ... + def yview_moveto(self, fraction): ... + def yview_scroll(self, number, what): ... + +class Wm: + def wm_aspect(self, minNumer: Optional[Any] = ..., minDenom: Optional[Any] = ..., maxNumer: Optional[Any] = ..., + maxDenom: Optional[Any] = ...): ... + aspect: Any + def wm_attributes(self, *args): ... + attributes: Any + def wm_client(self, name: Optional[Any] = ...): ... + client: Any + def wm_colormapwindows(self, *wlist): ... + colormapwindows: Any + def wm_command(self, value: Optional[Any] = ...): ... + command: Any + def wm_deiconify(self): ... + deiconify: Any + def wm_focusmodel(self, model: Optional[Any] = ...): ... + focusmodel: Any + def wm_forget(self, window): ... + forget: Any + def wm_frame(self): ... + frame: Any + def wm_geometry(self, newGeometry: Optional[Any] = ...): ... + geometry: Any + def wm_grid(self, baseWidth: Optional[Any] = ..., baseHeight: Optional[Any] = ..., widthInc: Optional[Any] = ..., + heightInc: Optional[Any] = ...): ... + grid: Any + def wm_group(self, pathName: Optional[Any] = ...): ... + group: Any + def wm_iconbitmap(self, bitmap: Optional[Any] = ..., default: Optional[Any] = ...): ... + iconbitmap: Any + def wm_iconify(self): ... + iconify: Any + def wm_iconmask(self, bitmap: Optional[Any] = ...): ... + iconmask: Any + def wm_iconname(self, newName: Optional[Any] = ...): ... + iconname: Any + def wm_iconphoto(self, default: bool = ..., *args): ... + iconphoto: Any + def wm_iconposition(self, x: Optional[Any] = ..., y: Optional[Any] = ...): ... + iconposition: Any + def wm_iconwindow(self, pathName: Optional[Any] = ...): ... + iconwindow: Any + def wm_manage(self, widget): ... + manage: Any + def wm_maxsize(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + maxsize: Any + def wm_minsize(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + minsize: Any + def wm_overrideredirect(self, boolean: Optional[Any] = ...): ... + overrideredirect: Any + def wm_positionfrom(self, who: Optional[Any] = ...): ... + positionfrom: Any + def wm_protocol(self, name: Optional[Any] = ..., func: Optional[Any] = ...): ... + protocol: Any + def wm_resizable(self, width: Optional[Any] = ..., height: Optional[Any] = ...): ... + resizable: Any + def wm_sizefrom(self, who: Optional[Any] = ...): ... + sizefrom: Any + def wm_state(self, newstate: Optional[Any] = ...): ... + state: Any + def wm_title(self, string: Optional[Any] = ...): ... + title: Any + def wm_transient(self, master: Optional[Any] = ...): ... + transient: Any + def wm_withdraw(self): ... + withdraw: Any + +class Tk(Misc, Wm): + master: Optional[Any] + children: Dict[str, Any] + tk: Any + def __init__(self, screenName: Optional[str] = ..., baseName: Optional[str] = ..., className: str = ..., useTk: bool = ..., + sync: bool = ..., use: Optional[str] = ...) -> None: ... + def loadtk(self) -> None: ... + def destroy(self) -> None: ... + def readprofile(self, baseName: str, className: str) -> None: ... + report_callback_exception: Callable[[Type[BaseException], BaseException, TracebackType], Any] + def __getattr__(self, attr: str) -> Any: ... + +def Tcl(screenName: Optional[Any] = ..., baseName: Optional[Any] = ..., className: str = ..., useTk: bool = ...): ... + +class Pack: + def pack_configure(self, cnf=..., **kw): ... + pack: Any + def pack_forget(self): ... + forget: Any + def pack_info(self): ... + info: Any + propagate: Any + slaves: Any + +class Place: + def place_configure(self, cnf=..., **kw): ... + place: Any + def place_forget(self): ... + forget: Any + def place_info(self): ... + info: Any + slaves: Any + +class Grid: + def grid_configure(self, cnf=..., **kw): ... + grid: Any + bbox: Any + columnconfigure: Any + def grid_forget(self): ... + forget: Any + def grid_remove(self): ... + def grid_info(self): ... + info: Any + location: Any + propagate: Any + rowconfigure: Any + size: Any + slaves: Any + +class BaseWidget(Misc): + widgetName: Any + def __init__(self, master, widgetName, cnf=..., kw=..., extra=...): ... + def destroy(self): ... + +class Widget(BaseWidget, Pack, Place, Grid): ... + +class Toplevel(BaseWidget, Wm): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Button(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def flash(self): ... + def invoke(self): ... + +class Canvas(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def addtag(self, *args): ... + def addtag_above(self, newtag, tagOrId): ... + def addtag_all(self, newtag): ... + def addtag_below(self, newtag, tagOrId): ... + def addtag_closest(self, newtag, x, y, halo: Optional[Any] = ..., start: Optional[Any] = ...): ... + def addtag_enclosed(self, newtag, x1, y1, x2, y2): ... + def addtag_overlapping(self, newtag, x1, y1, x2, y2): ... + def addtag_withtag(self, newtag, tagOrId): ... + def bbox(self, *args): ... + def tag_unbind(self, tagOrId, sequence, funcid: Optional[Any] = ...): ... + def tag_bind(self, tagOrId, sequence: Optional[Any] = ..., func: Optional[Any] = ..., add: Optional[Any] = ...): ... + def canvasx(self, screenx, gridspacing: Optional[Any] = ...): ... + def canvasy(self, screeny, gridspacing: Optional[Any] = ...): ... + def coords(self, *args): ... + def create_arc(self, *args, **kw): ... + def create_bitmap(self, *args, **kw): ... + def create_image(self, *args, **kw): ... + def create_line(self, *args, **kw): ... + def create_oval(self, *args, **kw): ... + def create_polygon(self, *args, **kw): ... + def create_rectangle(self, *args, **kw): ... + def create_text(self, *args, **kw): ... + def create_window(self, *args, **kw): ... + def dchars(self, *args): ... + def delete(self, *args): ... + def dtag(self, *args): ... + def find(self, *args): ... + def find_above(self, tagOrId): ... + def find_all(self): ... + def find_below(self, tagOrId): ... + def find_closest(self, x, y, halo: Optional[Any] = ..., start: Optional[Any] = ...): ... + def find_enclosed(self, x1, y1, x2, y2): ... + def find_overlapping(self, x1, y1, x2, y2): ... + def find_withtag(self, tagOrId): ... + def focus(self, *args): ... + def gettags(self, *args): ... + def icursor(self, *args): ... + def index(self, *args): ... + def insert(self, *args): ... + def itemcget(self, tagOrId, option): ... + def itemconfigure(self, tagOrId, cnf: Optional[Any] = ..., **kw): ... + itemconfig: Any + def tag_lower(self, *args): ... + lower: Any + def move(self, *args): ... + def postscript(self, cnf=..., **kw): ... + def tag_raise(self, *args): ... + lift: Any + def scale(self, *args): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y, gain: int = ...): ... + def select_adjust(self, tagOrId, index): ... + def select_clear(self): ... + def select_from(self, tagOrId, index): ... + def select_item(self): ... + def select_to(self, tagOrId, index): ... + def type(self, tagOrId): ... + +class Checkbutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def deselect(self): ... + def flash(self): ... + def invoke(self): ... + def select(self): ... + def toggle(self): ... + +class Entry(Widget, XView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self): ... + def icursor(self, index): ... + def index(self, index): ... + def insert(self, index, string): ... + def scan_mark(self, x): ... + def scan_dragto(self, x): ... + def selection_adjust(self, index): ... + select_adjust: Any + def selection_clear(self): ... + select_clear: Any + def selection_from(self, index): ... + select_from: Any + def selection_present(self): ... + select_present: Any + def selection_range(self, start, end): ... + select_range: Any + def selection_to(self, index): ... + select_to: Any + +class Frame(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Label(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Listbox(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def activate(self, index): ... + def bbox(self, index): ... + def curselection(self): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self, first, last: Optional[Any] = ...): ... + def index(self, index): ... + def insert(self, index, *elements): ... + def nearest(self, y): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y): ... + def see(self, index): ... + def selection_anchor(self, index): ... + select_anchor: Any + def selection_clear(self, first, last: Optional[Any] = ...): ... # type: ignore + select_clear: Any + def selection_includes(self, index): ... + select_includes: Any + def selection_set(self, first, last: Optional[Any] = ...): ... + select_set: Any + def size(self): ... + def itemcget(self, index, option): ... + def itemconfigure(self, index, cnf: Optional[Any] = ..., **kw): ... + itemconfig: Any + +class Menu(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def tk_popup(self, x, y, entry: str = ...): ... + def tk_bindForTraversal(self): ... + def activate(self, index): ... + def add(self, itemType, cnf=..., **kw): ... + def add_cascade(self, cnf=..., **kw): ... + def add_checkbutton(self, cnf=..., **kw): ... + def add_command(self, cnf=..., **kw): ... + def add_radiobutton(self, cnf=..., **kw): ... + def add_separator(self, cnf=..., **kw): ... + def insert(self, index, itemType, cnf=..., **kw): ... + def insert_cascade(self, index, cnf=..., **kw): ... + def insert_checkbutton(self, index, cnf=..., **kw): ... + def insert_command(self, index, cnf=..., **kw): ... + def insert_radiobutton(self, index, cnf=..., **kw): ... + def insert_separator(self, index, cnf=..., **kw): ... + def delete(self, index1, index2: Optional[Any] = ...): ... + def entrycget(self, index, option): ... + def entryconfigure(self, index, cnf: Optional[Any] = ..., **kw): ... + entryconfig: Any + def index(self, index): ... + def invoke(self, index): ... + def post(self, x, y): ... + def type(self, index): ... + def unpost(self): ... + def xposition(self, index): ... + def yposition(self, index): ... + +class Menubutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Message(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class Radiobutton(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def deselect(self): ... + def flash(self): ... + def invoke(self): ... + def select(self): ... + +class Scale(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def get(self): ... + def set(self, value): ... + def coords(self, value: Optional[Any] = ...): ... + def identify(self, x, y): ... + +class Scrollbar(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def activate(self, index: Optional[Any] = ...): ... + def delta(self, deltax, deltay): ... + def fraction(self, x, y): ... + def identify(self, x, y): ... + def get(self): ... + def set(self, first, last): ... + +class Text(Widget, XView, YView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def bbox(self, index): ... + def compare(self, index1, op, index2): ... + def count(self, index1, index2, *args): ... + def debug(self, boolean: Optional[Any] = ...): ... + def delete(self, index1, index2: Optional[Any] = ...): ... + def dlineinfo(self, index): ... + def dump(self, index1, index2: Optional[Any] = ..., command: Optional[Any] = ..., **kw): ... + def edit(self, *args): ... + def edit_modified(self, arg: Optional[Any] = ...): ... + def edit_redo(self): ... + def edit_reset(self): ... + def edit_separator(self): ... + def edit_undo(self): ... + def get(self, index1, index2: Optional[Any] = ...): ... + def image_cget(self, index, option): ... + def image_configure(self, index, cnf: Optional[Any] = ..., **kw): ... + def image_create(self, index, cnf=..., **kw): ... + def image_names(self): ... + def index(self, index): ... + def insert(self, index, chars, *args): ... + def mark_gravity(self, markName, direction: Optional[Any] = ...): ... + def mark_names(self): ... + def mark_set(self, markName, index): ... + def mark_unset(self, *markNames): ... + def mark_next(self, index): ... + def mark_previous(self, index): ... + def peer_create(self, newPathName, cnf=..., **kw): ... + def peer_names(self): ... + def replace(self, index1, index2, chars, *args): ... + def scan_mark(self, x, y): ... + def scan_dragto(self, x, y): ... + def search(self, pattern, index, stopindex: Optional[Any] = ..., forwards: Optional[Any] = ..., + backwards: Optional[Any] = ..., exact: Optional[Any] = ..., regexp: Optional[Any] = ..., + nocase: Optional[Any] = ..., count: Optional[Any] = ..., elide: Optional[Any] = ...): ... + def see(self, index): ... + def tag_add(self, tagName, index1, *args): ... + def tag_unbind(self, tagName, sequence, funcid: Optional[Any] = ...): ... + def tag_bind(self, tagName, sequence, func, add: Optional[Any] = ...): ... + def tag_cget(self, tagName, option): ... + def tag_configure(self, tagName, cnf: Optional[Any] = ..., **kw): ... + tag_config: Any + def tag_delete(self, *tagNames): ... + def tag_lower(self, tagName, belowThis: Optional[Any] = ...): ... + def tag_names(self, index: Optional[Any] = ...): ... + def tag_nextrange(self, tagName, index1, index2: Optional[Any] = ...): ... + def tag_prevrange(self, tagName, index1, index2: Optional[Any] = ...): ... + def tag_raise(self, tagName, aboveThis: Optional[Any] = ...): ... + def tag_ranges(self, tagName): ... + def tag_remove(self, tagName, index1, index2: Optional[Any] = ...): ... + def window_cget(self, index, option): ... + def window_configure(self, index, cnf: Optional[Any] = ..., **kw): ... + window_config: Any + def window_create(self, index, cnf=..., **kw): ... + def window_names(self): ... + def yview_pickplace(self, *what): ... + +class _setit: + def __init__(self, var, value, callback: Optional[Any] = ...): ... + def __call__(self, *args): ... + +class OptionMenu(Menubutton): + widgetName: Any + menuname: Any + def __init__(self, master, variable, value, *values, **kwargs): ... + def __getitem__(self, name): ... + def destroy(self): ... + +class Image: + name: Any + tk: Any + def __init__(self, imgtype, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + def __del__(self): ... + def __setitem__(self, key, value): ... + def __getitem__(self, key): ... + def configure(self, **kw): ... + config: Any + def height(self): ... + def type(self): ... + def width(self): ... + +class PhotoImage(Image): + def __init__(self, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + def blank(self): ... + def cget(self, option): ... + def __getitem__(self, key): ... + def copy(self): ... + def zoom(self, x, y: str = ...): ... + def subsample(self, x, y: str = ...): ... + def get(self, x, y): ... + def put(self, data, to: Optional[Any] = ...): ... + def write(self, filename, format: Optional[Any] = ..., from_coords: Optional[Any] = ...): ... + +class BitmapImage(Image): + def __init__(self, name: Optional[Any] = ..., cnf=..., master: Optional[Any] = ..., **kw): ... + +def image_names(): ... +def image_types(): ... + +class Spinbox(Widget, XView): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def bbox(self, index): ... + def delete(self, first, last: Optional[Any] = ...): ... + def get(self): ... + def icursor(self, index): ... + def identify(self, x, y): ... + def index(self, index): ... + def insert(self, index, s): ... + def invoke(self, element): ... + def scan(self, *args): ... + def scan_mark(self, x): ... + def scan_dragto(self, x): ... + def selection(self, *args): ... + def selection_adjust(self, index): ... + def selection_clear(self): ... + def selection_element(self, element: Optional[Any] = ...): ... + +class LabelFrame(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + +class PanedWindow(Widget): + def __init__(self, master: Optional[Any] = ..., cnf=..., **kw): ... + def add(self, child, **kw): ... + def remove(self, child): ... + forget: Any + def identify(self, x, y): ... + def proxy(self, *args): ... + def proxy_coord(self): ... + def proxy_forget(self): ... + def proxy_place(self, x, y): ... + def sash(self, *args): ... + def sash_coord(self, index): ... + def sash_mark(self, index): ... + def sash_place(self, index, x, y): ... + def panecget(self, child, option): ... + def paneconfigure(self, tagOrId, cnf: Optional[Any] = ..., **kw): ... + paneconfig: Any + def panes(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi new file mode 100644 index 0000000..d6a8a0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/commondialog.pyi @@ -0,0 +1,8 @@ +from typing import Any, Mapping, Optional + +class Dialog: + command: Optional[Any] = ... + master: Optional[Any] = ... + options: Mapping[str, Any] = ... + def __init__(self, master: Optional[Any] = ..., **options) -> None: ... + def show(self, **options) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi new file mode 100644 index 0000000..e21a93e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/constants.pyi @@ -0,0 +1,79 @@ +from typing import Any + +NO: Any +YES: Any +TRUE: Any +FALSE: Any +ON: Any +OFF: Any +N: Any +S: Any +W: Any +E: Any +NW: Any +SW: Any +NE: Any +SE: Any +NS: Any +EW: Any +NSEW: Any +CENTER: Any +NONE: Any +X: Any +Y: Any +BOTH: Any +LEFT: Any +TOP: Any +RIGHT: Any +BOTTOM: Any +RAISED: Any +SUNKEN: Any +FLAT: Any +RIDGE: Any +GROOVE: Any +SOLID: Any +HORIZONTAL: Any +VERTICAL: Any +NUMERIC: Any +CHAR: Any +WORD: Any +BASELINE: Any +INSIDE: Any +OUTSIDE: Any +SEL: Any +SEL_FIRST: Any +SEL_LAST: Any +END: Any +INSERT: Any +CURRENT: Any +ANCHOR: Any +ALL: Any +NORMAL: Any +DISABLED: Any +ACTIVE: Any +HIDDEN: Any +CASCADE: Any +CHECKBUTTON: Any +COMMAND: Any +RADIOBUTTON: Any +SEPARATOR: Any +SINGLE: Any +BROWSE: Any +MULTIPLE: Any +EXTENDED: Any +DOTBOX: Any +UNDERLINE: Any +PIESLICE: Any +CHORD: Any +ARC: Any +FIRST: Any +LAST: Any +BUTT: Any +PROJECTING: Any +ROUND: Any +BEVEL: Any +MITER: Any +MOVETO: Any +SCROLL: Any +UNITS: Any +PAGES: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi new file mode 100644 index 0000000..3136f21 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/dialog.pyi @@ -0,0 +1,10 @@ +from typing import Any, Mapping, Optional +from tkinter import Widget + +DIALOG_ICON: str + +class Dialog(Widget): + widgetName: str = ... + num: int = ... + def __init__(self, master: Optional[Any] = ..., cnf: Mapping[str, Any] = ..., **kw) -> None: ... + def destroy(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi new file mode 100644 index 0000000..6d5f165 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/filedialog.pyi @@ -0,0 +1,65 @@ +from typing import Any, Dict, Optional, Tuple +from tkinter import Button, commondialog, Entry, Frame, Listbox, Scrollbar, Toplevel + +dialogstates: Dict[Any, Tuple[Any, Any]] + +class FileDialog: + title: str = ... + master: Any = ... + directory: Optional[Any] = ... + top: Toplevel = ... + botframe: Frame = ... + selection: Entry = ... + filter: Entry = ... + midframe: Entry = ... + filesbar: Scrollbar = ... + files: Listbox = ... + dirsbar: Scrollbar = ... + dirs: Listbox = ... + ok_button: Button = ... + filter_button: Button = ... + cancel_button: Button = ... + def __init__(self, master, title: Optional[Any] = ...) -> None: ... # title is usually a str or None, but e.g. int doesn't raise en exception either + how: Optional[Any] = ... + def go(self, dir_or_file: Any = ..., pattern: str = ..., default: str = ..., key: Optional[Any] = ...): ... + def quit(self, how: Optional[Any] = ...) -> None: ... + def dirs_double_event(self, event) -> None: ... + def dirs_select_event(self, event) -> None: ... + def files_double_event(self, event) -> None: ... + def files_select_event(self, event) -> None: ... + def ok_event(self, event) -> None: ... + def ok_command(self) -> None: ... + def filter_command(self, event: Optional[Any] = ...) -> None: ... + def get_filter(self): ... + def get_selection(self): ... + def cancel_command(self, event: Optional[Any] = ...) -> None: ... + def set_filter(self, dir, pat) -> None: ... + def set_selection(self, file) -> None: ... + +class LoadFileDialog(FileDialog): + title: str = ... + def ok_command(self) -> None: ... + +class SaveFileDialog(FileDialog): + title: str = ... + def ok_command(self): ... + +class _Dialog(commondialog.Dialog): ... + +class Open(_Dialog): + command: str = ... + +class SaveAs(_Dialog): + command: str = ... + +class Directory(commondialog.Dialog): + command: str = ... + +def askopenfilename(**options): ... +def asksaveasfilename(**options): ... +def askopenfilenames(**options): ... +def askopenfile(mode: str = ..., **options): ... +def askopenfiles(mode: str = ..., **options): ... +def asksaveasfile(mode: str = ..., **options): ... +def askdirectory(**options): ... +def test() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi new file mode 100644 index 0000000..b44e660 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/messagebox.pyi @@ -0,0 +1,31 @@ +from tkinter.commondialog import Dialog +from typing import Any, Optional + +ERROR: str +INFO: str +QUESTION: str +WARNING: str +ABORTRETRYIGNORE: str +OK: str +OKCANCEL: str +RETRYCANCEL: str +YESNO: str +YESNOCANCEL: str +ABORT: str +RETRY: str +IGNORE: str +CANCEL: str +YES: str +NO: str + +class Message(Dialog): + command: str = ... + +def showinfo(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def showwarning(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def showerror(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def askquestion(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> str: ... +def askokcancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... +def askyesno(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... +def askyesnocancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> Optional[bool]: ... +def askretrycancel(title: Optional[str] = ..., message: Optional[str] = ..., **options: Any) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi new file mode 100644 index 0000000..0362f17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tkinter/ttk.pyi @@ -0,0 +1,160 @@ +import sys +from typing import Any, Optional +import tkinter + +def tclobjs_to_py(adict): ... +def setup_master(master: Optional[Any] = ...): ... + +class Style: + master: Any + tk: Any + def __init__(self, master: Optional[Any] = ...): ... + def configure(self, style, query_opt: Optional[Any] = ..., **kw): ... + def map(self, style, query_opt: Optional[Any] = ..., **kw): ... + def lookup(self, style, option, state: Optional[Any] = ..., default: Optional[Any] = ...): ... + def layout(self, style, layoutspec: Optional[Any] = ...): ... + def element_create(self, elementname, etype, *args, **kw): ... + def element_names(self): ... + def element_options(self, elementname): ... + def theme_create(self, themename, parent: Optional[Any] = ..., settings: Optional[Any] = ...): ... + def theme_settings(self, themename, settings): ... + def theme_names(self): ... + def theme_use(self, themename: Optional[Any] = ...): ... + +class Widget(tkinter.Widget): + def __init__(self, master, widgetname, kw: Optional[Any] = ...): ... + def identify(self, x, y): ... + def instate(self, statespec, callback: Optional[Any] = ..., *args, **kw): ... + def state(self, statespec: Optional[Any] = ...): ... + +class Button(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Checkbutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Entry(Widget, tkinter.Entry): + def __init__(self, master: Optional[Any] = ..., widget: Optional[Any] = ..., **kw): ... + def bbox(self, index): ... + def identify(self, x, y): ... + def validate(self): ... + +class Combobox(Entry): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def current(self, newindex: Optional[Any] = ...): ... + def set(self, value): ... + +class Frame(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Label(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Labelframe(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +LabelFrame: Any + +class Menubutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Notebook(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def add(self, child, **kw): ... + def forget(self, tab_id): ... + def hide(self, tab_id): ... + def identify(self, x, y): ... + def index(self, tab_id): ... + def insert(self, pos, child, **kw): ... + def select(self, tab_id: Optional[Any] = ...): ... + def tab(self, tab_id, option: Optional[Any] = ..., **kw): ... + def tabs(self): ... + def enable_traversal(self): ... + +class Panedwindow(Widget, tkinter.PanedWindow): + def __init__(self, master: Optional[Any] = ..., **kw): ... + forget: Any + def insert(self, pos, child, **kw): ... + def pane(self, pane, option: Optional[Any] = ..., **kw): ... + def sashpos(self, index, newpos: Optional[Any] = ...): ... + +PanedWindow: Any + +class Progressbar(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def start(self, interval: Optional[Any] = ...): ... + def step(self, amount: Optional[Any] = ...): ... + def stop(self): ... + +class Radiobutton(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def invoke(self): ... + +class Scale(Widget, tkinter.Scale): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def configure(self, cnf: Optional[Any] = ..., **kw): ... + def get(self, x: Optional[Any] = ..., y: Optional[Any] = ...): ... + +class Scrollbar(Widget, tkinter.Scrollbar): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Separator(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +class Sizegrip(Widget): + def __init__(self, master: Optional[Any] = ..., **kw): ... + +if sys.version_info >= (3, 7): + class Spinbox(Entry): + def __init__(self, master: Any = ..., **kw: Any) -> None: ... + def set(self, value: Any) -> None: ... + +class Treeview(Widget, tkinter.XView, tkinter.YView): + def __init__(self, master: Optional[Any] = ..., **kw): ... + def bbox(self, item, column: Optional[Any] = ...): ... + def get_children(self, item: Optional[Any] = ...): ... + def set_children(self, item, *newchildren): ... + def column(self, column, option: Optional[Any] = ..., **kw): ... + def delete(self, *items): ... + def detach(self, *items): ... + def exists(self, item): ... + def focus(self, item: Optional[Any] = ...): ... + def heading(self, column, option: Optional[Any] = ..., **kw): ... + def identify(self, component, x, y): ... + def identify_row(self, y): ... + def identify_column(self, x): ... + def identify_region(self, x, y): ... + def identify_element(self, x, y): ... + def index(self, item): ... + def insert(self, parent, index, iid: Optional[Any] = ..., **kw): ... + def item(self, item, option: Optional[Any] = ..., **kw): ... + def move(self, item, parent, index): ... + reattach: Any + def next(self, item): ... + def parent(self, item): ... + def prev(self, item): ... + def see(self, item): ... + def selection(self, selop: Optional[Any] = ..., items: Optional[Any] = ...): ... + def selection_set(self, items): ... + def selection_add(self, items): ... + def selection_remove(self, items): ... + def selection_toggle(self, items): ... + def set(self, item, column: Optional[Any] = ..., value: Optional[Any] = ...): ... + def tag_bind(self, tagname, sequence: Optional[Any] = ..., callback: Optional[Any] = ...): ... + def tag_configure(self, tagname, option: Optional[Any] = ..., **kw): ... + def tag_has(self, tagname, item: Optional[Any] = ...): ... + +class LabeledScale(Frame): + label: Any + scale: Any + def __init__(self, master: Optional[Any] = ..., variable: Optional[Any] = ..., from_: int = ..., to: int = ..., **kw): ... + def destroy(self): ... + value: Any + +class OptionMenu(Menubutton): + def __init__(self, master, variable, default: Optional[Any] = ..., *values, **kwargs): ... + def __getitem__(self, item): ... + def set_menu(self, default: Optional[Any] = ..., *values): ... + def destroy(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tokenize.pyi new file mode 100644 index 0000000..33c8a2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tokenize.pyi @@ -0,0 +1,114 @@ +from typing import Any, Callable, Generator, Iterable, List, NamedTuple, Optional, Union, Sequence, TextIO, Tuple +from builtins import open as _builtin_open +import sys +from token import * # noqa: F403 + +COMMENT: int +NL: int +ENCODING: int + +_Position = Tuple[int, int] + +_TokenInfo = NamedTuple('TokenInfo', [ + ('type', int), + ('string', str), + ('start', _Position), + ('end', _Position), + ('line', str) +]) + +class TokenInfo(_TokenInfo): + @property + def exact_type(self) -> int: ... + +# Backwards compatible tokens can be sequences of a shorter length too +_Token = Union[TokenInfo, Sequence[Union[int, str, _Position]]] + +class TokenError(Exception): ... +class StopTokenizing(Exception): ... + +class Untokenizer: + tokens: List[str] + prev_row: int + prev_col: int + encoding: Optional[str] + def __init__(self) -> None: ... + def add_whitespace(self, start: _Position) -> None: ... + def untokenize(self, iterable: Iterable[_Token]) -> str: ... + def compat(self, token: Sequence[Union[int, str]], iterable: Iterable[_Token]) -> None: ... + +def untokenize(iterable: Iterable[_Token]) -> Any: ... +def detect_encoding(readline: Callable[[], bytes]) -> Tuple[str, Sequence[bytes]]: ... +def tokenize(readline: Callable[[], bytes]) -> Generator[TokenInfo, None, None]: ... +def generate_tokens(readline: Callable[[], str]) -> Generator[TokenInfo, None, None]: ... + +if sys.version_info >= (3, 6): + from os import PathLike + def open(filename: Union[str, bytes, int, PathLike]) -> TextIO: ... +else: + def open(filename: Union[str, bytes, int]) -> TextIO: ... + +# Names in __all__ with no definition: +# AMPER +# AMPEREQUAL +# ASYNC +# AT +# ATEQUAL +# AWAIT +# CIRCUMFLEX +# CIRCUMFLEXEQUAL +# COLON +# COMMA +# DEDENT +# DOT +# DOUBLESLASH +# DOUBLESLASHEQUAL +# DOUBLESTAR +# DOUBLESTAREQUAL +# ELLIPSIS +# ENDMARKER +# EQEQUAL +# EQUAL +# ERRORTOKEN +# GREATER +# GREATEREQUAL +# INDENT +# ISEOF +# ISNONTERMINAL +# ISTERMINAL +# LBRACE +# LEFTSHIFT +# LEFTSHIFTEQUAL +# LESS +# LESSEQUAL +# LPAR +# LSQB +# MINEQUAL +# MINUS +# NAME +# NEWLINE +# NOTEQUAL +# NT_OFFSET +# NUMBER +# N_TOKENS +# OP +# PERCENT +# PERCENTEQUAL +# PLUS +# PLUSEQUAL +# RARROW +# RBRACE +# RIGHTSHIFT +# RIGHTSHIFTEQUAL +# RPAR +# RSQB +# SEMI +# SLASH +# SLASHEQUAL +# STAR +# STAREQUAL +# STRING +# TILDE +# VBAR +# VBAREQUAL +# tok_name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi new file mode 100644 index 0000000..8758cc6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/tracemalloc.pyi @@ -0,0 +1,70 @@ +# Stubs for tracemalloc (Python 3.4+) + +import sys +from typing import List, Optional, Sequence, Tuple, Union, overload + +def clear_traces() -> None: ... +def get_object_traceback(obj: object) -> Optional[Traceback]: ... +def get_traceback_limit() -> int: ... +def get_traced_memory() -> Tuple[int, int]: ... +def get_tracemalloc_memory() -> int: ... +def is_tracing() -> bool: ... +def start(nframe: int = ...) -> None: ... +def stop() -> None: ... +def take_snapshot() -> Snapshot: ... + +if sys.version_info >= (3, 6): + class DomainFilter: + inclusive: bool + domain: int + def __init__(self, inclusive: bool, domain: int) -> None: ... + +class Filter: + if sys.version_info >= (3, 6): + domain: Optional[int] + inclusive: bool + lineno: Optional[int] + filename_pattern: str + all_frames: bool + def __init__(self, inclusive: bool, filename_pattern: str, lineno: Optional[int] = ..., all_frames: bool = ..., domain: Optional[int] = ...) -> None: ... + +class Frame: + filename: str + lineno: int + +class Snapshot: + def compare_to(self, old_snapshot: Snapshot, key_type: str, cumulative: bool = ...) -> List[StatisticDiff]: ... + def dump(self, filename: str) -> None: ... + if sys.version_info >= (3, 6): + def filter_traces(self, filters: Sequence[Union[DomainFilter, Filter]]) -> Snapshot: ... + else: + def filter_traces(self, filters: Sequence[Filter]) -> Snapshot: ... + @classmethod + def load(cls, filename: str) -> Snapshot: ... + def statistics(self, key_type: str, cumulative: bool = ...) -> List[Statistic]: ... + traceback_limit: int + traces: Sequence[Trace] + +class Statistic: + count: int + size: int + traceback: Traceback + +class StatisticDiff: + count: int + count_diff: int + size: int + size_diff: int + traceback: Traceback + +class Trace: + size: int + traceback: Traceback + +class Traceback(Sequence[Frame]): + def format(self, limit: Optional[int] = ...) -> List[str]: ... + @overload + def __getitem__(self, i: int) -> Frame: ... + @overload + def __getitem__(self, s: slice) -> Sequence[Frame]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/types.pyi new file mode 100644 index 0000000..11ee600 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/types.pyi @@ -0,0 +1,208 @@ +# Stubs for types +# Note, all classes "defined" here require special handling. + +# TODO parts of this should be conditional on version + +import sys +from typing import ( + Any, Awaitable, Callable, Dict, Generic, Iterator, Mapping, Optional, Tuple, TypeVar, + Union, overload, Type +) + +# ModuleType is exported from this module, but for circular import +# reasons exists in its own stub file (with ModuleSpec and Loader). +from _importlib_modulespec import ModuleType as ModuleType # Exported + +_T = TypeVar('_T') +_T_co = TypeVar('_T_co', covariant=True) +_T_contra = TypeVar('_T_contra', contravariant=True) +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +class _Cell: + cell_contents: Any + +class FunctionType: + __closure__: Optional[Tuple[_Cell, ...]] + __code__: CodeType + __defaults__: Optional[Tuple[Any, ...]] + __dict__: Dict[str, Any] + __globals__: Dict[str, Any] + __name__: str + __qualname__: str + __annotations__: Dict[str, Any] + __kwdefaults__: Dict[str, Any] + def __init__(self, code: CodeType, globals: Dict[str, Any], name: Optional[str] = ..., argdefs: Optional[Tuple[object, ...]] = ..., closure: Optional[Tuple[_Cell, ...]] = ...) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __get__(self, obj: Optional[object], type: Optional[type]) -> MethodType: ... +LambdaType = FunctionType + +class CodeType: + """Create a code object. Not for the faint of heart.""" + co_argcount: int + co_kwonlyargcount: int + co_nlocals: int + co_stacksize: int + co_flags: int + co_code: bytes + co_consts: Tuple[Any, ...] + co_names: Tuple[str, ...] + co_varnames: Tuple[str, ...] + co_filename: str + co_name: str + co_firstlineno: int + co_lnotab: bytes + co_freevars: Tuple[str, ...] + co_cellvars: Tuple[str, ...] + def __init__( + self, + argcount: int, + kwonlyargcount: int, + nlocals: int, + stacksize: int, + flags: int, + codestring: bytes, + constants: Tuple[Any, ...], + names: Tuple[str, ...], + varnames: Tuple[str, ...], + filename: str, + name: str, + firstlineno: int, + lnotab: bytes, + freevars: Tuple[str, ...] = ..., + cellvars: Tuple[str, ...] = ..., + ) -> None: ... + +class MappingProxyType(Mapping[_KT, _VT], Generic[_KT, _VT]): + def __init__(self, mapping: Mapping[_KT, _VT]) -> None: ... + def __getitem__(self, k: _KT) -> _VT: ... + def __iter__(self) -> Iterator[_KT]: ... + def __len__(self) -> int: ... + def copy(self) -> Mapping[_KT, _VT]: ... + +class SimpleNamespace: + def __init__(self, **kwargs: Any) -> None: ... + def __getattribute__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any) -> None: ... + def __delattr__(self, name: str) -> None: ... + +class GeneratorType: + gi_code: CodeType + gi_frame: FrameType + gi_running: bool + gi_yieldfrom: Optional[GeneratorType] + def __iter__(self) -> GeneratorType: ... + def __next__(self) -> Any: ... + def close(self) -> None: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +if sys.version_info >= (3, 6): + class AsyncGeneratorType(Generic[_T_co, _T_contra]): + ag_await: Optional[Awaitable[Any]] + ag_frame: FrameType + ag_running: bool + ag_code: CodeType + def __aiter__(self) -> Awaitable[AsyncGeneratorType[_T_co, _T_contra]]: ... + def __anext__(self) -> Awaitable[_T_co]: ... + def asend(self, val: _T_contra) -> Awaitable[_T_co]: ... + @overload + def athrow(self, val: BaseException) -> Awaitable[_T_co]: ... + @overload + def athrow(self, typ: Type[BaseException], val: BaseException, tb: TracebackType = ...) -> Awaitable[_T_co]: ... + def aclose(self) -> Awaitable[_T_co]: ... + +class CoroutineType: + cr_await: Optional[Any] + cr_code: CodeType + cr_frame: FrameType + cr_running: bool + def close(self) -> None: ... + def send(self, arg: Any) -> Any: ... + @overload + def throw(self, val: BaseException) -> Any: ... + @overload + def throw(self, typ: type, val: BaseException = ..., tb: TracebackType = ...) -> Any: ... + +class _StaticFunctionType: + """Fictional type to correct the type of MethodType.__func__. + + FunctionType is a descriptor, so mypy follows the descriptor protocol and + converts MethodType.__func__ back to MethodType (the return type of + FunctionType.__get__). But this is actually a special case; MethodType is + implemented in C and its attribute access doesn't go through + __getattribute__. + + By wrapping FunctionType in _StaticFunctionType, we get the right result; + similar to wrapping a function in staticmethod() at runtime to prevent it + being bound as a method. + """ + def __get__(self, obj: Optional[object], type: Optional[type]) -> FunctionType: ... + +class MethodType: + __func__: _StaticFunctionType + __self__: object + __name__: str + __qualname__: str + def __init__(self, func: Callable, obj: object) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +class BuiltinFunctionType: + __self__: Union[object, ModuleType] + __name__: str + __qualname__: str + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... +BuiltinMethodType = BuiltinFunctionType + +class TracebackType: + if sys.version_info >= (3, 7): + def __init__(self, tb_next: Optional[TracebackType], tb_frame: FrameType, tb_lasti: int, tb_lineno: int) -> None: ... + tb_next: Optional[TracebackType] + else: + @property + def tb_next(self) -> Optional[TracebackType]: ... + # the rest are read-only even in 3.7 + @property + def tb_frame(self) -> FrameType: ... + @property + def tb_lasti(self) -> int: ... + @property + def tb_lineno(self) -> int: ... + +class FrameType: + f_back: FrameType + f_builtins: Dict[str, Any] + f_code: CodeType + f_globals: Dict[str, Any] + f_lasti: int + f_lineno: int + f_locals: Dict[str, Any] + f_trace: Callable[[], None] + if sys.version_info >= (3, 7): + f_trace_lines: bool + f_trace_opcodes: bool + + def clear(self) -> None: ... + +class GetSetDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... +class MemberDescriptorType: + __name__: str + __objclass__: type + def __get__(self, obj: Any, type: type = ...) -> Any: ... + def __set__(self, obj: Any) -> None: ... + def __delete__(self, obj: Any) -> None: ... + +def new_class(name: str, bases: Tuple[type, ...] = ..., kwds: Dict[str, Any] = ..., exec_body: Callable[[Dict[str, Any]], None] = ...) -> type: ... +def prepare_class(name: str, bases: Tuple[type, ...] = ..., kwds: Dict[str, Any] = ...) -> Tuple[type, Dict[str, Any], Dict[str, Any]]: ... + +# Actually a different type, but `property` is special and we want that too. +DynamicClassAttribute = property + +def coroutine(f: Callable[..., Any]) -> CoroutineType: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/typing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/typing.pyi new file mode 100644 index 0000000..c99c1f9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/typing.pyi @@ -0,0 +1,597 @@ +# Stubs for typing + +import sys +from abc import abstractmethod, ABCMeta +from types import CodeType, FrameType, TracebackType +import collections # Needed by aliases like DefaultDict, see mypy issue 2986 + +# Definitions of special type checking related constructs. Their definition +# are not used, so their value does not matter. + +overload = object() +Any = object() +TypeVar = object() +_promote = object() +no_type_check = object() + +class _SpecialForm: + def __getitem__(self, typeargs: Any) -> Any: ... + +Tuple: _SpecialForm = ... +Generic: _SpecialForm = ... +Protocol: _SpecialForm = ... +Callable: _SpecialForm = ... +Type: _SpecialForm = ... +ClassVar: _SpecialForm = ... + +class GenericMeta(type): ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] + +# Type aliases and type constructors + +class TypeAlias: + # Class for defining generic aliases for library types. + def __init__(self, target_type: type) -> None: ... + def __getitem__(self, typeargs: Any) -> Any: ... + +Union = TypeAlias(object) +Optional = TypeAlias(object) +List = TypeAlias(object) +Dict = TypeAlias(object) +DefaultDict = TypeAlias(object) +Set = TypeAlias(object) +FrozenSet = TypeAlias(object) +Counter = TypeAlias(object) +Deque = TypeAlias(object) +ChainMap = TypeAlias(object) + +# Predefined type variables. +AnyStr = TypeVar('AnyStr', str, bytes) + +# Abstract base classes. + +# These type variables are used by the container types. +_T = TypeVar('_T') +_S = TypeVar('_S') +_KT = TypeVar('_KT') # Key type. +_VT = TypeVar('_VT') # Value type. +_T_co = TypeVar('_T_co', covariant=True) # Any type covariant containers. +_V_co = TypeVar('_V_co', covariant=True) # Any type covariant containers. +_KT_co = TypeVar('_KT_co', covariant=True) # Key type covariant containers. +_VT_co = TypeVar('_VT_co', covariant=True) # Value type covariant containers. +_T_contra = TypeVar('_T_contra', contravariant=True) # Ditto contravariant. +_TC = TypeVar('_TC', bound=Type[object]) +_C = TypeVar("_C", bound=Callable) + +def runtime(cls: _TC) -> _TC: ... + +@runtime +class SupportsInt(Protocol, metaclass=ABCMeta): + @abstractmethod + def __int__(self) -> int: ... + +@runtime +class SupportsFloat(Protocol, metaclass=ABCMeta): + @abstractmethod + def __float__(self) -> float: ... + +@runtime +class SupportsComplex(Protocol, metaclass=ABCMeta): + @abstractmethod + def __complex__(self) -> complex: ... + +@runtime +class SupportsBytes(Protocol, metaclass=ABCMeta): + @abstractmethod + def __bytes__(self) -> bytes: ... + +@runtime +class SupportsAbs(Protocol[_T_co]): + @abstractmethod + def __abs__(self) -> _T_co: ... + +@runtime +class SupportsRound(Protocol[_T_co]): + @overload + @abstractmethod + def __round__(self) -> int: ... + @overload + @abstractmethod + def __round__(self, ndigits: int) -> _T_co: ... + +@runtime +class Reversible(Protocol[_T_co]): + @abstractmethod + def __reversed__(self) -> Iterator[_T_co]: ... + +@runtime +class Sized(Protocol, metaclass=ABCMeta): + @abstractmethod + def __len__(self) -> int: ... + +@runtime +class Hashable(Protocol, metaclass=ABCMeta): + # TODO: This is special, in that a subclass of a hashable class may not be hashable + # (for example, list vs. object). It's not obvious how to represent this. This class + # is currently mostly useless for static checking. + @abstractmethod + def __hash__(self) -> int: ... + +@runtime +class Iterable(Protocol[_T_co]): + @abstractmethod + def __iter__(self) -> Iterator[_T_co]: ... + +@runtime +class Iterator(Iterable[_T_co], Protocol[_T_co]): + @abstractmethod + def __next__(self) -> _T_co: ... + def __iter__(self) -> Iterator[_T_co]: ... + +class Generator(Iterator[_T_co], Generic[_T_co, _T_contra, _V_co]): + @abstractmethod + def __next__(self) -> _T_co: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Optional[TracebackType] = ...) -> _T_co: ... + + @abstractmethod + def close(self) -> None: ... + + @abstractmethod + def __iter__(self) -> Generator[_T_co, _T_contra, _V_co]: ... + + @property + def gi_code(self) -> CodeType: ... + @property + def gi_frame(self) -> FrameType: ... + @property + def gi_running(self) -> bool: ... + @property + def gi_yieldfrom(self) -> Optional[Generator]: ... + +# TODO: Several types should only be defined if sys.python_version >= (3, 5): +# Awaitable, AsyncIterator, AsyncIterable, Coroutine, Collection. +# See https: //github.com/python/typeshed/issues/655 for why this is not easy. + +@runtime +class Awaitable(Protocol[_T_co]): + @abstractmethod + def __await__(self) -> Generator[Any, None, _T_co]: ... + +class Coroutine(Awaitable[_V_co], Generic[_T_co, _T_contra, _V_co]): + @property + def cr_await(self) -> Optional[Any]: ... + @property + def cr_code(self) -> CodeType: ... + @property + def cr_frame(self) -> FrameType: ... + @property + def cr_running(self) -> bool: ... + + @abstractmethod + def send(self, value: _T_contra) -> _T_co: ... + + @abstractmethod + def throw(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Optional[TracebackType] = ...) -> _T_co: ... + + @abstractmethod + def close(self) -> None: ... + + +# NOTE: This type does not exist in typing.py or PEP 484. +# The parameters correspond to Generator, but the 4th is the original type. +class AwaitableGenerator(Awaitable[_V_co], Generator[_T_co, _T_contra, _V_co], + Generic[_T_co, _T_contra, _V_co, _S], metaclass=ABCMeta): ... + +@runtime +class AsyncIterable(Protocol[_T_co]): + @abstractmethod + def __aiter__(self) -> AsyncIterator[_T_co]: ... + +@runtime +class AsyncIterator(AsyncIterable[_T_co], + Protocol[_T_co]): + @abstractmethod + def __anext__(self) -> Awaitable[_T_co]: ... + def __aiter__(self) -> AsyncIterator[_T_co]: ... + +if sys.version_info >= (3, 6): + class AsyncGenerator(AsyncIterator[_T_co], Generic[_T_co, _T_contra]): + @abstractmethod + def __anext__(self) -> Awaitable[_T_co]: ... + + @abstractmethod + def asend(self, value: _T_contra) -> Awaitable[_T_co]: ... + + @abstractmethod + def athrow(self, typ: Type[BaseException], val: Optional[BaseException] = ..., + tb: Any = ...) -> Awaitable[_T_co]: ... + + @abstractmethod + def aclose(self) -> Awaitable[None]: ... + + @abstractmethod + def __aiter__(self) -> AsyncGenerator[_T_co, _T_contra]: ... + + @property + def ag_await(self) -> Any: ... + @property + def ag_code(self) -> CodeType: ... + @property + def ag_frame(self) -> FrameType: ... + @property + def ag_running(self) -> bool: ... + +@runtime +class Container(Protocol[_T_co]): + @abstractmethod + def __contains__(self, __x: object) -> bool: ... + + +if sys.version_info >= (3, 6): + @runtime + class Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]): + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + + _Collection = Collection +else: + @runtime + class _Collection(Iterable[_T_co], Container[_T_co], Protocol[_T_co]): + # Implement Sized (but don't have it as a base class). + @abstractmethod + def __len__(self) -> int: ... + +class Sequence(_Collection[_T_co], Reversible[_T_co], Generic[_T_co]): + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T_co: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> Sequence[_T_co]: ... + # Mixin methods + if sys.version_info >= (3, 5): + def index(self, x: Any, start: int = ..., end: int = ...) -> int: ... + else: + def index(self, x: Any) -> int: ... + def count(self, x: Any) -> int: ... + def __contains__(self, x: object) -> bool: ... + def __iter__(self) -> Iterator[_T_co]: ... + def __reversed__(self) -> Iterator[_T_co]: ... + +class MutableSequence(Sequence[_T], Generic[_T]): + @abstractmethod + def insert(self, index: int, object: _T) -> None: ... + @overload + @abstractmethod + def __getitem__(self, i: int) -> _T: ... + @overload + @abstractmethod + def __getitem__(self, s: slice) -> MutableSequence[_T]: ... + @overload + @abstractmethod + def __setitem__(self, i: int, o: _T) -> None: ... + @overload + @abstractmethod + def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: int) -> None: ... + @overload + @abstractmethod + def __delitem__(self, i: slice) -> None: ... + # Mixin methods + def append(self, object: _T) -> None: ... + def clear(self) -> None: ... + def extend(self, iterable: Iterable[_T]) -> None: ... + def reverse(self) -> None: ... + def pop(self, index: int = ...) -> _T: ... + def remove(self, object: _T) -> None: ... + def __iadd__(self, x: Iterable[_T]) -> MutableSequence[_T]: ... + +class AbstractSet(_Collection[_T_co], Generic[_T_co]): + @abstractmethod + def __contains__(self, x: object) -> bool: ... + # Mixin methods + def __le__(self, s: AbstractSet[Any]) -> bool: ... + def __lt__(self, s: AbstractSet[Any]) -> bool: ... + def __gt__(self, s: AbstractSet[Any]) -> bool: ... + def __ge__(self, s: AbstractSet[Any]) -> bool: ... + def __and__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __or__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + def __sub__(self, s: AbstractSet[Any]) -> AbstractSet[_T_co]: ... + def __xor__(self, s: AbstractSet[_T]) -> AbstractSet[Union[_T_co, _T]]: ... + # TODO: Argument can be a more general ABC? + def isdisjoint(self, s: AbstractSet[Any]) -> bool: ... + +class MutableSet(AbstractSet[_T], Generic[_T]): + @abstractmethod + def add(self, x: _T) -> None: ... + @abstractmethod + def discard(self, x: _T) -> None: ... + # Mixin methods + def clear(self) -> None: ... + def pop(self) -> _T: ... + def remove(self, element: _T) -> None: ... + def __ior__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __iand__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + def __ixor__(self, s: AbstractSet[_S]) -> MutableSet[Union[_T, _S]]: ... + def __isub__(self, s: AbstractSet[Any]) -> MutableSet[_T]: ... + +class MappingView: + def __len__(self) -> int: ... + +class ItemsView(MappingView, AbstractSet[Tuple[_KT_co, _VT_co]], Generic[_KT_co, _VT_co]): + def __and__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[Tuple[_KT_co, _VT_co]]: ... + def __or__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + def __xor__(self, o: Iterable[_T]) -> AbstractSet[Union[Tuple[_KT_co, _VT_co], _T]]: ... + +class KeysView(MappingView, AbstractSet[_KT_co], Generic[_KT_co]): + def __and__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_KT_co]: ... + def __or__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + def __xor__(self, o: Iterable[_T]) -> AbstractSet[Union[_KT_co, _T]]: ... + +class ValuesView(MappingView, Iterable[_VT_co], Generic[_VT_co]): + def __contains__(self, o: object) -> bool: ... + def __iter__(self) -> Iterator[_VT_co]: ... + +@runtime +class ContextManager(Protocol[_T_co]): + def __enter__(self) -> _T_co: ... + def __exit__(self, __exc_type: Optional[Type[BaseException]], + __exc_value: Optional[BaseException], + __traceback: Optional[TracebackType]) -> Optional[bool]: ... + +if sys.version_info >= (3, 5): + @runtime + class AsyncContextManager(Protocol[_T_co]): + def __aenter__(self) -> Awaitable[_T_co]: ... + def __aexit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Awaitable[Optional[bool]]: ... + +class Mapping(_Collection[_KT], Generic[_KT, _VT_co]): + # TODO: We wish the key type could also be covariant, but that doesn't work, + # see discussion in https: //github.com/python/typing/pull/273. + @abstractmethod + def __getitem__(self, k: _KT) -> _VT_co: + ... + # Mixin methods + @overload + def get(self, k: _KT) -> Optional[_VT_co]: ... + @overload + def get(self, k: _KT, default: Union[_VT_co, _T]) -> Union[_VT_co, _T]: ... + def items(self) -> AbstractSet[Tuple[_KT, _VT_co]]: ... + def keys(self) -> AbstractSet[_KT]: ... + def values(self) -> ValuesView[_VT_co]: ... + def __contains__(self, o: object) -> bool: ... + +class MutableMapping(Mapping[_KT, _VT], Generic[_KT, _VT]): + @abstractmethod + def __setitem__(self, k: _KT, v: _VT) -> None: ... + @abstractmethod + def __delitem__(self, v: _KT) -> None: ... + + def clear(self) -> None: ... + @overload + def pop(self, k: _KT) -> _VT: ... + @overload + def pop(self, k: _KT, default: Union[_VT, _T] = ...) -> Union[_VT, _T]: ... + def popitem(self) -> Tuple[_KT, _VT]: ... + def setdefault(self, k: _KT, default: _VT = ...) -> _VT: ... + # 'update' used to take a Union, but using overloading is better. + # The second overloaded type here is a bit too general, because + # Mapping[Tuple[_KT, _VT], W] is a subclass of Iterable[Tuple[_KT, _VT]], + # but will always have the behavior of the first overloaded type + # at runtime, leading to keys of a mix of types _KT and Tuple[_KT, _VT]. + # We don't currently have any way of forcing all Mappings to use + # the first overload, but by using overloading rather than a Union, + # mypy will commit to using the first overload when the argument is + # known to be a Mapping with unknown type parameters, which is closer + # to the behavior we want. See mypy issue #1430. + @overload + def update(self, __m: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... + @overload + def update(self, __m: Iterable[Tuple[_KT, _VT]], **kwargs: _VT) -> None: ... + @overload + def update(self, **kwargs: _VT) -> None: ... + +Text = str + +TYPE_CHECKING = True + +class IO(Iterator[AnyStr], Generic[AnyStr]): + # TODO detach + # TODO use abstract properties + @property + def mode(self) -> str: ... + @property + def name(self) -> str: ... + @abstractmethod + def close(self) -> None: ... + @property + def closed(self) -> bool: ... + @abstractmethod + def fileno(self) -> int: ... + @abstractmethod + def flush(self) -> None: ... + @abstractmethod + def isatty(self) -> bool: ... + # TODO what if n is None? + @abstractmethod + def read(self, n: int = ...) -> AnyStr: ... + @abstractmethod + def readable(self) -> bool: ... + @abstractmethod + def readline(self, limit: int = ...) -> AnyStr: ... + @abstractmethod + def readlines(self, hint: int = ...) -> list[AnyStr]: ... + @abstractmethod + def seek(self, offset: int, whence: int = ...) -> int: ... + @abstractmethod + def seekable(self) -> bool: ... + @abstractmethod + def tell(self) -> int: ... + @abstractmethod + def truncate(self, size: Optional[int] = ...) -> int: ... + @abstractmethod + def writable(self) -> bool: ... + # TODO buffer objects + @abstractmethod + def write(self, s: AnyStr) -> int: ... + @abstractmethod + def writelines(self, lines: Iterable[AnyStr]) -> None: ... + + @abstractmethod + def __next__(self) -> AnyStr: ... + @abstractmethod + def __iter__(self) -> Iterator[AnyStr]: ... + @abstractmethod + def __enter__(self) -> IO[AnyStr]: ... + @abstractmethod + def __exit__(self, t: Optional[Type[BaseException]], value: Optional[BaseException], + traceback: Optional[TracebackType]) -> bool: ... + +class BinaryIO(IO[bytes]): + # TODO readinto + # TODO read1? + # TODO peek? + @overload + @abstractmethod + def write(self, s: bytearray) -> int: ... + @overload + @abstractmethod + def write(self, s: bytes) -> int: ... + + @abstractmethod + def __enter__(self) -> BinaryIO: ... + +class TextIO(IO[str]): + # TODO use abstractproperty + @property + def buffer(self) -> BinaryIO: ... + @property + def encoding(self) -> str: ... + @property + def errors(self) -> Optional[str]: ... + @property + def line_buffering(self) -> int: ... # int on PyPy, bool on CPython + @property + def newlines(self) -> Any: ... # None, str or tuple + @abstractmethod + def __enter__(self) -> TextIO: ... + +class ByteString(Sequence[int], metaclass=ABCMeta): ... + +class Match(Generic[AnyStr]): + pos = 0 + endpos = 0 + lastindex = 0 + lastgroup: AnyStr + string: AnyStr + + # The regular expression object whose match() or search() method produced + # this match instance. + re: Pattern[AnyStr] + + def expand(self, template: AnyStr) -> AnyStr: ... + + @overload + def group(self, group1: int = ...) -> AnyStr: ... + @overload + def group(self, group1: str) -> AnyStr: ... + @overload + def group(self, group1: int, group2: int, + *groups: int) -> Sequence[AnyStr]: ... + @overload + def group(self, group1: str, group2: str, + *groups: str) -> Sequence[AnyStr]: ... + + def groups(self, default: AnyStr = ...) -> Sequence[AnyStr]: ... + def groupdict(self, default: AnyStr = ...) -> dict[str, AnyStr]: ... + def start(self, group: Union[int, str] = ...) -> int: ... + def end(self, group: Union[int, str] = ...) -> int: ... + def span(self, group: Union[int, str] = ...) -> Tuple[int, int]: ... + if sys.version_info >= (3, 6): + def __getitem__(self, g: Union[int, str]) -> AnyStr: ... + +class Pattern(Generic[AnyStr]): + flags = 0 + groupindex: Mapping[str, int] + groups = 0 + pattern: AnyStr + + def search(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + def match(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + # New in Python 3.4 + def fullmatch(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Optional[Match[AnyStr]]: ... + def split(self, string: AnyStr, maxsplit: int = ...) -> list[AnyStr]: ... + def findall(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> list[Any]: ... + def finditer(self, string: AnyStr, pos: int = ..., + endpos: int = ...) -> Iterator[Match[AnyStr]]: ... + + @overload + def sub(self, repl: AnyStr, string: AnyStr, + count: int = ...) -> AnyStr: ... + @overload + def sub(self, repl: Callable[[Match[AnyStr]], AnyStr], string: AnyStr, + count: int = ...) -> AnyStr: ... + + @overload + def subn(self, repl: AnyStr, string: AnyStr, + count: int = ...) -> Tuple[AnyStr, int]: ... + @overload + def subn(self, repl: Callable[[Match[AnyStr]], AnyStr], string: AnyStr, + count: int = ...) -> Tuple[AnyStr, int]: ... + +# Functions + +def get_type_hints(obj: Callable, globalns: Optional[dict[str, Any]] = ..., + localns: Optional[dict[str, Any]] = ...) -> dict[str, Any]: ... + +@overload +def cast(tp: Type[_T], obj: Any) -> _T: ... +@overload +def cast(tp: str, obj: Any) -> Any: ... + +# Type constructors + +# NamedTuple is special-cased in the type checker +class NamedTuple(tuple): + _field_types: collections.OrderedDict[str, Type[Any]] + _field_defaults: Dict[str, Any] = ... + _fields: Tuple[str, ...] + _source: str + + def __init__(self, typename: str, fields: Iterable[Tuple[str, Any]] = ..., *, + verbose: bool = ..., rename: bool = ..., **kwargs: Any) -> None: ... + + @classmethod + def _make(cls: Type[_T], iterable: Iterable[Any]) -> _T: ... + + def _asdict(self) -> collections.OrderedDict[str, Any]: ... + def _replace(self: _T, **kwargs: Any) -> _T: ... + +def NewType(name: str, tp: Type[_T]) -> Type[_T]: ... + +# This itself is only available during type checking +def type_check_only(func_or_cls: _C) -> _C: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi new file mode 100644 index 0000000..3ed602c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/__init__.pyi @@ -0,0 +1,31 @@ +# Stubs for unittest + +from typing import Iterable, List, Optional, Type, Union +from types import ModuleType + +from unittest.case import * +from unittest.loader import * +from unittest.result import * +from unittest.runner import * +from unittest.signals import * +from unittest.suite import * + + +# not really documented +class TestProgram: + result: TestResult + def runTests(self) -> None: ... # undocumented + + +def main(module: Union[None, str, ModuleType] = ..., + defaultTest: Union[str, Iterable[str], None] = ..., + argv: Optional[List[str]] = ..., + testRunner: Union[Type[TestRunner], TestRunner, None] = ..., + testLoader: TestLoader = ..., exit: bool = ..., verbosity: int = ..., + failfast: Optional[bool] = ..., catchbreak: Optional[bool] = ..., + buffer: Optional[bool] = ..., + warnings: Optional[str] = ...) -> TestProgram: ... + + +def load_tests(loader: TestLoader, tests: TestSuite, + pattern: Optional[str]) -> TestSuite: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi new file mode 100644 index 0000000..f71e5e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/case.pyi @@ -0,0 +1,224 @@ +from typing import ( + Any, AnyStr, Callable, Container, ContextManager, Dict, FrozenSet, Generic, + Iterable, List, NoReturn, Optional, overload, Pattern, Sequence, Set, + Tuple, Type, TypeVar, Union, +) +import logging +import unittest.result +from types import TracebackType + + +_E = TypeVar('_E', bound=BaseException) +_FT = TypeVar('_FT', bound=Callable[..., Any]) + + +def expectedFailure(func: _FT) -> _FT: ... +def skip(reason: str) -> Callable[[_FT], _FT]: ... +def skipIf(condition: object, reason: str) -> Callable[[_FT], _FT]: ... +def skipUnless(condition: object, reason: str) -> Callable[[_FT], _FT]: ... + + +class SkipTest(Exception): + def __init__(self, reason: str) -> None: ... + + +class TestCase: + failureException: Type[BaseException] + longMessage: bool + maxDiff: Optional[int] + # undocumented + _testMethodName: str + # undocumented + _testMethodDoc: str + def __init__(self, methodName: str = ...) -> None: ... + def setUp(self) -> None: ... + def tearDown(self) -> None: ... + @classmethod + def setUpClass(cls) -> None: ... + @classmethod + def tearDownClass(cls) -> None: ... + def run(self, result: Optional[unittest.result.TestResult] = ...) -> Optional[unittest.result.TestResult]: ... + def __call__(self, result: Optional[unittest.result.TestResult] = ...) -> Optional[unittest.result.TestResult]: ... + def skipTest(self, reason: Any) -> None: ... + def subTest(self, msg: Any = ..., **params: Any) -> ContextManager[None]: ... + def debug(self) -> None: ... + def _addSkip( + self, result: unittest.result.TestResult, test_case: unittest.case.TestCase, reason: str + ) -> None: ... + def assertEqual(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def assertNotEqual(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def assertTrue(self, expr: Any, msg: Any = ...) -> None: ... + def assertFalse(self, expr: Any, msg: Any = ...) -> None: ... + def assertIs(self, expr1: Any, expr2: Any, msg: Any = ...) -> None: ... + def assertIsNot(self, expr1: Any, expr2: Any, msg: Any = ...) -> None: ... + def assertIsNone(self, obj: Any, msg: Any = ...) -> None: ... + def assertIsNotNone(self, obj: Any, msg: Any = ...) -> None: ... + def assertIn(self, member: Any, + container: Union[Iterable[Any], Container[Any]], + msg: Any = ...) -> None: ... + def assertNotIn(self, member: Any, + container: Union[Iterable[Any], Container[Any]], + msg: Any = ...) -> None: ... + def assertIsInstance(self, obj: Any, + cls: Union[type, Tuple[type, ...]], + msg: Any = ...) -> None: ... + def assertNotIsInstance(self, obj: Any, + cls: Union[type, Tuple[type, ...]], + msg: Any = ...) -> None: ... + def assertGreater(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertGreaterEqual(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertLess(self, a: Any, b: Any, msg: Any = ...) -> None: ... + def assertLessEqual(self, a: Any, b: Any, msg: Any = ...) -> None: ... + @overload + def assertRaises(self, # type: ignore + expected_exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaises(self, + expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + @overload + def assertRaisesRegex(self, # type: ignore + expected_exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegex(self, + expected_exception: Union[Type[_E], Tuple[Type[_E], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + @overload + def assertWarns(self, # type: ignore + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertWarns(self, + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + msg: Any = ...) -> _AssertWarnsContext: ... + @overload + def assertWarnsRegex(self, # type: ignore + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + callable: Callable[..., Any], + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertWarnsRegex(self, + expected_warning: Union[Type[Warning], Tuple[Type[Warning], ...]], + expected_regex: Union[str, bytes, Pattern[str], Pattern[bytes]], + msg: Any = ...) -> _AssertWarnsContext: ... + def assertLogs( + self, logger: Optional[logging.Logger] = ..., + level: Union[int, str, None] = ... + ) -> _AssertLogsContext: ... + def assertAlmostEqual(self, first: float, second: float, places: int = ..., + msg: Any = ..., delta: float = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + @overload + def assertNotAlmostEqual(self, first: float, second: float, *, + msg: Any = ..., delta: float = ...) -> None: ... + def assertRegex(self, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + def assertNotRegex(self, text: AnyStr, unexpected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + def assertCountEqual(self, first: Iterable[Any], second: Iterable[Any], + msg: Any = ...) -> None: ... + def addTypeEqualityFunc(self, typeobj: Type[Any], + function: Callable[..., None]) -> None: ... + def assertMultiLineEqual(self, first: str, second: str, + msg: Any = ...) -> None: ... + def assertSequenceEqual(self, seq1: Sequence[Any], seq2: Sequence[Any], + msg: Any = ..., + seq_type: Type[Sequence[Any]] = ...) -> None: ... + def assertListEqual(self, list1: List[Any], list2: List[Any], + msg: Any = ...) -> None: ... + def assertTupleEqual(self, tuple1: Tuple[Any, ...], tuple2: Tuple[Any, ...], + msg: Any = ...) -> None: ... + def assertSetEqual(self, set1: Union[Set[Any], FrozenSet[Any]], + set2: Union[Set[Any], FrozenSet[Any]], msg: Any = ...) -> None: ... + def assertDictEqual(self, d1: Dict[Any, Any], d2: Dict[Any, Any], + msg: Any = ...) -> None: ... + def fail(self, msg: Any = ...) -> NoReturn: ... + def countTestCases(self) -> int: ... + def defaultTestResult(self) -> unittest.result.TestResult: ... + def id(self) -> str: ... + def shortDescription(self) -> Optional[str]: ... + def addCleanup(self, function: Callable[..., Any], *args: Any, + **kwargs: Any) -> None: ... + def doCleanups(self) -> None: ... + def _formatMessage(self, msg: Optional[str], standardMsg: str) -> str: ... # undocumented + def _getAssertEqualityFunc(self, first: Any, second: Any) -> Callable[..., None]: ... # undocumented + # below is deprecated + def failUnlessEqual(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def assertEquals(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def failIfEqual(self, first: Any, second: Any, msg: Any = ...) -> None: ... + def assertNotEquals(self, first: Any, second: Any, + msg: Any = ...) -> None: ... + def failUnless(self, expr: bool, msg: Any = ...) -> None: ... + def assert_(self, expr: bool, msg: Any = ...) -> None: ... + def failIf(self, expr: bool, msg: Any = ...) -> None: ... + @overload + def failUnlessRaises(self, # type: ignore + exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any] = ..., + *args: Any, **kwargs: Any) -> None: ... + @overload + def failUnlessRaises(self, + exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + def failUnlessAlmostEqual(self, first: float, second: float, + places: int = ..., msg: Any = ...) -> None: ... + def assertAlmostEquals(self, first: float, second: float, places: int = ..., + msg: Any = ..., delta: float = ...) -> None: ... + def failIfAlmostEqual(self, first: float, second: float, places: int = ..., + msg: Any = ...) -> None: ... + def assertNotAlmostEquals(self, first: float, second: float, + places: int = ..., msg: Any = ..., + delta: float = ...) -> None: ... + def assertRegexpMatches(self, text: AnyStr, regex: Union[AnyStr, Pattern[AnyStr]], + msg: Any = ...) -> None: ... + @overload + def assertRaisesRegexp(self, # type: ignore + exception: Union[Type[BaseException], Tuple[Type[BaseException], ...]], + callable: Callable[..., Any] = ..., + *args: Any, **kwargs: Any) -> None: ... + @overload + def assertRaisesRegexp(self, + exception: Union[Type[_E], Tuple[Type[_E], ...]], + msg: Any = ...) -> _AssertRaisesContext[_E]: ... + +class FunctionTestCase(TestCase): + def __init__(self, testFunc: Callable[[], None], + setUp: Optional[Callable[[], None]] = ..., + tearDown: Optional[Callable[[], None]] = ..., + description: Optional[str] = ...) -> None: ... + +class _AssertRaisesContext(Generic[_E]): + exception: _E + def __enter__(self) -> _AssertRaisesContext[_E]: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + +class _AssertWarnsContext: + warning: Warning + filename: str + lineno: int + def __enter__(self) -> _AssertWarnsContext: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... + +class _AssertLogsContext: + records: List[logging.LogRecord] + output: List[str] + def __enter__(self) -> _AssertLogsContext: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], + exc_tb: Optional[TracebackType]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi new file mode 100644 index 0000000..53b81ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/loader.pyi @@ -0,0 +1,32 @@ +import sys +import unittest.case +import unittest.suite +import unittest.result +from types import ModuleType +from typing import Any, Callable, List, Optional, Sequence, Type + + +class TestLoader: + if sys.version_info >= (3, 5): + errors: List[Type[BaseException]] + testMethodPrefix: str + sortTestMethodsUsing: Callable[[str, str], bool] + suiteClass: Callable[[List[unittest.case.TestCase]], unittest.suite.TestSuite] + def loadTestsFromTestCase(self, + testCaseClass: Type[unittest.case.TestCase]) -> unittest.suite.TestSuite: ... + if sys.version_info >= (3, 5): + def loadTestsFromModule(self, module: ModuleType, + *, pattern: Any = ...) -> unittest.suite.TestSuite: ... + else: + def loadTestsFromModule(self, + module: ModuleType) -> unittest.suite.TestSuite: ... + def loadTestsFromName(self, name: str, + module: Optional[ModuleType] = ...) -> unittest.suite.TestSuite: ... + def loadTestsFromNames(self, names: Sequence[str], + module: Optional[ModuleType] = ...) -> unittest.suite.TestSuite: ... + def getTestCaseNames(self, + testCaseClass: Type[unittest.case.TestCase]) -> Sequence[str]: ... + def discover(self, start_dir: str, pattern: str = ..., + top_level_dir: Optional[str] = ...) -> unittest.suite.TestSuite: ... + +defaultTestLoader: TestLoader diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi new file mode 100644 index 0000000..cb3db61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/mock.pyi @@ -0,0 +1,146 @@ +# Stubs for mock + +import sys +from typing import Any, Optional, Text, Type + +FILTER_DIR: Any + +class _slotted: ... + +class _SentinelObject: + name: Any + def __init__(self, name: Any) -> None: ... + +class _Sentinel: + def __init__(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +sentinel: Any +DEFAULT: Any + +class _CallList(list): + def __contains__(self, value: Any) -> bool: ... + +class _MockIter: + obj: Any + def __init__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __next__(self) -> Any: ... + +class Base: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + +# TODO: Defining this and other mock classes as classes in this stub causes +# many false positives with mypy and production code. See if we can +# improve mypy somehow and use a class with an "Any" base class. +NonCallableMock: Any + +class CallableMixin(Base): + side_effect: Any + def __init__(self, spec: Optional[Any] = ..., side_effect: Optional[Any] = ..., return_value: Any = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., **kwargs: Any) -> None: ... + def __call__(_mock_self, *args: Any, **kwargs: Any) -> Any: ... + +Mock: Any + +class _patch: + attribute_name: Any + getter: Any + attribute: Any + new: Any + new_callable: Any + spec: Any + create: bool + has_local: Any + spec_set: Any + autospec: Any + kwargs: Any + additional_patchers: Any + def __init__(self, getter: Any, attribute: Any, new: Any, spec: Any, create: Any, spec_set: Any, autospec: Any, new_callable: Any, kwargs: Any) -> None: ... + def copy(self) -> Any: ... + def __call__(self, func: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def decorate_callable(self, func: Any) -> Any: ... + def get_original(self) -> Any: ... + target: Any + temp_original: Any + is_local: Any + def __enter__(self) -> Any: ... + def __exit__(self, *exc_info: Any) -> Any: ... + def start(self) -> Any: ... + def stop(self) -> Any: ... + +class _patch_dict: + in_dict: Any + values: Any + clear: Any + def __init__(self, in_dict: Any, values: Any = ..., clear: Any = ..., **kwargs: Any) -> None: ... + def __call__(self, f: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def __enter__(self) -> Any: ... + def __exit__(self, *args: Any) -> Any: ... + start: Any + stop: Any + +class _patcher: + TEST_PREFIX: str + dict: Type[_patch_dict] + def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def object(self, target: Any, attribute: Text, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def stopall(self) -> None: ... + +patch: _patcher + +class MagicMixin: + def __init__(self, *args: Any, **kw: Any) -> None: ... + +NonCallableMagicMock: Any +MagicMock: Any + +class MagicProxy: + name: Any + parent: Any + def __init__(self, name: Any, parent: Any) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def create_mock(self) -> Any: ... + def __get__(self, obj: Any, _type: Optional[Any] = ...) -> Any: ... + +class _ANY: + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +ANY: Any + +class _Call(tuple): + def __new__(cls, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> Any: ... + name: Any + parent: Any + from_kall: Any + def __init__(self, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> None: ... + def __eq__(self, other: Any) -> bool: ... + __ne__: Any + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __getattr__(self, attr: Any) -> Any: ... + def count(self, *args: Any, **kwargs: Any) -> Any: ... + def index(self, *args: Any, **kwargs: Any) -> Any: ... + def call_list(self) -> Any: ... + +call: Any + +def create_autospec(spec: Any, spec_set: Any = ..., instance: Any = ..., _parent: Optional[Any] = ..., _name: Optional[Any] = ..., **kwargs: Any) -> Any: ... + +class _SpecState: + spec: Any + ids: Any + spec_set: Any + parent: Any + instance: Any + name: Any + def __init__(self, spec: Any, spec_set: Any = ..., parent: Optional[Any] = ..., name: Optional[Any] = ..., ids: Optional[Any] = ..., instance: Any = ...) -> None: ... + +def mock_open(mock: Optional[Any] = ..., read_data: Any = ...) -> Any: ... + +PropertyMock: Any + +if sys.version_info >= (3, 7): + def seal(mock: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi new file mode 100644 index 0000000..cb85399 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/result.pyi @@ -0,0 +1,36 @@ +from typing import Any, List, Optional, Tuple, Type +from types import TracebackType +import unittest.case + + +_SysExcInfoType = Tuple[Optional[Type[BaseException]], + Optional[BaseException], + Optional[TracebackType]] + + +class TestResult: + errors: List[Tuple[unittest.case.TestCase, str]] + failures: List[Tuple[unittest.case.TestCase, str]] + skipped: List[Tuple[unittest.case.TestCase, str]] + expectedFailures: List[Tuple[unittest.case.TestCase, str]] + unexpectedSuccesses: List[unittest.case.TestCase] + shouldStop: bool + testsRun: int + buffer: bool + failfast: bool + tb_locals: bool + def wasSuccessful(self) -> bool: ... + def stop(self) -> None: ... + def startTest(self, test: unittest.case.TestCase) -> None: ... + def stopTest(self, test: unittest.case.TestCase) -> None: ... + def startTestRun(self) -> None: ... + def stopTestRun(self) -> None: ... + def addError(self, test: unittest.case.TestCase, err: _SysExcInfoType) -> None: ... + def addFailure(self, test: unittest.case.TestCase, err: _SysExcInfoType) -> None: ... + def addSuccess(self, test: unittest.case.TestCase) -> None: ... + def addSkip(self, test: unittest.case.TestCase, reason: str) -> None: ... + def addExpectedFailure(self, test: unittest.case.TestCase, + err: _SysExcInfoType) -> None: ... + def addUnexpectedSuccess(self, test: unittest.case.TestCase) -> None: ... + def addSubTest(self, test: unittest.case.TestCase, subtest: unittest.case.TestCase, + outcome: Optional[_SysExcInfoType]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi new file mode 100644 index 0000000..786bc19 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/runner.pyi @@ -0,0 +1,40 @@ +from typing import Callable, Optional, TextIO, Tuple, Type, Union +import sys +import unittest.case +import unittest.result +import unittest.suite + + +_ResultClassType = Callable[[TextIO, bool, int], unittest.result.TestResult] + + +class TextTestResult(unittest.result.TestResult): + separator1: str + separator2: str + def __init__(self, stream: TextIO, descriptions: bool, + verbosity: int) -> None: ... + def getDescription(self, test: unittest.case.TestCase) -> str: ... + def printErrors(self) -> None: ... + def printErrorList(self, flavour: str, errors: Tuple[unittest.case.TestCase, str]) -> None: ... + + +class TestRunner: + def run(self, test: Union[unittest.suite.TestSuite, unittest.case.TestCase]) -> unittest.result.TestResult: ... + + +class TextTestRunner(TestRunner): + if sys.version_info >= (3, 5): + def __init__(self, stream: Optional[TextIO] = ..., + descriptions: bool = ..., verbosity: int = ..., + failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[_ResultClassType] = ..., + warnings: Optional[Type[Warning]] = ..., + *, tb_locals: bool = ...) -> None: ... + else: + def __init__(self, + stream: Optional[TextIO] = ..., + descriptions: bool = ..., verbosity: int = ..., + failfast: bool = ..., buffer: bool = ..., + resultclass: Optional[_ResultClassType] = ..., + warnings: Optional[Type[Warning]] = ...) -> None: ... + def _makeResult(self) -> unittest.result.TestResult: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi new file mode 100644 index 0000000..a4616b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/signals.pyi @@ -0,0 +1,14 @@ +from typing import Any, Callable, overload, TypeVar +import unittest.result + + +_F = TypeVar('_F', bound=Callable[..., Any]) + + +def installHandler() -> None: ... +def registerResult(result: unittest.result.TestResult) -> None: ... +def removeResult(result: unittest.result.TestResult) -> bool: ... +@overload +def removeHandler() -> None: ... +@overload +def removeHandler(function: _F) -> _F: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi new file mode 100644 index 0000000..54e9e69 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/unittest/suite.pyi @@ -0,0 +1,22 @@ +from typing import Iterable, Iterator, List, Union +import unittest.case +import unittest.result + + +_TestType = Union[unittest.case.TestCase, TestSuite] + + +class BaseTestSuite(Iterable[_TestType]): + _tests: List[unittest.case.TestCase] + _removed_tests: int + def __init__(self, tests: Iterable[_TestType] = ...) -> None: ... + def __call__(self, result: unittest.result.TestResult) -> unittest.result.TestResult: ... + def addTest(self, test: _TestType) -> None: ... + def addTests(self, tests: Iterable[_TestType]) -> None: ... + def run(self, result: unittest.result.TestResult) -> unittest.result.TestResult: ... + def debug(self) -> None: ... + def countTestCases(self) -> int: ... + def __iter__(self) -> Iterator[_TestType]: ... + + +class TestSuite(BaseTestSuite): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi new file mode 100644 index 0000000..191c765 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/error.pyi @@ -0,0 +1,12 @@ +from typing import Dict, Union +from urllib.response import addinfourl + +# Stubs for urllib.error + +class URLError(IOError): + reason: Union[str, BaseException] +class HTTPError(URLError, addinfourl): + code: int + headers: Dict[str, str] + def __init__(self, url, code, msg, hdrs, fp) -> None: ... +class ContentTooShortError(URLError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi new file mode 100644 index 0000000..8d7cc4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/parse.pyi @@ -0,0 +1,146 @@ +# Stubs for urllib.parse +from typing import Any, List, Dict, Tuple, AnyStr, Generic, overload, Sequence, Mapping, Union, NamedTuple, Callable, Optional +import sys + +_Str = Union[bytes, str] + + +uses_relative: List[str] +uses_netloc: List[str] +uses_params: List[str] +non_hierarchical: List[str] +uses_query: List[str] +uses_fragment: List[str] +scheme_chars: str +MAX_CACHE_SIZE = 0 + +class _ResultMixinBase(Generic[AnyStr]): + def geturl(self) -> AnyStr: ... + +class _ResultMixinStr(_ResultMixinBase[str]): + def encode(self, encoding: str = ..., errors: str = ...) -> _ResultMixinBytes: ... + + +class _ResultMixinBytes(_ResultMixinBase[str]): + def decode(self, encoding: str = ..., errors: str = ...) -> _ResultMixinStr: ... + + +class _NetlocResultMixinBase(Generic[AnyStr]): + username: AnyStr + password: AnyStr + hostname: AnyStr + port: int + +class _NetlocResultMixinStr(_NetlocResultMixinBase[str], _ResultMixinStr): ... + +class _NetlocResultMixinBytes(_NetlocResultMixinBase[bytes], _ResultMixinBytes): ... + +class _DefragResultBase(tuple, Generic[AnyStr]): + url: AnyStr + fragment: AnyStr + + +_SplitResultBase = NamedTuple( + '_SplitResultBase', + [ + ('scheme', str), ('netloc', str), ('path', str), ('query', str), ('fragment', str) + ] +) +_SplitResultBytesBase = NamedTuple( + '_SplitResultBytesBase', + [ + ('scheme', bytes), ('netloc', bytes), ('path', bytes), ('query', bytes), ('fragment', bytes) + ] +) + +_ParseResultBase = NamedTuple( + '_ParseResultBase', + [ + ('scheme', str), ('netloc', str), ('path', str), ('params', str), ('query', str), ('fragment', str) + ] +) +_ParseResultBytesBase = NamedTuple( + '_ParseResultBytesBase', + [ + ('scheme', bytes), ('netloc', bytes), ('path', bytes), ('params', bytes), ('query', bytes), ('fragment', bytes) + ] +) + +# Structured result objects for string data +class DefragResult(_DefragResultBase[str], _ResultMixinStr): ... + +class SplitResult(_SplitResultBase, _NetlocResultMixinStr): ... + +class ParseResult(_ParseResultBase, _NetlocResultMixinStr): ... + +# Structured result objects for bytes data +class DefragResultBytes(_DefragResultBase[bytes], _ResultMixinBytes): ... + +class SplitResultBytes(_SplitResultBytesBase, _NetlocResultMixinBytes): ... + +class ParseResultBytes(_ParseResultBytesBase, _NetlocResultMixinBytes): ... + + +def parse_qs(qs: AnyStr, keep_blank_values: bool = ..., strict_parsing: bool = ..., encoding: str = ..., errors: str = ...) -> Dict[AnyStr, List[AnyStr]]: ... + +def parse_qsl(qs: AnyStr, keep_blank_values: bool = ..., strict_parsing: bool = ..., encoding: str = ..., errors: str = ...) -> List[Tuple[AnyStr, AnyStr]]: ... + + +@overload +def quote(string: str, safe: _Str = ..., encoding: str = ..., errors: str = ...) -> str: ... +@overload +def quote(string: bytes, safe: _Str = ...) -> str: ... + +def quote_from_bytes(bs: bytes, safe: _Str = ...) -> str: ... + +@overload +def quote_plus(string: str, safe: _Str = ..., encoding: str = ..., errors: str = ...) -> str: ... +@overload +def quote_plus(string: bytes, safe: _Str = ...) -> str: ... + +def unquote(string: str, encoding: str = ..., errors: str = ...) -> str: ... + +def unquote_to_bytes(string: _Str) -> bytes: ... + +def unquote_plus(string: str, encoding: str = ..., errors: str = ...) -> str: ... + +@overload +def urldefrag(url: str) -> DefragResult: ... +@overload +def urldefrag(url: bytes) -> DefragResultBytes: ... + +if sys.version_info >= (3, 5): + def urlencode(query: Union[Mapping[Any, Any], + Mapping[Any, Sequence[Any]], + Sequence[Tuple[Any, Any]], + Sequence[Tuple[Any, Sequence[Any]]]], + doseq: bool = ..., safe: AnyStr = ..., encoding: str = ..., errors: str = ..., + quote_via: Callable[[str, AnyStr, str, str], str] = ...) -> str: ... +else: + def urlencode(query: Union[Mapping[Any, Any], + Mapping[Any, Sequence[Any]], + Sequence[Tuple[Any, Any]], + Sequence[Tuple[Any, Sequence[Any]]]], + doseq: bool = ..., safe: AnyStr = ..., encoding: str = ..., errors: str = ...) -> str: ... + +def urljoin(base: AnyStr, url: Optional[AnyStr], allow_fragments: bool = ...) -> AnyStr: ... + +@overload +def urlparse(url: str, scheme: str = ..., allow_fragments: bool = ...) -> ParseResult: ... +@overload +def urlparse(url: bytes, scheme: bytes = ..., allow_fragments: bool = ...) -> ParseResultBytes: ... + +@overload +def urlsplit(url: str, scheme: str = ..., allow_fragments: bool = ...) -> SplitResult: ... +@overload +def urlsplit(url: bytes, scheme: bytes = ..., allow_fragments: bool = ...) -> SplitResultBytes: ... + +@overload +def urlunparse(components: Tuple[AnyStr, AnyStr, AnyStr, AnyStr, AnyStr, AnyStr]) -> AnyStr: ... +@overload +def urlunparse(components: Sequence[AnyStr]) -> AnyStr: ... + +@overload +def urlunsplit(components: Tuple[AnyStr, AnyStr, AnyStr, AnyStr, AnyStr]) -> AnyStr: ... +@overload +def urlunsplit(components: Sequence[AnyStr]) -> AnyStr: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi new file mode 100644 index 0000000..a1a5568 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/request.pyi @@ -0,0 +1,222 @@ +# Stubs for urllib.request (Python 3.4) + +from typing import ( + Any, Callable, ClassVar, Dict, List, IO, Mapping, Optional, Sequence, Tuple, + TypeVar, Union, overload, NoReturn, +) +from http.client import HTTPResponse, HTTPMessage, HTTPConnectionProtocol +from http.cookiejar import CookieJar +from email.message import Message +from urllib.response import addinfourl +import ssl +import sys +import os + +_T = TypeVar('_T') +_UrlopenRet = Union[_HTTPResponse, addinfourl] + +class _HTTPResponse(HTTPResponse): + url: str + msg: str # type: ignore + +def urlopen( + url: Union[str, Request], data: Optional[bytes] = ..., + timeout: float = ..., *, cafile: Optional[str] = ..., + capath: Optional[str] = ..., cadefault: bool = ..., + context: Optional[ssl.SSLContext] = ... +) -> _UrlopenRet: ... +def install_opener(opener: OpenerDirector) -> None: ... +def build_opener( + *handlers: Union[BaseHandler, Callable[[], BaseHandler]] +) -> OpenerDirector: ... +def url2pathname(path: str) -> str: ... +def pathname2url(path: str) -> str: ... +def getproxies() -> Dict[str, str]: ... +def parse_http_list(s: str) -> List[str]: ... +def parse_keqv_list(l: List[str]) -> Dict[str, str]: ... + +class Request: + @property + def full_url(self) -> str: ... + @full_url.setter + def full_url(self, value: str) -> None: ... + @full_url.deleter + def full_url(self) -> None: ... + type: str + host: str + origin_req_host: str + selector: str + data: Optional[bytes] + headers: Dict[str, str] + unverifiable: bool + method: Optional[str] + def __init__(self, url: str, data: Optional[bytes] = ..., + headers: Dict[str, str] = ..., origin_req_host: Optional[str] = ..., + unverifiable: bool = ..., method: Optional[str] = ...) -> None: ... + def get_method(self) -> str: ... + def add_header(self, key: str, val: str) -> None: ... + def add_unredirected_header(self, key: str, val: str) -> None: ... + def has_header(self, header_name: str) -> bool: ... + def remove_header(self, header_name: str) -> None: ... + def get_full_url(self) -> str: ... + def set_proxy(self, host: str, type: str) -> None: ... + @overload + def get_header(self, header_name: str) -> Optional[str]: ... + @overload + def get_header(self, header_name: str, default: _T) -> Union[str, _T]: ... + def header_items(self) -> List[Tuple[str, str]]: ... + +class OpenerDirector: + addheaders: List[Tuple[str, str]] + def add_handler(self, handler: BaseHandler) -> None: ... + def open(self, url: Union[str, Request], data: Optional[bytes] = ..., + timeout: float = ...) -> _UrlopenRet: ... + def error(self, proto: str, *args: Any) -> _UrlopenRet: ... + + +class BaseHandler: + handler_order: ClassVar[int] + parent: OpenerDirector + def add_parent(self, parent: OpenerDirector) -> None: ... + def close(self) -> None: ... + def http_error_nnn(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> _UrlopenRet: ... + +class HTTPDefaultErrorHandler(BaseHandler): ... + +class HTTPRedirectHandler(BaseHandler): + def redirect_request(self, req: Request, fp: IO[str], code: int, msg: str, + hdrs: Mapping[str, str], + newurl: str) -> Optional[Request]: ... + def http_error_301(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_302(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_303(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + def http_error_307(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class HTTPCookieProcessor(BaseHandler): + cookiejar: CookieJar + def __init__(self, cookiejar: Optional[CookieJar] = ...) -> None: ... + +class ProxyHandler(BaseHandler): + def __init__(self, proxies: Optional[Dict[str, str]] = ...) -> None: ... + # TODO add a method for every (common) proxy protocol + +class HTTPPasswordMgr: + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str) -> None: ... + def find_user_password(self, realm: str, authuri: str) -> Tuple[Optional[str], Optional[str]]: ... + +class HTTPPasswordMgrWithDefaultRealm(HTTPPasswordMgr): + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str) -> None: ... + def find_user_password(self, realm: str, authuri: str) -> Tuple[Optional[str], Optional[str]]: ... + +if sys.version_info >= (3, 5): + class HTTPPasswordMgrWithPriorAuth(HTTPPasswordMgrWithDefaultRealm): + def add_password(self, realm: str, uri: Union[str, Sequence[str]], + user: str, passwd: str, + is_authenticated: bool = ...) -> None: ... + def update_authenticated(self, uri: Union[str, Sequence[str]], + is_authenticated: bool = ...) -> None: ... + def is_authenticated(self, authuri: str) -> bool: ... + +class AbstractBasicAuthHandler: + def __init__(self, + password_mgr: Optional[HTTPPasswordMgr] = ...) -> None: ... + def http_error_auth_reqed(self, authreq: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + +class HTTPBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + def http_error_401(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class ProxyBasicAuthHandler(AbstractBasicAuthHandler, BaseHandler): + def http_error_407(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class AbstractDigestAuthHandler: + def __init__(self, passwd: Optional[HTTPPasswordMgr] = ...) -> None: ... + def reset_retry_count(self) -> None: ... + def http_error_auth_reqed(self, auth_header: str, host: str, req: Request, + headers: Mapping[str, str]) -> None: ... + def retry_http_digest_auth(self, req: Request, auth: str) -> Optional[_UrlopenRet]: ... + def get_cnonce(self, nonce: str) -> str: ... + def get_authorization(self, req: Request, chal: Mapping[str, str]) -> str: ... + def get_algorithm_impls(self, algorithm: str) -> Tuple[Callable[[str], str], Callable[[str, str], str]]: ... + def get_entity_digest(self, data: Optional[bytes], chal: Mapping[str, str]) -> Optional[str]: ... + +class HTTPDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + def http_error_401(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class ProxyDigestAuthHandler(BaseHandler, AbstractDigestAuthHandler): + def http_error_407(self, req: Request, fp: IO[str], code: int, msg: int, + hdrs: Mapping[str, str]) -> Optional[_UrlopenRet]: ... + +class AbstractHTTPHandler(BaseHandler): # undocumented + def __init__(self, debuglevel: int = ...) -> None: ... + def set_http_debuglevel(self, level: int) -> None: ... + def do_request_(self, request: Request) -> Request: ... + def do_open(self, + http_class: HTTPConnectionProtocol, + req: Request, + **http_conn_args: Any) -> HTTPResponse: ... + +class HTTPHandler(AbstractHTTPHandler): + def http_open(self, req: Request) -> HTTPResponse: ... + def http_request(self, request: Request) -> Request: ... # undocumented + +class HTTPSHandler(AbstractHTTPHandler): + def __init__(self, debuglevel: int = ..., + context: Optional[ssl.SSLContext] = ..., + check_hostname: Optional[bool] = ...) -> None: ... + def https_open(self, req: Request) -> HTTPResponse: ... + def https_request(self, request: Request) -> Request: ... # undocumented + +class FileHandler(BaseHandler): + def file_open(self, req: Request) -> addinfourl: ... + +class DataHandler(BaseHandler): + def data_open(self, req: Request) -> addinfourl: ... + +class FTPHandler(BaseHandler): + def ftp_open(self, req: Request) -> addinfourl: ... + +class CacheFTPHandler(FTPHandler): + def setTimeout(self, t: float) -> None: ... + def setMaxConns(self, m: int) -> None: ... + +class UnknownHandler(BaseHandler): + def unknown_open(self, req: Request) -> NoReturn: ... + +class HTTPErrorProcessor(BaseHandler): + def http_response(self, request, response) -> _UrlopenRet: ... + def https_response(self, request, response) -> _UrlopenRet: ... + +if sys.version_info >= (3, 6): + def urlretrieve(url: str, filename: Optional[Union[str, os.PathLike]] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, HTTPMessage]: ... +else: + def urlretrieve(url: str, filename: Optional[str] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, HTTPMessage]: ... +def urlcleanup() -> None: ... + +class URLopener: + version: ClassVar[str] + def __init__(self, proxies: Optional[Dict[str, str]] = ..., + **x509: str) -> None: ... + def open(self, fullurl: str, data: Optional[bytes] = ...) -> _UrlopenRet: ... + def open_unknown(self, fullurl: str, + data: Optional[bytes] = ...) -> _UrlopenRet: ... + def retrieve(self, url: str, filename: Optional[str] = ..., + reporthook: Optional[Callable[[int, int, int], None]] = ..., + data: Optional[bytes] = ...) -> Tuple[str, Optional[Message]]: ... + +class FancyURLopener(URLopener): + def prompt_user_passwd(self, host: str, realm: str) -> Tuple[str, str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi new file mode 100644 index 0000000..ef3507d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/response.pyi @@ -0,0 +1,41 @@ +# private module, we only expose what's needed + +from typing import BinaryIO, Iterable, List, Mapping, Optional, Type, TypeVar +from types import TracebackType + +_AIUT = TypeVar("_AIUT", bound=addbase) + +class addbase(BinaryIO): + def __enter__(self: _AIUT) -> _AIUT: ... + def __exit__(self, type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> bool: ... + def __iter__(self: _AIUT) -> _AIUT: ... + def __next__(self) -> bytes: ... + def close(self) -> None: ... + # These methods don't actually exist, but the class inherits at runtime from + # tempfile._TemporaryFileWrapper, which uses __getattr__ to delegate to the + # underlying file object. To satisfy the BinaryIO interface, we pretend that this + # class has these additional methods. + def fileno(self) -> int: ... + def flush(self) -> None: ... + def isatty(self) -> bool: ... + def read(self, n: int = ...) -> bytes: ... + def readable(self) -> bool: ... + def readline(self, limit: int = ...) -> bytes: ... + def readlines(self, hint: int = ...) -> List[bytes]: ... + def seek(self, offset: int, whence: int = ...) -> int: ... + def seekable(self) -> bool: ... + def tell(self) -> int: ... + def truncate(self, size: Optional[int] = ...) -> int: ... + def writable(self) -> bool: ... + def write(self, s: bytes) -> int: ... + def writelines(self, lines: Iterable[bytes]) -> None: ... + +class addinfo(addbase): + headers: Mapping[str, str] + def info(self) -> Mapping[str, str]: ... + +class addinfourl(addinfo): + url: str + code: int + def geturl(self) -> str: ... + def getcode(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi new file mode 100644 index 0000000..36150ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/stdlib/3/urllib/robotparser.pyi @@ -0,0 +1,18 @@ +# Stubs for urllib.robotparser (Python 3.4) + +from typing import Iterable, NamedTuple, Optional +import sys + +_RequestRate = NamedTuple('_RequestRate', [('requests', int), ('seconds', int)]) + +class RobotFileParser: + def __init__(self, url: str = ...) -> None: ... + def set_url(self, url: str) -> None: ... + def read(self) -> None: ... + def parse(self, lines: Iterable[str]) -> None: ... + def can_fetch(self, user_agent: str, url: str) -> bool: ... + def mtime(self) -> int: ... + def modified(self) -> None: ... + if sys.version_info >= (3, 6): + def crawl_delay(self, useragent: str) -> Optional[str]: ... + def request_rate(self, useragent: str) -> Optional[_RequestRate]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/check_consistent.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/check_consistent.py new file mode 100755 index 0000000..0566b49 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/check_consistent.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 + +# Symlinks are bad on Windows, so we cannot use them in typeshed. +# This checks that certain files are duplicated exactly. + +import os +import filecmp + +consistent_files = [ + {'stdlib/2and3/builtins.pyi', 'stdlib/2/__builtin__.pyi'}, + {'stdlib/2/SocketServer.pyi', 'stdlib/3/socketserver.pyi'}, + {'stdlib/2/os2emxpath.pyi', 'stdlib/2and3/posixpath.pyi', + 'stdlib/2and3/ntpath.pyi', 'stdlib/2and3/macpath.pyi', + 'stdlib/2/os/path.pyi', 'stdlib/3/os/path.pyi'}, + {'stdlib/3/enum.pyi', 'third_party/2/enum.pyi'}, + {'stdlib/2/os/path.pyi', 'stdlib/3/os/path.pyi'}, + {'stdlib/3/unittest/mock.pyi', 'third_party/2and3/mock.pyi'}, + {'stdlib/3/concurrent/__init__.pyi', 'third_party/2/concurrent/__init__.pyi'}, + {'stdlib/3/concurrent/futures/__init__.pyi', 'third_party/2/concurrent/futures/__init__.pyi'}, + {'stdlib/3/concurrent/futures/_base.pyi', 'third_party/2/concurrent/futures/_base.pyi'}, + {'stdlib/3/concurrent/futures/thread.pyi', 'third_party/2/concurrent/futures/thread.pyi'}, + {'stdlib/3/concurrent/futures/process.pyi', 'third_party/2/concurrent/futures/process.pyi'}, + {'stdlib/3.7/dataclasses.pyi', 'third_party/3/dataclasses.pyi'}, + {'stdlib/3/pathlib.pyi', 'third_party/2/pathlib2.pyi'}, + {'stdlib/3.7/contextvars.pyi', 'third_party/3.5/contextvars.pyi'}, +] + +def main(): + files = [os.path.join(root, file) for root, dir, files in os.walk('.') for file in files] + no_symlink = 'You cannot use symlinks in typeshed, please copy {} to its link.' + for file in files: + _, ext = os.path.splitext(file) + if ext == '.pyi' and os.path.islink(file): + raise ValueError(no_symlink.format(file)) + for file1, *others in consistent_files: + f1 = os.path.join(os.getcwd(), file1) + for file2 in others: + f2 = os.path.join(os.getcwd(), file2) + if not filecmp.cmp(f1, f2): + raise ValueError('File {f1} does not match file {f2}. Please copy it to {f2}'.format(f1=file1, f2=file2)) + +if __name__ == '__main__': + main() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_blacklist.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_blacklist.txt new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_selftest.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_selftest.py new file mode 100755 index 0000000..fd7f23b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_selftest.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +"""Script to run mypy's test suite against this version of typeshed.""" + +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + + +if __name__ == '__main__': + with tempfile.TemporaryDirectory() as tempdir: + dirpath = Path(tempdir) + subprocess.run(['python2.7', '-m', 'pip', 'install', '--user', 'typing'], check=True) + subprocess.run(['git', 'clone', '--depth', '1', 'git://github.com/python/mypy', + str(dirpath / 'mypy')], check=True) + subprocess.run([sys.executable, '-m', 'pip', 'install', '-U', '-r', + str(dirpath / 'mypy/test-requirements.txt')], check=True) + shutil.copytree('stdlib', str(dirpath / 'mypy/mypy/typeshed/stdlib')) + shutil.copytree('third_party', str(dirpath / 'mypy/mypy/typeshed/third_party')) + try: + subprocess.run(['pytest', '-n12'], cwd=str(dirpath / 'mypy'), check=True) + except subprocess.CalledProcessError as e: + print('mypy tests failed', file=sys.stderr) + sys.exit(e.returncode) + else: + print('mypy tests succeeded', file=sys.stderr) + sys.exit(0) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_test.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_test.py new file mode 100755 index 0000000..d4ffca1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/mypy_test.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 +"""Test runner for typeshed. + +Depends on mypy being installed. + +Approach: + +1. Parse sys.argv +2. Compute appropriate arguments for mypy +3. Stuff those arguments into sys.argv +4. Run mypy.main('') +5. Repeat steps 2-4 for other mypy runs (e.g. --py2) +""" + +import os +import re +import sys +import argparse + +parser = argparse.ArgumentParser(description="Test runner for typeshed. " + "Patterns are unanchored regexps on the full path.") +parser.add_argument('-v', '--verbose', action='count', default=0, help="More output") +parser.add_argument('-n', '--dry-run', action='store_true', help="Don't actually run mypy") +parser.add_argument('-x', '--exclude', type=str, nargs='*', help="Exclude pattern") +parser.add_argument('-p', '--python-version', type=str, nargs='*', + help="These versions only (major[.minor])") +parser.add_argument('--warn-unused-ignores', action='store_true', + help="Run mypy with --warn-unused-ignores " + "(hint: only get rid of warnings that are " + "unused for all platforms and Python versions)") + +parser.add_argument('filter', type=str, nargs='*', help="Include pattern (default all)") + + +def log(args, *varargs): + if args.verbose >= 2: + print(*varargs) + + +def match(fn, args, blacklist): + if blacklist.match(fn): + log(args, fn, 'exluded by blacklist') + return False + if not args.filter and not args.exclude: + log(args, fn, 'accept by default') + return True + if args.exclude: + for f in args.exclude: + if re.search(f, fn): + log(args, fn, 'excluded by pattern', f) + return False + if args.filter: + for f in args.filter: + if re.search(f, fn): + log(args, fn, 'accepted by pattern', f) + return True + if args.filter: + log(args, fn, 'rejected (no pattern matches)') + return False + log(args, fn, 'accepted (no exclude pattern matches)') + return True + + +def libpath(major, minor): + versions = ['%d.%d' % (major, minor) + for minor in reversed(range(minor + 1))] + versions.append(str(major)) + versions.append('2and3') + paths = [] + for v in versions: + for top in ['stdlib', 'third_party']: + p = os.path.join(top, v) + if os.path.isdir(p): + paths.append(p) + return paths + + +def main(): + args = parser.parse_args() + + with open(os.path.join(os.path.dirname(__file__), "mypy_blacklist.txt")) as f: + blacklist = re.compile("(%s)$" % "|".join( + re.findall(r"^\s*([^\s#]+)\s*(?:#.*)?$", f.read(), flags=re.M))) + + try: + from mypy.main import main as mypy_main + except ImportError: + print("Cannot import mypy. Did you install it?") + sys.exit(1) + + versions = [(3, 7), (3, 6), (3, 5), (3, 4), (2, 7)] + if args.python_version: + versions = [v for v in versions + if any(('%d.%d' % v).startswith(av) for av in args.python_version)] + if not versions: + print("--- no versions selected ---") + sys.exit(1) + + code = 0 + runs = 0 + for major, minor in versions: + roots = libpath(major, minor) + files = [] + seen = {'__builtin__', 'builtins', 'typing'} # Always ignore these. + for root in roots: + names = os.listdir(root) + for name in names: + full = os.path.join(root, name) + mod, ext = os.path.splitext(name) + if mod in seen or mod.startswith('.'): + continue + if ext in ['.pyi', '.py']: + if match(full, args, blacklist): + seen.add(mod) + files.append(full) + elif (os.path.isfile(os.path.join(full, '__init__.pyi')) or + os.path.isfile(os.path.join(full, '__init__.py'))): + for r, ds, fs in os.walk(full): + ds.sort() + fs.sort() + for f in fs: + m, x = os.path.splitext(f) + if x in ['.pyi', '.py']: + fn = os.path.join(r, f) + if match(fn, args, blacklist): + seen.add(mod) + files.append(fn) + if files: + runs += 1 + flags = ['--python-version', '%d.%d' % (major, minor)] + flags.append('--strict-optional') + flags.append('--no-site-packages') + flags.append('--show-traceback') + flags.append('--no-implicit-optional') + if args.warn_unused_ignores: + flags.append('--warn-unused-ignores') + sys.argv = ['mypy'] + flags + files + if args.verbose: + print("running", ' '.join(sys.argv)) + else: + print("running mypy", ' '.join(flags), "# with", len(files), "files") + try: + if not args.dry_run: + mypy_main('', sys.stdout, sys.stderr) + except SystemExit as err: + code = max(code, err.code) + if code: + print("--- exit status", code, "---") + sys.exit(code) + if not runs: + print("--- nothing to do; exit 1 ---") + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_blacklist.txt b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_blacklist.txt new file mode 100644 index 0000000..8fdd78b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_blacklist.txt @@ -0,0 +1,17 @@ +# Pytype blacklist. Files will not be tested with pytype. + +# pytype has its own version of these files, and thus doesn't mind if it +# can't parse the typeshed version: +stdlib/2/__builtin__.pyi +stdlib/2/typing.pyi +stdlib/2and3/builtins.pyi +stdlib/3/typing.pyi + +# third_party stubs with constructs that pytype doesn't yet support: +third_party/2/fb303/FacebookService.pyi +third_party/2/scribe/scribe.pyi +third_party/2and3/attr/__init__.pyi +third_party/2and3/attr/converters.pyi +third_party/2and3/attr/filters.pyi +third_party/2and3/attr/validators.pyi +third_party/2and3/pynamodb/models.pyi diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_test.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_test.py new file mode 100755 index 0000000..bb4793a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/tests/pytype_test.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python +r"""Test runner for typeshed. + +Depends on pytype being installed. + +If pytype is installed: + 1. For every pyi, do nothing if it is in pytype_blacklist.txt. + 2. Otherwise, call 'pytype.io.parse_pyi'. +Option two will load the file and all the builtins, typeshed dependencies. This +will also discover incorrect usage of imported modules. +""" + +import argparse +import collections +import itertools +import os +from pytype import config +from pytype import io +import re +import subprocess +import sys +import traceback + +parser = argparse.ArgumentParser(description='Pytype/typeshed tests.') +parser.add_argument('-n', '--dry-run', action='store_true', default=False, + help='Don\'t actually run tests') +# Default to '' so that symlinking typeshed subdirs in cwd will work. +parser.add_argument('--typeshed-location', type=str, default='', + help='Path to typeshed installation.') +# Set to true to print a stack trace every time an exception is thrown. +parser.add_argument('--print-stderr', action='store_true', default=False, + help='Print stderr every time an error is encountered.') +# We need to invoke python2.7 and 3.6. +parser.add_argument('--python27-exe', type=str, default='python2.7', + help='Path to a python 2.7 interpreter.') +parser.add_argument('--python36-exe', type=str, default='python3.6', + help='Path to a python 3.6 interpreter.') + + +TYPESHED_SUBDIRS = ['stdlib', 'third_party'] + + +TYPESHED_HOME = 'TYPESHED_HOME' +UNSET = object() # marker for tracking the TYPESHED_HOME environment variable + + +def main(): + args = parser.parse_args() + code = pytype_test(args) + sys.exit(code) + + +class PathMatcher(object): + def __init__(self, patterns): + if patterns: + self.matcher = re.compile('(%s)$' % '|'.join(patterns)) + else: + self.matcher = None + + def search(self, path): + if not self.matcher: + return False + return self.matcher.search(path) + + +def load_blacklist(typeshed_location): + filename = os.path.join(typeshed_location, 'tests', 'pytype_blacklist.txt') + skip_re = re.compile(r'^\s*([^\s#]+)\s*(?:#.*)?$') + skip = [] + + with open(filename) as f: + for line in f: + skip_match = skip_re.match(line) + if skip_match: + skip.append(skip_match.group(1)) + + return skip + + +def run_pytype(args, dry_run, typeshed_location): + """Runs pytype, returning the stderr if any.""" + if dry_run: + return None + old_typeshed_home = os.environ.get(TYPESHED_HOME, UNSET) + os.environ[TYPESHED_HOME] = typeshed_location + try: + io.parse_pyi(config.Options(args)) + except Exception: + stderr = traceback.format_exc() + else: + stderr = None + if old_typeshed_home is UNSET: + del os.environ[TYPESHED_HOME] + else: + os.environ[TYPESHED_HOME] = old_typeshed_home + return stderr + + +def _get_relative(filename): + top = 0 + for d in TYPESHED_SUBDIRS: + try: + top = filename.index(d) + except ValueError: + continue + else: + break + return filename[top:] + + +def _get_module_name(filename): + """Converts a filename {subdir}/m.n/module/foo to module.foo.""" + return '.'.join(_get_relative(filename).split(os.path.sep)[2:]).replace( + '.pyi', '').replace('.__init__', '') + + +def can_run(path, exe, *args): + exe = os.path.join(path, exe) + try: + subprocess.Popen( + [exe] + list(args), stdout=subprocess.PIPE, stderr=subprocess.PIPE + ).communicate() + return True + except OSError: + return False + + +def _is_version(path, version): + return any('%s/%s' % (d, version) in path for d in TYPESHED_SUBDIRS) + + +def pytype_test(args): + """Test with pytype, returning 0 for success and 1 for failure.""" + typeshed_location = args.typeshed_location or os.getcwd() + paths = [os.path.join(typeshed_location, d) for d in TYPESHED_SUBDIRS] + + for p in paths: + if not os.path.isdir(p): + print('Cannot find typeshed subdir at %s ' + '(specify parent dir via --typeshed-location)' % p) + return 1 + + for python_version_str in ('27', '36'): + dest = 'python%s_exe' % python_version_str + version = '.'.join(list(python_version_str)) + arg = '--python%s-exe' % python_version_str + if not can_run('', getattr(args, dest), '--version'): + print('Cannot run Python {version}. (point to a valid executable ' + 'via {arg})'.format(version=version, arg=arg)) + return 1 + + skipped = PathMatcher(load_blacklist(typeshed_location)) + files = [] + bad = [] + + def _parse(filename, major_version): + if major_version == 3: + version = '3.6' + exe = args.python36_exe + else: + version = '2.7' + exe = args.python27_exe + options = [ + '--module-name=%s' % _get_module_name(filename), + '--parse-pyi', + '-V %s' % version, + '--python_exe=%s' % exe, + ] + return run_pytype(options + [filename], + dry_run=args.dry_run, + typeshed_location=typeshed_location) + + for root, _, filenames in itertools.chain.from_iterable( + os.walk(p) for p in paths): + for f in sorted(f for f in filenames if f.endswith('.pyi')): + f = os.path.join(root, f) + rel = _get_relative(f) + if not skipped.search(rel): + if _is_version(f, '2and3'): + files.append((f, 2)) + files.append((f, 3)) + elif _is_version(f, '2'): + files.append((f, 2)) + elif _is_version(f, '3'): + files.append((f, 3)) + else: + print('Unrecognized path: %s' % f) + + errors = 0 + total_tests = len(files) + print('Testing files with pytype...') + for i, (f, version) in enumerate(files): + stderr = _parse(f, version) + if stderr: + if args.print_stderr: + print(stderr) + errors += 1 + # We strip off the stack trace and just leave the last line with the + # actual error; to see the stack traces use --print_stderr. + bad.append((_get_relative(f), stderr.rstrip().rsplit('\n', 1)[-1])) + + runs = i + 1 + if runs % 25 == 0: + print(' %3d/%d with %3d errors' % (runs, total_tests, errors)) + + print('Ran pytype with %d pyis, got %d errors.' % (total_tests, errors)) + for f, err in bad: + print('%s: %s' % (f, err)) + return int(bool(errors)) + + +if __name__ == '__main__': + main() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi new file mode 100644 index 0000000..395e630 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/OpenSSL/crypto.pyi @@ -0,0 +1,191 @@ +# Stubs for OpenSSL.crypto (Python 2) + +from typing import Any, Callable, Iterable, List, Optional, Set, Text, Tuple, Union + +from cryptography.hazmat.primitives.asymmetric import dsa, rsa +from datetime import datetime + +FILETYPE_PEM: int +FILETYPE_ASN1: int +FILETYPE_TEXT: int +TYPE_RSA: int +TYPE_DSA: int + +class Error(Exception): ... + +_Key = Union[rsa.RSAPublicKey, rsa.RSAPrivateKey, dsa.DSAPublicKey, dsa.DSAPrivateKey] + +class PKey: + def __init__(self) -> None: ... + def to_cryptography_key(self) -> _Key: ... + @classmethod + def from_cryptography_key(cls, crypto_key: _Key): ... + def generate_key(self, type: int, bits: int) -> None: ... + def check(self) -> bool: ... + def type(self) -> int: ... + def bits(self) -> int: ... + +class _EllipticCurve: + name: Text + +def get_elliptic_curves() -> Set[_EllipticCurve]: ... +def get_elliptic_curve(name: str) -> _EllipticCurve: ... + +class X509Name: + def __init__(self, name: X509Name) -> None: ... + countryName: Union[str, unicode] + stateOrProvinceName: Union[str, unicode] + localityName: Union[str, unicode] + organizationName: Union[str, unicode] + organizationalUnitName: Union[str, unicode] + commonName: Union[str, unicode] + emailAddress: Union[str, unicode] + C: Union[str, unicode] + ST: Union[str, unicode] + L: Union[str, unicode] + O: Union[str, unicode] + OU: Union[str, unicode] + CN: Union[str, unicode] + def hash(self) -> int: ... + def der(self) -> bytes: ... + def get_components(self) -> List[Tuple[str, str]]: ... + +class X509Extension: + def __init__(self, type_name: bytes, critical: bool, value: bytes, subject: Optional[X509] = ..., + issuer: Optional[X509] = ...) -> None: ... + def get_critical(self) -> bool: ... + def get_short_name(self) -> str: ... + def get_data(self) -> str: ... + +class X509Req: + def __init__(self) -> None: ... + def set_pubkey(self, pkey: PKey) -> None: ... + def get_pubkey(self) -> PKey: ... + def set_version(self, version: int) -> None: ... + def get_version(self) -> int: ... + def get_subject(self) -> X509Name: ... + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ... + def get_extensions(self) -> List[X509Extension]: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def verify(self, pkey: PKey) -> bool: ... + +class X509: + def __init__(self) -> None: ... + def set_version(self, version: int) -> None: ... + def get_version(self) -> int: ... + def get_pubkey(self) -> PKey: ... + def set_pubkey(self, pkey: PKey) -> None: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def get_signature_algorithm(self) -> str: ... + def digest(self, digest_name: str) -> str: ... + def subject_name_hash(self) -> str: ... + def set_serial_number(self, serial: int) -> None: ... + def get_serial_number(self) -> int: ... + def gmtime_adj_notAfter(self, amount: int) -> None: ... + def gmtime_adj_notBefore(self, amount: int) -> None: ... + def has_expired(self) -> bool: ... + def get_notBefore(self) -> str: ... + def set_notBefore(self, when: str) -> None: ... + def get_notAfter(self) -> str: ... + def set_notAfter(self, when: str) -> None: ... + def get_issuer(self) -> X509Name: ... + def set_issuer(self, issuer: X509Name) -> None: ... + def get_subject(self) -> X509Name: ... + def set_subject(self, subject: X509Name) -> None: ... + def get_extension_count(self) -> int: ... + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: ... + def get_extension(self, index: int) -> X509Extension: ... + +class X509StoreFlags: + CRL_CHECK: int + CRL_CHECK_ALL: int + IGNORE_CRITICAL: int + X509_STRICT: int + ALLOW_PROXY_CERTS: int + POLICY_CHECK: int + EXPLICIT_POLICY: int + INHIBIT_MAP: int + NOTIFY_POLICY: int + CHECK_SS_SIGNATURE: int + CB_ISSUER_CHECK: int + +class X509Store: + def __init__(self) -> None: ... + def add_cert(self, cert: X509) -> None: ... + def add_crl(self, crl: CRL) -> None: ... + def set_flags(self, flags: int) -> None: ... + def set_time(self, vfy_time: datetime) -> None: ... + +class X509StoreContextError(Exception): + certificate: X509 + def __init__(self, message: str, certificate: X509) -> None: ... + +class X509StoreContext: + def __init__(self, store: X509Store, certificate: X509) -> None: ... + def set_store(self, store: X509Store) -> None: ... + def verify_certificate(self) -> None: ... + +def load_certificate(type: int, buffer: Union[str, unicode]) -> X509: ... +def dump_certificate(type: int, cert: X509) -> bytes: ... +def dump_publickey(type: int, pkey: PKey) -> bytes: ... +def dump_privatekey(type: int, pkey: PKey, cipher: Optional[str] = ..., + passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> bytes: ... + +class Revoked: + def __init__(self) -> None: ... + def set_serial(self, hex_str: str) -> None: ... + def get_serial(self) -> str: ... + def set_reason(self, reason: str) -> None: ... + def get_reason(self) -> str: ... + def all_reasons(self) -> List[str]: ... + def set_rev_date(self, when: str) -> None: ... + def get_rev_date(self) -> str: ... + +class CRL: + def __init__(self) -> None: ... + def get_revoked(self) -> Tuple[Revoked, ...]: ... + def add_revoked(self, revoked: Revoked) -> None: ... + def get_issuer(self) -> X509Name: ... + def set_version(self, version: int) -> None: ... + def set_lastUpdate(self, when: str) -> None: ... + def set_nextUpdate(self, when: str) -> None: ... + def sign(self, issuer_cert: X509, issuer_key: PKey, digest: str) -> None: ... + def export(self, cert: X509, key: PKey, type: int = ..., days: int = ..., digest: str = ...) -> bytes: ... + +class PKCS7: + def type_is_signed(self) -> bool: ... + def type_is_enveloped(self) -> bool: ... + def type_is_signedAndEnveloped(self) -> bool: ... + def type_is_data(self) -> bool: ... + def get_type_name(self) -> str: ... + +class PKCS12: + def __init__(self) -> None: ... + def get_certificate(self) -> X509: ... + def set_certificate(self, cert: X509) -> None: ... + def get_privatekey(self) -> PKey: ... + def set_privatekey(self, pkey: PKey) -> None: ... + def get_ca_certificates(self) -> Tuple[X509, ...]: ... + def set_ca_certificates(self, cacerts: Iterable[X509]) -> None: ... + def set_friendlyname(self, name: bytes) -> None: ... + def get_friendlyname(self) -> bytes: ... + def export(self, passphrase: Optional[str] = ..., iter: int = ..., maciter: int = ...): ... + +class NetscapeSPKI: + def __init__(self) -> None: ... + def sign(self, pkey: PKey, digest: str) -> None: ... + def verify(self, key: PKey) -> bool: ... + def b64_encode(self) -> str: ... + def get_pubkey(self) -> PKey: ... + def set_pubkey(self, pkey: PKey) -> None: ... + +def load_publickey(type: int, buffer: Union[str, unicode]) -> PKey: ... +def load_privatekey(type: int, buffer: bytes, passphrase: Optional[Union[str, Callable[[int], int]]] = ...): ... +def dump_certificate_request(type: int, req: X509Req): ... +def load_certificate_request(type, buffer: Union[str, unicode]) -> X509Req: ... +def sign(pkey: PKey, data: Union[str, unicode], digest: str) -> bytes: ... +def verify(cert: X509, signature: bytes, data: Union[str, unicode], digest: str) -> None: ... +def dump_crl(type: int, crl: CRL) -> bytes: ... +def load_crl(type: int, buffer: Union[str, unicode]) -> CRL: ... +def load_pkcs7_data(type: int, buffer: Union[str, unicode]) -> PKCS7: ... +def load_pkcs12(buffer: Union[str, unicode], passphrase: Optional[Union[str, Callable[[int], int]]] = ...) -> PKCS12: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi new file mode 100644 index 0000000..4439dca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/__init__.pyi @@ -0,0 +1,3 @@ +from ._base import * # noqa: F403 +from .thread import * # noqa: F403 +from .process import * # noqa: F403 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi new file mode 100644 index 0000000..95189a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/_base.pyi @@ -0,0 +1,56 @@ +from typing import TypeVar, Generic, Any, Iterable, Iterator, Callable, Tuple, Optional, Set, NamedTuple +from types import TracebackType +import sys + +FIRST_COMPLETED: str +FIRST_EXCEPTION: str +ALL_COMPLETED: str +PENDING: Any +RUNNING: Any +CANCELLED: Any +CANCELLED_AND_NOTIFIED: Any +FINISHED: Any +LOGGER: Any + +class Error(Exception): ... +class CancelledError(Error): ... +class TimeoutError(Error): ... + +_T = TypeVar('_T') + +class Future(Generic[_T]): + def __init__(self) -> None: ... + def cancel(self) -> bool: ... + def cancelled(self) -> bool: ... + def running(self) -> bool: ... + def done(self) -> bool: ... + def add_done_callback(self, fn: Callable[[Future[_T]], Any]) -> None: ... + def result(self, timeout: Optional[float] = ...) -> _T: ... + def set_running_or_notify_cancel(self) -> bool: ... + def set_result(self, result: _T) -> None: ... + + if sys.version_info >= (3,): + def exception(self, timeout: Optional[float] = ...) -> Optional[BaseException]: ... + def set_exception(self, exception: Optional[BaseException]) -> None: ... + else: + def exception(self, timeout: Optional[float] = ...) -> Any: ... + def exception_info(self, timeout: Optional[float] = ...) -> Tuple[Any, Optional[TracebackType]]: ... + def set_exception(self, exception: Any) -> None: ... + def set_exception_info(self, exception: Any, traceback: Optional[TracebackType]) -> None: ... + + +class Executor: + def submit(self, fn: Callable[..., _T], *args: Any, **kwargs: Any) -> Future[_T]: ... + if sys.version_info >= (3, 5): + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ..., + chunksize: int = ...) -> Iterator[_T]: ... + else: + def map(self, func: Callable[..., _T], *iterables: Iterable[Any], timeout: Optional[float] = ...,) -> Iterator[_T]: ... + def shutdown(self, wait: bool = ...) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> bool: ... + +def as_completed(fs: Iterable[Future[_T]], timeout: Optional[float] = ...) -> Iterator[Future[_T]]: ... + +def wait(fs: Iterable[Future[_T]], timeout: Optional[float] = ..., return_when: str = ...) -> Tuple[Set[Future[_T]], + Set[Future[_T]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi new file mode 100644 index 0000000..ba0cd61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/process.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Future, Executor +import sys + +EXTRA_QUEUED_CALLS: Any + +if sys.version_info >= (3,): + class BrokenProcessPool(RuntimeError): ... + +if sys.version_info >= (3, 7): + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... +else: + class ProcessPoolExecutor(Executor): + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi new file mode 100644 index 0000000..983594d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/concurrent/futures/thread.pyi @@ -0,0 +1,15 @@ +from typing import Any, Callable, Optional, Tuple +from ._base import Executor, Future +import sys + +class ThreadPoolExecutor(Executor): + if sys.version_info >= (3, 7): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ..., + initializer: Optional[Callable[..., None]] = ..., + initargs: Tuple[Any, ...] = ...) -> None: ... + elif sys.version_info >= (3, 6) or sys.version_info < (3,): + def __init__(self, max_workers: Optional[int] = ..., + thread_name_prefix: str = ...) -> None: ... + else: + def __init__(self, max_workers: Optional[int] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi new file mode 100644 index 0000000..cfb0c73 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/dsa.pyi @@ -0,0 +1,4 @@ +# Minimal stub expressing only the classes required by OpenSSL.crypto. + +class DSAPrivateKey: ... +class DSAPublicKey: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi new file mode 100644 index 0000000..006e822 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/asymmetric/rsa.pyi @@ -0,0 +1,58 @@ +from cryptography.hazmat.primitives.serialization import Encoding, KeySerializationEncryption, PrivateFormat, PublicFormat +from typing import Tuple + +class RSAPrivateKey: + def signer(self, padding, algorithm): ... + def decrypt(self, ciphertext: bytes, padding) -> bytes: ... + def public_key(self) -> RSAPublicKey: ... + @property + def key_size(self) -> int: ... + def sign(self, data: bytes, padding, algorithm) -> bytes: ... + +class RSAPrivateKeyWithSerialization(RSAPrivateKey): + def private_numbers(self) -> RSAPrivateNumbers: ... + def private_bytes(self, encoding: Encoding, format: PrivateFormat, + encryption_algorithm: KeySerializationEncryption) -> bytes: ... + +class RSAPublicKey: + def verifier(self, signature: bytes, padding, algorithm): ... + def encrypt(self, plaintext: bytes, padding) -> bytes: ... + @property + def key_size(self) -> int: ... + def public_numbers(self) -> RSAPublicNumbers: ... + def public_bytes(self, encoding: Encoding, format: PublicFormat) -> bytes: ... + def verify(self, signature: bytes, data: bytes, padding, algorithm) -> None: ... + +RSAPublicKeyWithSerialization = RSAPublicKey + +def generate_private_key(public_exponent: int, key_size: int, backend) -> RSAPrivateKey: ... +def rsa_crt_iqmp(p: int, q: int) -> int: ... +def rsa_crt_dmp1(private_exponent: int, p: int) -> int: ... +def rsa_crt_dmq1(private_exponent: int, q: int) -> int: ... +def rsa_recover_prime_factors(n: int, e: int, d: int) -> Tuple[int, int]: ... + +class RSAPrivateNumbers: + def __init__(self, p: int, q: int, d: int, dmp1: int, dmq1: int, iqmp: int, public_numbers: RSAPublicNumbers) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + @property + def d(self) -> int: ... + @property + def dmp1(self) -> int: ... + @property + def dmq1(self) -> int: ... + @property + def iqmp(self) -> int: ... + @property + def public_numbers(self) -> RSAPublicNumbers: ... + def private_key(self, backend) -> RSAPrivateKey: ... + +class RSAPublicNumbers: + def __init__(self, e: int, n: int) -> None: ... + @property + def p(self) -> int: ... + @property + def q(self) -> int: ... + def public_key(self, backend) -> RSAPublicKey: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi new file mode 100644 index 0000000..bec4e89 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/cryptography/hazmat/primitives/serialization.pyi @@ -0,0 +1,33 @@ +from typing import Any, Optional +from enum import Enum + +def load_pem_private_key(data: bytes, password: Optional[bytes], backend): ... +def load_pem_public_key(data: bytes, backend): ... +def load_der_private_key(data: bytes, password: Optional[bytes], backend): ... +def load_der_public_key(data: bytes, backend): ... +def load_ssh_public_key(data: bytes, backend): ... + +class Encoding(Enum): + PEM: str + DER: str + OpenSSH: str + +class PrivateFormat(Enum): + PKCS8: str + TraditionalOpenSSL: str + +class PublicFormat(Enum): + SubjectPublicKeyInfo: str + PKCS1: str + OpenSSH: str + +class ParameterFormat(Enum): + PKCS3: str + +class KeySerializationEncryption: ... + +class BestAvailableEncryption(KeySerializationEncryption): + password: Any + def __init__(self, password) -> None: ... + +class NoEncryption(KeySerializationEncryption): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/enum.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/enum.pyi new file mode 100644 index 0000000..703c7cf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/enum.pyi @@ -0,0 +1,77 @@ +# NB: third_party/2/enum.pyi and stdlib/3.4/enum.pyi must remain consistent! +import sys +from typing import Any, Dict, Iterator, List, Mapping, Type, TypeVar, Union +from abc import ABCMeta + +_T = TypeVar('_T') +_S = TypeVar('_S', bound=Type[Enum]) + +# Note: EnumMeta actually subclasses type directly, not ABCMeta. +# This is a temporary workaround to allow multiple creation of enums with builtins +# such as str as mixins, which due to the handling of ABCs of builtin types, cause +# spurious inconsistent metaclass structure. See #1595. +# Structurally: Iterable[T], Reversible[T], Container[T] where T is the enum itself +class EnumMeta(ABCMeta): + def __iter__(self: Type[_T]) -> Iterator[_T]: ... + def __reversed__(self: Type[_T]) -> Iterator[_T]: ... + def __contains__(self: Type[_T], member: object) -> bool: ... + def __getitem__(self: Type[_T], name: str) -> _T: ... + @property + def __members__(self: Type[_T]) -> Mapping[str, _T]: ... + def __len__(self) -> int: ... + +class Enum(metaclass=EnumMeta): + name: str + value: Any + _name_: str + _value_: Any + _member_names_: List[str] # undocumented + _member_map_: Dict[str, Enum] # undocumented + _value2member_map_: Dict[int, Enum] # undocumented + if sys.version_info >= (3, 7): + _ignore_: Union[str, List[str]] + if sys.version_info >= (3, 6): + _order_: str + @classmethod + def _missing_(cls, value: object) -> Any: ... + @staticmethod + def _generate_next_value_(name: str, start: int, count: int, last_values: List[Any]) -> Any: ... + def __new__(cls: Type[_T], value: object) -> _T: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __dir__(self) -> List[str]: ... + def __format__(self, format_spec: str) -> str: ... + def __hash__(self) -> Any: ... + def __reduce_ex__(self, proto: object) -> Any: ... + +class IntEnum(int, Enum): + value: int + +def unique(enumeration: _S) -> _S: ... + +if sys.version_info >= (3, 6): + _auto_null: Any + + # subclassing IntFlag so it picks up all implemented base functions, best modeling behavior of enum.auto() + class auto(IntFlag): + value: Any + + class Flag(Enum): + def __contains__(self: _T, other: _T) -> bool: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... + def __bool__(self) -> bool: ... + def __or__(self: _T, other: _T) -> _T: ... + def __and__(self: _T, other: _T) -> _T: ... + def __xor__(self: _T, other: _T) -> _T: ... + def __invert__(self: _T) -> _T: ... + + # The `type: ignore` comment is needed because mypy considers the type + # signatures of several methods defined in int and Flag to be incompatible. + class IntFlag(int, Flag): # type: ignore + def __or__(self: _T, other: Union[int, _T]) -> _T: ... + def __and__(self: _T, other: Union[int, _T]) -> _T: ... + def __xor__(self: _T, other: Union[int, _T]) -> _T: ... + __ror__ = __or__ + __rand__ = __and__ + __rxor__ = __xor__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi new file mode 100644 index 0000000..ead5d24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/FacebookService.pyi @@ -0,0 +1,297 @@ +from typing import Any +from thrift.Thrift import TProcessor # type: ignore + +fastbinary: Any + +class Iface: + def getName(self): ... + def getVersion(self): ... + def getStatus(self): ... + def getStatusDetails(self): ... + def getCounters(self): ... + def getCounter(self, key): ... + def setOption(self, key, value): ... + def getOption(self, key): ... + def getOptions(self): ... + def getCpuProfile(self, profileDurationInSec): ... + def aliveSince(self): ... + def reinitialize(self): ... + def shutdown(self): ... + +class Client(Iface): + def __init__(self, iprot, oprot=...) -> None: ... + def getName(self): ... + def send_getName(self): ... + def recv_getName(self): ... + def getVersion(self): ... + def send_getVersion(self): ... + def recv_getVersion(self): ... + def getStatus(self): ... + def send_getStatus(self): ... + def recv_getStatus(self): ... + def getStatusDetails(self): ... + def send_getStatusDetails(self): ... + def recv_getStatusDetails(self): ... + def getCounters(self): ... + def send_getCounters(self): ... + def recv_getCounters(self): ... + def getCounter(self, key): ... + def send_getCounter(self, key): ... + def recv_getCounter(self): ... + def setOption(self, key, value): ... + def send_setOption(self, key, value): ... + def recv_setOption(self): ... + def getOption(self, key): ... + def send_getOption(self, key): ... + def recv_getOption(self): ... + def getOptions(self): ... + def send_getOptions(self): ... + def recv_getOptions(self): ... + def getCpuProfile(self, profileDurationInSec): ... + def send_getCpuProfile(self, profileDurationInSec): ... + def recv_getCpuProfile(self): ... + def aliveSince(self): ... + def send_aliveSince(self): ... + def recv_aliveSince(self): ... + def reinitialize(self): ... + def send_reinitialize(self): ... + def shutdown(self): ... + def send_shutdown(self): ... + +class Processor(Iface, TProcessor): + def __init__(self, handler) -> None: ... + def process(self, iprot, oprot): ... + def process_getName(self, seqid, iprot, oprot): ... + def process_getVersion(self, seqid, iprot, oprot): ... + def process_getStatus(self, seqid, iprot, oprot): ... + def process_getStatusDetails(self, seqid, iprot, oprot): ... + def process_getCounters(self, seqid, iprot, oprot): ... + def process_getCounter(self, seqid, iprot, oprot): ... + def process_setOption(self, seqid, iprot, oprot): ... + def process_getOption(self, seqid, iprot, oprot): ... + def process_getOptions(self, seqid, iprot, oprot): ... + def process_getCpuProfile(self, seqid, iprot, oprot): ... + def process_aliveSince(self, seqid, iprot, oprot): ... + def process_reinitialize(self, seqid, iprot, oprot): ... + def process_shutdown(self, seqid, iprot, oprot): ... + +class getName_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getName_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getVersion_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getVersion_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatus_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatus_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatusDetails_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getStatusDetails_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounters_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounters_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounter_args: + thrift_spec: Any + key: Any + def __init__(self, key=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCounter_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class setOption_args: + thrift_spec: Any + key: Any + value: Any + def __init__(self, key=..., value=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class setOption_result: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOption_args: + thrift_spec: Any + key: Any + def __init__(self, key=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOption_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOptions_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getOptions_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCpuProfile_args: + thrift_spec: Any + profileDurationInSec: Any + def __init__(self, profileDurationInSec=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class getCpuProfile_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class aliveSince_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class aliveSince_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class reinitialize_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class shutdown_args: + thrift_spec: Any + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/fb303/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/gflags.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/gflags.pyi new file mode 100644 index 0000000..87edd4e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/gflags.pyi @@ -0,0 +1,242 @@ +from typing import Any, Callable, Dict, Iterable, IO, List, Optional, Sequence, Union +from types import ModuleType + +class Error(Exception): ... +FlagsError = Error + +class DuplicateFlag(FlagsError): ... + +class CantOpenFlagFileError(FlagsError): ... + +class DuplicateFlagCannotPropagateNoneToSwig(DuplicateFlag): ... + +class DuplicateFlagError(DuplicateFlag): + def __init__(self, flagname: str, flag_values: FlagValues, other_flag_values: FlagValues = ...) -> None: ... + +class IllegalFlagValueError(FlagsError): ... +IllegalFlagValue = IllegalFlagValueError + +class UnrecognizedFlag(FlagsError): ... + +class UnrecognizedFlagError(UnrecognizedFlag): + def __init__(self, flagname: str, flagvalue: str = ...) -> None: ... + +def get_help_width() -> int: ... +GetHelpWidth = get_help_width +def CutCommonSpacePrefix(text) -> str: ... +def text_wrap(text: str, length: int = ..., indent: str = ..., firstline_indent: str = ..., tabs: str = ...) -> str: ... +TextWrap = text_wrap +def doc_to_help(doc: str) -> str: ... +DocToHelp = doc_to_help + +class FlagValues: + def __init__(self) -> None: ... + def UseGnuGetOpt(self, use_gnu_getopt: bool = ...) -> None: ... + def is_gnu_getopt(self) -> bool: ... + IsGnuGetOpt = is_gnu_getopt + # TODO dict type + def FlagDict(self) -> dict: ... + def flags_by_module_dict(self) -> Dict[str, List[Flag]]: ... + FlagsByModuleDict = flags_by_module_dict + def flags_by_module_id_dict(self) -> Dict[int, List[Flag]]: ... + FlagsByModuleIdDict = flags_by_module_id_dict + def key_flags_by_module_dict(self) -> Dict[str, List[Flag]]: ... + KeyFlagsByModuleDict = key_flags_by_module_dict + def find_module_defining_flag(self, flagname: str, default: str = ...) -> str: ... + FindModuleDefiningFlag = find_module_defining_flag + def find_module_id_defining_flag(self, flagname: str, default: int = ...) -> int: ... + FindModuleIdDefiningFlag = find_module_id_defining_flag + def append_flag_values(self, flag_values: FlagValues) -> None: ... + AppendFlagValues = append_flag_values + def remove_flag_values(self, flag_values: FlagValues) -> None: ... + RemoveFlagValues = remove_flag_values + def __setitem__(self, name: str, flag: Flag) -> None: ... + def __getitem__(self, name: str) -> Flag: ... + def __getattr__(self, name: str) -> Any: ... + def __setattr__(self, name: str, value: Any): ... + def __delattr__(self, flag_name: str) -> None: ... + def set_default(self, name: str, value: Any) -> None: ... + SetDefault = set_default + def __contains__(self, name: str) -> bool: ... + has_key = __contains__ + def __iter__(self) -> Iterable[str]: ... + def __call__(self, argv: List[str], known_only: bool = ...) -> List[str]: ... + def reset(self) -> None: ... + Reset = reset + def RegisteredFlags(self) -> List[str]: ... + def flag_values_dict(self) -> Dict[str, Any]: ... + FlagValuesDict = flag_values_dict + def __str__(self) -> str: ... + def GetHelp(self, prefix: str = ...) -> str: ... + def module_help(self, module: Union[ModuleType, str]) -> str: ... + ModuleHelp = module_help + def main_module_help(self) -> str: ... + MainModuleHelp = main_module_help + def get(self, name: str, default: Any) -> Any: ... + def ShortestUniquePrefixes(self, fl: Dict[str, Flag]) -> Dict[str, str]: ... + def ExtractFilename(self, flagfile_str: str) -> str: ... + def read_flags_from_files(self, argv: List[str], force_gnu: bool = ...) -> List[str]: ... + ReadFlagsFromFiles = read_flags_from_files + def flags_into_string(self) -> str: ... + FlagsIntoString = flags_into_string + def append_flags_into_file(self, filename: str) -> None: ... + AppendFlagsIntoFile = append_flags_into_file + def write_help_in_xml_format(self, outfile: IO[str] = ...) -> None: ... + WriteHelpInXMLFormat = write_help_in_xml_format + # TODO validator: gflags_validators.Validator + def AddValidator(self, validator: Any) -> None: ... + +FLAGS: FlagValues + +class Flag: + name: str + default: Any + default_as_str: str + value: Any + help: str + short_name: str + boolean = False + present = False + parser: ArgumentParser + serializer: ArgumentSerializer + allow_override = False + + def __init__(self, parser: ArgumentParser, serializer: ArgumentSerializer, name: str, + default: Optional[str], help_string: str, short_name: str = ..., boolean: bool = ..., + allow_override: bool = ...) -> None: ... + def Parse(self, argument: Any) -> Any: ... + def Unparse(self) -> None: ... + def Serialize(self) -> str: ... + def SetDefault(self, value: Any) -> None: ... + def Type(self) -> str: ... + def WriteInfoInXMLFormat(self, outfile: IO[str], module_name: str, is_key: bool = ..., indent: str = ...) -> None: ... + +class ArgumentParser(object): + syntactic_help: str + # TODO what is this + def parse(self, argument: Any) -> Any: ... + Parser = parse + def flag_type(self) -> str: ... + Type = flag_type + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str) -> None: ... + +class ArgumentSerializer: + def Serialize(self, value: Any) -> unicode: ... + +class ListSerializer(ArgumentSerializer): + def __init__(self, list_sep: str) -> None: ... + def Serialize(self, value: List[Any]) -> str: ... + +def register_validator(flag_name: str, + checker: Callable[[Any], bool], + message: str = ..., + flag_values: FlagValues = ...) -> None: ... +RegisterValidator = register_validator +def mark_flag_as_required(flag_name: str, flag_values: FlagValues = ...) -> None: ... +MarkFlagAsRequired = mark_flag_as_required + +def DEFINE(parser: ArgumentParser, name: str, default: Any, help: str, + flag_values: FlagValues = ..., serializer: ArgumentSerializer = ..., **args: Any) -> None: ... +def DEFINE_flag(flag: Flag, flag_values: FlagValues = ...) -> None: ... +def declare_key_flag(flag_name: str, flag_values: FlagValues = ...) -> None: ... +DECLARE_key_flag = declare_key_flag +def adopt_module_key_flags(module: ModuleType, flag_values: FlagValues = ...) -> None: ... +ADOPT_module_key_flags = adopt_module_key_flags +def DEFINE_string(name: str, default: Optional[str], help: str, flag_values: FlagValues = ..., **args: Any): ... + +class BooleanParser(ArgumentParser): + def Convert(self, argument: Any) -> bool: ... + def Parse(self, argument: Any) -> bool: ... + +class BooleanFlag(Flag): + def __init__(self, name: str, default: Optional[bool], help: str, short_name=..., **args: Any) -> None: ... + +def DEFINE_boolean(name: str, default: Optional[bool], help: str, flag_values: FlagValues = ..., **args: Any) -> None: ... + +DEFINE_bool = DEFINE_boolean + +class HelpFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class HelpXMLFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class HelpshortFlag(BooleanFlag): + def __init__(self) -> None: ... + def Parse(self, arg: Any) -> None: ... + +class NumericParser(ArgumentParser): + def IsOutsideBounds(self, val: float) -> bool: ... + def Parse(self, argument: Any) -> float: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str) -> None: ... + def Convert(self, argument: Any) -> Any: ... + +class FloatParser(NumericParser): + number_article: str + number_name: str + syntactic_help: str + def __init__(self, lower_bound: float = ..., upper_bound: float = ...) -> None: ... + def Convert(self, argument: Any) -> float: ... + +def DEFINE_float(name: str, default: Optional[float], help: str, lower_bound: float = ..., + upper_bound: float = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... + +class IntegerParser(NumericParser): + number_article: str + number_name: str + syntactic_help: str + def __init__(self, lower_bound: int = ..., upper_bound: int = ...) -> None: ... + def Convert(self, argument: Any) -> int: ... + +def DEFINE_integer(name: str, default: Optional[int], help: str, lower_bound: int = ..., + upper_bound: int = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... + +class EnumParser(ArgumentParser): + def __init__(self, enum_values: List[str]) -> None: ... + def Parse(self, argument: Any) -> Any: ... + +class EnumFlag(Flag): + def __init__(self, name: str, default: Optional[str], help: str, enum_values: List[str], + short_name: str, **args: Any) -> None: ... + +def DEFINE_enum(name: str, default: Optional[str], enum_values: List[str], help: str, + flag_values: FlagValues = ..., **args: Any) -> None: ... + +class BaseListParser(ArgumentParser): + def __init__(self, token: str = ..., name: str = ...) -> None: ... + def Parse(self, argument: Any) -> list: ... + +class ListParser(BaseListParser): + def __init__(self) -> None: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str): ... + +class WhitespaceSeparatedListParser(BaseListParser): + def __init__(self) -> None: ... + def WriteCustomInfoInXMLFormat(self, outfile: IO[str], indent: str): ... + +def DEFINE_list(name: str, default: Optional[List[str]], help: str, flag_values: FlagValues = ..., **args: Any) -> None: ... +def DEFINE_spaceseplist(name: str, default: Optional[List[str]], help: str, flag_values: FlagValues = ..., + **args: Any) -> None: ... + +class MultiFlag(Flag): + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + def Parse(self, arguments: Any) -> None: ... + def Serialize(self) -> str: ... + +def DEFINE_multi_string(name: str, default: Optional[Union[str, List[str]]], help: str, + flag_values: FlagValues = ..., **args: Any) -> None: ... +DEFINE_multistring = DEFINE_multi_string + +def DEFINE_multi_integer(name: str, default: Optional[Union[int, List[int]]], help: str, lower_bound: int = ..., + upper_bound: int = ..., flag_values: FlagValues = ..., **args: Any) -> None: ... +DEFINE_multi_int = DEFINE_multi_integer + +def DEFINE_multi_float(name: str, default: Optional[Union[float, List[float]]], help: str, + lower_bound: float = ..., upper_bound: float = ..., + flag_values: FlagValues = ..., **args: Any) -> None: ... + +def DEFINE_multi_enum(name: str, default: Optional[Union[Sequence[str], str]], + enum_values: Sequence[str], help: str, + flag_values: FlagValues = ..., case_sensitive: bool = ..., **args: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi new file mode 100644 index 0000000..0d3fc00 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/client.pyi @@ -0,0 +1,97 @@ +from typing import Any + +string_types: Any +bytes_types: Any +LOST_STATES: Any +ENVI_VERSION: Any +ENVI_VERSION_KEY: Any +log: Any + +class KazooClient: + logger: Any + handler: Any + auth_data: Any + default_acl: Any + randomize_hosts: Any + hosts: Any + chroot: Any + state: Any + state_listeners: Any + read_only: Any + retry: Any + Barrier: Any + Counter: Any + DoubleBarrier: Any + ChildrenWatch: Any + DataWatch: Any + Election: Any + NonBlockingLease: Any + MultiNonBlockingLease: Any + Lock: Any + Party: Any + Queue: Any + LockingQueue: Any + SetPartitioner: Any + Semaphore: Any + ShallowParty: Any + def __init__(self, hosts=..., timeout=..., client_id=..., handler=..., default_acl=..., auth_data=..., read_only=..., + randomize_hosts=..., connection_retry=..., command_retry=..., logger=..., **kwargs) -> None: ... + @property + def client_state(self): ... + @property + def client_id(self): ... + @property + def connected(self): ... + def set_hosts(self, hosts, randomize_hosts=...): ... + def add_listener(self, listener): ... + def remove_listener(self, listener): ... + def start(self, timeout=...): ... + def start_async(self): ... + def stop(self): ... + def restart(self): ... + def close(self): ... + def command(self, cmd=...): ... + def server_version(self, retries=...): ... + def add_auth(self, scheme, credential): ... + def add_auth_async(self, scheme, credential): ... + def unchroot(self, path): ... + def sync_async(self, path): ... + def sync(self, path): ... + def create(self, path, value=..., acl=..., ephemeral=..., sequence=..., makepath=...): ... + def create_async(self, path, value=..., acl=..., ephemeral=..., sequence=..., makepath=...): ... + def ensure_path(self, path, acl=...): ... + def ensure_path_async(self, path, acl=...): ... + def exists(self, path, watch=...): ... + def exists_async(self, path, watch=...): ... + def get(self, path, watch=...): ... + def get_async(self, path, watch=...): ... + def get_children(self, path, watch=..., include_data=...): ... + def get_children_async(self, path, watch=..., include_data=...): ... + def get_acls(self, path): ... + def get_acls_async(self, path): ... + def set_acls(self, path, acls, version=...): ... + def set_acls_async(self, path, acls, version=...): ... + def set(self, path, value, version=...): ... + def set_async(self, path, value, version=...): ... + def transaction(self): ... + def delete(self, path, version=..., recursive=...): ... + def delete_async(self, path, version=...): ... + def reconfig(self, joining, leaving, new_members, from_config=...): ... + def reconfig_async(self, joining, leaving, new_members, from_config): ... + +class TransactionRequest: + client: Any + operations: Any + committed: Any + def __init__(self, client) -> None: ... + def create(self, path, value=..., acl=..., ephemeral=..., sequence=...): ... + def delete(self, path, version=...): ... + def set_data(self, path, value, version=...): ... + def check(self, path, version): ... + def commit_async(self): ... + def commit(self): ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, exc_tb): ... + +class KazooState: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi new file mode 100644 index 0000000..4dd76cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/exceptions.pyi @@ -0,0 +1,58 @@ +from typing import Any + +class KazooException(Exception): ... +class ZookeeperError(KazooException): ... +class CancelledError(KazooException): ... +class ConfigurationError(KazooException): ... +class ZookeeperStoppedError(KazooException): ... +class ConnectionDropped(KazooException): ... +class LockTimeout(KazooException): ... +class WriterNotClosedException(KazooException): ... + +EXCEPTIONS: Any + +class RolledBackError(ZookeeperError): ... +class SystemZookeeperError(ZookeeperError): ... +class RuntimeInconsistency(ZookeeperError): ... +class DataInconsistency(ZookeeperError): ... +class ConnectionLoss(ZookeeperError): ... +class MarshallingError(ZookeeperError): ... +class UnimplementedError(ZookeeperError): ... +class OperationTimeoutError(ZookeeperError): ... +class BadArgumentsError(ZookeeperError): ... +class NewConfigNoQuorumError(ZookeeperError): ... +class ReconfigInProcessError(ZookeeperError): ... +class APIError(ZookeeperError): ... +class NoNodeError(ZookeeperError): ... +class NoAuthError(ZookeeperError): ... +class BadVersionError(ZookeeperError): ... +class NoChildrenForEphemeralsError(ZookeeperError): ... +class NodeExistsError(ZookeeperError): ... +class NotEmptyError(ZookeeperError): ... +class SessionExpiredError(ZookeeperError): ... +class InvalidCallbackError(ZookeeperError): ... +class InvalidACLError(ZookeeperError): ... +class AuthFailedError(ZookeeperError): ... +class SessionMovedError(ZookeeperError): ... +class NotReadOnlyCallError(ZookeeperError): ... +class ConnectionClosedError(SessionExpiredError): ... + +ConnectionLossException: Any +MarshallingErrorException: Any +SystemErrorException: Any +RuntimeInconsistencyException: Any +DataInconsistencyException: Any +UnimplementedException: Any +OperationTimeoutException: Any +BadArgumentsException: Any +ApiErrorException: Any +NoNodeException: Any +NoAuthException: Any +BadVersionException: Any +NoChildrenForEphemeralsException: Any +NodeExistsException: Any +InvalidACLException: Any +AuthFailedException: Any +NotEmptyException: Any +SessionExpiredException: Any +InvalidCallbackException: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi new file mode 100644 index 0000000..111a48c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/kazoo/recipe/watchers.pyi @@ -0,0 +1,21 @@ +from typing import Any + +log: Any + +class DataWatch: + def __init__(self, client, path, func=..., *args, **kwargs) -> None: ... + def __call__(self, func): ... + +class ChildrenWatch: + def __init__(self, client, path, func=..., allow_session_lost=..., send_event=...) -> None: ... + def __call__(self, func): ... + +class PatientChildrenWatch: + client: Any + path: Any + children: Any + time_boundary: Any + children_changed: Any + def __init__(self, client, path, time_boundary=...) -> None: ... + asy: Any + def start(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pathlib2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pathlib2.pyi new file mode 100644 index 0000000..42968fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pathlib2.pyi @@ -0,0 +1,122 @@ +from typing import Any, Generator, IO, Optional, Sequence, Tuple, Type, TypeVar, Union, List +from types import TracebackType +import os +import sys + +_P = TypeVar('_P', bound='PurePath') + +if sys.version_info >= (3, 6): + _PurePathBase = os.PathLike[str] +else: + _PurePathBase = object + +class PurePath(_PurePathBase): + parts: Tuple[str, ...] + drive: str + root: str + anchor: str + name: str + suffix: str + suffixes: List[str] + stem: str + if sys.version_info < (3, 5): + def __init__(self, *pathsegments: str) -> None: ... + elif sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath]) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]]) -> _P: ... + def __hash__(self) -> int: ... + def __lt__(self, other: PurePath) -> bool: ... + def __le__(self, other: PurePath) -> bool: ... + def __gt__(self, other: PurePath) -> bool: ... + def __ge__(self, other: PurePath) -> bool: ... + def __truediv__(self: _P, key: Union[str, PurePath]) -> _P: ... + if sys.version_info < (3,): + def __div__(self: _P, key: Union[str, PurePath]) -> _P: ... + def __bytes__(self) -> bytes: ... + def as_posix(self) -> str: ... + def as_uri(self) -> str: ... + def is_absolute(self) -> bool: ... + def is_reserved(self) -> bool: ... + def match(self, path_pattern: str) -> bool: ... + def relative_to(self: _P, *other: Union[str, PurePath]) -> _P: ... + def with_name(self: _P, name: str) -> _P: ... + def with_suffix(self: _P, suffix: str) -> _P: ... + def joinpath(self: _P, *other: Union[str, PurePath]) -> _P: ... + + @property + def parents(self: _P) -> Sequence[_P]: ... + @property + def parent(self: _P) -> _P: ... + +class PurePosixPath(PurePath): ... +class PureWindowsPath(PurePath): ... + +class Path(PurePath): + def __enter__(self) -> Path: ... + def __exit__(self, exc_type: Optional[Type[BaseException]], + exc_value: Optional[BaseException], + traceback: Optional[TracebackType]) -> Optional[bool]: ... + @classmethod + def cwd(cls: Type[_P]) -> _P: ... + def stat(self) -> os.stat_result: ... + def chmod(self, mode: int) -> None: ... + def exists(self) -> bool: ... + def glob(self, pattern: str) -> Generator[Path, None, None]: ... + def group(self) -> str: ... + def is_dir(self) -> bool: ... + def is_file(self) -> bool: ... + def is_symlink(self) -> bool: ... + def is_socket(self) -> bool: ... + def is_fifo(self) -> bool: ... + def is_block_device(self) -> bool: ... + def is_char_device(self) -> bool: ... + def iterdir(self) -> Generator[Path, None, None]: ... + def lchmod(self, mode: int) -> None: ... + def lstat(self) -> os.stat_result: ... + if sys.version_info < (3, 5): + def mkdir(self, mode: int = ..., + parents: bool = ...) -> None: ... + else: + def mkdir(self, mode: int = ..., parents: bool = ..., + exist_ok: bool = ...) -> None: ... + def open(self, mode: str = ..., buffering: int = ..., + encoding: Optional[str] = ..., errors: Optional[str] = ..., + newline: Optional[str] = ...) -> IO[Any]: ... + def owner(self) -> str: ... + def rename(self, target: Union[str, PurePath]) -> None: ... + def replace(self, target: Union[str, PurePath]) -> None: ... + if sys.version_info < (3, 6): + def resolve(self: _P) -> _P: ... + else: + def resolve(self: _P, strict: bool = ...) -> _P: ... + def rglob(self, pattern: str) -> Generator[Path, None, None]: ... + def rmdir(self) -> None: ... + def symlink_to(self, target: Union[str, Path], + target_is_directory: bool = ...) -> None: ... + def touch(self, mode: int = ..., exist_ok: bool = ...) -> None: ... + def unlink(self) -> None: ... + + if sys.version_info >= (3, 5): + @classmethod + def home(cls: Type[_P]) -> _P: ... + if sys.version_info < (3, 6): + def __new__(cls: Type[_P], *args: Union[str, PurePath], + **kwargs: Any) -> _P: ... + else: + def __new__(cls: Type[_P], *args: Union[str, os.PathLike[str]], + **kwargs: Any) -> _P: ... + + def absolute(self: _P) -> _P: ... + def expanduser(self: _P) -> _P: ... + def read_bytes(self) -> bytes: ... + def read_text(self, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> str: ... + def samefile(self, other_path: Union[str, bytes, int, Path]) -> bool: ... + def write_bytes(self, data: bytes) -> int: ... + def write_text(self, data: str, encoding: Optional[str] = ..., + errors: Optional[str] = ...) -> int: ... + + +class PosixPath(Path, PurePosixPath): ... +class WindowsPath(Path, PureWindowsPath): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pymssql.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pymssql.pyi new file mode 100644 index 0000000..8e08ee3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/pymssql.pyi @@ -0,0 +1,48 @@ +from datetime import datetime, date, time + +from typing import Any, Dict, Tuple, Iterable, List, Optional, Union, Sequence + +Scalar = Union[int, float, str, datetime, date, time] +Result = Union[Tuple[Scalar, ...], Dict[str, Scalar]] + +class Connection(object): + def __init__(self, user, password, host, database, timeout, + login_timeout, charset, as_dict) -> None: ... + def autocommit(self, status: bool) -> None: ... + def close(self) -> None: ... + def commit(self) -> None: ... + def cursor(self) -> Cursor: ... + def rollback(self) -> None: ... + +class Cursor(object): + def __init__(self) -> None: ... + def __iter__(self): ... + def __next__(self) -> Any: ... + def callproc(self, procname: str, **kwargs) -> None: ... + def close(self) -> None: ... + def execute(self, stmt: str, + params: Optional[Union[Scalar, Tuple[Scalar, ...], + Dict[str, Scalar]]]) -> None: ... + def executemany(self, stmt: str, + params: Optional[Sequence[Tuple[Scalar, ...]]]) -> None: ... + def fetchall(self) -> List[Result]: ... + def fetchmany(self, size: Optional[int]) -> List[Result]: ... + def fetchone(self) -> Result: ... + +def connect(server: Optional[str], + user: Optional[str], + password: Optional[str], + database: Optional[str], + timeout: Optional[int], + login_timeout: Optional[int], + charset: Optional[str], + as_dict: Optional[bool], + host: Optional[str], + appname: Optional[str], + port: Optional[str], + + conn_properties: Optional[Union[str, Sequence[str]]], + autocommit: Optional[bool], + tds_version: Optional[str]) -> Connection: ... +def get_max_connections() -> int: ... +def set_max_connections(n: int) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi new file mode 100644 index 0000000..333de49 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/__init__.pyi @@ -0,0 +1,24 @@ +from . import client +from . import connection +from . import utils +from . import exceptions + +Redis = client.Redis +StrictRedis = client.StrictRedis +BlockingConnectionPool = connection.BlockingConnectionPool +ConnectionPool = connection.ConnectionPool +Connection = connection.Connection +SSLConnection = connection.SSLConnection +UnixDomainSocketConnection = connection.UnixDomainSocketConnection +from_url = utils.from_url +AuthenticationError = exceptions.AuthenticationError +BusyLoadingError = exceptions.BusyLoadingError +ConnectionError = exceptions.ConnectionError +DataError = exceptions.DataError +InvalidResponse = exceptions.InvalidResponse +PubSubError = exceptions.PubSubError +ReadOnlyError = exceptions.ReadOnlyError +RedisError = exceptions.RedisError +ResponseError = exceptions.ResponseError +TimeoutError = exceptions.TimeoutError +WatchError = exceptions.WatchError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/client.pyi new file mode 100644 index 0000000..f416761 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/client.pyi @@ -0,0 +1,292 @@ +from typing import Any + +SYM_EMPTY: Any + +def list_or_args(keys, args): ... +def timestamp_to_datetime(response): ... +def string_keys_to_dict(key_string, callback): ... +def dict_merge(*dicts): ... +def parse_debug_object(response): ... +def parse_object(response, infotype): ... +def parse_info(response): ... + +SENTINEL_STATE_TYPES: Any + +def parse_sentinel_state(item): ... +def parse_sentinel_master(response): ... +def parse_sentinel_masters(response): ... +def parse_sentinel_slaves_and_sentinels(response): ... +def parse_sentinel_get_master(response): ... +def pairs_to_dict(response): ... +def pairs_to_dict_typed(response, type_info): ... +def zset_score_pairs(response, **options): ... +def sort_return_tuples(response, **options): ... +def int_or_none(response): ... +def float_or_none(response): ... +def bool_ok(response): ... +def parse_client_list(response, **options): ... +def parse_config_get(response, **options): ... +def parse_scan(response, **options): ... +def parse_hscan(response, **options): ... +def parse_zscan(response, **options): ... +def parse_slowlog_get(response, **options): ... + +class StrictRedis: + RESPONSE_CALLBACKS: Any + @classmethod + def from_url(cls, url, db=..., **kwargs): ... + connection_pool: Any + response_callbacks: Any + def __init__(self, host=..., port=..., db=..., password=..., socket_timeout=..., socket_connect_timeout=..., + socket_keepalive=..., socket_keepalive_options=..., connection_pool=..., unix_socket_path=..., encoding=..., + encoding_errors=..., charset=..., errors=..., decode_responses=..., retry_on_timeout=..., ssl=..., + ssl_keyfile=..., ssl_certfile=..., ssl_cert_reqs=..., ssl_ca_certs=...) -> None: ... + def set_response_callback(self, command, callback): ... + def pipeline(self, transaction=..., shard_hint=...): ... + def transaction(self, func, *watches, **kwargs): ... + def lock(self, name, timeout=..., sleep=..., blocking_timeout=..., lock_class=..., thread_local=...): ... + def pubsub(self, **kwargs): ... + def execute_command(self, *args, **options): ... + def parse_response(self, connection, command_name, **options): ... + def bgrewriteaof(self): ... + def bgsave(self): ... + def client_kill(self, address): ... + def client_list(self): ... + def client_getname(self): ... + def client_setname(self, name): ... + def config_get(self, pattern=...): ... + def config_set(self, name, value): ... + def config_resetstat(self): ... + def config_rewrite(self): ... + def dbsize(self): ... + def debug_object(self, key): ... + def echo(self, value): ... + def flushall(self): ... + def flushdb(self): ... + def info(self, section=...): ... + def lastsave(self): ... + def object(self, infotype, key): ... + def ping(self): ... + def save(self): ... + def sentinel(self, *args): ... + def sentinel_get_master_addr_by_name(self, service_name): ... + def sentinel_master(self, service_name): ... + def sentinel_masters(self): ... + def sentinel_monitor(self, name, ip, port, quorum): ... + def sentinel_remove(self, name): ... + def sentinel_sentinels(self, service_name): ... + def sentinel_set(self, name, option, value): ... + def sentinel_slaves(self, service_name): ... + def shutdown(self): ... + def slaveof(self, host=..., port=...): ... + def slowlog_get(self, num=...): ... + def slowlog_len(self): ... + def slowlog_reset(self): ... + def time(self): ... + def append(self, key, value): ... + def bitcount(self, key, start=..., end=...): ... + def bitop(self, operation, dest, *keys): ... + def bitpos(self, key, bit, start=..., end=...): ... + def decr(self, name, amount=...): ... + def delete(self, *names): ... + def __delitem__(self, name): ... + def dump(self, name): ... + def exists(self, name): ... + __contains__: Any + def expire(self, name, time): ... + def expireat(self, name, when): ... + def get(self, name): ... + def __getitem__(self, name): ... + def getbit(self, name, offset): ... + def getrange(self, key, start, end): ... + def getset(self, name, value): ... + def incr(self, name, amount=...): ... + def incrby(self, name, amount=...): ... + def incrbyfloat(self, name, amount=...): ... + def keys(self, pattern=...): ... + def mget(self, keys, *args): ... + def mset(self, *args, **kwargs): ... + def msetnx(self, *args, **kwargs): ... + def move(self, name, db): ... + def persist(self, name): ... + def pexpire(self, name, time): ... + def pexpireat(self, name, when): ... + def psetex(self, name, time_ms, value): ... + def pttl(self, name): ... + def randomkey(self): ... + def rename(self, src, dst): ... + def renamenx(self, src, dst): ... + def restore(self, name, ttl, value): ... + def set(self, name, value, ex=..., px=..., nx=..., xx=...): ... + def __setitem__(self, name, value): ... + def setbit(self, name, offset, value): ... + def setex(self, name, time, value): ... + def setnx(self, name, value): ... + def setrange(self, name, offset, value): ... + def strlen(self, name): ... + def substr(self, name, start, end=...): ... + def ttl(self, name): ... + def type(self, name): ... + def watch(self, *names): ... + def unwatch(self): ... + def blpop(self, keys, timeout=...): ... + def brpop(self, keys, timeout=...): ... + def brpoplpush(self, src, dst, timeout=...): ... + def lindex(self, name, index): ... + def linsert(self, name, where, refvalue, value): ... + def llen(self, name): ... + def lpop(self, name): ... + def lpush(self, name, *values): ... + def lpushx(self, name, value): ... + def lrange(self, name, start, end): ... + def lrem(self, name, count, value): ... + def lset(self, name, index, value): ... + def ltrim(self, name, start, end): ... + def rpop(self, name): ... + def rpoplpush(self, src, dst): ... + def rpush(self, name, *values): ... + def rpushx(self, name, value): ... + def sort(self, name, start=..., num=..., by=..., get=..., desc=..., alpha=..., store=..., groups=...): ... + def scan(self, cursor=..., match=..., count=...): ... + def scan_iter(self, match=..., count=...): ... + def sscan(self, name, cursor=..., match=..., count=...): ... + def sscan_iter(self, name, match=..., count=...): ... + def hscan(self, name, cursor=..., match=..., count=...): ... + def hscan_iter(self, name, match=..., count=...): ... + def zscan(self, name, cursor=..., match=..., count=..., score_cast_func=...): ... + def zscan_iter(self, name, match=..., count=..., score_cast_func=...): ... + def sadd(self, name, *values): ... + def scard(self, name): ... + def sdiff(self, keys, *args): ... + def sdiffstore(self, dest, keys, *args): ... + def sinter(self, keys, *args): ... + def sinterstore(self, dest, keys, *args): ... + def sismember(self, name, value): ... + def smembers(self, name): ... + def smove(self, src, dst, value): ... + def spop(self, name): ... + def srandmember(self, name, number=...): ... + def srem(self, name, *values): ... + def sunion(self, keys, *args): ... + def sunionstore(self, dest, keys, *args): ... + def zadd(self, name, *args, **kwargs): ... + def zcard(self, name): ... + def zcount(self, name, min, max): ... + def zincrby(self, name, value, amount=...): ... + def zinterstore(self, dest, keys, aggregate=...): ... + def zlexcount(self, name, min, max): ... + def zrange(self, name, start, end, desc=..., withscores=..., score_cast_func=...): ... + def zrangebylex(self, name, min, max, start=..., num=...): ... + def zrangebyscore(self, name, min, max, start=..., num=..., withscores=..., score_cast_func=...): ... + def zrank(self, name, value): ... + def zrem(self, name, *values): ... + def zremrangebylex(self, name, min, max): ... + def zremrangebyrank(self, name, min, max): ... + def zremrangebyscore(self, name, min, max): ... + def zrevrange(self, name, start, end, withscores=..., score_cast_func=...): ... + def zrevrangebyscore(self, name, max, min, start=..., num=..., withscores=..., score_cast_func=...): ... + def zrevrank(self, name, value): ... + def zscore(self, name, value): ... + def zunionstore(self, dest, keys, aggregate=...): ... + def pfadd(self, name, *values): ... + def pfcount(self, name): ... + def pfmerge(self, dest, *sources): ... + def hdel(self, name, *keys): ... + def hexists(self, name, key): ... + def hget(self, name, key): ... + def hgetall(self, name): ... + def hincrby(self, name, key, amount=...): ... + def hincrbyfloat(self, name, key, amount=...): ... + def hkeys(self, name): ... + def hlen(self, name): ... + def hset(self, name, key, value): ... + def hsetnx(self, name, key, value): ... + def hmset(self, name, mapping): ... + def hmget(self, name, keys, *args): ... + def hvals(self, name): ... + def publish(self, channel, message): ... + def eval(self, script, numkeys, *keys_and_args): ... + def evalsha(self, sha, numkeys, *keys_and_args): ... + def script_exists(self, *args): ... + def script_flush(self): ... + def script_kill(self): ... + def script_load(self, script): ... + def register_script(self, script): ... + +class Redis(StrictRedis): + RESPONSE_CALLBACKS: Any + def pipeline(self, transaction=..., shard_hint=...): ... + def setex(self, name, value, time): ... + def lrem(self, name, value, num=...): ... + def zadd(self, name, *args, **kwargs): ... + +class PubSub: + PUBLISH_MESSAGE_TYPES: Any + UNSUBSCRIBE_MESSAGE_TYPES: Any + connection_pool: Any + shard_hint: Any + ignore_subscribe_messages: Any + connection: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, connection_pool, shard_hint=..., ignore_subscribe_messages=...) -> None: ... + def __del__(self): ... + channels: Any + patterns: Any + def reset(self): ... + def close(self): ... + def on_connect(self, connection): ... + def encode(self, value): ... + @property + def subscribed(self): ... + def execute_command(self, *args, **kwargs): ... + def parse_response(self, block=...): ... + def psubscribe(self, *args, **kwargs): ... + def punsubscribe(self, *args): ... + def subscribe(self, *args, **kwargs): ... + def unsubscribe(self, *args): ... + def listen(self): ... + def get_message(self, ignore_subscribe_messages=...): ... + def handle_message(self, response, ignore_subscribe_messages=...): ... + def run_in_thread(self, sleep_time=...): ... + +class BasePipeline: + UNWATCH_COMMANDS: Any + connection_pool: Any + connection: Any + response_callbacks: Any + transaction: Any + shard_hint: Any + watching: Any + def __init__(self, connection_pool, response_callbacks, transaction, shard_hint) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, traceback): ... + def __del__(self): ... + def __len__(self): ... + command_stack: Any + scripts: Any + explicit_transaction: Any + def reset(self): ... + def multi(self): ... + def execute_command(self, *args, **kwargs): ... + def immediate_execute_command(self, *args, **options): ... + def pipeline_execute_command(self, *args, **options): ... + def raise_first_error(self, commands, response): ... + def annotate_exception(self, exception, number, command): ... + def parse_response(self, connection, command_name, **options): ... + def load_scripts(self): ... + def execute(self, raise_on_error=...): ... + def watch(self, *names): ... + def unwatch(self): ... + def script_load_for_pipeline(self, script): ... + +class StrictPipeline(BasePipeline, StrictRedis): ... +class Pipeline(BasePipeline, Redis): ... + +class Script: + registered_client: Any + script: Any + sha: Any + def __init__(self, registered_client, script) -> None: ... + def __call__(self, keys=..., args=..., client=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/connection.pyi new file mode 100644 index 0000000..7b7ddef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/connection.pyi @@ -0,0 +1,134 @@ +from typing import Any + +ssl_available: Any +hiredis_version: Any +HIREDIS_SUPPORTS_CALLABLE_ERRORS: Any +HIREDIS_SUPPORTS_BYTE_BUFFER: Any +msg: Any +HIREDIS_USE_BYTE_BUFFER: Any +SYM_STAR: Any +SYM_DOLLAR: Any +SYM_CRLF: Any +SYM_EMPTY: Any +SERVER_CLOSED_CONNECTION_ERROR: Any + +class Token: + value: Any + def __init__(self, value) -> None: ... + +class BaseParser: + EXCEPTION_CLASSES: Any + def parse_error(self, response): ... + +class SocketBuffer: + socket_read_size: Any + bytes_written: Any + bytes_read: Any + def __init__(self, socket, socket_read_size) -> None: ... + @property + def length(self): ... + def read(self, length): ... + def readline(self): ... + def purge(self): ... + def close(self): ... + +class PythonParser(BaseParser): + encoding: Any + socket_read_size: Any + def __init__(self, socket_read_size) -> None: ... + def __del__(self): ... + def on_connect(self, connection): ... + def on_disconnect(self): ... + def can_read(self): ... + def read_response(self): ... + +class HiredisParser(BaseParser): + socket_read_size: Any + def __init__(self, socket_read_size) -> None: ... + def __del__(self): ... + def on_connect(self, connection): ... + def on_disconnect(self): ... + def can_read(self): ... + def read_response(self): ... + +DefaultParser: Any + +class Connection: + description_format: Any + pid: Any + host: Any + port: Any + db: Any + password: Any + socket_timeout: Any + socket_connect_timeout: Any + socket_keepalive: Any + socket_keepalive_options: Any + retry_on_timeout: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, host=..., port=..., db=..., password=..., socket_timeout=..., socket_connect_timeout=..., + socket_keepalive=..., socket_keepalive_options=..., retry_on_timeout=..., encoding=..., encoding_errors=..., + decode_responses=..., parser_class=..., socket_read_size=...) -> None: ... + def __del__(self): ... + def register_connect_callback(self, callback): ... + def clear_connect_callbacks(self): ... + def connect(self): ... + def on_connect(self): ... + def disconnect(self): ... + def send_packed_command(self, command): ... + def send_command(self, *args): ... + def can_read(self): ... + def read_response(self): ... + def encode(self, value): ... + def pack_command(self, *args): ... + def pack_commands(self, commands): ... + +class SSLConnection(Connection): + description_format: Any + keyfile: Any + certfile: Any + cert_reqs: Any + ca_certs: Any + def __init__(self, ssl_keyfile=..., ssl_certfile=..., ssl_cert_reqs=..., ssl_ca_certs=..., **kwargs) -> None: ... + +class UnixDomainSocketConnection(Connection): + description_format: Any + pid: Any + path: Any + db: Any + password: Any + socket_timeout: Any + retry_on_timeout: Any + encoding: Any + encoding_errors: Any + decode_responses: Any + def __init__(self, path=..., db=..., password=..., socket_timeout=..., encoding=..., encoding_errors=..., + decode_responses=..., retry_on_timeout=..., parser_class=..., socket_read_size=...) -> None: ... + +class ConnectionPool: + @classmethod + def from_url(cls, url, db=..., **kwargs): ... + connection_class: Any + connection_kwargs: Any + max_connections: Any + def __init__(self, connection_class=..., max_connections=..., **connection_kwargs) -> None: ... + pid: Any + def reset(self): ... + def get_connection(self, command_name, *keys, **options): ... + def make_connection(self): ... + def release(self, connection): ... + def disconnect(self): ... + +class BlockingConnectionPool(ConnectionPool): + queue_class: Any + timeout: Any + def __init__(self, max_connections=..., timeout=..., connection_class=..., queue_class=..., **connection_kwargs) -> None: ... + pid: Any + pool: Any + def reset(self): ... + def make_connection(self): ... + def get_connection(self, command_name, *keys, **options): ... + def release(self, connection): ... + def disconnect(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi new file mode 100644 index 0000000..e0cd08a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/exceptions.pyi @@ -0,0 +1,17 @@ +class RedisError(Exception): ... + +def __unicode__(self): ... + +class AuthenticationError(RedisError): ... +class ConnectionError(RedisError): ... +class TimeoutError(RedisError): ... +class BusyLoadingError(ConnectionError): ... +class InvalidResponse(RedisError): ... +class ResponseError(RedisError): ... +class DataError(RedisError): ... +class PubSubError(RedisError): ... +class WatchError(RedisError): ... +class NoScriptError(ResponseError): ... +class ExecAbortError(ResponseError): ... +class ReadOnlyError(ResponseError): ... +class LockError(RedisError, ValueError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/utils.pyi new file mode 100644 index 0000000..9559abb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/redis/utils.pyi @@ -0,0 +1,8 @@ +from typing import Any + +HIREDIS_AVAILABLE: Any + +def from_url(url, db=..., **kwargs): ... +def pipeline(redis_obj): ... + +class dummy: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi new file mode 100644 index 0000000..8a1261f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/__init__.pyi @@ -0,0 +1,15 @@ +from . import mapper +from . import util + +class _RequestConfig: + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def __delattr__(self, name): ... + def load_wsgi_environ(self, environ): ... + +def request_config(original=...): ... + +Mapper = mapper.Mapper +redirect_to = util.redirect_to +url_for = util.url_for +URLGenerator = util.URLGenerator diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi new file mode 100644 index 0000000..f834d08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/mapper.pyi @@ -0,0 +1,67 @@ +from typing import Any + +COLLECTION_ACTIONS: Any +MEMBER_ACTIONS: Any + +def strip_slashes(name): ... + +class SubMapperParent: + def submapper(self, **kargs): ... + def collection(self, collection_name, resource_name, path_prefix=..., member_prefix=..., controller=..., + collection_actions=..., member_actions=..., member_options=..., **kwargs): ... + +class SubMapper(SubMapperParent): + kwargs: Any + obj: Any + collection_name: Any + member: Any + resource_name: Any + formatted: Any + def __init__(self, obj, resource_name=..., collection_name=..., actions=..., formatted=..., **kwargs) -> None: ... + def connect(self, *args, **kwargs): ... + def link(self, rel=..., name=..., action=..., method=..., formatted=..., **kwargs): ... + def new(self, **kwargs): ... + def edit(self, **kwargs): ... + def action(self, name=..., action=..., method=..., formatted=..., **kwargs): ... + def index(self, name=..., **kwargs): ... + def show(self, name=..., **kwargs): ... + def create(self, **kwargs): ... + def update(self, **kwargs): ... + def delete(self, **kwargs): ... + def add_actions(self, actions): ... + def __enter__(self): ... + def __exit__(self, type, value, tb): ... + +class Mapper(SubMapperParent): + matchlist: Any + maxkeys: Any + minkeys: Any + urlcache: Any + prefix: Any + req_data: Any + directory: Any + always_scan: Any + controller_scan: Any + debug: Any + append_slash: Any + sub_domains: Any + sub_domains_ignore: Any + domain_match: Any + explicit: Any + encoding: Any + decode_errors: Any + hardcode_names: Any + minimization: Any + create_regs_lock: Any + def __init__(self, controller_scan=..., directory=..., always_scan=..., register=..., explicit=...) -> None: ... + environ: Any + def extend(self, routes, path_prefix=...): ... + def make_route(self, *args, **kargs): ... + def connect(self, *args, **kargs): ... + def create_regs(self, *args, **kwargs): ... + def match(self, url=..., environ=...): ... + def routematch(self, url=..., environ=...): ... + obj: Any + def generate(self, *args, **kargs): ... + def resource(self, member_name, collection_name, **kwargs): ... + def redirect(self, match_path, destination_path, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/util.pyi new file mode 100644 index 0000000..e3be1d4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/routes/util.pyi @@ -0,0 +1,20 @@ +from typing import Any + +class RoutesException(Exception): ... +class MatchException(RoutesException): ... +class GenerationException(RoutesException): ... + +def url_for(*args, **kargs): ... + +class URLGenerator: + mapper: Any + environ: Any + def __init__(self, mapper, environ) -> None: ... + def __call__(self, *args, **kargs): ... + def current(self, *args, **kwargs): ... + +def redirect_to(*args, **kargs): ... +def cache_hostinfo(environ): ... +def controller_scan(directory=...): ... +def as_unicode(value, encoding, errors=...): ... +def ascii_characters(string): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi new file mode 100644 index 0000000..3530bf8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/scribe.pyi @@ -0,0 +1,39 @@ +from typing import Any + +import fb303.FacebookService +from .ttypes import * # noqa: F403 +from thrift.Thrift import TProcessor # type: ignore # We don't have thrift stubs in typeshed + +class Iface(fb303.FacebookService.Iface): + def Log(self, messages): ... + +class Client(fb303.FacebookService.Client, Iface): + def __init__(self, iprot, oprot=...) -> None: ... + def Log(self, messages): ... + def send_Log(self, messages): ... + def recv_Log(self): ... + +class Processor(fb303.FacebookService.Processor, Iface, TProcessor): + def __init__(self, handler) -> None: ... + def process(self, iprot, oprot): ... + def process_Log(self, seqid, iprot, oprot): ... + +class Log_args: + thrift_spec: Any + messages: Any + def __init__(self, messages=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class Log_result: + thrift_spec: Any + success: Any + def __init__(self, success=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi new file mode 100644 index 0000000..5bb7ded --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/scribe/ttypes.pyi @@ -0,0 +1,18 @@ +from typing import Any + +fastbinary: Any + +class ResultCode: + OK: Any + TRY_LATER: Any + +class LogEntry: + thrift_spec: Any + category: Any + message: Any + def __init__(self, category=..., message=...) -> None: ... + def read(self, iprot): ... + def write(self, oprot): ... + def validate(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/__init__.pyi new file mode 100644 index 0000000..3bed050 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/__init__.pyi @@ -0,0 +1,96 @@ +# Stubs for six (Python 2.7) + +from __future__ import print_function + +import types +from typing import ( + Any, AnyStr, Callable, Dict, Iterable, Mapping, NoReturn, Optional, + Pattern, Text, Tuple, Type, TypeVar, Union, overload, ValuesView, KeysView, ItemsView, +) +import typing +import unittest + +# Exports +from __builtin__ import unichr as unichr +from StringIO import StringIO as StringIO, StringIO as BytesIO +from functools import wraps as wraps +from . import moves + + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + +# TODO make constant, then move this stub to 2and3 +# https://github.com/python/typeshed/issues/17 +PY2 = True +PY3 = False +PY34 = False + +string_types = (str, unicode) +integer_types = (int, long) +class_types = (type, types.ClassType) +text_type = unicode +binary_type = str + +MAXSIZE: int + +# def add_move +# def remove_move + +def advance_iterator(it: typing.Iterator[_T]) -> _T: ... +next = advance_iterator + +def callable(obj: object) -> bool: ... + +def get_unbound_function(unbound: types.MethodType) -> types.FunctionType: ... +def create_bound_method(func: types.FunctionType, obj: object) -> types.MethodType: ... +def create_unbound_method(func: types.FunctionType, cls: Union[type, types.ClassType]) -> types.MethodType: ... + +class Iterator: + def next(self) -> Any: ... + +def get_method_function(meth: types.MethodType) -> types.FunctionType: ... +def get_method_self(meth: types.MethodType) -> Optional[object]: ... +def get_function_closure(fun: types.FunctionType) -> Optional[Tuple[types._Cell, ...]]: ... +def get_function_code(fun: types.FunctionType) -> types.CodeType: ... +def get_function_defaults(fun: types.FunctionType) -> Optional[Tuple[Any, ...]]: ... +def get_function_globals(fun: types.FunctionType) -> Dict[str, Any]: ... + +def iterkeys(d: Mapping[_K, _V]) -> typing.Iterator[_K]: ... +def itervalues(d: Mapping[_K, _V]) -> typing.Iterator[_V]: ... +def iteritems(d: Mapping[_K, _V]) -> typing.Iterator[Tuple[_K, _V]]: ... +# def iterlists + +def viewkeys(d: Mapping[_K, _V]) -> KeysView[_K]: ... +def viewvalues(d: Mapping[_K, _V]) -> ValuesView[_V]: ... +def viewitems(d: Mapping[_K, _V]) -> ItemsView[_K, _V]: ... + +def b(s: str) -> binary_type: ... +def u(s: str) -> text_type: ... +int2byte = chr +def byte2int(bs: binary_type) -> int: ... +def indexbytes(buf: binary_type, i: int) -> int: ... +def iterbytes(buf: binary_type) -> typing.Iterator[int]: ... + +def assertCountEqual(self: unittest.TestCase, first: Iterable[_T], second: Iterable[_T], msg: str = ...) -> None: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, msg: str = ...) -> Any: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, callable_obj: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ... +def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], + msg: str = ...) -> None: ... + +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], + tb: Optional[types.TracebackType] = ...) -> NoReturn: ... +def exec_(_code_: Union[unicode, types.CodeType], _globs_: Dict[str, Any] = ..., _locs_: Dict[str, Any] = ...): ... +def raise_from(value: Union[BaseException, Type[BaseException]], from_value: Optional[BaseException]) -> NoReturn: ... + +print_ = print + +def with_metaclass(meta: type, *bases: type) -> type: ... +def add_metaclass(metaclass: type) -> Callable[[_T], _T]: ... +def ensure_binary(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> bytes: ... +def ensure_str(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> str: ... +def ensure_text(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> Text: ... +def python_2_unicode_compatible(klass: _T) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi new file mode 100644 index 0000000..16f7a9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/BaseHTTPServer.pyi @@ -0,0 +1 @@ +from BaseHTTPServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi new file mode 100644 index 0000000..97cfe77 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/SimpleHTTPServer.pyi @@ -0,0 +1 @@ +from SimpleHTTPServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi new file mode 100644 index 0000000..ade0304 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/__init__.pyi @@ -0,0 +1,66 @@ +# Stubs for six.moves +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from cStringIO import StringIO as cStringIO +from itertools import ifilter as filter +from itertools import ifilterfalse as filterfalse +from __builtin__ import raw_input as input +from __builtin__ import intern as intern +from itertools import imap as map +from os import getcwdu as getcwd +from os import getcwd as getcwdb +from __builtin__ import xrange as range +from __builtin__ import reload as reload_module +from __builtin__ import reduce as reduce +from pipes import quote as shlex_quote +from StringIO import StringIO as StringIO +from UserDict import UserDict as UserDict +from UserList import UserList as UserList +from UserString import UserString as UserString +from __builtin__ import xrange as xrange +from itertools import izip as zip +from itertools import izip_longest as zip_longest +import __builtin__ as builtins +from . import configparser +# import copy_reg as copyreg +# import gdbm as dbm_gnu +from . import _dummy_thread +from . import http_cookiejar +from . import http_cookies +from . import html_entities +from . import html_parser +from . import http_client +# import email.MIMEMultipart as email_mime_multipart +# import email.MIMENonMultipart as email_mime_nonmultipart +from . import email_mime_text +# import email.MIMEBase as email_mime_base +from . import BaseHTTPServer +# import CGIHTTPServer as CGIHTTPServer +from . import SimpleHTTPServer +from . import cPickle +from . import queue +from . import reprlib +from . import socketserver +from . import _thread +# import Tkinter as tkinter +# import Dialog as tkinter_dialog +# import FileDialog as tkinter_filedialog +# import ScrolledText as tkinter_scrolledtext +# import SimpleDialog as tkinter_simpledialog +# import Tix as tkinter_tix +# import ttk as tkinter_ttk +# import Tkconstants as tkinter_constants +# import Tkdnd as tkinter_dnd +# import tkColorChooser as tkinter_colorchooser +# import tkCommonDialog as tkinter_commondialog +# import tkFileDialog as tkinter_tkfiledialog +# import tkFont as tkinter_font +# import tkMessageBox as tkinter_messagebox +# import tkSimpleDialog as tkinter_tksimpledialog +from . import urllib_parse +from . import urllib_error +from . import urllib +from . import urllib_robotparser +from . import xmlrpc_client +# import SimpleXMLRPCServer as xmlrpc_server diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi new file mode 100644 index 0000000..3efe922 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_dummy_thread.pyi @@ -0,0 +1 @@ +from dummy_thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi new file mode 100644 index 0000000..b27f4c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/_thread.pyi @@ -0,0 +1 @@ +from thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi new file mode 100644 index 0000000..ca829a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/cPickle.pyi @@ -0,0 +1 @@ +from cPickle import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi new file mode 100644 index 0000000..b2da53a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/configparser.pyi @@ -0,0 +1 @@ +from ConfigParser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi new file mode 100644 index 0000000..4df155c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_base.pyi @@ -0,0 +1 @@ +from email.mime.base import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi new file mode 100644 index 0000000..4f31241 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_multipart.pyi @@ -0,0 +1 @@ +from email.mime.multipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi new file mode 100644 index 0000000..c15c8c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_nonmultipart.pyi @@ -0,0 +1 @@ +from email.mime.nonmultipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi new file mode 100644 index 0000000..214bf1e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/email_mime_text.pyi @@ -0,0 +1 @@ +from email.MIMEText import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi new file mode 100644 index 0000000..9e15d01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_entities.pyi @@ -0,0 +1 @@ +from htmlentitydefs import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi new file mode 100644 index 0000000..984cee6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/html_parser.pyi @@ -0,0 +1 @@ +from HTMLParser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi new file mode 100644 index 0000000..24ef0b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_client.pyi @@ -0,0 +1 @@ +from httplib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi new file mode 100644 index 0000000..1357ad3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookiejar.pyi @@ -0,0 +1 @@ +from cookielib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi new file mode 100644 index 0000000..5115c0d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/http_cookies.pyi @@ -0,0 +1 @@ +from Cookie import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi new file mode 100644 index 0000000..7ce3ccb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/queue.pyi @@ -0,0 +1 @@ +from Queue import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi new file mode 100644 index 0000000..40ad103 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/reprlib.pyi @@ -0,0 +1 @@ +from repr import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi new file mode 100644 index 0000000..c80a6e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/socketserver.pyi @@ -0,0 +1 @@ +from SocketServer import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi new file mode 100644 index 0000000..d08209c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/__init__.pyi @@ -0,0 +1,5 @@ +import six.moves.urllib.error as error +import six.moves.urllib.parse as parse +import six.moves.urllib.request as request +import six.moves.urllib.response as response +import six.moves.urllib.robotparser as robotparser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi new file mode 100644 index 0000000..044327e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/error.pyi @@ -0,0 +1,3 @@ +from urllib2 import URLError as URLError +from urllib2 import HTTPError as HTTPError +from urllib import ContentTooShortError as ContentTooShortError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi new file mode 100644 index 0000000..4096c27 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/parse.pyi @@ -0,0 +1,24 @@ +# Stubs for six.moves.urllib.parse +from urlparse import ParseResult as ParseResult +from urlparse import SplitResult as SplitResult +from urlparse import parse_qs as parse_qs +from urlparse import parse_qsl as parse_qsl +from urlparse import urldefrag as urldefrag +from urlparse import urljoin as urljoin +from urlparse import urlparse as urlparse +from urlparse import urlsplit as urlsplit +from urlparse import urlunparse as urlunparse +from urlparse import urlunsplit as urlunsplit +from urllib import quote as quote +from urllib import quote_plus as quote_plus +from urllib import unquote as unquote +from urllib import unquote_plus as unquote_plus +from urllib import urlencode as urlencode +from urllib import splitquery as splitquery +from urllib import splittag as splittag +from urllib import splituser as splituser +from urlparse import uses_fragment as uses_fragment +from urlparse import uses_netloc as uses_netloc +from urlparse import uses_params as uses_params +from urlparse import uses_query as uses_query +from urlparse import uses_relative as uses_relative diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi new file mode 100644 index 0000000..6aadde1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/request.pyi @@ -0,0 +1,36 @@ +# Stubs for six.moves.urllib.request +from urllib2 import urlopen as urlopen +from urllib2 import install_opener as install_opener +from urllib2 import build_opener as build_opener +from urllib import pathname2url as pathname2url +from urllib import url2pathname as url2pathname +from urllib import getproxies as getproxies +from urllib2 import Request as Request +from urllib2 import OpenerDirector as OpenerDirector +from urllib2 import HTTPDefaultErrorHandler as HTTPDefaultErrorHandler +from urllib2 import HTTPRedirectHandler as HTTPRedirectHandler +from urllib2 import HTTPCookieProcessor as HTTPCookieProcessor +from urllib2 import ProxyHandler as ProxyHandler +from urllib2 import BaseHandler as BaseHandler +from urllib2 import HTTPPasswordMgr as HTTPPasswordMgr +from urllib2 import HTTPPasswordMgrWithDefaultRealm as HTTPPasswordMgrWithDefaultRealm +from urllib2 import AbstractBasicAuthHandler as AbstractBasicAuthHandler +from urllib2 import HTTPBasicAuthHandler as HTTPBasicAuthHandler +from urllib2 import ProxyBasicAuthHandler as ProxyBasicAuthHandler +from urllib2 import AbstractDigestAuthHandler as AbstractDigestAuthHandler +from urllib2 import HTTPDigestAuthHandler as HTTPDigestAuthHandler +from urllib2 import ProxyDigestAuthHandler as ProxyDigestAuthHandler +from urllib2 import HTTPHandler as HTTPHandler +from urllib2 import HTTPSHandler as HTTPSHandler +from urllib2 import FileHandler as FileHandler +from urllib2 import FTPHandler as FTPHandler +from urllib2 import CacheFTPHandler as CacheFTPHandler +from urllib2 import UnknownHandler as UnknownHandler +from urllib2 import HTTPErrorProcessor as HTTPErrorProcessor +from urllib import urlretrieve as urlretrieve +from urllib import urlcleanup as urlcleanup +from urllib import URLopener as URLopener +from urllib import FancyURLopener as FancyURLopener +from urllib import proxy_bypass as proxy_bypass +from urllib2 import parse_http_list as parse_http_list +from urllib2 import parse_keqv_list as parse_keqv_list diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi new file mode 100644 index 0000000..83e117f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/response.pyi @@ -0,0 +1,5 @@ +# Stubs for six.moves.urllib.response +from urllib import addbase as addbase +from urllib import addclosehook as addclosehook +from urllib import addinfo as addinfo +from urllib import addinfourl as addinfourl diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi new file mode 100644 index 0000000..11eef50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib/robotparser.pyi @@ -0,0 +1 @@ +from robotparser import RobotFileParser as RobotFileParser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi new file mode 100644 index 0000000..b560812 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_error.pyi @@ -0,0 +1 @@ +from .urllib.error import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi new file mode 100644 index 0000000..bdb4d1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_parse.pyi @@ -0,0 +1 @@ +from .urllib.parse import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi new file mode 100644 index 0000000..dc03dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_request.pyi @@ -0,0 +1 @@ +from .urllib.request import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi new file mode 100644 index 0000000..bbee522 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_response.pyi @@ -0,0 +1 @@ +from .urllib.response import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi new file mode 100644 index 0000000..ddb63b7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/urllib_robotparser.pyi @@ -0,0 +1 @@ +from robotparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi new file mode 100644 index 0000000..1b3bd74 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/six/moves/xmlrpc_client.pyi @@ -0,0 +1 @@ +from xmlrpclib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi new file mode 100644 index 0000000..91fc326 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/concurrent.pyi @@ -0,0 +1,43 @@ +from typing import Any + +futures: Any + +class ReturnValueIgnoredError(Exception): ... + +class _TracebackLogger: + exc_info: Any + formatted_tb: Any + def __init__(self, exc_info) -> None: ... + def activate(self): ... + def clear(self): ... + def __del__(self): ... + +class Future: + def __init__(self) -> None: ... + def cancel(self): ... + def cancelled(self): ... + def running(self): ... + def done(self): ... + def result(self, timeout=...): ... + def exception(self, timeout=...): ... + def add_done_callback(self, fn): ... + def set_result(self, result): ... + def set_exception(self, exception): ... + def exc_info(self): ... + def set_exc_info(self, exc_info): ... + def __del__(self): ... + +TracebackFuture: Any +FUTURES: Any + +def is_future(x): ... + +class DummyExecutor: + def submit(self, fn, *args, **kwargs): ... + def shutdown(self, wait=...): ... + +dummy_executor: Any + +def run_on_executor(*args, **kwargs): ... +def return_future(f): ... +def chain_future(a, b): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi new file mode 100644 index 0000000..ee3954b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/gen.pyi @@ -0,0 +1,109 @@ +from typing import Any +from collections import namedtuple + +singledispatch: Any + +class KeyReuseError(Exception): ... +class UnknownKeyError(Exception): ... +class LeakedCallbackError(Exception): ... +class BadYieldError(Exception): ... +class ReturnValueIgnoredError(Exception): ... +class TimeoutError(Exception): ... + +def engine(func): ... +def coroutine(func, replace_callback=...): ... + +class Return(Exception): + value: Any + def __init__(self, value=...) -> None: ... + +class WaitIterator: + current_index: Any + def __init__(self, *args, **kwargs) -> None: ... + def done(self): ... + def next(self): ... + +class YieldPoint: + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Callback(YieldPoint): + key: Any + def __init__(self, key) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Wait(YieldPoint): + key: Any + def __init__(self, key) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class WaitAll(YieldPoint): + keys: Any + def __init__(self, keys) -> None: ... + runner: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +def Task(func, *args, **kwargs): ... + +class YieldFuture(YieldPoint): + future: Any + io_loop: Any + def __init__(self, future, io_loop=...) -> None: ... + runner: Any + key: Any + result_fn: Any + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +class Multi(YieldPoint): + keys: Any + children: Any + unfinished_children: Any + quiet_exceptions: Any + def __init__(self, children, quiet_exceptions=...) -> None: ... + def start(self, runner): ... + def is_ready(self): ... + def get_result(self): ... + +def multi_future(children, quiet_exceptions=...): ... +def maybe_future(x): ... +def with_timeout(timeout, future, io_loop=..., quiet_exceptions=...): ... +def sleep(duration): ... + +moment: Any + +class Runner: + gen: Any + result_future: Any + future: Any + yield_point: Any + pending_callbacks: Any + results: Any + running: Any + finished: Any + had_exception: Any + io_loop: Any + stack_context_deactivate: Any + def __init__(self, gen, result_future, first_yielded) -> None: ... + def register_callback(self, key): ... + def is_ready(self, key): ... + def set_result(self, key, result): ... + def pop_result(self, key): ... + def run(self): ... + def handle_yield(self, yielded): ... + def result_callback(self, key): ... + def handle_exception(self, typ, value, tb): ... + +Arguments = namedtuple('Arguments', ['args', 'kwargs']) + +def convert_yielded(yielded): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi new file mode 100644 index 0000000..f107093 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpclient.pyi @@ -0,0 +1,96 @@ +from typing import Any +from tornado.util import Configurable + +class HTTPClient: + def __init__(self, async_client_class=..., **kwargs) -> None: ... + def __del__(self): ... + def close(self): ... + def fetch(self, request, **kwargs): ... + +class AsyncHTTPClient(Configurable): + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def __new__(cls, io_loop=..., force_instance=..., **kwargs): ... + io_loop: Any + defaults: Any + def initialize(self, io_loop, defaults=...): ... + def close(self): ... + def fetch(self, request, callback=..., raise_error=..., **kwargs): ... + def fetch_impl(self, request, callback): ... + @classmethod + def configure(cls, impl, **kwargs): ... + +class HTTPRequest: + proxy_host: Any + proxy_port: Any + proxy_username: Any + proxy_password: Any + url: Any + method: Any + body_producer: Any + auth_username: Any + auth_password: Any + auth_mode: Any + connect_timeout: Any + request_timeout: Any + follow_redirects: Any + max_redirects: Any + user_agent: Any + decompress_response: Any + network_interface: Any + streaming_callback: Any + header_callback: Any + prepare_curl_callback: Any + allow_nonstandard_methods: Any + validate_cert: Any + ca_certs: Any + allow_ipv6: Any + client_key: Any + client_cert: Any + ssl_options: Any + expect_100_continue: Any + start_time: Any + def __init__(self, url, method=..., headers=..., body=..., auth_username=..., auth_password=..., auth_mode=..., + connect_timeout=..., request_timeout=..., if_modified_since=..., follow_redirects=..., max_redirects=..., + user_agent=..., use_gzip=..., network_interface=..., streaming_callback=..., header_callback=..., + prepare_curl_callback=..., proxy_host=..., proxy_port=..., proxy_username=..., proxy_password=..., + allow_nonstandard_methods=..., validate_cert=..., ca_certs=..., allow_ipv6=..., client_key=..., client_cert=..., + body_producer=..., expect_100_continue=..., decompress_response=..., ssl_options=...) -> None: ... + @property + def headers(self): ... + @headers.setter + def headers(self, value): ... + @property + def body(self): ... + @body.setter + def body(self, value): ... + +class HTTPResponse: + request: Any + code: Any + reason: Any + headers: Any + buffer: Any + effective_url: Any + error: Any + request_time: Any + time_info: Any + def __init__(self, request, code, headers=..., buffer=..., effective_url=..., error=..., request_time=..., time_info=..., + reason=...) -> None: ... + body: Any + def rethrow(self): ... + +class HTTPError(Exception): + code: Any + response: Any + def __init__(self, code, message=..., response=...) -> None: ... + +class _RequestProxy: + request: Any + defaults: Any + def __init__(self, request, defaults) -> None: ... + def __getattr__(self, name): ... + +def main(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi new file mode 100644 index 0000000..9bcf99a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httpserver.pyi @@ -0,0 +1,43 @@ +from typing import Any +from tornado import httputil +from tornado.tcpserver import TCPServer +from tornado.util import Configurable + +class HTTPServer(TCPServer, Configurable, httputil.HTTPServerConnectionDelegate): + def __init__(self, *args, **kwargs) -> None: ... + request_callback: Any + no_keep_alive: Any + xheaders: Any + protocol: Any + conn_params: Any + def initialize(self, request_callback, no_keep_alive=..., io_loop=..., xheaders=..., ssl_options=..., protocol=..., + decompress_request=..., chunk_size=..., max_header_size=..., idle_connection_timeout=..., body_timeout=..., + max_body_size=..., max_buffer_size=...): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def close_all_connections(self): ... + def handle_stream(self, stream, address): ... + def start_request(self, server_conn, request_conn): ... + def on_close(self, server_conn): ... + +class _HTTPRequestContext: + address: Any + protocol: Any + address_family: Any + remote_ip: Any + def __init__(self, stream, address, protocol) -> None: ... + +class _ServerRequestAdapter(httputil.HTTPMessageDelegate): + server: Any + connection: Any + request: Any + delegate: Any + def __init__(self, server, server_conn, request_conn) -> None: ... + def headers_received(self, start_line, headers): ... + def data_received(self, chunk): ... + def finish(self): ... + def on_connection_close(self): ... + +HTTPRequest: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi new file mode 100644 index 0000000..bfc81fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/httputil.pyi @@ -0,0 +1,90 @@ +from typing import Any +from tornado.util import ObjectDict +from collections import namedtuple + +class SSLError(Exception): ... + +class _NormalizedHeaderCache(dict): + size: Any + queue: Any + def __init__(self, size) -> None: ... + def __missing__(self, key): ... + +class HTTPHeaders(dict): + def __init__(self, *args, **kwargs) -> None: ... + def add(self, name, value): ... + def get_list(self, name): ... + def get_all(self): ... + def parse_line(self, line): ... + @classmethod + def parse(cls, headers): ... + def __setitem__(self, name, value): ... + def __getitem__(self, name): ... + def __delitem__(self, name): ... + def __contains__(self, name): ... + def get(self, name, default=...): ... + def update(self, *args, **kwargs): ... + def copy(self): ... + __copy__: Any + def __deepcopy__(self, memo_dict): ... + +class HTTPServerRequest: + method: Any + uri: Any + version: Any + headers: Any + body: Any + remote_ip: Any + protocol: Any + host: Any + files: Any + connection: Any + arguments: Any + query_arguments: Any + body_arguments: Any + def __init__(self, method=..., uri=..., version=..., headers=..., body=..., host=..., files=..., connection=..., + start_line=...) -> None: ... + def supports_http_1_1(self): ... + @property + def cookies(self): ... + def write(self, chunk, callback=...): ... + def finish(self): ... + def full_url(self): ... + def request_time(self): ... + def get_ssl_certificate(self, binary_form=...): ... + +class HTTPInputError(Exception): ... +class HTTPOutputError(Exception): ... + +class HTTPServerConnectionDelegate: + def start_request(self, server_conn, request_conn): ... + def on_close(self, server_conn): ... + +class HTTPMessageDelegate: + def headers_received(self, start_line, headers): ... + def data_received(self, chunk): ... + def finish(self): ... + def on_connection_close(self): ... + +class HTTPConnection: + def write_headers(self, start_line, headers, chunk=..., callback=...): ... + def write(self, chunk, callback=...): ... + def finish(self): ... + +def url_concat(url, args): ... + +class HTTPFile(ObjectDict): ... + +def parse_body_arguments(content_type, body, arguments, files, headers=...): ... +def parse_multipart_form_data(boundary, data, arguments, files): ... +def format_timestamp(ts): ... + +RequestStartLine = namedtuple('RequestStartLine', ['method', 'path', 'version']) + +def parse_request_start_line(line): ... + +ResponseStartLine = namedtuple('ResponseStartLine', ['version', 'code', 'reason']) + +def parse_response_start_line(line): ... +def doctests(): ... +def split_host_and_port(netloc): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi new file mode 100644 index 0000000..92c3548 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/ioloop.pyi @@ -0,0 +1,84 @@ +from typing import Any +from tornado.util import Configurable + +signal: Any + +class TimeoutError(Exception): ... + +class IOLoop(Configurable): + NONE: Any + READ: Any + WRITE: Any + ERROR: Any + @staticmethod + def instance(): ... + @staticmethod + def initialized(): ... + def install(self): ... + @staticmethod + def clear_instance(): ... + @staticmethod + def current(instance=...): ... + def make_current(self): ... + @staticmethod + def clear_current(): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def initialize(self, make_current=...): ... + def close(self, all_fds=...): ... + def add_handler(self, fd, handler, events): ... + def update_handler(self, fd, events): ... + def remove_handler(self, fd): ... + def set_blocking_signal_threshold(self, seconds, action): ... + def set_blocking_log_threshold(self, seconds): ... + def log_stack(self, signal, frame): ... + def start(self): ... + def stop(self): ... + def run_sync(self, func, timeout=...): ... + def time(self): ... + def add_timeout(self, deadline, callback, *args, **kwargs): ... + def call_later(self, delay, callback, *args, **kwargs): ... + def call_at(self, when, callback, *args, **kwargs): ... + def remove_timeout(self, timeout): ... + def add_callback(self, callback, *args, **kwargs): ... + def add_callback_from_signal(self, callback, *args, **kwargs): ... + def spawn_callback(self, callback, *args, **kwargs): ... + def add_future(self, future, callback): ... + def handle_callback_exception(self, callback): ... + def split_fd(self, fd): ... + def close_fd(self, fd): ... + +class PollIOLoop(IOLoop): + time_func: Any + def initialize(self, impl, time_func=..., **kwargs): ... + def close(self, all_fds=...): ... + def add_handler(self, fd, handler, events): ... + def update_handler(self, fd, events): ... + def remove_handler(self, fd): ... + def set_blocking_signal_threshold(self, seconds, action): ... + def start(self): ... + def stop(self): ... + def time(self): ... + def call_at(self, deadline, callback, *args, **kwargs): ... + def remove_timeout(self, timeout): ... + def add_callback(self, callback, *args, **kwargs): ... + def add_callback_from_signal(self, callback, *args, **kwargs): ... + +class _Timeout: + deadline: Any + callback: Any + tiebreaker: Any + def __init__(self, deadline, callback, io_loop) -> None: ... + def __lt__(self, other): ... + def __le__(self, other): ... + +class PeriodicCallback: + callback: Any + callback_time: Any + io_loop: Any + def __init__(self, callback, callback_time, io_loop=...) -> None: ... + def start(self): ... + def stop(self): ... + def is_running(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi new file mode 100644 index 0000000..723e991 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/locks.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional + +class _TimeoutGarbageCollector: + def __init__(self): ... + +class Condition(_TimeoutGarbageCollector): + io_loop: Any + def __init__(self): ... + def wait(self, timeout: Optional[Any] = ...): ... + def notify(self, n: int = ...): ... + def notify_all(self): ... + +class Event: + def __init__(self): ... + def is_set(self): ... + def set(self): ... + def clear(self): ... + def wait(self, timeout: Optional[Any] = ...): ... + +class _ReleasingContextManager: + def __init__(self, obj): ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + +class Semaphore(_TimeoutGarbageCollector): + def __init__(self, value: int = ...): ... + def release(self): ... + def acquire(self, timeout: Optional[Any] = ...): ... + def __enter__(self): ... + __exit__: Any + def __aenter__(self): ... + def __aexit__(self, typ, value, tb): ... + +class BoundedSemaphore(Semaphore): + def __init__(self, value: int = ...): ... + def release(self): ... + +class Lock: + def __init__(self): ... + def acquire(self, timeout: Optional[Any] = ...): ... + def release(self): ... + def __enter__(self): ... + __exit__: Any + def __aenter__(self): ... + def __aexit__(self, typ, value, tb): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi new file mode 100644 index 0000000..53c8fc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/netutil.pyi @@ -0,0 +1,45 @@ +from typing import Any +from tornado.util import Configurable + +ssl: Any +certifi: Any +xrange: Any +ssl_match_hostname: Any +SSLCertificateError: Any + +def bind_sockets(port, address=..., family=..., backlog=..., flags=...): ... +def bind_unix_socket(file, mode=..., backlog=...): ... +def add_accept_handler(sock, callback, io_loop=...): ... +def is_valid_ip(ip): ... + +class Resolver(Configurable): + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def resolve(self, host, port, family=..., callback=...): ... + def close(self): ... + +class ExecutorResolver(Resolver): + io_loop: Any + executor: Any + close_executor: Any + def initialize(self, io_loop=..., executor=..., close_executor=...): ... + def close(self): ... + def resolve(self, host, port, family=...): ... + +class BlockingResolver(ExecutorResolver): + def initialize(self, io_loop=...): ... + +class ThreadedResolver(ExecutorResolver): + def initialize(self, io_loop=..., num_threads=...): ... + +class OverrideResolver(Resolver): + resolver: Any + mapping: Any + def initialize(self, resolver, mapping): ... + def close(self): ... + def resolve(self, host, port, *args, **kwargs): ... + +def ssl_options_to_context(ssl_options): ... +def ssl_wrap_socket(socket, ssl_options, server_hostname=..., **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/process.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/process.pyi new file mode 100644 index 0000000..c467454 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/process.pyi @@ -0,0 +1,24 @@ +from typing import Any, Optional + +long = int +CalledProcessError: Any + +def cpu_count() -> int: ... +def fork_processes(num_processes, max_restarts: int = ...) -> Optional[int]: ... +def task_id() -> int: ... + +class Subprocess: + STREAM: Any = ... + io_loop: Any = ... + stdin: Any = ... + stdout: Any = ... + stderr: Any = ... + proc: Any = ... + returncode: Any = ... + def __init__(self, *args, **kwargs) -> None: ... + def set_exit_callback(self, callback): ... + def wait_for_exit(self, raise_error: bool = ...): ... + @classmethod + def initialize(cls, io_loop: Optional[Any] = ...): ... + @classmethod + def uninitialize(cls): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi new file mode 100644 index 0000000..28fe6a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/tcpserver.pyi @@ -0,0 +1,17 @@ +from typing import Any + +ssl: Any + +class TCPServer: + io_loop: Any + ssl_options: Any + max_buffer_size: Any + read_chunk_size: Any + def __init__(self, io_loop=..., ssl_options=..., max_buffer_size=..., read_chunk_size=...) -> None: ... + def listen(self, port, address=...): ... + def add_sockets(self, sockets): ... + def add_socket(self, socket): ... + def bind(self, port, address=..., family=..., backlog=...): ... + def start(self, num_processes=...): ... + def stop(self): ... + def handle_stream(self, stream, address): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi new file mode 100644 index 0000000..25fd0e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/testing.pyi @@ -0,0 +1,60 @@ +from typing import Any, Optional +import unittest +import logging + +AsyncHTTPClient: Any +gen: Any +HTTPServer: Any +IOLoop: Any +netutil: Any +SimpleAsyncHTTPClient: Any + +def get_unused_port(): ... +def bind_unused_port(): ... + +class AsyncTestCase(unittest.TestCase): + def __init__(self, *args, **kwargs): ... + io_loop: Any + def setUp(self): ... + def tearDown(self): ... + def get_new_ioloop(self): ... + def run(self, result: Optional[Any] = ...): ... + def stop(self, _arg: Optional[Any] = ..., **kwargs): ... + def wait(self, condition: Optional[Any] = ..., timeout: float = ...): ... + +class AsyncHTTPTestCase(AsyncTestCase): + http_client: Any + http_server: Any + def setUp(self): ... + def get_http_client(self): ... + def get_http_server(self): ... + def get_app(self): ... + def fetch(self, path, **kwargs): ... + def get_httpserver_options(self): ... + def get_http_port(self): ... + def get_protocol(self): ... + def get_url(self, path): ... + def tearDown(self): ... + +class AsyncHTTPSTestCase(AsyncHTTPTestCase): + def get_http_client(self): ... + def get_httpserver_options(self): ... + def get_ssl_options(self): ... + def get_protocol(self): ... + +def gen_test(f): ... + +class LogTrapTestCase(unittest.TestCase): + def run(self, result: Optional[Any] = ...): ... + +class ExpectLog(logging.Filter): + logger: Any + regex: Any + required: Any + matched: Any + def __init__(self, logger, regex, required: bool = ...): ... + def filter(self, record): ... + def __enter__(self): ... + def __exit__(self, typ, value, tb): ... + +def main(**kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/util.pyi new file mode 100644 index 0000000..1f6e0d2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/util.pyi @@ -0,0 +1,46 @@ +from typing import Any + +xrange: Any + +class ObjectDict(dict): + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + +class GzipDecompressor: + decompressobj: Any + def __init__(self) -> None: ... + def decompress(self, value, max_length=...): ... + @property + def unconsumed_tail(self): ... + def flush(self): ... + +unicode_type: Any +basestring_type: Any + +def import_object(name): ... + +bytes_type: Any + +def errno_from_exception(e): ... + +class Configurable: + def __new__(cls, *args, **kwargs): ... + @classmethod + def configurable_base(cls): ... + @classmethod + def configurable_default(cls): ... + def initialize(self): ... + @classmethod + def configure(cls, impl, **kwargs): ... + @classmethod + def configured_class(cls): ... + +class ArgReplacer: + name: Any + arg_pos: Any + def __init__(self, func, name) -> None: ... + def get_old_value(self, args, kwargs, default=...): ... + def replace(self, new_value, args, kwargs): ... + +def timedelta_to_seconds(td): ... +def doctests(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/web.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/web.pyi new file mode 100644 index 0000000..c63f414 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2/tornado/web.pyi @@ -0,0 +1,257 @@ +from typing import Any +from tornado import httputil + +MIN_SUPPORTED_SIGNED_VALUE_VERSION: Any +MAX_SUPPORTED_SIGNED_VALUE_VERSION: Any +DEFAULT_SIGNED_VALUE_VERSION: Any +DEFAULT_SIGNED_VALUE_MIN_VERSION: Any + +class RequestHandler: + SUPPORTED_METHODS: Any + application: Any + request: Any + path_args: Any + path_kwargs: Any + ui: Any + def __init__(self, application, request, **kwargs) -> None: ... + def initialize(self): ... + @property + def settings(self): ... + def head(self, *args, **kwargs): ... + def get(self, *args, **kwargs): ... + def post(self, *args, **kwargs): ... + def delete(self, *args, **kwargs): ... + def patch(self, *args, **kwargs): ... + def put(self, *args, **kwargs): ... + def options(self, *args, **kwargs): ... + def prepare(self): ... + def on_finish(self): ... + def on_connection_close(self): ... + def clear(self): ... + def set_default_headers(self): ... + def set_status(self, status_code, reason=...): ... + def get_status(self): ... + def set_header(self, name, value): ... + def add_header(self, name, value): ... + def clear_header(self, name): ... + def get_argument(self, name, default=..., strip=...): ... + def get_arguments(self, name, strip=...): ... + def get_body_argument(self, name, default=..., strip=...): ... + def get_body_arguments(self, name, strip=...): ... + def get_query_argument(self, name, default=..., strip=...): ... + def get_query_arguments(self, name, strip=...): ... + def decode_argument(self, value, name=...): ... + @property + def cookies(self): ... + def get_cookie(self, name, default=...): ... + def set_cookie(self, name, value, domain=..., expires=..., path=..., expires_days=..., **kwargs): ... + def clear_cookie(self, name, path=..., domain=...): ... + def clear_all_cookies(self, path=..., domain=...): ... + def set_secure_cookie(self, name, value, expires_days=..., version=..., **kwargs): ... + def create_signed_value(self, name, value, version=...): ... + def get_secure_cookie(self, name, value=..., max_age_days=..., min_version=...): ... + def get_secure_cookie_key_version(self, name, value=...): ... + def redirect(self, url, permanent=..., status=...): ... + def write(self, chunk): ... + def render(self, template_name, **kwargs): ... + def render_string(self, template_name, **kwargs): ... + def get_template_namespace(self): ... + def create_template_loader(self, template_path): ... + def flush(self, include_footers=..., callback=...): ... + def finish(self, chunk=...): ... + def send_error(self, status_code=..., **kwargs): ... + def write_error(self, status_code, **kwargs): ... + @property + def locale(self): ... + @locale.setter + def locale(self, value): ... + def get_user_locale(self): ... + def get_browser_locale(self, default=...): ... + @property + def current_user(self): ... + @current_user.setter + def current_user(self, value): ... + def get_current_user(self): ... + def get_login_url(self): ... + def get_template_path(self): ... + @property + def xsrf_token(self): ... + def check_xsrf_cookie(self): ... + def xsrf_form_html(self): ... + def static_url(self, path, include_host=..., **kwargs): ... + def require_setting(self, name, feature=...): ... + def reverse_url(self, name, *args): ... + def compute_etag(self): ... + def set_etag_header(self): ... + def check_etag_header(self): ... + def data_received(self, chunk): ... + def log_exception(self, typ, value, tb): ... + +def asynchronous(method): ... +def stream_request_body(cls): ... +def removeslash(method): ... +def addslash(method): ... + +class Application(httputil.HTTPServerConnectionDelegate): + transforms: Any + handlers: Any + named_handlers: Any + default_host: Any + settings: Any + ui_modules: Any + ui_methods: Any + def __init__(self, handlers=..., default_host=..., transforms=..., **settings) -> None: ... + def listen(self, port, address=..., **kwargs): ... + def add_handlers(self, host_pattern, host_handlers): ... + def add_transform(self, transform_class): ... + def start_request(self, server_conn, request_conn): ... + def __call__(self, request): ... + def reverse_url(self, name, *args): ... + def log_request(self, handler): ... + +class _RequestDispatcher(httputil.HTTPMessageDelegate): + application: Any + connection: Any + request: Any + chunks: Any + handler_class: Any + handler_kwargs: Any + path_args: Any + path_kwargs: Any + def __init__(self, application, connection) -> None: ... + def headers_received(self, start_line, headers): ... + stream_request_body: Any + def set_request(self, request): ... + def data_received(self, data): ... + def finish(self): ... + def on_connection_close(self): ... + handler: Any + def execute(self): ... + +class HTTPError(Exception): + status_code: Any + log_message: Any + args: Any + reason: Any + def __init__(self, status_code, log_message=..., *args, **kwargs) -> None: ... + +class Finish(Exception): ... + +class MissingArgumentError(HTTPError): + arg_name: Any + def __init__(self, arg_name) -> None: ... + +class ErrorHandler(RequestHandler): + def initialize(self, status_code): ... + def prepare(self): ... + def check_xsrf_cookie(self): ... + +class RedirectHandler(RequestHandler): + def initialize(self, url, permanent=...): ... + def get(self): ... + +class StaticFileHandler(RequestHandler): + CACHE_MAX_AGE: Any + root: Any + default_filename: Any + def initialize(self, path, default_filename=...): ... + @classmethod + def reset(cls): ... + def head(self, path): ... + path: Any + absolute_path: Any + modified: Any + def get(self, path, include_body=...): ... + def compute_etag(self): ... + def set_headers(self): ... + def should_return_304(self): ... + @classmethod + def get_absolute_path(cls, root, path): ... + def validate_absolute_path(self, root, absolute_path): ... + @classmethod + def get_content(cls, abspath, start=..., end=...): ... + @classmethod + def get_content_version(cls, abspath): ... + def get_content_size(self): ... + def get_modified_time(self): ... + def get_content_type(self): ... + def set_extra_headers(self, path): ... + def get_cache_time(self, path, modified, mime_type): ... + @classmethod + def make_static_url(cls, settings, path, include_version=...): ... + def parse_url_path(self, url_path): ... + @classmethod + def get_version(cls, settings, path): ... + +class FallbackHandler(RequestHandler): + fallback: Any + def initialize(self, fallback): ... + def prepare(self): ... + +class OutputTransform: + def __init__(self, request) -> None: ... + def transform_first_chunk(self, status_code, headers, chunk, finishing): ... + def transform_chunk(self, chunk, finishing): ... + +class GZipContentEncoding(OutputTransform): + CONTENT_TYPES: Any + MIN_LENGTH: Any + def __init__(self, request) -> None: ... + def transform_first_chunk(self, status_code, headers, chunk, finishing): ... + def transform_chunk(self, chunk, finishing): ... + +def authenticated(method): ... + +class UIModule: + handler: Any + request: Any + ui: Any + locale: Any + def __init__(self, handler) -> None: ... + @property + def current_user(self): ... + def render(self, *args, **kwargs): ... + def embedded_javascript(self): ... + def javascript_files(self): ... + def embedded_css(self): ... + def css_files(self): ... + def html_head(self): ... + def html_body(self): ... + def render_string(self, path, **kwargs): ... + +class _linkify(UIModule): + def render(self, text, **kwargs): ... + +class _xsrf_form_html(UIModule): + def render(self): ... + +class TemplateModule(UIModule): + def __init__(self, handler) -> None: ... + def render(self, path, **kwargs): ... + def embedded_javascript(self): ... + def javascript_files(self): ... + def embedded_css(self): ... + def css_files(self): ... + def html_head(self): ... + def html_body(self): ... + +class _UIModuleNamespace: + handler: Any + ui_modules: Any + def __init__(self, handler, ui_modules) -> None: ... + def __getitem__(self, key): ... + def __getattr__(self, key): ... + +class URLSpec: + regex: Any + handler_class: Any + kwargs: Any + name: Any + def __init__(self, pattern, handler, kwargs=..., name=...) -> None: ... + def reverse(self, *args): ... + +url: Any + +def create_signed_value(secret, name, value, version=..., clock=..., key_version=...): ... +def decode_signed_value(secret, name, value, max_age_days=..., clock=..., min_version=...): ... +def get_signature_key_version(value): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi new file mode 100644 index 0000000..144ccfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/AES.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class AESCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> AESCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi new file mode 100644 index 0000000..24a12ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC2.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class RC2Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> RC2Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi new file mode 100644 index 0000000..109e2bf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/ARC4.pyi @@ -0,0 +1,15 @@ +from typing import Any, Union, Text + +__revision__: str + +class ARC4Cipher: + block_size: int + key_size: int + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext): ... + def decrypt(self, ciphertext): ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> ARC4Cipher: ... + +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi new file mode 100644 index 0000000..e29ca6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/Blowfish.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class BlowfishCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> BlowfishCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi new file mode 100644 index 0000000..b291919 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/CAST.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class CAST128Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> CAST128Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi new file mode 100644 index 0000000..30a40dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES.pyi @@ -0,0 +1,19 @@ +from typing import Any, Union, Text +from .blockalgo import BlockAlgo + +__revision__: str + +class DESCipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> DESCipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi new file mode 100644 index 0000000..59ccd8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/DES3.pyi @@ -0,0 +1,20 @@ +from typing import Any, Union, Text + +from .blockalgo import BlockAlgo + +__revision__: str + +class DES3Cipher(BlockAlgo): + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + +def new(key: Union[bytes, Text], *args, **kwargs) -> DES3Cipher: ... + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int +block_size: int +key_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi new file mode 100644 index 0000000..50980a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_OAEP.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional, Union, Text + +from Crypto.PublicKey.RSA import _RSAobj + +class PKCS1OAEP_Cipher: + def __init__(self, key: _RSAobj, hashAlgo: Any, mgfunc: Any, label: Any) -> None: ... + def can_encrypt(self): ... + def can_decrypt(self): ... + def encrypt(self, message: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ct: bytes) -> bytes: ... + + +def new(key: _RSAobj, hashAlgo: Optional[Any] = ..., mgfunc: Optional[Any] = ..., label: Any = ...) -> PKCS1OAEP_Cipher: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi new file mode 100644 index 0000000..c2b9ea1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/PKCS1_v1_5.pyi @@ -0,0 +1,13 @@ +from typing import Any, Union, Text + +from Crypto.PublicKey.RSA import _RSAobj + +class PKCS115_Cipher: + def __init__(self, key: _RSAobj) -> None: ... + def can_encrypt(self) -> bool: ... + def can_decrypt(self) -> bool: ... + rf: Any + def encrypt(self, message: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ct: bytes, sentinel: Any) -> bytes: ... + +def new(key: _RSAobj) -> PKCS115_Cipher: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi new file mode 100644 index 0000000..4c952c2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/XOR.pyi @@ -0,0 +1,16 @@ +from typing import Any, Union, Text + +__revision__: str + +class XORCipher: + block_size: int + key_size: int + def __init__(self, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ciphertext: bytes) -> bytes: ... + + +def new(key: Union[bytes, Text], *args, **kwargs) -> XORCipher: ... + +block_size: int +key_size: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi new file mode 100644 index 0000000..309f274 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/__init__.pyi @@ -0,0 +1,11 @@ +# Names in __all__ with no definition: +# AES +# ARC2 +# ARC4 +# Blowfish +# CAST +# DES +# DES3 +# PKCS1_OAEP +# PKCS1_v1_5 +# XOR diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi new file mode 100644 index 0000000..8286b7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Cipher/blockalgo.pyi @@ -0,0 +1,17 @@ +from typing import Any, Union, Text + +MODE_ECB: int +MODE_CBC: int +MODE_CFB: int +MODE_PGP: int +MODE_OFB: int +MODE_CTR: int +MODE_OPENPGP: int + +class BlockAlgo: + mode: int + block_size: int + IV: Any + def __init__(self, factory: Any, key: Union[bytes, Text], *args, **kwargs) -> None: ... + def encrypt(self, plaintext: Union[bytes, Text]) -> bytes: ... + def decrypt(self, ciphertext: bytes) -> bytes: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi new file mode 100644 index 0000000..5e2337d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/HMAC.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +digest_size: Any + +class HMAC: + digest_size: Any + digestmod: Any + outer: Any + inner: Any + def __init__(self, key, msg: Optional[Any] = ..., digestmod: Optional[Any] = ...) -> None: ... + def update(self, msg): ... + def copy(self): ... + def digest(self): ... + def hexdigest(self): ... + +def new(key, msg: Optional[Any] = ..., digestmod: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi new file mode 100644 index 0000000..1575b11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD2.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD2Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi new file mode 100644 index 0000000..644b3bd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD4.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD4Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi new file mode 100644 index 0000000..52261ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/MD5.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class MD5Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi new file mode 100644 index 0000000..3fe4ac5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/RIPEMD.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class RIPEMD160Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi new file mode 100644 index 0000000..145abd8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA1Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi new file mode 100644 index 0000000..fcd170f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA224.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA224Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi new file mode 100644 index 0000000..2ee9472 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA256.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA256Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi new file mode 100644 index 0000000..ce63a32 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA384.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA384Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi new file mode 100644 index 0000000..c59eb76 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/SHA512.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional +from Crypto.Hash.hashalgo import HashAlgo + +class SHA512Hash(HashAlgo): + oid: Any + digest_size: int + block_size: int + def __init__(self, data: Optional[Any] = ...) -> None: ... + def new(self, data: Optional[Any] = ...): ... + +def new(data: Optional[Any] = ...): ... + +digest_size: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi new file mode 100644 index 0000000..9af06f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/__init__.pyi @@ -0,0 +1,11 @@ +# Names in __all__ with no definition: +# HMAC +# MD2 +# MD4 +# MD5 +# RIPEMD +# SHA +# SHA224 +# SHA256 +# SHA384 +# SHA512 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi new file mode 100644 index 0000000..7c57e03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Hash/hashalgo.pyi @@ -0,0 +1,11 @@ +from typing import Any, Optional + +class HashAlgo: + digest_size: Any + block_size: Any + def __init__(self, hashFactory, data: Optional[Any] = ...) -> None: ... + def update(self, data): ... + def digest(self): ... + def hexdigest(self): ... + def copy(self): ... + def new(self, data: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi new file mode 100644 index 0000000..a7ae7d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/AllOrNothing.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +__revision__: str + +def isInt(x): ... + +class AllOrNothing: + def __init__(self, ciphermodule, mode: Optional[Any] = ..., IV: Optional[Any] = ...) -> None: ... + def digest(self, text): ... + def undigest(self, blocks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi new file mode 100644 index 0000000..d70e9f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/Chaffing.pyi @@ -0,0 +1,5 @@ +__revision__: str + +class Chaff: + def __init__(self, factor: float = ..., blocksper: int = ...) -> None: ... + def chaff(self, blocks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi new file mode 100644 index 0000000..a10d839 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/KDF.pyi @@ -0,0 +1,7 @@ +from typing import Any, Optional +from Crypto.Hash import SHA as SHA1 + +__revision__: str + +def PBKDF1(password, salt, dkLen, count: int = ..., hashAlgo: Optional[Any] = ...): ... +def PBKDF2(password, salt, dkLen: int = ..., count: int = ..., prf: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi new file mode 100644 index 0000000..e3744e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Protocol/__init__.pyi @@ -0,0 +1,4 @@ +# Names in __all__ with no definition: +# AllOrNothing +# Chaffing +# KDF diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi new file mode 100644 index 0000000..bc48d23 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/DSA.pyi @@ -0,0 +1,27 @@ +from typing import Any, Optional +from .pubkey import pubkey + +class _DSAobj(pubkey): + keydata: Any + implementation: Any + key: Any + def __init__(self, implementation, key) -> None: ... + def __getattr__(self, attrname): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def has_private(self): ... + def size(self): ... + def can_blind(self): ... + def can_encrypt(self): ... + def can_sign(self): ... + def publickey(self): ... + +class DSAImplementation: + error: Any + def __init__(self, **kwargs) -> None: ... + def generate(self, bits, randfunc: Optional[Any] = ..., progress_func: Optional[Any] = ...): ... + def construct(self, tup): ... + +generate: Any +construct: Any +error: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi new file mode 100644 index 0000000..1a256a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/ElGamal.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +from Crypto.PublicKey.pubkey import pubkey +from Crypto.PublicKey.pubkey import * # noqa: F403 + +class error(Exception): ... + +def generate(bits, randfunc, progress_func: Optional[Any] = ...): ... +def construct(tup): ... + +class ElGamalobj(pubkey): + keydata: Any + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def size(self): ... + def has_private(self): ... + def publickey(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi new file mode 100644 index 0000000..5ce7b91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/RSA.pyi @@ -0,0 +1,32 @@ +from typing import Any, Optional, Union, Text +from .pubkey import pubkey + +class _RSAobj(pubkey): + keydata: Any + implementation: Any + key: Any + def __init__(self, implementation, key, randfunc: Optional[Any] = ...) -> None: ... + def __getattr__(self, attrname): ... + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def has_private(self): ... + def size(self): ... + def can_blind(self): ... + def can_encrypt(self): ... + def can_sign(self): ... + def publickey(self): ... + def exportKey(self, format: str = ..., passphrase: Optional[Any] = ..., pkcs: int = ...): ... + +class RSAImplementation: + error: Any + def __init__(self, **kwargs) -> None: ... + def generate(self, bits, randfunc: Optional[Any] = ..., progress_func: Optional[Any] = ..., e: int = ...): ... + def construct(self, tup): ... + def importKey(self, externKey: Any, passphrase: Union[None, bytes, Text] = ...) -> _RSAobj: ... + +generate: Any +construct: Any +importKey: Any +error: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi new file mode 100644 index 0000000..36d9e94 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/__init__.pyi @@ -0,0 +1,4 @@ +# Names in __all__ with no definition: +# DSA +# ElGamal +# RSA diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi new file mode 100644 index 0000000..b9281ad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/PublicKey/pubkey.pyi @@ -0,0 +1,21 @@ +from Crypto.Util.number import * # noqa: F403 + +__revision__: str + +class pubkey: + def __init__(self) -> None: ... + def encrypt(self, plaintext, K): ... + def decrypt(self, ciphertext): ... + def sign(self, M, K): ... + def verify(self, M, signature): ... + def validate(self, M, signature): ... + def blind(self, M, B): ... + def unblind(self, M, B): ... + def can_sign(self): ... + def can_encrypt(self): ... + def can_blind(self): ... + def size(self): ... + def has_private(self): ... + def publickey(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi new file mode 100644 index 0000000..40149bf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaAccumulator.pyi @@ -0,0 +1,25 @@ +from typing import Any + +__revision__: str + +class FortunaPool: + digest_size: Any + def __init__(self) -> None: ... + def append(self, data): ... + def digest(self): ... + def hexdigest(self): ... + length: int + def reset(self): ... + +def which_pools(r): ... + +class FortunaAccumulator: + min_pool_size: int + reseed_interval: float + reseed_count: int + generator: Any + last_reseed: Any + pools: Any + def __init__(self) -> None: ... + def random_data(self, bytes): ... + def add_random_event(self, source_number, pool_number, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi new file mode 100644 index 0000000..047ac93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/FortunaGenerator.pyi @@ -0,0 +1,16 @@ +from typing import Any + +__revision__: str + +class AESGenerator: + block_size: Any + key_size: int + max_blocks_per_request: Any + counter: Any + key: Any + block_size_shift: Any + blocks_per_key: Any + max_bytes_per_request: Any + def __init__(self) -> None: ... + def reseed(self, seed): ... + def pseudo_random_data(self, bytes): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi new file mode 100644 index 0000000..1fbd51f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/SHAd256.pyi @@ -0,0 +1,13 @@ +from typing import Any, Optional + +class _SHAd256: + digest_size: Any + def __init__(self, internal_api_check, sha256_hash_obj) -> None: ... + def copy(self): ... + def digest(self): ... + def hexdigest(self): ... + def update(self, data): ... + +digest_size: Any + +def new(data: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/Fortuna/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi new file mode 100644 index 0000000..d1f1427 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/__init__.pyi @@ -0,0 +1 @@ +__revision__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi new file mode 100644 index 0000000..72df987 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/fallback.pyi @@ -0,0 +1,5 @@ +from .rng_base import BaseRNG + +class PythonOSURandomRNG(BaseRNG): + name: str + def __init__(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi new file mode 100644 index 0000000..bbaf740 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/posix.pyi @@ -0,0 +1,6 @@ +from typing import Any, Optional +from .rng_base import BaseRNG + +class DevURandomRNG(BaseRNG): + name: str + def __init__(self, devname: Optional[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi new file mode 100644 index 0000000..12e3d81 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/OSRNG/rng_base.pyi @@ -0,0 +1,11 @@ +__revision__: str + +class BaseRNG: + closed: bool + def __init__(self) -> None: ... + def __del__(self): ... + def __enter__(self): ... + def __exit__(self): ... + def close(self): ... + def flush(self): ... + def read(self, N: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi new file mode 100644 index 0000000..f30acfd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/__init__.pyi @@ -0,0 +1 @@ +def new(*args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi new file mode 100644 index 0000000..88ea62e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Random/random.pyi @@ -0,0 +1,17 @@ +from typing import Any, Optional + +class StrongRandom: + def __init__(self, rng: Optional[Any] = ..., randfunc: Optional[Any] = ...) -> None: ... + def getrandbits(self, k): ... + def randrange(self, *args): ... + def randint(self, a, b): ... + def choice(self, seq): ... + def shuffle(self, x): ... + def sample(self, population, k): ... + +getrandbits: Any +randrange: Any +randint: Any +choice: Any +shuffle: Any +sample: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi new file mode 100644 index 0000000..8341c2b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_PSS.pyi @@ -0,0 +1,9 @@ +from typing import Any, Optional + +class PSS_SigScheme: + def __init__(self, key, mgfunc, saltLen) -> None: ... + def can_sign(self): ... + def sign(self, mhash): ... + def verify(self, mhash, S): ... + +def new(key, mgfunc: Optional[Any] = ..., saltLen: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi new file mode 100644 index 0000000..4a2b225 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/PKCS1_v1_5.pyi @@ -0,0 +1,7 @@ +class PKCS115_SigScheme: + def __init__(self, key) -> None: ... + def can_sign(self): ... + def sign(self, mhash): ... + def verify(self, mhash, S): ... + +def new(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi new file mode 100644 index 0000000..560f06f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Signature/__init__.pyi @@ -0,0 +1,3 @@ +# Names in __all__ with no definition: +# PKCS1_PSS +# PKCS1_v1_5 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi new file mode 100644 index 0000000..4aae7f2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/Counter.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def new(nbits, prefix: Any = ..., suffix: Any = ..., initial_value: int = ..., overflow: int = ..., little_endian: bool = ..., allow_wraparound: bool = ..., disable_shortcut: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi new file mode 100644 index 0000000..e1e8f5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/RFC1751.pyi @@ -0,0 +1,9 @@ +from typing import Any + +__revision__: str +binary: Any + +def key_to_english(key): ... +def english_to_key(s): ... + +wordlist: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi new file mode 100644 index 0000000..1747299 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/__init__.pyi @@ -0,0 +1,6 @@ +# Names in __all__ with no definition: +# RFC1751 +# asn1 +# number +# randpool +# strxor diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi new file mode 100644 index 0000000..03d4b29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/asn1.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional + +class DerObject: + typeTags: Any + typeTag: Any + payload: Any + def __init__(self, ASN1Type: Optional[Any] = ..., payload: Any = ...) -> None: ... + def isType(self, ASN1Type): ... + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerInteger(DerObject): + value: Any + def __init__(self, value: int = ...) -> None: ... + payload: Any + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerSequence(DerObject): + def __init__(self, startSeq: Optional[Any] = ...) -> None: ... + def __delitem__(self, n): ... + def __getitem__(self, n): ... + def __setitem__(self, key, value): ... + def __setslice__(self, i, j, sequence): ... + def __delslice__(self, i, j): ... + def __getslice__(self, i, j): ... + def __len__(self): ... + def append(self, item): ... + def hasInts(self): ... + def hasOnlyInts(self): ... + payload: Any + def encode(self): ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerOctetString(DerObject): + payload: Any + def __init__(self, value: Any = ...) -> None: ... + def decode(self, derEle, noLeftOvers: int = ...): ... + +class DerNull(DerObject): + def __init__(self) -> None: ... + +class DerObjectId(DerObject): + def __init__(self) -> None: ... + def decode(self, derEle, noLeftOvers: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi new file mode 100644 index 0000000..4ffbd03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/number.pyi @@ -0,0 +1,22 @@ +from typing import Any, Optional +from warnings import warn as _warn + +__revision__: str +bignum: Any + +def size(N): ... +def getRandomNumber(N, randfunc: Optional[Any] = ...): ... +def getRandomInteger(N, randfunc: Optional[Any] = ...): ... +def getRandomRange(a, b, randfunc: Optional[Any] = ...): ... +def getRandomNBitInteger(N, randfunc: Optional[Any] = ...): ... +def GCD(x, y): ... +def inverse(u, v): ... +def getPrime(N, randfunc: Optional[Any] = ...): ... +def getStrongPrime(N, e: int = ..., false_positive_prob: float = ..., randfunc: Optional[Any] = ...): ... +def isPrime(N, false_positive_prob: float = ..., randfunc: Optional[Any] = ...): ... +def long_to_bytes(n, blocksize: int = ...): ... +def bytes_to_long(s): ... +def long2str(n, blocksize: int = ...): ... +def str2long(s): ... + +sieve_base: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi new file mode 100644 index 0000000..4d90f92 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/randpool.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +__revision__: str + +class RandomPool: + bytes: Any + bits: Any + entropy: Any + def __init__(self, numbytes: int = ..., cipher: Optional[Any] = ..., hash: Optional[Any] = ..., file: Optional[Any] = ...) -> None: ... + def get_bytes(self, N): ... + def randomize(self, N: int = ...): ... + def stir(self, s: str = ...): ... + def stir_n(self, N: int = ...): ... + def add_event(self, s: str = ...): ... + def getBytes(self, N): ... + def addEvent(self, event, s: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi new file mode 100644 index 0000000..cb6269b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/Util/strxor.pyi @@ -0,0 +1,2 @@ +def strxor(*args, **kwargs): ... +def strxor_c(*args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi new file mode 100644 index 0000000..6d8e124 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/__init__.pyi @@ -0,0 +1,7 @@ +# Names in __all__ with no definition: +# Cipher +# Hash +# Protocol +# PublicKey +# Signature +# Util diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi new file mode 100644 index 0000000..b77e975 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/Crypto/pct_warnings.pyi @@ -0,0 +1,7 @@ +class CryptoWarning(Warning): ... +class CryptoDeprecationWarning(DeprecationWarning, CryptoWarning): ... +class CryptoRuntimeWarning(RuntimeWarning, CryptoWarning): ... +class RandomPool_DeprecationWarning(CryptoDeprecationWarning): ... +class ClockRewindWarning(CryptoRuntimeWarning): ... +class GetRandomNumber_DeprecationWarning(CryptoDeprecationWarning): ... +class PowmInsecureWarning(CryptoRuntimeWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi new file mode 100644 index 0000000..07edff6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/atomicwrites/__init__.pyi @@ -0,0 +1,13 @@ +from typing import AnyStr, Callable, ContextManager, IO, Optional, Text, Type + +def replace_atomic(src: AnyStr, dst: AnyStr) -> None: ... +def move_atomic(src: AnyStr, dst: AnyStr) -> None: ... +class AtomicWriter(object): + def __init__(self, path: AnyStr, mode: Text = ..., overwrite: bool = ...) -> None: ... + def open(self) -> ContextManager[IO]: ... + def _open(self, get_fileobject: Callable) -> ContextManager[IO]: ... + def get_fileobject(self, dir: Optional[AnyStr] = ..., **kwargs) -> IO: ... + def sync(self, f: IO) -> None: ... + def commit(self, f: IO) -> None: ... + def rollback(self, f: IO) -> None: ... +def atomic_write(path: AnyStr, writer_cls: Type[AtomicWriter] = ..., **cls_kwargs: object) -> ContextManager[IO]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi new file mode 100644 index 0000000..fcb93b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/__init__.pyi @@ -0,0 +1,255 @@ +from typing import ( + Any, + Callable, + Dict, + Generic, + List, + Optional, + Sequence, + Mapping, + Tuple, + Type, + TypeVar, + Union, + overload, +) + +# `import X as X` is required to make these public +from . import exceptions as exceptions +from . import filters as filters +from . import converters as converters +from . import validators as validators + +_T = TypeVar("_T") +_C = TypeVar("_C", bound=type) + +_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] +_ConverterType = Callable[[Any], _T] +_FilterType = Callable[[Attribute[_T], _T], bool] +# FIXME: in reality, if multiple validators are passed they must be in a list or tuple, +# but those are invariant and so would prevent subtypes of _ValidatorType from working +# when passed in a list or tuple. +_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] + +# _make -- + +NOTHING: object + +# NOTE: Factory lies about its return type to make this possible: `x: List[int] = Factory(list)` +# Work around mypy issue #4554 in the common case by using an overload. +@overload +def Factory(factory: Callable[[], _T]) -> _T: ... +@overload +def Factory( + factory: Union[Callable[[Any], _T], Callable[[], _T]], + takes_self: bool = ..., +) -> _T: ... + +class Attribute(Generic[_T]): + name: str + default: Optional[_T] + validator: Optional[_ValidatorType[_T]] + repr: bool + cmp: bool + hash: Optional[bool] + init: bool + converter: Optional[_ConverterType[_T]] + metadata: Dict[Any, Any] + type: Optional[Type[_T]] + kw_only: bool + def __lt__(self, x: Attribute[_T]) -> bool: ... + def __le__(self, x: Attribute[_T]) -> bool: ... + def __gt__(self, x: Attribute[_T]) -> bool: ... + def __ge__(self, x: Attribute[_T]) -> bool: ... + +# NOTE: We had several choices for the annotation to use for type arg: +# 1) Type[_T] +# - Pros: Handles simple cases correctly +# - Cons: Might produce less informative errors in the case of conflicting TypeVars +# e.g. `attr.ib(default='bad', type=int)` +# 2) Callable[..., _T] +# - Pros: Better error messages than #1 for conflicting TypeVars +# - Cons: Terrible error messages for validator checks. +# e.g. attr.ib(type=int, validator=validate_str) +# -> error: Cannot infer function type argument +# 3) type (and do all of the work in the mypy plugin) +# - Pros: Simple here, and we could customize the plugin with our own errors. +# - Cons: Would need to write mypy plugin code to handle all the cases. +# We chose option #1. + +# `attr` lies about its return type to make the following possible: +# attr() -> Any +# attr(8) -> int +# attr(validator=) -> Whatever the callable expects. +# This makes this type of assignments possible: +# x: int = attr(8) +# +# This form catches explicit None or no default but with no other arguments returns Any. +@overload +def attrib( + default: None = ..., + validator: None = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: None = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: None = ..., + converter: None = ..., + factory: None = ..., + kw_only: bool = ..., +) -> Any: ... + +# This form catches an explicit None or no default and infers the type from the other arguments. +@overload +def attrib( + default: None = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> _T: ... + +# This form catches an explicit default argument. +@overload +def attrib( + default: _T, + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: Optional[Type[_T]] = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> _T: ... + +# This form covers type=non-Type: e.g. forward references (str), Any +@overload +def attrib( + default: Optional[_T] = ..., + validator: Optional[_ValidatorArgType[_T]] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + convert: Optional[_ConverterType[_T]] = ..., + metadata: Optional[Mapping[Any, Any]] = ..., + type: object = ..., + converter: Optional[_ConverterType[_T]] = ..., + factory: Optional[Callable[[], _T]] = ..., + kw_only: bool = ..., +) -> Any: ... +@overload +def attrs( + maybe_cls: _C, + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> _C: ... +@overload +def attrs( + maybe_cls: None = ..., + these: Optional[Dict[str, Any]] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> Callable[[_C], _C]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +class _Fields(Tuple[Attribute[Any], ...]): + def __getattr__(self, name: str) -> Attribute[Any]: ... + +def fields(cls: type) -> _Fields: ... +def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... +def validate(inst: Any) -> None: ... + +# TODO: add support for returning a proper attrs class from the mypy plugin +# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', [attr.ib()])` is valid +def make_class( + name: str, + attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], + bases: Tuple[type, ...] = ..., + repr_ns: Optional[str] = ..., + repr: bool = ..., + cmp: bool = ..., + hash: Optional[bool] = ..., + init: bool = ..., + slots: bool = ..., + frozen: bool = ..., + weakref_slot: bool = ..., + str: bool = ..., + auto_attribs: bool = ..., + kw_only: bool = ..., + cache_hash: bool = ..., + auto_exc: bool = ..., +) -> type: ... + +# _funcs -- + +# TODO: add support for returning TypedDict from the mypy plugin +# FIXME: asdict/astuple do not honor their factory args. waiting on one of these: +# https://github.com/python/mypy/issues/4236 +# https://github.com/python/typing/issues/253 +def asdict( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + dict_factory: Type[Mapping[Any, Any]] = ..., + retain_collection_types: bool = ..., +) -> Dict[str, Any]: ... + +# TODO: add support for returning NamedTuple from the mypy plugin +def astuple( + inst: Any, + recurse: bool = ..., + filter: Optional[_FilterType[Any]] = ..., + tuple_factory: Type[Sequence[Any]] = ..., + retain_collection_types: bool = ..., +) -> Tuple[Any, ...]: ... +def has(cls: type) -> bool: ... +def assoc(inst: _T, **changes: Any) -> _T: ... +def evolve(inst: _T, **changes: Any) -> _T: ... + +# _config -- + +def set_run_validators(run: bool) -> None: ... +def get_run_validators() -> bool: ... + +# aliases -- + +s = attributes = attrs +ib = attr = attrib +dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi new file mode 100644 index 0000000..63b2a38 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/converters.pyi @@ -0,0 +1,12 @@ +from typing import TypeVar, Optional, Callable, overload +from . import _ConverterType + +_T = TypeVar("_T") + +def optional( + converter: _ConverterType[_T] +) -> _ConverterType[Optional[_T]]: ... +@overload +def default_if_none(default: _T) -> _ConverterType[_T]: ... +@overload +def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi new file mode 100644 index 0000000..48fffcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/exceptions.pyi @@ -0,0 +1,7 @@ +class FrozenInstanceError(AttributeError): + msg: str = ... + +class AttrsAttributeNotFoundError(ValueError): ... +class NotAnAttrsClassError(ValueError): ... +class DefaultAlreadySetError(RuntimeError): ... +class UnannotatedAttributeError(RuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi new file mode 100644 index 0000000..68368fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/filters.pyi @@ -0,0 +1,5 @@ +from typing import Union, Any +from . import Attribute, _FilterType + +def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... +def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi new file mode 100644 index 0000000..01af068 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/attr/validators.pyi @@ -0,0 +1,24 @@ +from typing import Container, List, Union, TypeVar, Type, Any, Optional, Tuple +from . import _ValidatorType + +_T = TypeVar("_T") + +def instance_of( + type: Union[Tuple[Type[_T], ...], Type[_T]] +) -> _ValidatorType[_T]: ... +def provides(interface: Any) -> _ValidatorType[Any]: ... +def optional( + validator: Union[_ValidatorType[_T], List[_ValidatorType[_T]]] +) -> _ValidatorType[Optional[_T]]: ... +def in_(options: Container[_T]) -> _ValidatorType[_T]: ... +def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ... +def deep_iterable( + member_validator: _ValidatorType[_T], + iterable_validator: Optional[_ValidatorType[_T]], +) -> _ValidatorType[_T]: ... +def deep_mapping( + key_validator: _ValidatorType[_T], + value_validator: _ValidatorType[_T], + mapping_validator: Optional[_ValidatorType[_T]], +) -> _ValidatorType[_T]: ... +def is_callable() -> _ValidatorType[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi new file mode 100644 index 0000000..c219980 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports/ssl_match_hostname.pyi @@ -0,0 +1,3 @@ +class CertificateError(ValueError): ... + +def match_hostname(cert, hostname): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi new file mode 100644 index 0000000..b48ae33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/backports_abc.pyi @@ -0,0 +1,15 @@ +from typing import Any + +def mk_gen(): ... +def mk_awaitable(): ... +def mk_coroutine(): ... + +Generator: Any +Awaitable: Any +Coroutine: Any + +def isawaitable(obj): ... + +PATCHED: Any + +def patch(patch_inspect: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi new file mode 100644 index 0000000..3a1ad2c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/__init__.pyi @@ -0,0 +1,32 @@ +from typing import Any, Container, Iterable, Optional, Text + +from bleach.linkifier import DEFAULT_CALLBACKS as DEFAULT_CALLBACKS, Linker as Linker +from bleach.sanitizer import ( + ALLOWED_ATTRIBUTES as ALLOWED_ATTRIBUTES, + ALLOWED_PROTOCOLS as ALLOWED_PROTOCOLS, + ALLOWED_STYLES as ALLOWED_STYLES, + ALLOWED_TAGS as ALLOWED_TAGS, + Cleaner as Cleaner, +) + +from .linkifier import _Callback + +__releasedate__: Text +__version__: Text +VERSION: Any # packaging.version.Version + +def clean( + text: Text, + tags: Container[Text] = ..., + attributes: Any = ..., + styles: Container[Text] = ..., + protocols: Container[Text] = ..., + strip: bool = ..., + strip_comments: bool = ..., +) -> Text: ... +def linkify( + text: Text, + callbacks: Iterable[_Callback] = ..., + skip_tags: Optional[Container[Text]] = ..., + parse_email: bool = ..., +) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi new file mode 100644 index 0000000..25c5c01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/callbacks.pyi @@ -0,0 +1,6 @@ +from typing import MutableMapping, Any, Text + +_Attrs = MutableMapping[Any, Text] + +def nofollow(attrs: _Attrs, new: bool = ...) -> _Attrs: ... +def target_blank(attrs: _Attrs, new: bool = ...) -> _Attrs: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi new file mode 100644 index 0000000..f6ef3ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/linkifier.pyi @@ -0,0 +1,31 @@ +from typing import Any, Container, Iterable, List, MutableMapping, Optional, Pattern, Protocol, Text + +_Attrs = MutableMapping[Any, Text] + +class _Callback(Protocol): + def __call__(self, attrs: _Attrs, new: bool = ...) -> _Attrs: ... + +DEFAULT_CALLBACKS: List[_Callback] + +TLDS: List[Text] + +def build_url_re(tlds: Iterable[Text] = ..., protocols: Iterable[Text] = ...) -> Pattern[Text]: ... + +URL_RE: Pattern[Text] +PROTO_RE: Pattern[Text] +EMAIL_RE: Pattern[Text] + +class Linker(object): + def __init__( + self, + callbacks: Iterable[_Callback] = ..., + skip_tags: Optional[Container[Text]] = ..., + parse_email: bool = ..., + url_re: Pattern[Text] = ..., + email_re: Pattern[Text] = ..., + recognized_tags: Optional[Container[Text]] = ..., + ) -> None: ... + def linkify(self, text: Text) -> Text: ... + +class LinkifyFilter(object): # TODO: derives from html5lib.Filter + def __getattr__(self, item: str) -> Any: ... # incomplete diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi new file mode 100644 index 0000000..c6a7283 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/sanitizer.pyi @@ -0,0 +1,34 @@ +from typing import Any, Callable, Container, Dict, Iterable, List, Optional, Pattern, Text, Type, Union + +ALLOWED_TAGS: List[Text] +ALLOWED_ATTRIBUTES: Dict[Text, List[Text]] +ALLOWED_STYLES: List[Text] +ALLOWED_PROTOCOLS: List[Text] + +INVISIBLE_CHARACTERS: Text +INVISIBLE_CHARACTERS_RE: Pattern[Text] +INVISIBLE_REPLACEMENT_CHAR: Text + +# A html5lib Filter class +_Filter = Any + +class Cleaner(object): + def __init__( + self, + tags: Container[Text] = ..., + attributes: Any = ..., + styles: Container[Text] = ..., + protocols: Container[Text] = ..., + strip: bool = ..., + strip_comments: bool = ..., + filters: Optional[Iterable[_Filter]] = ..., + ) -> None: ... + def clean(self, text: Text) -> Text: ... + +_AttributeFilter = Callable[[Text, Text, Text], bool] +_AttributeDict = Dict[Text, Union[Container[Text], _AttributeFilter]] + +def attribute_filter_factory(attributes: Union[_AttributeFilter, _AttributeDict, Container[Text]]) -> _AttributeFilter: ... + +class BleachSanitizerFilter(object): # TODO: derives from html5lib.sanitizer.Filter + def __getattr__(self, item: str) -> Any: ... # incomplete diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi new file mode 100644 index 0000000..984c554 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/bleach/utils.pyi @@ -0,0 +1,8 @@ +from collections import OrderedDict +from typing import overload, Mapping, Any, Text + +@overload +def alphabetize_attributes(attrs: None) -> None: ... +@overload +def alphabetize_attributes(attrs: Mapping[Any, Text]) -> OrderedDict[Any, Text]: ... +def force_unicode(text: Text) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi new file mode 100644 index 0000000..8426785 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/__init__.pyi @@ -0,0 +1,76 @@ +from typing import Any, Optional, Text +import logging + +from .s3.connection import S3Connection + +Version: Any +UserAgent: Any +config: Any +BUCKET_NAME_RE: Any +TOO_LONG_DNS_NAME_COMP: Any +GENERATION_RE: Any +VERSION_RE: Any +ENDPOINTS_PATH: Any + +def init_logging(): ... + +class NullHandler(logging.Handler): + def emit(self, record): ... + +log: Any +perflog: Any + +def set_file_logger(name, filepath, level: Any = ..., format_string: Optional[Any] = ...): ... +def set_stream_logger(name, level: Any = ..., format_string: Optional[Any] = ...): ... +def connect_sqs(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_s3(aws_access_key_id: Optional[Text] = ..., aws_secret_access_key: Optional[Text] = ..., **kwargs) -> S3Connection: ... +def connect_gs(gs_access_key_id: Optional[Any] = ..., gs_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_elb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_autoscale(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudwatch(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sdb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_fps(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_mturk(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudfront(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_vpc(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_rds(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_rds2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_emr(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sns(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_iam(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_route53(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudformation(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_euca(host: Optional[Any] = ..., aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., port: int = ..., path: str = ..., is_secure: bool = ..., **kwargs): ... +def connect_glacier(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2_endpoint(url, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_walrus(host: Optional[Any] = ..., aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., port: int = ..., path: str = ..., is_secure: bool = ..., **kwargs): ... +def connect_ses(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_sts(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ia(ia_access_key_id: Optional[Any] = ..., ia_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., **kwargs): ... +def connect_dynamodb(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_swf(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudsearch(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudsearch2(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., sign_request: bool = ..., **kwargs): ... +def connect_cloudsearchdomain(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_beanstalk(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_elastictranscoder(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_opsworks(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_redshift(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_support(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudtrail(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_directconnect(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_kinesis(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_logs(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_route53domains(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cognito_identity(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cognito_sync(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_kms(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_awslambda(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_codedeploy(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_configservice(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_cloudhsm(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_ec2containerservice(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def connect_machinelearning(aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., **kwargs): ... +def storage_uri(uri_str, default_scheme: str = ..., debug: int = ..., validate: bool = ..., bucket_storage_uri_class: Any = ..., suppress_consec_slashes: bool = ..., is_latest: bool = ...): ... +def storage_uri_for_key(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi new file mode 100644 index 0000000..033d1d7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth.pyi @@ -0,0 +1,108 @@ +from typing import Any, Optional +from boto.auth_handler import AuthHandler + +SIGV4_DETECT: Any + +class HmacKeys: + host: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def algorithm(self): ... + def sign_string(self, string_to_sign): ... + +class AnonAuthHandler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV1Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV2Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def update_provider(self, provider): ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV3Handler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request, **kwargs): ... + +class HmacAuthV3HTTPHandler(AuthHandler, HmacKeys): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def headers_to_sign(self, http_request): ... + def canonical_headers(self, headers_to_sign): ... + def string_to_sign(self, http_request): ... + def add_auth(self, req, **kwargs): ... + +class HmacAuthV4Handler(AuthHandler, HmacKeys): + capability: Any + service_name: Any + region_name: Any + def __init__(self, host, config, provider, service_name: Optional[Any] = ..., region_name: Optional[Any] = ...) -> None: ... + def headers_to_sign(self, http_request): ... + def host_header(self, host, http_request): ... + def query_string(self, http_request): ... + def canonical_query_string(self, http_request): ... + def canonical_headers(self, headers_to_sign): ... + def signed_headers(self, headers_to_sign): ... + def canonical_uri(self, http_request): ... + def payload(self, http_request): ... + def canonical_request(self, http_request): ... + def scope(self, http_request): ... + def split_host_parts(self, host): ... + def determine_region_name(self, host): ... + def determine_service_name(self, host): ... + def credential_scope(self, http_request): ... + def string_to_sign(self, http_request, canonical_request): ... + def signature(self, http_request, string_to_sign): ... + def add_auth(self, req, **kwargs): ... + +class S3HmacAuthV4Handler(HmacAuthV4Handler, AuthHandler): + capability: Any + region_name: Any + def __init__(self, *args, **kwargs) -> None: ... + def clean_region_name(self, region_name): ... + def canonical_uri(self, http_request): ... + def canonical_query_string(self, http_request): ... + def host_header(self, host, http_request): ... + def headers_to_sign(self, http_request): ... + def determine_region_name(self, host): ... + def determine_service_name(self, host): ... + def mangle_path_and_params(self, req): ... + def payload(self, http_request): ... + def add_auth(self, req, **kwargs): ... + def presign(self, req, expires, iso_date: Optional[Any] = ...): ... + +class STSAnonHandler(AuthHandler): + capability: Any + def add_auth(self, http_request, **kwargs): ... + +class QuerySignatureHelper(HmacKeys): + def add_auth(self, http_request, **kwargs): ... + +class QuerySignatureV0AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + +class QuerySignatureV1AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + def __init__(self, *args, **kw) -> None: ... + +class QuerySignatureV2AuthHandler(QuerySignatureHelper, AuthHandler): + SignatureVersion: int + capability: Any + +class POSTPathQSV2AuthHandler(QuerySignatureV2AuthHandler, AuthHandler): + capability: Any + def add_auth(self, req, **kwargs): ... + +def get_auth_handler(host, config, provider, requested_capability: Optional[Any] = ...): ... +def detect_potential_sigv4(func): ... +def detect_potential_s3sigv4(func): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi new file mode 100644 index 0000000..018e6d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/auth_handler.pyi @@ -0,0 +1,9 @@ +from typing import Any +from boto.plugin import Plugin + +class NotReadyToAuthenticate(Exception): ... + +class AuthHandler(Plugin): + capability: Any + def __init__(self, host, config, provider) -> None: ... + def add_auth(self, http_request): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi new file mode 100644 index 0000000..ce99703 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/compat.pyi @@ -0,0 +1,17 @@ +import sys + +from typing import Any +from base64 import encodestring as encodebytes + +from six.moves import http_client + +expanduser: Any + +if sys.version_info >= (3, 0): + StandardError = Exception +else: + from __builtin__ import StandardError as StandardError + +long_type: Any +unquote_str: Any +parse_qs_safe: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi new file mode 100644 index 0000000..820d6e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/connection.pyi @@ -0,0 +1,115 @@ +from typing import Any, Dict, Optional, Text +from six.moves import http_client + +HAVE_HTTPS_CONNECTION: bool +ON_APP_ENGINE: Any +PORTS_BY_SECURITY: Any +DEFAULT_CA_CERTS_FILE: Any + +class HostConnectionPool: + queue: Any + def __init__(self) -> None: ... + def size(self): ... + def put(self, conn): ... + def get(self): ... + def clean(self): ... + +class ConnectionPool: + CLEAN_INTERVAL: float + STALE_DURATION: float + host_to_pool: Any + last_clean_time: float + mutex: Any + def __init__(self) -> None: ... + def size(self): ... + def get_http_connection(self, host, port, is_secure): ... + def put_http_connection(self, host, port, is_secure, conn): ... + def clean(self): ... + +class HTTPRequest: + method: Any + protocol: Any + host: Any + port: Any + path: Any + auth_path: Any + params: Any + headers: Any + body: Any + def __init__(self, method, protocol, host, port, path, auth_path, params, headers, body) -> None: ... + def authorize(self, connection, **kwargs): ... + +class HTTPResponse(http_client.HTTPResponse): + def __init__(self, *args, **kwargs) -> None: ... + def read(self, amt: Optional[Any] = ...): ... + +class AWSAuthConnection: + suppress_consec_slashes: Any + num_retries: int + is_secure: Any + https_validate_certificates: Any + ca_certificates_file: Any + port: Any + http_exceptions: Any + http_unretryable_exceptions: Any + socket_exception_values: Any + https_connection_factory: Any + protocol: str + host: Any + path: Any + debug: Any + host_header: Any + http_connection_kwargs: Any + provider: Any + auth_service_name: Any + request_hook: Any + def __init__(self, host, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., path: str = ..., provider: str = ..., security_token: Optional[Any] = ..., suppress_consec_slashes: bool = ..., validate_certs: bool = ..., profile_name: Optional[Any] = ...) -> None: ... + auth_region_name: Any + @property + def connection(self): ... + @property + def aws_access_key_id(self): ... + @property + def gs_access_key_id(self) -> Any: ... + access_key: Any + @property + def aws_secret_access_key(self): ... + @property + def gs_secret_access_key(self): ... + secret_key: Any + @property + def profile_name(self): ... + def get_path(self, path: str = ...): ... + def server_name(self, port: Optional[Any] = ...): ... + proxy: Any + proxy_port: Any + proxy_user: Any + proxy_pass: Any + no_proxy: Any + use_proxy: Any + def handle_proxy(self, proxy, proxy_port, proxy_user, proxy_pass): ... + def get_http_connection(self, host, port, is_secure): ... + def skip_proxy(self, host): ... + def new_http_connection(self, host, port, is_secure): ... + def put_http_connection(self, host, port, is_secure, connection): ... + def proxy_ssl(self, host: Optional[Any] = ..., port: Optional[Any] = ...): ... + def prefix_proxy_to_path(self, path, host: Optional[Any] = ...): ... + def get_proxy_auth_header(self): ... + def get_proxy_url_with_auth(self): ... + def set_host_header(self, request): ... + def set_request_hook(self, hook): ... + def build_base_http_request(self, method, path, auth_path, params: Optional[Any] = ..., headers: Optional[Any] = ..., data: str = ..., host: Optional[Any] = ...): ... + def make_request(self, method, path, headers: Optional[Any] = ..., data: str = ..., host: Optional[Any] = ..., auth_path: Optional[Any] = ..., sender: Optional[Any] = ..., override_num_retries: Optional[Any] = ..., params: Optional[Any] = ..., retry_handler: Optional[Any] = ...): ... + def close(self): ... + +class AWSQueryConnection(AWSAuthConnection): + APIVersion: str + ResponseError: Any + def __init__(self, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., host: Optional[Any] = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., path: str = ..., security_token: Optional[Any] = ..., validate_certs: bool = ..., profile_name: Optional[Any] = ..., provider: str = ...) -> None: ... + def get_utf8_value(self, value): ... + def make_request(self, action, params: Optional[Any] = ..., path: str = ..., verb: str = ..., *args, **kwargs): ... # type: ignore # https://github.com/python/mypy/issues/1237 + def build_list_params(self, params, items, label): ... + def build_complex_list_params(self, params, items, label, names): ... + def get_list(self, action, params, markers, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... + def get_object(self, action, params, cls, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... + def get_status(self, action, params, path: str = ..., parent: Optional[Any] = ..., verb: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi new file mode 100644 index 0000000..d671c90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/ec2/__init__.pyi @@ -0,0 +1,7 @@ +from typing import Any + +RegionData: Any + +def regions(**kw_params): ... +def connect_to_region(region_name, **kw_params): ... +def get_region(region_name, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi new file mode 100644 index 0000000..16cf5b4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/elb/__init__.pyi @@ -0,0 +1,39 @@ +from typing import Any +from boto.connection import AWSQueryConnection + +RegionData: Any + +def regions(): ... +def connect_to_region(region_name, **kw_params): ... + +class ELBConnection(AWSQueryConnection): + APIVersion: Any + DefaultRegionName: Any + DefaultRegionEndpoint: Any + region: Any + def __init__(self, aws_access_key_id=..., aws_secret_access_key=..., is_secure=..., port=..., proxy=..., proxy_port=..., proxy_user=..., proxy_pass=..., debug=..., https_connection_factory=..., region=..., path=..., security_token=..., validate_certs=..., profile_name=...) -> None: ... + def build_list_params(self, params, items, label): ... + def get_all_load_balancers(self, load_balancer_names=..., marker=...): ... + def create_load_balancer(self, name, zones, listeners=..., subnets=..., security_groups=..., scheme=..., complex_listeners=...): ... + def create_load_balancer_listeners(self, name, listeners=..., complex_listeners=...): ... + def delete_load_balancer(self, name): ... + def delete_load_balancer_listeners(self, name, ports): ... + def enable_availability_zones(self, load_balancer_name, zones_to_add): ... + def disable_availability_zones(self, load_balancer_name, zones_to_remove): ... + def modify_lb_attribute(self, load_balancer_name, attribute, value): ... + def get_all_lb_attributes(self, load_balancer_name): ... + def get_lb_attribute(self, load_balancer_name, attribute): ... + def register_instances(self, load_balancer_name, instances): ... + def deregister_instances(self, load_balancer_name, instances): ... + def describe_instance_health(self, load_balancer_name, instances=...): ... + def configure_health_check(self, name, health_check): ... + def set_lb_listener_SSL_certificate(self, lb_name, lb_port, ssl_certificate_id): ... + def create_app_cookie_stickiness_policy(self, name, lb_name, policy_name): ... + def create_lb_cookie_stickiness_policy(self, cookie_expiration_period, lb_name, policy_name): ... + def create_lb_policy(self, lb_name, policy_name, policy_type, policy_attributes): ... + def delete_lb_policy(self, lb_name, policy_name): ... + def set_lb_policies_of_listener(self, lb_name, lb_port, policies): ... + def set_lb_policies_of_backend_server(self, lb_name, instance_port, policies): ... + def apply_security_groups_to_lb(self, name, security_groups): ... + def attach_lb_to_subnets(self, name, subnets): ... + def detach_lb_from_subnets(self, name, subnets): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi new file mode 100644 index 0000000..e83a074 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/exception.pyi @@ -0,0 +1,146 @@ +from typing import Any, Optional +from boto.compat import StandardError + +class BotoClientError(StandardError): + reason: Any + def __init__(self, reason, *args) -> None: ... + +class SDBPersistenceError(StandardError): ... +class StoragePermissionsError(BotoClientError): ... +class S3PermissionsError(StoragePermissionsError): ... +class GSPermissionsError(StoragePermissionsError): ... + +class BotoServerError(StandardError): + status: Any + reason: Any + body: Any + request_id: Any + error_code: Any + message: str + box_usage: Any + def __init__(self, status, reason, body: Optional[Any] = ..., *args) -> None: ... + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class ConsoleOutput: + parent: Any + instance_id: Any + timestamp: Any + comment: Any + output: Any + def __init__(self, parent: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class StorageCreateError(BotoServerError): + bucket: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def endElement(self, name, value, connection): ... + +class S3CreateError(StorageCreateError): ... +class GSCreateError(StorageCreateError): ... +class StorageCopyError(BotoServerError): ... +class S3CopyError(StorageCopyError): ... +class GSCopyError(StorageCopyError): ... + +class SQSError(BotoServerError): + detail: Any + type: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class SQSDecodeError(BotoClientError): + message: Any + def __init__(self, reason, message) -> None: ... + +class StorageResponseError(BotoServerError): + resource: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class S3ResponseError(StorageResponseError): ... +class GSResponseError(StorageResponseError): ... + +class EC2ResponseError(BotoServerError): + errors: Any + def __init__(self, status, reason, body: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + request_id: Any + def endElement(self, name, value, connection): ... + +class JSONResponseError(BotoServerError): + status: Any + reason: Any + body: Any + error_message: Any + error_code: Any + def __init__(self, status, reason, body: Optional[Any] = ..., *args) -> None: ... + +class DynamoDBResponseError(JSONResponseError): ... +class SWFResponseError(JSONResponseError): ... +class EmrResponseError(BotoServerError): ... + +class _EC2Error: + connection: Any + error_code: Any + error_message: Any + def __init__(self, connection: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class SDBResponseError(BotoServerError): ... +class AWSConnectionError(BotoClientError): ... +class StorageDataError(BotoClientError): ... +class S3DataError(StorageDataError): ... +class GSDataError(StorageDataError): ... + +class InvalidUriError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class InvalidAclError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class InvalidCorsError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class NoAuthHandlerFound(Exception): ... + +class InvalidLifecycleConfigError(Exception): + message: Any + def __init__(self, message) -> None: ... + +class ResumableTransferDisposition: + START_OVER: str + WAIT_BEFORE_RETRY: str + ABORT_CUR_PROCESS: str + ABORT: str + +class ResumableUploadException(Exception): + message: Any + disposition: Any + def __init__(self, message, disposition) -> None: ... + +class ResumableDownloadException(Exception): + message: Any + disposition: Any + def __init__(self, message, disposition) -> None: ... + +class TooManyRecordsException(Exception): + message: Any + def __init__(self, message) -> None: ... + +class PleaseRetryException(Exception): + message: Any + response: Any + def __init__(self, message, response: Optional[Any] = ...) -> None: ... + +class InvalidInstanceMetadataError(Exception): + MSG: str + def __init__(self, msg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi new file mode 100644 index 0000000..41fff60 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/__init__.pyi @@ -0,0 +1,5 @@ +from typing import List +import boto.regioninfo + +def regions() -> List[boto.regioninfo.RegionInfo]: ... +def connect_to_region(region_name, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi new file mode 100644 index 0000000..5ac2ecd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/exceptions.pyi @@ -0,0 +1,17 @@ +from boto.exception import BotoServerError + +class InvalidGrantTokenException(BotoServerError): ... +class DisabledException(BotoServerError): ... +class LimitExceededException(BotoServerError): ... +class DependencyTimeoutException(BotoServerError): ... +class InvalidMarkerException(BotoServerError): ... +class AlreadyExistsException(BotoServerError): ... +class InvalidCiphertextException(BotoServerError): ... +class KeyUnavailableException(BotoServerError): ... +class InvalidAliasNameException(BotoServerError): ... +class UnsupportedOperationException(BotoServerError): ... +class InvalidArnException(BotoServerError): ... +class KMSInternalException(BotoServerError): ... +class InvalidKeyUsageException(BotoServerError): ... +class MalformedPolicyDocumentException(BotoServerError): ... +class NotFoundException(BotoServerError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi new file mode 100644 index 0000000..f48ce66 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/kms/layer1.pyi @@ -0,0 +1,37 @@ +from typing import Any, Dict, List, Mapping, Optional, Type +from boto.connection import AWSQueryConnection + +class KMSConnection(AWSQueryConnection): + APIVersion: str + DefaultRegionName: str + DefaultRegionEndpoint: str + ServiceName: str + TargetPrefix: str + ResponseError: Type[Exception] + region: Any + def __init__(self, **kwargs) -> None: ... + def create_alias(self, alias_name: str, target_key_id: str) -> Optional[Dict[str, Any]]: ... + def create_grant(self, key_id: str, grantee_principal: str, retiring_principal: Optional[str] = ..., operations: Optional[List[str]] = ..., constraints: Optional[Dict[str, Dict[str, str]]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def create_key(self, policy: Optional[str] = ..., description: Optional[str] = ..., key_usage: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def decrypt(self, ciphertext_blob: bytes, encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def delete_alias(self, alias_name: str) -> Optional[Dict[str, Any]]: ... + def describe_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def disable_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def disable_key_rotation(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def enable_key(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def enable_key_rotation(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def encrypt(self, key_id: str, plaintext: bytes, encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_data_key(self, key_id: str, encryption_context: Optional[Mapping[str, Any]] = ..., number_of_bytes: Optional[int] = ..., key_spec: Optional[str] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_data_key_without_plaintext(self, key_id: str, encryption_context: Optional[Mapping[str, Any]] = ..., key_spec: Optional[str] = ..., number_of_bytes: Optional[int] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def generate_random(self, number_of_bytes: Optional[int] = ...) -> Optional[Dict[str, Any]]: ... + def get_key_policy(self, key_id: str, policy_name: str) -> Optional[Dict[str, Any]]: ... + def get_key_rotation_status(self, key_id: str) -> Optional[Dict[str, Any]]: ... + def list_aliases(self, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_grants(self, key_id: str, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_key_policies(self, key_id: str, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def list_keys(self, limit: Optional[int] = ..., marker: Optional[str] = ...) -> Optional[Dict[str, Any]]: ... + def put_key_policy(self, key_id: str, policy_name: str, policy: str) -> Optional[Dict[str, Any]]: ... + def re_encrypt(self, ciphertext_blob: bytes, destination_key_id: str, source_encryption_context: Optional[Mapping[str, Any]] = ..., destination_encryption_context: Optional[Mapping[str, Any]] = ..., grant_tokens: Optional[List[str]] = ...) -> Optional[Dict[str, Any]]: ... + def retire_grant(self, grant_token: str) -> Optional[Dict[str, Any]]: ... + def revoke_grant(self, key_id: str, grant_id: str) -> Optional[Dict[str, Any]]: ... + def update_key_description(self, key_id: str, description: str) -> Optional[Dict[str, Any]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi new file mode 100644 index 0000000..e7d5f1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/plugin.pyi @@ -0,0 +1,9 @@ +from typing import Any, Optional + +class Plugin: + capability: Any + @classmethod + def is_capable(cls, requested_capability): ... + +def get_plugin(cls, requested_capability: Optional[Any] = ...): ... +def load_plugins(config): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi new file mode 100644 index 0000000..525b565 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/regioninfo.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +def load_endpoint_json(path): ... +def merge_endpoints(defaults, additions): ... +def load_regions(): ... +def get_regions(service_name, region_cls: Optional[Any] = ..., connection_cls: Optional[Any] = ...): ... + +class RegionInfo: + connection: Any + name: Any + endpoint: Any + connection_cls: Any + def __init__(self, connection: Optional[Any] = ..., name: Optional[Any] = ..., endpoint: Optional[Any] = ..., connection_cls: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def connect(self, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi new file mode 100644 index 0000000..d88955e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/__init__.pyi @@ -0,0 +1,14 @@ +from typing import Optional + +from .connection import S3Connection + +from boto.connection import AWSAuthConnection +from boto.regioninfo import RegionInfo + +from typing import List, Type, Text + +class S3RegionInfo(RegionInfo): + def connect(self, name: Optional[Text] = ..., endpoint: Optional[str] = ..., connection_cls: Optional[Type[AWSAuthConnection]] = ..., **kw_params) -> S3Connection: ... + +def regions() -> List[S3RegionInfo]: ... +def connect_to_region(region_name: Text, **kw_params): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi new file mode 100644 index 0000000..168f914 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/acl.pyi @@ -0,0 +1,39 @@ +from .connection import S3Connection +from .user import User +from typing import Any, Dict, Optional, List, Text, Union + +CannedACLStrings: List[str] + +class Policy: + parent: Any + namespace: Any + acl: ACL + def __init__(self, parent: Optional[Any] = ...) -> None: ... + owner: User + def startElement(self, name: Text, attrs: Dict[str, Any], connection: S3Connection) -> Union[None, User, ACL]: ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... + +class ACL: + policy: Policy + grants: List[Grant] + def __init__(self, policy: Optional[Policy] = ...) -> None: ... + def add_grant(self, grant: Grant) -> None: ... + def add_email_grant(self, permission: Text, email_address: Text) -> None: ... + def add_user_grant(self, permission: Text, user_id: Text, display_name: Optional[Text] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... + +class Grant: + NameSpace: Text + permission: Text + id: Text + display_name: Text + uri: Text + email_address: Text + type: Text + def __init__(self, permission: Optional[Text] = ..., type: Optional[Text] = ..., id: Optional[Text] = ..., display_name: Optional[Text] = ..., uri: Optional[Text] = ..., email_address: Optional[Text] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name: Text, value: Any, connection: S3Connection) -> None: ... + def to_xml(self) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi new file mode 100644 index 0000000..daed502 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucket.pyi @@ -0,0 +1,94 @@ +from .bucketlistresultset import BucketListResultSet +from .connection import S3Connection +from .key import Key + +from typing import Any, Dict, Optional, Text, Type, List + +class S3WebsiteEndpointTranslate: + trans_region: Dict[str, str] + @classmethod + def translate_region(self, reg: Text) -> str: ... + +S3Permissions: List[str] + +class Bucket: + LoggingGroup: str + BucketPaymentBody: str + VersioningBody: str + VersionRE: str + MFADeleteRE: str + name: Text + connection: S3Connection + key_class: Type[Key] + def __init__(self, connection: Optional[S3Connection] = ..., name: Optional[Text] = ..., key_class: Type[Key] = ...) -> None: ... + def __iter__(self): ... + def __contains__(self, key_name) -> bool: ... + def startElement(self, name, attrs, connection): ... + creation_date: Any + def endElement(self, name, value, connection): ... + def set_key_class(self, key_class): ... + def lookup(self, key_name, headers: Optional[Dict[Text, Text]] = ...): ... + def get_key(self, key_name, headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., response_headers: Optional[Dict[Text, Text]] = ..., validate: bool = ...) -> Key: ... + def list(self, prefix: Text = ..., delimiter: Text = ..., marker: Text = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Any] = ...) -> BucketListResultSet: ... + def list_versions(self, prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Text] = ...) -> BucketListResultSet: ... + def list_multipart_uploads(self, key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Dict[Text, Text]] = ..., encoding_type: Optional[Any] = ...): ... + def validate_kwarg_names(self, kwargs, names): ... + def get_all_keys(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def get_all_versions(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def validate_get_all_versions_params(self, params): ... + def get_all_multipart_uploads(self, headers: Optional[Dict[Text, Text]] = ..., **params): ... + def new_key(self, key_name: Optional[Any] = ...): ... + def generate_url(self, expires_in, method: str = ..., headers: Optional[Dict[Text, Text]] = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., expires_in_absolute: bool = ...): ... + def delete_keys(self, keys, quiet: bool = ..., mfa_token: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def delete_key(self, key_name, headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., mfa_token: Optional[Any] = ...): ... + def copy_key(self, new_key_name, src_bucket_name, src_key_name, metadata: Optional[Any] = ..., src_version_id: Optional[Any] = ..., storage_class: str = ..., preserve_acl: bool = ..., encrypt_key: bool = ..., headers: Optional[Dict[Text, Text]] = ..., query_args: Optional[Any] = ...): ... + def set_canned_acl(self, acl_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_xml_acl(self, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def set_xml_acl(self, acl_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., query_args: str = ...): ... + def set_acl(self, acl_or_str, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_acl(self, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def set_subresource(self, subresource, value, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def get_subresource(self, subresource, key_name: str = ..., headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ...): ... + def make_public(self, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def add_email_grant(self, permission, email_address, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def add_user_grant(self, permission, user_id, recursive: bool = ..., headers: Optional[Dict[Text, Text]] = ..., display_name: Optional[Any] = ...): ... + def list_grants(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_location(self): ... + def set_xml_logging(self, logging_str, headers: Optional[Dict[Text, Text]] = ...): ... + def enable_logging(self, target_bucket, target_prefix: str = ..., grants: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def disable_logging(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_logging_status(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_as_logging_target(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_request_payment(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_request_payment(self, payer: str = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def configure_versioning(self, versioning, mfa_delete: bool = ..., mfa_token: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def get_versioning_status(self, headers: Optional[Dict[Text, Text]] = ...): ... + def configure_lifecycle(self, lifecycle_config, headers: Optional[Dict[Text, Text]] = ...): ... + def get_lifecycle_config(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_lifecycle_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def configure_website(self, suffix: Optional[Any] = ..., error_key: Optional[Any] = ..., redirect_all_requests_to: Optional[Any] = ..., routing_rules: Optional[Any] = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def set_website_configuration(self, config, headers: Optional[Dict[Text, Text]] = ...): ... + def set_website_configuration_xml(self, xml, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_obj(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_with_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_configuration_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_website_configuration(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_website_endpoint(self): ... + def get_policy(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_policy(self, policy, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_policy(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_cors_xml(self, cors_xml, headers: Optional[Dict[Text, Text]] = ...): ... + def set_cors(self, cors_config, headers: Optional[Dict[Text, Text]] = ...): ... + def get_cors_xml(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_cors(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_cors(self, headers: Optional[Dict[Text, Text]] = ...): ... + def initiate_multipart_upload(self, key_name, headers: Optional[Dict[Text, Text]] = ..., reduced_redundancy: bool = ..., metadata: Optional[Any] = ..., encrypt_key: bool = ..., policy: Optional[Any] = ...): ... + def complete_multipart_upload(self, key_name, upload_id, xml_body, headers: Optional[Dict[Text, Text]] = ...): ... + def cancel_multipart_upload(self, key_name, upload_id, headers: Optional[Dict[Text, Text]] = ...): ... + def delete(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_tags(self): ... + def get_xml_tags(self): ... + def set_xml_tags(self, tag_str, headers: Optional[Dict[Text, Text]] = ..., query_args: str = ...): ... + def set_tags(self, tags, headers: Optional[Dict[Text, Text]] = ...): ... + def delete_tags(self, headers: Optional[Dict[Text, Text]] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi new file mode 100644 index 0000000..b33d84d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlistresultset.pyi @@ -0,0 +1,40 @@ +from .bucket import Bucket +from .key import Key + +from typing import Any, Iterable, Iterator, Optional + +def bucket_lister(bucket, prefix: str = ..., delimiter: str = ..., marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class BucketListResultSet(Iterable[Key]): + bucket: Any + prefix: Any + delimiter: Any + marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., prefix: str = ..., delimiter: str = ..., marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self) -> Iterator[Key]: ... + +def versioned_bucket_lister(bucket, prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class VersionedBucketListResultSet: + bucket: Any + prefix: Any + delimiter: Any + key_marker: Any + version_id_marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., prefix: str = ..., delimiter: str = ..., key_marker: str = ..., version_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self) -> Iterator[Key]: ... + +def multipart_upload_lister(bucket, key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + +class MultiPartUploadListResultSet: + bucket: Any + key_marker: Any + upload_id_marker: Any + headers: Any + encoding_type: Any + def __init__(self, bucket: Optional[Any] = ..., key_marker: str = ..., upload_id_marker: str = ..., headers: Optional[Any] = ..., encoding_type: Optional[Any] = ...) -> None: ... + def __iter__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi new file mode 100644 index 0000000..4eaa1ab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/bucketlogging.pyi @@ -0,0 +1,11 @@ +from typing import Any, Optional + +class BucketLogging: + target: Any + prefix: Any + grants: Any + def __init__(self, target: Optional[Any] = ..., prefix: Optional[Any] = ..., grants: Optional[Any] = ...) -> None: ... + def add_grant(self, grant): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi new file mode 100644 index 0000000..9148e68 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/connection.pyi @@ -0,0 +1,67 @@ +from .bucket import Bucket + +from typing import Any, Dict, Optional, Text, Type +from boto.connection import AWSAuthConnection +from boto.exception import BotoClientError + +def check_lowercase_bucketname(n): ... +def assert_case_insensitive(f): ... + +class _CallingFormat: + def get_bucket_server(self, server, bucket): ... + def build_url_base(self, connection, protocol, server, bucket, key: str = ...): ... + def build_host(self, server, bucket): ... + def build_auth_path(self, bucket, key: str = ...): ... + def build_path_base(self, bucket, key: str = ...): ... + +class SubdomainCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + +class VHostCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + +class OrdinaryCallingFormat(_CallingFormat): + def get_bucket_server(self, server, bucket): ... + def build_path_base(self, bucket, key: str = ...): ... + +class ProtocolIndependentOrdinaryCallingFormat(OrdinaryCallingFormat): + def build_url_base(self, connection, protocol, server, bucket, key: str = ...): ... + +class Location: + DEFAULT: str + EU: str + EUCentral1: str + USWest: str + USWest2: str + SAEast: str + APNortheast: str + APSoutheast: str + APSoutheast2: str + CNNorth1: str + +class NoHostProvided: ... +class HostRequiredError(BotoClientError): ... + +class S3Connection(AWSAuthConnection): + DefaultHost: Any + DefaultCallingFormat: Any + QueryString: str + calling_format: Any + bucket_class: Type[Bucket] + anon: Any + def __init__(self, aws_access_key_id: Optional[Any] = ..., aws_secret_access_key: Optional[Any] = ..., is_secure: bool = ..., port: Optional[Any] = ..., proxy: Optional[Any] = ..., proxy_port: Optional[Any] = ..., proxy_user: Optional[Any] = ..., proxy_pass: Optional[Any] = ..., host: Any = ..., debug: int = ..., https_connection_factory: Optional[Any] = ..., calling_format: Any = ..., path: str = ..., provider: str = ..., bucket_class: Type[Bucket] = ..., security_token: Optional[Any] = ..., suppress_consec_slashes: bool = ..., anon: bool = ..., validate_certs: Optional[Any] = ..., profile_name: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + def __contains__(self, bucket_name): ... + def set_bucket_class(self, bucket_class: Type[Bucket]) -> None: ... + def build_post_policy(self, expiration_time, conditions): ... + def build_post_form_args(self, bucket_name, key, expires_in: int = ..., acl: Optional[Any] = ..., success_action_redirect: Optional[Any] = ..., max_content_length: Optional[Any] = ..., http_method: str = ..., fields: Optional[Any] = ..., conditions: Optional[Any] = ..., storage_class: str = ..., server_side_encryption: Optional[Any] = ...): ... + def generate_url_sigv4(self, expires_in, method, bucket: str = ..., key: str = ..., headers: Optional[Dict[Text, Text]] = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., version_id: Optional[Any] = ..., iso_date: Optional[Any] = ...): ... + def generate_url(self, expires_in, method, bucket: str = ..., key: str = ..., headers: Optional[Dict[Text, Text]] = ..., query_auth: bool = ..., force_http: bool = ..., response_headers: Optional[Dict[Text, Text]] = ..., expires_in_absolute: bool = ..., version_id: Optional[Any] = ...): ... + def get_all_buckets(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_canonical_user_id(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_bucket(self, bucket_name: Text, validate: bool = ..., headers: Optional[Dict[Text, Text]] = ...) -> Bucket: ... + def head_bucket(self, bucket_name, headers: Optional[Dict[Text, Text]] = ...): ... + def lookup(self, bucket_name, validate: bool = ..., headers: Optional[Dict[Text, Text]] = ...): ... + def create_bucket(self, bucket_name, headers: Optional[Dict[Text, Text]] = ..., location: Any = ..., policy: Optional[Any] = ...): ... + def delete_bucket(self, bucket, headers: Optional[Dict[Text, Text]] = ...): ... + def make_request(self, method, bucket: str = ..., key: str = ..., headers: Optional[Any] = ..., data: str = ..., query_args: Optional[Any] = ..., sender: Optional[Any] = ..., override_num_retries: Optional[Any] = ..., retry_handler: Optional[Any] = ..., *args, **kwargs): ... # type: ignore # https://github.com/python/mypy/issues/1237 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi new file mode 100644 index 0000000..6ffe8ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/cors.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +class CORSRule: + allowed_method: Any + allowed_origin: Any + id: Any + allowed_header: Any + max_age_seconds: Any + expose_header: Any + def __init__(self, allowed_method: Optional[Any] = ..., allowed_origin: Optional[Any] = ..., id: Optional[Any] = ..., allowed_header: Optional[Any] = ..., max_age_seconds: Optional[Any] = ..., expose_header: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self) -> str: ... + +class CORSConfiguration(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self) -> str: ... + def add_rule(self, allowed_method, allowed_origin, id: Optional[Any] = ..., allowed_header: Optional[Any] = ..., max_age_seconds: Optional[Any] = ..., expose_header: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi new file mode 100644 index 0000000..b2955c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/deletemarker.pyi @@ -0,0 +1,12 @@ +from typing import Any, Optional + +class DeleteMarker: + bucket: Any + name: Any + version_id: Any + is_latest: bool + last_modified: Any + owner: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi new file mode 100644 index 0000000..4200e7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/key.pyi @@ -0,0 +1,232 @@ +from typing import Any, Callable, Dict, Optional, Text, Union, overload + +class Key: + DefaultContentType: str + RestoreBody: str + BufferSize: Any + base_user_settable_fields: Any + base_fields: Any + bucket: Any + name: str + metadata: Any + cache_control: Any + content_type: Any + content_encoding: Any + content_disposition: Any + content_language: Any + filename: Any + etag: Any + is_latest: bool + last_modified: Any + owner: Any + path: Any + resp: Any + mode: Any + size: Any + version_id: Any + source_version_id: Any + delete_marker: bool + encrypted: Any + ongoing_restore: Any + expiry_date: Any + local_hashes: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + @property + def provider(self): ... + key: Any + md5: Any + base64md5: Any + storage_class: Any + def get_md5_from_hexdigest(self, md5_hexdigest): ... + def handle_encryption_headers(self, resp): ... + def handle_version_headers(self, resp, force: bool = ...): ... + def handle_restore_headers(self, response): ... + def handle_addl_headers(self, headers): ... + def open_read( + self, + headers: Optional[Dict[Text, Text]] = ..., + query_args: str = ..., + override_num_retries: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def open_write(self, headers: Optional[Dict[Text, Text]] = ..., override_num_retries: Optional[Any] = ...): ... + def open( + self, + mode: str = ..., + headers: Optional[Dict[Text, Text]] = ..., + query_args: Optional[Any] = ..., + override_num_retries: Optional[Any] = ..., + ): ... + closed: bool + def close(self, fast: bool = ...): ... + def next(self): ... + __next__: Any + def read(self, size: int = ...): ... + def change_storage_class(self, new_storage_class, dst_bucket: Optional[Any] = ..., validate_dst_bucket: bool = ...): ... + def copy( + self, + dst_bucket, + dst_key, + metadata: Optional[Any] = ..., + reduced_redundancy: bool = ..., + preserve_acl: bool = ..., + encrypt_key: bool = ..., + validate_dst_bucket: bool = ..., + ): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def exists(self, headers: Optional[Dict[Text, Text]] = ...): ... + def delete(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_metadata(self, name): ... + def set_metadata(self, name, value): ... + def update_metadata(self, d): ... + def set_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def get_acl(self, headers: Optional[Dict[Text, Text]] = ...): ... + def get_xml_acl(self, headers: Optional[Dict[Text, Text]] = ...): ... + def set_xml_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def set_canned_acl(self, acl_str, headers: Optional[Dict[Text, Text]] = ...): ... + def get_redirect(self): ... + def set_redirect(self, redirect_location, headers: Optional[Dict[Text, Text]] = ...): ... + def make_public(self, headers: Optional[Dict[Text, Text]] = ...): ... + def generate_url( + self, + expires_in, + method: str = ..., + headers: Optional[Dict[Text, Text]] = ..., + query_auth: bool = ..., + force_http: bool = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + expires_in_absolute: bool = ..., + version_id: Optional[Any] = ..., + policy: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ): ... + def send_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + query_args: Optional[Any] = ..., + chunked_transfer: bool = ..., + size: Optional[Any] = ..., + ): ... + def should_retry(self, response, chunked_transfer: bool = ...): ... + def compute_md5(self, fp, size: Optional[Any] = ...): ... + def set_contents_from_stream( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + reduced_redundancy: bool = ..., + query_args: Optional[Any] = ..., + size: Optional[Any] = ..., + ): ... + def set_contents_from_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + query_args: Optional[Any] = ..., + encrypt_key: bool = ..., + size: Optional[Any] = ..., + rewind: bool = ..., + ): ... + def set_contents_from_filename( + self, + filename, + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ): ... + def set_contents_from_string( + self, + string_data: Union[Text, bytes], + headers: Optional[Dict[Text, Text]] = ..., + replace: bool = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + policy: Optional[Any] = ..., + md5: Optional[Any] = ..., + reduced_redundancy: bool = ..., + encrypt_key: bool = ..., + ) -> None: ... + def get_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + override_num_retries: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def get_torrent_file( + self, fp, headers: Optional[Dict[Text, Text]] = ..., cb: Optional[Callable[[int, int], Any]] = ..., num_cb: int = ... + ): ... + def get_contents_to_file( + self, + fp, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + res_download_handler: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + def get_contents_to_filename( + self, + filename, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + res_download_handler: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + ): ... + @overload + def get_contents_as_string( + self, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + encoding: None = ..., + ) -> bytes: ... + @overload + def get_contents_as_string( + self, + headers: Optional[Dict[Text, Text]] = ..., + cb: Optional[Callable[[int, int], Any]] = ..., + num_cb: int = ..., + torrent: bool = ..., + version_id: Optional[Any] = ..., + response_headers: Optional[Dict[Text, Text]] = ..., + *, encoding: Text, + ) -> Text: ... + def add_email_grant(self, permission, email_address, headers: Optional[Dict[Text, Text]] = ...): ... + def add_user_grant( + self, permission, user_id, headers: Optional[Dict[Text, Text]] = ..., display_name: Optional[Any] = ... + ): ... + def set_remote_metadata(self, metadata_plus, metadata_minus, preserve_acl, headers: Optional[Dict[Text, Text]] = ...): ... + def restore(self, days, headers: Optional[Dict[Text, Text]] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi new file mode 100644 index 0000000..121da16 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/keyfile.pyi @@ -0,0 +1,29 @@ +from typing import Any + +class KeyFile: + key: Any + location: int + closed: bool + softspace: int + mode: str + encoding: str + errors: str + newlines: str + name: Any + def __init__(self, key) -> None: ... + def tell(self): ... + def seek(self, pos, whence: Any = ...): ... + def read(self, size): ... + def close(self): ... + def isatty(self): ... + def getkey(self): ... + def write(self, buf): ... + def fileno(self): ... + def flush(self): ... + def next(self): ... + def readinto(self): ... + def readline(self): ... + def readlines(self): ... + def truncate(self): ... + def writelines(self): ... + def xreadlines(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi new file mode 100644 index 0000000..0b775ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/lifecycle.pyi @@ -0,0 +1,51 @@ +from typing import Any, Optional + +class Rule: + id: Any + prefix: Any + status: Any + expiration: Any + transition: Any + def __init__(self, id: Optional[Any] = ..., prefix: Optional[Any] = ..., status: Optional[Any] = ..., expiration: Optional[Any] = ..., transition: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class Expiration: + days: Any + date: Any + def __init__(self, days: Optional[Any] = ..., date: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class Transition: + days: Any + date: Any + storage_class: Any + def __init__(self, days: Optional[Any] = ..., date: Optional[Any] = ..., storage_class: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class Transitions(list): + transition_properties: int + current_transition_property: int + temp_days: Any + temp_date: Any + temp_storage_class: Any + def __init__(self) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_transition(self, days: Optional[Any] = ..., date: Optional[Any] = ..., storage_class: Optional[Any] = ...): ... + @property + def days(self): ... + @property + def date(self): ... + @property + def storage_class(self): ... + +class Lifecycle(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_rule(self, id: Optional[Any] = ..., prefix: str = ..., status: str = ..., expiration: Optional[Any] = ..., transition: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi new file mode 100644 index 0000000..fa0c8dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multidelete.pyi @@ -0,0 +1,27 @@ +from typing import Any, Optional + +class Deleted: + key: Any + version_id: Any + delete_marker: Any + delete_marker_version_id: Any + def __init__(self, key: Optional[Any] = ..., version_id: Optional[Any] = ..., delete_marker: bool = ..., delete_marker_version_id: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class Error: + key: Any + version_id: Any + code: Any + message: Any + def __init__(self, key: Optional[Any] = ..., version_id: Optional[Any] = ..., code: Optional[Any] = ..., message: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class MultiDeleteResult: + bucket: Any + deleted: Any + errors: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi new file mode 100644 index 0000000..8463c4d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/multipart.pyi @@ -0,0 +1,49 @@ +from typing import Any, Optional + +class CompleteMultiPartUpload: + bucket: Any + location: Any + bucket_name: Any + key_name: Any + etag: Any + version_id: Any + encrypted: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +class Part: + bucket: Any + part_number: Any + last_modified: Any + etag: Any + size: Any + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + +def part_lister(mpupload, part_number_marker: Optional[Any] = ...): ... + +class MultiPartUpload: + bucket: Any + bucket_name: Any + key_name: Any + id: Any + initiator: Any + owner: Any + storage_class: Any + initiated: Any + part_number_marker: Any + next_part_number_marker: Any + max_parts: Any + is_truncated: bool + def __init__(self, bucket: Optional[Any] = ...) -> None: ... + def __iter__(self): ... + def to_xml(self): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def get_all_parts(self, max_parts: Optional[Any] = ..., part_number_marker: Optional[Any] = ..., encoding_type: Optional[Any] = ...): ... + def upload_part_from_file(self, fp, part_num, headers: Optional[Any] = ..., replace: bool = ..., cb: Optional[Any] = ..., num_cb: int = ..., md5: Optional[Any] = ..., size: Optional[Any] = ...): ... + def copy_part_from_key(self, src_bucket_name, src_key_name, part_num, start: Optional[Any] = ..., end: Optional[Any] = ..., src_version_id: Optional[Any] = ..., headers: Optional[Any] = ...): ... + def complete_upload(self): ... + def cancel_upload(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi new file mode 100644 index 0000000..de8f3a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/prefix.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +class Prefix: + bucket: Any + name: Any + def __init__(self, bucket: Optional[Any] = ..., name: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + @property + def provider(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi new file mode 100644 index 0000000..9dec4e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/tagging.pyi @@ -0,0 +1,22 @@ +from typing import Any, Optional + +class Tag: + key: Any + value: Any + def __init__(self, key: Optional[Any] = ..., value: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def __eq__(self, other): ... + +class TagSet(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def add_tag(self, key, value): ... + def to_xml(self): ... + +class Tags(list): + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + def add_tag_set(self, tag_set): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi new file mode 100644 index 0000000..c5cc11c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/user.pyi @@ -0,0 +1,10 @@ +from typing import Any, Optional + +class User: + type: Any + id: Any + display_name: Any + def __init__(self, parent: Optional[Any] = ..., id: str = ..., display_name: str = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self, element_name: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi new file mode 100644 index 0000000..2a92866 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/s3/website.pyi @@ -0,0 +1,62 @@ +from typing import Any, Optional + +def tag(key, value): ... + +class WebsiteConfiguration: + suffix: Any + error_key: Any + redirect_all_requests_to: Any + routing_rules: Any + def __init__(self, suffix: Optional[Any] = ..., error_key: Optional[Any] = ..., redirect_all_requests_to: Optional[Any] = ..., routing_rules: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class _XMLKeyValue: + translator: Any + container: Any + def __init__(self, translator, container: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class RedirectLocation(_XMLKeyValue): + TRANSLATOR: Any + hostname: Any + protocol: Any + def __init__(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class RoutingRules(list): + def add_rule(self, rule): ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + +class RoutingRule: + condition: Any + redirect: Any + def __init__(self, condition: Optional[Any] = ..., redirect: Optional[Any] = ...) -> None: ... + def startElement(self, name, attrs, connection): ... + def endElement(self, name, value, connection): ... + def to_xml(self): ... + @classmethod + def when(cls, key_prefix: Optional[Any] = ..., http_error_code: Optional[Any] = ...): ... + def then_redirect(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ..., replace_key: Optional[Any] = ..., replace_key_prefix: Optional[Any] = ..., http_redirect_code: Optional[Any] = ...): ... + +class Condition(_XMLKeyValue): + TRANSLATOR: Any + key_prefix: Any + http_error_code: Any + def __init__(self, key_prefix: Optional[Any] = ..., http_error_code: Optional[Any] = ...) -> None: ... + def to_xml(self): ... + +class Redirect(_XMLKeyValue): + TRANSLATOR: Any + hostname: Any + protocol: Any + replace_key: Any + replace_key_prefix: Any + http_redirect_code: Any + def __init__(self, hostname: Optional[Any] = ..., protocol: Optional[Any] = ..., replace_key: Optional[Any] = ..., replace_key_prefix: Optional[Any] = ..., http_redirect_code: Optional[Any] = ...) -> None: ... + def to_xml(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi new file mode 100644 index 0000000..6552b0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/boto/utils.pyi @@ -0,0 +1,239 @@ +import datetime +import logging.handlers +import subprocess +import sys +import time + +import boto.connection +from typing import ( + Any, + Callable, + ContextManager, + Dict, + IO, + Iterable, + List, + Mapping, + Optional, + Sequence, + Tuple, + Type, + TypeVar, + Union, +) + +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') + +if sys.version_info[0] >= 3: + # TODO move _StringIO definition into boto.compat once stubs exist and rename to StringIO + import io + _StringIO = io.StringIO + + from hashlib import _Hash + _HashType = _Hash + + from email.message import Message as _Message +else: + # TODO move _StringIO definition into boto.compat once stubs exist and rename to StringIO + import StringIO + _StringIO = StringIO.StringIO + + from hashlib import _hash + _HashType = _hash + + # TODO use email.message.Message once stubs exist + _Message = Any + +_Provider = Any # TODO replace this with boto.provider.Provider once stubs exist +_LockType = Any # TODO replace this with _thread.LockType once stubs exist + + +JSONDecodeError: Type[ValueError] +qsa_of_interest: List[str] + + +def unquote_v(nv: str) -> Union[str, Tuple[str, str]]: ... +def canonical_string( + method: str, + path: str, + headers: Mapping[str, Optional[str]], + expires: Optional[int] = ..., + provider: Optional[_Provider] = ..., +) -> str: ... +def merge_meta( + headers: Mapping[str, str], + metadata: Mapping[str, str], + provider: Optional[_Provider] = ..., +) -> Mapping[str, str]: ... +def get_aws_metadata( + headers: Mapping[str, str], + provider: Optional[_Provider] = ..., +) -> Mapping[str, str]: ... +def retry_url( + url: str, + retry_on_404: bool = ..., + num_retries: int = ..., + timeout: Optional[int] = ..., +) -> str: ... + +class LazyLoadMetadata(Dict[_KT, _VT]): + def __init__( + self, + url: str, + num_retries: int, + timeout: Optional[int] = ..., + ) -> None: ... + +def get_instance_metadata( + version: str = ..., + url: str = ..., + data: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Optional[LazyLoadMetadata]: ... +def get_instance_identity( + version: str = ..., + url: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Optional[Mapping[str, Any]]: ... +def get_instance_userdata( + version: str = ..., + sep: Optional[str] = ..., + url: str = ..., + timeout: Optional[int] = ..., + num_retries: int = ..., +) -> Mapping[str, str]: ... + +ISO8601: str +ISO8601_MS: str +RFC1123: str +LOCALE_LOCK: _LockType + +def setlocale(name: Union[str, Tuple[str, str]]) -> ContextManager[str]: ... +def get_ts(ts: Optional[time.struct_time] = ...) -> str: ... +def parse_ts(ts: str) -> datetime.datetime: ... +def find_class(module_name: str, class_name: Optional[str] = ...) -> Optional[Type[Any]]: ... +def update_dme(username: str, password: str, dme_id: str, ip_address: str) -> str: ... +def fetch_file( + uri: str, + file: Optional[IO[str]] = ..., + username: Optional[str] = ..., + password: Optional[str] = ..., +) -> Optional[IO[str]]: ... + +class ShellCommand: + exit_code: int + command: subprocess._CMD + log_fp: _StringIO + wait: bool + fail_fast: bool + + def __init__( + self, + command: subprocess._CMD, + wait: bool = ..., + fail_fast: bool = ..., + cwd: Optional[subprocess._TXT] = ..., + ) -> None: ... + + process: subprocess.Popen + + def run(self, cwd: Optional[subprocess._CMD] = ...) -> Optional[int]: ... + def setReadOnly(self, value) -> None: ... + def getStatus(self) -> Optional[int]: ... + + status: Optional[int] + + def getOutput(self) -> str: ... + + output: str + +class AuthSMTPHandler(logging.handlers.SMTPHandler): + username: str + password: str + def __init__( + self, + mailhost: str, + username: str, + password: str, + fromaddr: str, + toaddrs: Sequence[str], + subject: str, + ) -> None: ... + +class LRUCache(Dict[_KT, _VT]): + class _Item: + previous: Optional[LRUCache._Item] + next: Optional[LRUCache._Item] + key = ... + value = ... + def __init__(self, key, value) -> None: ... + + _dict: Dict[_KT, LRUCache._Item] + capacity: int + head: Optional[LRUCache._Item] + tail: Optional[LRUCache._Item] + + def __init__(self, capacity: int) -> None: ... + + +# This exists to work around Password.str's name shadowing the str type +_str = str + +class Password: + hashfunc: Callable[[bytes], _HashType] + str: Optional[_str] + + def __init__( + self, + str: Optional[_str] = ..., + hashfunc: Optional[Callable[[bytes], _HashType]] = ..., + ) -> None: ... + def set(self, value: Union[bytes, _str]) -> None: ... + def __eq__(self, other: Any) -> bool: ... + def __len__(self) -> int: ... + +def notify( + subject: str, + body: Optional[str] = ..., + html_body: Optional[Union[Sequence[str], str]] = ..., + to_string: Optional[str] = ..., + attachments: Optional[Iterable[_Message]] = ..., + append_instance_id: bool = ..., +) -> None: ... +def get_utf8_value(value: str) -> bytes: ... +def mklist(value: Any) -> List: ... +def pythonize_name(name: str) -> str: ... +def write_mime_multipart( + content: List[Tuple[str, str]], + compress: bool = ..., + deftype: str = ..., + delimiter: str = ..., +) -> str: ... +def guess_mime_type(content: str, deftype: str) -> str: ... +def compute_md5( + fp: IO[Any], + buf_size: int = ..., + size: Optional[int] = ..., +) -> Tuple[str, str, int]: ... +def compute_hash( + fp: IO[Any], + buf_size: int = ..., + size: Optional[int] = ..., + hash_algorithm: Any = ..., +) -> Tuple[str, str, int]: ... +def find_matching_headers(name: str, headers: Mapping[str, Optional[str]]) -> List[str]: ... +def merge_headers_by_name(name: str, headers: Mapping[str, Optional[str]]) -> str: ... + +class RequestHook: + def handle_request_data( + self, + request: boto.connection.HTTPRequest, + response: boto.connection.HTTPResponse, + error: bool = ..., + ) -> Any: ... + +def host_is_ipv6(hostname: str) -> bool: ... +def parse_host(hostname: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/certifi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/certifi.pyi new file mode 100644 index 0000000..c809e6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/certifi.pyi @@ -0,0 +1,2 @@ +def where() -> str: ... +def old_where() -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi new file mode 100644 index 0000000..20bd6e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/characteristic/__init__.pyi @@ -0,0 +1,34 @@ +from typing import Sequence, Callable, Union, Any, Optional, AnyStr, TypeVar, Type + +def with_repr(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def with_cmp(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def with_init(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... +def immutable(attrs: Sequence[Union[AnyStr, Attribute]]) -> Callable[..., Any]: ... + +def strip_leading_underscores(attribute_name: AnyStr) -> AnyStr: ... + +NOTHING = Any + +_T = TypeVar('_T') + +def attributes( + attrs: Sequence[Union[AnyStr, Attribute]], + apply_with_cmp: bool = ..., + apply_with_init: bool = ..., + apply_with_repr: bool = ..., + apply_immutable: bool = ..., + store_attributes: Optional[Callable[[type, Attribute], Any]] = ..., + **kw: Optional[dict]) -> Callable[[Type[_T]], Type[_T]]: ... + +class Attribute: + def __init__( + self, + name: AnyStr, + exclude_from_cmp: bool = ..., + exclude_from_init: bool = ..., + exclude_from_repr: bool = ..., + exclude_from_immutable: bool = ..., + default_value: Any = ..., + default_factory: Optional[Callable[[None], Any]] = ..., + instance_of: Optional[Any] = ..., + init_aliaser: Optional[Callable[[AnyStr], AnyStr]] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/README.md b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/README.md new file mode 100644 index 0000000..debe701 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/README.md @@ -0,0 +1,11 @@ +# click 6.6, Python 3 + +`__init__.pyi` is almost a copy of `click/__init__.py`. It's a shortcut module +anyway in the actual sources so it works well with minimal changes. + +The types are pretty complete but they were created mostly for public API use +so some internal modules (`_compat`) or functions (`core._bashcomplete`) are +deliberately missing. If you feel the need to add those, pull requests accepted. + +Speaking of pull requests, it would be great if the option decorators informed +the type checker on what types the command callback should accept. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi new file mode 100644 index 0000000..4733c6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/__init__.pyi @@ -0,0 +1,116 @@ +# -*- coding: utf-8 -*- +""" + click + ~~~~~ + + Click is a simple Python module that wraps the stdlib's optparse to make + writing command line scripts fun. Unlike other modules, it's based around + a simple API that does not come with too much magic and is composable. + + In case optparse ever gets removed from the stdlib, it will be shipped by + this module. + + :copyright: (c) 2014 by Armin Ronacher. + :license: BSD, see LICENSE for more details. +""" + +# Core classes +from .core import ( + Context as Context, + BaseCommand as BaseCommand, + Command as Command, + MultiCommand as MultiCommand, + Group as Group, + CommandCollection as CommandCollection, + Parameter as Parameter, + Option as Option, + Argument as Argument, +) + +# Globals +from .globals import get_current_context as get_current_context + +# Decorators +from .decorators import ( + pass_context as pass_context, + pass_obj as pass_obj, + make_pass_decorator as make_pass_decorator, + command as command, + group as group, + argument as argument, + option as option, + confirmation_option as confirmation_option, + password_option as password_option, + version_option as version_option, + help_option as help_option, +) + +# Types +from .types import ( + ParamType as ParamType, + File as File, + Path as Path, + Choice as Choice, + IntRange as IntRange, + Tuple as Tuple, + STRING as STRING, + INT as INT, + FLOAT as FLOAT, + BOOL as BOOL, + UUID as UUID, + UNPROCESSED as UNPROCESSED, +) + +# Utilities +from .utils import ( + echo as echo, + get_binary_stream as get_binary_stream, + get_text_stream as get_text_stream, + open_file as open_file, + format_filename as format_filename, + get_app_dir as get_app_dir, + get_os_args as get_os_args, +) + +# Terminal functions +from .termui import ( + prompt as prompt, + confirm as confirm, + get_terminal_size as get_terminal_size, + echo_via_pager as echo_via_pager, + progressbar as progressbar, + clear as clear, + style as style, + unstyle as unstyle, + secho as secho, + edit as edit, + launch as launch, + getchar as getchar, + pause as pause, +) + +# Exceptions +from .exceptions import ( + ClickException as ClickException, + UsageError as UsageError, + BadParameter as BadParameter, + FileError as FileError, + Abort as Abort, + NoSuchOption as NoSuchOption, + BadOptionUsage as BadOptionUsage, + BadArgumentUsage as BadArgumentUsage, + MissingParameter as MissingParameter, +) + +# Formatting +from .formatting import HelpFormatter as HelpFormatter, wrap_text as wrap_text + +# Parsing +from .parser import OptionParser as OptionParser + +# Controls if click should emit the warning about the use of unicode +# literals. +disable_unicode_literals_warning: bool + + +__version__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi new file mode 100644 index 0000000..f938c1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/_termui_impl.pyi @@ -0,0 +1,14 @@ +from typing import ContextManager, Iterator, Generic, TypeVar, Optional + +_T = TypeVar("_T") + +class ProgressBar(object, Generic[_T]): + def update(self, n_steps: int) -> None: ... + def finish(self) -> None: ... + def __enter__(self) -> ProgressBar[_T]: ... + def __exit__(self, exc_type, exc_value, tb) -> None: ... + def __iter__(self) -> ProgressBar[_T]: ... + def next(self) -> _T: ... + def __next__(self) -> _T: ... + length: Optional[int] + label: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/core.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/core.pyi new file mode 100644 index 0000000..2cc32f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/core.pyi @@ -0,0 +1,474 @@ +from typing import ( + Any, + Callable, + ContextManager, + Dict, + Generator, + Iterable, + List, + Mapping, + NoReturn, + Optional, + Sequence, + Set, + Tuple, + TypeVar, + Union, +) + +from click.formatting import HelpFormatter +from click.parser import OptionParser + +def invoke_param_callback( + callback: Callable[[Context, Parameter, Optional[str]], Any], + ctx: Context, + param: Parameter, + value: Optional[str] +) -> Any: + ... + + +def augment_usage_errors( + ctx: Context, param: Optional[Parameter] = ... +) -> ContextManager[None]: + ... + + +def iter_params_for_processing( + invocation_order: Sequence[Parameter], + declaration_order: Iterable[Parameter], +) -> Iterable[Parameter]: + ... + + +class Context: + parent: Optional[Context] + command: Command + info_name: Optional[str] + params: Dict + args: List[str] + protected_args: List[str] + obj: Any + default_map: Mapping[str, Any] + invoked_subcommand: Optional[str] + terminal_width: Optional[int] + max_content_width: Optional[int] + allow_extra_args: bool + allow_interspersed_args: bool + ignore_unknown_options: bool + help_option_names: List[str] + token_normalize_func: Optional[Callable[[str], str]] + resilient_parsing: bool + auto_envvar_prefix: Optional[str] + color: Optional[bool] + _meta: Dict[str, Any] + _close_callbacks: List + _depth: int + + # properties + meta: Dict[str, Any] + command_path: str + + def __init__( + self, + command: Command, + parent: Optional[Context] = ..., + info_name: Optional[str] = ..., + obj: Optional[Any] = ..., + auto_envvar_prefix: Optional[str] = ..., + default_map: Optional[Mapping[str, Any]] = ..., + terminal_width: Optional[int] = ..., + max_content_width: Optional[int] = ..., + resilient_parsing: bool = ..., + allow_extra_args: Optional[bool] = ..., + allow_interspersed_args: Optional[bool] = ..., + ignore_unknown_options: Optional[bool] = ..., + help_option_names: Optional[List[str]] = ..., + token_normalize_func: Optional[Callable[[str], str]] = ..., + color: Optional[bool] = ... + ) -> None: + ... + + def scope(self, cleanup: bool = ...) -> ContextManager[Context]: + ... + + def make_formatter(self) -> HelpFormatter: + ... + + def call_on_close(self, f: Callable) -> Callable: + ... + + def close(self) -> None: + ... + + def find_root(self) -> Context: + ... + + def find_object(self, object_type: type) -> Any: + ... + + def ensure_object(self, object_type: type) -> Any: + ... + + def lookup_default(self, name: str) -> Any: + ... + + def fail(self, message: str) -> NoReturn: + ... + + def abort(self) -> NoReturn: + ... + + def exit(self, code: Union[int, str] = ...) -> NoReturn: + ... + + def get_usage(self) -> str: + ... + + def get_help(self) -> str: + ... + + def invoke( + self, callback: Union[Command, Callable], *args, **kwargs + ) -> Any: + ... + + def forward( + self, callback: Union[Command, Callable], *args, **kwargs + ) -> Any: + ... + +class BaseCommand: + allow_extra_args: bool + allow_interspersed_args: bool + ignore_unknown_options: bool + name: str + context_settings: Dict + + def __init__(self, name: str, context_settings: Optional[Dict] = ...) -> None: + ... + + def get_usage(self, ctx: Context) -> str: + ... + + def get_help(self, ctx: Context) -> str: + ... + + def make_context( + self, info_name: str, args: List[str], parent: Optional[Context] = ..., **extra + ) -> Context: + ... + + def parse_args(self, ctx: Context, args: List[str]) -> List[str]: + ... + + def invoke(self, ctx: Context) -> Any: + ... + + def main( + self, + args: Optional[List[str]] = ..., + prog_name: Optional[str] = ..., + complete_var: Optional[str] = ..., + standalone_mode: bool = ..., + **extra + ) -> Any: + ... + + def __call__(self, *args, **kwargs) -> Any: + ... + + +class Command(BaseCommand): + callback: Optional[Callable] + params: List[Parameter] + help: Optional[str] + epilog: Optional[str] + short_help: Optional[str] + options_metavar: str + add_help_option: bool + hidden: bool + deprecated: bool + + def __init__( + self, + name: str, + context_settings: Optional[Dict] = ..., + callback: Optional[Callable] = ..., + params: Optional[List[Parameter]] = ..., + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., + ) -> None: + ... + + def get_params(self, ctx: Context) -> List[Parameter]: + ... + + def format_usage( + self, + ctx: Context, + formatter: HelpFormatter + ) -> None: + ... + + def collect_usage_pieces(self, ctx: Context) -> List[str]: + ... + + def get_help_option_names(self, ctx: Context) -> Set[str]: + ... + + def get_help_option(self, ctx: Context) -> Optional[Option]: + ... + + def make_parser(self, ctx: Context) -> OptionParser: + ... + + def format_help(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_help_text(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_options(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def format_epilog(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) + + +class MultiCommand(Command): + no_args_is_help: bool + invoke_without_command: bool + subcommand_metavar: str + chain: bool + result_callback: Callable + + def __init__( + self, + name: Optional[str] = ..., + invoke_without_command: bool = ..., + no_args_is_help: Optional[bool] = ..., + subcommand_metavar: Optional[str] = ..., + chain: bool = ..., + result_callback: Optional[Callable] = ..., + **attrs + ) -> None: + ... + + def resultcallback( + self, replace: bool = ... + ) -> Callable[[_F], _F]: + ... + + def format_commands(self, ctx: Context, formatter: HelpFormatter) -> None: + ... + + def resolve_command( + self, ctx: Context, args: List[str] + ) -> Tuple[str, Command, List[str]]: + ... + + def get_command(self, ctx: Context, cmd_name: str) -> Optional[Command]: + ... + + def list_commands(self, ctx: Context) -> Iterable[str]: + ... + + +class Group(MultiCommand): + commands: Dict[str, Command] + + def __init__( + self, name: Optional[str] = ..., commands: Optional[Dict[str, Command]] = ..., **attrs + ) -> None: + ... + + def add_command(self, cmd: Command, name: Optional[str] = ...): + ... + + def command(self, *args, **kwargs) -> Callable[[Callable], Command]: + ... + + def group(self, *args, **kwargs) -> Callable[[Callable], Group]: + ... + + +class CommandCollection(MultiCommand): + sources: List[MultiCommand] + + def __init__( + self, name: Optional[str] = ..., sources: Optional[List[MultiCommand]] = ..., **attrs + ) -> None: + ... + + def add_source(self, multi_cmd: MultiCommand) -> None: + ... + + +class _ParamType: + name: str + is_composite: bool + envvar_list_splitter: Optional[str] + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> Any: + ... + + def get_metavar(self, param: Parameter) -> str: + ... + + def get_missing_message(self, param: Parameter) -> str: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> Any: + ... + + def split_envvar_value(self, rv: str) -> List[str]: + ... + + def fail(self, message: str, param: Optional[Parameter] = ..., ctx: Optional[Context] = ...) -> None: + ... + + +# This type is here to resolve https://github.com/python/mypy/issues/5275 +_ConvertibleType = Union[type, _ParamType, Tuple[type, ...], Callable[[str], Any], Callable[[Optional[str]], Any]] + + +class Parameter: + param_type_name: str + name: str + opts: List[str] + secondary_opts: List[str] + type: _ParamType + required: bool + callback: Optional[Callable[[Context, Parameter, str], Any]] + nargs: int + multiple: bool + expose_value: bool + default: Any + is_eager: bool + metavar: Optional[str] + envvar: Union[str, List[str], None] + # properties + human_readable_name: str + + def __init__( + self, + param_decls: Optional[List[str]] = ..., + type: Optional[_ConvertibleType] = ..., + required: bool = ..., + default: Optional[Any] = ..., + callback: Optional[Callable[[Context, Parameter, str], Any]] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... + ) -> None: + ... + + def make_metavar(self) -> str: + ... + + def get_default(self, ctx: Context) -> Any: + ... + + def add_to_parser(self, parser: OptionParser, ctx: Context) -> None: + ... + + def consume_value(self, ctx: Context, opts: Dict[str, Any]) -> Any: + ... + + def type_cast_value(self, ctx: Context, value: Any) -> Any: + ... + + def process_value(self, ctx: Context, value: Any) -> Any: + ... + + def value_is_missing(self, value: Any) -> bool: + ... + + def full_process_value(self, ctx: Context, value: Any) -> Any: + ... + + def resolve_envvar_value(self, ctx: Context) -> str: + ... + + def value_from_envvar(self, ctx: Context) -> Union[str, List[str]]: + ... + + def handle_parse_result( + self, ctx: Context, opts: Dict[str, Any], args: List[str] + ) -> Tuple[Any, List[str]]: + ... + + def get_help_record(self, ctx: Context) -> Tuple[str, str]: + ... + + def get_usage_pieces(self, ctx: Context) -> List[str]: + ... + + +class Option(Parameter): + prompt: str # sic + confirmation_prompt: bool + hide_input: bool + is_flag: bool + flag_value: Any + is_bool_flag: bool + count: bool + multiple: bool + allow_from_autoenv: bool + help: Optional[str] + show_default: bool + show_choices: bool + + def __init__( + self, + param_decls: Optional[List[str]] = ..., + show_default: bool = ..., + prompt: Union[bool, str] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + **attrs + ) -> None: + ... + + def prompt_for_value(self, ctx: Context) -> Any: + ... + + +class Argument(Parameter): + def __init__( + self, + param_decls: Optional[List[str]] = ..., + required: Optional[bool] = ..., + **attrs + ) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi new file mode 100644 index 0000000..44f4ad7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/decorators.pyi @@ -0,0 +1,336 @@ +from distutils.version import Version +from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar, Union, Text, overload + +from click.core import Command, Group, Argument, Option, Parameter, Context, _ConvertibleType + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) + +# Until https://github.com/python/mypy/issues/3924 is fixed you can't do the following: +# _Decorator = Callable[[_F], _F] + +_Callback = Callable[ + [Context, Union[Option, Parameter], Any], + Any +] + +def pass_context(_T) -> _T: + ... + + +def pass_obj(_T) -> _T: + ... + + +def make_pass_decorator( + object_type: type, ensure: bool = ... +) -> Callable[[_T], _T]: + ... + + +# NOTE: Decorators below have **attrs converted to concrete constructor +# arguments from core.pyi to help with type checking. + +def command( + name: Optional[str] = ..., + cls: Optional[Type[Command]] = ..., + # Command + context_settings: Optional[Dict] = ..., + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., +) -> Callable[[Callable], Command]: + ... + + +# This inherits attrs from Group, MultiCommand and Command. + +def group( + name: Optional[str] = ..., + cls: Type[Command] = ..., + # Group + commands: Optional[Dict[str, Command]] = ..., + # MultiCommand + invoke_without_command: bool = ..., + no_args_is_help: Optional[bool] = ..., + subcommand_metavar: Optional[str] = ..., + chain: bool = ..., + result_callback: Optional[Callable] = ..., + # Command + help: Optional[str] = ..., + epilog: Optional[str] = ..., + short_help: Optional[str] = ..., + options_metavar: str = ..., + add_help_option: bool = ..., + hidden: bool = ..., + deprecated: bool = ..., + # User-defined + **kwargs: Any, +) -> Callable[[Callable], Group]: + ... + + +def argument( + *param_decls: str, + cls: Type[Argument] = ..., + # Argument + required: Optional[bool] = ..., + # Parameter + type: Optional[_ConvertibleType] = ..., + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + autocompletion: Optional[Callable[[Any, List[str], str], List[Union[str, Tuple[str, str]]]]] = ..., +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: _T = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Optional[Callable[[Context, Union[Option, Parameter], Union[bool, int, str]], _T]] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Type[str] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Callable[[Context, Union[Option, Parameter], str], Any] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +@overload +def option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Type[int] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + required: bool = ..., + callback: Callable[[Context, Union[Option, Parameter], int], Any] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ..., + # User-defined + **kwargs: Any, +) -> Callable[[_F], _F]: + ... + + +def confirmation_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def password_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: Optional[bool] = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: Optional[str] = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def version_option( + version: Optional[Union[str, Version]] = ..., + *param_decls: str, + cls: Type[Option] = ..., + # Option + prog_name: Optional[str] = ..., + message: Optional[str] = ..., + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... + + +def help_option( + *param_decls: str, + cls: Type[Option] = ..., + # Option + show_default: bool = ..., + prompt: Union[bool, Text] = ..., + confirmation_prompt: bool = ..., + hide_input: bool = ..., + is_flag: bool = ..., + flag_value: Optional[Any] = ..., + multiple: bool = ..., + count: bool = ..., + allow_from_autoenv: bool = ..., + type: Optional[_ConvertibleType] = ..., + help: str = ..., + show_choices: bool = ..., + # Parameter + default: Optional[Any] = ..., + callback: Optional[_Callback] = ..., + nargs: Optional[int] = ..., + metavar: Optional[str] = ..., + expose_value: bool = ..., + is_eager: bool = ..., + envvar: Optional[Union[str, List[str]]] = ... +) -> Callable[[_F], _F]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi new file mode 100644 index 0000000..7e081be --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/exceptions.pyi @@ -0,0 +1,96 @@ +from typing import IO, List, Optional, Any + +from click.core import Context, Parameter + + +class ClickException(Exception): + exit_code: int + message: str + + def __init__(self, message: str) -> None: + ... + + def format_message(self) -> str: + ... + + def show(self, file: Optional[Any] = ...) -> None: + ... + + +class UsageError(ClickException): + ctx: Optional[Context] + + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + def show(self, file: Optional[IO] = ...) -> None: + ... + + +class BadParameter(UsageError): + param: Optional[Parameter] + param_hint: Optional[str] + + def __init__( + self, + message: str, + ctx: Optional[Context] = ..., + param: Optional[Parameter] = ..., + param_hint: Optional[str] = ... + ) -> None: + ... + + +class MissingParameter(BadParameter): + param_type: str # valid values: 'parameter', 'option', 'argument' + + def __init__( + self, + message: Optional[str] = ..., + ctx: Optional[Context] = ..., + param: Optional[Parameter] = ..., + param_hint: Optional[str] = ..., + param_type: Optional[str] = ... + ) -> None: + ... + + +class NoSuchOption(UsageError): + option_name: str + possibilities: Optional[List[str]] + + def __init__( + self, + option_name: str, + message: Optional[str] = ..., + possibilities: Optional[List[str]] = ..., + ctx: Optional[Context] = ... + ) -> None: + ... + + +class BadOptionUsage(UsageError): + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + +class BadArgumentUsage(UsageError): + def __init__(self, message: str, ctx: Optional[Context] = ...) -> None: + ... + + +class FileError(ClickException): + ui_filename: str + filename: str + + def __init__(self, filename: str, hint: Optional[str] = ...) -> None: + ... + + +class Abort(RuntimeError): + ... + + +class Exit(RuntimeError): + def __init__(self, code: int = ...) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi new file mode 100644 index 0000000..bcd3048 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/formatting.pyi @@ -0,0 +1,86 @@ +from typing import ContextManager, Generator, Iterable, List, Optional, Tuple + + +FORCED_WIDTH: Optional[int] + + +def measure_table(rows: Iterable[Iterable[str]]) -> Tuple[int, ...]: + ... + + +def iter_rows( + rows: Iterable[Iterable[str]], col_count: int +) -> Generator[Tuple[str, ...], None, None]: + ... + + +def wrap_text( + text: str, + width: int = ..., + initial_indent: str = ..., + subsequent_indent: str = ..., + preserve_paragraphs: bool = ... +) -> str: + ... + + +class HelpFormatter: + indent_increment: int + width: Optional[int] + current_indent: int + buffer: List[str] + + def __init__( + self, + indent_increment: int = ..., + width: Optional[int] = ..., + max_width: Optional[int] = ..., + ) -> None: + ... + + def write(self, string: str) -> None: + ... + + def indent(self) -> None: + ... + + def dedent(self) -> None: + ... + + def write_usage( + self, + prog: str, + args: str = ..., + prefix: str = ..., + ): + ... + + def write_heading(self, heading: str) -> None: + ... + + def write_paragraph(self) -> None: + ... + + def write_text(self, text: str) -> None: + ... + + def write_dl( + self, + rows: Iterable[Iterable[str]], + col_max: int = ..., + col_spacing: int = ..., + ) -> None: + ... + + def section(self, name) -> ContextManager[None]: + ... + + def indentation(self) -> ContextManager[None]: + ... + + def getvalue(self) -> str: + ... + + +def join_options(options: List[str]) -> Tuple[str, bool]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi new file mode 100644 index 0000000..11adce3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/globals.pyi @@ -0,0 +1,18 @@ +from click.core import Context +from typing import Optional + + +def get_current_context(silent: bool = ...) -> Context: + ... + + +def push_context(ctx: Context) -> None: + ... + + +def pop_context() -> None: + ... + + +def resolve_color_default(color: Optional[bool] = ...) -> Optional[bool]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi new file mode 100644 index 0000000..f5869a2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/parser.pyi @@ -0,0 +1,102 @@ +from typing import Any, Dict, Iterable, List, Optional, Set, Tuple + +from click.core import Context + + +def _unpack_args( + args: Iterable[str], nargs_spec: Iterable[int] +) -> Tuple[Tuple[Optional[Tuple[str, ...]], ...], List[str]]: + ... + + +def split_opt(opt: str) -> Tuple[str, str]: + ... + + +def normalize_opt(opt: str, ctx: Context) -> str: + ... + + +def split_arg_string(string: str) -> List[str]: + ... + + +class Option: + dest: str + action: str + nargs: int + const: Any + obj: Any + prefixes: Set[str] + _short_opts: List[str] + _long_opts: List[str] + # properties + takes_value: bool + + def __init__( + self, + opts: Iterable[str], + dest: str, + action: Optional[str] = ..., + nargs: int = ..., + const: Optional[Any] = ..., + obj: Optional[Any] = ... + ) -> None: + ... + + def process(self, value: Any, state: ParsingState) -> None: + ... + + +class Argument: + dest: str + nargs: int + obj: Any + + def __init__(self, dest: str, nargs: int = ..., obj: Optional[Any] = ...) -> None: + ... + + def process(self, value: Any, state: ParsingState) -> None: + ... + + +class ParsingState: + opts: Dict[str, Any] + largs: List[str] + rargs: List[str] + order: List[Any] + + def __init__(self, rargs: List[str]) -> None: + ... + + +class OptionParser: + ctx: Optional[Context] + allow_interspersed_args: bool + ignore_unknown_options: bool + _short_opt: Dict[str, Option] + _long_opt: Dict[str, Option] + _opt_prefixes: Set[str] + _args: List[Argument] + + def __init__(self, ctx: Optional[Context] = ...) -> None: + ... + + def add_option( + self, + opts: Iterable[str], + dest: str, + action: Optional[str] = ..., + nargs: int = ..., + const: Optional[Any] = ..., + obj: Optional[Any] = ... + ) -> None: + ... + + def add_argument(self, dest: str, nargs: int = ..., obj: Optional[Any] = ...) -> None: + ... + + def parse_args( + self, args: List[str] + ) -> Tuple[Dict[str, Any], List[str], List[Any]]: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi new file mode 100644 index 0000000..95b6850 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/termui.pyi @@ -0,0 +1,169 @@ +from typing import ( + Any, + Callable, + Generator, + Iterable, + IO, + List, + Optional, + Text, + overload, + Tuple, + TypeVar, +) + +from click.core import _ConvertibleType +from click._termui_impl import ProgressBar as _ProgressBar + + +def hidden_prompt_func(prompt: str) -> str: + ... + + +def _build_prompt( + text: str, + suffix: str, + show_default: bool = ..., + default: Optional[str] = ..., +) -> str: + ... + + +def prompt( + text: str, + default: Optional[str] = ..., + hide_input: bool = ..., + confirmation_prompt: bool = ..., + type: Optional[_ConvertibleType] = ..., + value_proc: Optional[Callable[[Optional[str]], Any]] = ..., + prompt_suffix: str = ..., + show_default: bool = ..., + err: bool = ..., + show_choices: bool = ..., +) -> Any: + ... + + +def confirm( + text: str, + default: bool = ..., + abort: bool = ..., + prompt_suffix: str = ..., + show_default: bool = ..., + err: bool = ..., +) -> bool: + ... + + +def get_terminal_size() -> Tuple[int, int]: + ... + + +def echo_via_pager(text: str, color: Optional[bool] = ...) -> None: + ... + + +_T = TypeVar('_T') + +@overload +def progressbar( + iterable: Iterable[_T], + length: Optional[int] = ..., + label: Optional[str] = ..., + show_eta: bool = ..., + show_percent: Optional[bool] = ..., + show_pos: bool = ..., + item_show_func: Optional[Callable[[_T], str]] = ..., + fill_char: str = ..., + empty_char: str = ..., + bar_template: str = ..., + info_sep: str = ..., + width: int = ..., + file: Optional[IO] = ..., + color: Optional[bool] = ..., +) -> _ProgressBar[_T]: + ... + +@overload +def progressbar( + iterable: None = ..., + length: Optional[int] = ..., + label: Optional[str] = ..., + show_eta: bool = ..., + show_percent: Optional[bool] = ..., + show_pos: bool = ..., + item_show_func: Optional[Callable[[_T], str]] = ..., + fill_char: str = ..., + empty_char: str = ..., + bar_template: str = ..., + info_sep: str = ..., + width: int = ..., + file: Optional[IO] = ..., + color: Optional[bool] = ..., +) -> _ProgressBar[int]: + ... + +def clear() -> None: + ... + + +def style( + text: str, + fg: Optional[str] = ..., + bg: Optional[str] = ..., + bold: Optional[bool] = ..., + dim: Optional[bool] = ..., + underline: Optional[bool] = ..., + blink: Optional[bool] = ..., + reverse: Optional[bool] = ..., + reset: bool = ..., +) -> str: + ... + + +def unstyle(text: str) -> str: + ... + + +# Styling options copied from style() for nicer type checking. +def secho( + text: str, + file: Optional[IO] = ..., + nl: bool = ..., + err: bool = ..., + color: Optional[bool] = ..., + fg: Optional[str] = ..., + bg: Optional[str] = ..., + bold: Optional[bool] = ..., + dim: Optional[bool] = ..., + underline: Optional[bool] = ..., + blink: Optional[bool] = ..., + reverse: Optional[bool] = ..., + reset: bool = ..., +): + ... + + +def edit( + text: Optional[str] = ..., + editor: Optional[str] = ..., + env: Optional[str] = ..., + require_save: bool = ..., + extension: str = ..., + filename: Optional[str] = ..., +) -> str: + ... + + +def launch(url: str, wait: bool = ..., locate: bool = ...) -> int: + ... + + +def getchar(echo: bool = ...) -> Text: + ... + + +def pause( + info: str = ..., err: bool = ... +) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi new file mode 100644 index 0000000..c743516 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/testing.pyi @@ -0,0 +1,63 @@ +from typing import (IO, Any, BinaryIO, ContextManager, Dict, Iterable, List, + Mapping, Optional, Text, Tuple, Union) + +from .core import BaseCommand + +clickpkg: Any + +class EchoingStdin: + def __init__(self, input: BinaryIO, output: BinaryIO) -> None: ... + def __getattr__(self, x: str) -> Any: ... + def read(self, n: int = ...) -> bytes: ... + def readline(self, n: int = ...) -> bytes: ... + def readlines(self) -> List[bytes]: ... + def __iter__(self) -> Iterable[bytes]: ... + +def make_input_stream(input: Optional[Union[bytes, Text, IO]], charset: Text) -> BinaryIO: ... + +class Result: + runner: CliRunner + exit_code: int + exception: Any + exc_info: Optional[Any] + def __init__( + self, + runner: CliRunner, + exit_code: int, + exception: Any, + exc_info: Optional[Any] = ..., + ) -> None: ... + @property + def output(self) -> Text: ... + +class CliRunner: + charset: str + env: Mapping[str, str] + echo_stdin: bool + def __init__( + self, + charset: Optional[Text] = ..., + env: Optional[Mapping[str, str]] = ..., + echo_stdin: bool = ..., + ) -> None: + ... + def get_default_prog_name(self, cli: BaseCommand) -> str: ... + def make_env(self, overrides: Optional[Mapping[str, str]] = ...) -> Dict[str, str]: ... + def isolation( + self, + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + color: bool = ..., + ) -> ContextManager[BinaryIO]: ... + def invoke( + self, + cli: BaseCommand, + args: Optional[Union[str, Iterable[str]]] = ..., + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + catch_exceptions: bool = ..., + color: bool = ..., + **extra: Any, + ) -> Result: + ... + def isolated_filesystem(self) -> ContextManager[str]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/types.pyi new file mode 100644 index 0000000..7f1e0ba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/types.pyi @@ -0,0 +1,269 @@ +from typing import Any, Callable, IO, Iterable, List, Optional, TypeVar, Union, Tuple as _PyTuple, Type +import datetime +import uuid + +from click.core import Context, Parameter, _ParamType as ParamType, _ConvertibleType + +class BoolParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> bool: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> bool: + ... + + +class CompositeParamType(ParamType): + arity: int + + +class Choice(ParamType): + choices: Iterable[str] + def __init__( + self, + choices: Iterable[str], + case_sensitive: bool = ..., + ) -> None: + ... + + +class DateTime(ParamType): + def __init__( + self, + formats: Optional[List[str]] = ..., + ) -> None: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> datetime.datetime: + ... + + +class FloatParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> float: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> float: + ... + + +class FloatRange(FloatParamType): + ... + + +class File(ParamType): + def __init__( + self, + mode: str = ..., + encoding: Optional[str] = ..., + errors: Optional[str] = ..., + lazy: Optional[bool] = ..., + atomic: Optional[bool] = ..., + ) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> IO: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> IO: + ... + + def resolve_lazy_flag(self, value: str) -> bool: + ... + + +_F = TypeVar('_F') # result of the function +_Func = Callable[[Optional[str]], _F] + + +class FuncParamType(ParamType): + func: _Func + + def __init__(self, func: _Func) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> _F: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> _F: + ... + + +class IntParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> int: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> int: + ... + + +class IntRange(IntParamType): + def __init__( + self, min: Optional[int] = ..., max: Optional[int] = ..., clamp: bool = ... + ) -> None: + ... + + +_PathType = TypeVar('_PathType', str, bytes) + + +class Path(ParamType): + def __init__( + self, + exists: bool = ..., + file_okay: bool = ..., + dir_okay: bool = ..., + writable: bool = ..., + readable: bool = ..., + resolve_path: bool = ..., + allow_dash: bool = ..., + path_type: Optional[Type[_PathType]] = ..., + ) -> None: + ... + + def coerce_path_result(self, rv: Union[str, bytes]) -> _PathType: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> _PathType: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> _PathType: + ... + +class StringParamType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> str: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> str: + ... + + +class Tuple(CompositeParamType): + types: List[ParamType] + + def __init__(self, types: Iterable[Any]) -> None: + ... + + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> Tuple: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> Tuple: + ... + + +class UnprocessedParamType(ParamType): + ... + + +class UUIDParameterType(ParamType): + def __call__( + self, + value: Optional[str], + param: Optional[Parameter] = ..., + ctx: Optional[Context] = ..., + ) -> uuid.UUID: + ... + + def convert( + self, + value: str, + param: Optional[Parameter], + ctx: Optional[Context], + ) -> uuid.UUID: + ... + + +def convert_type(ty: Optional[_ConvertibleType], default: Optional[Any] = ...) -> ParamType: + ... + +# parameter type shortcuts + +BOOL: BoolParamType +FLOAT: FloatParamType +INT: IntParamType +STRING: StringParamType +UNPROCESSED: UnprocessedParamType +UUID: UUIDParameterType diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi new file mode 100644 index 0000000..547c5e8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/click/utils.pyi @@ -0,0 +1,116 @@ +from typing import Any, Callable, Iterator, IO, List, Optional, TypeVar, Union, Text + +_T = TypeVar('_T') + + +def _posixify(name: str) -> str: + ... + + +def safecall(func: _T) -> _T: + ... + + +def make_str(value: Any) -> str: + ... + + +def make_default_short_help(help: str, max_length: int = ...): + ... + + +class LazyFile: + name: str + mode: str + encoding: Optional[str] + errors: str + atomic: bool + + def __init__( + self, + filename: str, + mode: str = ..., + encoding: Optional[str] = ..., + errors: str = ..., + atomic: bool = ... + ) -> None: + ... + + def open(self) -> IO: + ... + + def close(self) -> None: + ... + + def close_intelligently(self) -> None: + ... + + def __enter__(self) -> LazyFile: + ... + + def __exit__(self, exc_type, exc_value, tb): + ... + + def __iter__(self) -> Iterator: + ... + + +class KeepOpenFile: + _file: IO + + def __init__(self, file: IO) -> None: + ... + + def __enter__(self) -> KeepOpenFile: + ... + + def __exit__(self, exc_type, exc_value, tb): + ... + + def __iter__(self) -> Iterator: + ... + + +def echo( + message: object = ..., + file: Optional[IO] = ..., + nl: bool = ..., + err: bool = ..., + color: Optional[bool] = ..., +) -> None: + ... + + +def get_binary_stream(name: str) -> IO[bytes]: + ... + + +def get_text_stream( + name: str, encoding: Optional[str] = ..., errors: str = ... +) -> IO[str]: + ... + + +def open_file( + filename: str, + mode: str = ..., + encoding: Optional[str] = ..., + errors: str = ..., + lazy: bool = ..., + atomic: bool = ... +) -> Union[IO, LazyFile, KeepOpenFile]: + ... + + +def get_os_args() -> List[str]: + ... + + +def format_filename(filename: str, shorten: bool = ...) -> str: + ... + + +def get_app_dir( + app_name: str, roaming: bool = ..., force_posix: bool = ... +) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/croniter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/croniter.pyi new file mode 100644 index 0000000..0d01b7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/croniter.pyi @@ -0,0 +1,41 @@ +import datetime +from typing import Any, Dict, Iterator, List, Optional, Text, Tuple, Type, TypeVar, Union + +_RetType = Union[Type[float], Type[datetime.datetime]] +_SelfT = TypeVar('_SelfT', bound=croniter) + +class CroniterError(ValueError): ... +class CroniterBadCronError(CroniterError): ... +class CroniterBadDateError(CroniterError): ... +class CroniterNotAlphaError(CroniterError): ... + +class croniter(Iterator[Any]): + MONTHS_IN_YEAR: int + RANGES: Tuple[Tuple[int, int], ...] + DAYS: Tuple[int, ...] + ALPHACONV: Tuple[Dict[str, Any], ...] + LOWMAP: Tuple[Dict[int, Any], ...] + bad_length: str + tzinfo: Optional[datetime.tzinfo] + cur: float + expanded: List[List[str]] + start_time: float + dst_start_time: float + nth_weekday_of_month: Dict[str, Any] + def __init__(self, expr_format: Text, start_time: Optional[Union[float, datetime.datetime]] = ..., ret_type: Optional[_RetType] = ...) -> None: ... + # Most return value depend on ret_type, which can be passed in both as a method argument and as + # a constructor argument. + def get_next(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def get_prev(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def get_current(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def __iter__(self: _SelfT) -> _SelfT: ... + def __next__(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def next(self, ret_type: Optional[_RetType] = ...) -> Any: ... + def all_next(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def all_prev(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def iter(self, ret_type: Optional[_RetType] = ...) -> Iterator[Any]: ... + def is_leap(self, year: int) -> bool: ... + @classmethod + def expand(cls, expr_format: Text) -> Tuple[List[List[str]], Dict[str, Any]]: ... + @classmethod + def is_valid(cls, expression: Text) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi new file mode 100644 index 0000000..1311a17 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/_common.pyi @@ -0,0 +1,15 @@ +from typing import Optional + +class weekday(object): + def __init__(self, weekday: int, n: Optional[int] = ...) -> None: ... + + def __call__(self, n: int) -> weekday: ... + + def __eq__(self, other) -> bool: ... + + def __repr__(self) -> str: ... + + def __hash__(self) -> int: ... + + weekday: int + n: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi new file mode 100644 index 0000000..045a793 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/parser.pyi @@ -0,0 +1,46 @@ +from typing import List, Tuple, Optional, Callable, Union, IO, Any, Dict, Mapping, Text +from datetime import datetime, tzinfo + +_FileOrStr = Union[bytes, Text, IO[str], IO[Any]] + + +class parserinfo(object): + JUMP: List[str] + WEEKDAYS: List[Tuple[str, str]] + MONTHS: List[Tuple[str, str]] + HMS: List[Tuple[str, str, str]] + AMPM: List[Tuple[str, str]] + UTCZONE: List[str] + PERTAIN: List[str] + TZOFFSET: Dict[str, int] + + def __init__(self, dayfirst: bool = ..., yearfirst: bool = ...) -> None: ... + def jump(self, name: Text) -> bool: ... + def weekday(self, name: Text) -> Optional[int]: ... + def month(self, name: Text) -> Optional[int]: ... + def hms(self, name: Text) -> Optional[int]: ... + def ampm(self, name: Text) -> Optional[int]: ... + def pertain(self, name: Text) -> bool: ... + def utczone(self, name: Text) -> bool: ... + def tzoffset(self, name: Text) -> Optional[int]: ... + def convertyear(self, year: int) -> int: ... + def validate(self, res: datetime) -> bool: ... + +class parser(object): + def __init__(self, info: Optional[parserinfo] = ...) -> None: ... + def parse(self, timestr: _FileOrStr, + default: Optional[datetime] = ..., + ignoretz: bool = ..., tzinfos: Optional[Mapping[Text, tzinfo]] = ..., + **kwargs: Any) -> datetime: ... + +def isoparse(dt_str: Union[str, bytes, IO[str], IO[bytes]]) -> datetime: ... + +DEFAULTPARSER: parser +def parse(timestr: _FileOrStr, parserinfo: Optional[parserinfo] = ..., **kwargs: Any) -> datetime: ... +class _tzparser: ... + +DEFAULTTZPARSER: _tzparser + +class InvalidDatetimeError(ValueError): ... +class InvalidDateError(InvalidDatetimeError): ... +class InvalidTimeError(InvalidDatetimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi new file mode 100644 index 0000000..40ee586 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/relativedelta.pyi @@ -0,0 +1,91 @@ +from typing import overload, Any, List, Optional, SupportsFloat, TypeVar, Union +from datetime import date, datetime, timedelta + +from ._common import weekday + + +_SelfT = TypeVar('_SelfT', bound=relativedelta) +_DateT = TypeVar('_DateT', date, datetime) +# Work around attribute and type having the same name. +_weekday = weekday + +MO: weekday +TU: weekday +WE: weekday +TH: weekday +FR: weekday +SA: weekday +SU: weekday + + +class relativedelta(object): + years: int + months: int + days: int + leapdays: int + hours: int + minutes: int + seconds: int + microseconds: int + year: Optional[int] + month: Optional[int] + weekday: Optional[_weekday] + day: Optional[int] + hour: Optional[int] + minute: Optional[int] + second: Optional[int] + microsecond: Optional[int] + def __init__(self, + dt1: Optional[date] = ..., + dt2: Optional[date] = ..., + years: Optional[int] = ..., months: Optional[int] = ..., + days: Optional[int] = ..., leapdays: Optional[int] = ..., + weeks: Optional[int] = ..., + hours: Optional[int] = ..., minutes: Optional[int] = ..., + seconds: Optional[int] = ..., microseconds: Optional[int] = ..., + year: Optional[int] = ..., month: Optional[int] = ..., + day: Optional[int] = ..., + weekday: Optional[Union[int, _weekday]] = ..., + yearday: Optional[int] = ..., + nlyearday: Optional[int] = ..., + hour: Optional[int] = ..., minute: Optional[int] = ..., + second: Optional[int] = ..., + microsecond: Optional[int] = ...) -> None: ... + @property + def weeks(self) -> int: ... + @weeks.setter + def weeks(self, value: int) -> None: ... + def normalized(self: _SelfT) -> _SelfT: ... + # TODO: use Union when mypy will handle it properly in overloaded operator + # methods (#2129, #1442, #1264 in mypy) + @overload + def __add__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __add__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __add__(self, other: _DateT) -> _DateT: ... + @overload + def __radd__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __radd__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __radd__(self, other: _DateT) -> _DateT: ... + @overload + def __rsub__(self: _SelfT, other: relativedelta) -> _SelfT: ... + @overload + def __rsub__(self: _SelfT, other: timedelta) -> _SelfT: ... + @overload + def __rsub__(self, other: _DateT) -> _DateT: ... + def __sub__(self: _SelfT, other: relativedelta) -> _SelfT: ... + def __neg__(self: _SelfT) -> _SelfT: ... + def __bool__(self) -> bool: ... + def __nonzero__(self) -> bool: ... + def __mul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __rmul__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __eq__(self, other) -> bool: ... + def __ne__(self, other: object) -> bool: ... + def __div__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __truediv__(self: _SelfT, other: SupportsFloat) -> _SelfT: ... + def __repr__(self) -> str: ... + def __abs__(self: _SelfT) -> _SelfT: ... + def __hash__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi new file mode 100644 index 0000000..f8ab9d2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/rrule.pyi @@ -0,0 +1,103 @@ +from ._common import weekday as weekdaybase +from typing import Any, Iterable, Optional, Union +import datetime + +YEARLY: int +MONTHLY: int +WEEKLY: int +DAILY: int +HOURLY: int +MINUTELY: int +SECONDLY: int + +class weekday(weekdaybase): + ... + +MO: weekday +TU: weekday +WE: weekday +TH: weekday +FR: weekday +SA: weekday +SU: weekday + +class rrulebase: + def __init__(self, cache: bool = ...) -> None: ... + def __iter__(self): ... + def __getitem__(self, item): ... + def __contains__(self, item): ... + def count(self): ... + def before(self, dt, inc: bool = ...): ... + def after(self, dt, inc: bool = ...): ... + def xafter(self, dt, count: Optional[Any] = ..., inc: bool = ...): ... + def between(self, after, before, inc: bool = ..., count: int = ...): ... + +class rrule(rrulebase): + def __init__(self, + freq, + dtstart: Optional[datetime.datetime] = ..., + interval: int = ..., + wkst: Optional[Union[weekday, int]] = ..., + count: Optional[int] = ..., + until: Optional[Union[datetime.datetime, int]] = ..., + bysetpos: Optional[Union[int, Iterable[int]]] = ..., + bymonth: Optional[Union[int, Iterable[int]]] = ..., + bymonthday: Optional[Union[int, Iterable[int]]] = ..., + byyearday: Optional[Union[int, Iterable[int]]] = ..., + byeaster: Optional[Union[int, Iterable[int]]] = ..., + byweekno: Optional[Union[int, Iterable[int]]] = ..., + byweekday: Optional[Union[int, Iterable[int]]] = ..., + byhour: Optional[Union[int, Iterable[int]]] = ..., + byminute: Optional[Union[int, Iterable[int]]] = ..., + bysecond: Optional[Union[int, Iterable[int]]] = ..., + cache: bool = ...) -> None: ... + def replace(self, **kwargs): ... + +class _iterinfo: + rrule: Any = ... + def __init__(self, rrule) -> None: ... + yearlen: int = ... + nextyearlen: int = ... + yearordinal: int = ... + yearweekday: int = ... + mmask: Any = ... + mdaymask: Any = ... + nmdaymask: Any = ... + wdaymask: Any = ... + mrange: Any = ... + wnomask: Any = ... + nwdaymask: Any = ... + eastermask: Any = ... + lastyear: int = ... + lastmonth: int = ... + def rebuild(self, year, month): ... + def ydayset(self, year, month, day): ... + def mdayset(self, year, month, day): ... + def wdayset(self, year, month, day): ... + def ddayset(self, year, month, day): ... + def htimeset(self, hour, minute, second): ... + def mtimeset(self, hour, minute, second): ... + def stimeset(self, hour, minute, second): ... + +class rruleset(rrulebase): + class _genitem: + dt: Any = ... + genlist: Any = ... + gen: Any = ... + def __init__(self, genlist, gen) -> None: ... + def __next__(self): ... + next: Any = ... + def __lt__(self, other): ... + def __gt__(self, other): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __init__(self, cache: bool = ...) -> None: ... + def rrule(self, rrule): ... + def rdate(self, rdate): ... + def exrule(self, exrule): ... + def exdate(self, exdate): ... + +class _rrulestr: + def __call__(self, s, **kwargs): ... + +rrulestr: _rrulestr diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi new file mode 100644 index 0000000..5a5e45f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/__init__.pyi @@ -0,0 +1,15 @@ +from .tz import ( + tzutc as tzutc, + tzoffset as tzoffset, + tzlocal as tzlocal, + tzfile as tzfile, + tzrange as tzrange, + tzstr as tzstr, + tzical as tzical, + gettz as gettz, + datetime_exists as datetime_exists, + datetime_ambiguous as datetime_ambiguous, + resolve_imaginary as resolve_imaginary, +) + +UTC: tzutc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi new file mode 100644 index 0000000..32b06ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/_common.pyi @@ -0,0 +1,24 @@ +from typing import Any, Optional +from datetime import datetime, tzinfo, timedelta + +def tzname_in_python2(namefunc): ... +def enfold(dt: datetime, fold: int = ...): ... + +class _DatetimeWithFold(datetime): + @property + def fold(self): ... + +class _tzinfo(tzinfo): + def is_ambiguous(self, dt: datetime) -> bool: ... + def fromutc(self, dt: datetime) -> datetime: ... + +class tzrangebase(_tzinfo): + def __init__(self) -> None: ... + def utcoffset(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def dst(self, dt: Optional[datetime]) -> Optional[timedelta]: ... + def tzname(self, dt: Optional[datetime]) -> str: ... + def fromutc(self, dt: datetime) -> datetime: ... + def is_ambiguous(self, dt: datetime) -> bool: ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi new file mode 100644 index 0000000..7139507 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/tz/tz.pyi @@ -0,0 +1,96 @@ +from typing import Any, Optional, Union, IO, Text, Tuple, List +import datetime +from ._common import tzname_in_python2 as tzname_in_python2, _tzinfo as _tzinfo +from ._common import tzrangebase as tzrangebase, enfold as enfold +from ..relativedelta import relativedelta + +_FileObj = Union[str, Text, IO[str], IO[Text]] + +ZERO: datetime.timedelta +EPOCH: datetime.datetime +EPOCHORDINAL: int + +class tzutc(datetime.tzinfo): + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + +class tzoffset(datetime.tzinfo): + def __init__(self, name, offset) -> None: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + + @classmethod + def instance(cls, name, offset) -> tzoffset: ... + +class tzlocal(_tzinfo): + def __init__(self) -> None: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def is_ambiguous(self, dt: Optional[datetime.datetime]) -> bool: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + __reduce__: Any + +class _ttinfo: + def __init__(self) -> None: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + +class tzfile(_tzinfo): + def __init__(self, fileobj: _FileObj, filename: Optional[Text] = ...) -> None: ... + def is_ambiguous(self, dt: Optional[datetime.datetime], idx: Optional[int] = ...) -> bool: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime]) -> Optional[datetime.timedelta]: ... + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def __eq__(self, other): ... + __hash__: Any + def __ne__(self, other): ... + def __reduce__(self): ... + def __reduce_ex__(self, protocol): ... + +class tzrange(tzrangebase): + hasdst: bool + def __init__(self, stdabbr: Text, stdoffset: Union[int, datetime.timedelta, None] = ..., dstabbr: Optional[Text] = ..., dstoffset: Union[int, datetime.timedelta, None] = ..., start: Optional[relativedelta] = ..., end: Optional[relativedelta] = ...) -> None: ... + def transitions(self, year: int) -> Tuple[datetime.datetime, datetime.datetime]: ... + def __eq__(self, other): ... + +class tzstr(tzrange): + hasdst: bool + def __init__(self, s: Union[bytes, _FileObj], posix_offset: bool = ...) -> None: ... + + @classmethod + def instance(cls, name, offset) -> tzoffset: ... + +class tzical: + def __init__(self, fileobj: _FileObj) -> None: ... + def keys(self): ... + def get(self, tzid: Optional[Any] = ...): ... + +TZFILES: List[str] +TZPATHS: List[str] + +def datetime_exists(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ... +def datetime_ambiguous(dt: datetime.datetime, tz: Optional[datetime.tzinfo] = ...) -> bool: ... +def resolve_imaginary(dt: datetime.datetime) -> datetime.datetime: ... + + +class _GetTZ: + def __call__(self, name: Optional[Text] = ...) -> Optional[datetime.tzinfo]: ... + def nocache(self, name: Optional[Text]) -> Optional[datetime.tzinfo]: ... + +gettz: _GetTZ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi new file mode 100644 index 0000000..b722053 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/dateutil/utils.pyi @@ -0,0 +1,7 @@ +from typing import Optional +from datetime import datetime, tzinfo, timedelta + + +def default_tzinfo(dt: datetime, tzinfo: tzinfo) -> datetime: ... +def today(tzinfo: Optional[tzinfo] = ...) -> datetime: ... +def within_delta(dt1: datetime, dt2: datetime, delta: timedelta) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/emoji.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/emoji.pyi new file mode 100644 index 0000000..fe193b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/emoji.pyi @@ -0,0 +1,18 @@ +from typing import Tuple, Pattern, List, Dict, Union + +_DEFAULT_DELIMITER: str + +def emojize( + string: str, + use_aliases: bool = ..., + delimiters: Tuple[str, str] = ... +) -> str: ... + +def demojize( + string: str, + delimiters: Tuple[str, str] = ... +) -> str: ... + +def get_emoji_regexp() -> Pattern: ... + +def emoji_lis(string: str) -> List[Dict[str, Union[int, str]]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/first.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/first.pyi new file mode 100644 index 0000000..f03f3a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/first.pyi @@ -0,0 +1,13 @@ +from typing import Any, Callable, Iterable, Optional, overload, TypeVar, Union + +_T = TypeVar('_T') +_S = TypeVar('_S') + +@overload +def first(iterable: Iterable[_T]) -> Optional[_T]: ... +@overload +def first(iterable: Iterable[_T], default: _S) -> Union[_T, _S]: ... +@overload +def first(iterable: Iterable[_T], default: _S, key: Optional[Callable[[_T], Any]]) -> Union[_T, _S]: ... +@overload +def first(iterable: Iterable[_T], *, key: Optional[Callable[[_T], Any]]) -> Optional[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi new file mode 100644 index 0000000..caeac5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/__init__.pyi @@ -0,0 +1,45 @@ +# Stubs for flask (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask as Flask +from .blueprints import Blueprint as Blueprint +from .config import Config as Config +from .ctx import after_this_request as after_this_request +from .ctx import copy_current_request_context as copy_current_request_context +from .ctx import has_app_context as has_app_context +from .ctx import has_request_context as has_request_context +from .globals import current_app as current_app +from .globals import g as g +from .globals import request as request +from .globals import session as session +from .helpers import flash as flash +from .helpers import get_flashed_messages as get_flashed_messages +from .helpers import get_template_attribute as get_template_attribute +from .helpers import make_response as make_response +from .helpers import safe_join as safe_join +from .helpers import send_file as send_file +from .helpers import send_from_directory as send_from_directory +from .helpers import stream_with_context as stream_with_context +from .helpers import url_for as url_for +from .json import jsonify as jsonify +from .signals import appcontext_popped as appcontext_popped +from .signals import appcontext_pushed as appcontext_pushed +from .signals import appcontext_tearing_down as appcontext_tearing_down +from .signals import before_render_template as before_render_template +from .signals import got_request_exception as got_request_exception +from .signals import message_flashed as message_flashed +from .signals import request_finished as request_finished +from .signals import request_started as request_started +from .signals import request_tearing_down as request_tearing_down +from .signals import signals_available as signals_available +from .signals import template_rendered as template_rendered +from .templating import render_template as render_template +from .templating import render_template_string as render_template_string +from .wrappers import Request as Request +from .wrappers import Response as Response + +from werkzeug.exceptions import abort as abort +from werkzeug.utils import redirect as redirect +from jinja2 import Markup as Markup +from jinja2 import escape as escape diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi new file mode 100644 index 0000000..5be3d6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/app.pyi @@ -0,0 +1,148 @@ +# Stubs for flask.app (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .blueprints import Blueprint +from .config import Config, ConfigAttribute +from .ctx import AppContext, RequestContext, _AppCtxGlobals +from .globals import _request_ctx_stack, g, request, session +from .helpers import _PackageBoundObject, find_package, get_debug_flag, get_env, get_flashed_messages, get_load_dotenv, locked_cached_property, url_for +from .logging import create_logger +from .sessions import SecureCookieSessionInterface +from .signals import appcontext_tearing_down, got_request_exception, request_finished, request_started, request_tearing_down +from .templating import DispatchingJinjaLoader, Environment +from .wrappers import Request, Response +from .testing import FlaskClient +from typing import Any, Callable, ContextManager, Dict, List, Optional, Type, TypeVar, Union, Text +from datetime import timedelta + +def setupmethod(f: Any): ... + +_T = TypeVar('_T') + +class Flask(_PackageBoundObject): + request_class: type = ... + response_class: type = ... + jinja_environment: type = ... + app_ctx_globals_class: type = ... + config_class: Type[Config] = ... + testing: Any = ... + secret_key: Union[Text, bytes, None] = ... + session_cookie_name: Any = ... + permanent_session_lifetime: timedelta = ... + send_file_max_age_default: timedelta = ... + use_x_sendfile: Any = ... + json_encoder: Any = ... + json_decoder: Any = ... + jinja_options: Any = ... + default_config: Any = ... + url_rule_class: type = ... + test_client_class: type = ... + test_cli_runner_class: type = ... + session_interface: Any = ... + import_name: str = ... + template_folder: str = ... + root_path: Optional[Union[str, Text]] = ... + static_url_path: Any = ... + static_folder: Optional[str] = ... + instance_path: Union[str, Text] = ... + config: Config = ... + view_functions: Any = ... + error_handler_spec: Any = ... + url_build_error_handlers: Any = ... + before_request_funcs: Dict[Optional[str], List[Callable[[], Any]]] = ... + before_first_request_funcs: List[Callable[[], None]] = ... + after_request_funcs: Dict[Optional[str], List[Callable[[Response], Response]]] = ... + teardown_request_funcs: Dict[Optional[str], List[Callable[[Optional[Exception]], Any]]] = ... + teardown_appcontext_funcs: List[Callable[[Optional[Exception]], Any]] = ... + url_value_preprocessors: Any = ... + url_default_functions: Any = ... + template_context_processors: Any = ... + shell_context_processors: Any = ... + blueprints: Any = ... + extensions: Any = ... + url_map: Any = ... + subdomain_matching: Any = ... + cli: Any = ... + def __init__(self, import_name: str, static_url_path: Optional[str] = ..., static_folder: Optional[str] = ..., static_host: Optional[str] = ..., host_matching: bool = ..., subdomain_matching: bool = ..., template_folder: str = ..., instance_path: Optional[str] = ..., instance_relative_config: bool = ..., root_path: Optional[str] = ...) -> None: ... + @property + def name(self) -> str: ... + @property + def propagate_exceptions(self) -> bool: ... + @property + def preserve_context_on_exception(self): ... + @property + def logger(self): ... + @property + def jinja_env(self): ... + @property + def got_first_request(self) -> bool: ... + def make_config(self, instance_relative: bool = ...): ... + def auto_find_instance_path(self): ... + def open_instance_resource(self, resource: Union[str, Text], mode: str = ...): ... + templates_auto_reload: Any = ... + def create_jinja_environment(self): ... + def create_global_jinja_loader(self): ... + def select_jinja_autoescape(self, filename: Any): ... + def update_template_context(self, context: Any) -> None: ... + def make_shell_context(self): ... + env: Optional[str] = ... + debug: bool = ... + def run(self, host: Optional[str] = ..., port: Optional[Union[int, str]] = ..., debug: Optional[bool] = ..., load_dotenv: bool = ..., **options: Any) -> None: ... + def test_client(self, use_cookies: bool = ..., **kwargs: Any) -> FlaskClient: ... + def test_cli_runner(self, **kwargs: Any): ... + def open_session(self, request: Any): ... + def save_session(self, session: Any, response: Any): ... + def make_null_session(self): ... + def register_blueprint(self, blueprint: Blueprint, **options: Any) -> None: ... + def iter_blueprints(self): ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., provide_automatic_options: Optional[bool] = ..., **options: Any) -> None: ... + def route(self, rule: str, **options: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def endpoint(self, endpoint: str) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def errorhandler(self, code_or_exception: Union[int, Type[Exception]]) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def register_error_handler(self, code_or_exception: Union[int, Type[Exception]], f: Callable[..., Any]) -> None: ... + def template_filter(self, name: Optional[Any] = ...): ... + def add_template_filter(self, f: Any, name: Optional[Any] = ...) -> None: ... + def template_test(self, name: Optional[Any] = ...): ... + def add_template_test(self, f: Any, name: Optional[Any] = ...) -> None: ... + def template_global(self, name: Optional[Any] = ...): ... + def add_template_global(self, f: Any, name: Optional[Any] = ...) -> None: ... + def before_request(self, f: Callable[[], _T]) -> Callable[[], _T]: ... + def before_first_request(self, f: Callable[[], _T]) -> Callable[[], _T]: ... + def after_request(self, f: Callable[[Response], Response]) -> Callable[[Response], Response]: ... + def teardown_request(self, f: Callable[[Optional[Exception]], _T]) -> Callable[[Optional[Exception]], _T]: ... + def teardown_appcontext(self, f: Callable[[Optional[Exception]], _T]) -> Callable[[Optional[Exception]], _T]: ... + def context_processor(self, f: Any): ... + def shell_context_processor(self, f: Any): ... + def url_value_preprocessor(self, f: Any): ... + def url_defaults(self, f: Any): ... + def handle_http_exception(self, e: Any): ... + def trap_http_exception(self, e: Any): ... + def handle_user_exception(self, e: Any): ... + def handle_exception(self, e: Any): ... + def log_exception(self, exc_info: Any) -> None: ... + def raise_routing_exception(self, request: Any) -> None: ... + def dispatch_request(self): ... + def full_dispatch_request(self): ... + def finalize_request(self, rv: Any, from_error_handler: bool = ...): ... + def try_trigger_before_first_request_functions(self): ... + def make_default_options_response(self): ... + def should_ignore_error(self, error: Any): ... + def make_response(self, rv: Any): ... + def create_url_adapter(self, request: Any): ... + def inject_url_defaults(self, endpoint: Any, values: Any) -> None: ... + def handle_url_build_error(self, error: Any, endpoint: Any, values: Any): ... + def preprocess_request(self): ... + def process_response(self, response: Any): ... + def do_teardown_request(self, exc: Any = ...) -> None: ... + def do_teardown_appcontext(self, exc: Any = ...) -> None: ... + def app_context(self): ... + def request_context(self, environ: Any): ... + def test_request_context(self, *args: Any, **kwargs: Any) -> ContextManager[RequestContext]: ... + def wsgi_app(self, environ: Any, start_response: Any): ... + def __call__(self, environ: Any, start_response: Any): ... + + # These are not preset at runtime but we add them since monkeypatching this + # class is quite common. + def __setattr__(self, name: str, value: Any): ... + def __getattr__(self, name: str): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi new file mode 100644 index 0000000..d43f8e4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/blueprints.pyi @@ -0,0 +1,64 @@ +# Stubs for flask.blueprints (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .helpers import _PackageBoundObject +from typing import Any, Callable, Optional, Type, TypeVar, Union + +_T = TypeVar('_T') + +class BlueprintSetupState: + app: Any = ... + blueprint: Any = ... + options: Any = ... + first_registration: Any = ... + subdomain: Any = ... + url_prefix: Any = ... + url_defaults: Any = ... + def __init__(self, blueprint: Any, app: Any, options: Any, first_registration: Any) -> None: ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., **options: Any) -> None: ... + +class Blueprint(_PackageBoundObject): + warn_on_modifications: bool = ... + json_encoder: Any = ... + json_decoder: Any = ... + import_name: str = ... + template_folder: Optional[str] = ... + root_path: str = ... + name: str = ... + url_prefix: Optional[str] = ... + subdomain: Optional[str] = ... + static_folder: Optional[str] = ... + static_url_path: Optional[str] = ... + deferred_functions: Any = ... + url_values_defaults: Any = ... + def __init__(self, name: str, import_name: str, static_folder: Optional[str] = ..., static_url_path: Optional[str] = ..., template_folder: Optional[str] = ..., url_prefix: Optional[str] = ..., subdomain: Optional[str] = ..., url_defaults: Optional[Any] = ..., root_path: Optional[str] = ...) -> None: ... + def record(self, func: Any) -> None: ... + def record_once(self, func: Any): ... + def make_setup_state(self, app: Any, options: Any, first_registration: bool = ...): ... + def register(self, app: Any, options: Any, first_registration: bool = ...) -> None: ... + def route(self, rule: str, **options: Any) -> Callable[[Callable[..., Any]], Callable[..., Any]]: ... + def add_url_rule(self, rule: str, endpoint: Optional[str] = ..., view_func: Callable[..., Any] = ..., **options: Any) -> None: ... + def endpoint(self, endpoint: str) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def app_template_filter(self, name: Optional[Any] = ...): ... + def add_app_template_filter(self, f: Any, name: Optional[Any] = ...) -> None: ... + def app_template_test(self, name: Optional[Any] = ...): ... + def add_app_template_test(self, f: Any, name: Optional[Any] = ...) -> None: ... + def app_template_global(self, name: Optional[Any] = ...): ... + def add_app_template_global(self, f: Any, name: Optional[Any] = ...) -> None: ... + def before_request(self, f: Any): ... + def before_app_request(self, f: Any): ... + def before_app_first_request(self, f: Any): ... + def after_request(self, f: Any): ... + def after_app_request(self, f: Any): ... + def teardown_request(self, f: Any): ... + def teardown_app_request(self, f: Any): ... + def context_processor(self, f: Any): ... + def app_context_processor(self, f: Any): ... + def app_errorhandler(self, code: Any): ... + def url_value_preprocessor(self, f: Any): ... + def url_defaults(self, f: Any): ... + def app_url_value_preprocessor(self, f: Any): ... + def app_url_defaults(self, f: Any): ... + def errorhandler(self, code_or_exception: Union[int, Type[Exception]]) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + def register_error_handler(self, code_or_exception: Union[int, Type[Exception]], f: Callable[..., Any]) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi new file mode 100644 index 0000000..15d3243 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/cli.pyi @@ -0,0 +1,64 @@ +# Stubs for flask.cli (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +import click +from .globals import current_app +from .helpers import get_debug_flag, get_env, get_load_dotenv +from typing import Any, Optional + +class NoAppException(click.UsageError): ... + +def find_best_app(script_info: Any, module: Any): ... +def call_factory(script_info: Any, app_factory: Any, arguments: Any = ...): ... +def find_app_by_string(script_info: Any, module: Any, app_name: Any): ... +def prepare_import(path: Any): ... +def locate_app(script_info: Any, module_name: Any, app_name: Any, raise_if_not_found: bool = ...): ... +def get_version(ctx: Any, param: Any, value: Any): ... + +version_option: Any + +class DispatchingApp: + loader: Any = ... + def __init__(self, loader: Any, use_eager_loading: bool = ...) -> None: ... + def __call__(self, environ: Any, start_response: Any): ... + +class ScriptInfo: + app_import_path: Any = ... + create_app: Any = ... + data: Any = ... + def __init__(self, app_import_path: Optional[Any] = ..., create_app: Optional[Any] = ...) -> None: ... + def load_app(self): ... + +pass_script_info: Any + +def with_appcontext(f: Any): ... + +class AppGroup(click.Group): + def command(self, *args: Any, **kwargs: Any): ... + def group(self, *args: Any, **kwargs: Any): ... + +class FlaskGroup(AppGroup): + create_app: Any = ... + load_dotenv: Any = ... + def __init__(self, add_default_commands: bool = ..., create_app: Optional[Any] = ..., add_version_option: bool = ..., load_dotenv: bool = ..., **extra: Any) -> None: ... + def get_command(self, ctx: Any, name: Any): ... + def list_commands(self, ctx: Any): ... + def main(self, *args: Any, **kwargs: Any): ... + +def load_dotenv(path: Optional[Any] = ...): ... +def show_server_banner(env: Any, debug: Any, app_import_path: Any, eager_loading: Any): ... + +class CertParamType(click.ParamType): + name: str = ... + path_type: Any = ... + def __init__(self) -> None: ... + def convert(self, value: Any, param: Any, ctx: Any): ... + +def run_command(info: Any, host: Any, port: Any, reload: Any, debugger: Any, eager_loading: Any, with_threads: Any, cert: Any) -> None: ... +def shell_command() -> None: ... +def routes_command(sort: Any, all_methods: Any): ... + +cli: Any + +def main(as_module: bool = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi new file mode 100644 index 0000000..6b925e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/config.pyi @@ -0,0 +1,22 @@ +# Stubs for flask.config (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional, Dict + +class ConfigAttribute: + __name__: Any = ... + get_converter: Any = ... + def __init__(self, name: Any, get_converter: Optional[Any] = ...) -> None: ... + def __get__(self, obj: Any, type: Optional[Any] = ...): ... + def __set__(self, obj: Any, value: Any) -> None: ... + +class Config(Dict[str, Any]): + root_path: Any = ... + def __init__(self, root_path: Any, defaults: Optional[Any] = ...) -> None: ... + def from_envvar(self, variable_name: Any, silent: bool = ...): ... + def from_pyfile(self, filename: Any, silent: bool = ...): ... + def from_object(self, obj: Any) -> None: ... + def from_json(self, filename: Any, silent: bool = ...): ... + def from_mapping(self, *mapping: Any, **kwargs: Any): ... + def get_namespace(self, namespace: Any, lowercase: bool = ..., trim_namespace: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi new file mode 100644 index 0000000..09fdea3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/ctx.pyi @@ -0,0 +1,46 @@ +# Stubs for flask.ctx (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack +from .signals import appcontext_popped, appcontext_pushed +from typing import Any, Optional + +class _AppCtxGlobals: + def get(self, name: Any, default: Optional[Any] = ...): ... + def pop(self, name: Any, default: Any = ...): ... + def setdefault(self, name: Any, default: Optional[Any] = ...): ... + def __contains__(self, item: Any): ... + def __iter__(self): ... + +def after_this_request(f: Any): ... +def copy_current_request_context(f: Any): ... +def has_request_context(): ... +def has_app_context(): ... + +class AppContext: + app: Any = ... + url_adapter: Any = ... + g: Any = ... + def __init__(self, app: Any) -> None: ... + def push(self) -> None: ... + def pop(self, exc: Any = ...) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... + +class RequestContext: + app: Any = ... + request: Any = ... + url_adapter: Any = ... + flashes: Any = ... + session: Any = ... + preserved: bool = ... + def __init__(self, app: Any, environ: Any, request: Optional[Any] = ...) -> None: ... + g: Any = ... + def copy(self): ... + def match_request(self) -> None: ... + def push(self) -> None: ... + def pop(self, exc: Any = ...) -> None: ... + def auto_pop(self, exc: Any) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi new file mode 100644 index 0000000..5a4cbea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/debughelpers.pyi @@ -0,0 +1,21 @@ +# Stubs for flask.debughelpers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask +from .blueprints import Blueprint +from .globals import _request_ctx_stack +from typing import Any + +class UnexpectedUnicodeError(AssertionError, UnicodeError): ... + +class DebugFilesKeyError(KeyError, AssertionError): + msg: Any = ... + def __init__(self, request: Any, key: Any) -> None: ... + +class FormDataRoutingRedirect(AssertionError): + def __init__(self, request: Any) -> None: ... + +def attach_enctype_error_multidict(request: Any): ... +def explain_template_loading_attempts(app: Any, template: Any, attempts: Any) -> None: ... +def explain_ignored_app_run() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi new file mode 100644 index 0000000..8ce1caf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/globals.pyi @@ -0,0 +1,18 @@ +# Stubs for flask.globals (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .app import Flask +from .wrappers import Request +from typing import Any +from werkzeug.local import LocalStack + +class _FlaskLocalProxy(Flask): + def _get_current_object(self) -> Flask: ... + +_request_ctx_stack: LocalStack +_app_ctx_stack: LocalStack +current_app: _FlaskLocalProxy +request: Request +session: Any +g: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi new file mode 100644 index 0000000..726f8a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/helpers.pyi @@ -0,0 +1,48 @@ +# Stubs for flask.helpers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack, current_app, request, session +from .signals import message_flashed +from typing import Any, Optional + +def get_env(): ... +def get_debug_flag(): ... +def get_load_dotenv(default: bool = ...): ... +def stream_with_context(generator_or_function: Any): ... +def make_response(*args: Any): ... +def url_for(endpoint: Any, **values: Any): ... +def get_template_attribute(template_name: Any, attribute: Any): ... +def flash(message: Any, category: str = ...) -> None: ... +def get_flashed_messages(with_categories: bool = ..., category_filter: Any = ...): ... +def send_file(filename_or_fp: Any, mimetype: Optional[Any] = ..., as_attachment: bool = ..., attachment_filename: Optional[Any] = ..., add_etags: bool = ..., cache_timeout: Optional[Any] = ..., conditional: bool = ..., last_modified: Optional[Any] = ...): ... +def safe_join(directory: Any, *pathnames: Any): ... +def send_from_directory(directory: Any, filename: Any, **options: Any): ... +def get_root_path(import_name: Any): ... +def find_package(import_name: Any): ... + +class locked_cached_property: + __name__: Any = ... + __module__: Any = ... + __doc__: Any = ... + func: Any = ... + lock: Any = ... + def __init__(self, func: Any, name: Optional[Any] = ..., doc: Optional[Any] = ...) -> None: ... + def __get__(self, obj: Any, type: Optional[Any] = ...): ... + +class _PackageBoundObject: + import_name: Any = ... + template_folder: Any = ... + root_path: Any = ... + def __init__(self, import_name: Any, template_folder: Optional[Any] = ..., root_path: Optional[Any] = ...) -> None: ... + static_folder: Any = ... + static_url_path: Any = ... + @property + def has_static_folder(self): ... + def jinja_loader(self): ... + def get_send_file_max_age(self, filename: Any): ... + def send_static_file(self, filename: Any): ... + def open_resource(self, resource: Any, mode: str = ...): ... + +def total_seconds(td: Any): ... +def is_ip(value: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi new file mode 100644 index 0000000..24047ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/__init__.pyi @@ -0,0 +1,19 @@ +# Stubs for flask.json (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +import json as _json +from typing import Any + +class JSONEncoder(_json.JSONEncoder): + def default(self, o: Any): ... + +class JSONDecoder(_json.JSONDecoder): ... + +def dumps(obj: Any, **kwargs: Any): ... +def dump(obj: Any, fp: Any, **kwargs: Any) -> None: ... +def loads(s: Any, **kwargs: Any): ... +def load(fp: Any, **kwargs: Any): ... +def htmlsafe_dumps(obj: Any, **kwargs: Any): ... +def htmlsafe_dump(obj: Any, fp: Any, **kwargs: Any) -> None: ... +def jsonify(*args: Any, **kwargs: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi new file mode 100644 index 0000000..b1648dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/json/tag.pyi @@ -0,0 +1,71 @@ +# Stubs for flask.json.tag (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional + +class JSONTag: + key: Any = ... + serializer: Any = ... + def __init__(self, serializer: Any) -> None: ... + def check(self, value: Any) -> None: ... + def to_json(self, value: Any) -> None: ... + def to_python(self, value: Any) -> None: ... + def tag(self, value: Any): ... + +class TagDict(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class PassDict(JSONTag): + def check(self, value: Any): ... + def to_json(self, value: Any): ... + tag: Any = ... + +class TagTuple(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class PassList(JSONTag): + def check(self, value: Any): ... + def to_json(self, value: Any): ... + tag: Any = ... + +class TagBytes(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagMarkup(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagUUID(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TagDateTime(JSONTag): + key: str = ... + def check(self, value: Any): ... + def to_json(self, value: Any): ... + def to_python(self, value: Any): ... + +class TaggedJSONSerializer: + default_tags: Any = ... + tags: Any = ... + order: Any = ... + def __init__(self) -> None: ... + def register(self, tag_class: Any, force: bool = ..., index: Optional[Any] = ...) -> None: ... + def tag(self, value: Any): ... + def untag(self, value: Any): ... + def dumps(self, value: Any): ... + def loads(self, value: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi new file mode 100644 index 0000000..e43d51d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/logging.pyi @@ -0,0 +1,13 @@ +# Stubs for flask.logging (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import request +from typing import Any + +def wsgi_errors_stream(): ... +def has_level_handler(logger: Any): ... + +default_handler: Any + +def create_logger(app: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi new file mode 100644 index 0000000..b0d238d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/sessions.pyi @@ -0,0 +1,60 @@ +# Stubs for flask.sessions (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from abc import ABCMeta +from typing import Any, MutableMapping, Optional +from werkzeug.datastructures import CallbackDict + +class SessionMixin(MutableMapping, metaclass=ABCMeta): + @property + def permanent(self): ... + @permanent.setter + def permanent(self, value: Any) -> None: ... + new: bool = ... + modified: bool = ... + accessed: bool = ... + +class SecureCookieSession(CallbackDict, SessionMixin): + modified: bool = ... + accessed: bool = ... + def __init__(self, initial: Optional[Any] = ...) -> None: ... + def __getitem__(self, key: Any): ... + def get(self, key: Any, default: Optional[Any] = ...): ... + def setdefault(self, key: Any, default: Optional[Any] = ...): ... + +class NullSession(SecureCookieSession): + __setitem__: Any = ... + __delitem__: Any = ... + clear: Any = ... + pop: Any = ... + popitem: Any = ... + update: Any = ... + setdefault: Any = ... + +class SessionInterface: + null_session_class: Any = ... + pickle_based: bool = ... + def make_null_session(self, app: Any): ... + def is_null_session(self, obj: Any): ... + def get_cookie_domain(self, app: Any): ... + def get_cookie_path(self, app: Any): ... + def get_cookie_httponly(self, app: Any): ... + def get_cookie_secure(self, app: Any): ... + def get_cookie_samesite(self, app: Any): ... + def get_expiration_time(self, app: Any, session: Any): ... + def should_set_cookie(self, app: Any, session: Any): ... + def open_session(self, app: Any, request: Any) -> None: ... + def save_session(self, app: Any, session: Any, response: Any) -> None: ... + +session_json_serializer: Any + +class SecureCookieSessionInterface(SessionInterface): + salt: str = ... + digest_method: Any = ... + key_derivation: str = ... + serializer: Any = ... + session_class: Any = ... + def get_signing_serializer(self, app: Any): ... + def open_session(self, app: Any, request: Any): ... + def save_session(self, app: Any, session: Any, response: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi new file mode 100644 index 0000000..0aa7ac3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/signals.pyi @@ -0,0 +1,33 @@ +# Stubs for flask.signals (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Optional + +signals_available: bool + +class Namespace: + def signal(self, name: Any, doc: Optional[Any] = ...): ... + +class _FakeSignal: + name: Any = ... + __doc__: Any = ... + def __init__(self, name: Any, doc: Optional[Any] = ...) -> None: ... + send: Any = ... + connect: Any = ... + disconnect: Any = ... + has_receivers_for: Any = ... + receivers_for: Any = ... + temporarily_connected_to: Any = ... + connected_to: Any = ... + +template_rendered: Any +before_render_template: Any +request_started: Any +request_finished: Any +request_tearing_down: Any +got_request_exception: Any +appcontext_tearing_down: Any +appcontext_pushed: Any +appcontext_popped: Any +message_flashed: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi new file mode 100644 index 0000000..1da102d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/templating.pyi @@ -0,0 +1,21 @@ +# Stubs for flask.templating (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import _app_ctx_stack, _request_ctx_stack +from .signals import before_render_template, template_rendered +from jinja2 import BaseLoader, Environment as BaseEnvironment +from typing import Any + +class Environment(BaseEnvironment): + app: Any = ... + def __init__(self, app: Any, **options: Any) -> None: ... + +class DispatchingJinjaLoader(BaseLoader): + app: Any = ... + def __init__(self, app: Any) -> None: ... + def get_source(self, environment: Any, template: Any): ... + def list_templates(self): ... + +def render_template(template_name_or_list: Any, **context: Any): ... +def render_template_string(source: Any, **context: Any): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi new file mode 100644 index 0000000..813eeca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/testing.pyi @@ -0,0 +1,34 @@ +# Stubs for flask.testing (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from click import BaseCommand +from click.testing import CliRunner, Result +from typing import Any, IO, Iterable, Mapping, Optional, Union +from werkzeug.test import Client + +def make_test_environ_builder(app: Any, path: str = ..., base_url: Optional[Any] = ..., subdomain: Optional[Any] = ..., url_scheme: Optional[Any] = ..., *args: Any, **kwargs: Any): ... + +class FlaskClient(Client): + preserve_context: bool = ... + environ_base: Any = ... + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + def session_transaction(self, *args: Any, **kwargs: Any) -> None: ... + def open(self, *args: Any, **kwargs: Any): ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, tb: Any) -> None: ... + +class FlaskCliRunner(CliRunner): + app: Any = ... + def __init__(self, app: Any, **kwargs: Any) -> None: ... + def invoke( + self, + cli: Optional[BaseCommand] = ..., + args: Optional[Union[str, Iterable[str]]] = ..., + input: Optional[IO] = ..., + env: Optional[Mapping[str, str]] = ..., + catch_exceptions: bool = ..., + color: bool = ..., + **extra: Any, + ) -> Result: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi new file mode 100644 index 0000000..a2637b3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/views.pyi @@ -0,0 +1,22 @@ +# Stubs for flask.views (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from .globals import request +from typing import Any + +http_method_funcs: Any + +class View: + methods: Any = ... + provide_automatic_options: Any = ... + decorators: Any = ... + def dispatch_request(self, *args: Any, **kwargs: Any) -> Any: ... + @classmethod + def as_view(cls, name: Any, *class_args: Any, **class_kwargs: Any): ... + +class MethodViewType(type): + def __init__(self, name: Any, bases: Any, d: Any) -> None: ... + +class MethodView(View, metaclass=MethodViewType): + def dispatch_request(self, *args: Any, **kwargs: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi new file mode 100644 index 0000000..df8869e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/flask/wrappers.pyi @@ -0,0 +1,35 @@ +# Stubs for flask.wrappers (Python 3.6) +# +# NOTE: This dynamically typed stub was automatically generated by stubgen. + +from typing import Any, Dict, Optional +from werkzeug.exceptions import HTTPException +from werkzeug.routing import Rule +from werkzeug.wrappers import Request as RequestBase, Response as ResponseBase + +class JSONMixin: + @property + def is_json(self) -> bool: ... + @property + def json(self): ... + def get_json(self, force: bool = ..., silent: bool = ..., cache: bool = ...): ... + def on_json_loading_failed(self, e: Any) -> None: ... + +class Request(RequestBase, JSONMixin): + url_rule: Optional[Rule] = ... + view_args: Dict[str, Any] = ... + routing_exception: Optional[HTTPException] = ... + # Request is making the max_content_length readonly, where it was not the + # case in its supertype. + # We would require something like https://github.com/python/typing/issues/241 + @property + def max_content_length(self) -> Optional[int]: ... # type: ignore + @property + def endpoint(self) -> Optional[str]: ... + @property + def blueprint(self) -> Optional[str]: ... + +class Response(ResponseBase, JSONMixin): + default_mimetype: str = ... + @property + def max_cookie_size(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi new file mode 100644 index 0000000..aae1f93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/__init__.pyi @@ -0,0 +1 @@ +__version__: bytes diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi new file mode 100644 index 0000000..c2a7295 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_pb2.pyi @@ -0,0 +1,22 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, + Text, +) + + +class Any(Message, well_known_types.Any_): + type_url: Text + value: bytes + + def __init__(self, + type_url: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi new file mode 100644 index 0000000..d352bad --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/any_test_pb2.pyi @@ -0,0 +1,32 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, +) + + +class TestAny(Message): + int32_value: int + + @property + def any_value(self) -> Any: ... + + @property + def repeated_any_value(self) -> RepeatedCompositeFieldContainer[Any]: ... + + def __init__(self, + int32_value: Optional[int] = ..., + any_value: Optional[Any] = ..., + repeated_any_value: Optional[Iterable[Any]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAny: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi new file mode 100644 index 0000000..3646878 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/api_pb2.pyi @@ -0,0 +1,87 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.source_context_pb2 import ( + SourceContext, +) +from google.protobuf.type_pb2 import ( + Option, + Syntax, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class Api(Message): + name: Text + version: Text + syntax: Syntax + + @property + def methods(self) -> RepeatedCompositeFieldContainer[Method]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + @property + def mixins(self) -> RepeatedCompositeFieldContainer[Mixin]: ... + + def __init__(self, + name: Optional[Text] = ..., + methods: Optional[Iterable[Method]] = ..., + options: Optional[Iterable[Option]] = ..., + version: Optional[Text] = ..., + source_context: Optional[SourceContext] = ..., + mixins: Optional[Iterable[Mixin]] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Api: ... + + +class Method(Message): + name: Text + request_type_url: Text + request_streaming: bool + response_type_url: Text + response_streaming: bool + syntax: Syntax + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + name: Optional[Text] = ..., + request_type_url: Optional[Text] = ..., + request_streaming: Optional[bool] = ..., + response_type_url: Optional[Text] = ..., + response_streaming: Optional[bool] = ..., + options: Optional[Iterable[Option]] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Method: ... + + +class Mixin(Message): + name: Text + root: Text + + def __init__(self, + name: Optional[Text] = ..., + root: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Mixin: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi new file mode 100644 index 0000000..d1037fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/compiler/plugin_pb2.pyi @@ -0,0 +1,82 @@ +from google.protobuf.descriptor_pb2 import ( + FileDescriptorProto, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class Version(Message): + major: int + minor: int + patch: int + suffix: Text + + def __init__(self, + major: Optional[int] = ..., + minor: Optional[int] = ..., + patch: Optional[int] = ..., + suffix: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Version: ... + + +class CodeGeneratorRequest(Message): + file_to_generate: RepeatedScalarFieldContainer[Text] + parameter: Text + + @property + def proto_file(self) -> RepeatedCompositeFieldContainer[FileDescriptorProto]: ... + + @property + def compiler_version(self) -> Version: ... + + def __init__(self, + file_to_generate: Optional[Iterable[Text]] = ..., + parameter: Optional[Text] = ..., + proto_file: Optional[Iterable[FileDescriptorProto]] = ..., + compiler_version: Optional[Version] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorRequest: ... + + +class CodeGeneratorResponse(Message): + + class File(Message): + name: Text + insertion_point: Text + content: Text + + def __init__(self, + name: Optional[Text] = ..., + insertion_point: Optional[Text] = ..., + content: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorResponse.File: ... + error: Text + + @property + def file(self) -> RepeatedCompositeFieldContainer[CodeGeneratorResponse.File]: ... + + def __init__(self, + error: Optional[Text] = ..., + file: Optional[Iterable[CodeGeneratorResponse.File]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CodeGeneratorResponse: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi new file mode 100644 index 0000000..44352c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor.pyi @@ -0,0 +1,182 @@ +from typing import Any + +from .message import Message +from .descriptor_pb2 import ( + EnumOptions, + EnumValueOptions, + FieldOptions, + FileOptions, + MessageOptions, + MethodOptions, + OneofOptions, + ServiceOptions, +) + +class Error(Exception): ... +class TypeTransformationError(Error): ... + +class DescriptorMetaclass(type): + def __instancecheck__(self, obj): ... + +class DescriptorBase(metaclass=DescriptorMetaclass): + has_options: Any + def __init__(self, options, options_class_name) -> None: ... + def GetOptions(self): ... + +class _NestedDescriptorBase(DescriptorBase): + name: Any + full_name: Any + file: Any + containing_type: Any + def __init__(self, options, options_class_name, name, full_name, file, containing_type, serialized_start=..., serialized_end=...) -> None: ... + def GetTopLevelContainingType(self): ... + def CopyToProto(self, proto): ... + +class Descriptor(_NestedDescriptorBase): + def __new__(cls, name, full_name, filename, containing_type, fields, nested_types, enum_types, extensions, options=..., is_extendable=..., extension_ranges=..., oneofs=..., file=..., serialized_start=..., serialized_end=..., syntax=...): ... + fields: Any + fields_by_number: Any + fields_by_name: Any + nested_types: Any + nested_types_by_name: Any + enum_types: Any + enum_types_by_name: Any + enum_values_by_name: Any + extensions: Any + extensions_by_name: Any + is_extendable: Any + extension_ranges: Any + oneofs: Any + oneofs_by_name: Any + syntax: Any + def __init__(self, name, full_name, filename, containing_type, fields, nested_types, enum_types, extensions, options=..., is_extendable=..., extension_ranges=..., oneofs=..., file=..., serialized_start=..., serialized_end=..., syntax=...) -> None: ... + def EnumValueName(self, enum, value): ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> MessageOptions: ... + +class FieldDescriptor(DescriptorBase): + TYPE_DOUBLE: Any + TYPE_FLOAT: Any + TYPE_INT64: Any + TYPE_UINT64: Any + TYPE_INT32: Any + TYPE_FIXED64: Any + TYPE_FIXED32: Any + TYPE_BOOL: Any + TYPE_STRING: Any + TYPE_GROUP: Any + TYPE_MESSAGE: Any + TYPE_BYTES: Any + TYPE_UINT32: Any + TYPE_ENUM: Any + TYPE_SFIXED32: Any + TYPE_SFIXED64: Any + TYPE_SINT32: Any + TYPE_SINT64: Any + MAX_TYPE: Any + CPPTYPE_INT32: Any + CPPTYPE_INT64: Any + CPPTYPE_UINT32: Any + CPPTYPE_UINT64: Any + CPPTYPE_DOUBLE: Any + CPPTYPE_FLOAT: Any + CPPTYPE_BOOL: Any + CPPTYPE_ENUM: Any + CPPTYPE_STRING: Any + CPPTYPE_MESSAGE: Any + MAX_CPPTYPE: Any + LABEL_OPTIONAL: Any + LABEL_REQUIRED: Any + LABEL_REPEATED: Any + MAX_LABEL: Any + MAX_FIELD_NUMBER: Any + FIRST_RESERVED_FIELD_NUMBER: Any + LAST_RESERVED_FIELD_NUMBER: Any + def __new__(cls, name, full_name, index, number, type, cpp_type, label, default_value, message_type, enum_type, containing_type, is_extension, extension_scope, options=..., file=..., has_default_value=..., containing_oneof=...): ... + name: Any + full_name: Any + index: Any + number: Any + type: Any + cpp_type: Any + label: Any + has_default_value: Any + default_value: Any + containing_type: Any + message_type: Any + enum_type: Any + is_extension: Any + extension_scope: Any + containing_oneof: Any + def __init__(self, name, full_name, index, number, type, cpp_type, label, default_value, message_type, enum_type, containing_type, is_extension, extension_scope, options=..., file=..., has_default_value=..., containing_oneof=...) -> None: ... + @staticmethod + def ProtoTypeToCppProtoType(proto_type): ... + def GetOptions(self) -> FieldOptions: ... + +class EnumDescriptor(_NestedDescriptorBase): + def __new__(cls, name, full_name, filename, values, containing_type=..., options=..., file=..., serialized_start=..., serialized_end=...): ... + values: Any + values_by_name: Any + values_by_number: Any + def __init__(self, name, full_name, filename, values, containing_type=..., options=..., file=..., serialized_start=..., serialized_end=...) -> None: ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> EnumOptions: ... + +class EnumValueDescriptor(DescriptorBase): + def __new__(cls, name, index, number, type=..., options=...): ... + name: Any + index: Any + number: Any + type: Any + def __init__(self, name, index, number, type=..., options=...) -> None: ... + def GetOptions(self) -> EnumValueOptions: ... + +class OneofDescriptor: + def __new__(cls, name, full_name, index, containing_type, fields): ... + name: Any + full_name: Any + index: Any + containing_type: Any + fields: Any + def __init__(self, name, full_name, index, containing_type, fields) -> None: ... + def GetOptions(self) -> OneofOptions: ... + +class ServiceDescriptor(_NestedDescriptorBase): + index: Any + methods: Any + methods_by_name: Any + def __init__(self, name, full_name, index, methods, options=..., file=..., serialized_start=..., serialized_end=...) -> None: ... + def FindMethodByName(self, name): ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> ServiceOptions: ... + +class MethodDescriptor(DescriptorBase): + name: Any + full_name: Any + index: Any + containing_service: Any + input_type: Any + output_type: Any + def __init__(self, name, full_name, index, containing_service, input_type, output_type, options=...) -> None: ... + def GetOptions(self) -> MethodOptions: ... + +class FileDescriptor(DescriptorBase): + def __new__(cls, name, package, options=..., serialized_pb=..., dependencies=..., public_dependencies=..., syntax=..., pool=...): ... + _options: Any + pool: Any + message_types_by_name: Any + name: Any + package: Any + syntax: Any + serialized_pb: Any + enum_types_by_name: Any + extensions_by_name: Any + services_by_name: Any + dependencies: Any + public_dependencies: Any + def __init__(self, name, package, options=..., serialized_pb=..., dependencies=..., public_dependencies=..., syntax=..., pool=...) -> None: ... + def CopyToProto(self, proto): ... + def GetOptions(self) -> FileOptions: ... + +def MakeDescriptor(desc_proto, package=..., build_file_if_cpp=..., syntax=...): ... +def _ParseOptions(message: Message, string: bytes) -> Message: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi new file mode 100644 index 0000000..d0fbcdc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pb2.pyi @@ -0,0 +1,732 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class FileDescriptorSet(Message): + + @property + def file(self) -> RepeatedCompositeFieldContainer[FileDescriptorProto]: ... + + def __init__(self, + file: Optional[Iterable[FileDescriptorProto]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileDescriptorSet: ... + + +class FileDescriptorProto(Message): + name: Text + package: Text + dependency: RepeatedScalarFieldContainer[Text] + public_dependency: RepeatedScalarFieldContainer[int] + weak_dependency: RepeatedScalarFieldContainer[int] + syntax: Text + + @property + def message_type( + self) -> RepeatedCompositeFieldContainer[DescriptorProto]: ... + + @property + def enum_type( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto]: ... + + @property + def service( + self) -> RepeatedCompositeFieldContainer[ServiceDescriptorProto]: ... + + @property + def extension( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def options(self) -> FileOptions: ... + + @property + def source_code_info(self) -> SourceCodeInfo: ... + + def __init__(self, + name: Optional[Text] = ..., + package: Optional[Text] = ..., + dependency: Optional[Iterable[Text]] = ..., + public_dependency: Optional[Iterable[int]] = ..., + weak_dependency: Optional[Iterable[int]] = ..., + message_type: Optional[Iterable[DescriptorProto]] = ..., + enum_type: Optional[Iterable[EnumDescriptorProto]] = ..., + service: Optional[Iterable[ServiceDescriptorProto]] = ..., + extension: Optional[Iterable[FieldDescriptorProto]] = ..., + options: Optional[FileOptions] = ..., + source_code_info: Optional[SourceCodeInfo] = ..., + syntax: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileDescriptorProto: ... + + +class DescriptorProto(Message): + + class ExtensionRange(Message): + start: int + end: int + + @property + def options(self) -> ExtensionRangeOptions: ... + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + options: Optional[ExtensionRangeOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto.ExtensionRange: ... + + class ReservedRange(Message): + start: int + end: int + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto.ReservedRange: ... + name: Text + reserved_name: RepeatedScalarFieldContainer[Text] + + @property + def field( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def extension( + self) -> RepeatedCompositeFieldContainer[FieldDescriptorProto]: ... + + @property + def nested_type( + self) -> RepeatedCompositeFieldContainer[DescriptorProto]: ... + + @property + def enum_type( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto]: ... + + @property + def extension_range( + self) -> RepeatedCompositeFieldContainer[DescriptorProto.ExtensionRange]: ... + + @property + def oneof_decl( + self) -> RepeatedCompositeFieldContainer[OneofDescriptorProto]: ... + + @property + def options(self) -> MessageOptions: ... + + @property + def reserved_range( + self) -> RepeatedCompositeFieldContainer[DescriptorProto.ReservedRange]: ... + + def __init__(self, + name: Optional[Text] = ..., + field: Optional[Iterable[FieldDescriptorProto]] = ..., + extension: Optional[Iterable[FieldDescriptorProto]] = ..., + nested_type: Optional[Iterable[DescriptorProto]] = ..., + enum_type: Optional[Iterable[EnumDescriptorProto]] = ..., + extension_range: Optional[Iterable[DescriptorProto.ExtensionRange]] = ..., + oneof_decl: Optional[Iterable[OneofDescriptorProto]] = ..., + options: Optional[MessageOptions] = ..., + reserved_range: Optional[Iterable[DescriptorProto.ReservedRange]] = ..., + reserved_name: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DescriptorProto: ... + + +class ExtensionRangeOptions(Message): + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ExtensionRangeOptions: ... + + +class FieldDescriptorProto(Message): + + class Type(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldDescriptorProto.Type: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldDescriptorProto.Type]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldDescriptorProto.Type]]: ... + TYPE_DOUBLE: FieldDescriptorProto.Type + TYPE_FLOAT: FieldDescriptorProto.Type + TYPE_INT64: FieldDescriptorProto.Type + TYPE_UINT64: FieldDescriptorProto.Type + TYPE_INT32: FieldDescriptorProto.Type + TYPE_FIXED64: FieldDescriptorProto.Type + TYPE_FIXED32: FieldDescriptorProto.Type + TYPE_BOOL: FieldDescriptorProto.Type + TYPE_STRING: FieldDescriptorProto.Type + TYPE_GROUP: FieldDescriptorProto.Type + TYPE_MESSAGE: FieldDescriptorProto.Type + TYPE_BYTES: FieldDescriptorProto.Type + TYPE_UINT32: FieldDescriptorProto.Type + TYPE_ENUM: FieldDescriptorProto.Type + TYPE_SFIXED32: FieldDescriptorProto.Type + TYPE_SFIXED64: FieldDescriptorProto.Type + TYPE_SINT32: FieldDescriptorProto.Type + TYPE_SINT64: FieldDescriptorProto.Type + + class Label(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldDescriptorProto.Label: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldDescriptorProto.Label]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldDescriptorProto.Label]]: ... + LABEL_OPTIONAL: FieldDescriptorProto.Label + LABEL_REQUIRED: FieldDescriptorProto.Label + LABEL_REPEATED: FieldDescriptorProto.Label + name: Text + number: int + label: FieldDescriptorProto.Label + type: FieldDescriptorProto.Type + type_name: Text + extendee: Text + default_value: Text + oneof_index: int + json_name: Text + + @property + def options(self) -> FieldOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + label: Optional[FieldDescriptorProto.Label] = ..., + type: Optional[FieldDescriptorProto.Type] = ..., + type_name: Optional[Text] = ..., + extendee: Optional[Text] = ..., + default_value: Optional[Text] = ..., + oneof_index: Optional[int] = ..., + json_name: Optional[Text] = ..., + options: Optional[FieldOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldDescriptorProto: ... + + +class OneofDescriptorProto(Message): + name: Text + + @property + def options(self) -> OneofOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + options: Optional[OneofOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneofDescriptorProto: ... + + +class EnumDescriptorProto(Message): + + class EnumReservedRange(Message): + start: int + end: int + + def __init__(self, + start: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> EnumDescriptorProto.EnumReservedRange: ... + name: Text + reserved_name: RepeatedScalarFieldContainer[Text] + + @property + def value( + self) -> RepeatedCompositeFieldContainer[EnumValueDescriptorProto]: ... + + @property + def options(self) -> EnumOptions: ... + + @property + def reserved_range( + self) -> RepeatedCompositeFieldContainer[EnumDescriptorProto.EnumReservedRange]: ... + + def __init__(self, + name: Optional[Text] = ..., + value: Optional[Iterable[EnumValueDescriptorProto]] = ..., + options: Optional[EnumOptions] = ..., + reserved_range: Optional[Iterable[EnumDescriptorProto.EnumReservedRange]] = ..., + reserved_name: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumDescriptorProto: ... + + +class EnumValueDescriptorProto(Message): + name: Text + number: int + + @property + def options(self) -> EnumValueOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + options: Optional[EnumValueOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValueDescriptorProto: ... + + +class ServiceDescriptorProto(Message): + name: Text + + @property + def method( + self) -> RepeatedCompositeFieldContainer[MethodDescriptorProto]: ... + + @property + def options(self) -> ServiceOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + method: Optional[Iterable[MethodDescriptorProto]] = ..., + options: Optional[ServiceOptions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ServiceDescriptorProto: ... + + +class MethodDescriptorProto(Message): + name: Text + input_type: Text + output_type: Text + client_streaming: bool + server_streaming: bool + + @property + def options(self) -> MethodOptions: ... + + def __init__(self, + name: Optional[Text] = ..., + input_type: Optional[Text] = ..., + output_type: Optional[Text] = ..., + options: Optional[MethodOptions] = ..., + client_streaming: Optional[bool] = ..., + server_streaming: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MethodDescriptorProto: ... + + +class FileOptions(Message): + + class OptimizeMode(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FileOptions.OptimizeMode: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FileOptions.OptimizeMode]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FileOptions.OptimizeMode]]: ... + SPEED: FileOptions.OptimizeMode + CODE_SIZE: FileOptions.OptimizeMode + LITE_RUNTIME: FileOptions.OptimizeMode + java_package: Text + java_outer_classname: Text + java_multiple_files: bool + java_generate_equals_and_hash: bool + java_string_check_utf8: bool + optimize_for: FileOptions.OptimizeMode + go_package: Text + cc_generic_services: bool + java_generic_services: bool + py_generic_services: bool + php_generic_services: bool + deprecated: bool + cc_enable_arenas: bool + objc_class_prefix: Text + csharp_namespace: Text + swift_prefix: Text + php_class_prefix: Text + php_namespace: Text + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + java_package: Optional[Text] = ..., + java_outer_classname: Optional[Text] = ..., + java_multiple_files: Optional[bool] = ..., + java_generate_equals_and_hash: Optional[bool] = ..., + java_string_check_utf8: Optional[bool] = ..., + optimize_for: Optional[FileOptions.OptimizeMode] = ..., + go_package: Optional[Text] = ..., + cc_generic_services: Optional[bool] = ..., + java_generic_services: Optional[bool] = ..., + py_generic_services: Optional[bool] = ..., + php_generic_services: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + cc_enable_arenas: Optional[bool] = ..., + objc_class_prefix: Optional[Text] = ..., + csharp_namespace: Optional[Text] = ..., + swift_prefix: Optional[Text] = ..., + php_class_prefix: Optional[Text] = ..., + php_namespace: Optional[Text] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FileOptions: ... + + +class MessageOptions(Message): + message_set_wire_format: bool + no_standard_descriptor_accessor: bool + deprecated: bool + map_entry: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + message_set_wire_format: Optional[bool] = ..., + no_standard_descriptor_accessor: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + map_entry: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageOptions: ... + + +class FieldOptions(Message): + + class CType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldOptions.CType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldOptions.CType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldOptions.CType]]: ... + STRING: FieldOptions.CType + CORD: FieldOptions.CType + STRING_PIECE: FieldOptions.CType + + class JSType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> FieldOptions.JSType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[FieldOptions.JSType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, FieldOptions.JSType]]: ... + JS_NORMAL: FieldOptions.JSType + JS_STRING: FieldOptions.JSType + JS_NUMBER: FieldOptions.JSType + ctype: FieldOptions.CType + packed: bool + jstype: FieldOptions.JSType + lazy: bool + deprecated: bool + weak: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + ctype: Optional[FieldOptions.CType] = ..., + packed: Optional[bool] = ..., + jstype: Optional[FieldOptions.JSType] = ..., + lazy: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + weak: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldOptions: ... + + +class OneofOptions(Message): + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneofOptions: ... + + +class EnumOptions(Message): + allow_alias: bool + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + allow_alias: Optional[bool] = ..., + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumOptions: ... + + +class EnumValueOptions(Message): + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValueOptions: ... + + +class ServiceOptions(Message): + deprecated: bool + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ServiceOptions: ... + + +class MethodOptions(Message): + + class IdempotencyLevel(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MethodOptions.IdempotencyLevel: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MethodOptions.IdempotencyLevel]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MethodOptions.IdempotencyLevel]]: ... + IDEMPOTENCY_UNKNOWN: MethodOptions.IdempotencyLevel + NO_SIDE_EFFECTS: MethodOptions.IdempotencyLevel + IDEMPOTENT: MethodOptions.IdempotencyLevel + deprecated: bool + idempotency_level: MethodOptions.IdempotencyLevel + + @property + def uninterpreted_option( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption]: ... + + def __init__(self, + deprecated: Optional[bool] = ..., + idempotency_level: Optional[MethodOptions.IdempotencyLevel] = ..., + uninterpreted_option: Optional[Iterable[UninterpretedOption]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MethodOptions: ... + + +class UninterpretedOption(Message): + + class NamePart(Message): + name_part: Text + is_extension: bool + + def __init__(self, + name_part: Text, + is_extension: bool, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UninterpretedOption.NamePart: ... + identifier_value: Text + positive_int_value: int + negative_int_value: int + double_value: float + string_value: bytes + aggregate_value: Text + + @property + def name( + self) -> RepeatedCompositeFieldContainer[UninterpretedOption.NamePart]: ... + + def __init__(self, + name: Optional[Iterable[UninterpretedOption.NamePart]] = ..., + identifier_value: Optional[Text] = ..., + positive_int_value: Optional[int] = ..., + negative_int_value: Optional[int] = ..., + double_value: Optional[float] = ..., + string_value: Optional[bytes] = ..., + aggregate_value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UninterpretedOption: ... + + +class SourceCodeInfo(Message): + + class Location(Message): + path: RepeatedScalarFieldContainer[int] + span: RepeatedScalarFieldContainer[int] + leading_comments: Text + trailing_comments: Text + leading_detached_comments: RepeatedScalarFieldContainer[Text] + + def __init__(self, + path: Optional[Iterable[int]] = ..., + span: Optional[Iterable[int]] = ..., + leading_comments: Optional[Text] = ..., + trailing_comments: Optional[Text] = ..., + leading_detached_comments: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceCodeInfo.Location: ... + + @property + def location( + self) -> RepeatedCompositeFieldContainer[SourceCodeInfo.Location]: ... + + def __init__(self, + location: Optional[Iterable[SourceCodeInfo.Location]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceCodeInfo: ... + + +class GeneratedCodeInfo(Message): + + class Annotation(Message): + path: RepeatedScalarFieldContainer[int] + source_file: Text + begin: int + end: int + + def __init__(self, + path: Optional[Iterable[int]] = ..., + source_file: Optional[Text] = ..., + begin: Optional[int] = ..., + end: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> GeneratedCodeInfo.Annotation: ... + + @property + def annotation( + self) -> RepeatedCompositeFieldContainer[GeneratedCodeInfo.Annotation]: ... + + def __init__(self, + annotation: Optional[Iterable[GeneratedCodeInfo.Annotation]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> GeneratedCodeInfo: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi new file mode 100644 index 0000000..f1ade52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/descriptor_pool.pyi @@ -0,0 +1,18 @@ +from typing import Any, Optional + +class DescriptorPool: + def __new__(cls, descriptor_db: Optional[Any] = ...): ... + def __init__(self, descriptor_db: Optional[Any] = ...) -> None: ... + def Add(self, file_desc_proto): ... + def AddSerializedFile(self, serialized_file_desc_proto): ... + def AddDescriptor(self, desc): ... + def AddEnumDescriptor(self, enum_desc): ... + def AddFileDescriptor(self, file_desc): ... + def FindFileByName(self, file_name): ... + def FindFileContainingSymbol(self, symbol): ... + def FindMessageTypeByName(self, full_name): ... + def FindEnumTypeByName(self, full_name): ... + def FindFieldByName(self, full_name): ... + def FindExtensionByName(self, full_name): ... + +def Default(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi new file mode 100644 index 0000000..378c2e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/duration_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, +) + + +class Duration(Message, well_known_types.Duration): + seconds: int + nanos: int + + def __init__(self, + seconds: Optional[int] = ..., + nanos: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Duration: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi new file mode 100644 index 0000000..295ebfa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/empty_pb2.pyi @@ -0,0 +1,12 @@ +from google.protobuf.message import ( + Message, +) + + +class Empty(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Empty: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi new file mode 100644 index 0000000..1c96a02 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/field_mask_pb2.pyi @@ -0,0 +1,24 @@ +from google.protobuf.internal.containers import ( + RepeatedScalarFieldContainer, +) +from google.protobuf.internal import well_known_types + +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + Optional, + Text, +) + + +class FieldMask(Message, well_known_types.FieldMask): + paths: RepeatedScalarFieldContainer[Text] + + def __init__(self, + paths: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FieldMask: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi new file mode 100644 index 0000000..33e603c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/containers.pyi @@ -0,0 +1,54 @@ +from google.protobuf.descriptor import Descriptor +from google.protobuf.internal.message_listener import MessageListener +from google.protobuf.message import Message +from typing import ( + Sequence, TypeVar, Generic, Any, Iterator, Iterable, + Union, Optional, Callable, overload, List +) + +_T = TypeVar('_T') +class BaseContainer(Sequence[_T]): + def __init__(self, message_listener: MessageListener) -> None: ... + def __len__(self) -> int: ... + def __ne__(self, other: object) -> bool: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + def sort(self, *, key: Optional[Callable[[_T], Any]] = ..., reverse: bool = ...) -> None: ... + @overload + def __getitem__(self, key: int) -> _T: ... + @overload + def __getitem__(self, key: slice) -> List[_T]: ... + +class RepeatedScalarFieldContainer(BaseContainer[_T]): + def __init__(self, message_listener: MessageListener, message_descriptor: Descriptor) -> None: ... + def append(self, value: _T) -> None: ... + def insert(self, key: int, value: _T) -> None: ... + def extend(self, elem_seq: Optional[Iterable[_T]]) -> None: ... + def MergeFrom(self, other: RepeatedScalarFieldContainer[_T]) -> None: ... + def remove(self, elem: _T) -> None: ... + def pop(self, key: int = ...) -> _T: ... + @overload + def __setitem__(self, key: int, value: _T) -> None: ... + @overload + def __setitem__(self, key: slice, value: Iterable[_T]) -> None: ... + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __setslice__(self, start: int, stop: int, values: Iterable[_T]) -> None: ... + def __delitem__(self, key: Union[int, slice]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + +class RepeatedCompositeFieldContainer(BaseContainer[_T]): + def __init__(self, message_listener: MessageListener, type_checker: Any) -> None: ... + def add(self, **kwargs: Any) -> _T: ... + def extend(self, elem_seq: Iterable[_T]) -> None: ... + def MergeFrom(self, other: RepeatedCompositeFieldContainer[_T]) -> None: ... + def remove(self, elem: _T) -> None: ... + def pop(self, key: int = ...) -> _T: ... + def __getslice__(self, start: int, stop: int) -> List[_T]: ... + def __delitem__(self, key: Union[int, slice]) -> None: ... + def __delslice__(self, start: int, stop: int) -> None: ... + +# Classes not yet typed +class Mapping(Any): ... +class MutableMapping(Mapping): ... +class ScalarMap(MutableMapping): ... +class MessageMap(MutableMapping): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi new file mode 100644 index 0000000..24774ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/decoder.pyi @@ -0,0 +1,30 @@ +from typing import Any + +def ReadTag(buffer, pos): ... +def EnumDecoder(field_number, is_repeated, is_packed, key, new_default): ... + +Int32Decoder: Any +Int64Decoder: Any +UInt32Decoder: Any +UInt64Decoder: Any +SInt32Decoder: Any +SInt64Decoder: Any +Fixed32Decoder: Any +Fixed64Decoder: Any +SFixed32Decoder: Any +SFixed64Decoder: Any +FloatDecoder: Any +DoubleDecoder: Any +BoolDecoder: Any + +def StringDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def BytesDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def GroupDecoder(field_number, is_repeated, is_packed, key, new_default): ... +def MessageDecoder(field_number, is_repeated, is_packed, key, new_default): ... + +MESSAGE_SET_ITEM_TAG: Any + +def MessageSetItemDecoder(extensions_by_number): ... +def MapDecoder(field_descriptor, new_default, is_message_map): ... + +SkipField: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi new file mode 100644 index 0000000..7a7923f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/encoder.pyi @@ -0,0 +1,34 @@ +from typing import Any + +Int32Sizer: Any +UInt32Sizer: Any +SInt32Sizer: Any +Fixed32Sizer: Any +Fixed64Sizer: Any +BoolSizer: Any + +def StringSizer(field_number, is_repeated, is_packed): ... +def BytesSizer(field_number, is_repeated, is_packed): ... +def GroupSizer(field_number, is_repeated, is_packed): ... +def MessageSizer(field_number, is_repeated, is_packed): ... +def MessageSetItemSizer(field_number): ... +def MapSizer(field_descriptor): ... +def TagBytes(field_number, wire_type): ... + +Int32Encoder: Any +UInt32Encoder: Any +SInt32Encoder: Any +Fixed32Encoder: Any +Fixed64Encoder: Any +SFixed32Encoder: Any +SFixed64Encoder: Any +FloatEncoder: Any +DoubleEncoder: Any + +def BoolEncoder(field_number, is_repeated, is_packed): ... +def StringEncoder(field_number, is_repeated, is_packed): ... +def BytesEncoder(field_number, is_repeated, is_packed): ... +def GroupEncoder(field_number, is_repeated, is_packed): ... +def MessageEncoder(field_number, is_repeated, is_packed): ... +def MessageSetItemEncoder(field_number): ... +def MapEncoder(field_descriptor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi new file mode 100644 index 0000000..61d6ea1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/enum_type_wrapper.pyi @@ -0,0 +1,11 @@ +from typing import Any, List, Tuple + +class EnumTypeWrapper(object): + def __init__(self, enum_type: Any) -> None: ... + def Name(self, number: int) -> bytes: ... + def Value(self, name: bytes) -> int: ... + def keys(self) -> List[bytes]: ... + def values(self) -> List[int]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, int]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi new file mode 100644 index 0000000..e8d33a5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/message_listener.pyi @@ -0,0 +1,5 @@ +class MessageListener(object): + def Modified(self) -> None: ... + +class NullMessageListener(MessageListener): + def Modified(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi new file mode 100644 index 0000000..91a42a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/well_known_types.pyi @@ -0,0 +1,92 @@ +from typing import Any, Optional +from datetime import datetime + +class Error(Exception): ... +class ParseError(Error): ... + +# This is named 'Any' in the original, but that conflicts with typing.Any, +# and we really only need this file to mix in. +class Any_: + type_url: Any = ... + value: Any = ... + def Pack(self, msg: Any, type_url_prefix: bytes = ..., deterministic: Optional[Any] = ...) -> None: ... + def Unpack(self, msg: Any): ... + def TypeName(self): ... + def Is(self, descriptor: Any): ... + +class Timestamp: + def ToJsonString(self) -> str: ... + seconds: Any = ... + nanos: Any = ... + def FromJsonString(self, value: Any) -> None: ... + def GetCurrentTime(self) -> None: ... + def ToNanoseconds(self): ... + def ToMicroseconds(self): ... + def ToMilliseconds(self): ... + def ToSeconds(self): ... + def FromNanoseconds(self, nanos: Any) -> None: ... + def FromMicroseconds(self, micros: Any) -> None: ... + def FromMilliseconds(self, millis: Any) -> None: ... + def FromSeconds(self, seconds: Any) -> None: ... + def ToDatetime(self) -> datetime: ... + def FromDatetime(self, dt: datetime) -> None: ... + +class Duration: + def ToJsonString(self) -> str: ... + seconds: Any = ... + nanos: Any = ... + def FromJsonString(self, value: Any) -> None: ... + def ToNanoseconds(self): ... + def ToMicroseconds(self): ... + def ToMilliseconds(self): ... + def ToSeconds(self): ... + def FromNanoseconds(self, nanos: Any) -> None: ... + def FromMicroseconds(self, micros: Any) -> None: ... + def FromMilliseconds(self, millis: Any) -> None: ... + def FromSeconds(self, seconds: Any) -> None: ... + def ToTimedelta(self): ... + def FromTimedelta(self, td: Any) -> None: ... + +class FieldMask: + def ToJsonString(self) -> str: ... + def FromJsonString(self, value: Any) -> None: ... + def IsValidForDescriptor(self, message_descriptor: Any): ... + def AllFieldsFromDescriptor(self, message_descriptor: Any) -> None: ... + def CanonicalFormFromMask(self, mask: Any) -> None: ... + def Union(self, mask1: Any, mask2: Any) -> None: ... + def Intersect(self, mask1: Any, mask2: Any) -> None: ... + def MergeMessage(self, source: Any, destination: Any, replace_message_field: bool = ..., replace_repeated_field: bool = ...) -> None: ... + +class _FieldMaskTree: + def __init__(self, field_mask: Optional[Any] = ...) -> None: ... + def MergeFromFieldMask(self, field_mask: Any) -> None: ... + def AddPath(self, path: Any): ... + def ToFieldMask(self, field_mask: Any) -> None: ... + def IntersectPath(self, path: Any, intersection: Any): ... + def AddLeafNodes(self, prefix: Any, node: Any) -> None: ... + def MergeMessage(self, source: Any, destination: Any, replace_message: Any, replace_repeated: Any) -> None: ... + +class Struct: + def __getitem__(self, key: Any): ... + def __contains__(self, item: Any): ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __len__(self): ... + def __iter__(self): ... + def keys(self): ... + def values(self): ... + def items(self): ... + def get_or_create_list(self, key: Any): ... + def get_or_create_struct(self, key: Any): ... + def update(self, dictionary: Any) -> None: ... + +class ListValue: + def __len__(self): ... + def append(self, value: Any) -> None: ... + def extend(self, elem_seq: Any) -> None: ... + def __getitem__(self, index: Any): ... + def __setitem__(self, index: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def items(self) -> None: ... + def add_struct(self): ... + def add_list(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi new file mode 100644 index 0000000..3dcbd04 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/internal/wire_format.pyi @@ -0,0 +1,50 @@ +from typing import Any + +TAG_TYPE_BITS: Any +TAG_TYPE_MASK: Any +WIRETYPE_VARINT: Any +WIRETYPE_FIXED64: Any +WIRETYPE_LENGTH_DELIMITED: Any +WIRETYPE_START_GROUP: Any +WIRETYPE_END_GROUP: Any +WIRETYPE_FIXED32: Any +INT32_MAX: Any +INT32_MIN: Any +UINT32_MAX: Any +INT64_MAX: Any +INT64_MIN: Any +UINT64_MAX: Any +FORMAT_UINT32_LITTLE_ENDIAN: Any +FORMAT_UINT64_LITTLE_ENDIAN: Any +FORMAT_FLOAT_LITTLE_ENDIAN: Any +FORMAT_DOUBLE_LITTLE_ENDIAN: Any + +def PackTag(field_number, wire_type): ... +def UnpackTag(tag): ... +def ZigZagEncode(value): ... +def ZigZagDecode(value): ... +def Int32ByteSize(field_number, int32): ... +def Int32ByteSizeNoTag(int32): ... +def Int64ByteSize(field_number, int64): ... +def UInt32ByteSize(field_number, uint32): ... +def UInt64ByteSize(field_number, uint64): ... +def SInt32ByteSize(field_number, int32): ... +def SInt64ByteSize(field_number, int64): ... +def Fixed32ByteSize(field_number, fixed32): ... +def Fixed64ByteSize(field_number, fixed64): ... +def SFixed32ByteSize(field_number, sfixed32): ... +def SFixed64ByteSize(field_number, sfixed64): ... +def FloatByteSize(field_number, flt): ... +def DoubleByteSize(field_number, double): ... +def BoolByteSize(field_number, b): ... +def EnumByteSize(field_number, enum): ... +def StringByteSize(field_number, string): ... +def BytesByteSize(field_number, b): ... +def GroupByteSize(field_number, message): ... +def MessageByteSize(field_number, message): ... +def MessageSetItemByteSize(field_number, msg): ... +def TagByteSize(field_number): ... + +NON_PACKABLE_TYPES: Any + +def IsTypePackable(field_type): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi new file mode 100644 index 0000000..e61ccb8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/json_format.pyi @@ -0,0 +1,31 @@ +import sys +from typing import Any, Dict, Text, TypeVar, Union +from google.protobuf.message import Message + +_MessageVar = TypeVar('_MessageVar', bound=Message) + +class Error(Exception): ... + +class ParseError(Error): ... + +class SerializeToJsonError(Error): ... + +def MessageToJson( + message: Message, + including_default_value_fields: bool = ..., + preserving_proto_field_name: bool = ..., + indent: int = ..., + sort_keys: bool = ..., + use_integers_for_enums: bool = ... +) -> str: ... + +def MessageToDict( + message: Message, + including_default_value_fields: bool = ..., + preserving_proto_field_name: bool = ..., + use_integers_for_enums: bool = ... +) -> Dict[Text, Any]: ... + +def Parse(text: Union[bytes, Text], message: _MessageVar, ignore_unknown_fields: bool = ...) -> _MessageVar: ... + +def ParseDict(js_dict: Any, message: _MessageVar, ignore_unknown_fields: bool = ...) -> _MessageVar: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi new file mode 100644 index 0000000..fd12d10 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_proto2_unittest_pb2.pyi @@ -0,0 +1,428 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnumForMap, +) +from typing import ( + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class Proto2MapEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Proto2MapEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Proto2MapEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Proto2MapEnum]]: ... +PROTO2_MAP_ENUM_FOO: Proto2MapEnum +PROTO2_MAP_ENUM_BAR: Proto2MapEnum +PROTO2_MAP_ENUM_BAZ: Proto2MapEnum + + +class Proto2MapEnumPlusExtra(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Proto2MapEnumPlusExtra: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Proto2MapEnumPlusExtra]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Proto2MapEnumPlusExtra]]: ... +E_PROTO2_MAP_ENUM_FOO: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_BAR: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_BAZ: Proto2MapEnumPlusExtra +E_PROTO2_MAP_ENUM_EXTRA: Proto2MapEnumPlusExtra + + +class TestEnumMap(Message): + + class KnownMapFieldEntry(Message): + key: int + value: Proto2MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap.KnownMapFieldEntry: ... + + class UnknownMapFieldEntry(Message): + key: int + value: Proto2MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap.UnknownMapFieldEntry: ... + + @property + def known_map_field(self) -> MutableMapping[int, Proto2MapEnum]: ... + + @property + def unknown_map_field(self) -> MutableMapping[int, Proto2MapEnum]: ... + + def __init__(self, + known_map_field: Optional[Mapping[int, Proto2MapEnum]] = ..., + unknown_map_field: Optional[Mapping[int, Proto2MapEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMap: ... + + +class TestEnumMapPlusExtra(Message): + + class KnownMapFieldEntry(Message): + key: int + value: Proto2MapEnumPlusExtra + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnumPlusExtra] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra.KnownMapFieldEntry: ... + + class UnknownMapFieldEntry(Message): + key: int + value: Proto2MapEnumPlusExtra + + def __init__(self, + key: Optional[int] = ..., + value: Optional[Proto2MapEnumPlusExtra] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra.UnknownMapFieldEntry: ... + + @property + def known_map_field(self) -> MutableMapping[int, Proto2MapEnumPlusExtra]: ... + + @property + def unknown_map_field(self) -> MutableMapping[int, Proto2MapEnumPlusExtra]: ... + + def __init__(self, + known_map_field: Optional[Mapping[int, Proto2MapEnumPlusExtra]] = ..., + unknown_map_field: Optional[Mapping[int, Proto2MapEnumPlusExtra]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumMapPlusExtra: ... + + +class TestImportEnumMap(Message): + + class ImportEnumAmpEntry(Message): + key: int + value: ImportEnumForMap + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ImportEnumForMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestImportEnumMap.ImportEnumAmpEntry: ... + + @property + def import_enum_amp(self) -> MutableMapping[int, ImportEnumForMap]: ... + + def __init__(self, + import_enum_amp: Optional[Mapping[int, ImportEnumForMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestImportEnumMap: ... + + +class TestIntIntMap(Message): + + class MEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIntIntMap.MEntry: ... + + @property + def m(self) -> MutableMapping[int, int]: ... + + def __init__(self, + m: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIntIntMap: ... + + +class TestMaps(Message): + + class MInt32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MInt32Entry: ... + + class MInt64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MInt64Entry: ... + + class MUint32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MUint32Entry: ... + + class MUint64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MUint64Entry: ... + + class MSint32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSint32Entry: ... + + class MSint64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSint64Entry: ... + + class MFixed32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MFixed32Entry: ... + + class MFixed64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MFixed64Entry: ... + + class MSfixed32Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSfixed32Entry: ... + + class MSfixed64Entry(Message): + key: int + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MSfixed64Entry: ... + + class MBoolEntry(Message): + key: bool + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MBoolEntry: ... + + class MStringEntry(Message): + key: Text + + @property + def value(self) -> TestIntIntMap: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestIntIntMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps.MStringEntry: ... + + @property + def m_int32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_int64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_uint32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_uint64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sint32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sint64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_fixed32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_fixed64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sfixed32(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_sfixed64(self) -> MutableMapping[int, TestIntIntMap]: ... + + @property + def m_bool(self) -> MutableMapping[bool, TestIntIntMap]: ... + + @property + def m_string(self) -> MutableMapping[Text, TestIntIntMap]: ... + + def __init__(self, + m_int32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_int64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_uint32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_uint64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sint32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sint64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_fixed32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_fixed64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sfixed32: Optional[Mapping[int, TestIntIntMap]] = ..., + m_sfixed64: Optional[Mapping[int, TestIntIntMap]] = ..., + m_bool: Optional[Mapping[bool, TestIntIntMap]] = ..., + m_string: Optional[Mapping[Text, TestIntIntMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMaps: ... + + +class TestSubmessageMaps(Message): + + @property + def m(self) -> TestMaps: ... + + def __init__(self, + m: Optional[TestMaps] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSubmessageMaps: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi new file mode 100644 index 0000000..25058bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/map_unittest_pb2.pyi @@ -0,0 +1,882 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_no_arena_pb2 import ( + ForeignMessage, +) +from google.protobuf.unittest_pb2 import ( + ForeignMessage as ForeignMessage1, + TestAllTypes, + TestRequired, +) +from typing import ( + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class MapEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MapEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MapEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MapEnum]]: ... + + +MAP_ENUM_FOO: MapEnum +MAP_ENUM_BAR: MapEnum +MAP_ENUM_BAZ: MapEnum + + +class TestMap(Message): + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapStringStringEntry: ... + + class MapInt32BytesEntry(Message): + key: int + value: bytes + + def __init__(self, + key: Optional[int] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32BytesEntry: ... + + class MapInt32EnumEntry(Message): + key: int + value: MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32EnumEntry: ... + + class MapInt32ForeignMessageEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32ForeignMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestMap.MapStringForeignMessageEntry: ... + + class MapInt32AllTypesEntry(Message): + key: int + + @property + def value(self) -> TestAllTypes: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.MapInt32AllTypesEntry: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_int32_bytes(self) -> MutableMapping[int, bytes]: ... + + @property + def map_int32_enum(self) -> MutableMapping[int, MapEnum]: ... + + @property + def map_int32_foreign_message( + self) -> MutableMapping[int, ForeignMessage1]: ... + + @property + def map_string_foreign_message( + self) -> MutableMapping[Text, ForeignMessage1]: ... + + @property + def map_int32_all_types(self) -> MutableMapping[int, TestAllTypes]: ... + + def __init__(self, + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_int32_bytes: Optional[Mapping[int, bytes]] = ..., + map_int32_enum: Optional[Mapping[int, MapEnum]] = ..., + map_int32_foreign_message: Optional[Mapping[int, ForeignMessage1]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessage1]] = ..., + map_int32_all_types: Optional[Mapping[int, TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap: ... + + +class TestMapSubmessage(Message): + + @property + def test_map(self) -> TestMap: ... + + def __init__(self, + test_map: Optional[TestMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMapSubmessage: ... + + +class TestMessageMap(Message): + + class MapInt32MessageEntry(Message): + key: int + + @property + def value(self) -> TestAllTypes: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageMap.MapInt32MessageEntry: ... + + @property + def map_int32_message(self) -> MutableMapping[int, TestAllTypes]: ... + + def __init__(self, + map_int32_message: Optional[Mapping[int, TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageMap: ... + + +class TestSameTypeMap(Message): + + class Map1Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap.Map1Entry: ... + + class Map2Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap.Map2Entry: ... + + @property + def map1(self) -> MutableMapping[int, int]: ... + + @property + def map2(self) -> MutableMapping[int, int]: ... + + def __init__(self, + map1: Optional[Mapping[int, int]] = ..., + map2: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestSameTypeMap: ... + + +class TestRequiredMessageMap(Message): + + class MapFieldEntry(Message): + key: int + + @property + def value(self) -> TestRequired: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[TestRequired] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestRequiredMessageMap.MapFieldEntry: ... + + @property + def map_field(self) -> MutableMapping[int, TestRequired]: ... + + def __init__(self, + map_field: Optional[Mapping[int, TestRequired]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredMessageMap: ... + + +class TestArenaMap(Message): + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapStringStringEntry: ... + + class MapInt32BytesEntry(Message): + key: int + value: bytes + + def __init__(self, + key: Optional[int] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32BytesEntry: ... + + class MapInt32EnumEntry(Message): + key: int + value: MapEnum + + def __init__(self, + key: Optional[int] = ..., + value: Optional[MapEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap.MapInt32EnumEntry: ... + + class MapInt32ForeignMessageEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage1: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage1] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapInt32ForeignMessageEntry: ... + + class MapInt32ForeignMessageNoArenaEntry(Message): + key: int + + @property + def value(self) -> ForeignMessage: ... + + def __init__(self, + key: Optional[int] = ..., + value: Optional[ForeignMessage] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestArenaMap.MapInt32ForeignMessageNoArenaEntry: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_int32_bytes(self) -> MutableMapping[int, bytes]: ... + + @property + def map_int32_enum(self) -> MutableMapping[int, MapEnum]: ... + + @property + def map_int32_foreign_message( + self) -> MutableMapping[int, ForeignMessage1]: ... + + @property + def map_int32_foreign_message_no_arena( + self) -> MutableMapping[int, ForeignMessage]: ... + + def __init__(self, + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_int32_bytes: Optional[Mapping[int, bytes]] = ..., + map_int32_enum: Optional[Mapping[int, MapEnum]] = ..., + map_int32_foreign_message: Optional[Mapping[int, ForeignMessage1]] = ..., + map_int32_foreign_message_no_arena: Optional[Mapping[int, ForeignMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestArenaMap: ... + + +class MessageContainingEnumCalledType(Message): + + class Type(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MessageContainingEnumCalledType.Type: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MessageContainingEnumCalledType.Type]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + MessageContainingEnumCalledType.Type]]: ... + TYPE_FOO: MessageContainingEnumCalledType.Type + + class TypeEntry(Message): + key: Text + + @property + def value(self) -> MessageContainingEnumCalledType: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[MessageContainingEnumCalledType] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> MessageContainingEnumCalledType.TypeEntry: ... + + @property + def type(self) -> MutableMapping[Text, + MessageContainingEnumCalledType]: ... + + def __init__(self, + type: Optional[Mapping[Text, MessageContainingEnumCalledType]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageContainingEnumCalledType: ... + + +class MessageContainingMapCalledEntry(Message): + + class EntryEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> MessageContainingMapCalledEntry.EntryEntry: ... + + @property + def entry(self) -> MutableMapping[int, int]: ... + + def __init__(self, + entry: Optional[Mapping[int, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageContainingMapCalledEntry: ... + + +class TestRecursiveMapMessage(Message): + + class AEntry(Message): + key: Text + + @property + def value(self) -> TestRecursiveMapMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestRecursiveMapMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMapMessage.AEntry: ... + + @property + def a(self) -> MutableMapping[Text, TestRecursiveMapMessage]: ... + + def __init__(self, + a: Optional[Mapping[Text, TestRecursiveMapMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMapMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi new file mode 100644 index 0000000..4bf8cab --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message.pyi @@ -0,0 +1,46 @@ +from typing import Any, Sequence, Optional, Tuple + +from .descriptor import ( + DescriptorBase, + FieldDescriptor, +) + +class Error(Exception): ... +class DecodeError(Error): ... +class EncodeError(Error): ... + +class _ExtensionDict: + def __getitem__(self, extension_handle: DescriptorBase) -> Any: ... + def __setitem__(self, extension_handle: DescriptorBase, value: Any) -> None: ... + +class Message: + DESCRIPTOR: Any + def __deepcopy__(self, memo=...): ... + def __eq__(self, other_msg): ... + def __ne__(self, other_msg): ... + def MergeFrom(self, other_msg: Message) -> None: ... + def CopyFrom(self, other_msg: Message) -> None: ... + def Clear(self) -> None: ... + def SetInParent(self) -> None: ... + def IsInitialized(self) -> bool: ... + def MergeFromString(self, serialized: Any) -> int: ... # TODO: we need to be able to call buffer() on serialized + def ParseFromString(self, serialized: Any) -> None: ... + def SerializeToString(self, deterministic: bool = ...) -> bytes: ... + def SerializePartialToString(self, deterministic: bool = ...) -> bytes: ... + def ListFields(self) -> Sequence[Tuple[FieldDescriptor, Any]]: ... + def HasExtension(self, extension_handle): ... + def ClearExtension(self, extension_handle): ... + def ByteSize(self) -> int: ... + @property + def Extensions(self) -> _ExtensionDict: ... + + # Intentionally left out typing on these three methods, because they are + # stringly typed and it is not useful to call them on a Message directly. + # We prefer more specific typing on individual subclasses of Message + # See https://github.com/dropbox/mypy-protobuf/issues/62 for details + def HasField(self, field_name: Any) -> bool: ... + def ClearField(self, field_name: Any) -> None: ... + def WhichOneof(self, oneof_group: Any) -> Any: ... + + # TODO: check kwargs + def __init__(self, **kwargs) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi new file mode 100644 index 0000000..ad31e22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/message_factory.pyi @@ -0,0 +1,13 @@ +from typing import Any, Dict, Iterable, Optional, Type + +from .message import Message +from .descriptor import Descriptor +from .descriptor_pool import DescriptorPool + +class MessageFactory: + pool: Any + def __init__(self, pool: Optional[DescriptorPool] = ...) -> None: ... + def GetPrototype(self, descriptor: Descriptor) -> Type[Message]: ... + def GetMessages(self, files: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... + +def GetMessages(file_protos: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi new file mode 100644 index 0000000..3ca5055 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/reflection.pyi @@ -0,0 +1,6 @@ +class GeneratedProtocolMessageType(type): + def __new__(cls, name, bases, dictionary): ... + def __init__(self, name, bases, dictionary) -> None: ... + +def ParseMessage(descriptor, byte_str): ... +def MakeClass(descriptor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi new file mode 100644 index 0000000..4874d53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/service.pyi @@ -0,0 +1,39 @@ +from concurrent.futures import Future +from typing import Callable, Optional, Text, Type + +from google.protobuf.descriptor import MethodDescriptor, ServiceDescriptor +from google.protobuf.message import Message + +class RpcException(Exception): ... + +class Service: + @staticmethod + def GetDescriptor() -> ServiceDescriptor: ... + def CallMethod( + self, + method_descriptor: MethodDescriptor, + rpc_controller: RpcController, + request: Message, + done: Optional[Callable[[Message], None]], + ) -> Optional[Future[Message]]: ... + def GetRequestClass(self, method_descriptor: MethodDescriptor) -> Type[Message]: ... + def GetResponseClass(self, method_descriptor: MethodDescriptor) -> Type[Message]: ... + +class RpcController: + def Reset(self) -> None: ... + def Failed(self) -> bool: ... + def ErrorText(self) -> Optional[Text]: ... + def StartCancel(self) -> None: ... + def SetFailed(self, reason: Text) -> None: ... + def IsCanceled(self) -> bool: ... + def NotifyOnCancel(self, callback: Callable[[], None]) -> None: ... + +class RpcChannel: + def CallMethod( + self, + method_descriptor: MethodDescriptor, + rpc_controller: RpcController, + request: Message, + response_class: Type[Message], + done: Optional[Callable[[Message], None]], + ) -> Optional[Future[Message]]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi new file mode 100644 index 0000000..527ac1a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/source_context_pb2.pyi @@ -0,0 +1,18 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, + Text, +) + + +class SourceContext(Message): + file_name: Text + + def __init__(self, + file_name: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SourceContext: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi new file mode 100644 index 0000000..21afcc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/struct_pb2.pyi @@ -0,0 +1,105 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.internal import well_known_types + +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class NullValue(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NullValue: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NullValue]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NullValue]]: ... + + +NULL_VALUE: NullValue + + +class Struct(Message, well_known_types.Struct): + class FieldsEntry(Message): + key: Text + + @property + def value(self) -> Value: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Value] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Struct.FieldsEntry: ... + + @property + def fields(self) -> MutableMapping[Text, Value]: ... + + def __init__(self, + fields: Optional[Mapping[Text, Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Struct: ... + + +class _Value(Message): + null_value: NullValue + number_value: float + string_value: Text + bool_value: bool + + @property + def struct_value(self) -> Struct: ... + + @property + def list_value(self) -> ListValue: ... + + def __init__(self, + null_value: Optional[NullValue] = ..., + number_value: Optional[float] = ..., + string_value: Optional[Text] = ..., + bool_value: Optional[bool] = ..., + struct_value: Optional[Struct] = ..., + list_value: Optional[ListValue] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> _Value: ... + + +Value = _Value + + +class ListValue(Message, well_known_types.ListValue): + + @property + def values(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + values: Optional[Iterable[Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ListValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi new file mode 100644 index 0000000..477d80e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/symbol_database.pyi @@ -0,0 +1,14 @@ +from typing import Dict, Iterable, Type + +from .descriptor import EnumDescriptor, FileDescriptor +from .message import Message +from .message_factory import MessageFactory + +class SymbolDatabase(MessageFactory): + def RegisterMessage(self, message: Type[Message]) -> Type[Message]: ... + def RegisterEnumDescriptor(self, enum_descriptor: Type[EnumDescriptor]) -> EnumDescriptor: ... + def RegisterFileDescriptor(self, file_descriptor: Type[FileDescriptor]) -> FileDescriptor: ... + def GetSymbol(self, symbol: bytes) -> Type[Message]: ... + def GetMessages(self, files: Iterable[bytes]) -> Dict[bytes, Type[Message]]: ... + +def Default(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi new file mode 100644 index 0000000..03e34be --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto2_pb2.pyi @@ -0,0 +1,627 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +import builtins +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnumProto2(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnumProto2: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnumProto2]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnumProto2]]: ... + + +FOREIGN_FOO: ForeignEnumProto2 +FOREIGN_BAR: ForeignEnumProto2 +FOREIGN_BAZ: ForeignEnumProto2 + + +class TestAllTypesProto2(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypesProto2.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypesProto2.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypesProto2.NestedEnum]]: ... + FOO: TestAllTypesProto2.NestedEnum + BAR: TestAllTypesProto2.NestedEnum + BAZ: TestAllTypesProto2.NestedEnum + NEG: TestAllTypesProto2.NestedEnum + + class NestedMessage(Message): + a: int + + @property + def corecursive(self) -> TestAllTypesProto2: ... + + def __init__(self, + a: Optional[int] = ..., + corecursive: Optional[TestAllTypesProto2] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.NestedMessage: ... + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringStringEntry: ... + + class MapStringBytesEntry(Message): + key: Text + value: bytes + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringBytesEntry: ... + + class MapStringNestedMessageEntry(Message): + key: Text + + @property + def value(self) -> TestAllTypesProto2.NestedMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto2.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringNestedMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessageProto2: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessageProto2] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringForeignMessageEntry: ... + + class MapStringNestedEnumEntry(Message): + key: Text + value: TestAllTypesProto2.NestedEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto2.NestedEnum] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringNestedEnumEntry: ... + + class MapStringForeignEnumEntry(Message): + key: Text + value: ForeignEnumProto2 + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignEnumProto2] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MapStringForeignEnumEntry: ... + + class Data(Message): + group_int32: int + group_uint32: int + + def __init__(self, + group_int32: Optional[int] = ..., + group_uint32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2.Data: ... + + class MessageSetCorrect(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MessageSetCorrect: ... + + class MessageSetCorrectExtension1(Message): + bytes: Text + + def __init__(self, + bytes: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: builtins.bytes) -> TestAllTypesProto2.MessageSetCorrectExtension1: ... + + class MessageSetCorrectExtension2(Message): + i: int + + def __init__(self, + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestAllTypesProto2.MessageSetCorrectExtension2: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypesProto2.NestedEnum + optional_foreign_enum: ForeignEnumProto2 + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypesProto2.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnumProto2] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + oneof_bool: bool + oneof_uint64: int + oneof_float: float + oneof_double: float + oneof_enum: TestAllTypesProto2.NestedEnum + fieldname1: int + field_name2: int + _field_name3: int + field__name4_: int + field0name5: int + field_0_name6: int + fieldName7: int + FieldName8: int + field_Name9: int + Field_Name10: int + FIELD_NAME11: int + FIELD_name12: int + __field_name13: int + __Field_name14: int + field__name15: int + field__Name16: int + field_name17__: int + Field_name18__: int + + @property + def optional_nested_message(self) -> TestAllTypesProto2.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessageProto2: ... + + @property + def recursive_message(self) -> TestAllTypesProto2: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypesProto2.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessageProto2]: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_string_bytes(self) -> MutableMapping[Text, bytes]: ... + + @property + def map_string_nested_message( + self) -> MutableMapping[Text, TestAllTypesProto2.NestedMessage]: ... + + @property + def map_string_foreign_message( + self) -> MutableMapping[Text, ForeignMessageProto2]: ... + + @property + def map_string_nested_enum( + self) -> MutableMapping[Text, TestAllTypesProto2.NestedEnum]: ... + + @property + def map_string_foreign_enum( + self) -> MutableMapping[Text, ForeignEnumProto2]: ... + + @property + def oneof_nested_message(self) -> TestAllTypesProto2.NestedMessage: ... + + @property + def data(self) -> TestAllTypesProto2.Data: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypesProto2.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessageProto2] = ..., + optional_nested_enum: Optional[TestAllTypesProto2.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnumProto2] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + recursive_message: Optional[TestAllTypesProto2] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypesProto2.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessageProto2]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypesProto2.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnumProto2]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_string_bytes: Optional[Mapping[Text, bytes]] = ..., + map_string_nested_message: Optional[Mapping[Text, TestAllTypesProto2.NestedMessage]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessageProto2]] = ..., + map_string_nested_enum: Optional[Mapping[Text, TestAllTypesProto2.NestedEnum]] = ..., + map_string_foreign_enum: Optional[Mapping[Text, ForeignEnumProto2]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypesProto2.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + oneof_bool: Optional[bool] = ..., + oneof_uint64: Optional[int] = ..., + oneof_float: Optional[float] = ..., + oneof_double: Optional[float] = ..., + oneof_enum: Optional[TestAllTypesProto2.NestedEnum] = ..., + data: Optional[TestAllTypesProto2.Data] = ..., + fieldname1: Optional[int] = ..., + field_name2: Optional[int] = ..., + _field_name3: Optional[int] = ..., + field__name4_: Optional[int] = ..., + field0name5: Optional[int] = ..., + field_0_name6: Optional[int] = ..., + fieldName7: Optional[int] = ..., + FieldName8: Optional[int] = ..., + field_Name9: Optional[int] = ..., + Field_Name10: Optional[int] = ..., + FIELD_NAME11: Optional[int] = ..., + FIELD_name12: Optional[int] = ..., + __field_name13: Optional[int] = ..., + __Field_name14: Optional[int] = ..., + field__name15: Optional[int] = ..., + field__Name16: Optional[int] = ..., + field_name17__: Optional[int] = ..., + Field_name18__: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto2: ... + + +class ForeignMessageProto2(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessageProto2: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi new file mode 100644 index 0000000..5a9cce3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/test_messages_proto3_pb2.pyi @@ -0,0 +1,700 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.duration_pb2 import ( + Duration, +) +from google.protobuf.field_mask_pb2 import ( + FieldMask, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.struct_pb2 import ( + Struct, + Value, +) +from google.protobuf.timestamp_pb2 import ( + Timestamp, +) +from google.protobuf.wrappers_pb2 import ( + BoolValue, + BytesValue, + DoubleValue, + FloatValue, + Int32Value, + Int64Value, + StringValue, + UInt32Value, + UInt64Value, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypesProto3(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypesProto3.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypesProto3.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypesProto3.NestedEnum]]: ... + FOO: TestAllTypesProto3.NestedEnum + BAR: TestAllTypesProto3.NestedEnum + BAZ: TestAllTypesProto3.NestedEnum + NEG: TestAllTypesProto3.NestedEnum + + class NestedMessage(Message): + a: int + + @property + def corecursive(self) -> TestAllTypesProto3: ... + + def __init__(self, + a: Optional[int] = ..., + corecursive: Optional[TestAllTypesProto3] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.NestedMessage: ... + + class MapInt32Int32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32Int32Entry: ... + + class MapInt64Int64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt64Int64Entry: ... + + class MapUint32Uint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapUint32Uint32Entry: ... + + class MapUint64Uint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapUint64Uint64Entry: ... + + class MapSint32Sint32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSint32Sint32Entry: ... + + class MapSint64Sint64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSint64Sint64Entry: ... + + class MapFixed32Fixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapFixed32Fixed32Entry: ... + + class MapFixed64Fixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapFixed64Fixed64Entry: ... + + class MapSfixed32Sfixed32Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSfixed32Sfixed32Entry: ... + + class MapSfixed64Sfixed64Entry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapSfixed64Sfixed64Entry: ... + + class MapInt32FloatEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32FloatEntry: ... + + class MapInt32DoubleEntry(Message): + key: int + value: float + + def __init__(self, + key: Optional[int] = ..., + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapInt32DoubleEntry: ... + + class MapBoolBoolEntry(Message): + key: bool + value: bool + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapBoolBoolEntry: ... + + class MapStringStringEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringStringEntry: ... + + class MapStringBytesEntry(Message): + key: Text + value: bytes + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringBytesEntry: ... + + class MapStringNestedMessageEntry(Message): + key: Text + + @property + def value(self) -> TestAllTypesProto3.NestedMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto3.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringNestedMessageEntry: ... + + class MapStringForeignMessageEntry(Message): + key: Text + + @property + def value(self) -> ForeignMessage: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringForeignMessageEntry: ... + + class MapStringNestedEnumEntry(Message): + key: Text + value: TestAllTypesProto3.NestedEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestAllTypesProto3.NestedEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringNestedEnumEntry: ... + + class MapStringForeignEnumEntry(Message): + key: Text + value: ForeignEnum + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[ForeignEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3.MapStringForeignEnumEntry: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypesProto3.NestedEnum + optional_foreign_enum: ForeignEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypesProto3.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + oneof_bool: bool + oneof_uint64: int + oneof_float: float + oneof_double: float + oneof_enum: TestAllTypesProto3.NestedEnum + fieldname1: int + field_name2: int + _field_name3: int + field__name4_: int + field0name5: int + field_0_name6: int + fieldName7: int + FieldName8: int + field_Name9: int + Field_Name10: int + FIELD_NAME11: int + FIELD_name12: int + __field_name13: int + __Field_name14: int + field__name15: int + field__Name16: int + field_name17__: int + Field_name18__: int + + @property + def optional_nested_message(self) -> TestAllTypesProto3.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def recursive_message(self) -> TestAllTypesProto3: ... + + @property + def repeated_nested_message(self) -> RepeatedCompositeFieldContainer[TestAllTypesProto3.NestedMessage]: ... + + @property + def repeated_foreign_message(self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def map_int32_int32(self) -> MutableMapping[int, int]: ... + + @property + def map_int64_int64(self) -> MutableMapping[int, int]: ... + + @property + def map_uint32_uint32(self) -> MutableMapping[int, int]: ... + + @property + def map_uint64_uint64(self) -> MutableMapping[int, int]: ... + + @property + def map_sint32_sint32(self) -> MutableMapping[int, int]: ... + + @property + def map_sint64_sint64(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed32_fixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_fixed64_fixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed32_sfixed32(self) -> MutableMapping[int, int]: ... + + @property + def map_sfixed64_sfixed64(self) -> MutableMapping[int, int]: ... + + @property + def map_int32_float(self) -> MutableMapping[int, float]: ... + + @property + def map_int32_double(self) -> MutableMapping[int, float]: ... + + @property + def map_bool_bool(self) -> MutableMapping[bool, bool]: ... + + @property + def map_string_string(self) -> MutableMapping[Text, Text]: ... + + @property + def map_string_bytes(self) -> MutableMapping[Text, bytes]: ... + + @property + def map_string_nested_message(self) -> MutableMapping[Text, TestAllTypesProto3.NestedMessage]: ... + + @property + def map_string_foreign_message(self) -> MutableMapping[Text, ForeignMessage]: ... + + @property + def map_string_nested_enum(self) -> MutableMapping[Text, TestAllTypesProto3.NestedEnum]: ... + + @property + def map_string_foreign_enum(self) -> MutableMapping[Text, ForeignEnum]: ... + + @property + def oneof_nested_message(self) -> TestAllTypesProto3.NestedMessage: ... + + @property + def optional_bool_wrapper(self) -> BoolValue: ... + + @property + def optional_int32_wrapper(self) -> Int32Value: ... + + @property + def optional_int64_wrapper(self) -> Int64Value: ... + + @property + def optional_uint32_wrapper(self) -> UInt32Value: ... + + @property + def optional_uint64_wrapper(self) -> UInt64Value: ... + + @property + def optional_float_wrapper(self) -> FloatValue: ... + + @property + def optional_double_wrapper(self) -> DoubleValue: ... + + @property + def optional_string_wrapper(self) -> StringValue: ... + + @property + def optional_bytes_wrapper(self) -> BytesValue: ... + + @property + def repeated_bool_wrapper(self) -> RepeatedCompositeFieldContainer[BoolValue]: ... + + @property + def repeated_int32_wrapper(self) -> RepeatedCompositeFieldContainer[Int32Value]: ... + + @property + def repeated_int64_wrapper(self) -> RepeatedCompositeFieldContainer[Int64Value]: ... + + @property + def repeated_uint32_wrapper(self) -> RepeatedCompositeFieldContainer[UInt32Value]: ... + + @property + def repeated_uint64_wrapper(self) -> RepeatedCompositeFieldContainer[UInt64Value]: ... + + @property + def repeated_float_wrapper(self) -> RepeatedCompositeFieldContainer[FloatValue]: ... + + @property + def repeated_double_wrapper(self) -> RepeatedCompositeFieldContainer[DoubleValue]: ... + + @property + def repeated_string_wrapper(self) -> RepeatedCompositeFieldContainer[StringValue]: ... + + @property + def repeated_bytes_wrapper(self) -> RepeatedCompositeFieldContainer[BytesValue]: ... + + @property + def optional_duration(self) -> Duration: ... + + @property + def optional_timestamp(self) -> Timestamp: ... + + @property + def optional_field_mask(self) -> FieldMask: ... + + @property + def optional_struct(self) -> Struct: ... + + @property + def optional_any(self) -> Any: ... + + @property + def optional_value(self) -> Value: ... + + @property + def repeated_duration(self) -> RepeatedCompositeFieldContainer[Duration]: ... + + @property + def repeated_timestamp(self) -> RepeatedCompositeFieldContainer[Timestamp]: ... + + @property + def repeated_fieldmask(self) -> RepeatedCompositeFieldContainer[FieldMask]: ... + + @property + def repeated_struct(self) -> RepeatedCompositeFieldContainer[Struct]: ... + + @property + def repeated_any(self) -> RepeatedCompositeFieldContainer[Any]: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypesProto3.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_nested_enum: Optional[TestAllTypesProto3.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + recursive_message: Optional[TestAllTypesProto3] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypesProto3.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypesProto3.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + map_int32_int32: Optional[Mapping[int, int]] = ..., + map_int64_int64: Optional[Mapping[int, int]] = ..., + map_uint32_uint32: Optional[Mapping[int, int]] = ..., + map_uint64_uint64: Optional[Mapping[int, int]] = ..., + map_sint32_sint32: Optional[Mapping[int, int]] = ..., + map_sint64_sint64: Optional[Mapping[int, int]] = ..., + map_fixed32_fixed32: Optional[Mapping[int, int]] = ..., + map_fixed64_fixed64: Optional[Mapping[int, int]] = ..., + map_sfixed32_sfixed32: Optional[Mapping[int, int]] = ..., + map_sfixed64_sfixed64: Optional[Mapping[int, int]] = ..., + map_int32_float: Optional[Mapping[int, float]] = ..., + map_int32_double: Optional[Mapping[int, float]] = ..., + map_bool_bool: Optional[Mapping[bool, bool]] = ..., + map_string_string: Optional[Mapping[Text, Text]] = ..., + map_string_bytes: Optional[Mapping[Text, bytes]] = ..., + map_string_nested_message: Optional[Mapping[Text, TestAllTypesProto3.NestedMessage]] = ..., + map_string_foreign_message: Optional[Mapping[Text, ForeignMessage]] = ..., + map_string_nested_enum: Optional[Mapping[Text, TestAllTypesProto3.NestedEnum]] = ..., + map_string_foreign_enum: Optional[Mapping[Text, ForeignEnum]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypesProto3.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + oneof_bool: Optional[bool] = ..., + oneof_uint64: Optional[int] = ..., + oneof_float: Optional[float] = ..., + oneof_double: Optional[float] = ..., + oneof_enum: Optional[TestAllTypesProto3.NestedEnum] = ..., + optional_bool_wrapper: Optional[BoolValue] = ..., + optional_int32_wrapper: Optional[Int32Value] = ..., + optional_int64_wrapper: Optional[Int64Value] = ..., + optional_uint32_wrapper: Optional[UInt32Value] = ..., + optional_uint64_wrapper: Optional[UInt64Value] = ..., + optional_float_wrapper: Optional[FloatValue] = ..., + optional_double_wrapper: Optional[DoubleValue] = ..., + optional_string_wrapper: Optional[StringValue] = ..., + optional_bytes_wrapper: Optional[BytesValue] = ..., + repeated_bool_wrapper: Optional[Iterable[BoolValue]] = ..., + repeated_int32_wrapper: Optional[Iterable[Int32Value]] = ..., + repeated_int64_wrapper: Optional[Iterable[Int64Value]] = ..., + repeated_uint32_wrapper: Optional[Iterable[UInt32Value]] = ..., + repeated_uint64_wrapper: Optional[Iterable[UInt64Value]] = ..., + repeated_float_wrapper: Optional[Iterable[FloatValue]] = ..., + repeated_double_wrapper: Optional[Iterable[DoubleValue]] = ..., + repeated_string_wrapper: Optional[Iterable[StringValue]] = ..., + repeated_bytes_wrapper: Optional[Iterable[BytesValue]] = ..., + optional_duration: Optional[Duration] = ..., + optional_timestamp: Optional[Timestamp] = ..., + optional_field_mask: Optional[FieldMask] = ..., + optional_struct: Optional[Struct] = ..., + optional_any: Optional[Any] = ..., + optional_value: Optional[Value] = ..., + repeated_duration: Optional[Iterable[Duration]] = ..., + repeated_timestamp: Optional[Iterable[Timestamp]] = ..., + repeated_fieldmask: Optional[Iterable[FieldMask]] = ..., + repeated_struct: Optional[Iterable[Struct]] = ..., + repeated_any: Optional[Iterable[Any]] = ..., + repeated_value: Optional[Iterable[Value]] = ..., + fieldname1: Optional[int] = ..., + field_name2: Optional[int] = ..., + _field_name3: Optional[int] = ..., + field__name4_: Optional[int] = ..., + field0name5: Optional[int] = ..., + field_0_name6: Optional[int] = ..., + fieldName7: Optional[int] = ..., + FieldName8: Optional[int] = ..., + field_Name9: Optional[int] = ..., + Field_Name10: Optional[int] = ..., + FIELD_NAME11: Optional[int] = ..., + FIELD_name12: Optional[int] = ..., + __field_name13: Optional[int] = ..., + __Field_name14: Optional[int] = ..., + field__name15: Optional[int] = ..., + field__Name16: Optional[int] = ..., + field_name17__: Optional[int] = ..., + Field_name18__: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypesProto3: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi new file mode 100644 index 0000000..77ae305 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/timestamp_pb2.pyi @@ -0,0 +1,21 @@ +from google.protobuf.message import ( + Message, +) +from google.protobuf.internal import well_known_types + +from typing import ( + Optional, +) + + +class Timestamp(Message, well_known_types.Timestamp): + seconds: int + nanos: int + + def __init__(self, + seconds: Optional[int] = ..., + nanos: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Timestamp: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi new file mode 100644 index 0000000..e3ff9b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/type_pb2.pyi @@ -0,0 +1,215 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.source_context_pb2 import ( + SourceContext, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class Syntax(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Syntax: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Syntax]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Syntax]]: ... + + +SYNTAX_PROTO2: Syntax +SYNTAX_PROTO3: Syntax + + +class Type(Message): + name: Text + oneofs: RepeatedScalarFieldContainer[Text] + syntax: Syntax + + @property + def fields(self) -> RepeatedCompositeFieldContainer[Field]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + def __init__(self, + name: Optional[Text] = ..., + fields: Optional[Iterable[Field]] = ..., + oneofs: Optional[Iterable[Text]] = ..., + options: Optional[Iterable[Option]] = ..., + source_context: Optional[SourceContext] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Type: ... + + +class Field(Message): + + class Kind(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Field.Kind: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Field.Kind]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Field.Kind]]: ... + TYPE_UNKNOWN: Field.Kind + TYPE_DOUBLE: Field.Kind + TYPE_FLOAT: Field.Kind + TYPE_INT64: Field.Kind + TYPE_UINT64: Field.Kind + TYPE_INT32: Field.Kind + TYPE_FIXED64: Field.Kind + TYPE_FIXED32: Field.Kind + TYPE_BOOL: Field.Kind + TYPE_STRING: Field.Kind + TYPE_GROUP: Field.Kind + TYPE_MESSAGE: Field.Kind + TYPE_BYTES: Field.Kind + TYPE_UINT32: Field.Kind + TYPE_ENUM: Field.Kind + TYPE_SFIXED32: Field.Kind + TYPE_SFIXED64: Field.Kind + TYPE_SINT32: Field.Kind + TYPE_SINT64: Field.Kind + + class Cardinality(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> Field.Cardinality: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[Field.Cardinality]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, Field.Cardinality]]: ... + CARDINALITY_UNKNOWN: Field.Cardinality + CARDINALITY_OPTIONAL: Field.Cardinality + CARDINALITY_REQUIRED: Field.Cardinality + CARDINALITY_REPEATED: Field.Cardinality + kind: Field.Kind + cardinality: Field.Cardinality + number: int + name: Text + type_url: Text + oneof_index: int + packed: bool + json_name: Text + default_value: Text + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + kind: Optional[Field.Kind] = ..., + cardinality: Optional[Field.Cardinality] = ..., + number: Optional[int] = ..., + name: Optional[Text] = ..., + type_url: Optional[Text] = ..., + oneof_index: Optional[int] = ..., + packed: Optional[bool] = ..., + options: Optional[Iterable[Option]] = ..., + json_name: Optional[Text] = ..., + default_value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Field: ... + + +class Enum(Message): + name: Text + syntax: Syntax + + @property + def enumvalue(self) -> RepeatedCompositeFieldContainer[EnumValue]: ... + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + @property + def source_context(self) -> SourceContext: ... + + def __init__(self, + name: Optional[Text] = ..., + enumvalue: Optional[Iterable[EnumValue]] = ..., + options: Optional[Iterable[Option]] = ..., + source_context: Optional[SourceContext] = ..., + syntax: Optional[Syntax] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Enum: ... + + +class EnumValue(Message): + name: Text + number: int + + @property + def options(self) -> RepeatedCompositeFieldContainer[Option]: ... + + def __init__(self, + name: Optional[Text] = ..., + number: Optional[int] = ..., + options: Optional[Iterable[Option]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> EnumValue: ... + + +class Option(Message): + name: Text + + @property + def value(self) -> Any: ... + + def __init__(self, + name: Optional[Text] = ..., + value: Optional[Any] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Option: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi new file mode 100644 index 0000000..89d6042 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_arena_pb2.pyi @@ -0,0 +1,43 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_no_arena_import_pb2 import ( + ImportNoArenaNestedMessage, +) +from typing import ( + Iterable, + Optional, +) + + +class NestedMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedMessage: ... + + +class ArenaMessage(Message): + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[NestedMessage]: ... + + @property + def repeated_import_no_arena_message( + self) -> RepeatedCompositeFieldContainer[ImportNoArenaNestedMessage]: ... + + def __init__(self, + repeated_nested_message: Optional[Iterable[NestedMessage]] = ..., + repeated_import_no_arena_message: Optional[Iterable[ImportNoArenaNestedMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ArenaMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi new file mode 100644 index 0000000..5028e07 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_custom_options_pb2.pyi @@ -0,0 +1,472 @@ +from google.protobuf.descriptor_pb2 import ( + FileOptions, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class MethodOpt1(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> MethodOpt1: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[MethodOpt1]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, MethodOpt1]]: ... + + +METHODOPT1_VAL1: MethodOpt1 +METHODOPT1_VAL2: MethodOpt1 + + +class AggregateEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> AggregateEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[AggregateEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, AggregateEnum]]: ... + + +VALUE: AggregateEnum + + +class TestMessageWithCustomOptions(Message): + + class AnEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestMessageWithCustomOptions.AnEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestMessageWithCustomOptions.AnEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + TestMessageWithCustomOptions.AnEnum]]: ... + ANENUM_VAL1: TestMessageWithCustomOptions.AnEnum + ANENUM_VAL2: TestMessageWithCustomOptions.AnEnum + field1: Text + oneof_field: int + + def __init__(self, + field1: Optional[Text] = ..., + oneof_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageWithCustomOptions: ... + + +class CustomOptionFooRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooRequest: ... + + +class CustomOptionFooResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooResponse: ... + + +class CustomOptionFooClientMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooClientMessage: ... + + +class CustomOptionFooServerMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionFooServerMessage: ... + + +class DummyMessageContainingEnum(Message): + + class TestEnumType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> DummyMessageContainingEnum.TestEnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[DummyMessageContainingEnum.TestEnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + DummyMessageContainingEnum.TestEnumType]]: ... + TEST_OPTION_ENUM_TYPE1: DummyMessageContainingEnum.TestEnumType + TEST_OPTION_ENUM_TYPE2: DummyMessageContainingEnum.TestEnumType + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DummyMessageContainingEnum: ... + + +class DummyMessageInvalidAsOptionType(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DummyMessageInvalidAsOptionType: ... + + +class CustomOptionMinIntegerValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionMinIntegerValues: ... + + +class CustomOptionMaxIntegerValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionMaxIntegerValues: ... + + +class CustomOptionOtherValues(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> CustomOptionOtherValues: ... + + +class SettingRealsFromPositiveInts(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SettingRealsFromPositiveInts: ... + + +class SettingRealsFromNegativeInts(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SettingRealsFromNegativeInts: ... + + +class ComplexOptionType1(Message): + foo: int + foo2: int + foo3: int + foo4: RepeatedScalarFieldContainer[int] + + def __init__(self, + foo: Optional[int] = ..., + foo2: Optional[int] = ..., + foo3: Optional[int] = ..., + foo4: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType1: ... + + +class ComplexOptionType2(Message): + + class ComplexOptionType4(Message): + waldo: int + + def __init__(self, + waldo: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> ComplexOptionType2.ComplexOptionType4: ... + baz: int + + @property + def bar(self) -> ComplexOptionType1: ... + + @property + def fred(self) -> ComplexOptionType2.ComplexOptionType4: ... + + @property + def barney( + self) -> RepeatedCompositeFieldContainer[ComplexOptionType2.ComplexOptionType4]: ... + + def __init__(self, + bar: Optional[ComplexOptionType1] = ..., + baz: Optional[int] = ..., + fred: Optional[ComplexOptionType2.ComplexOptionType4] = ..., + barney: Optional[Iterable[ComplexOptionType2.ComplexOptionType4]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType2: ... + + +class ComplexOptionType3(Message): + + class ComplexOptionType5(Message): + plugh: int + + def __init__(self, + plugh: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> ComplexOptionType3.ComplexOptionType5: ... + qux: int + + @property + def complexoptiontype5(self) -> ComplexOptionType3.ComplexOptionType5: ... + + def __init__(self, + qux: Optional[int] = ..., + complexoptiontype5: Optional[ComplexOptionType3.ComplexOptionType5] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOptionType3: ... + + +class ComplexOpt6(Message): + xyzzy: int + + def __init__(self, + xyzzy: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ComplexOpt6: ... + + +class VariousComplexOptions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> VariousComplexOptions: ... + + +class AggregateMessageSet(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessageSet: ... + + +class AggregateMessageSetElement(Message): + s: Text + + def __init__(self, + s: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessageSetElement: ... + + +class Aggregate(Message): + i: int + s: Text + + @property + def sub(self) -> Aggregate: ... + + @property + def file(self) -> FileOptions: ... + + @property + def mset(self) -> AggregateMessageSet: ... + + def __init__(self, + i: Optional[int] = ..., + s: Optional[Text] = ..., + sub: Optional[Aggregate] = ..., + file: Optional[FileOptions] = ..., + mset: Optional[AggregateMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Aggregate: ... + + +class AggregateMessage(Message): + fieldname: int + + def __init__(self, + fieldname: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> AggregateMessage: ... + + +class NestedOptionType(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NestedOptionType.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NestedOptionType.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NestedOptionType.NestedEnum]]: ... + NESTED_ENUM_VALUE: NestedOptionType.NestedEnum + + class NestedMessage(Message): + nested_field: int + + def __init__(self, + nested_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedOptionType.NestedMessage: ... + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedOptionType: ... + + +class OldOptionType(Message): + + class TestEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> OldOptionType.TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[OldOptionType.TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, OldOptionType.TestEnum]]: ... + OLD_VALUE: OldOptionType.TestEnum + value: OldOptionType.TestEnum + + def __init__(self, + value: OldOptionType.TestEnum, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OldOptionType: ... + + +class NewOptionType(Message): + + class TestEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> NewOptionType.TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[NewOptionType.TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, NewOptionType.TestEnum]]: ... + OLD_VALUE: NewOptionType.TestEnum + NEW_VALUE: NewOptionType.TestEnum + value: NewOptionType.TestEnum + + def __init__(self, + value: NewOptionType.TestEnum, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NewOptionType: ... + + +class TestMessageWithRequiredEnumOption(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageWithRequiredEnumOption: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi new file mode 100644 index 0000000..92f1914 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_pb2.pyi @@ -0,0 +1,66 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + List, + Optional, + Tuple, + cast, +) + + +class ImportEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ImportEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ImportEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ImportEnum]]: ... + + +IMPORT_FOO: ImportEnum +IMPORT_BAR: ImportEnum +IMPORT_BAZ: ImportEnum + + +class ImportEnumForMap(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ImportEnumForMap: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ImportEnumForMap]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ImportEnumForMap]]: ... + + +UNKNOWN: ImportEnumForMap +FOO: ImportEnumForMap +BAR: ImportEnumForMap + + +class ImportMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ImportMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi new file mode 100644 index 0000000..c8e13ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_import_public_pb2.pyi @@ -0,0 +1,17 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class PublicImportMessage(Message): + e: int + + def __init__(self, + e: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> PublicImportMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi new file mode 100644 index 0000000..6366320 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_pb2.pyi @@ -0,0 +1,75 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_mset_wire_format_pb2 import ( + TestMessageSet, +) +import builtins +from typing import ( + Iterable, + Optional, + Text, +) + + +class TestMessageSetContainer(Message): + + @property + def message_set(self) -> TestMessageSet: ... + + def __init__(self, + message_set: Optional[TestMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetContainer: ... + + +class TestMessageSetExtension1(Message): + i: int + + def __init__(self, + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetExtension1: ... + + +class TestMessageSetExtension2(Message): + str: Text + + def __init__(self, + bytes: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: builtins.bytes) -> TestMessageSetExtension2: ... + + +class RawMessageSet(Message): + + class Item(Message): + type_id: int + message: bytes + + def __init__(self, + type_id: int, + message: bytes, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RawMessageSet.Item: ... + + @property + def item(self) -> RepeatedCompositeFieldContainer[RawMessageSet.Item]: ... + + def __init__(self, + item: Optional[Iterable[RawMessageSet.Item]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RawMessageSet: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi new file mode 100644 index 0000000..acb24a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_mset_wire_format_pb2.pyi @@ -0,0 +1,28 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class TestMessageSet(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSet: ... + + +class TestMessageSetWireFormatContainer(Message): + + @property + def message_set(self) -> TestMessageSet: ... + + def __init__(self, + message_set: Optional[TestMessageSet] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessageSetWireFormatContainer: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi new file mode 100644 index 0000000..c02e4d3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_import_pb2.pyi @@ -0,0 +1,17 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, +) + + +class ImportNoArenaNestedMessage(Message): + d: int + + def __init__(self, + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ImportNoArenaNestedMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi new file mode 100644 index 0000000..8a25622 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_arena_pb2.pyi @@ -0,0 +1,315 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_arena_pb2 import ( + ArenaMessage, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnum, + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypes(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.OptionalGroup: ... + + class RepeatedGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.RepeatedGroup: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_import_enum: ImportEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_import_enum: RepeatedScalarFieldContainer[ImportEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + default_int32: int + default_int64: int + default_uint32: int + default_uint64: int + default_sint32: int + default_sint64: int + default_fixed32: int + default_fixed64: int + default_sfixed32: int + default_sfixed64: int + default_float: float + default_double: float + default_bool: bool + default_string: Text + default_bytes: bytes + default_nested_enum: TestAllTypes.NestedEnum + default_foreign_enum: ForeignEnum + default_import_enum: ImportEnum + default_string_piece: Text + default_cord: Text + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optionalgroup(self) -> TestAllTypes.OptionalGroup: ... + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.RepeatedGroup]: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def lazy_oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optionalgroup: Optional[TestAllTypes.OptionalGroup] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_import_enum: Optional[ImportEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_message: Optional[TestAllTypes.NestedMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeatedgroup: Optional[Iterable[TestAllTypes.RepeatedGroup]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_import_enum: Optional[Iterable[ImportEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + default_int32: Optional[int] = ..., + default_int64: Optional[int] = ..., + default_uint32: Optional[int] = ..., + default_uint64: Optional[int] = ..., + default_sint32: Optional[int] = ..., + default_sint64: Optional[int] = ..., + default_fixed32: Optional[int] = ..., + default_fixed64: Optional[int] = ..., + default_sfixed32: Optional[int] = ..., + default_sfixed64: Optional[int] = ..., + default_float: Optional[float] = ..., + default_double: Optional[float] = ..., + default_bool: Optional[bool] = ..., + default_string: Optional[Text] = ..., + default_bytes: Optional[bytes] = ..., + default_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + default_foreign_enum: Optional[ForeignEnum] = ..., + default_import_enum: Optional[ImportEnum] = ..., + default_string_piece: Optional[Text] = ..., + default_cord: Optional[Text] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + lazy_oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestNoArenaMessage(Message): + + @property + def arena_message(self) -> ArenaMessage: ... + + def __init__(self, + arena_message: Optional[ArenaMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNoArenaMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi new file mode 100644 index 0000000..b65863b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_no_generic_services_pb2.pyi @@ -0,0 +1,40 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + List, + Optional, + Tuple, + cast, +) + + +class TestEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestEnum]]: ... + + +FOO: TestEnum + + +class TestMessage(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi new file mode 100644 index 0000000..7f05257 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_pb2.pyi @@ -0,0 +1,1777 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportEnum, + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestEnumWithDupValue(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestEnumWithDupValue: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestEnumWithDupValue]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestEnumWithDupValue]]: ... + + +FOO1: TestEnumWithDupValue +BAR1: TestEnumWithDupValue +BAZ: TestEnumWithDupValue +FOO2: TestEnumWithDupValue +BAR2: TestEnumWithDupValue + + +class TestSparseEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestSparseEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestSparseEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestSparseEnum]]: ... + + +SPARSE_A: TestSparseEnum +SPARSE_B: TestSparseEnum +SPARSE_C: TestSparseEnum +SPARSE_D: TestSparseEnum +SPARSE_E: TestSparseEnum +SPARSE_F: TestSparseEnum +SPARSE_G: TestSparseEnum + + +class TestAllTypes(Message): + class NestedEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.OptionalGroup: ... + + class RepeatedGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.RepeatedGroup: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_import_enum: ImportEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_import_enum: RepeatedScalarFieldContainer[ImportEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + default_int32: int + default_int64: int + default_uint32: int + default_uint64: int + default_sint32: int + default_sint64: int + default_fixed32: int + default_fixed64: int + default_sfixed32: int + default_sfixed64: int + default_float: float + default_double: float + default_bool: bool + default_string: Text + default_bytes: bytes + default_nested_enum: TestAllTypes.NestedEnum + default_foreign_enum: ForeignEnum + default_import_enum: ImportEnum + default_string_piece: Text + default_cord: Text + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optionalgroup(self) -> TestAllTypes.OptionalGroup: ... + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_lazy_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.RepeatedGroup]: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optionalgroup: Optional[TestAllTypes.OptionalGroup] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_import_enum: Optional[ImportEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_lazy_message: Optional[TestAllTypes.NestedMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeatedgroup: Optional[Iterable[TestAllTypes.RepeatedGroup]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_import_enum: Optional[Iterable[ImportEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + default_int32: Optional[int] = ..., + default_int64: Optional[int] = ..., + default_uint32: Optional[int] = ..., + default_uint64: Optional[int] = ..., + default_sint32: Optional[int] = ..., + default_sint64: Optional[int] = ..., + default_fixed32: Optional[int] = ..., + default_fixed64: Optional[int] = ..., + default_sfixed32: Optional[int] = ..., + default_sfixed64: Optional[int] = ..., + default_float: Optional[float] = ..., + default_double: Optional[float] = ..., + default_bool: Optional[bool] = ..., + default_string: Optional[Text] = ..., + default_bytes: Optional[bytes] = ..., + default_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + default_foreign_enum: Optional[ForeignEnum] = ..., + default_import_enum: Optional[ImportEnum] = ..., + default_string_piece: Optional[Text] = ..., + default_cord: Optional[Text] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class NestedTestAllTypes(Message): + + @property + def child(self) -> NestedTestAllTypes: ... + + @property + def payload(self) -> TestAllTypes: ... + + @property + def repeated_child( + self) -> RepeatedCompositeFieldContainer[NestedTestAllTypes]: ... + + def __init__(self, + child: Optional[NestedTestAllTypes] = ..., + payload: Optional[TestAllTypes] = ..., + repeated_child: Optional[Iterable[NestedTestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedTestAllTypes: ... + + +class TestDeprecatedFields(Message): + deprecated_int32: int + deprecated_int32_in_oneof: int + + def __init__(self, + deprecated_int32: Optional[int] = ..., + deprecated_int32_in_oneof: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDeprecatedFields: ... + + +class TestDeprecatedMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDeprecatedMessage: ... + + +class ForeignMessage(Message): + c: int + d: int + + def __init__(self, + c: Optional[int] = ..., + d: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestReservedFields(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestReservedFields: ... + + +class TestAllExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllExtensions: ... + + +class OptionalGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OptionalGroup_extension: ... + + +class RepeatedGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> RepeatedGroup_extension: ... + + +class TestGroup(Message): + class OptionalGroup(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroup.OptionalGroup: ... + optional_foreign_enum: ForeignEnum + + @property + def optionalgroup(self) -> TestGroup.OptionalGroup: ... + + def __init__(self, + optionalgroup: Optional[TestGroup.OptionalGroup] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroup: ... + + +class TestGroupExtension(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestGroupExtension: ... + + +class TestNestedExtension(Message): + class OptionalGroup_extension(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestNestedExtension.OptionalGroup_extension: ... + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedExtension: ... + + +class TestRequired(Message): + a: int + dummy2: int + b: int + dummy4: int + dummy5: int + dummy6: int + dummy7: int + dummy8: int + dummy9: int + dummy10: int + dummy11: int + dummy12: int + dummy13: int + dummy14: int + dummy15: int + dummy16: int + dummy17: int + dummy18: int + dummy19: int + dummy20: int + dummy21: int + dummy22: int + dummy23: int + dummy24: int + dummy25: int + dummy26: int + dummy27: int + dummy28: int + dummy29: int + dummy30: int + dummy31: int + dummy32: int + c: int + + def __init__(self, + a: int, + b: int, + c: int, + dummy2: Optional[int] = ..., + dummy4: Optional[int] = ..., + dummy5: Optional[int] = ..., + dummy6: Optional[int] = ..., + dummy7: Optional[int] = ..., + dummy8: Optional[int] = ..., + dummy9: Optional[int] = ..., + dummy10: Optional[int] = ..., + dummy11: Optional[int] = ..., + dummy12: Optional[int] = ..., + dummy13: Optional[int] = ..., + dummy14: Optional[int] = ..., + dummy15: Optional[int] = ..., + dummy16: Optional[int] = ..., + dummy17: Optional[int] = ..., + dummy18: Optional[int] = ..., + dummy19: Optional[int] = ..., + dummy20: Optional[int] = ..., + dummy21: Optional[int] = ..., + dummy22: Optional[int] = ..., + dummy23: Optional[int] = ..., + dummy24: Optional[int] = ..., + dummy25: Optional[int] = ..., + dummy26: Optional[int] = ..., + dummy27: Optional[int] = ..., + dummy28: Optional[int] = ..., + dummy29: Optional[int] = ..., + dummy30: Optional[int] = ..., + dummy31: Optional[int] = ..., + dummy32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequired: ... + + +class TestRequiredForeign(Message): + dummy: int + + @property + def optional_message(self) -> TestRequired: ... + + @property + def repeated_message( + self) -> RepeatedCompositeFieldContainer[TestRequired]: ... + + def __init__(self, + optional_message: Optional[TestRequired] = ..., + repeated_message: Optional[Iterable[TestRequired]] = ..., + dummy: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredForeign: ... + + +class TestRequiredMessage(Message): + + @property + def optional_message(self) -> TestRequired: ... + + @property + def repeated_message( + self) -> RepeatedCompositeFieldContainer[TestRequired]: ... + + @property + def required_message(self) -> TestRequired: ... + + def __init__(self, + required_message: TestRequired, + optional_message: Optional[TestRequired] = ..., + repeated_message: Optional[Iterable[TestRequired]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredMessage: ... + + +class TestForeignNested(Message): + + @property + def foreign_nested(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + foreign_nested: Optional[TestAllTypes.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestForeignNested: ... + + +class TestEmptyMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessage: ... + + +class TestEmptyMessageWithExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessageWithExtensions: ... + + +class TestMultipleExtensionRanges(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMultipleExtensionRanges: ... + + +class TestReallyLargeTagNumber(Message): + a: int + bb: int + + def __init__(self, + a: Optional[int] = ..., + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestReallyLargeTagNumber: ... + + +class TestRecursiveMessage(Message): + i: int + + @property + def a(self) -> TestRecursiveMessage: ... + + def __init__(self, + a: Optional[TestRecursiveMessage] = ..., + i: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRecursiveMessage: ... + + +class TestMutualRecursionA(Message): + class SubMessage(Message): + + @property + def b(self) -> TestMutualRecursionB: ... + + def __init__(self, + b: Optional[TestMutualRecursionB] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA.SubMessage: ... + + class SubGroup(Message): + + @property + def sub_message(self) -> TestMutualRecursionA.SubMessage: ... + + @property + def not_in_this_scc(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestMutualRecursionA.SubMessage] = ..., + not_in_this_scc: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA.SubGroup: ... + + @property + def bb(self) -> TestMutualRecursionB: ... + + @property + def subgroup(self) -> TestMutualRecursionA.SubGroup: ... + + def __init__(self, + bb: Optional[TestMutualRecursionB] = ..., + subgroup: Optional[TestMutualRecursionA.SubGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionA: ... + + +class TestMutualRecursionB(Message): + optional_int32: int + + @property + def a(self) -> TestMutualRecursionA: ... + + def __init__(self, + a: Optional[TestMutualRecursionA] = ..., + optional_int32: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMutualRecursionB: ... + + +class TestIsInitialized(Message): + class SubMessage(Message): + class SubGroup(Message): + i: int + + def __init__(self, + i: int, + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestIsInitialized.SubMessage.SubGroup: ... + + @property + def subgroup(self) -> TestIsInitialized.SubMessage.SubGroup: ... + + def __init__(self, + subgroup: Optional[TestIsInitialized.SubMessage.SubGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIsInitialized.SubMessage: ... + + @property + def sub_message(self) -> TestIsInitialized.SubMessage: ... + + def __init__(self, + sub_message: Optional[TestIsInitialized.SubMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestIsInitialized: ... + + +class TestDupFieldNumber(Message): + class Foo(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber.Foo: ... + + class Bar(Message): + a: int + + def __init__(self, + a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber.Bar: ... + a: int + + @property + def foo(self) -> TestDupFieldNumber.Foo: ... + + @property + def bar(self) -> TestDupFieldNumber.Bar: ... + + def __init__(self, + a: Optional[int] = ..., + foo: Optional[TestDupFieldNumber.Foo] = ..., + bar: Optional[TestDupFieldNumber.Bar] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDupFieldNumber: ... + + +class TestEagerMessage(Message): + + @property + def sub_message(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEagerMessage: ... + + +class TestLazyMessage(Message): + + @property + def sub_message(self) -> TestAllTypes: ... + + def __init__(self, + sub_message: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestLazyMessage: ... + + +class TestNestedMessageHasBits(Message): + class NestedMessage(Message): + nestedmessage_repeated_int32: RepeatedScalarFieldContainer[int] + + @property + def nestedmessage_repeated_foreignmessage( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + def __init__(self, + nestedmessage_repeated_int32: Optional[Iterable[int]] = ..., + nestedmessage_repeated_foreignmessage: Optional[Iterable[ForeignMessage]] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestNestedMessageHasBits.NestedMessage: ... + + @property + def optional_nested_message( + self) -> TestNestedMessageHasBits.NestedMessage: ... + + def __init__(self, + optional_nested_message: Optional[TestNestedMessageHasBits.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMessageHasBits: ... + + +class TestCamelCaseFieldNames(Message): + PrimitiveField: int + StringField: Text + EnumField: ForeignEnum + StringPieceField: Text + CordField: Text + RepeatedPrimitiveField: RepeatedScalarFieldContainer[int] + RepeatedStringField: RepeatedScalarFieldContainer[Text] + RepeatedEnumField: RepeatedScalarFieldContainer[ForeignEnum] + RepeatedStringPieceField: RepeatedScalarFieldContainer[Text] + RepeatedCordField: RepeatedScalarFieldContainer[Text] + + @property + def MessageField(self) -> ForeignMessage: ... + + @property + def RepeatedMessageField( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + def __init__(self, + PrimitiveField: Optional[int] = ..., + StringField: Optional[Text] = ..., + EnumField: Optional[ForeignEnum] = ..., + MessageField: Optional[ForeignMessage] = ..., + StringPieceField: Optional[Text] = ..., + CordField: Optional[Text] = ..., + RepeatedPrimitiveField: Optional[Iterable[int]] = ..., + RepeatedStringField: Optional[Iterable[Text]] = ..., + RepeatedEnumField: Optional[Iterable[ForeignEnum]] = ..., + RepeatedMessageField: Optional[Iterable[ForeignMessage]] = ..., + RepeatedStringPieceField: Optional[Iterable[Text]] = ..., + RepeatedCordField: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCamelCaseFieldNames: ... + + +class TestFieldOrderings(Message): + class NestedMessage(Message): + oo: int + bb: int + + def __init__(self, + oo: Optional[int] = ..., + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldOrderings.NestedMessage: ... + my_string: Text + my_int: int + my_float: float + + @property + def optional_nested_message(self) -> TestFieldOrderings.NestedMessage: ... + + def __init__(self, + my_string: Optional[Text] = ..., + my_int: Optional[int] = ..., + my_float: Optional[float] = ..., + optional_nested_message: Optional[TestFieldOrderings.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldOrderings: ... + + +class TestExtensionOrderings1(Message): + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionOrderings1: ... + + +class TestExtensionOrderings2(Message): + class TestExtensionOrderings3(Message): + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestExtensionOrderings2.TestExtensionOrderings3: ... + my_string: Text + + def __init__(self, + my_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionOrderings2: ... + + +class TestExtremeDefaultValues(Message): + escaped_bytes: bytes + large_uint32: int + large_uint64: int + small_int32: int + small_int64: int + really_small_int32: int + really_small_int64: int + utf8_string: Text + zero_float: float + one_float: float + small_float: float + negative_one_float: float + negative_float: float + large_float: float + small_negative_float: float + inf_double: float + neg_inf_double: float + nan_double: float + inf_float: float + neg_inf_float: float + nan_float: float + cpp_trigraph: Text + string_with_zero: Text + bytes_with_zero: bytes + string_piece_with_zero: Text + cord_with_zero: Text + replacement_string: Text + + def __init__(self, + escaped_bytes: Optional[bytes] = ..., + large_uint32: Optional[int] = ..., + large_uint64: Optional[int] = ..., + small_int32: Optional[int] = ..., + small_int64: Optional[int] = ..., + really_small_int32: Optional[int] = ..., + really_small_int64: Optional[int] = ..., + utf8_string: Optional[Text] = ..., + zero_float: Optional[float] = ..., + one_float: Optional[float] = ..., + small_float: Optional[float] = ..., + negative_one_float: Optional[float] = ..., + negative_float: Optional[float] = ..., + large_float: Optional[float] = ..., + small_negative_float: Optional[float] = ..., + inf_double: Optional[float] = ..., + neg_inf_double: Optional[float] = ..., + nan_double: Optional[float] = ..., + inf_float: Optional[float] = ..., + neg_inf_float: Optional[float] = ..., + nan_float: Optional[float] = ..., + cpp_trigraph: Optional[Text] = ..., + string_with_zero: Optional[Text] = ..., + bytes_with_zero: Optional[bytes] = ..., + string_piece_with_zero: Optional[Text] = ..., + cord_with_zero: Optional[Text] = ..., + replacement_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtremeDefaultValues: ... + + +class SparseEnumMessage(Message): + sparse_enum: TestSparseEnum + + def __init__(self, + sparse_enum: Optional[TestSparseEnum] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> SparseEnumMessage: ... + + +class OneString(Message): + data: Text + + def __init__(self, + data: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneString: ... + + +class MoreString(Message): + data: RepeatedScalarFieldContainer[Text] + + def __init__(self, + data: Optional[Iterable[Text]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MoreString: ... + + +class OneBytes(Message): + data: bytes + + def __init__(self, + data: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> OneBytes: ... + + +class MoreBytes(Message): + data: RepeatedScalarFieldContainer[bytes] + + def __init__(self, + data: Optional[Iterable[bytes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MoreBytes: ... + + +class Int32Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int32Message: ... + + +class Uint32Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Uint32Message: ... + + +class Int64Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int64Message: ... + + +class Uint64Message(Message): + data: int + + def __init__(self, + data: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Uint64Message: ... + + +class BoolMessage(Message): + data: bool + + def __init__(self, + data: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BoolMessage: ... + + +class TestOneof(Message): + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof.FooGroup: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestAllTypes: ... + + @property + def foogroup(self) -> TestOneof.FooGroup: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestAllTypes] = ..., + foogroup: Optional[TestOneof.FooGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof: ... + + +class TestOneofBackwardsCompatible(Message): + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestOneofBackwardsCompatible.FooGroup: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestAllTypes: ... + + @property + def foogroup(self) -> TestOneofBackwardsCompatible.FooGroup: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestAllTypes] = ..., + foogroup: Optional[TestOneofBackwardsCompatible.FooGroup] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneofBackwardsCompatible: ... + + +class TestOneof2(Message): + class NestedEnum(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestOneof2.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestOneof2.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestOneof2.NestedEnum]]: ... + FOO: TestOneof2.NestedEnum + BAR: TestOneof2.NestedEnum + BAZ: TestOneof2.NestedEnum + + class FooGroup(Message): + a: int + b: Text + + def __init__(self, + a: Optional[int] = ..., + b: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2.FooGroup: ... + + class NestedMessage(Message): + qux_int: int + corge_int: RepeatedScalarFieldContainer[int] + + def __init__(self, + qux_int: Optional[int] = ..., + corge_int: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2.NestedMessage: ... + foo_int: int + foo_string: Text + foo_cord: Text + foo_string_piece: Text + foo_bytes: bytes + foo_enum: TestOneof2.NestedEnum + bar_int: int + bar_string: Text + bar_cord: Text + bar_string_piece: Text + bar_bytes: bytes + bar_enum: TestOneof2.NestedEnum + baz_int: int + baz_string: Text + + @property + def foo_message(self) -> TestOneof2.NestedMessage: ... + + @property + def foogroup(self) -> TestOneof2.FooGroup: ... + + @property + def foo_lazy_message(self) -> TestOneof2.NestedMessage: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_cord: Optional[Text] = ..., + foo_string_piece: Optional[Text] = ..., + foo_bytes: Optional[bytes] = ..., + foo_enum: Optional[TestOneof2.NestedEnum] = ..., + foo_message: Optional[TestOneof2.NestedMessage] = ..., + foogroup: Optional[TestOneof2.FooGroup] = ..., + foo_lazy_message: Optional[TestOneof2.NestedMessage] = ..., + bar_int: Optional[int] = ..., + bar_string: Optional[Text] = ..., + bar_cord: Optional[Text] = ..., + bar_string_piece: Optional[Text] = ..., + bar_bytes: Optional[bytes] = ..., + bar_enum: Optional[TestOneof2.NestedEnum] = ..., + baz_int: Optional[int] = ..., + baz_string: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof2: ... + + +class TestRequiredOneof(Message): + class NestedMessage(Message): + required_double: float + + def __init__(self, + required_double: float, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredOneof.NestedMessage: ... + foo_int: int + foo_string: Text + + @property + def foo_message(self) -> TestRequiredOneof.NestedMessage: ... + + def __init__(self, + foo_int: Optional[int] = ..., + foo_string: Optional[Text] = ..., + foo_message: Optional[TestRequiredOneof.NestedMessage] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRequiredOneof: ... + + +class TestPackedTypes(Message): + packed_int32: RepeatedScalarFieldContainer[int] + packed_int64: RepeatedScalarFieldContainer[int] + packed_uint32: RepeatedScalarFieldContainer[int] + packed_uint64: RepeatedScalarFieldContainer[int] + packed_sint32: RepeatedScalarFieldContainer[int] + packed_sint64: RepeatedScalarFieldContainer[int] + packed_fixed32: RepeatedScalarFieldContainer[int] + packed_fixed64: RepeatedScalarFieldContainer[int] + packed_sfixed32: RepeatedScalarFieldContainer[int] + packed_sfixed64: RepeatedScalarFieldContainer[int] + packed_float: RepeatedScalarFieldContainer[float] + packed_double: RepeatedScalarFieldContainer[float] + packed_bool: RepeatedScalarFieldContainer[bool] + packed_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + packed_int32: Optional[Iterable[int]] = ..., + packed_int64: Optional[Iterable[int]] = ..., + packed_uint32: Optional[Iterable[int]] = ..., + packed_uint64: Optional[Iterable[int]] = ..., + packed_sint32: Optional[Iterable[int]] = ..., + packed_sint64: Optional[Iterable[int]] = ..., + packed_fixed32: Optional[Iterable[int]] = ..., + packed_fixed64: Optional[Iterable[int]] = ..., + packed_sfixed32: Optional[Iterable[int]] = ..., + packed_sfixed64: Optional[Iterable[int]] = ..., + packed_float: Optional[Iterable[float]] = ..., + packed_double: Optional[Iterable[float]] = ..., + packed_bool: Optional[Iterable[bool]] = ..., + packed_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedTypes: ... + + +class TestUnpackedTypes(Message): + unpacked_int32: RepeatedScalarFieldContainer[int] + unpacked_int64: RepeatedScalarFieldContainer[int] + unpacked_uint32: RepeatedScalarFieldContainer[int] + unpacked_uint64: RepeatedScalarFieldContainer[int] + unpacked_sint32: RepeatedScalarFieldContainer[int] + unpacked_sint64: RepeatedScalarFieldContainer[int] + unpacked_fixed32: RepeatedScalarFieldContainer[int] + unpacked_fixed64: RepeatedScalarFieldContainer[int] + unpacked_sfixed32: RepeatedScalarFieldContainer[int] + unpacked_sfixed64: RepeatedScalarFieldContainer[int] + unpacked_float: RepeatedScalarFieldContainer[float] + unpacked_double: RepeatedScalarFieldContainer[float] + unpacked_bool: RepeatedScalarFieldContainer[bool] + unpacked_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + unpacked_int32: Optional[Iterable[int]] = ..., + unpacked_int64: Optional[Iterable[int]] = ..., + unpacked_uint32: Optional[Iterable[int]] = ..., + unpacked_uint64: Optional[Iterable[int]] = ..., + unpacked_sint32: Optional[Iterable[int]] = ..., + unpacked_sint64: Optional[Iterable[int]] = ..., + unpacked_fixed32: Optional[Iterable[int]] = ..., + unpacked_fixed64: Optional[Iterable[int]] = ..., + unpacked_sfixed32: Optional[Iterable[int]] = ..., + unpacked_sfixed64: Optional[Iterable[int]] = ..., + unpacked_float: Optional[Iterable[float]] = ..., + unpacked_double: Optional[Iterable[float]] = ..., + unpacked_bool: Optional[Iterable[bool]] = ..., + unpacked_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedTypes: ... + + +class TestPackedExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedExtensions: ... + + +class TestUnpackedExtensions(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedExtensions: ... + + +class TestDynamicExtensions(Message): + class DynamicEnumType(int): + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestDynamicExtensions.DynamicEnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestDynamicExtensions.DynamicEnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, + TestDynamicExtensions.DynamicEnumType]]: ... + DYNAMIC_FOO: TestDynamicExtensions.DynamicEnumType + DYNAMIC_BAR: TestDynamicExtensions.DynamicEnumType + DYNAMIC_BAZ: TestDynamicExtensions.DynamicEnumType + + class DynamicMessageType(Message): + dynamic_field: int + + def __init__(self, + dynamic_field: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestDynamicExtensions.DynamicMessageType: ... + scalar_extension: int + enum_extension: ForeignEnum + dynamic_enum_extension: TestDynamicExtensions.DynamicEnumType + repeated_extension: RepeatedScalarFieldContainer[Text] + packed_extension: RepeatedScalarFieldContainer[int] + + @property + def message_extension(self) -> ForeignMessage: ... + + @property + def dynamic_message_extension( + self) -> TestDynamicExtensions.DynamicMessageType: ... + + def __init__(self, + scalar_extension: Optional[int] = ..., + enum_extension: Optional[ForeignEnum] = ..., + dynamic_enum_extension: Optional[TestDynamicExtensions.DynamicEnumType] = ..., + message_extension: Optional[ForeignMessage] = ..., + dynamic_message_extension: Optional[TestDynamicExtensions.DynamicMessageType] = ..., + repeated_extension: Optional[Iterable[Text]] = ..., + packed_extension: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDynamicExtensions: ... + + +class TestRepeatedScalarDifferentTagSizes(Message): + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_uint64: RepeatedScalarFieldContainer[int] + + def __init__(self, + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestRepeatedScalarDifferentTagSizes: ... + + +class TestParsingMerge(Message): + class RepeatedFieldsGenerator(Message): + class Group1(Message): + + @property + def field1(self) -> TestAllTypes: ... + + def __init__(self, + field1: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator.Group1: ... + + class Group2(Message): + + @property + def field1(self) -> TestAllTypes: ... + + def __init__(self, + field1: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator.Group2: ... + + @property + def field1(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def field2(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def field3(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def group1( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedFieldsGenerator.Group1]: ... + + @property + def group2( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedFieldsGenerator.Group2]: ... + + @property + def ext1(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def ext2(self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + def __init__(self, + field1: Optional[Iterable[TestAllTypes]] = ..., + field2: Optional[Iterable[TestAllTypes]] = ..., + field3: Optional[Iterable[TestAllTypes]] = ..., + group1: Optional[Iterable[TestParsingMerge.RepeatedFieldsGenerator.Group1]] = ..., + group2: Optional[Iterable[TestParsingMerge.RepeatedFieldsGenerator.Group2]] = ..., + ext1: Optional[Iterable[TestAllTypes]] = ..., + ext2: Optional[Iterable[TestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestParsingMerge.RepeatedFieldsGenerator: ... + + class OptionalGroup(Message): + + @property + def optional_group_all_types(self) -> TestAllTypes: ... + + def __init__(self, + optional_group_all_types: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge.OptionalGroup: ... + + class RepeatedGroup(Message): + + @property + def repeated_group_all_types(self) -> TestAllTypes: ... + + def __init__(self, + repeated_group_all_types: Optional[TestAllTypes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge.RepeatedGroup: ... + + @property + def required_all_types(self) -> TestAllTypes: ... + + @property + def optional_all_types(self) -> TestAllTypes: ... + + @property + def repeated_all_types( + self) -> RepeatedCompositeFieldContainer[TestAllTypes]: ... + + @property + def optionalgroup(self) -> TestParsingMerge.OptionalGroup: ... + + @property + def repeatedgroup( + self) -> RepeatedCompositeFieldContainer[TestParsingMerge.RepeatedGroup]: ... + + def __init__(self, + required_all_types: TestAllTypes, + optional_all_types: Optional[TestAllTypes] = ..., + repeated_all_types: Optional[Iterable[TestAllTypes]] = ..., + optionalgroup: Optional[TestParsingMerge.OptionalGroup] = ..., + repeatedgroup: Optional[Iterable[TestParsingMerge.RepeatedGroup]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestParsingMerge: ... + + +class TestCommentInjectionMessage(Message): + a: Text + + def __init__(self, + a: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCommentInjectionMessage: ... + + +class FooRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooRequest: ... + + +class FooResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooResponse: ... + + +class FooClientMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooClientMessage: ... + + +class FooServerMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FooServerMessage: ... + + +class BarRequest(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BarRequest: ... + + +class BarResponse(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BarResponse: ... + + +class TestJsonName(Message): + field_name1: int + fieldName2: int + FieldName3: int + _field_name4: int + FIELD_NAME5: int + field_name6: int + + def __init__(self, + field_name1: Optional[int] = ..., + fieldName2: Optional[int] = ..., + FieldName3: Optional[int] = ..., + _field_name4: Optional[int] = ..., + FIELD_NAME5: Optional[int] = ..., + field_name6: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestJsonName: ... + + +class TestHugeFieldNumbers(Message): + class OptionalGroup(Message): + group_a: int + + def __init__(self, + group_a: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestHugeFieldNumbers.OptionalGroup: ... + + class StringStringMapEntry(Message): + key: Text + value: Text + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString( + cls, s: bytes) -> TestHugeFieldNumbers.StringStringMapEntry: ... + optional_int32: int + fixed_32: int + repeated_int32: RepeatedScalarFieldContainer[int] + packed_int32: RepeatedScalarFieldContainer[int] + optional_enum: ForeignEnum + optional_string: Text + optional_bytes: bytes + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optional_message(self) -> ForeignMessage: ... + + @property + def optionalgroup(self) -> TestHugeFieldNumbers.OptionalGroup: ... + + @property + def string_string_map(self) -> MutableMapping[Text, Text]: ... + + @property + def oneof_test_all_types(self) -> TestAllTypes: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + fixed_32: Optional[int] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + packed_int32: Optional[Iterable[int]] = ..., + optional_enum: Optional[ForeignEnum] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_message: Optional[ForeignMessage] = ..., + optionalgroup: Optional[TestHugeFieldNumbers.OptionalGroup] = ..., + string_string_map: Optional[Mapping[Text, Text]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_test_all_types: Optional[TestAllTypes] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestHugeFieldNumbers: ... + + +class TestExtensionInsideTable(Message): + field1: int + field2: int + field3: int + field4: int + field6: int + field7: int + field8: int + field9: int + field10: int + + def __init__(self, + field1: Optional[int] = ..., + field2: Optional[int] = ..., + field3: Optional[int] = ..., + field4: Optional[int] = ..., + field6: Optional[int] = ..., + field7: Optional[int] = ..., + field8: Optional[int] = ..., + field9: Optional[int] = ..., + field10: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensionInsideTable: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi new file mode 100644 index 0000000..9464062 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/unittest_proto3_arena_pb2.pyi @@ -0,0 +1,332 @@ +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.unittest_import_pb2 import ( + ImportMessage, +) +from google.protobuf.unittest_import_public_pb2 import ( + PublicImportMessage, +) +from typing import ( + Iterable, + List, + Optional, + Text, + Tuple, + cast, +) + + +class ForeignEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> ForeignEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[ForeignEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, ForeignEnum]]: ... + + +FOREIGN_ZERO: ForeignEnum +FOREIGN_FOO: ForeignEnum +FOREIGN_BAR: ForeignEnum +FOREIGN_BAZ: ForeignEnum + + +class TestAllTypes(Message): + + class NestedEnum(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> TestAllTypes.NestedEnum: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[TestAllTypes.NestedEnum]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, TestAllTypes.NestedEnum]]: ... + ZERO: TestAllTypes.NestedEnum + FOO: TestAllTypes.NestedEnum + BAR: TestAllTypes.NestedEnum + BAZ: TestAllTypes.NestedEnum + NEG: TestAllTypes.NestedEnum + + class NestedMessage(Message): + bb: int + + def __init__(self, + bb: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes.NestedMessage: ... + optional_int32: int + optional_int64: int + optional_uint32: int + optional_uint64: int + optional_sint32: int + optional_sint64: int + optional_fixed32: int + optional_fixed64: int + optional_sfixed32: int + optional_sfixed64: int + optional_float: float + optional_double: float + optional_bool: bool + optional_string: Text + optional_bytes: bytes + optional_nested_enum: TestAllTypes.NestedEnum + optional_foreign_enum: ForeignEnum + optional_string_piece: Text + optional_cord: Text + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_string: RepeatedScalarFieldContainer[Text] + repeated_bytes: RepeatedScalarFieldContainer[bytes] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + repeated_foreign_enum: RepeatedScalarFieldContainer[ForeignEnum] + repeated_string_piece: RepeatedScalarFieldContainer[Text] + repeated_cord: RepeatedScalarFieldContainer[Text] + oneof_uint32: int + oneof_string: Text + oneof_bytes: bytes + + @property + def optional_nested_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_foreign_message(self) -> ForeignMessage: ... + + @property + def optional_import_message(self) -> ImportMessage: ... + + @property + def optional_public_import_message(self) -> PublicImportMessage: ... + + @property + def optional_lazy_message(self) -> TestAllTypes.NestedMessage: ... + + @property + def optional_lazy_import_message(self) -> ImportMessage: ... + + @property + def repeated_nested_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def repeated_foreign_message( + self) -> RepeatedCompositeFieldContainer[ForeignMessage]: ... + + @property + def repeated_import_message( + self) -> RepeatedCompositeFieldContainer[ImportMessage]: ... + + @property + def repeated_lazy_message( + self) -> RepeatedCompositeFieldContainer[TestAllTypes.NestedMessage]: ... + + @property + def oneof_nested_message(self) -> TestAllTypes.NestedMessage: ... + + def __init__(self, + optional_int32: Optional[int] = ..., + optional_int64: Optional[int] = ..., + optional_uint32: Optional[int] = ..., + optional_uint64: Optional[int] = ..., + optional_sint32: Optional[int] = ..., + optional_sint64: Optional[int] = ..., + optional_fixed32: Optional[int] = ..., + optional_fixed64: Optional[int] = ..., + optional_sfixed32: Optional[int] = ..., + optional_sfixed64: Optional[int] = ..., + optional_float: Optional[float] = ..., + optional_double: Optional[float] = ..., + optional_bool: Optional[bool] = ..., + optional_string: Optional[Text] = ..., + optional_bytes: Optional[bytes] = ..., + optional_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_foreign_message: Optional[ForeignMessage] = ..., + optional_import_message: Optional[ImportMessage] = ..., + optional_nested_enum: Optional[TestAllTypes.NestedEnum] = ..., + optional_foreign_enum: Optional[ForeignEnum] = ..., + optional_string_piece: Optional[Text] = ..., + optional_cord: Optional[Text] = ..., + optional_public_import_message: Optional[PublicImportMessage] = ..., + optional_lazy_message: Optional[TestAllTypes.NestedMessage] = ..., + optional_lazy_import_message: Optional[ImportMessage] = ..., + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_string: Optional[Iterable[Text]] = ..., + repeated_bytes: Optional[Iterable[bytes]] = ..., + repeated_nested_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + repeated_foreign_message: Optional[Iterable[ForeignMessage]] = ..., + repeated_import_message: Optional[Iterable[ImportMessage]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + repeated_foreign_enum: Optional[Iterable[ForeignEnum]] = ..., + repeated_string_piece: Optional[Iterable[Text]] = ..., + repeated_cord: Optional[Iterable[Text]] = ..., + repeated_lazy_message: Optional[Iterable[TestAllTypes.NestedMessage]] = ..., + oneof_uint32: Optional[int] = ..., + oneof_nested_message: Optional[TestAllTypes.NestedMessage] = ..., + oneof_string: Optional[Text] = ..., + oneof_bytes: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAllTypes: ... + + +class TestPackedTypes(Message): + packed_int32: RepeatedScalarFieldContainer[int] + packed_int64: RepeatedScalarFieldContainer[int] + packed_uint32: RepeatedScalarFieldContainer[int] + packed_uint64: RepeatedScalarFieldContainer[int] + packed_sint32: RepeatedScalarFieldContainer[int] + packed_sint64: RepeatedScalarFieldContainer[int] + packed_fixed32: RepeatedScalarFieldContainer[int] + packed_fixed64: RepeatedScalarFieldContainer[int] + packed_sfixed32: RepeatedScalarFieldContainer[int] + packed_sfixed64: RepeatedScalarFieldContainer[int] + packed_float: RepeatedScalarFieldContainer[float] + packed_double: RepeatedScalarFieldContainer[float] + packed_bool: RepeatedScalarFieldContainer[bool] + packed_enum: RepeatedScalarFieldContainer[ForeignEnum] + + def __init__(self, + packed_int32: Optional[Iterable[int]] = ..., + packed_int64: Optional[Iterable[int]] = ..., + packed_uint32: Optional[Iterable[int]] = ..., + packed_uint64: Optional[Iterable[int]] = ..., + packed_sint32: Optional[Iterable[int]] = ..., + packed_sint64: Optional[Iterable[int]] = ..., + packed_fixed32: Optional[Iterable[int]] = ..., + packed_fixed64: Optional[Iterable[int]] = ..., + packed_sfixed32: Optional[Iterable[int]] = ..., + packed_sfixed64: Optional[Iterable[int]] = ..., + packed_float: Optional[Iterable[float]] = ..., + packed_double: Optional[Iterable[float]] = ..., + packed_bool: Optional[Iterable[bool]] = ..., + packed_enum: Optional[Iterable[ForeignEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestPackedTypes: ... + + +class TestUnpackedTypes(Message): + repeated_int32: RepeatedScalarFieldContainer[int] + repeated_int64: RepeatedScalarFieldContainer[int] + repeated_uint32: RepeatedScalarFieldContainer[int] + repeated_uint64: RepeatedScalarFieldContainer[int] + repeated_sint32: RepeatedScalarFieldContainer[int] + repeated_sint64: RepeatedScalarFieldContainer[int] + repeated_fixed32: RepeatedScalarFieldContainer[int] + repeated_fixed64: RepeatedScalarFieldContainer[int] + repeated_sfixed32: RepeatedScalarFieldContainer[int] + repeated_sfixed64: RepeatedScalarFieldContainer[int] + repeated_float: RepeatedScalarFieldContainer[float] + repeated_double: RepeatedScalarFieldContainer[float] + repeated_bool: RepeatedScalarFieldContainer[bool] + repeated_nested_enum: RepeatedScalarFieldContainer[TestAllTypes.NestedEnum] + + def __init__(self, + repeated_int32: Optional[Iterable[int]] = ..., + repeated_int64: Optional[Iterable[int]] = ..., + repeated_uint32: Optional[Iterable[int]] = ..., + repeated_uint64: Optional[Iterable[int]] = ..., + repeated_sint32: Optional[Iterable[int]] = ..., + repeated_sint64: Optional[Iterable[int]] = ..., + repeated_fixed32: Optional[Iterable[int]] = ..., + repeated_fixed64: Optional[Iterable[int]] = ..., + repeated_sfixed32: Optional[Iterable[int]] = ..., + repeated_sfixed64: Optional[Iterable[int]] = ..., + repeated_float: Optional[Iterable[float]] = ..., + repeated_double: Optional[Iterable[float]] = ..., + repeated_bool: Optional[Iterable[bool]] = ..., + repeated_nested_enum: Optional[Iterable[TestAllTypes.NestedEnum]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestUnpackedTypes: ... + + +class NestedTestAllTypes(Message): + + @property + def child(self) -> NestedTestAllTypes: ... + + @property + def payload(self) -> TestAllTypes: ... + + @property + def repeated_child( + self) -> RepeatedCompositeFieldContainer[NestedTestAllTypes]: ... + + def __init__(self, + child: Optional[NestedTestAllTypes] = ..., + payload: Optional[TestAllTypes] = ..., + repeated_child: Optional[Iterable[NestedTestAllTypes]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> NestedTestAllTypes: ... + + +class ForeignMessage(Message): + c: int + + def __init__(self, + c: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> ForeignMessage: ... + + +class TestEmptyMessage(Message): + + def __init__(self, + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEmptyMessage: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi new file mode 100644 index 0000000..0462313 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/util/json_format_proto3_pb2.pyi @@ -0,0 +1,659 @@ +from google.protobuf.any_pb2 import ( + Any, +) +from google.protobuf.duration_pb2 import ( + Duration, +) +from google.protobuf.field_mask_pb2 import ( + FieldMask, +) +from google.protobuf.internal.containers import ( + RepeatedCompositeFieldContainer, + RepeatedScalarFieldContainer, +) +from google.protobuf.message import ( + Message, +) +from google.protobuf.struct_pb2 import ( + ListValue, + Struct, + Value, +) +from google.protobuf.timestamp_pb2 import ( + Timestamp, +) +from google.protobuf.unittest_pb2 import ( + TestAllExtensions, +) +from google.protobuf.wrappers_pb2 import ( + BoolValue, + BytesValue, + DoubleValue, + FloatValue, + Int32Value, + Int64Value, + StringValue, + UInt32Value, + UInt64Value, +) +from typing import ( + Iterable, + List, + Mapping, + MutableMapping, + Optional, + Text, + Tuple, + cast, +) + + +class EnumType(int): + + @classmethod + def Name(cls, number: int) -> bytes: ... + + @classmethod + def Value(cls, name: bytes) -> EnumType: ... + + @classmethod + def keys(cls) -> List[bytes]: ... + + @classmethod + def values(cls) -> List[EnumType]: ... + + @classmethod + def items(cls) -> List[Tuple[bytes, EnumType]]: ... + + +FOO: EnumType +BAR: EnumType + + +class MessageType(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> MessageType: ... + + +class TestMessage(Message): + bool_value: bool + int32_value: int + int64_value: int + uint32_value: int + uint64_value: int + float_value: float + double_value: float + string_value: Text + bytes_value: bytes + enum_value: EnumType + repeated_bool_value: RepeatedScalarFieldContainer[bool] + repeated_int32_value: RepeatedScalarFieldContainer[int] + repeated_int64_value: RepeatedScalarFieldContainer[int] + repeated_uint32_value: RepeatedScalarFieldContainer[int] + repeated_uint64_value: RepeatedScalarFieldContainer[int] + repeated_float_value: RepeatedScalarFieldContainer[float] + repeated_double_value: RepeatedScalarFieldContainer[float] + repeated_string_value: RepeatedScalarFieldContainer[Text] + repeated_bytes_value: RepeatedScalarFieldContainer[bytes] + repeated_enum_value: RepeatedScalarFieldContainer[EnumType] + + @property + def message_value(self) -> MessageType: ... + + @property + def repeated_message_value( + self) -> RepeatedCompositeFieldContainer[MessageType]: ... + + def __init__(self, + bool_value: Optional[bool] = ..., + int32_value: Optional[int] = ..., + int64_value: Optional[int] = ..., + uint32_value: Optional[int] = ..., + uint64_value: Optional[int] = ..., + float_value: Optional[float] = ..., + double_value: Optional[float] = ..., + string_value: Optional[Text] = ..., + bytes_value: Optional[bytes] = ..., + enum_value: Optional[EnumType] = ..., + message_value: Optional[MessageType] = ..., + repeated_bool_value: Optional[Iterable[bool]] = ..., + repeated_int32_value: Optional[Iterable[int]] = ..., + repeated_int64_value: Optional[Iterable[int]] = ..., + repeated_uint32_value: Optional[Iterable[int]] = ..., + repeated_uint64_value: Optional[Iterable[int]] = ..., + repeated_float_value: Optional[Iterable[float]] = ..., + repeated_double_value: Optional[Iterable[float]] = ..., + repeated_string_value: Optional[Iterable[Text]] = ..., + repeated_bytes_value: Optional[Iterable[bytes]] = ..., + repeated_enum_value: Optional[Iterable[EnumType]] = ..., + repeated_message_value: Optional[Iterable[MessageType]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMessage: ... + + +class TestOneof(Message): + oneof_int32_value: int + oneof_string_value: Text + oneof_bytes_value: bytes + oneof_enum_value: EnumType + + @property + def oneof_message_value(self) -> MessageType: ... + + def __init__(self, + oneof_int32_value: Optional[int] = ..., + oneof_string_value: Optional[Text] = ..., + oneof_bytes_value: Optional[bytes] = ..., + oneof_enum_value: Optional[EnumType] = ..., + oneof_message_value: Optional[MessageType] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestOneof: ... + + +class TestMap(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.BoolMapEntry: ... + + class Int32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Int32MapEntry: ... + + class Int64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Int64MapEntry: ... + + class Uint32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Uint32MapEntry: ... + + class Uint64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.Uint64MapEntry: ... + + class StringMapEntry(Message): + key: Text + value: int + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap.StringMapEntry: ... + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + @property + def int32_map(self) -> MutableMapping[int, int]: ... + + @property + def int64_map(self) -> MutableMapping[int, int]: ... + + @property + def uint32_map(self) -> MutableMapping[int, int]: ... + + @property + def uint64_map(self) -> MutableMapping[int, int]: ... + + @property + def string_map(self) -> MutableMapping[Text, int]: ... + + def __init__(self, + bool_map: Optional[Mapping[bool, int]] = ..., + int32_map: Optional[Mapping[int, int]] = ..., + int64_map: Optional[Mapping[int, int]] = ..., + uint32_map: Optional[Mapping[int, int]] = ..., + uint64_map: Optional[Mapping[int, int]] = ..., + string_map: Optional[Mapping[Text, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestMap: ... + + +class TestNestedMap(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.BoolMapEntry: ... + + class Int32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Int32MapEntry: ... + + class Int64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Int64MapEntry: ... + + class Uint32MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Uint32MapEntry: ... + + class Uint64MapEntry(Message): + key: int + value: int + + def __init__(self, + key: Optional[int] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.Uint64MapEntry: ... + + class StringMapEntry(Message): + key: Text + value: int + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.StringMapEntry: ... + + class MapMapEntry(Message): + key: Text + + @property + def value(self) -> TestNestedMap: ... + + def __init__(self, + key: Optional[Text] = ..., + value: Optional[TestNestedMap] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap.MapMapEntry: ... + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + @property + def int32_map(self) -> MutableMapping[int, int]: ... + + @property + def int64_map(self) -> MutableMapping[int, int]: ... + + @property + def uint32_map(self) -> MutableMapping[int, int]: ... + + @property + def uint64_map(self) -> MutableMapping[int, int]: ... + + @property + def string_map(self) -> MutableMapping[Text, int]: ... + + @property + def map_map(self) -> MutableMapping[Text, TestNestedMap]: ... + + def __init__(self, + bool_map: Optional[Mapping[bool, int]] = ..., + int32_map: Optional[Mapping[int, int]] = ..., + int64_map: Optional[Mapping[int, int]] = ..., + uint32_map: Optional[Mapping[int, int]] = ..., + uint64_map: Optional[Mapping[int, int]] = ..., + string_map: Optional[Mapping[Text, int]] = ..., + map_map: Optional[Mapping[Text, TestNestedMap]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestNestedMap: ... + + +class TestWrapper(Message): + + @property + def bool_value(self) -> BoolValue: ... + + @property + def int32_value(self) -> Int32Value: ... + + @property + def int64_value(self) -> Int64Value: ... + + @property + def uint32_value(self) -> UInt32Value: ... + + @property + def uint64_value(self) -> UInt64Value: ... + + @property + def float_value(self) -> FloatValue: ... + + @property + def double_value(self) -> DoubleValue: ... + + @property + def string_value(self) -> StringValue: ... + + @property + def bytes_value(self) -> BytesValue: ... + + @property + def repeated_bool_value( + self) -> RepeatedCompositeFieldContainer[BoolValue]: ... + + @property + def repeated_int32_value( + self) -> RepeatedCompositeFieldContainer[Int32Value]: ... + + @property + def repeated_int64_value( + self) -> RepeatedCompositeFieldContainer[Int64Value]: ... + + @property + def repeated_uint32_value( + self) -> RepeatedCompositeFieldContainer[UInt32Value]: ... + + @property + def repeated_uint64_value( + self) -> RepeatedCompositeFieldContainer[UInt64Value]: ... + + @property + def repeated_float_value( + self) -> RepeatedCompositeFieldContainer[FloatValue]: ... + + @property + def repeated_double_value( + self) -> RepeatedCompositeFieldContainer[DoubleValue]: ... + + @property + def repeated_string_value( + self) -> RepeatedCompositeFieldContainer[StringValue]: ... + + @property + def repeated_bytes_value( + self) -> RepeatedCompositeFieldContainer[BytesValue]: ... + + def __init__(self, + bool_value: Optional[BoolValue] = ..., + int32_value: Optional[Int32Value] = ..., + int64_value: Optional[Int64Value] = ..., + uint32_value: Optional[UInt32Value] = ..., + uint64_value: Optional[UInt64Value] = ..., + float_value: Optional[FloatValue] = ..., + double_value: Optional[DoubleValue] = ..., + string_value: Optional[StringValue] = ..., + bytes_value: Optional[BytesValue] = ..., + repeated_bool_value: Optional[Iterable[BoolValue]] = ..., + repeated_int32_value: Optional[Iterable[Int32Value]] = ..., + repeated_int64_value: Optional[Iterable[Int64Value]] = ..., + repeated_uint32_value: Optional[Iterable[UInt32Value]] = ..., + repeated_uint64_value: Optional[Iterable[UInt64Value]] = ..., + repeated_float_value: Optional[Iterable[FloatValue]] = ..., + repeated_double_value: Optional[Iterable[DoubleValue]] = ..., + repeated_string_value: Optional[Iterable[StringValue]] = ..., + repeated_bytes_value: Optional[Iterable[BytesValue]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestWrapper: ... + + +class TestTimestamp(Message): + + @property + def value(self) -> Timestamp: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Timestamp]: ... + + def __init__(self, + value: Optional[Timestamp] = ..., + repeated_value: Optional[Iterable[Timestamp]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestTimestamp: ... + + +class TestDuration(Message): + + @property + def value(self) -> Duration: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Duration]: ... + + def __init__(self, + value: Optional[Duration] = ..., + repeated_value: Optional[Iterable[Duration]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestDuration: ... + + +class TestFieldMask(Message): + + @property + def value(self) -> FieldMask: ... + + def __init__(self, + value: Optional[FieldMask] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestFieldMask: ... + + +class TestStruct(Message): + + @property + def value(self) -> Struct: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Struct]: ... + + def __init__(self, + value: Optional[Struct] = ..., + repeated_value: Optional[Iterable[Struct]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestStruct: ... + + +class TestAny(Message): + + @property + def value(self) -> Any: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Any]: ... + + def __init__(self, + value: Optional[Any] = ..., + repeated_value: Optional[Iterable[Any]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestAny: ... + + +class TestValue(Message): + + @property + def value(self) -> Value: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[Value]: ... + + def __init__(self, + value: Optional[Value] = ..., + repeated_value: Optional[Iterable[Value]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestValue: ... + + +class TestListValue(Message): + + @property + def value(self) -> ListValue: ... + + @property + def repeated_value(self) -> RepeatedCompositeFieldContainer[ListValue]: ... + + def __init__(self, + value: Optional[ListValue] = ..., + repeated_value: Optional[Iterable[ListValue]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestListValue: ... + + +class TestBoolValue(Message): + + class BoolMapEntry(Message): + key: bool + value: int + + def __init__(self, + key: Optional[bool] = ..., + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestBoolValue.BoolMapEntry: ... + bool_value: bool + + @property + def bool_map(self) -> MutableMapping[bool, int]: ... + + def __init__(self, + bool_value: Optional[bool] = ..., + bool_map: Optional[Mapping[bool, int]] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestBoolValue: ... + + +class TestCustomJsonName(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestCustomJsonName: ... + + +class TestExtensions(Message): + + @property + def extensions(self) -> TestAllExtensions: ... + + def __init__(self, + extensions: Optional[TestAllExtensions] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestExtensions: ... + + +class TestEnumValue(Message): + enum_value1: EnumType + enum_value2: EnumType + enum_value3: EnumType + + def __init__(self, + enum_value1: Optional[EnumType] = ..., + enum_value2: Optional[EnumType] = ..., + enum_value3: Optional[EnumType] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> TestEnumValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi new file mode 100644 index 0000000..6ff865d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/google/protobuf/wrappers_pb2.pyi @@ -0,0 +1,106 @@ +from google.protobuf.message import ( + Message, +) +from typing import ( + Optional, + Text, +) + + +class DoubleValue(Message): + value: float + + def __init__(self, + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> DoubleValue: ... + + +class FloatValue(Message): + value: float + + def __init__(self, + value: Optional[float] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> FloatValue: ... + + +class Int64Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int64Value: ... + + +class UInt64Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UInt64Value: ... + + +class Int32Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> Int32Value: ... + + +class UInt32Value(Message): + value: int + + def __init__(self, + value: Optional[int] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> UInt32Value: ... + + +class BoolValue(Message): + value: bool + + def __init__(self, + value: Optional[bool] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BoolValue: ... + + +class StringValue(Message): + value: Text + + def __init__(self, + value: Optional[Text] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> StringValue: ... + + +class BytesValue(Message): + value: bytes + + def __init__(self, + value: Optional[bytes] = ..., + ) -> None: ... + + @classmethod + def FromString(cls, s: bytes) -> BytesValue: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi new file mode 100644 index 0000000..32bbf2b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/itsdangerous.pyi @@ -0,0 +1,153 @@ +from datetime import datetime +from typing import Any, Callable, IO, Mapping, MutableMapping, Optional, Tuple, Union, Text, Generator + +_serializer = Any # must be an object that has "dumps" and "loads" attributes (e.g. the json module) + +def want_bytes(s: Union[Text, bytes], encoding: Text = ..., errors: Text = ...) -> bytes: ... + +class BadData(Exception): + message: str + def __init__(self, message: str) -> None: ... + +class BadPayload(BadData): + original_error: Optional[Exception] + def __init__(self, message: str, original_error: Optional[Exception] = ...) -> None: ... + +class BadSignature(BadData): + payload: Optional[Any] + def __init__(self, message: str, payload: Optional[Any] = ...) -> None: ... + +class BadTimeSignature(BadSignature): + date_signed: Optional[int] + def __init__(self, message: str, payload: Optional[Any] = ..., date_signed: Optional[int] = ...) -> None: ... + +class BadHeader(BadSignature): + header: Any + original_error: Any + def __init__(self, message, payload: Optional[Any] = ..., header: Optional[Any] = ..., original_error: Optional[Any] = ...) -> None: ... + +class SignatureExpired(BadTimeSignature): ... + +def base64_encode(string: Union[Text, bytes]) -> bytes: ... +def base64_decode(string: Union[Text, bytes]) -> bytes: ... + +class SigningAlgorithm(object): + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + def verify_signature(self, key: bytes, value: bytes, sig: bytes) -> bool: ... + +class NoneAlgorithm(SigningAlgorithm): + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + +class HMACAlgorithm(SigningAlgorithm): + default_digest_method: Callable + digest_method: Callable + def __init__(self, digest_method: Optional[Callable] = ...) -> None: ... + def get_signature(self, key: bytes, value: bytes) -> bytes: ... + +class Signer(object): + default_digest_method: Callable = ... + default_key_derivation: str = ... + + secret_key: bytes + sep: bytes + salt: Union[Text, bytes] + key_derivation: str + digest_method: Callable + algorithm: SigningAlgorithm + + def __init__(self, + secret_key: Union[Text, bytes], + salt: Optional[Union[Text, bytes]] = ..., + sep: Optional[Union[Text, bytes]] = ..., + key_derivation: Optional[str] = ..., + digest_method: Optional[Callable] = ..., + algorithm: Optional[SigningAlgorithm] = ...) -> None: ... + def derive_key(self) -> bytes: ... + def get_signature(self, value: Union[Text, bytes]) -> bytes: ... + def sign(self, value: Union[Text, bytes]) -> bytes: ... + def verify_signature(self, value: bytes, sig: Union[Text, bytes]) -> bool: ... + def unsign(self, signed_value: Union[Text, bytes]) -> bytes: ... + def validate(self, signed_value: Union[Text, bytes]) -> bool: ... + +class TimestampSigner(Signer): + def get_timestamp(self) -> int: ... + def timestamp_to_datetime(self, ts: float) -> datetime: ... + def sign(self, value: Union[Text, bytes]) -> bytes: ... + def unsign(self, value: Union[Text, bytes], max_age: Optional[int] = ..., + return_timestamp: bool = ...) -> Any: ... # morally -> Union[bytes, Tuple[bytes, datetime]] + def validate(self, signed_value: Union[Text, bytes], max_age: Optional[int] = ...) -> bool: ... + +class Serializer(object): + default_serializer: _serializer = ... + default_signer: Callable[..., Signer] = ... + + secret_key: bytes + salt: bytes + serializer: _serializer + is_text_serializer: bool + signer: Callable[..., Signer] + signer_kwargs: MutableMapping[str, Any] + + def __init__(self, secret_key: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ...) -> None: ... + def load_payload(self, payload: bytes, serializer: Optional[_serializer] = ...) -> Any: ... + def dump_payload(self, obj: Any) -> bytes: ... + def make_signer(self, salt: Optional[Union[Text, bytes]] = ...) -> Signer: ... + def iter_unsigners(self, salt: Optional[Union[Text, bytes]] = ...) -> Generator[Any, None, None]: ... + def dumps(self, obj: Any, salt: Optional[Union[Text, bytes]] = ...) -> Any: ... # morally -> Union[str, bytes] + def dump(self, obj: Any, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...) -> None: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ...) -> Any: ... + def load(self, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...): ... + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ...) -> Tuple[bool, Optional[Any]]: ... + def load_unsafe(self, f: IO[Any], salt: Optional[Union[Text, bytes]] = ...) -> Tuple[bool, Optional[Any]]: ... + +class TimedSerializer(Serializer): + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., max_age: Optional[int] = ..., + return_timestamp: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, datetime]] + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + max_age: Optional[int] = ...) -> Tuple[bool, Any]: ... + +class JSONWebSignatureSerializer(Serializer): + jws_algorithms: MutableMapping[Text, SigningAlgorithm] = ... + default_algorithm: Text = ... + default_serializer: Any = ... + + algorithm_name: Text + algorithm: SigningAlgorithm + + def __init__(self, secret_key: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ..., algorithm_name: Optional[Text] = ...) -> None: ... + def load_payload(self, payload: Union[Text, bytes], serializer: Optional[_serializer] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def dump_payload(self, header: Mapping[str, Any], obj: Any) -> bytes: ... # type: ignore + def make_algorithm(self, algorithm_name: Text) -> SigningAlgorithm: ... + def make_signer(self, salt: Optional[Union[Text, bytes]] = ..., algorithm: SigningAlgorithm = ...) -> Signer: ... + def make_header(self, header_fields: Optional[Mapping[str, Any]]) -> MutableMapping[str, Any]: ... + def dumps(self, obj: Any, salt: Optional[Union[Text, bytes]] = ..., + header_fields: Optional[Mapping[str, Any]] = ...) -> str: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def loads_unsafe(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Tuple[bool, Any]: ... + +class TimedJSONWebSignatureSerializer(JSONWebSignatureSerializer): + DEFAULT_EXPIRES_IN: int = ... + expires_in: int + def __init__(self, secret_key: Union[Text, bytes], expires_in: Optional[int] = ..., salt: Optional[Union[Text, bytes]] = ..., + serializer: Optional[_serializer] = ..., signer: Optional[Callable[..., Signer]] = ..., + signer_kwargs: Optional[MutableMapping[str, Any]] = ..., algorithm_name: Optional[Text] = ...) -> None: ... + def make_header(self, header_fields: Optional[Mapping[str, Any]]) -> MutableMapping[str, Any]: ... + def loads(self, s: Union[Text, bytes], salt: Optional[Union[Text, bytes]] = ..., + return_header: bool = ...) -> Any: ... # morally -> Union[Any, Tuple[Any, MutableMapping[str, Any]]] + def get_issue_date(self, header: Mapping[str, Any]) -> Optional[datetime]: ... + def now(self) -> int: ... + +class _URLSafeSerializerMixin(object): + default_serializer: _serializer = ... + def load_payload(self, payload: bytes, serializer: Optional[_serializer] = ...) -> Any: ... + def dump_payload(self, obj: Any) -> bytes: ... + +class URLSafeSerializer(_URLSafeSerializerMixin, Serializer): ... +class URLSafeTimedSerializer(_URLSafeSerializerMixin, TimedSerializer): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi new file mode 100644 index 0000000..063f73d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/__init__.pyi @@ -0,0 +1,7 @@ +from jinja2.environment import Environment as Environment, Template as Template +from jinja2.loaders import BaseLoader as BaseLoader, FileSystemLoader as FileSystemLoader, PackageLoader as PackageLoader, DictLoader as DictLoader, FunctionLoader as FunctionLoader, PrefixLoader as PrefixLoader, ChoiceLoader as ChoiceLoader, ModuleLoader as ModuleLoader +from jinja2.bccache import BytecodeCache as BytecodeCache, FileSystemBytecodeCache as FileSystemBytecodeCache, MemcachedBytecodeCache as MemcachedBytecodeCache +from jinja2.runtime import Undefined as Undefined, DebugUndefined as DebugUndefined, StrictUndefined as StrictUndefined, make_logging_undefined as make_logging_undefined +from jinja2.exceptions import TemplateError as TemplateError, UndefinedError as UndefinedError, TemplateNotFound as TemplateNotFound, TemplatesNotFound as TemplatesNotFound, TemplateSyntaxError as TemplateSyntaxError, TemplateAssertionError as TemplateAssertionError +from jinja2.filters import environmentfilter as environmentfilter, contextfilter as contextfilter, evalcontextfilter as evalcontextfilter +from jinja2.utils import Markup as Markup, escape as escape, clear_caches as clear_caches, environmentfunction as environmentfunction, evalcontextfunction as evalcontextfunction, contextfunction as contextfunction, is_undefined as is_undefined, select_autoescape as select_autoescape diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi new file mode 100644 index 0000000..1e37a7a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_compat.pyi @@ -0,0 +1,34 @@ +from typing import Any, Optional +import sys + +if sys.version_info[0] >= 3: + from io import BytesIO + from urllib.parse import quote_from_bytes as url_quote +else: + from cStringIO import StringIO as BytesIO + from urllib import quote as url_quote + +PY2: Any +PYPY: Any +unichr: Any +range_type: Any +text_type: Any +string_types: Any +integer_types: Any +iterkeys: Any +itervalues: Any +iteritems: Any +NativeStringIO: Any + +def reraise(tp, value, tb: Optional[Any] = ...): ... + +ifilter: Any +imap: Any +izip: Any +intern: Any +implements_iterator: Any +implements_to_string: Any +encode_filename: Any +get_next: Any + +def with_metaclass(meta, *bases): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi new file mode 100644 index 0000000..060f888 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/_stringdefs.pyi @@ -0,0 +1,40 @@ +from typing import Any + +Cc: str +Cf: str +Cn: str +Co: str +Cs: Any +Ll: str +Lm: str +Lo: str +Lt: str +Lu: str +Mc: str +Me: str +Mn: str +Nd: str +Nl: str +No: str +Pc: str +Pd: str +Pe: str +Pf: str +Pi: str +Po: str +Ps: str +Sc: str +Sk: str +Sm: str +So: str +Zl: str +Zp: str +Zs: str +cats: Any + +def combine(*args): ... + +xid_start: str +xid_continue: str + +def allexcept(*args): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi new file mode 100644 index 0000000..754736a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/bccache.pyi @@ -0,0 +1,44 @@ +from typing import Any, Optional + +marshal_dump: Any +marshal_load: Any +bc_version: int +bc_magic: Any + +class Bucket: + environment: Any + key: Any + checksum: Any + def __init__(self, environment, key, checksum) -> None: ... + code: Any + def reset(self): ... + def load_bytecode(self, f): ... + def write_bytecode(self, f): ... + def bytecode_from_string(self, string): ... + def bytecode_to_string(self): ... + +class BytecodeCache: + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... + def clear(self): ... + def get_cache_key(self, name, filename: Optional[Any] = ...): ... + def get_source_checksum(self, source): ... + def get_bucket(self, environment, name, filename, source): ... + def set_bucket(self, bucket): ... + +class FileSystemBytecodeCache(BytecodeCache): + directory: Any + pattern: Any + def __init__(self, directory: Optional[Any] = ..., pattern: str = ...) -> None: ... + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... + def clear(self): ... + +class MemcachedBytecodeCache(BytecodeCache): + client: Any + prefix: Any + timeout: Any + ignore_memcache_errors: Any + def __init__(self, client, prefix: str = ..., timeout: Optional[Any] = ..., ignore_memcache_errors: bool = ...) -> None: ... + def load_bytecode(self, bucket): ... + def dump_bytecode(self, bucket): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi new file mode 100644 index 0000000..7b1a537 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/compiler.pyi @@ -0,0 +1,176 @@ +from typing import Any, Optional +from keyword import iskeyword as is_python_keyword +from jinja2.visitor import NodeVisitor + +operators: Any +dict_item_iter: str + +unoptimize_before_dead_code: bool + +def generate(node, environment, name, filename, stream: Optional[Any] = ..., defer_init: bool = ...): ... +def has_safe_repr(value): ... +def find_undeclared(nodes, names): ... + +class Identifiers: + declared: Any + outer_undeclared: Any + undeclared: Any + declared_locally: Any + declared_parameter: Any + def __init__(self) -> None: ... + def add_special(self, name): ... + def is_declared(self, name): ... + def copy(self): ... + +class Frame: + eval_ctx: Any + identifiers: Any + toplevel: bool + rootlevel: bool + require_output_check: Any + buffer: Any + block: Any + assigned_names: Any + parent: Any + def __init__(self, eval_ctx, parent: Optional[Any] = ...) -> None: ... + def copy(self): ... + def inspect(self, nodes): ... + def find_shadowed(self, extra: Any = ...): ... + def inner(self): ... + def soft(self): ... + __copy__: Any + +class VisitorExit(RuntimeError): ... + +class DependencyFinderVisitor(NodeVisitor): + filters: Any + tests: Any + def __init__(self) -> None: ... + def visit_Filter(self, node): ... + def visit_Test(self, node): ... + def visit_Block(self, node): ... + +class UndeclaredNameVisitor(NodeVisitor): + names: Any + undeclared: Any + def __init__(self, names) -> None: ... + def visit_Name(self, node): ... + def visit_Block(self, node): ... + +class FrameIdentifierVisitor(NodeVisitor): + identifiers: Any + def __init__(self, identifiers) -> None: ... + def visit_Name(self, node): ... + def visit_If(self, node): ... + def visit_Macro(self, node): ... + def visit_Import(self, node): ... + def visit_FromImport(self, node): ... + def visit_Assign(self, node): ... + def visit_For(self, node): ... + def visit_CallBlock(self, node): ... + def visit_FilterBlock(self, node): ... + def visit_AssignBlock(self, node): ... + def visit_Scope(self, node): ... + def visit_Block(self, node): ... + +class CompilerExit(Exception): ... + +class CodeGenerator(NodeVisitor): + environment: Any + name: Any + filename: Any + stream: Any + created_block_context: bool + defer_init: Any + import_aliases: Any + blocks: Any + extends_so_far: int + has_known_extends: bool + code_lineno: int + tests: Any + filters: Any + debug_info: Any + def __init__(self, environment, name, filename, stream: Optional[Any] = ..., defer_init: bool = ...) -> None: ... + def fail(self, msg, lineno): ... + def temporary_identifier(self): ... + def buffer(self, frame): ... + def return_buffer_contents(self, frame): ... + def indent(self): ... + def outdent(self, step: int = ...): ... + def start_write(self, frame, node: Optional[Any] = ...): ... + def end_write(self, frame): ... + def simple_write(self, s, frame, node: Optional[Any] = ...): ... + def blockvisit(self, nodes, frame): ... + def write(self, x): ... + def writeline(self, x, node: Optional[Any] = ..., extra: int = ...): ... + def newline(self, node: Optional[Any] = ..., extra: int = ...): ... + def signature(self, node, frame, extra_kwargs: Optional[Any] = ...): ... + def pull_locals(self, frame): ... + def pull_dependencies(self, nodes): ... + def unoptimize_scope(self, frame): ... + def push_scope(self, frame, extra_vars: Any = ...): ... + def pop_scope(self, aliases, frame): ... + def function_scoping(self, node, frame, children: Optional[Any] = ..., find_special: bool = ...): ... + def macro_body(self, node, frame, children: Optional[Any] = ...): ... + def macro_def(self, node, frame): ... + def position(self, node): ... + def visit_Template(self, node, frame: Optional[Any] = ...): ... + def visit_Block(self, node, frame): ... + def visit_Extends(self, node, frame): ... + def visit_Include(self, node, frame): ... + def visit_Import(self, node, frame): ... + def visit_FromImport(self, node, frame): ... + def visit_For(self, node, frame): ... + def visit_If(self, node, frame): ... + def visit_Macro(self, node, frame): ... + def visit_CallBlock(self, node, frame): ... + def visit_FilterBlock(self, node, frame): ... + def visit_ExprStmt(self, node, frame): ... + def visit_Output(self, node, frame): ... + def make_assignment_frame(self, frame): ... + def export_assigned_vars(self, frame, assignment_frame): ... + def visit_Assign(self, node, frame): ... + def visit_AssignBlock(self, node, frame): ... + def visit_Name(self, node, frame): ... + def visit_Const(self, node, frame): ... + def visit_TemplateData(self, node, frame): ... + def visit_Tuple(self, node, frame): ... + def visit_List(self, node, frame): ... + def visit_Dict(self, node, frame): ... + def binop(self, interceptable: bool = ...): ... + def uaop(self, interceptable: bool = ...): ... + visit_Add: Any + visit_Sub: Any + visit_Mul: Any + visit_Div: Any + visit_FloorDiv: Any + visit_Pow: Any + visit_Mod: Any + visit_And: Any + visit_Or: Any + visit_Pos: Any + visit_Neg: Any + visit_Not: Any + def visit_Concat(self, node, frame): ... + def visit_Compare(self, node, frame): ... + def visit_Operand(self, node, frame): ... + def visit_Getattr(self, node, frame): ... + def visit_Getitem(self, node, frame): ... + def visit_Slice(self, node, frame): ... + def visit_Filter(self, node, frame): ... + def visit_Test(self, node, frame): ... + def visit_CondExpr(self, node, frame): ... + def visit_Call(self, node, frame, forward_caller: bool = ...): ... + def visit_Keyword(self, node, frame): ... + def visit_MarkSafe(self, node, frame): ... + def visit_MarkSafeIfAutoescape(self, node, frame): ... + def visit_EnvironmentAttribute(self, node, frame): ... + def visit_ExtensionAttribute(self, node, frame): ... + def visit_ImportedName(self, node, frame): ... + def visit_InternalName(self, node, frame): ... + def visit_ContextReference(self, node, frame): ... + def visit_Continue(self, node, frame): ... + def visit_Break(self, node, frame): ... + def visit_Scope(self, node, frame): ... + def visit_EvalContextModifier(self, node, frame): ... + def visit_ScopedEvalContextModifier(self, node, frame): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi new file mode 100644 index 0000000..55ea3ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/constants.pyi @@ -0,0 +1 @@ +LOREM_IPSUM_WORDS: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi new file mode 100644 index 0000000..f495a4d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/debug.pyi @@ -0,0 +1,37 @@ +from typing import Any, Optional + +tproxy: Any +raise_helper: str + +class TracebackFrameProxy: + tb: Any + def __init__(self, tb) -> None: ... + @property + def tb_next(self): ... + def set_next(self, next): ... + @property + def is_jinja_frame(self): ... + def __getattr__(self, name): ... + +def make_frame_proxy(frame): ... + +class ProcessedTraceback: + exc_type: Any + exc_value: Any + frames: Any + def __init__(self, exc_type, exc_value, frames) -> None: ... + def render_as_text(self, limit: Optional[Any] = ...): ... + def render_as_html(self, full: bool = ...): ... + @property + def is_template_syntax_error(self): ... + @property + def exc_info(self): ... + @property + def standard_exc_info(self): ... + +def make_traceback(exc_info, source_hint: Optional[Any] = ...): ... +def translate_syntax_error(error, source: Optional[Any] = ...): ... +def translate_exception(exc_info, initial_skip: int = ...): ... +def fake_exc_info(exc_info, filename, lineno): ... + +tb_set_next: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi new file mode 100644 index 0000000..e89d3ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/defaults.pyi @@ -0,0 +1,21 @@ +from typing import Any +from jinja2.filters import FILTERS as DEFAULT_FILTERS +from jinja2.tests import TESTS as DEFAULT_TESTS + +BLOCK_START_STRING: str +BLOCK_END_STRING: str +VARIABLE_START_STRING: str +VARIABLE_END_STRING: str +COMMENT_START_STRING: str +COMMENT_END_STRING: str +LINE_STATEMENT_PREFIX: Any +LINE_COMMENT_PREFIX: Any +TRIM_BLOCKS: bool +LSTRIP_BLOCKS: bool +NEWLINE_SEQUENCE: str +KEEP_TRAILING_NEWLINE: bool +DEFAULT_NAMESPACE: Any + +# Names in __all__ with no definition: +# DEFAULT_FILTERS +# DEFAULT_TESTS diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi new file mode 100644 index 0000000..f5997a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/environment.pyi @@ -0,0 +1,125 @@ +import sys +from typing import Any, Callable, Dict, Iterator, List, Optional, Text, Type, Union + +from .bccache import BytecodeCache +from .loaders import BaseLoader +from .runtime import Context, Undefined + +if sys.version_info >= (3, 6): + from typing import Awaitable, AsyncIterator + +def get_spontaneous_environment(*args): ... +def create_cache(size): ... +def copy_cache(cache): ... +def load_extensions(environment, extensions): ... + +class Environment: + sandboxed: bool + overlayed: bool + linked_to: Any + shared: bool + exception_handler: Any + exception_formatter: Any + code_generator_class: Any + context_class: Any + block_start_string: Text + block_end_string: Text + variable_start_string: Text + variable_end_string: Text + comment_start_string: Text + comment_end_string: Text + line_statement_prefix: Text + line_comment_prefix: Text + trim_blocks: bool + lstrip_blocks: Any + newline_sequence: Text + keep_trailing_newline: bool + undefined: Type[Undefined] + optimized: bool + finalize: Callable + autoescape: Any + filters: Any + tests: Any + globals: Dict[str, Any] + loader: BaseLoader + cache: Any + bytecode_cache: BytecodeCache + auto_reload: bool + extensions: List + def __init__(self, block_start_string: Text = ..., block_end_string: Text = ..., variable_start_string: Text = ..., variable_end_string: Text = ..., comment_start_string: Any = ..., comment_end_string: Text = ..., line_statement_prefix: Text = ..., line_comment_prefix: Text = ..., trim_blocks: bool = ..., lstrip_blocks: bool = ..., newline_sequence: Text = ..., keep_trailing_newline: bool = ..., extensions: List = ..., optimized: bool = ..., undefined: Type[Undefined] = ..., finalize: Optional[Callable] = ..., autoescape: Union[bool, Callable[[str], bool]] = ..., loader: Optional[BaseLoader] = ..., cache_size: int = ..., auto_reload: bool = ..., bytecode_cache: Optional[BytecodeCache] = ..., enable_async: bool = ...) -> None: ... + def add_extension(self, extension): ... + def extend(self, **attributes): ... + def overlay(self, block_start_string: Text = ..., block_end_string: Text = ..., variable_start_string: Text = ..., variable_end_string: Text = ..., comment_start_string: Any = ..., comment_end_string: Text = ..., line_statement_prefix: Text = ..., line_comment_prefix: Text = ..., trim_blocks: bool = ..., lstrip_blocks: bool = ..., extensions: List = ..., optimized: bool = ..., undefined: Type[Undefined] = ..., finalize: Callable = ..., autoescape: bool = ..., loader: Optional[BaseLoader] = ..., cache_size: int = ..., auto_reload: bool = ..., bytecode_cache: Optional[BytecodeCache] = ...): ... + lexer: Any + def iter_extensions(self): ... + def getitem(self, obj, argument): ... + def getattr(self, obj, attribute): ... + def call_filter(self, name, value, args: Optional[Any] = ..., kwargs: Optional[Any] = ..., context: Optional[Any] = ..., eval_ctx: Optional[Any] = ...): ... + def call_test(self, name, value, args: Optional[Any] = ..., kwargs: Optional[Any] = ...): ... + def parse(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def lex(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def preprocess(self, source: Text, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def compile(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., raw: bool = ..., defer_init: bool = ...): ... + def compile_expression(self, source: Text, undefined_to_none: bool = ...): ... + def compile_templates(self, target, extensions: Optional[Any] = ..., filter_func: Optional[Any] = ..., zip: str = ..., log_function: Optional[Any] = ..., ignore_errors: bool = ..., py_compile: bool = ...): ... + def list_templates(self, extensions: Optional[Any] = ..., filter_func: Optional[Any] = ...): ... + def handle_exception(self, exc_info: Optional[Any] = ..., rendered: bool = ..., source_hint: Optional[Any] = ...): ... + def join_path(self, template: Union[Template, Text], parent: Text) -> Text: ... + def get_template(self, name: Union[Template, Text], parent: Optional[Text] = ..., globals: Optional[Any] = ...) -> Template: ... + def select_template(self, names: List[Union[Template, Text]], parent: Optional[Text] = ..., globals: Optional[Dict[str, Any]] = ...) -> Template: ... + def get_or_select_template(self, template_name_or_list: Union[Union[Template, Text], List[Union[Template, Text]]], parent: Optional[Text] = ..., globals: Optional[Dict[str, Any]] = ...) -> Template: ... + def from_string(self, source: Text, globals: Optional[Dict[str, Any]] = ..., template_class: Optional[Type[Template]] = ...) -> Template: ... + def make_globals(self, d: Optional[Dict[str, Any]]) -> Dict[str, Any]: ... + + # Frequently added extensions are included here: + # from InternationalizationExtension: + def install_gettext_translations(self, translations: Any, newstyle: Optional[bool]): ... + def install_null_translations(self, newstyle: Optional[bool]): ... + def install_gettext_callables(self, gettext: Callable, ngettext: Callable, + newstyle: Optional[bool]): ... + def uninstall_gettext_translations(self, translations: Any): ... + def extract_translations(self, source: Any, gettext_functions: Any): ... + newstyle_gettext: bool + +class Template: + def __new__(cls, source, block_start_string: Any = ..., block_end_string: Any = ..., variable_start_string: Any = ..., variable_end_string: Any = ..., comment_start_string: Any = ..., comment_end_string: Any = ..., line_statement_prefix: Any = ..., line_comment_prefix: Any = ..., trim_blocks: Any = ..., lstrip_blocks: Any = ..., newline_sequence: Any = ..., keep_trailing_newline: Any = ..., extensions: Any = ..., optimized: bool = ..., undefined: Any = ..., finalize: Optional[Any] = ..., autoescape: bool = ...): ... + environment: Environment = ... + @classmethod + def from_code(cls, environment, code, globals, uptodate: Optional[Any] = ...): ... + @classmethod + def from_module_dict(cls, environment, module_dict, globals): ... + def render(self, *args, **kwargs) -> Text: ... + def stream(self, *args, **kwargs) -> TemplateStream: ... + def generate(self, *args, **kwargs) -> Iterator[Text]: ... + def new_context(self, vars: Optional[Dict[str, Any]] = ..., shared: bool = ..., locals: Optional[Dict[str, Any]] = ...) -> Context: ... + def make_module(self, vars: Optional[Dict[str, Any]] = ..., shared: bool = ..., locals: Optional[Dict[str, Any]] = ...) -> Context: ... + @property + def module(self) -> Any: ... + def get_corresponding_lineno(self, lineno): ... + @property + def is_up_to_date(self) -> bool: ... + @property + def debug_info(self): ... + + if sys.version_info >= (3, 6): + def render_async(self, *args, **kwargs) -> Awaitable[Text]: ... + def generate_async(self, *args, **kwargs) -> AsyncIterator[Text]: ... + + +class TemplateModule: + __name__: Any + def __init__(self, template, context) -> None: ... + def __html__(self): ... + +class TemplateExpression: + def __init__(self, template, undefined_to_none) -> None: ... + def __call__(self, *args, **kwargs): ... + +class TemplateStream: + def __init__(self, gen) -> None: ... + def dump(self, fp, encoding: Optional[Text] = ..., errors: Text = ...): ... + buffered: bool + def disable_buffering(self) -> None: ... + def enable_buffering(self, size: int = ...) -> None: ... + def __iter__(self): ... + def __next__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi new file mode 100644 index 0000000..8f6be75 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/exceptions.pyi @@ -0,0 +1,31 @@ +from typing import Any, Optional, Text + +class TemplateError(Exception): + def __init__(self, message: Optional[Text] = ...) -> None: ... + @property + def message(self): ... + def __unicode__(self): ... + +class TemplateNotFound(IOError, LookupError, TemplateError): + message: Any + name: Any + templates: Any + def __init__(self, name, message: Optional[Text] = ...) -> None: ... + +class TemplatesNotFound(TemplateNotFound): + templates: Any + def __init__(self, names: Any = ..., message: Optional[Text] = ...) -> None: ... + +class TemplateSyntaxError(TemplateError): + lineno: int + name: Text + filename: Text + source: Text + translated: bool + def __init__(self, message: Text, lineno: int, name: Optional[Text] = ..., filename: Optional[Text] = ...) -> None: ... + +class TemplateAssertionError(TemplateSyntaxError): ... +class TemplateRuntimeError(TemplateError): ... +class UndefinedError(TemplateRuntimeError): ... +class SecurityError(TemplateRuntimeError): ... +class FilterArgumentError(TemplateRuntimeError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi new file mode 100644 index 0000000..2835860 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/ext.pyi @@ -0,0 +1,58 @@ +from typing import Any, Optional + +GETTEXT_FUNCTIONS: Any + +class ExtensionRegistry(type): + def __new__(cls, name, bases, d): ... + +class Extension: + tags: Any + priority: int + environment: Any + def __init__(self, environment) -> None: ... + def bind(self, environment): ... + def preprocess(self, source, name, filename: Optional[Any] = ...): ... + def filter_stream(self, stream): ... + def parse(self, parser): ... + def attr(self, name, lineno: Optional[Any] = ...): ... + def call_method(self, name, args: Optional[Any] = ..., kwargs: Optional[Any] = ..., dyn_args: Optional[Any] = ..., dyn_kwargs: Optional[Any] = ..., lineno: Optional[Any] = ...): ... + +class InternationalizationExtension(Extension): + tags: Any + def __init__(self, environment) -> None: ... + def parse(self, parser): ... + +class ExprStmtExtension(Extension): + tags: Any + def parse(self, parser): ... + +class LoopControlExtension(Extension): + tags: Any + def parse(self, parser): ... + +class WithExtension(Extension): + tags: Any + def parse(self, parser): ... + +class AutoEscapeExtension(Extension): + tags: Any + def parse(self, parser): ... + +def extract_from_ast(node, gettext_functions: Any = ..., babel_style: bool = ...): ... + +class _CommentFinder: + tokens: Any + comment_tags: Any + offset: int + last_lineno: int + def __init__(self, tokens, comment_tags) -> None: ... + def find_backwards(self, offset): ... + def find_comments(self, lineno): ... + +def babel_extract(fileobj, keywords, comment_tags, options): ... + +i18n: Any +do: Any +loopcontrols: Any +with_: Any +autoescape: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi new file mode 100644 index 0000000..e0d9c8e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/filters.pyi @@ -0,0 +1,57 @@ +from typing import Any, Optional + +def contextfilter(f): ... +def evalcontextfilter(f): ... +def environmentfilter(f): ... +def make_attrgetter(environment, attribute): ... +def do_forceescape(value): ... +def do_urlencode(value): ... +def do_replace(eval_ctx, s, old, new, count: Optional[Any] = ...): ... +def do_upper(s): ... +def do_lower(s): ... +def do_xmlattr(_eval_ctx, d, autospace: bool = ...): ... +def do_capitalize(s): ... +def do_title(s): ... +def do_dictsort(value, case_sensitive: bool = ..., by: str = ...): ... +def do_sort(environment, value, reverse: bool = ..., case_sensitive: bool = ..., attribute: Optional[Any] = ...): ... +def do_default(value, default_value: str = ..., boolean: bool = ...): ... +def do_join(eval_ctx, value, d: str = ..., attribute: Optional[Any] = ...): ... +def do_center(value, width: int = ...): ... +def do_first(environment, seq): ... +def do_last(environment, seq): ... +def do_random(environment, seq): ... +def do_filesizeformat(value, binary: bool = ...): ... +def do_pprint(value, verbose: bool = ...): ... +def do_urlize(eval_ctx, value, trim_url_limit: Optional[Any] = ..., nofollow: bool = ..., target: Optional[Any] = ...): ... +def do_indent(s, width: int = ..., indentfirst: bool = ...): ... +def do_truncate(s, length: int = ..., killwords: bool = ..., end: str = ...): ... +def do_wordwrap(environment, s, width: int = ..., break_long_words: bool = ..., wrapstring: Optional[Any] = ...): ... +def do_wordcount(s): ... +def do_int(value, default: int = ..., base: int = ...): ... +def do_float(value, default: float = ...): ... +def do_format(value, *args, **kwargs): ... +def do_trim(value): ... +def do_striptags(value): ... +def do_slice(value, slices, fill_with: Optional[Any] = ...): ... +def do_batch(value, linecount, fill_with: Optional[Any] = ...): ... +def do_round(value, precision: int = ..., method: str = ...): ... +def do_groupby(environment, value, attribute): ... + +class _GroupTuple(tuple): + grouper: Any + list: Any + def __new__(cls, xxx_todo_changeme): ... + +def do_sum(environment, iterable, attribute: Optional[Any] = ..., start: int = ...): ... +def do_list(value): ... +def do_mark_safe(value): ... +def do_mark_unsafe(value): ... +def do_reverse(value): ... +def do_attr(environment, obj, name): ... +def do_map(*args, **kwargs): ... +def do_select(*args, **kwargs): ... +def do_reject(*args, **kwargs): ... +def do_selectattr(*args, **kwargs): ... +def do_rejectattr(*args, **kwargs): ... + +FILTERS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi new file mode 100644 index 0000000..182a2fb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/lexer.pyi @@ -0,0 +1,117 @@ +from typing import Any, Optional + +whitespace_re: Any +string_re: Any +integer_re: Any +name_re: Any +float_re: Any +newline_re: Any +TOKEN_ADD: Any +TOKEN_ASSIGN: Any +TOKEN_COLON: Any +TOKEN_COMMA: Any +TOKEN_DIV: Any +TOKEN_DOT: Any +TOKEN_EQ: Any +TOKEN_FLOORDIV: Any +TOKEN_GT: Any +TOKEN_GTEQ: Any +TOKEN_LBRACE: Any +TOKEN_LBRACKET: Any +TOKEN_LPAREN: Any +TOKEN_LT: Any +TOKEN_LTEQ: Any +TOKEN_MOD: Any +TOKEN_MUL: Any +TOKEN_NE: Any +TOKEN_PIPE: Any +TOKEN_POW: Any +TOKEN_RBRACE: Any +TOKEN_RBRACKET: Any +TOKEN_RPAREN: Any +TOKEN_SEMICOLON: Any +TOKEN_SUB: Any +TOKEN_TILDE: Any +TOKEN_WHITESPACE: Any +TOKEN_FLOAT: Any +TOKEN_INTEGER: Any +TOKEN_NAME: Any +TOKEN_STRING: Any +TOKEN_OPERATOR: Any +TOKEN_BLOCK_BEGIN: Any +TOKEN_BLOCK_END: Any +TOKEN_VARIABLE_BEGIN: Any +TOKEN_VARIABLE_END: Any +TOKEN_RAW_BEGIN: Any +TOKEN_RAW_END: Any +TOKEN_COMMENT_BEGIN: Any +TOKEN_COMMENT_END: Any +TOKEN_COMMENT: Any +TOKEN_LINESTATEMENT_BEGIN: Any +TOKEN_LINESTATEMENT_END: Any +TOKEN_LINECOMMENT_BEGIN: Any +TOKEN_LINECOMMENT_END: Any +TOKEN_LINECOMMENT: Any +TOKEN_DATA: Any +TOKEN_INITIAL: Any +TOKEN_EOF: Any +operators: Any +reverse_operators: Any +operator_re: Any +ignored_tokens: Any +ignore_if_empty: Any + +def describe_token(token): ... +def describe_token_expr(expr): ... +def count_newlines(value): ... +def compile_rules(environment): ... + +class Failure: + message: Any + error_class: Any + def __init__(self, message, cls: Any = ...) -> None: ... + def __call__(self, lineno, filename): ... + +class Token(tuple): + lineno: Any + type: Any + value: Any + def __new__(cls, lineno, type, value): ... + def test(self, expr): ... + def test_any(self, *iterable): ... + +class TokenStreamIterator: + stream: Any + def __init__(self, stream) -> None: ... + def __iter__(self): ... + def __next__(self): ... + +class TokenStream: + name: Any + filename: Any + closed: bool + current: Any + def __init__(self, generator, name, filename) -> None: ... + def __iter__(self): ... + def __bool__(self): ... + __nonzero__: Any + eos: Any + def push(self, token): ... + def look(self): ... + def skip(self, n: int = ...): ... + def next_if(self, expr): ... + def skip_if(self, expr): ... + def __next__(self): ... + def close(self): ... + def expect(self, expr): ... + +def get_lexer(environment): ... + +class Lexer: + newline_sequence: Any + keep_trailing_newline: Any + rules: Any + def __init__(self, environment) -> None: ... + def tokenize(self, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., state: Optional[Any] = ...): ... + def wrap(self, stream, name: Optional[Any] = ..., filename: Optional[Any] = ...): ... + def tokeniter(self, source, name, filename: Optional[Any] = ..., state: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi new file mode 100644 index 0000000..330de41 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/loaders.pyi @@ -0,0 +1,70 @@ +from typing import Any, Callable, Iterable, List, Optional, Text, Tuple, Union +from types import ModuleType + +from .environment import Environment + +def split_template_path(template: Text) -> List[Text]: ... + +class BaseLoader: + has_source_access: bool + def get_source(self, environment, template): ... + def list_templates(self): ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + +class FileSystemLoader(BaseLoader): + searchpath: Text + encoding: Any + followlinks: Any + def __init__(self, searchpath: Union[Text, Iterable[Text]], encoding: Text = ..., followlinks: bool = ...) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class PackageLoader(BaseLoader): + encoding: Text + manager: Any + filesystem_bound: Any + provider: Any + package_path: Any + def __init__(self, package_name: Text, package_path: Text = ..., encoding: Text = ...) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class DictLoader(BaseLoader): + mapping: Any + def __init__(self, mapping) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def list_templates(self): ... + +class FunctionLoader(BaseLoader): + load_func: Any + def __init__(self, load_func) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Optional[Text], Optional[Callable]]: ... + +class PrefixLoader(BaseLoader): + mapping: Any + delimiter: Any + def __init__(self, mapping, delimiter: str = ...) -> None: ... + def get_loader(self, template): ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + def list_templates(self): ... + +class ChoiceLoader(BaseLoader): + loaders: Any + def __init__(self, loaders) -> None: ... + def get_source(self, environment: Environment, template: Text) -> Tuple[Text, Text, Callable]: ... + def load(self, environment, name, globals: Optional[Any] = ...): ... + def list_templates(self): ... + +class _TemplateModule(ModuleType): ... + +class ModuleLoader(BaseLoader): + has_source_access: bool + module: Any + package_name: Any + def __init__(self, path) -> None: ... + @staticmethod + def get_template_key(name): ... + @staticmethod + def get_module_filename(name): ... + def load(self, environment, name, globals: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi new file mode 100644 index 0000000..46ca83b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/meta.pyi @@ -0,0 +1,11 @@ +from typing import Any +from jinja2.compiler import CodeGenerator + +class TrackingCodeGenerator(CodeGenerator): + undeclared_identifiers: Any + def __init__(self, environment) -> None: ... + def write(self, x): ... + def pull_locals(self, frame): ... + +def find_undeclared_variables(ast): ... +def find_referenced_templates(ast): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi new file mode 100644 index 0000000..4fb410d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/nodes.pyi @@ -0,0 +1,250 @@ +from typing import Any, Optional + +class Impossible(Exception): ... + +class NodeType(type): + def __new__(cls, name, bases, d): ... + +class EvalContext: + environment: Any + autoescape: Any + volatile: bool + def __init__(self, environment, template_name: Optional[Any] = ...) -> None: ... + def save(self): ... + def revert(self, old): ... + +def get_eval_context(node, ctx): ... + +class Node: + fields: Any + attributes: Any + abstract: bool + def __init__(self, *fields, **attributes) -> None: ... + def iter_fields(self, exclude: Optional[Any] = ..., only: Optional[Any] = ...): ... + def iter_child_nodes(self, exclude: Optional[Any] = ..., only: Optional[Any] = ...): ... + def find(self, node_type): ... + def find_all(self, node_type): ... + def set_ctx(self, ctx): ... + def set_lineno(self, lineno, override: bool = ...): ... + def set_environment(self, environment): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + __hash__: Any + +class Stmt(Node): + abstract: bool + +class Helper(Node): + abstract: bool + +class Template(Node): + fields: Any + +class Output(Stmt): + fields: Any + +class Extends(Stmt): + fields: Any + +class For(Stmt): + fields: Any + +class If(Stmt): + fields: Any + +class Macro(Stmt): + fields: Any + +class CallBlock(Stmt): + fields: Any + +class FilterBlock(Stmt): + fields: Any + +class Block(Stmt): + fields: Any + +class Include(Stmt): + fields: Any + +class Import(Stmt): + fields: Any + +class FromImport(Stmt): + fields: Any + +class ExprStmt(Stmt): + fields: Any + +class Assign(Stmt): + fields: Any + +class AssignBlock(Stmt): + fields: Any + +class Expr(Node): + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class BinExpr(Expr): + fields: Any + operator: Any + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class UnaryExpr(Expr): + fields: Any + operator: Any + abstract: bool + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Name(Expr): + fields: Any + def can_assign(self): ... + +class Literal(Expr): + abstract: bool + +class Const(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + @classmethod + def from_untrusted(cls, value, lineno: Optional[Any] = ..., environment: Optional[Any] = ...): ... + +class TemplateData(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Tuple(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class List(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Dict(Literal): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Pair(Helper): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Keyword(Helper): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class CondExpr(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Filter(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Test(Expr): + fields: Any + +class Call(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Getitem(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class Getattr(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + def can_assign(self): ... + +class Slice(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Concat(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Compare(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Operand(Helper): + fields: Any + +class Mul(BinExpr): + operator: str + +class Div(BinExpr): + operator: str + +class FloorDiv(BinExpr): + operator: str + +class Add(BinExpr): + operator: str + +class Sub(BinExpr): + operator: str + +class Mod(BinExpr): + operator: str + +class Pow(BinExpr): + operator: str + +class And(BinExpr): + operator: str + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Or(BinExpr): + operator: str + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class Not(UnaryExpr): + operator: str + +class Neg(UnaryExpr): + operator: str + +class Pos(UnaryExpr): + operator: str + +class EnvironmentAttribute(Expr): + fields: Any + +class ExtensionAttribute(Expr): + fields: Any + +class ImportedName(Expr): + fields: Any + +class InternalName(Expr): + fields: Any + def __init__(self) -> None: ... + +class MarkSafe(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class MarkSafeIfAutoescape(Expr): + fields: Any + def as_const(self, eval_ctx: Optional[Any] = ...): ... + +class ContextReference(Expr): ... +class Continue(Stmt): ... +class Break(Stmt): ... + +class Scope(Stmt): + fields: Any + +class EvalContextModifier(Stmt): + fields: Any + +class ScopedEvalContextModifier(EvalContextModifier): + fields: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi new file mode 100644 index 0000000..b55b08a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/optimizer.pyi @@ -0,0 +1,29 @@ +from typing import Any +from jinja2.visitor import NodeTransformer + +def optimize(node, environment): ... + +class Optimizer(NodeTransformer): + environment: Any + def __init__(self, environment) -> None: ... + def visit_If(self, node): ... + def fold(self, node): ... + visit_Add: Any + visit_Sub: Any + visit_Mul: Any + visit_Div: Any + visit_FloorDiv: Any + visit_Pow: Any + visit_Mod: Any + visit_And: Any + visit_Or: Any + visit_Pos: Any + visit_Neg: Any + visit_Not: Any + visit_Compare: Any + visit_Getitem: Any + visit_Getattr: Any + visit_Call: Any + visit_Filter: Any + visit_Test: Any + visit_CondExpr: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi new file mode 100644 index 0000000..a16ae8d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/parser.pyi @@ -0,0 +1,60 @@ +from typing import Any, Optional + +class Parser: + environment: Any + stream: Any + name: Any + filename: Any + closed: bool + extensions: Any + def __init__(self, environment, source, name: Optional[Any] = ..., filename: Optional[Any] = ..., state: Optional[Any] = ...) -> None: ... + def fail(self, msg, lineno: Optional[Any] = ..., exc: Any = ...): ... + def fail_unknown_tag(self, name, lineno: Optional[Any] = ...): ... + def fail_eof(self, end_tokens: Optional[Any] = ..., lineno: Optional[Any] = ...): ... + def is_tuple_end(self, extra_end_rules: Optional[Any] = ...): ... + def free_identifier(self, lineno: Optional[Any] = ...): ... + def parse_statement(self): ... + def parse_statements(self, end_tokens, drop_needle: bool = ...): ... + def parse_set(self): ... + def parse_for(self): ... + def parse_if(self): ... + def parse_block(self): ... + def parse_extends(self): ... + def parse_import_context(self, node, default): ... + def parse_include(self): ... + def parse_import(self): ... + def parse_from(self): ... + def parse_signature(self, node): ... + def parse_call_block(self): ... + def parse_filter_block(self): ... + def parse_macro(self): ... + def parse_print(self): ... + def parse_assign_target(self, with_tuple: bool = ..., name_only: bool = ..., extra_end_rules: Optional[Any] = ...): ... + def parse_expression(self, with_condexpr: bool = ...): ... + def parse_condexpr(self): ... + def parse_or(self): ... + def parse_and(self): ... + def parse_not(self): ... + def parse_compare(self): ... + def parse_add(self): ... + def parse_sub(self): ... + def parse_concat(self): ... + def parse_mul(self): ... + def parse_div(self): ... + def parse_floordiv(self): ... + def parse_mod(self): ... + def parse_pow(self): ... + def parse_unary(self, with_filter: bool = ...): ... + def parse_primary(self): ... + def parse_tuple(self, simplified: bool = ..., with_condexpr: bool = ..., extra_end_rules: Optional[Any] = ..., explicit_parentheses: bool = ...): ... + def parse_list(self): ... + def parse_dict(self): ... + def parse_postfix(self, node): ... + def parse_filter_expr(self, node): ... + def parse_subscript(self, node): ... + def parse_subscribed(self): ... + def parse_call(self, node): ... + def parse_filter(self, node, start_inline: bool = ...): ... + def parse_test(self, node): ... + def subparse(self, end_tokens: Optional[Any] = ...): ... + def parse(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi new file mode 100644 index 0000000..271c0ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/runtime.pyi @@ -0,0 +1,130 @@ +from typing import Any, Dict, Optional, Text, Union +from jinja2.utils import Markup as Markup, escape as escape, missing as missing, concat as concat +from jinja2.exceptions import TemplateRuntimeError as TemplateRuntimeError, TemplateNotFound as TemplateNotFound + +from jinja2.environment import Environment + +to_string: Any +identity: Any + +def markup_join(seq): ... +def unicode_join(seq): ... + +class TemplateReference: + def __init__(self, context) -> None: ... + def __getitem__(self, name): ... + +class Context: + parent: Union[Context, Dict[str, Any]] + vars: Dict[str, Any] + environment: Environment + eval_ctx: Any + exported_vars: Any + name: Text + blocks: Dict[str, Any] + def __init__(self, environment: Environment, parent: Union[Context, Dict[str, Any]], name: Text, blocks: Dict[str, Any]) -> None: ... + def super(self, name, current): ... + def get(self, key, default: Optional[Any] = ...): ... + def resolve(self, key): ... + def get_exported(self): ... + def get_all(self): ... + def call(__self, __obj, *args, **kwargs): ... + def derived(self, locals: Optional[Any] = ...): ... + keys: Any + values: Any + items: Any + iterkeys: Any + itervalues: Any + iteritems: Any + def __contains__(self, name): ... + def __getitem__(self, key): ... + +class BlockReference: + name: Any + def __init__(self, name, context, stack, depth) -> None: ... + @property + def super(self): ... + def __call__(self): ... + +class LoopContext: + index0: int + depth0: Any + def __init__(self, iterable, recurse: Optional[Any] = ..., depth0: int = ...) -> None: ... + def cycle(self, *args): ... + first: Any + last: Any + index: Any + revindex: Any + revindex0: Any + depth: Any + def __len__(self): ... + def __iter__(self): ... + def loop(self, iterable): ... + __call__: Any + @property + def length(self): ... + +class LoopContextIterator: + context: Any + def __init__(self, context) -> None: ... + def __iter__(self): ... + def __next__(self): ... + +class Macro: + name: Any + arguments: Any + defaults: Any + catch_kwargs: Any + catch_varargs: Any + caller: Any + def __init__(self, environment, func, name, arguments, defaults, catch_kwargs, catch_varargs, caller) -> None: ... + def __call__(self, *args, **kwargs): ... + +class Undefined: + def __init__(self, hint: Optional[Any] = ..., obj: Any = ..., name: Optional[Any] = ..., exc: Any = ...) -> None: ... + def __getattr__(self, name): ... + __add__: Any + __radd__: Any + __mul__: Any + __rmul__: Any + __div__: Any + __rdiv__: Any + __truediv__: Any + __rtruediv__: Any + __floordiv__: Any + __rfloordiv__: Any + __mod__: Any + __rmod__: Any + __pos__: Any + __neg__: Any + __call__: Any + __getitem__: Any + __lt__: Any + __le__: Any + __gt__: Any + __ge__: Any + __int__: Any + __float__: Any + __complex__: Any + __pow__: Any + __rpow__: Any + def __eq__(self, other): ... + def __ne__(self, other): ... + def __hash__(self): ... + def __len__(self): ... + def __iter__(self): ... + def __nonzero__(self): ... + __bool__: Any + +def make_logging_undefined(logger: Optional[Any] = ..., base: Optional[Any] = ...): ... + +class DebugUndefined(Undefined): ... + +class StrictUndefined(Undefined): + __iter__: Any + __len__: Any + __nonzero__: Any + __eq__: Any + __ne__: Any + __bool__: Any + __hash__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi new file mode 100644 index 0000000..518deca --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/sandbox.pyi @@ -0,0 +1,34 @@ +from typing import Any +from jinja2.environment import Environment + +MAX_RANGE: int +UNSAFE_FUNCTION_ATTRIBUTES: Any +UNSAFE_METHOD_ATTRIBUTES: Any +UNSAFE_GENERATOR_ATTRIBUTES: Any + +def safe_range(*args): ... +def unsafe(f): ... +def is_internal_attribute(obj, attr): ... +def modifies_known_mutable(obj, attr): ... + +class SandboxedEnvironment(Environment): + sandboxed: bool + default_binop_table: Any + default_unop_table: Any + intercepted_binops: Any + intercepted_unops: Any + def intercept_unop(self, operator): ... + binop_table: Any + unop_table: Any + def __init__(self, *args, **kwargs) -> None: ... + def is_safe_attribute(self, obj, attr, value): ... + def is_safe_callable(self, obj): ... + def call_binop(self, context, operator, left, right): ... + def call_unop(self, context, operator, arg): ... + def getitem(self, obj, argument): ... + def getattr(self, obj, attribute): ... + def unsafe_undefined(self, obj, attribute): ... + def call(__self, __context, __obj, *args, **kwargs): ... + +class ImmutableSandboxedEnvironment(SandboxedEnvironment): + def is_safe_attribute(self, obj, attr, value): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi new file mode 100644 index 0000000..2645fe9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/tests.pyi @@ -0,0 +1,24 @@ +from typing import Any + +number_re: Any +regex_type: Any +test_callable: Any + +def test_odd(value): ... +def test_even(value): ... +def test_divisibleby(value, num): ... +def test_defined(value): ... +def test_undefined(value): ... +def test_none(value): ... +def test_lower(value): ... +def test_upper(value): ... +def test_string(value): ... +def test_mapping(value): ... +def test_number(value): ... +def test_sequence(value): ... +def test_equalto(value, other): ... +def test_sameas(value, other): ... +def test_iterable(value): ... +def test_escaped(value): ... + +TESTS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi new file mode 100644 index 0000000..bf5ff83 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/utils.pyi @@ -0,0 +1,61 @@ +from typing import Any, Callable, Iterable, Optional + +from markupsafe import Markup as Markup, escape as escape, soft_unicode as soft_unicode + +missing: Any +internal_code: Any +concat: Any + +def contextfunction(f): ... +def evalcontextfunction(f): ... +def environmentfunction(f): ... +def internalcode(f): ... +def is_undefined(obj): ... +def select_autoescape(enabled_extensions: Iterable[str] = ..., disabled_extensions: Iterable[str] = ..., default_for_string: bool = ..., default: bool = ...) -> Callable[[str], bool]: ... +def consume(iterable): ... +def clear_caches(): ... +def import_string(import_name, silent: bool = ...): ... +def open_if_exists(filename, mode: str = ...): ... +def object_type_repr(obj): ... +def pformat(obj, verbose: bool = ...): ... +def urlize(text, trim_url_limit: Optional[Any] = ..., nofollow: bool = ..., target: Optional[Any] = ...): ... +def generate_lorem_ipsum(n: int = ..., html: bool = ..., min: int = ..., max: int = ...): ... +def unicode_urlencode(obj, charset: str = ..., for_qs: bool = ...): ... + +class LRUCache: + capacity: Any + def __init__(self, capacity) -> None: ... + def __getnewargs__(self): ... + def copy(self): ... + def get(self, key, default: Optional[Any] = ...): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def clear(self): ... + def __contains__(self, key): ... + def __len__(self): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def items(self): ... + def iteritems(self): ... + def values(self): ... + def itervalue(self): ... + def keys(self): ... + def iterkeys(self): ... + __iter__: Any + def __reversed__(self): ... + __copy__: Any + +class Cycler: + items: Any + def __init__(self, *items) -> None: ... + pos: int + def reset(self): ... + @property + def current(self): ... + def __next__(self): ... + +class Joiner: + sep: Any + used: bool + def __init__(self, sep: str = ...) -> None: ... + def __call__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi new file mode 100644 index 0000000..ef34328 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/jinja2/visitor.pyi @@ -0,0 +1,8 @@ +class NodeVisitor: + def get_visitor(self, node): ... + def visit(self, node, *args, **kwargs): ... + def generic_visit(self, node, *args, **kwargs): ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node, *args, **kwargs): ... + def visit_list(self, node, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi new file mode 100644 index 0000000..44d15da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/__init__.pyi @@ -0,0 +1,53 @@ +import sys + +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Text, Tuple, Union +from collections import Mapping +from markupsafe._compat import text_type +import string +from markupsafe._native import escape as escape, escape_silent as escape_silent, soft_unicode as soft_unicode + +class Markup(text_type): + def __new__(cls, base: Text = ..., encoding: Optional[Text] = ..., errors: Text = ...) -> Markup: ... + def __html__(self) -> Markup: ... + def __add__(self, other: text_type) -> Markup: ... + def __radd__(self, other: text_type) -> Markup: ... + def __mul__(self, num: int) -> Markup: ... + def __rmul__(self, num: int) -> Markup: ... + def __mod__(self, *args: Any) -> Markup: ... + def join(self, seq: Iterable[text_type]): ... + def split(self, sep: Optional[text_type] = ..., maxsplit: int = ...) -> List[text_type]: ... + def rsplit(self, sep: Optional[text_type] = ..., maxsplit: int = ...) -> List[text_type]: ... + def splitlines(self, keepends: bool = ...) -> List[text_type]: ... + def unescape(self) -> Text: ... + def striptags(self) -> Text: ... + @classmethod + def escape(cls, s: text_type) -> Markup: ... + def partition(self, sep: text_type) -> Tuple[Markup, Markup, Markup]: ... + def rpartition(self, sep: text_type) -> Tuple[Markup, Markup, Markup]: ... + def format(self, *args, **kwargs) -> Markup: ... + def __html_format__(self, format_spec) -> Markup: ... + def __getslice__(self, start: int, stop: int) -> Markup: ... + def __getitem__(self, i: Union[int, slice]) -> Markup: ... + def capitalize(self) -> Markup: ... + def title(self) -> Markup: ... + def lower(self) -> Markup: ... + def upper(self) -> Markup: ... + def swapcase(self) -> Markup: ... + def replace(self, old: text_type, new: text_type, count: int = ...) -> Markup: ... + def ljust(self, width: int, fillchar: text_type = ...) -> Markup: ... + def rjust(self, width: int, fillchar: text_type = ...) -> Markup: ... + def lstrip(self, chars: Optional[text_type] = ...) -> Markup: ... + def rstrip(self, chars: Optional[text_type] = ...) -> Markup: ... + def strip(self, chars: Optional[text_type] = ...) -> Markup: ... + def center(self, width: int, fillchar: text_type = ...) -> Markup: ... + def zfill(self, width: int) -> Markup: ... + def translate(self, table: Union[Mapping[int, Union[int, text_type, None]], Sequence[Union[int, text_type, None]]]) -> Markup: ... + def expandtabs(self, tabsize: int = ...) -> Markup: ... + +class EscapeFormatter(string.Formatter): + escape: Callable[[text_type], Markup] + def __init__(self, escape: Callable[[text_type], Markup]) -> None: ... + def format_field(self, value: text_type, format_spec: text_type) -> Markup: ... + +if sys.version_info[0] >= 3: + soft_str = soft_unicode diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi new file mode 100644 index 0000000..7257425 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_compat.pyi @@ -0,0 +1,19 @@ +import sys + +from typing import Any, Iterator, Mapping, Text, Tuple, TypeVar + +_K = TypeVar('_K') +_V = TypeVar('_V') + +PY2: bool +def iteritems(d: Mapping[_K, _V]) -> Iterator[Tuple[_K, _V]]: ... +if sys.version_info[0] >= 3: + text_type = str + string_types = str, + unichr = chr + int_types = int, +else: + from __builtin__ import unichr as unichr + text_type = unicode + string_types = (str, unicode) + int_types = (int, long) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi new file mode 100644 index 0000000..a0d67ed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_constants.pyi @@ -0,0 +1,3 @@ +from typing import Any, Dict, Text + +HTML_ENTITIES: Dict[Text, int] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi new file mode 100644 index 0000000..ecf20c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_native.pyi @@ -0,0 +1,7 @@ +from . import Markup +from ._compat import text_type, string_types +from typing import Union, Text + +def escape(s: Union[Markup, Text]) -> Markup: ... +def escape_silent(s: Union[None, Markup, Text]) -> Markup: ... +def soft_unicode(s: Text) -> text_type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi new file mode 100644 index 0000000..ecf20c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/markupsafe/_speedups.pyi @@ -0,0 +1,7 @@ +from . import Markup +from ._compat import text_type, string_types +from typing import Union, Text + +def escape(s: Union[Markup, Text]) -> Markup: ... +def escape_silent(s: Union[None, Markup, Text]) -> Markup: ... +def soft_unicode(s: Text) -> text_type: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mock.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mock.pyi new file mode 100644 index 0000000..cb3db61 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mock.pyi @@ -0,0 +1,146 @@ +# Stubs for mock + +import sys +from typing import Any, Optional, Text, Type + +FILTER_DIR: Any + +class _slotted: ... + +class _SentinelObject: + name: Any + def __init__(self, name: Any) -> None: ... + +class _Sentinel: + def __init__(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +sentinel: Any +DEFAULT: Any + +class _CallList(list): + def __contains__(self, value: Any) -> bool: ... + +class _MockIter: + obj: Any + def __init__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __next__(self) -> Any: ... + +class Base: + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + +# TODO: Defining this and other mock classes as classes in this stub causes +# many false positives with mypy and production code. See if we can +# improve mypy somehow and use a class with an "Any" base class. +NonCallableMock: Any + +class CallableMixin(Base): + side_effect: Any + def __init__(self, spec: Optional[Any] = ..., side_effect: Optional[Any] = ..., return_value: Any = ..., wraps: Optional[Any] = ..., name: Optional[Any] = ..., spec_set: Optional[Any] = ..., parent: Optional[Any] = ..., _spec_state: Optional[Any] = ..., _new_name: Any = ..., _new_parent: Optional[Any] = ..., **kwargs: Any) -> None: ... + def __call__(_mock_self, *args: Any, **kwargs: Any) -> Any: ... + +Mock: Any + +class _patch: + attribute_name: Any + getter: Any + attribute: Any + new: Any + new_callable: Any + spec: Any + create: bool + has_local: Any + spec_set: Any + autospec: Any + kwargs: Any + additional_patchers: Any + def __init__(self, getter: Any, attribute: Any, new: Any, spec: Any, create: Any, spec_set: Any, autospec: Any, new_callable: Any, kwargs: Any) -> None: ... + def copy(self) -> Any: ... + def __call__(self, func: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def decorate_callable(self, func: Any) -> Any: ... + def get_original(self) -> Any: ... + target: Any + temp_original: Any + is_local: Any + def __enter__(self) -> Any: ... + def __exit__(self, *exc_info: Any) -> Any: ... + def start(self) -> Any: ... + def stop(self) -> Any: ... + +class _patch_dict: + in_dict: Any + values: Any + clear: Any + def __init__(self, in_dict: Any, values: Any = ..., clear: Any = ..., **kwargs: Any) -> None: ... + def __call__(self, f: Any) -> Any: ... + def decorate_class(self, klass: Any) -> Any: ... + def __enter__(self) -> Any: ... + def __exit__(self, *args: Any) -> Any: ... + start: Any + stop: Any + +class _patcher: + TEST_PREFIX: str + dict: Type[_patch_dict] + def __call__(self, target: Any, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def object(self, target: Any, attribute: Text, new: Optional[Any] = ..., spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def multiple(self, target: Any, spec: Optional[Any] = ..., create: bool = ..., spec_set: Optional[Any] = ..., autospec: Optional[Any] = ..., new_callable: Optional[Any] = ..., **kwargs: Any) -> _patch: ... + def stopall(self) -> None: ... + +patch: _patcher + +class MagicMixin: + def __init__(self, *args: Any, **kw: Any) -> None: ... + +NonCallableMagicMock: Any +MagicMock: Any + +class MagicProxy: + name: Any + parent: Any + def __init__(self, name: Any, parent: Any) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def create_mock(self) -> Any: ... + def __get__(self, obj: Any, _type: Optional[Any] = ...) -> Any: ... + +class _ANY: + def __eq__(self, other: Any) -> bool: ... + def __ne__(self, other: Any) -> bool: ... + +ANY: Any + +class _Call(tuple): + def __new__(cls, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> Any: ... + name: Any + parent: Any + from_kall: Any + def __init__(self, value: Any = ..., name: Optional[Any] = ..., parent: Optional[Any] = ..., two: bool = ..., from_kall: bool = ...) -> None: ... + def __eq__(self, other: Any) -> bool: ... + __ne__: Any + def __call__(self, *args: Any, **kwargs: Any) -> Any: ... + def __getattr__(self, attr: Any) -> Any: ... + def count(self, *args: Any, **kwargs: Any) -> Any: ... + def index(self, *args: Any, **kwargs: Any) -> Any: ... + def call_list(self) -> Any: ... + +call: Any + +def create_autospec(spec: Any, spec_set: Any = ..., instance: Any = ..., _parent: Optional[Any] = ..., _name: Optional[Any] = ..., **kwargs: Any) -> Any: ... + +class _SpecState: + spec: Any + ids: Any + spec_set: Any + parent: Any + instance: Any + name: Any + def __init__(self, spec: Any, spec_set: Any = ..., parent: Optional[Any] = ..., name: Optional[Any] = ..., ids: Optional[Any] = ..., instance: Any = ...) -> None: ... + +def mock_open(mock: Optional[Any] = ..., read_data: Any = ...) -> Any: ... + +PropertyMock: Any + +if sys.version_info >= (3, 7): + def seal(mock: Any) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi new file mode 100644 index 0000000..f9c9ff6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/mypy_extensions.pyi @@ -0,0 +1,44 @@ +import abc +import sys +from typing import ( + Dict, Type, TypeVar, Optional, Union, Any, Generic, Mapping, ItemsView, KeysView, ValuesView +) + +_T = TypeVar('_T') +_U = TypeVar('_U') + +# Internal mypy fallback type for all typed dicts (does not exist at runtime) +class _TypedDict(Mapping[str, object], metaclass=abc.ABCMeta): + def copy(self: _T) -> _T: ... + # Using NoReturn so that only calls using mypy plugin hook that specialize the signature + # can go through. + def setdefault(self, k: NoReturn, default: object) -> object: ... + # Mypy plugin hook for 'pop' expects that 'default' has a type variable type. + def pop(self, k: NoReturn, default: _T = ...) -> object: ... + def update(self: _T, __m: _T) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, k: str) -> bool: ... + def viewitems(self) -> ItemsView[str, object]: ... + def viewkeys(self) -> KeysView[str]: ... + def viewvalues(self) -> ValuesView[object]: ... + def __delitem__(self, k: NoReturn) -> None: ... + +def TypedDict(typename: str, fields: Dict[str, Type[_T]], total: bool = ...) -> Type[dict]: ... + +def Arg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def DefaultArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def NamedArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def DefaultNamedArg(type: _T = ..., name: Optional[str] = ...) -> _T: ... +def VarArg(type: _T = ...) -> _T: ... +def KwArg(type: _T = ...) -> _T: ... + +# Return type that indicates a function does not return. +# This type is equivalent to the None type, but the no-op Union is necessary to +# distinguish the None type from the None value. +NoReturn = Union[None] # Deprecated: Use typing.NoReturn instead. + +# This is intended as a class decorator, but mypy rejects abstract classes +# when a Type[_T] is expected, so we can't give it the type we want +def trait(cls: Any) -> Any: ... + +class FlexibleAlias(Generic[_T, _U]): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi new file mode 100644 index 0000000..0d9da02 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pycurl.pyi @@ -0,0 +1,605 @@ +# TODO(MichalPokorny): more precise types + +from typing import Any, Tuple + +GLOBAL_ACK_EINTR: int +GLOBAL_ALL: int +GLOBAL_DEFAULT: int +GLOBAL_NOTHING: int +GLOBAL_SSL: int +GLOBAL_WIN32: int + +def global_init(option: int) -> None: ... +def global_cleanup() -> None: ... + +version: str + +def version_info() -> Tuple[int, str, int, str, int, str, + int, str, tuple, Any, int, Any]: ... + +class error(Exception): ... + +class Curl(object): + def close(self) -> None: ... + def setopt(self, option: int, value: Any) -> None: ... + def perform(self) -> None: ... + def getinfo(self, info: Any) -> Any: ... + def reset(self) -> None: ... + def unsetopt(self, option: int) -> Any: ... + def pause(self, bitmask: Any) -> Any: ... + def errstr(self) -> str: ... + + # TODO(MichalPokorny): wat? + USERPWD: int + +class CurlMulti(object): + def close(self) -> None: ... + def add_handle(self, obj: Curl) -> None: ... + def remove_handle(self, obj: Curl) -> None: ... + def perform(self) -> Tuple[Any, int]: ... + def fdset(self) -> tuple: ... + def select(self, timeout: float = ...) -> int: ... + def info_read(self, max_objects: int = ...) -> tuple: ... + +class CurlShare(object): + def close(self) -> None: ... + def setopt(self, option: int, value: Any) -> Any: ... + +ACCEPTTIMEOUT_MS: int +ACCEPT_ENCODING: int +ADDRESS_SCOPE: int +APPCONNECT_TIME: int +APPEND: int +AUTOREFERER: int +BUFFERSIZE: int +CAINFO: int +CAPATH: int +CLOSESOCKETFUNCTION: int +COMPILE_DATE: str +COMPILE_LIBCURL_VERSION_NUM: int +COMPILE_PY_VERSION_HEX: int +CONDITION_UNMET: int +CONNECTTIMEOUT: int +CONNECTTIMEOUT_MS: int +CONNECT_ONLY: int +CONNECT_TIME: int +CONTENT_LENGTH_DOWNLOAD: int +CONTENT_LENGTH_UPLOAD: int +CONTENT_TYPE: int +COOKIE: int +COOKIEFILE: int +COOKIEJAR: int +COOKIELIST: int +COOKIESESSION: int +COPYPOSTFIELDS: int +CRLF: int +CRLFILE: int +CSELECT_ERR: int +CSELECT_IN: int +CSELECT_OUT: int +CURL_HTTP_VERSION_1_0: int +CURL_HTTP_VERSION_1_1: int +CURL_HTTP_VERSION_2: int +CURL_HTTP_VERSION_2_0: int +CURL_HTTP_VERSION_LAST: int +CURL_HTTP_VERSION_NONE: int +CUSTOMREQUEST: int +DEBUGFUNCTION: int +DIRLISTONLY: int +DNS_CACHE_TIMEOUT: int +DNS_SERVERS: int +DNS_USE_GLOBAL_CACHE: int +EFFECTIVE_URL: int +EGDSOCKET: int +ENCODING: int +EXPECT_100_TIMEOUT_MS: int +FAILONERROR: int +FILE: int +FOLLOWLOCATION: int +FORBID_REUSE: int +FORM_BUFFER: int +FORM_BUFFERPTR: int +FORM_CONTENTS: int +FORM_CONTENTTYPE: int +FORM_FILE: int +FORM_FILENAME: int +FRESH_CONNECT: int +FTPAPPEND: int +FTPAUTH_DEFAULT: int +FTPAUTH_SSL: int +FTPAUTH_TLS: int +FTPLISTONLY: int +FTPMETHOD_DEFAULT: int +FTPMETHOD_MULTICWD: int +FTPMETHOD_NOCWD: int +FTPMETHOD_SINGLECWD: int +FTPPORT: int +FTPSSLAUTH: int +FTPSSL_ALL: int +FTPSSL_CONTROL: int +FTPSSL_NONE: int +FTPSSL_TRY: int +FTP_ACCOUNT: int +FTP_ALTERNATIVE_TO_USER: int +FTP_CREATE_MISSING_DIRS: int +FTP_ENTRY_PATH: int +FTP_FILEMETHOD: int +FTP_RESPONSE_TIMEOUT: int +FTP_SKIP_PASV_IP: int +FTP_SSL: int +FTP_SSL_CCC: int +FTP_USE_EPRT: int +FTP_USE_EPSV: int +FTP_USE_PRET: int +GSSAPI_DELEGATION: int +GSSAPI_DELEGATION_FLAG: int +GSSAPI_DELEGATION_NONE: int +GSSAPI_DELEGATION_POLICY_FLAG: int +HEADER: int +HEADERFUNCTION: int +HEADEROPT: int +HEADER_SEPARATE: int +HEADER_SIZE: int +HEADER_UNIFIED: int +HTTP200ALIASES: int +HTTPAUTH: int +HTTPAUTH_ANY: int +HTTPAUTH_ANYSAFE: int +HTTPAUTH_AVAIL: int +HTTPAUTH_BASIC: int +HTTPAUTH_DIGEST: int +HTTPAUTH_DIGEST_IE: int +HTTPAUTH_GSSNEGOTIATE: int +HTTPAUTH_NEGOTIATE: int +HTTPAUTH_NONE: int +HTTPAUTH_NTLM: int +HTTPAUTH_NTLM_WB: int +HTTPAUTH_ONLY: int +HTTPGET: int +HTTPHEADER: int +HTTPPOST: int +HTTPPROXYTUNNEL: int +HTTP_CODE: int +HTTP_CONNECTCODE: int +HTTP_CONTENT_DECODING: int +HTTP_TRANSFER_DECODING: int +HTTP_VERSION: int +IGNORE_CONTENT_LENGTH: int +INFILE: int +INFILESIZE: int +INFILESIZE_LARGE: int +INFOTYPE_DATA_IN: int +INFOTYPE_DATA_OUT: int +INFOTYPE_HEADER_IN: int +INFOTYPE_HEADER_OUT: int +INFOTYPE_SSL_DATA_IN: int +INFOTYPE_SSL_DATA_OUT: int +INFOTYPE_TEXT: int +INFO_CERTINFO: int +INFO_COOKIELIST: int +INFO_FILETIME: int +INFO_RTSP_CLIENT_CSEQ: int +INFO_RTSP_CSEQ_RECV: int +INFO_RTSP_SERVER_CSEQ: int +INFO_RTSP_SESSION_ID: int +INTERFACE: int +IOCMD_NOP: int +IOCMD_RESTARTREAD: int +IOCTLDATA: int +IOCTLFUNCTION: int +IOE_FAILRESTART: int +IOE_OK: int +IOE_UNKNOWNCMD: int +IPRESOLVE: int +IPRESOLVE_V4: int +IPRESOLVE_V6: int +IPRESOLVE_WHATEVER: int +ISSUERCERT: int +KEYPASSWD: int +KHMATCH_MISMATCH: int +KHMATCH_MISSING: int +KHMATCH_OK: int +KHSTAT_DEFER: int +KHSTAT_FINE: int +KHSTAT_FINE_ADD_TO_FILE: int +KHSTAT_REJECT: int +KHTYPE_DSS: int +KHTYPE_RSA: int +KHTYPE_RSA1: int +KHTYPE_UNKNOWN: int +KRB4LEVEL: int +KRBLEVEL: int +LASTSOCKET: int +LOCALPORT: int +LOCALPORTRANGE: int +LOCAL_IP: int +LOCAL_PORT: int +LOCK_DATA_COOKIE: int +LOCK_DATA_DNS: int +LOCK_DATA_SSL_SESSION: int +LOGIN_OPTIONS: int +LOW_SPEED_LIMIT: int +LOW_SPEED_TIME: int +MAIL_AUTH: int +MAIL_FROM: int +MAIL_RCPT: int +MAXCONNECTS: int +MAXFILESIZE: int +MAXFILESIZE_LARGE: int +MAXREDIRS: int +MAX_RECV_SPEED_LARGE: int +MAX_SEND_SPEED_LARGE: int +M_CHUNK_LENGTH_PENALTY_SIZE: int +M_CONTENT_LENGTH_PENALTY_SIZE: int +M_MAXCONNECTS: int +M_MAX_HOST_CONNECTIONS: int +M_MAX_PIPELINE_LENGTH: int +M_MAX_TOTAL_CONNECTIONS: int +M_PIPELINING: int +M_PIPELINING_SERVER_BL: int +M_PIPELINING_SITE_BL: int +M_SOCKETFUNCTION: int +M_TIMERFUNCTION: int +NAMELOOKUP_TIME: int +NETRC: int +NETRC_FILE: int +NETRC_IGNORED: int +NETRC_OPTIONAL: int +NETRC_REQUIRED: int +NEW_DIRECTORY_PERMS: int +NEW_FILE_PERMS: int +NOBODY: int +NOPROGRESS: int +NOPROXY: int +NOSIGNAL: int +NUM_CONNECTS: int +OPENSOCKETFUNCTION: int +OPT_CERTINFO: int +OPT_FILETIME: int +OS_ERRNO: int +PASSWORD: int +PATH_AS_IS: int +PAUSE_ALL: int +PAUSE_CONT: int +PAUSE_RECV: int +PAUSE_SEND: int +PINNEDPUBLICKEY: int +PIPEWAIT: int +PIPE_HTTP1: int +PIPE_MULTIPLEX: int +PIPE_NOTHING: int +POLL_IN: int +POLL_INOUT: int +POLL_NONE: int +POLL_OUT: int +POLL_REMOVE: int +PORT: int +POST: int +POST301: int +POSTFIELDS: int +POSTFIELDSIZE: int +POSTFIELDSIZE_LARGE: int +POSTQUOTE: int +POSTREDIR: int +PREQUOTE: int +PRETRANSFER_TIME: int +PRIMARY_IP: int +PRIMARY_PORT: int +PROGRESSFUNCTION: int +PROTOCOLS: int +PROTO_ALL: int +PROTO_DICT: int +PROTO_FILE: int +PROTO_FTP: int +PROTO_FTPS: int +PROTO_GOPHER: int +PROTO_HTTP: int +PROTO_HTTPS: int +PROTO_IMAP: int +PROTO_IMAPS: int +PROTO_LDAP: int +PROTO_LDAPS: int +PROTO_POP3: int +PROTO_POP3S: int +PROTO_RTMP: int +PROTO_RTMPE: int +PROTO_RTMPS: int +PROTO_RTMPT: int +PROTO_RTMPTE: int +PROTO_RTMPTS: int +PROTO_RTSP: int +PROTO_SCP: int +PROTO_SFTP: int +PROTO_SMB: int +PROTO_SMBS: int +PROTO_SMTP: int +PROTO_SMTPS: int +PROTO_TELNET: int +PROTO_TFTP: int +PROXY: int +PROXYAUTH: int +PROXYAUTH_AVAIL: int +PROXYHEADER: int +PROXYPASSWORD: int +PROXYPORT: int +PROXYTYPE: int +PROXYTYPE_HTTP: int +PROXYTYPE_HTTP_1_0: int +PROXYTYPE_SOCKS4: int +PROXYTYPE_SOCKS4A: int +PROXYTYPE_SOCKS5: int +PROXYTYPE_SOCKS5_HOSTNAME: int +PROXYUSERNAME: int +PROXYUSERPWD: int +PROXY_SERVICE_NAME: int +PROXY_TRANSFER_MODE: int +PUT: int +QUOTE: int +RANDOM_FILE: int +RANGE: int +READDATA: int +READFUNCTION: int +READFUNC_ABORT: int +READFUNC_PAUSE: int +REDIRECT_COUNT: int +REDIRECT_TIME: int +REDIRECT_URL: int +REDIR_POST_301: int +REDIR_POST_302: int +REDIR_POST_303: int +REDIR_POST_ALL: int +REDIR_PROTOCOLS: int +REFERER: int +REQUEST_SIZE: int +RESOLVE: int +RESPONSE_CODE: int +RESUME_FROM: int +RESUME_FROM_LARGE: int +SASL_IR: int +SEEKFUNCTION: int +SEEKFUNC_CANTSEEK: int +SEEKFUNC_FAIL: int +SEEKFUNC_OK: int +SERVICE_NAME: int +SHARE: int +SH_SHARE: int +SH_UNSHARE: int +SIZE_DOWNLOAD: int +SIZE_UPLOAD: int +SOCKET_TIMEOUT: int +SOCKOPTFUNCTION: int +SOCKOPT_ALREADY_CONNECTED: int +SOCKOPT_ERROR: int +SOCKOPT_OK: int +SOCKS5_GSSAPI_NEC: int +SOCKS5_GSSAPI_SERVICE: int +SOCKTYPE_ACCEPT: int +SOCKTYPE_IPCXN: int +SPEED_DOWNLOAD: int +SPEED_UPLOAD: int +SSH_AUTH_ANY: int +SSH_AUTH_DEFAULT: int +SSH_AUTH_HOST: int +SSH_AUTH_KEYBOARD: int +SSH_AUTH_NONE: int +SSH_AUTH_PASSWORD: int +SSH_AUTH_PUBLICKEY: int +SSH_AUTH_TYPES: int +SSH_HOST_PUBLIC_KEY_MD5: int +SSH_KEYFUNCTION: int +SSH_KNOWNHOSTS: int +SSH_PRIVATE_KEYFILE: int +SSH_PUBLIC_KEYFILE: int +SSLCERT: int +SSLCERTPASSWD: int +SSLCERTTYPE: int +SSLENGINE: int +SSLENGINE_DEFAULT: int +SSLKEY: int +SSLKEYPASSWD: int +SSLKEYTYPE: int +SSLOPT_ALLOW_BEAST: int +SSLVERSION: int +SSLVERSION_DEFAULT: int +SSLVERSION_SSLv2: int +SSLVERSION_SSLv3: int +SSLVERSION_TLSv1: int +SSLVERSION_TLSv1_0: int +SSLVERSION_TLSv1_1: int +SSLVERSION_TLSv1_2: int +SSL_CIPHER_LIST: int +SSL_ENABLE_ALPN: int +SSL_ENABLE_NPN: int +SSL_ENGINES: int +SSL_FALSESTART: int +SSL_OPTIONS: int +SSL_SESSIONID_CACHE: int +SSL_VERIFYHOST: int +SSL_VERIFYPEER: int +SSL_VERIFYRESULT: int +SSL_VERIFYSTATUS: int +STARTTRANSFER_TIME: int +STDERR: int +TCP_KEEPALIVE: int +TCP_KEEPIDLE: int +TCP_KEEPINTVL: int +TCP_NODELAY: int +TELNETOPTIONS: int +TFTP_BLKSIZE: int +TIMECONDITION: int +TIMECONDITION_IFMODSINCE: int +TIMECONDITION_IFUNMODSINCE: int +TIMECONDITION_LASTMOD: int +TIMECONDITION_NONE: int +TIMEOUT: int +TIMEOUT_MS: int +TIMEVALUE: int +TLSAUTH_PASSWORD: int +TLSAUTH_TYPE: int +TLSAUTH_USERNAME: int +TOTAL_TIME: int +TRANSFERTEXT: int +TRANSFER_ENCODING: int +UNIX_SOCKET_PATH: int +UNRESTRICTED_AUTH: int +UPLOAD: int +URL: int +USERAGENT: int +USERNAME: int +USERPWD: int +USESSL_ALL: int +USESSL_CONTROL: int +USESSL_NONE: int +USESSL_TRY: int +USE_SSL: int +VERBOSE: int +VERSION_ASYNCHDNS: int +VERSION_CONV: int +VERSION_CURLDEBUG: int +VERSION_DEBUG: int +VERSION_GSSAPI: int +VERSION_GSSNEGOTIATE: int +VERSION_HTTP2: int +VERSION_IDN: int +VERSION_IPV6: int +VERSION_KERBEROS4: int +VERSION_KERBEROS5: int +VERSION_LARGEFILE: int +VERSION_LIBZ: int +VERSION_NTLM: int +VERSION_NTLM_WB: int +VERSION_SPNEGO: int +VERSION_SSL: int +VERSION_SSPI: int +VERSION_TLSAUTH_SRP: int +VERSION_UNIX_SOCKETS: int +WILDCARDMATCH: int +WRITEDATA: int +WRITEFUNCTION: int +WRITEFUNC_PAUSE: int +WRITEHEADER: int +XFERINFOFUNCTION: int +XOAUTH2_BEARER: int + +E_ABORTED_BY_CALLBACK: int +E_AGAIN: int +E_ALREADY_COMPLETE: int +E_BAD_CALLING_ORDER: int +E_BAD_CONTENT_ENCODING: int +E_BAD_DOWNLOAD_RESUME: int +E_BAD_FUNCTION_ARGUMENT: int +E_BAD_PASSWORD_ENTERED: int +E_CALL_MULTI_PERFORM: int +E_CHUNK_FAILED: int +E_CONV_FAILED: int +E_CONV_REQD: int +E_COULDNT_CONNECT: int +E_COULDNT_RESOLVE_HOST: int +E_COULDNT_RESOLVE_PROXY: int +E_FAILED_INIT: int +E_FILESIZE_EXCEEDED: int +E_FILE_COULDNT_READ_FILE: int +E_FTP_ACCEPT_FAILED: int +E_FTP_ACCEPT_TIMEOUT: int +E_FTP_ACCESS_DENIED: int +E_FTP_BAD_DOWNLOAD_RESUME: int +E_FTP_BAD_FILE_LIST: int +E_FTP_CANT_GET_HOST: int +E_FTP_CANT_RECONNECT: int +E_FTP_COULDNT_GET_SIZE: int +E_FTP_COULDNT_RETR_FILE: int +E_FTP_COULDNT_SET_ASCII: int +E_FTP_COULDNT_SET_BINARY: int +E_FTP_COULDNT_SET_TYPE: int +E_FTP_COULDNT_STOR_FILE: int +E_FTP_COULDNT_USE_REST: int +E_FTP_PARTIAL_FILE: int +E_FTP_PORT_FAILED: int +E_FTP_PRET_FAILED: int +E_FTP_QUOTE_ERROR: int +E_FTP_SSL_FAILED: int +E_FTP_USER_PASSWORD_INCORRECT: int +E_FTP_WEIRD_227_FORMAT: int +E_FTP_WEIRD_PASS_REPLY: int +E_FTP_WEIRD_PASV_REPLY: int +E_FTP_WEIRD_SERVER_REPLY: int +E_FTP_WEIRD_USER_REPLY: int +E_FTP_WRITE_ERROR: int +E_FUNCTION_NOT_FOUND: int +E_GOT_NOTHING: int +E_HTTP2: int +E_HTTP_NOT_FOUND: int +E_HTTP_PORT_FAILED: int +E_HTTP_POST_ERROR: int +E_HTTP_RANGE_ERROR: int +E_HTTP_RETURNED_ERROR: int +E_INTERFACE_FAILED: int +E_LDAP_CANNOT_BIND: int +E_LDAP_INVALID_URL: int +E_LDAP_SEARCH_FAILED: int +E_LIBRARY_NOT_FOUND: int +E_LOGIN_DENIED: int +E_MALFORMAT_USER: int +E_MULTI_ADDED_ALREADY: int +E_MULTI_BAD_EASY_HANDLE: int +E_MULTI_BAD_HANDLE: int +E_MULTI_BAD_SOCKET: int +E_MULTI_CALL_MULTI_PERFORM: int +E_MULTI_CALL_MULTI_SOCKET: int +E_MULTI_INTERNAL_ERROR: int +E_MULTI_OK: int +E_MULTI_OUT_OF_MEMORY: int +E_MULTI_UNKNOWN_OPTION: int +E_NOT_BUILT_IN: int +E_NO_CONNECTION_AVAILABLE: int +E_OK: int +E_OPERATION_TIMEDOUT: int +E_OPERATION_TIMEOUTED: int +E_OUT_OF_MEMORY: int +E_PARTIAL_FILE: int +E_PEER_FAILED_VERIFICATION: int +E_QUOTE_ERROR: int +E_RANGE_ERROR: int +E_READ_ERROR: int +E_RECV_ERROR: int +E_REMOTE_ACCESS_DENIED: int +E_REMOTE_DISK_FULL: int +E_REMOTE_FILE_EXISTS: int +E_REMOTE_FILE_NOT_FOUND: int +E_RTSP_CSEQ_ERROR: int +E_RTSP_SESSION_ERROR: int +E_SEND_ERROR: int +E_SEND_FAIL_REWIND: int +E_SHARE_IN_USE: int +E_SSH: int +E_SSL_CACERT: int +E_SSL_CACERT_BADFILE: int +E_SSL_CERTPROBLEM: int +E_SSL_CIPHER: int +E_SSL_CONNECT_ERROR: int +E_SSL_CRL_BADFILE: int +E_SSL_ENGINE_INITFAILED: int +E_SSL_ENGINE_NOTFOUND: int +E_SSL_ENGINE_SETFAILED: int +E_SSL_INVALIDCERTSTATUS: int +E_SSL_ISSUER_ERROR: int +E_SSL_PEER_CERTIFICATE: int +E_SSL_PINNEDPUBKEYNOTMATCH: int +E_SSL_SHUTDOWN_FAILED: int +E_TELNET_OPTION_SYNTAX: int +E_TFTP_DISKFULL: int +E_TFTP_EXISTS: int +E_TFTP_ILLEGAL: int +E_TFTP_NOSUCHUSER: int +E_TFTP_NOTFOUND: int +E_TFTP_PERM: int +E_TFTP_UNKNOWNID: int +E_TOO_MANY_REDIRECTS: int +E_UNKNOWN_OPTION: int +E_UNKNOWN_TELNET_OPTION: int +E_UNSUPPORTED_PROTOCOL: int +E_UPLOAD_FAILED: int +E_URL_MALFORMAT: int +E_URL_MALFORMAT_USER: int +E_USE_SSL_FAILED: int +E_WRITE_ERROR: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi new file mode 100644 index 0000000..523c601 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/__init__.pyi @@ -0,0 +1,61 @@ +import sys +from typing import Union, Tuple, Callable, FrozenSet + +from .connections import Connection as _Connection +from .constants import FIELD_TYPE as FIELD_TYPE +from .converters import escape_dict as escape_dict, escape_sequence as escape_sequence, escape_string as escape_string +from .err import ( + Warning as Warning, + Error as Error, + InterfaceError as InterfaceError, + DataError as DataError, + DatabaseError as DatabaseError, + OperationalError as OperationalError, + IntegrityError as IntegrityError, + InternalError as InternalError, + NotSupportedError as NotSupportedError, + ProgrammingError as ProgrammingError, + MySQLError as MySQLError, +) +from .times import ( + Date as Date, + Time as Time, + Timestamp as Timestamp, + DateFromTicks as DateFromTicks, + TimeFromTicks as TimeFromTicks, + TimestampFromTicks as TimestampFromTicks, +) + +threadsafety: int +apilevel: str +paramstyle: str + +class DBAPISet(FrozenSet[int]): + def __ne__(self, other) -> bool: ... + def __eq__(self, other) -> bool: ... + def __hash__(self) -> int: ... + +STRING: DBAPISet +BINARY: DBAPISet +NUMBER: DBAPISet +DATE: DBAPISet +TIME: DBAPISet +TIMESTAMP: DBAPISet +DATETIME: DBAPISet +ROWID: DBAPISet + +if sys.version_info >= (3, 0): + def Binary(x) -> bytes: ... +else: + def Binary(x) -> bytearray: ... +def Connect(*args, **kwargs) -> _Connection: ... +def get_client_info() -> str: ... + +connect: Callable[..., _Connection] +Connection: Callable[..., _Connection] +__version__: str +version_info: Tuple[int, int, int, str, int] +NULL: str + +def thread_safe() -> bool: ... +def install_as_MySQLdb() -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi new file mode 100644 index 0000000..c47679a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/charset.pyi @@ -0,0 +1,16 @@ +from typing import Any + +MBLENGTH: Any + +class Charset: + is_default: Any + def __init__(self, id, name, collation, is_default): ... + +class Charsets: + def __init__(self): ... + def add(self, c): ... + def by_id(self, id): ... + def by_name(self, name): ... + +def charset_by_name(name): ... +def charset_by_id(id): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi new file mode 100644 index 0000000..4f1cd04 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/connections.pyi @@ -0,0 +1,145 @@ +from typing import Any, Optional, Type +from .charset import MBLENGTH as MBLENGTH, charset_by_name as charset_by_name, charset_by_id as charset_by_id +from .cursors import Cursor as Cursor +from .constants import FIELD_TYPE as FIELD_TYPE, FLAG as FLAG +from .constants import SERVER_STATUS as SERVER_STATUS +from .constants import CLIENT as CLIENT +from .constants import COMMAND as COMMAND +from .util import join_bytes as join_bytes, byte2int as byte2int, int2byte as int2byte +from .converters import escape_item as escape_item, encoders as encoders, decoders as decoders +from .err import raise_mysql_exception as raise_mysql_exception, Warning as Warning, Error as Error, InterfaceError as InterfaceError, DataError as DataError, DatabaseError as DatabaseError, OperationalError as OperationalError, IntegrityError as IntegrityError, InternalError as InternalError, NotSupportedError as NotSupportedError, ProgrammingError as ProgrammingError + +sha_new: Any +SSL_ENABLED: Any +DEFAULT_USER: Any +DEBUG: Any +NULL_COLUMN: Any +UNSIGNED_CHAR_COLUMN: Any +UNSIGNED_SHORT_COLUMN: Any +UNSIGNED_INT24_COLUMN: Any +UNSIGNED_INT64_COLUMN: Any +UNSIGNED_CHAR_LENGTH: Any +UNSIGNED_SHORT_LENGTH: Any +UNSIGNED_INT24_LENGTH: Any +UNSIGNED_INT64_LENGTH: Any +DEFAULT_CHARSET: Any + +def dump_packet(data): ... + +SCRAMBLE_LENGTH_323: Any + +class RandStruct_323: + max_value: Any + seed1: Any + seed2: Any + def __init__(self, seed1, seed2): ... + def my_rnd(self): ... + +def pack_int24(n): ... +def unpack_uint16(n): ... +def unpack_int24(n): ... +def unpack_int32(n): ... +def unpack_int64(n): ... +def defaulterrorhandler(connection, cursor, errorclass, errorvalue): ... + +class MysqlPacket: + connection: Any + def __init__(self, connection): ... + def packet_number(self): ... + def get_all_data(self): ... + def read(self, size): ... + def read_all(self): ... + def advance(self, length): ... + def rewind(self, position: int = ...): ... + def peek(self, size): ... + def get_bytes(self, position, length: int = ...): ... + def read_length_coded_binary(self): ... + def read_length_coded_string(self): ... + def is_ok_packet(self): ... + def is_eof_packet(self): ... + def is_resultset_packet(self): ... + def is_error_packet(self): ... + def check_error(self): ... + def dump(self): ... + +class FieldDescriptorPacket(MysqlPacket): + def __init__(self, *args): ... + def description(self): ... + def get_column_length(self): ... + +class Connection: + errorhandler: Any + ssl: Any + host: Any + port: Any + user: Any + password: Any + db: Any + unix_socket: Any + charset: Any + use_unicode: Any + client_flag: Any + cursorclass: Any + connect_timeout: Any + messages: Any + encoders: Any + decoders: Any + host_info: Any + def __init__(self, host: str = ..., user: Optional[Any] = ..., passwd: str = ..., db: Optional[Any] = ..., + port: int = ..., unix_socket: Optional[Any] = ..., charset: str = ..., sql_mode: Optional[Any] = ..., + read_default_file: Optional[Any] = ..., conv=..., use_unicode: Optional[Any] = ..., client_flag: int = ..., + cursorclass=..., init_command: Optional[Any] = ..., connect_timeout: Optional[Any] = ..., + ssl: Optional[Any] = ..., read_default_group: Optional[Any] = ..., compress: Optional[Any] = ..., + named_pipe: Optional[Any] = ...): ... + socket: Any + rfile: Any + wfile: Any + def close(self): ... + def autocommit(self, value): ... + def commit(self): ... + def begin(self) -> None: ... + def rollback(self): ... + def escape(self, obj): ... + def literal(self, obj): ... + def cursor(self, cursor: Optional[Type[Cursor]] = ...): ... + def __enter__(self): ... + def __exit__(self, exc, value, traceback): ... + def query(self, sql): ... + def next_result(self, unbuffered: bool = ...): ... + def affected_rows(self): ... + def kill(self, thread_id): ... + def ping(self, reconnect: bool = ...): ... + def set_charset(self, charset): ... + def read_packet(self, packet_type=...): ... + def insert_id(self): ... + def thread_id(self): ... + def character_set_name(self): ... + def get_host_info(self): ... + def get_proto_info(self): ... + def get_server_info(self): ... + def show_warnings(self): ... + Warning: Any + Error: Any + InterfaceError: Any + DatabaseError: Any + DataError: Any + OperationalError: Any + IntegrityError: Any + InternalError: Any + ProgrammingError: Any + NotSupportedError: Any + +class MySQLResult: + connection: Any + affected_rows: Any + insert_id: Any + server_status: Any + warning_count: Any + message: Any + field_count: Any + description: Any + rows: Any + has_next: Any + def __init__(self, connection): ... + first_packet: Any + def read(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi new file mode 100644 index 0000000..ac8fb55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/CLIENT.pyi @@ -0,0 +1,18 @@ +LONG_PASSWORD: int +FOUND_ROWS: int +LONG_FLAG: int +CONNECT_WITH_DB: int +NO_SCHEMA: int +COMPRESS: int +ODBC: int +LOCAL_FILES: int +IGNORE_SPACE: int +PROTOCOL_41: int +INTERACTIVE: int +SSL: int +IGNORE_SIGPIPE: int +TRANSACTIONS: int +SECURE_CONNECTION: int +MULTI_STATEMENTS: int +MULTI_RESULTS: int +CAPABILITIES: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi new file mode 100644 index 0000000..1163e6b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/COMMAND.pyi @@ -0,0 +1,22 @@ +COM_SLEEP: int +COM_QUIT: int +COM_INIT_DB: int +COM_QUERY: int +COM_FIELD_LIST: int +COM_CREATE_DB: int +COM_DROP_DB: int +COM_REFRESH: int +COM_SHUTDOWN: int +COM_STATISTICS: int +COM_PROCESS_INFO: int +COM_CONNECT: int +COM_PROCESS_KILL: int +COM_DEBUG: int +COM_PING: int +COM_TIME: int +COM_DELAYED_INSERT: int +COM_CHANGE_USER: int +COM_BINLOG_DUMP: int +COM_TABLE_DUMP: int +COM_CONNECT_OUT: int +COM_REGISTER_SLAVE: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi new file mode 100644 index 0000000..5f0a432 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/ER.pyi @@ -0,0 +1,471 @@ +ERROR_FIRST: int +HASHCHK: int +NISAMCHK: int +NO: int +YES: int +CANT_CREATE_FILE: int +CANT_CREATE_TABLE: int +CANT_CREATE_DB: int +DB_CREATE_EXISTS: int +DB_DROP_EXISTS: int +DB_DROP_DELETE: int +DB_DROP_RMDIR: int +CANT_DELETE_FILE: int +CANT_FIND_SYSTEM_REC: int +CANT_GET_STAT: int +CANT_GET_WD: int +CANT_LOCK: int +CANT_OPEN_FILE: int +FILE_NOT_FOUND: int +CANT_READ_DIR: int +CANT_SET_WD: int +CHECKREAD: int +DISK_FULL: int +DUP_KEY: int +ERROR_ON_CLOSE: int +ERROR_ON_READ: int +ERROR_ON_RENAME: int +ERROR_ON_WRITE: int +FILE_USED: int +FILSORT_ABORT: int +FORM_NOT_FOUND: int +GET_ERRNO: int +ILLEGAL_HA: int +KEY_NOT_FOUND: int +NOT_FORM_FILE: int +NOT_KEYFILE: int +OLD_KEYFILE: int +OPEN_AS_READONLY: int +OUTOFMEMORY: int +OUT_OF_SORTMEMORY: int +UNEXPECTED_EOF: int +CON_COUNT_ERROR: int +OUT_OF_RESOURCES: int +BAD_HOST_ERROR: int +HANDSHAKE_ERROR: int +DBACCESS_DENIED_ERROR: int +ACCESS_DENIED_ERROR: int +NO_DB_ERROR: int +UNKNOWN_COM_ERROR: int +BAD_NULL_ERROR: int +BAD_DB_ERROR: int +TABLE_EXISTS_ERROR: int +BAD_TABLE_ERROR: int +NON_UNIQ_ERROR: int +SERVER_SHUTDOWN: int +BAD_FIELD_ERROR: int +WRONG_FIELD_WITH_GROUP: int +WRONG_GROUP_FIELD: int +WRONG_SUM_SELECT: int +WRONG_VALUE_COUNT: int +TOO_LONG_IDENT: int +DUP_FIELDNAME: int +DUP_KEYNAME: int +DUP_ENTRY: int +WRONG_FIELD_SPEC: int +PARSE_ERROR: int +EMPTY_QUERY: int +NONUNIQ_TABLE: int +INVALID_DEFAULT: int +MULTIPLE_PRI_KEY: int +TOO_MANY_KEYS: int +TOO_MANY_KEY_PARTS: int +TOO_LONG_KEY: int +KEY_COLUMN_DOES_NOT_EXITS: int +BLOB_USED_AS_KEY: int +TOO_BIG_FIELDLENGTH: int +WRONG_AUTO_KEY: int +READY: int +NORMAL_SHUTDOWN: int +GOT_SIGNAL: int +SHUTDOWN_COMPLETE: int +FORCING_CLOSE: int +IPSOCK_ERROR: int +NO_SUCH_INDEX: int +WRONG_FIELD_TERMINATORS: int +BLOBS_AND_NO_TERMINATED: int +TEXTFILE_NOT_READABLE: int +FILE_EXISTS_ERROR: int +LOAD_INFO: int +ALTER_INFO: int +WRONG_SUB_KEY: int +CANT_REMOVE_ALL_FIELDS: int +CANT_DROP_FIELD_OR_KEY: int +INSERT_INFO: int +UPDATE_TABLE_USED: int +NO_SUCH_THREAD: int +KILL_DENIED_ERROR: int +NO_TABLES_USED: int +TOO_BIG_SET: int +NO_UNIQUE_LOGFILE: int +TABLE_NOT_LOCKED_FOR_WRITE: int +TABLE_NOT_LOCKED: int +BLOB_CANT_HAVE_DEFAULT: int +WRONG_DB_NAME: int +WRONG_TABLE_NAME: int +TOO_BIG_SELECT: int +UNKNOWN_ERROR: int +UNKNOWN_PROCEDURE: int +WRONG_PARAMCOUNT_TO_PROCEDURE: int +WRONG_PARAMETERS_TO_PROCEDURE: int +UNKNOWN_TABLE: int +FIELD_SPECIFIED_TWICE: int +INVALID_GROUP_FUNC_USE: int +UNSUPPORTED_EXTENSION: int +TABLE_MUST_HAVE_COLUMNS: int +RECORD_FILE_FULL: int +UNKNOWN_CHARACTER_SET: int +TOO_MANY_TABLES: int +TOO_MANY_FIELDS: int +TOO_BIG_ROWSIZE: int +STACK_OVERRUN: int +WRONG_OUTER_JOIN: int +NULL_COLUMN_IN_INDEX: int +CANT_FIND_UDF: int +CANT_INITIALIZE_UDF: int +UDF_NO_PATHS: int +UDF_EXISTS: int +CANT_OPEN_LIBRARY: int +CANT_FIND_DL_ENTRY: int +FUNCTION_NOT_DEFINED: int +HOST_IS_BLOCKED: int +HOST_NOT_PRIVILEGED: int +PASSWORD_ANONYMOUS_USER: int +PASSWORD_NOT_ALLOWED: int +PASSWORD_NO_MATCH: int +UPDATE_INFO: int +CANT_CREATE_THREAD: int +WRONG_VALUE_COUNT_ON_ROW: int +CANT_REOPEN_TABLE: int +INVALID_USE_OF_NULL: int +REGEXP_ERROR: int +MIX_OF_GROUP_FUNC_AND_FIELDS: int +NONEXISTING_GRANT: int +TABLEACCESS_DENIED_ERROR: int +COLUMNACCESS_DENIED_ERROR: int +ILLEGAL_GRANT_FOR_TABLE: int +GRANT_WRONG_HOST_OR_USER: int +NO_SUCH_TABLE: int +NONEXISTING_TABLE_GRANT: int +NOT_ALLOWED_COMMAND: int +SYNTAX_ERROR: int +DELAYED_CANT_CHANGE_LOCK: int +TOO_MANY_DELAYED_THREADS: int +ABORTING_CONNECTION: int +NET_PACKET_TOO_LARGE: int +NET_READ_ERROR_FROM_PIPE: int +NET_FCNTL_ERROR: int +NET_PACKETS_OUT_OF_ORDER: int +NET_UNCOMPRESS_ERROR: int +NET_READ_ERROR: int +NET_READ_INTERRUPTED: int +NET_ERROR_ON_WRITE: int +NET_WRITE_INTERRUPTED: int +TOO_LONG_STRING: int +TABLE_CANT_HANDLE_BLOB: int +TABLE_CANT_HANDLE_AUTO_INCREMENT: int +DELAYED_INSERT_TABLE_LOCKED: int +WRONG_COLUMN_NAME: int +WRONG_KEY_COLUMN: int +WRONG_MRG_TABLE: int +DUP_UNIQUE: int +BLOB_KEY_WITHOUT_LENGTH: int +PRIMARY_CANT_HAVE_NULL: int +TOO_MANY_ROWS: int +REQUIRES_PRIMARY_KEY: int +NO_RAID_COMPILED: int +UPDATE_WITHOUT_KEY_IN_SAFE_MODE: int +KEY_DOES_NOT_EXITS: int +CHECK_NO_SUCH_TABLE: int +CHECK_NOT_IMPLEMENTED: int +CANT_DO_THIS_DURING_AN_TRANSACTION: int +ERROR_DURING_COMMIT: int +ERROR_DURING_ROLLBACK: int +ERROR_DURING_FLUSH_LOGS: int +ERROR_DURING_CHECKPOINT: int +NEW_ABORTING_CONNECTION: int +DUMP_NOT_IMPLEMENTED: int +FLUSH_MASTER_BINLOG_CLOSED: int +INDEX_REBUILD: int +MASTER: int +MASTER_NET_READ: int +MASTER_NET_WRITE: int +FT_MATCHING_KEY_NOT_FOUND: int +LOCK_OR_ACTIVE_TRANSACTION: int +UNKNOWN_SYSTEM_VARIABLE: int +CRASHED_ON_USAGE: int +CRASHED_ON_REPAIR: int +WARNING_NOT_COMPLETE_ROLLBACK: int +TRANS_CACHE_FULL: int +SLAVE_MUST_STOP: int +SLAVE_NOT_RUNNING: int +BAD_SLAVE: int +MASTER_INFO: int +SLAVE_THREAD: int +TOO_MANY_USER_CONNECTIONS: int +SET_CONSTANTS_ONLY: int +LOCK_WAIT_TIMEOUT: int +LOCK_TABLE_FULL: int +READ_ONLY_TRANSACTION: int +DROP_DB_WITH_READ_LOCK: int +CREATE_DB_WITH_READ_LOCK: int +WRONG_ARGUMENTS: int +NO_PERMISSION_TO_CREATE_USER: int +UNION_TABLES_IN_DIFFERENT_DIR: int +LOCK_DEADLOCK: int +TABLE_CANT_HANDLE_FT: int +CANNOT_ADD_FOREIGN: int +NO_REFERENCED_ROW: int +ROW_IS_REFERENCED: int +CONNECT_TO_MASTER: int +QUERY_ON_MASTER: int +ERROR_WHEN_EXECUTING_COMMAND: int +WRONG_USAGE: int +WRONG_NUMBER_OF_COLUMNS_IN_SELECT: int +CANT_UPDATE_WITH_READLOCK: int +MIXING_NOT_ALLOWED: int +DUP_ARGUMENT: int +USER_LIMIT_REACHED: int +SPECIFIC_ACCESS_DENIED_ERROR: int +LOCAL_VARIABLE: int +GLOBAL_VARIABLE: int +NO_DEFAULT: int +WRONG_VALUE_FOR_VAR: int +WRONG_TYPE_FOR_VAR: int +VAR_CANT_BE_READ: int +CANT_USE_OPTION_HERE: int +NOT_SUPPORTED_YET: int +MASTER_FATAL_ERROR_READING_BINLOG: int +SLAVE_IGNORED_TABLE: int +INCORRECT_GLOBAL_LOCAL_VAR: int +WRONG_FK_DEF: int +KEY_REF_DO_NOT_MATCH_TABLE_REF: int +OPERAND_COLUMNS: int +SUBQUERY_NO_1_ROW: int +UNKNOWN_STMT_HANDLER: int +CORRUPT_HELP_DB: int +CYCLIC_REFERENCE: int +AUTO_CONVERT: int +ILLEGAL_REFERENCE: int +DERIVED_MUST_HAVE_ALIAS: int +SELECT_REDUCED: int +TABLENAME_NOT_ALLOWED_HERE: int +NOT_SUPPORTED_AUTH_MODE: int +SPATIAL_CANT_HAVE_NULL: int +COLLATION_CHARSET_MISMATCH: int +SLAVE_WAS_RUNNING: int +SLAVE_WAS_NOT_RUNNING: int +TOO_BIG_FOR_UNCOMPRESS: int +ZLIB_Z_MEM_ERROR: int +ZLIB_Z_BUF_ERROR: int +ZLIB_Z_DATA_ERROR: int +CUT_VALUE_GROUP_CONCAT: int +WARN_TOO_FEW_RECORDS: int +WARN_TOO_MANY_RECORDS: int +WARN_NULL_TO_NOTNULL: int +WARN_DATA_OUT_OF_RANGE: int +WARN_DATA_TRUNCATED: int +WARN_USING_OTHER_HANDLER: int +CANT_AGGREGATE_2COLLATIONS: int +DROP_USER: int +REVOKE_GRANTS: int +CANT_AGGREGATE_3COLLATIONS: int +CANT_AGGREGATE_NCOLLATIONS: int +VARIABLE_IS_NOT_STRUCT: int +UNKNOWN_COLLATION: int +SLAVE_IGNORED_SSL_PARAMS: int +SERVER_IS_IN_SECURE_AUTH_MODE: int +WARN_FIELD_RESOLVED: int +BAD_SLAVE_UNTIL_COND: int +MISSING_SKIP_SLAVE: int +UNTIL_COND_IGNORED: int +WRONG_NAME_FOR_INDEX: int +WRONG_NAME_FOR_CATALOG: int +WARN_QC_RESIZE: int +BAD_FT_COLUMN: int +UNKNOWN_KEY_CACHE: int +WARN_HOSTNAME_WONT_WORK: int +UNKNOWN_STORAGE_ENGINE: int +WARN_DEPRECATED_SYNTAX: int +NON_UPDATABLE_TABLE: int +FEATURE_DISABLED: int +OPTION_PREVENTS_STATEMENT: int +DUPLICATED_VALUE_IN_TYPE: int +TRUNCATED_WRONG_VALUE: int +TOO_MUCH_AUTO_TIMESTAMP_COLS: int +INVALID_ON_UPDATE: int +UNSUPPORTED_PS: int +GET_ERRMSG: int +GET_TEMPORARY_ERRMSG: int +UNKNOWN_TIME_ZONE: int +WARN_INVALID_TIMESTAMP: int +INVALID_CHARACTER_STRING: int +WARN_ALLOWED_PACKET_OVERFLOWED: int +CONFLICTING_DECLARATIONS: int +SP_NO_RECURSIVE_CREATE: int +SP_ALREADY_EXISTS: int +SP_DOES_NOT_EXIST: int +SP_DROP_FAILED: int +SP_STORE_FAILED: int +SP_LILABEL_MISMATCH: int +SP_LABEL_REDEFINE: int +SP_LABEL_MISMATCH: int +SP_UNINIT_VAR: int +SP_BADSELECT: int +SP_BADRETURN: int +SP_BADSTATEMENT: int +UPDATE_LOG_DEPRECATED_IGNORED: int +UPDATE_LOG_DEPRECATED_TRANSLATED: int +QUERY_INTERRUPTED: int +SP_WRONG_NO_OF_ARGS: int +SP_COND_MISMATCH: int +SP_NORETURN: int +SP_NORETURNEND: int +SP_BAD_CURSOR_QUERY: int +SP_BAD_CURSOR_SELECT: int +SP_CURSOR_MISMATCH: int +SP_CURSOR_ALREADY_OPEN: int +SP_CURSOR_NOT_OPEN: int +SP_UNDECLARED_VAR: int +SP_WRONG_NO_OF_FETCH_ARGS: int +SP_FETCH_NO_DATA: int +SP_DUP_PARAM: int +SP_DUP_VAR: int +SP_DUP_COND: int +SP_DUP_CURS: int +SP_CANT_ALTER: int +SP_SUBSELECT_NYI: int +STMT_NOT_ALLOWED_IN_SF_OR_TRG: int +SP_VARCOND_AFTER_CURSHNDLR: int +SP_CURSOR_AFTER_HANDLER: int +SP_CASE_NOT_FOUND: int +FPARSER_TOO_BIG_FILE: int +FPARSER_BAD_HEADER: int +FPARSER_EOF_IN_COMMENT: int +FPARSER_ERROR_IN_PARAMETER: int +FPARSER_EOF_IN_UNKNOWN_PARAMETER: int +VIEW_NO_EXPLAIN: int +FRM_UNKNOWN_TYPE: int +WRONG_OBJECT: int +NONUPDATEABLE_COLUMN: int +VIEW_SELECT_DERIVED: int +VIEW_SELECT_CLAUSE: int +VIEW_SELECT_VARIABLE: int +VIEW_SELECT_TMPTABLE: int +VIEW_WRONG_LIST: int +WARN_VIEW_MERGE: int +WARN_VIEW_WITHOUT_KEY: int +VIEW_INVALID: int +SP_NO_DROP_SP: int +SP_GOTO_IN_HNDLR: int +TRG_ALREADY_EXISTS: int +TRG_DOES_NOT_EXIST: int +TRG_ON_VIEW_OR_TEMP_TABLE: int +TRG_CANT_CHANGE_ROW: int +TRG_NO_SUCH_ROW_IN_TRG: int +NO_DEFAULT_FOR_FIELD: int +DIVISION_BY_ZERO: int +TRUNCATED_WRONG_VALUE_FOR_FIELD: int +ILLEGAL_VALUE_FOR_TYPE: int +VIEW_NONUPD_CHECK: int +VIEW_CHECK_FAILED: int +PROCACCESS_DENIED_ERROR: int +RELAY_LOG_FAIL: int +PASSWD_LENGTH: int +UNKNOWN_TARGET_BINLOG: int +IO_ERR_LOG_INDEX_READ: int +BINLOG_PURGE_PROHIBITED: int +FSEEK_FAIL: int +BINLOG_PURGE_FATAL_ERR: int +LOG_IN_USE: int +LOG_PURGE_UNKNOWN_ERR: int +RELAY_LOG_INIT: int +NO_BINARY_LOGGING: int +RESERVED_SYNTAX: int +WSAS_FAILED: int +DIFF_GROUPS_PROC: int +NO_GROUP_FOR_PROC: int +ORDER_WITH_PROC: int +LOGGING_PROHIBIT_CHANGING_OF: int +NO_FILE_MAPPING: int +WRONG_MAGIC: int +PS_MANY_PARAM: int +KEY_PART_0: int +VIEW_CHECKSUM: int +VIEW_MULTIUPDATE: int +VIEW_NO_INSERT_FIELD_LIST: int +VIEW_DELETE_MERGE_VIEW: int +CANNOT_USER: int +XAER_NOTA: int +XAER_INVAL: int +XAER_RMFAIL: int +XAER_OUTSIDE: int +XAER_RMERR: int +XA_RBROLLBACK: int +NONEXISTING_PROC_GRANT: int +PROC_AUTO_GRANT_FAIL: int +PROC_AUTO_REVOKE_FAIL: int +DATA_TOO_LONG: int +SP_BAD_SQLSTATE: int +STARTUP: int +LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR: int +CANT_CREATE_USER_WITH_GRANT: int +WRONG_VALUE_FOR_TYPE: int +TABLE_DEF_CHANGED: int +SP_DUP_HANDLER: int +SP_NOT_VAR_ARG: int +SP_NO_RETSET: int +CANT_CREATE_GEOMETRY_OBJECT: int +FAILED_ROUTINE_BREAK_BINLOG: int +BINLOG_UNSAFE_ROUTINE: int +BINLOG_CREATE_ROUTINE_NEED_SUPER: int +EXEC_STMT_WITH_OPEN_CURSOR: int +STMT_HAS_NO_OPEN_CURSOR: int +COMMIT_NOT_ALLOWED_IN_SF_OR_TRG: int +NO_DEFAULT_FOR_VIEW_FIELD: int +SP_NO_RECURSION: int +TOO_BIG_SCALE: int +TOO_BIG_PRECISION: int +M_BIGGER_THAN_D: int +WRONG_LOCK_OF_SYSTEM_TABLE: int +CONNECT_TO_FOREIGN_DATA_SOURCE: int +QUERY_ON_FOREIGN_DATA_SOURCE: int +FOREIGN_DATA_SOURCE_DOESNT_EXIST: int +FOREIGN_DATA_STRING_INVALID_CANT_CREATE: int +FOREIGN_DATA_STRING_INVALID: int +CANT_CREATE_FEDERATED_TABLE: int +TRG_IN_WRONG_SCHEMA: int +STACK_OVERRUN_NEED_MORE: int +TOO_LONG_BODY: int +WARN_CANT_DROP_DEFAULT_KEYCACHE: int +TOO_BIG_DISPLAYWIDTH: int +XAER_DUPID: int +DATETIME_FUNCTION_OVERFLOW: int +CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG: int +VIEW_PREVENT_UPDATE: int +PS_NO_RECURSION: int +SP_CANT_SET_AUTOCOMMIT: int +MALFORMED_DEFINER: int +VIEW_FRM_NO_USER: int +VIEW_OTHER_USER: int +NO_SUCH_USER: int +FORBID_SCHEMA_CHANGE: int +ROW_IS_REFERENCED_2: int +NO_REFERENCED_ROW_2: int +SP_BAD_VAR_SHADOW: int +TRG_NO_DEFINER: int +OLD_FILE_FORMAT: int +SP_RECURSION_LIMIT: int +SP_PROC_TABLE_CORRUPT: int +SP_WRONG_NAME: int +TABLE_NEEDS_UPGRADE: int +SP_NO_AGGREGATE: int +MAX_PREPARED_STMT_COUNT_REACHED: int +VIEW_RECURSIVE: int +NON_GROUPING_FIELD_USED: int +TABLE_CANT_HANDLE_SPKEYS: int +NO_TRIGGERS_ON_SYSTEM_SCHEMA: int +USERNAME: int +HOSTNAME: int +WRONG_STRING_LENGTH: int +ERROR_LAST: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi new file mode 100644 index 0000000..f1938b0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FIELD_TYPE.pyi @@ -0,0 +1,29 @@ +DECIMAL: int +TINY: int +SHORT: int +LONG: int +FLOAT: int +DOUBLE: int +NULL: int +TIMESTAMP: int +LONGLONG: int +INT24: int +DATE: int +TIME: int +DATETIME: int +YEAR: int +NEWDATE: int +VARCHAR: int +BIT: int +NEWDECIMAL: int +ENUM: int +SET: int +TINY_BLOB: int +MEDIUM_BLOB: int +LONG_BLOB: int +BLOB: int +VAR_STRING: int +STRING: int +GEOMETRY: int +CHAR: int +INTERVAL: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi new file mode 100644 index 0000000..04b99fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/FLAG.pyi @@ -0,0 +1,17 @@ +from typing import Any + +NOT_NULL: Any +PRI_KEY: Any +UNIQUE_KEY: Any +MULTIPLE_KEY: Any +BLOB: Any +UNSIGNED: Any +ZEROFILL: Any +BINARY: Any +ENUM: Any +AUTO_INCREMENT: Any +TIMESTAMP: Any +SET: Any +PART_KEY: Any +GROUP: Any +UNIQUE: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi new file mode 100644 index 0000000..437b893 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/SERVER_STATUS.pyi @@ -0,0 +1,10 @@ +SERVER_STATUS_IN_TRANS: int +SERVER_STATUS_AUTOCOMMIT: int +SERVER_MORE_RESULTS_EXISTS: int +SERVER_QUERY_NO_GOOD_INDEX_USED: int +SERVER_QUERY_NO_INDEX_USED: int +SERVER_STATUS_CURSOR_EXISTS: int +SERVER_STATUS_LAST_ROW_SENT: int +SERVER_STATUS_DB_DROPPED: int +SERVER_STATUS_NO_BACKSLASH_ESCAPES: int +SERVER_STATUS_METADATA_CHANGED: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/constants/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi new file mode 100644 index 0000000..fdd7602 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/converters.pyi @@ -0,0 +1,46 @@ +from typing import Any +from .constants import FIELD_TYPE as FIELD_TYPE, FLAG as FLAG +from .charset import charset_by_id as charset_by_id + +PYTHON3: Any +ESCAPE_REGEX: Any +ESCAPE_MAP: Any + +def escape_item(val, charset): ... +def escape_dict(val, charset): ... +def escape_sequence(val, charset): ... +def escape_set(val, charset): ... +def escape_bool(value): ... +def escape_object(value): ... + +escape_int: Any + +escape_long: Any + +def escape_float(value): ... +def escape_string(value): ... +def escape_unicode(value): ... +def escape_None(value): ... +def escape_timedelta(obj): ... +def escape_time(obj): ... +def escape_datetime(obj): ... +def escape_date(obj): ... +def escape_struct_time(obj): ... +def convert_datetime(connection, field, obj): ... +def convert_timedelta(connection, field, obj): ... +def convert_time(connection, field, obj): ... +def convert_date(connection, field, obj): ... +def convert_mysql_timestamp(connection, field, timestamp): ... +def convert_set(s): ... +def convert_bit(connection, field, b): ... +def convert_characters(connection, field, data): ... +def convert_int(connection, field, data): ... +def convert_long(connection, field, data): ... +def convert_float(connection, field, data): ... + +encoders: Any +decoders: Any +conversions: Any + +def convert_decimal(connection, field, data): ... +def escape_decimal(obj): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi new file mode 100644 index 0000000..e080085 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/cursors.pyi @@ -0,0 +1,46 @@ +from typing import Union, Tuple, Any, Dict, Optional, Text, Iterator, List +from .connections import Connection + +Gen = Union[Tuple[Any, ...], Dict[str, Any]] + +class Cursor: + connection: Connection + description: Tuple[Text, ...] + rownumber: int + rowcount: int + arraysize: int + messages: Any + errorhandler: Any + lastrowid: int + def __init__(self, connection: Connection) -> None: ... + def __del__(self) -> None: ... + def close(self) -> None: ... + def setinputsizes(self, *args): ... + def setoutputsizes(self, *args): ... + def nextset(self): ... + def execute(self, query: str, args: Optional[Any] = ...) -> int: ... + def executemany(self, query: str, args) -> int: ... + def callproc(self, procname, args=...): ... + def fetchone(self) -> Optional[Gen]: ... + def fetchmany(self, size: Optional[int] = ...) -> Union[Optional[Gen], List[Gen]]: ... + def fetchall(self) -> Optional[Tuple[Gen, ...]]: ... + def scroll(self, value: int, mode: str = ...): ... + def __iter__(self): ... + +class DictCursor(Cursor): + def fetchone(self) -> Optional[Dict[str, Any]]: ... + def fetchmany(self, size: Optional[int] = ...) -> Optional[Tuple[Dict[str, Any], ...]]: ... + def fetchall(self) -> Optional[Tuple[Dict[str, Any], ...]]: ... + +class DictCursorMixin: + dict_type: Any + +class SSCursor(Cursor): + # fetchall return type is incompatible with the supertype. + def fetchall(self) -> List[Gen]: ... # type: ignore + def fetchall_unbuffered(self) -> Iterator[Tuple[Gen, ...]]: ... + def __iter__(self) -> Iterator[Tuple[Gen, ...]]: ... + def fetchmany(self, size: Optional[int] = ...) -> List[Gen]: ... + def scroll(self, value: int, mode: str = ...) -> None: ... + +class SSDictCursor(DictCursorMixin, SSCursor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi new file mode 100644 index 0000000..29d4f55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/err.pyi @@ -0,0 +1,18 @@ +from typing import Dict +from .constants import ER as ER + +class MySQLError(Exception): ... +class Warning(MySQLError): ... +class Error(MySQLError): ... +class InterfaceError(Error): ... +class DatabaseError(Error): ... +class DataError(DatabaseError): ... +class OperationalError(DatabaseError): ... +class IntegrityError(DatabaseError): ... +class InternalError(DatabaseError): ... +class ProgrammingError(DatabaseError): ... +class NotSupportedError(DatabaseError): ... + +error_map: Dict + +def raise_mysql_exception(data) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi new file mode 100644 index 0000000..c798e65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/times.pyi @@ -0,0 +1,10 @@ +from typing import Any + +Date: Any +Time: Any +TimeDelta: Any +Timestamp: Any + +def DateFromTicks(ticks): ... +def TimeFromTicks(ticks): ... +def TimestampFromTicks(ticks): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi new file mode 100644 index 0000000..3d9a65b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pymysql/util.pyi @@ -0,0 +1,3 @@ +def byte2int(b): ... +def int2byte(i): ... +def join_bytes(bs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi new file mode 100644 index 0000000..83e691d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/__init__.pyi @@ -0,0 +1 @@ +__license__: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi new file mode 100644 index 0000000..3c82474 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/attributes.pyi @@ -0,0 +1,96 @@ +from typing import Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Text, Type, TypeVar, Union, Set + +from datetime import datetime + +_T = TypeVar('_T') +_KT = TypeVar('_KT') +_VT = TypeVar('_VT') +_MT = TypeVar('_MT', bound='MapAttribute') + +class Attribute(Generic[_T]): + attr_name: Optional[Text] + attr_type: Text + null: bool + default: Any + is_hash_key: bool + is_range_key: bool + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[_T, Callable[..., _T]]] = ..., attr_name: Optional[Text] = ...) -> None: ... + def __set__(self, instance: Any, value: Optional[_T]) -> None: ... + def serialize(self, value: Any) -> Any: ... + def deserialize(self, value: Any) -> Any: ... + def get_value(self, value: Any) -> Any: ... + def between(self, lower: Any, upper: Any) -> Any: ... + def is_in(self, *values: Any) -> Any: ... + def exists(self) -> Any: ... + def does_not_exist(self) -> Any: ... + def is_type(self) -> Any: ... + def startswith(self, prefix: str) -> Any: ... + def contains(self, item: Any) -> Any: ... + def append(self, other: Any) -> Any: ... + def prepend(self, other: Any) -> Any: ... + def set(self, value: Any) -> Any: ... + def remove(self) -> Any: ... + def add(self, *values: Any) -> Any: ... + def delete(self, *values: Any) -> Any: ... + +class SetMixin(object): + def serialize(self, value): ... + def deserialize(self, value): ... + +class BinaryAttribute(Attribute[bytes]): + def __get__(self, instance: Any, owner: Any) -> bytes: ... + +class BinarySetAttribute(SetMixin, Attribute[Set[bytes]]): + def __get__(self, instance: Any, owner: Any) -> Set[bytes]: ... + +class UnicodeSetAttribute(SetMixin, Attribute[Set[Text]]): + def element_serialize(self, value: Any) -> Any: ... + def element_deserialize(self, value: Any) -> Any: ... + def __get__(self, instance: Any, owner: Any) -> Set[Text]: ... + +class UnicodeAttribute(Attribute[Text]): + def __get__(self, instance: Any, owner: Any) -> Text: ... + +class JSONAttribute(Attribute[Any]): + def __get__(self, instance: Any, owner: Any) -> Any: ... + +class LegacyBooleanAttribute(Attribute[bool]): + def __get__(self, instance: Any, owner: Any) -> bool: ... + +class BooleanAttribute(Attribute[bool]): + def __get__(self, instance: Any, owner: Any) -> bool: ... + +class NumberSetAttribute(SetMixin, Attribute[Set[float]]): + def __get__(self, instance: Any, owner: Any) -> Set[float]: ... + +class NumberAttribute(Attribute[float]): + def __get__(self, instance: Any, owner: Any) -> float: ... + +class UTCDateTimeAttribute(Attribute[datetime]): + def __get__(self, instance: Any, owner: Any) -> datetime: ... + +class NullAttribute(Attribute[None]): + def __get__(self, instance: Any, owner: Any) -> None: ... + +class MapAttributeMeta(type): + def __init__(self, name, bases, attrs) -> None: ... + +class MapAttribute(Generic[_KT, _VT], Attribute[Mapping[_KT, _VT]], metaclass=MapAttributeMeta): + attribute_values: Any + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[Any, Callable[..., Any]]] = ..., attr_name: Optional[Text] = ..., **attrs) -> None: ... + def __iter__(self) -> Iterable[_VT]: ... + def __getattr__(self, attr: str) -> _VT: ... + def __getitem__(self, item: _KT) -> _VT: ... + def __set__(self, instance: Any, value: Union[None, MapAttribute[_KT, _VT], Mapping[_KT, _VT]]) -> None: ... + def __get__(self: _MT, instance: Any, owner: Any) -> _MT: ... + def is_type_safe(self, key: Any, value: Any) -> bool: ... + def validate(self) -> bool: ... + +class ListAttribute(Generic[_T], Attribute[List[_T]]): + element_type: Any + def __init__(self, hash_key: bool = ..., range_key: bool = ..., null: Optional[bool] = ..., default: Optional[Union[Any, Callable[..., Any]]] = ..., attr_name: Optional[Text] = ..., of: Optional[Type[_T]] = ...) -> None: ... + def __get__(self, instance: Any, owner: Any) -> List[_T]: ... + +DESERIALIZE_CLASS_MAP: Dict[Text, Attribute] +SERIALIZE_CLASS_MAP: Dict[Type, Attribute] +SERIALIZE_KEY_MAP: Dict[Type, Text] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi new file mode 100644 index 0000000..1860736 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/__init__.pyi @@ -0,0 +1,2 @@ +from pynamodb.connection.base import Connection as Connection +from pynamodb.connection.table import TableConnection as TableConnection diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi new file mode 100644 index 0000000..9c75150 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/base.pyi @@ -0,0 +1,78 @@ +from typing import Any, Dict, Optional, Text + +BOTOCORE_EXCEPTIONS: Any +log: Any + +class MetaTable: + data: Dict + def __init__(self, data: Dict) -> None: ... + @property + def range_keyname(self) -> Optional[Text]: ... + @property + def hash_keyname(self) -> Text: ... + def get_index_hash_keyname(self, index_name: Text) -> Optional[Text]: ... + def get_item_attribute_map(self, attributes, item_key: Any = ..., pythonic_key: bool = ...): ... + def get_attribute_type(self, attribute_name, value: Optional[Any] = ...): ... + def get_identifier_map(self, hash_key, range_key: Optional[Any] = ..., key: Any = ...): ... + def get_exclusive_start_key_map(self, exclusive_start_key): ... + +class Connection: + host: Any + region: Any + session_cls: Any + def __init__(self, region: Optional[Any] = ..., host: Optional[Any] = ..., session_cls: Optional[Any] = ..., + request_timeout_seconds: Optional[Any] = ..., max_retry_attempts: Optional[Any] = ..., + base_backoff_ms: Optional[Any] = ...) -> None: ... + def dispatch(self, operation_name, operation_kwargs): ... + @property + def session(self): ... + @property + def requests_session(self): ... + @property + def client(self): ... + def get_meta_table(self, table_name: Text, refresh: bool = ...): ... + def create_table(self, table_name: Text, attribute_definitions: Optional[Any] = ..., key_schema: Optional[Any] = ..., + read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., + global_secondary_indexes: Optional[Any] = ..., local_secondary_indexes: Optional[Any] = ..., + stream_specification: Optional[Any] = ...): ... + def delete_table(self, table_name: Text): ... + def update_table(self, table_name: Text, read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., + global_secondary_index_updates: Optional[Any] = ...): ... + def list_tables(self, exclusive_start_table_name: Optional[Any] = ..., limit: Optional[Any] = ...): ... + def describe_table(self, table_name: Text): ... + def get_conditional_operator(self, operator): ... + def get_item_attribute_map(self, table_name: Text, attributes, item_key: Any = ..., pythonic_key: bool = ...): ... + def get_expected_map(self, table_name: Text, expected): ... + def parse_attribute(self, attribute, return_type: bool = ...): ... + def get_attribute_type(self, table_name: Text, attribute_name, value: Optional[Any] = ...): ... + def get_identifier_map(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., key: Any = ...): ... + def get_query_filter_map(self, table_name: Text, query_filters): ... + def get_consumed_capacity_map(self, return_consumed_capacity): ... + def get_return_values_map(self, return_values): ... + def get_item_collection_map(self, return_item_collection_metrics): ... + def get_exclusive_start_key_map(self, table_name: Text, exclusive_start_key): ... + def delete_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., expected: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def update_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., attribute_updates: Optional[Any] = ..., + expected: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ..., + return_values: Optional[Any] = ...): ... + def put_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., attributes: Optional[Any] = ..., + expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_write_item(self, table_name: Text, put_items: Optional[Any] = ..., delete_items: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_get_item(self, table_name: Text, keys, consistent_read: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., attributes_to_get: Optional[Any] = ...): ... + def get_item(self, table_name: Text, hash_key, range_key: Optional[Any] = ..., consistent_read: bool = ..., + attributes_to_get: Optional[Any] = ...): ... + def scan(self, table_name: Text, attributes_to_get: Optional[Any] = ..., limit: Optional[Any] = ..., + conditional_operator: Optional[Any] = ..., scan_filter: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., exclusive_start_key: Optional[Any] = ..., + segment: Optional[Any] = ..., total_segments: Optional[Any] = ...): ... + def query(self, table_name: Text, hash_key, attributes_to_get: Optional[Any] = ..., consistent_read: bool = ..., + exclusive_start_key: Optional[Any] = ..., index_name: Optional[Any] = ..., key_conditions: Optional[Any] = ..., + query_filters: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., limit: Optional[Any] = ..., + return_consumed_capacity: Optional[Any] = ..., scan_index_forward: Optional[Any] = ..., + select: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi new file mode 100644 index 0000000..0f820af --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/table.pyi @@ -0,0 +1,18 @@ +from typing import Any, Optional + +class TableConnection: + table_name: Any + connection: Any + def __init__(self, table_name, region: Optional[Any] = ..., host: Optional[Any] = ..., session_cls: Optional[Any] = ..., request_timeout_seconds: Optional[Any] = ..., max_retry_attempts: Optional[Any] = ..., base_backoff_ms: Optional[Any] = ...) -> None: ... + def delete_item(self, hash_key, range_key: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def update_item(self, hash_key, range_key: Optional[Any] = ..., attribute_updates: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ..., return_values: Optional[Any] = ...): ... + def put_item(self, hash_key, range_key: Optional[Any] = ..., attributes: Optional[Any] = ..., expected: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., return_values: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_write_item(self, put_items: Optional[Any] = ..., delete_items: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., return_item_collection_metrics: Optional[Any] = ...): ... + def batch_get_item(self, keys, consistent_read: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., attributes_to_get: Optional[Any] = ...): ... + def get_item(self, hash_key, range_key: Optional[Any] = ..., consistent_read: bool = ..., attributes_to_get: Optional[Any] = ...): ... + def scan(self, attributes_to_get: Optional[Any] = ..., limit: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., scan_filter: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., segment: Optional[Any] = ..., total_segments: Optional[Any] = ..., exclusive_start_key: Optional[Any] = ...): ... + def query(self, hash_key, attributes_to_get: Optional[Any] = ..., consistent_read: bool = ..., exclusive_start_key: Optional[Any] = ..., index_name: Optional[Any] = ..., key_conditions: Optional[Any] = ..., query_filters: Optional[Any] = ..., limit: Optional[Any] = ..., return_consumed_capacity: Optional[Any] = ..., scan_index_forward: Optional[Any] = ..., conditional_operator: Optional[Any] = ..., select: Optional[Any] = ...): ... + def describe_table(self): ... + def delete_table(self): ... + def update_table(self, read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., global_secondary_index_updates: Optional[Any] = ...): ... + def create_table(self, attribute_definitions: Optional[Any] = ..., key_schema: Optional[Any] = ..., read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ..., global_secondary_indexes: Optional[Any] = ..., local_secondary_indexes: Optional[Any] = ..., stream_specification: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi new file mode 100644 index 0000000..20635c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/connection/util.pyi @@ -0,0 +1,3 @@ +from typing import Text + +def pythonic(var_name: Text) -> Text: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi new file mode 100644 index 0000000..7c26cd6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/constants.pyi @@ -0,0 +1,166 @@ +from typing import Any + +BATCH_WRITE_ITEM: str +DESCRIBE_TABLE: str +BATCH_GET_ITEM: str +CREATE_TABLE: str +UPDATE_TABLE: str +DELETE_TABLE: str +LIST_TABLES: str +UPDATE_ITEM: str +DELETE_ITEM: str +GET_ITEM: str +PUT_ITEM: str +QUERY: str +SCAN: str +GLOBAL_SECONDARY_INDEX_UPDATES: str +RETURN_ITEM_COLL_METRICS: str +EXCLUSIVE_START_TABLE_NAME: str +RETURN_CONSUMED_CAPACITY: str +COMPARISON_OPERATOR: str +SCAN_INDEX_FORWARD: str +ATTR_DEFINITIONS: str +ATTR_VALUE_LIST: str +TABLE_DESCRIPTION: str +UNPROCESSED_KEYS: str +UNPROCESSED_ITEMS: str +CONSISTENT_READ: str +DELETE_REQUEST: str +RETURN_VALUES: str +REQUEST_ITEMS: str +ATTRS_TO_GET: str +ATTR_UPDATES: str +TABLE_STATUS: str +SCAN_FILTER: str +TABLE_NAME: str +KEY_SCHEMA: str +ATTR_NAME: str +ATTR_TYPE: str +ITEM_COUNT: str +CAMEL_COUNT: str +PUT_REQUEST: str +INDEX_NAME: str +ATTRIBUTES: str +TABLE_KEY: str +RESPONSES: str +RANGE_KEY: str +KEY_TYPE: str +ACTION: str +UPDATE: str +EXISTS: str +SELECT: str +ACTIVE: str +LIMIT: str +ITEMS: str +ITEM: str +KEYS: str +UTC: str +KEY: str +DEFAULT_ENCODING: str +DEFAULT_REGION: str +DATETIME_FORMAT: str +SERVICE_NAME: str +HTTP_OK: int +HTTP_BAD_REQUEST: int +PROVISIONED_THROUGHPUT: str +READ_CAPACITY_UNITS: str +WRITE_CAPACITY_UNITS: str +STRING_SHORT: str +STRING_SET_SHORT: str +NUMBER_SHORT: str +NUMBER_SET_SHORT: str +BINARY_SHORT: str +BINARY_SET_SHORT: str +MAP_SHORT: str +LIST_SHORT: str +BOOLEAN: str +BOOLEAN_SHORT: str +STRING: str +STRING_SET: str +NUMBER: str +NUMBER_SET: str +BINARY: str +BINARY_SET: str +MAP: str +LIST: str +SHORT_ATTR_TYPES: Any +ATTR_TYPE_MAP: Any +LOCAL_SECONDARY_INDEX: str +LOCAL_SECONDARY_INDEXES: str +GLOBAL_SECONDARY_INDEX: str +GLOBAL_SECONDARY_INDEXES: str +PROJECTION: str +PROJECTION_TYPE: str +NON_KEY_ATTRIBUTES: str +KEYS_ONLY: str +ALL: str +INCLUDE: str +STREAM_VIEW_TYPE: str +STREAM_SPECIFICATION: str +STREAM_ENABLED: str +STREAM_NEW_IMAGE: str +STREAM_OLD_IMAGE: str +STREAM_NEW_AND_OLD_IMAGE: str +STREAM_KEYS_ONLY: str +EXCLUSIVE_START_KEY: str +LAST_EVALUATED_KEY: str +QUERY_FILTER: str +BEGINS_WITH: str +BETWEEN: str +EQ: str +NE: str +LE: str +LT: str +GE: str +GT: str +IN: str +KEY_CONDITIONS: str +COMPARISON_OPERATOR_VALUES: Any +QUERY_OPERATOR_MAP: Any +NOT_NULL: str +NULL: str +CONTAINS: str +NOT_CONTAINS: str +ALL_ATTRIBUTES: str +ALL_PROJECTED_ATTRIBUTES: str +SPECIFIC_ATTRIBUTES: str +COUNT: str +SELECT_VALUES: Any +SCAN_OPERATOR_MAP: Any +QUERY_FILTER_OPERATOR_MAP: Any +DELETE_FILTER_OPERATOR_MAP: Any +UPDATE_FILTER_OPERATOR_MAP: Any +PUT_FILTER_OPERATOR_MAP: Any +SEGMENT: str +TOTAL_SEGMENTS: str +SCAN_FILTER_VALUES: Any +QUERY_FILTER_VALUES: Any +DELETE_FILTER_VALUES: Any +VALUE: str +EXPECTED: str +CONSUMED_CAPACITY: str +CAPACITY_UNITS: str +INDEXES: str +TOTAL: str +NONE: str +RETURN_CONSUMED_CAPACITY_VALUES: Any +SIZE: str +RETURN_ITEM_COLL_METRICS_VALUES: Any +ALL_OLD: str +UPDATED_OLD: str +ALL_NEW: str +UPDATED_NEW: str +RETURN_VALUES_VALUES: Any +PUT: str +DELETE: str +ADD: str +ATTR_UPDATE_ACTIONS: Any +BATCH_GET_PAGE_LIMIT: int +BATCH_WRITE_PAGE_LIMIT: int +META_CLASS_NAME: str +REGION: str +HOST: str +CONDITIONAL_OPERATOR: str +AND: str +OR: str +CONDITIONAL_OPERATORS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi new file mode 100644 index 0000000..728db4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/exceptions.pyi @@ -0,0 +1,23 @@ +from typing import Any, Optional, Text + +class PynamoDBException(Exception): + msg: str + cause: Any + def __init__(self, msg: Optional[Text] = ..., cause: Optional[Exception] = ...) -> None: ... + +class PynamoDBConnectionError(PynamoDBException): ... +class DeleteError(PynamoDBConnectionError): ... +class QueryError(PynamoDBConnectionError): ... +class ScanError(PynamoDBConnectionError): ... +class PutError(PynamoDBConnectionError): ... +class UpdateError(PynamoDBConnectionError): ... +class GetError(PynamoDBConnectionError): ... +class TableError(PynamoDBConnectionError): ... +class DoesNotExist(PynamoDBException): ... + +class TableDoesNotExist(PynamoDBException): + def __init__(self, table_name) -> None: ... + +class VerboseClientError(Exception): + MSG_TEMPLATE: Any + def __init__(self, error_response, operation_name, verbose_properties: Optional[Any] = ...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi new file mode 100644 index 0000000..66e8ae7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/indexes.pyi @@ -0,0 +1,30 @@ +from typing import Any, Optional + +class IndexMeta(type): + def __init__(self, name, bases, attrs) -> None: ... + +class Index(metaclass=IndexMeta): + Meta: Any + def __init__(self) -> None: ... + @classmethod + def count(cls, hash_key, consistent_read: bool = ..., **filters) -> int: ... + @classmethod + def query(self, hash_key, scan_index_forward: Optional[Any] = ..., consistent_read: bool = ..., limit: Optional[Any] = ..., last_evaluated_key: Optional[Any] = ..., attributes_to_get: Optional[Any] = ..., **filters): ... + +class GlobalSecondaryIndex(Index): ... +class LocalSecondaryIndex(Index): ... + +class Projection(object): + projection_type: Any + non_key_attributes: Any + +class KeysOnlyProjection(Projection): + projection_type: Any + +class IncludeProjection(Projection): + projection_type: Any + non_key_attributes: Any + def __init__(self, non_attr_keys: Optional[Any] = ...) -> None: ... + +class AllProjection(Projection): + projection_type: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi new file mode 100644 index 0000000..5943a58 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/models.pyi @@ -0,0 +1,107 @@ +from .attributes import Attribute +from .exceptions import DoesNotExist as DoesNotExist +from typing import Any, Dict, Generic, Iterable, Iterator, List, Optional, Sequence, Tuple, Type, TypeVar, Text, Union + +log: Any + +class DefaultMeta: ... + +class ResultSet(Iterable): + results: Any + operation: Any + arguments: Any + def __init__(self, results, operation, arguments) -> None: ... + def __iter__(self): ... + +class MetaModel(type): + def __init__(self, name: Text, bases: Tuple[type, ...], attrs: Dict[Any, Any]) -> None: ... + +_T = TypeVar('_T', bound='Model') +KeyType = Union[Text, bytes, float, int, Tuple] + +class Model(metaclass=MetaModel): + DoesNotExist = DoesNotExist + attribute_values: Dict[Text, Any] + def __init__(self, hash_key: Optional[KeyType] = ..., range_key: Optional[Any] = ..., **attrs) -> None: ... + @classmethod + def has_map_or_list_attributes(cls: Type[_T]) -> bool: ... + @classmethod + def batch_get(cls: Type[_T], items: Iterable[Union[KeyType, Iterable[KeyType]]], consistent_read: Optional[bool] = ..., attributes_to_get: Optional[Sequence[Text]] = ...) -> Iterator[_T]: ... + @classmethod + def batch_write(cls: Type[_T], auto_commit: bool = ...) -> BatchWrite[_T]: ... + def delete(self, condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Any: ... + def update(self, attributes: Optional[Dict[Text, Dict[Text, Any]]] = ..., actions: Optional[List[Any]] = ..., condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Any: ... + def update_item(self, attribute: Text, value: Optional[Any] = ..., action: Optional[Text] = ..., conditional_operator: Optional[Text] = ..., **expected_values): ... + def save(self, condition: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., **expected_values) -> Dict[str, Any]: ... + def refresh(self, consistent_read: bool = ...): ... + @classmethod + def get(cls: Type[_T], hash_key: KeyType, range_key: Optional[KeyType] = ..., consistent_read: bool = ...) -> _T: ... + @classmethod + def from_raw_data(cls: Type[_T], data) -> _T: ... + @classmethod + def count(cls: Type[_T], hash_key: Optional[KeyType] = ..., consistent_read: bool = ..., index_name: Optional[Text] = ..., limit: Optional[int] = ..., **filters) -> int: ... + @classmethod + def query(cls: Type[_T], hash_key: KeyType, consistent_read: bool = ..., index_name: Optional[Text] = ..., scan_index_forward: Optional[Any] = ..., conditional_operator: Optional[Text] = ..., limit: Optional[int] = ..., last_evaluated_key: Optional[Any] = ..., attributes_to_get: Optional[Iterable[Text]] = ..., page_size: Optional[int] = ..., **filters) -> Iterator[_T]: ... + @classmethod + def rate_limited_scan( + cls: Type[_T], + # TODO: annotate Condition class + filter_condition: Optional[Any] = ..., + attributes_to_get: Optional[Sequence[Text]] = ..., + segment: Optional[int] = ..., + total_segments: Optional[int] = ..., + limit: Optional[int] = ..., + conditional_operator: Optional[Text] = ..., + last_evaluated_key: Optional[Any] = ..., + page_size: Optional[int] = ..., + timeout_seconds: Optional[int] = ..., + read_capacity_to_consume_per_second: int = ..., + allow_rate_limited_scan_without_consumed_capacity: Optional[bool] = ..., + max_sleep_between_retry: int = ..., + max_consecutive_exceptions: int = ..., + consistent_read: Optional[bool] = ..., + index_name: Optional[str] = ..., + **filters: Any + ) -> Iterator[_T]: ... + @classmethod + def scan(cls: Type[_T], segment: Optional[int] = ..., total_segments: Optional[int] = ..., limit: Optional[int] = ..., conditional_operator: Optional[Text] = ..., last_evaluated_key: Optional[Any] = ..., page_size: Optional[int] = ..., **filters) -> Iterator[_T]: ... + @classmethod + def exists(cls: Type[_T]) -> bool: ... + @classmethod + def delete_table(cls): ... + @classmethod + def describe_table(cls): ... + @classmethod + def create_table(cls: Type[_T], wait: bool = ..., read_capacity_units: Optional[Any] = ..., write_capacity_units: Optional[Any] = ...): ... + @classmethod + def dumps(cls): ... + @classmethod + def dump(cls, filename): ... + @classmethod + def loads(cls, data): ... + @classmethod + def load(cls, filename): ... + @classmethod + def add_throttle_record(cls, records): ... + @classmethod + def get_throttle(cls): ... + @classmethod + def get_attributes(cls) -> Dict[str, Attribute]: ... + @classmethod + def _get_attributes(cls) -> Dict[str, Attribute]: ... + +class ModelContextManager(Generic[_T]): + model: Type[_T] + auto_commit: bool + max_operations: int + pending_operations: List[Dict[Text, Any]] + def __init__(self, model: Type[_T], auto_commit: bool = ...) -> None: ... + def __enter__(self) -> ModelContextManager[_T]: ... + +class BatchWrite(Generic[_T], ModelContextManager[_T]): + def save(self, put_item: _T) -> None: ... + def delete(self, del_item: _T) -> None: ... + def __enter__(self) -> BatchWrite[_T]: ... + def __exit__(self, exc_type, exc_val, exc_tb) -> None: ... + pending_operations: Any + def commit(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi new file mode 100644 index 0000000..76fc417 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/settings.pyi @@ -0,0 +1,8 @@ +from typing import Any + +log: Any +default_settings_dict: Any +OVERRIDE_SETTINGS_PATH: Any +override_settings: Any + +def get_settings_value(key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi new file mode 100644 index 0000000..6948b68 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/throttle.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +log: Any + +class ThrottleBase: + capacity: Any + window: Any + records: Any + sleep_interval: Any + def __init__(self, capacity, window: int = ..., initial_sleep: Optional[Any] = ...) -> None: ... + def add_record(self, record): ... + def throttle(self): ... + +class NoThrottle(ThrottleBase): + def __init__(self) -> None: ... + def add_record(self, record): ... + +class Throttle(ThrottleBase): + def throttle(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi new file mode 100644 index 0000000..14195f0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pynamodb/types.pyi @@ -0,0 +1,5 @@ +STRING: str +NUMBER: str +BINARY: str +HASH: str +RANGE: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi new file mode 100644 index 0000000..20655d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/pytz/__init__.pyi @@ -0,0 +1,41 @@ +from typing import Optional, List, Set, Mapping, Union +import datetime + +class BaseTzInfo(datetime.tzinfo): + zone: str = ... + def localize(self, dt: datetime.datetime, is_dst: bool = ...) -> datetime.datetime: ... + def normalize(self, dt: datetime.datetime) -> datetime.datetime: ... + +class _UTCclass(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime]) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime]) -> datetime.timedelta: ... + def dst(self, dt: Optional[datetime.datetime]) -> datetime.timedelta: ... + +class _StaticTzInfo(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> datetime.timedelta: ... + def dst(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> datetime.timedelta: ... + +class _DstTzInfo(BaseTzInfo): + def tzname(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> str: ... + def utcoffset(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> Optional[datetime.timedelta]: ... + def dst(self, dt: Optional[datetime.datetime], is_dst: Optional[bool] = ...) -> Optional[datetime.timedelta]: ... + +class UnknownTimeZoneError(KeyError): ... +class InvalidTimeError(Exception): ... +class AmbiguousTimeError(InvalidTimeError): ... +class NonExistentTimeError(InvalidTimeError): ... + +utc: _UTCclass +UTC: _UTCclass +def timezone(zone: str) -> Union[_UTCclass, _StaticTzInfo, _DstTzInfo]: ... + +all_timezones: List[str] +all_timezones_set: Set[str] +common_timezones: List[str] +common_timezones_set: Set[str] +country_timezones: Mapping[str, List[str]] +country_names: Mapping[str, str] +ZERO: datetime.timedelta +HOUR: datetime.timedelta +VERSION: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi new file mode 100644 index 0000000..7705d78 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/__init__.pyi @@ -0,0 +1,40 @@ +# Stubs for requests (based on version 2.6.0, Python 3) + +from typing import Any +from . import models +from . import api +from . import sessions +from . import status_codes +from . import exceptions +from . import packages +import logging + +__title__: Any +__build__: Any +__license__: Any +__copyright__: Any +__version__: Any + +Request = models.Request +Response = models.Response +PreparedRequest = models.PreparedRequest +request = api.request +get = api.get +head = api.head +post = api.post +patch = api.patch +put = api.put +delete = api.delete +options = api.options +session = sessions.session +Session = sessions.Session +codes = status_codes.codes +RequestException = exceptions.RequestException +Timeout = exceptions.Timeout +URLRequired = exceptions.URLRequired +TooManyRedirects = exceptions.TooManyRedirects +HTTPError = exceptions.HTTPError +ConnectionError = exceptions.ConnectionError + +class NullHandler(logging.Handler): + def emit(self, record): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi new file mode 100644 index 0000000..1900567 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/adapters.pyi @@ -0,0 +1,79 @@ +# Stubs for requests.adapters (Python 3) + +from typing import Any, Container, Union, Text, Tuple, Optional, Mapping +from . import models +from .packages.urllib3 import poolmanager +from .packages.urllib3 import response +from .packages.urllib3.util import retry +from . import compat +from . import utils +from . import structures +from .packages.urllib3 import exceptions as urllib3_exceptions +from . import cookies +from . import exceptions +from . import auth + +PreparedRequest = models.PreparedRequest +Response = models.Response +PoolManager = poolmanager.PoolManager +proxy_from_url = poolmanager.proxy_from_url +HTTPResponse = response.HTTPResponse +Retry = retry.Retry +DEFAULT_CA_BUNDLE_PATH = utils.DEFAULT_CA_BUNDLE_PATH +get_encoding_from_headers = utils.get_encoding_from_headers +prepend_scheme_if_needed = utils.prepend_scheme_if_needed +get_auth_from_url = utils.get_auth_from_url +urldefragauth = utils.urldefragauth +CaseInsensitiveDict = structures.CaseInsensitiveDict +ConnectTimeoutError = urllib3_exceptions.ConnectTimeoutError +MaxRetryError = urllib3_exceptions.MaxRetryError +ProtocolError = urllib3_exceptions.ProtocolError +ReadTimeoutError = urllib3_exceptions.ReadTimeoutError +ResponseError = urllib3_exceptions.ResponseError +extract_cookies_to_jar = cookies.extract_cookies_to_jar +ConnectionError = exceptions.ConnectionError +ConnectTimeout = exceptions.ConnectTimeout +ReadTimeout = exceptions.ReadTimeout +SSLError = exceptions.SSLError +ProxyError = exceptions.ProxyError +RetryError = exceptions.RetryError + +DEFAULT_POOLBLOCK: Any +DEFAULT_POOLSIZE: Any +DEFAULT_RETRIES: Any + +class BaseAdapter: + def __init__(self) -> None: ... + def send(self, + request: PreparedRequest, + stream: bool = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + verify: Union[bool, str] = ..., + cert: Union[None, Union[bytes, Text], Container[Union[bytes, Text]]] = ..., + proxies: Optional[Mapping[str, str]] = ...) -> Response: ... + def close(self) -> None: ... + +class HTTPAdapter(BaseAdapter): + __attrs__: Any + max_retries: Any + config: Any + proxy_manager: Any + def __init__(self, pool_connections=..., pool_maxsize=..., max_retries=..., + pool_block=...) -> None: ... + poolmanager: Any + def init_poolmanager(self, connections, maxsize, block=..., **pool_kwargs): ... + def proxy_manager_for(self, proxy, **proxy_kwargs): ... + def cert_verify(self, conn, url, verify, cert): ... + def build_response(self, req, resp): ... + def get_connection(self, url, proxies=...): ... + def close(self): ... + def request_url(self, request, proxies): ... + def add_headers(self, request, **kwargs): ... + def proxy_headers(self, proxy): ... + def send(self, + request: PreparedRequest, + stream: bool = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + verify: Union[bool, str] = ..., + cert: Union[None, Union[bytes, Text], Container[Union[bytes, Text]]] = ..., + proxies: Optional[Mapping[str, str]] = ...) -> Response: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi new file mode 100644 index 0000000..df3003c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/api.pyi @@ -0,0 +1,40 @@ +# Stubs for requests.api (Python 3) + +import sys +from typing import Optional, Union, Any, Iterable, Mapping, MutableMapping, Tuple, IO, Text + +from .models import Response + +if sys.version_info >= (3,): + _Text = str +else: + _Text = Union[str, Text] + +_ParamsMappingValueType = Union[_Text, bytes, int, float, Iterable[Union[_Text, bytes, int, float]]] +_Data = Union[ + None, + _Text, + bytes, + MutableMapping[str, Any], + MutableMapping[Text, Any], + Iterable[Tuple[_Text, Optional[_Text]]], + IO +] + +def request(method: str, url: str, **kwargs) -> Response: ... +def get(url: Union[_Text, bytes], + params: Optional[ + Union[Mapping[Union[_Text, bytes, int, float], _ParamsMappingValueType], + Union[_Text, bytes], + Tuple[Union[_Text, bytes, int, float], _ParamsMappingValueType], + Mapping[_Text, _ParamsMappingValueType], + Mapping[bytes, _ParamsMappingValueType], + Mapping[int, _ParamsMappingValueType], + Mapping[float, _ParamsMappingValueType]]] = ..., + **kwargs) -> Response: ... +def options(url: _Text, **kwargs) -> Response: ... +def head(url: _Text, **kwargs) -> Response: ... +def post(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def put(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def patch(url: _Text, data: _Data = ..., json=..., **kwargs) -> Response: ... +def delete(url: _Text, **kwargs) -> Response: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi new file mode 100644 index 0000000..48d4b08 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/auth.pyi @@ -0,0 +1,44 @@ +# Stubs for requests.auth (Python 3) + +from typing import Any, Text, Union +from . import compat +from . import cookies +from . import models +from . import utils +from . import status_codes + +extract_cookies_to_jar = cookies.extract_cookies_to_jar +parse_dict_header = utils.parse_dict_header +to_native_string = utils.to_native_string +codes = status_codes.codes + +CONTENT_TYPE_FORM_URLENCODED: Any +CONTENT_TYPE_MULTI_PART: Any + +def _basic_auth_str(username: Union[bytes, Text], password: Union[bytes, Text]) -> str: ... + +class AuthBase: + def __call__(self, r: models.PreparedRequest) -> models.PreparedRequest: ... + +class HTTPBasicAuth(AuthBase): + username: Any + password: Any + def __init__(self, username, password) -> None: ... + def __call__(self, r): ... + +class HTTPProxyAuth(HTTPBasicAuth): + def __call__(self, r): ... + +class HTTPDigestAuth(AuthBase): + username: Any + password: Any + last_nonce: Any + nonce_count: Any + chal: Any + pos: Any + num_401_calls: Any + def __init__(self, username, password) -> None: ... + def build_digest_header(self, method, url): ... + def handle_redirect(self, r, **kwargs): ... + def handle_401(self, r, **kwargs): ... + def __call__(self, r): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi new file mode 100644 index 0000000..63b92f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/compat.pyi @@ -0,0 +1,6 @@ +# Stubs for requests.compat (Python 3.4) + +from typing import Any +import collections + +OrderedDict = collections.OrderedDict diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi new file mode 100644 index 0000000..1208dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/cookies.pyi @@ -0,0 +1,67 @@ +# Stubs for requests.cookies (Python 3) + +import sys +from typing import Any, MutableMapping +import collections +from . import compat + +if sys.version_info < (3, 0): + from cookielib import CookieJar +else: + from http.cookiejar import CookieJar + +class MockRequest: + type: Any + def __init__(self, request) -> None: ... + def get_type(self): ... + def get_host(self): ... + def get_origin_req_host(self): ... + def get_full_url(self): ... + def is_unverifiable(self): ... + def has_header(self, name): ... + def get_header(self, name, default=...): ... + def add_header(self, key, val): ... + def add_unredirected_header(self, name, value): ... + def get_new_headers(self): ... + @property + def unverifiable(self): ... + @property + def origin_req_host(self): ... + @property + def host(self): ... + +class MockResponse: + def __init__(self, headers) -> None: ... + def info(self): ... + def getheaders(self, name): ... + +def extract_cookies_to_jar(jar, request, response): ... +def get_cookie_header(jar, request): ... +def remove_cookie_by_name(cookiejar, name, domain=..., path=...): ... + +class CookieConflictError(RuntimeError): ... + +class RequestsCookieJar(CookieJar, MutableMapping): + def get(self, name, default=..., domain=..., path=...): ... + def set(self, name, value, **kwargs): ... + def iterkeys(self): ... + def keys(self): ... + def itervalues(self): ... + def values(self): ... + def iteritems(self): ... + def items(self): ... + def list_domains(self): ... + def list_paths(self): ... + def multiple_domains(self): ... + def get_dict(self, domain=..., path=...): ... + def __getitem__(self, name): ... + def __setitem__(self, name, value): ... + def __delitem__(self, name): ... + def set_cookie(self, cookie, *args, **kwargs): ... + def update(self, other): ... + def copy(self): ... + +def create_cookie(name, value, **kwargs): ... +def morsel_to_cookie(morsel): ... +def cookiejar_from_dict(cookie_dict, cookiejar=..., overwrite=...): ... +def merge_cookies(cookiejar, cookies): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi new file mode 100644 index 0000000..3669692 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/exceptions.pyi @@ -0,0 +1,26 @@ +# Stubs for requests.exceptions (Python 3) + +from typing import Any +from .packages.urllib3.exceptions import HTTPError as BaseHTTPError + +class RequestException(IOError): + response: Any + request: Any + def __init__(self, *args, **kwargs) -> None: ... + +class HTTPError(RequestException): ... +class ConnectionError(RequestException): ... +class ProxyError(ConnectionError): ... +class SSLError(ConnectionError): ... +class Timeout(RequestException): ... +class ConnectTimeout(ConnectionError, Timeout): ... +class ReadTimeout(Timeout): ... +class URLRequired(RequestException): ... +class TooManyRedirects(RequestException): ... +class MissingSchema(RequestException, ValueError): ... +class InvalidSchema(RequestException, ValueError): ... +class InvalidURL(RequestException, ValueError): ... +class ChunkedEncodingError(RequestException): ... +class ContentDecodingError(RequestException, BaseHTTPError): ... +class StreamConsumedError(RequestException, TypeError): ... +class RetryError(RequestException): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi new file mode 100644 index 0000000..278076a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/hooks.pyi @@ -0,0 +1,8 @@ +# Stubs for requests.hooks (Python 3) + +from typing import Any + +HOOKS: Any + +def default_hooks(): ... +def dispatch_hook(key, hooks, hook_data, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi new file mode 100644 index 0000000..2bcea94 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/models.pyi @@ -0,0 +1,142 @@ +# Stubs for requests.models (Python 3) + +from typing import (Any, Dict, Iterator, List, MutableMapping, Optional, Text, + Union) +import datetime +import types + +from . import hooks +from . import structures +from . import auth +from . import cookies +from .cookies import RequestsCookieJar +from .packages.urllib3 import fields +from .packages.urllib3 import filepost +from .packages.urllib3 import util +from .packages.urllib3 import exceptions as urllib3_exceptions +from . import exceptions +from . import utils +from . import compat +from . import status_codes + + +default_hooks = hooks.default_hooks +CaseInsensitiveDict = structures.CaseInsensitiveDict +HTTPBasicAuth = auth.HTTPBasicAuth +cookiejar_from_dict = cookies.cookiejar_from_dict +get_cookie_header = cookies.get_cookie_header +RequestField = fields.RequestField +encode_multipart_formdata = filepost.encode_multipart_formdata +parse_url = util.parse_url +DecodeError = urllib3_exceptions.DecodeError +ReadTimeoutError = urllib3_exceptions.ReadTimeoutError +ProtocolError = urllib3_exceptions.ProtocolError +LocationParseError = urllib3_exceptions.LocationParseError +HTTPError = exceptions.HTTPError +MissingSchema = exceptions.MissingSchema +InvalidURL = exceptions.InvalidURL +ChunkedEncodingError = exceptions.ChunkedEncodingError +ContentDecodingError = exceptions.ContentDecodingError +ConnectionError = exceptions.ConnectionError +StreamConsumedError = exceptions.StreamConsumedError +guess_filename = utils.guess_filename +get_auth_from_url = utils.get_auth_from_url +requote_uri = utils.requote_uri +stream_decode_response_unicode = utils.stream_decode_response_unicode +to_key_val_list = utils.to_key_val_list +parse_header_links = utils.parse_header_links +iter_slices = utils.iter_slices +guess_json_utf = utils.guess_json_utf +super_len = utils.super_len +to_native_string = utils.to_native_string +codes = status_codes.codes + +REDIRECT_STATI: Any +DEFAULT_REDIRECT_LIMIT: Any +CONTENT_CHUNK_SIZE: Any +ITER_CHUNK_SIZE: Any +json_dumps: Any + +class RequestEncodingMixin: + @property + def path_url(self): ... + +class RequestHooksMixin: + def register_hook(self, event, hook): ... + def deregister_hook(self, event, hook): ... + +class Request(RequestHooksMixin): + hooks: Any + method: Any + url: Any + headers: Any + files: Any + data: Any + json: Any + params: Any + auth: Any + cookies: Any + def __init__(self, method=..., url=..., headers=..., files=..., data=..., params=..., + auth=..., cookies=..., hooks=..., json=...) -> None: ... + def prepare(self): ... + +class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): + method: Optional[Union[str, Text]] + url: Optional[Union[str, Text]] + headers: CaseInsensitiveDict + body: Optional[Union[bytes, Text]] + hooks: Any + def __init__(self) -> None: ... + def prepare(self, method=..., url=..., headers=..., files=..., data=..., params=..., + auth=..., cookies=..., hooks=..., json=...): ... + def copy(self): ... + def prepare_method(self, method): ... + def prepare_url(self, url, params): ... + def prepare_headers(self, headers): ... + def prepare_body(self, data, files, json=...): ... + def prepare_content_length(self, body): ... + def prepare_auth(self, auth, url=...): ... + def prepare_cookies(self, cookies): ... + def prepare_hooks(self, hooks): ... + +class Response: + __attrs__: Any + status_code: int + headers: MutableMapping[str, str] + raw: Any + url: str + encoding: str + history: List[Response] + reason: str + cookies: RequestsCookieJar + elapsed: datetime.timedelta + request: PreparedRequest + def __init__(self) -> None: ... + def __bool__(self) -> bool: ... + def __nonzero__(self) -> bool: ... + def __iter__(self) -> Iterator[bytes]: ... + def __enter__(self) -> Response: ... + def __exit__(self, *args: Any) -> None: ... + @property + def ok(self) -> bool: ... + @property + def is_redirect(self) -> bool: ... + @property + def is_permanent_redirect(self) -> bool: ... + @property + def apparent_encoding(self) -> str: ... + def iter_content(self, chunk_size: Optional[int] = ..., + decode_unicode: bool = ...) -> Iterator[Any]: ... + def iter_lines(self, + chunk_size: Optional[int] = ..., + decode_unicode: bool = ..., + delimiter: Union[Text, bytes] = ...) -> Iterator[Any]: ... + @property + def content(self) -> bytes: ... + @property + def text(self) -> str: ... + def json(self, **kwargs) -> Any: ... + @property + def links(self) -> Dict[Any, Any]: ... + def raise_for_status(self) -> None: ... + def close(self) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi new file mode 100644 index 0000000..b50dba3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/__init__.pyi @@ -0,0 +1,4 @@ +class VendorAlias: + def __init__(self, package_names) -> None: ... + def find_module(self, fullname, path=...): ... + def load_module(self, name): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi new file mode 100644 index 0000000..f575800 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/__init__.pyi @@ -0,0 +1,31 @@ +from typing import Any +from . import connectionpool +from . import filepost +from . import poolmanager +from . import response +from .util import request as _request +from .util import url +from .util import timeout +from .util import retry +import logging + +__license__: Any + +HTTPConnectionPool = connectionpool.HTTPConnectionPool +HTTPSConnectionPool = connectionpool.HTTPSConnectionPool +connection_from_url = connectionpool.connection_from_url +encode_multipart_formdata = filepost.encode_multipart_formdata +PoolManager = poolmanager.PoolManager +ProxyManager = poolmanager.ProxyManager +proxy_from_url = poolmanager.proxy_from_url +HTTPResponse = response.HTTPResponse +make_headers = _request.make_headers +get_host = url.get_host +Timeout = timeout.Timeout +Retry = retry.Retry + +class NullHandler(logging.Handler): + def emit(self, record): ... + +def add_stderr_logger(level=...): ... +def disable_warnings(category=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi new file mode 100644 index 0000000..64e3d22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/_collections.pyi @@ -0,0 +1,47 @@ +from typing import Any +from collections import MutableMapping + +class RLock: + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, traceback): ... + +class RecentlyUsedContainer(MutableMapping): + ContainerCls: Any + dispose_func: Any + lock: Any + def __init__(self, maxsize=..., dispose_func=...) -> None: ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def __len__(self): ... + def __iter__(self): ... + def clear(self): ... + def keys(self): ... + +class HTTPHeaderDict(dict): + def __init__(self, headers=..., **kwargs) -> None: ... + def __setitem__(self, key, val): ... + def __getitem__(self, key): ... + def __delitem__(self, key): ... + def __contains__(self, key): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + values: Any + get: Any + update: Any + iterkeys: Any + itervalues: Any + def pop(self, key, default=...): ... + def discard(self, key): ... + def add(self, key, val): ... + def extend(self, *args, **kwargs): ... + def getlist(self, key): ... + getheaders: Any + getallmatchingheaders: Any + iget: Any + def copy(self): ... + def iteritems(self): ... + def itermerged(self): ... + def items(self): ... + @classmethod + def from_httplib(cls, message, duplicates=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi new file mode 100644 index 0000000..99af027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connection.pyi @@ -0,0 +1,71 @@ +# Stubs for requests.packages.urllib3.connection (Python 3.4) + +import sys +from typing import Any +from . import packages +import ssl +from . import exceptions +from .packages import ssl_match_hostname +from .util import ssl_ +from . import util + +if sys.version_info < (3, 0): + from httplib import HTTPConnection as _HTTPConnection + from httplib import HTTPException as HTTPException + + class ConnectionError(Exception): ... +else: + from http.client import HTTPConnection as _HTTPConnection + from http.client import HTTPException as HTTPException + from builtins import ConnectionError as ConnectionError + + +class DummyConnection: ... + +BaseSSLError = ssl.SSLError + +ConnectTimeoutError = exceptions.ConnectTimeoutError +SystemTimeWarning = exceptions.SystemTimeWarning +SecurityWarning = exceptions.SecurityWarning +match_hostname = ssl_match_hostname.match_hostname +resolve_cert_reqs = ssl_.resolve_cert_reqs +resolve_ssl_version = ssl_.resolve_ssl_version +ssl_wrap_socket = ssl_.ssl_wrap_socket +assert_fingerprint = ssl_.assert_fingerprint +connection = util.connection + +port_by_scheme: Any +RECENT_DATE: Any + +class HTTPConnection(_HTTPConnection): + default_port: Any + default_socket_options: Any + is_verified: Any + source_address: Any + socket_options: Any + def __init__(self, *args, **kw) -> None: ... + def connect(self): ... + +class HTTPSConnection(HTTPConnection): + default_port: Any + key_file: Any + cert_file: Any + def __init__(self, host, port=..., key_file=..., cert_file=..., strict=..., timeout=..., **kw) -> None: ... + sock: Any + def connect(self): ... + +class VerifiedHTTPSConnection(HTTPSConnection): + cert_reqs: Any + ca_certs: Any + ssl_version: Any + assert_fingerprint: Any + key_file: Any + cert_file: Any + assert_hostname: Any + def set_cert(self, key_file=..., cert_file=..., cert_reqs=..., ca_certs=..., assert_hostname=..., assert_fingerprint=...): ... + sock: Any + auto_open: Any + is_verified: Any + def connect(self): ... + +UnverifiedHTTPSConnection = HTTPSConnection diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi new file mode 100644 index 0000000..a4e8ac1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/connectionpool.pyi @@ -0,0 +1,85 @@ +from typing import Any +from . import exceptions +from .packages import ssl_match_hostname +from . import packages +from .connection import ( + HTTPException as HTTPException, + BaseSSLError as BaseSSLError, + ConnectionError as ConnectionError, +) +from . import request +from . import response +from . import connection +from .util import connection as _connection +from .util import retry +from .util import timeout +from .util import url + +ClosedPoolError = exceptions.ClosedPoolError +ProtocolError = exceptions.ProtocolError +EmptyPoolError = exceptions.EmptyPoolError +HostChangedError = exceptions.HostChangedError +LocationValueError = exceptions.LocationValueError +MaxRetryError = exceptions.MaxRetryError +ProxyError = exceptions.ProxyError +ReadTimeoutError = exceptions.ReadTimeoutError +SSLError = exceptions.SSLError +TimeoutError = exceptions.TimeoutError +InsecureRequestWarning = exceptions.InsecureRequestWarning +CertificateError = ssl_match_hostname.CertificateError +port_by_scheme = connection.port_by_scheme +DummyConnection = connection.DummyConnection +HTTPConnection = connection.HTTPConnection +HTTPSConnection = connection.HTTPSConnection +VerifiedHTTPSConnection = connection.VerifiedHTTPSConnection +RequestMethods = request.RequestMethods +HTTPResponse = response.HTTPResponse +is_connection_dropped = _connection.is_connection_dropped +Retry = retry.Retry +Timeout = timeout.Timeout +get_host = url.get_host + +xrange: Any +log: Any + +class ConnectionPool: + scheme: Any + QueueCls: Any + host: Any + port: Any + def __init__(self, host, port=...) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + def close(self): ... + +class HTTPConnectionPool(ConnectionPool, RequestMethods): + scheme: Any + ConnectionCls: Any + strict: Any + timeout: Any + retries: Any + pool: Any + block: Any + proxy: Any + proxy_headers: Any + num_connections: Any + num_requests: Any + conn_kw: Any + def __init__(self, host, port=..., strict=..., timeout=..., maxsize=..., block=..., headers=..., retries=..., _proxy=..., _proxy_headers=..., **conn_kw) -> None: ... + def close(self): ... + def is_same_host(self, url): ... + def urlopen(self, method, url, body=..., headers=..., retries=..., redirect=..., assert_same_host=..., timeout=..., pool_timeout=..., release_conn=..., **response_kw): ... + +class HTTPSConnectionPool(HTTPConnectionPool): + scheme: Any + ConnectionCls: Any + key_file: Any + cert_file: Any + cert_reqs: Any + ca_certs: Any + ssl_version: Any + assert_hostname: Any + assert_fingerprint: Any + def __init__(self, host, port=..., strict=..., timeout=..., maxsize=..., block=..., headers=..., retries=..., _proxy=..., _proxy_headers=..., key_file=..., cert_file=..., cert_reqs=..., ca_certs=..., ssl_version=..., assert_hostname=..., assert_fingerprint=..., **conn_kw) -> None: ... + +def connection_from_url(url, **kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi new file mode 100644 index 0000000..ddb4e83 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/exceptions.pyi @@ -0,0 +1,50 @@ +from typing import Any + +class HTTPError(Exception): ... +class HTTPWarning(Warning): ... + +class PoolError(HTTPError): + pool: Any + def __init__(self, pool, message) -> None: ... + def __reduce__(self): ... + +class RequestError(PoolError): + url: Any + def __init__(self, pool, url, message) -> None: ... + def __reduce__(self): ... + +class SSLError(HTTPError): ... +class ProxyError(HTTPError): ... +class DecodeError(HTTPError): ... +class ProtocolError(HTTPError): ... + +ConnectionError: Any + +class MaxRetryError(RequestError): + reason: Any + def __init__(self, pool, url, reason=...) -> None: ... + +class HostChangedError(RequestError): + retries: Any + def __init__(self, pool, url, retries=...) -> None: ... + +class TimeoutStateError(HTTPError): ... +class TimeoutError(HTTPError): ... +class ReadTimeoutError(TimeoutError, RequestError): ... +class ConnectTimeoutError(TimeoutError): ... +class EmptyPoolError(PoolError): ... +class ClosedPoolError(PoolError): ... +class LocationValueError(ValueError, HTTPError): ... + +class LocationParseError(LocationValueError): + location: Any + def __init__(self, location) -> None: ... + +class ResponseError(HTTPError): + GENERIC_ERROR: Any + SPECIFIC_ERROR: Any + +class SecurityWarning(HTTPWarning): ... +class InsecureRequestWarning(SecurityWarning): ... +class SystemTimeWarning(SecurityWarning): ... +class InsecurePlatformWarning(SecurityWarning): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi new file mode 100644 index 0000000..9d691dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/fields.pyi @@ -0,0 +1,16 @@ +# Stubs for requests.packages.urllib3.fields (Python 3.4) + +from typing import Any +from . import packages + +def guess_content_type(filename, default=...): ... +def format_header_param(name, value): ... + +class RequestField: + data: Any + headers: Any + def __init__(self, name, data, filename=..., headers=...) -> None: ... + @classmethod + def from_tuples(cls, fieldname, value): ... + def render_headers(self): ... + def make_multipart(self, content_disposition=..., content_type=..., content_location=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi new file mode 100644 index 0000000..afcc837 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/filepost.pyi @@ -0,0 +1,15 @@ +from typing import Any +from . import packages +# from .packages import six +from . import fields + +# six = packages.six +# b = six.b +RequestField = fields.RequestField + +writer: Any + +def choose_boundary(): ... +def iter_field_objects(fields): ... +def iter_fields(fields): ... +def encode_multipart_formdata(fields, boundary=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi new file mode 100644 index 0000000..1915c0e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/__init__.pyi @@ -0,0 +1,4 @@ +import ssl + +CertificateError = ssl.CertificateError +match_hostname = ssl.match_hostname diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi new file mode 100644 index 0000000..c219980 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.pyi @@ -0,0 +1,3 @@ +class CertificateError(ValueError): ... + +def match_hostname(cert, hostname): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi new file mode 100644 index 0000000..9568488 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/poolmanager.pyi @@ -0,0 +1,27 @@ +from typing import Any +from .request import RequestMethods + +class PoolManager(RequestMethods): + proxy: Any + connection_pool_kw: Any + pools: Any + def __init__(self, num_pools=..., headers=..., **connection_pool_kw) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_val, exc_tb): ... + def clear(self): ... + def connection_from_host(self, host, port=..., scheme=...): ... + def connection_from_url(self, url): ... + # TODO: This was the original signature -- copied another one from base class to fix complaint. + # def urlopen(self, method, url, redirect=True, **kw): ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + +class ProxyManager(PoolManager): + proxy: Any + proxy_headers: Any + def __init__(self, proxy_url, num_pools=..., headers=..., proxy_headers=..., **connection_pool_kw) -> None: ... + def connection_from_host(self, host, port=..., scheme=...): ... + # TODO: This was the original signature -- copied another one from base class to fix complaint. + # def urlopen(self, method, url, redirect=True, **kw): ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + +def proxy_from_url(url, **kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi new file mode 100644 index 0000000..fd79126 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/request.pyi @@ -0,0 +1,9 @@ +from typing import Any + +class RequestMethods: + headers: Any + def __init__(self, headers=...) -> None: ... + def urlopen(self, method, url, body=..., headers=..., encode_multipart=..., multipart_boundary=..., **kw): ... + def request(self, method, url, fields=..., headers=..., **urlopen_kw): ... + def request_encode_url(self, method, url, fields=..., **urlopen_kw): ... + def request_encode_body(self, method, url, fields=..., headers=..., encode_multipart=..., multipart_boundary=..., **urlopen_kw): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi new file mode 100644 index 0000000..de0aa33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/response.pyi @@ -0,0 +1,53 @@ +from typing import Any +import io +from . import _collections +from . import exceptions +from .connection import HTTPException as HTTPException, BaseSSLError as BaseSSLError +from .util import response + +HTTPHeaderDict = _collections.HTTPHeaderDict +ProtocolError = exceptions.ProtocolError +DecodeError = exceptions.DecodeError +ReadTimeoutError = exceptions.ReadTimeoutError +binary_type = bytes # six.binary_type +PY3 = True # six.PY3 +is_fp_closed = response.is_fp_closed + +class DeflateDecoder: + def __init__(self) -> None: ... + def __getattr__(self, name): ... + def decompress(self, data): ... + +class GzipDecoder: + def __init__(self) -> None: ... + def __getattr__(self, name): ... + def decompress(self, data): ... + +class HTTPResponse(io.IOBase): + CONTENT_DECODERS: Any + REDIRECT_STATUSES: Any + headers: Any + status: Any + version: Any + reason: Any + strict: Any + decode_content: Any + def __init__(self, body=..., headers=..., status=..., version=..., reason=..., strict=..., preload_content=..., decode_content=..., original_response=..., pool=..., connection=...) -> None: ... + def get_redirect_location(self): ... + def release_conn(self): ... + @property + def data(self): ... + def tell(self): ... + def read(self, amt=..., decode_content=..., cache_content=...): ... + def stream(self, amt=..., decode_content=...): ... + @classmethod + def from_httplib(cls, r, **response_kw): ... + def getheaders(self): ... + def getheader(self, name, default=...): ... + def close(self): ... + @property + def closed(self): ... + def fileno(self): ... + def flush(self): ... + def readable(self): ... + def readinto(self, b): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi new file mode 100644 index 0000000..53bdac9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/__init__.pyi @@ -0,0 +1,25 @@ +from . import connection +from . import request +from . import response +from . import ssl_ +from . import timeout +from . import retry +from . import url +import ssl + +is_connection_dropped = connection.is_connection_dropped +make_headers = request.make_headers +is_fp_closed = response.is_fp_closed +SSLContext = ssl.SSLContext +HAS_SNI = ssl_.HAS_SNI +assert_fingerprint = ssl_.assert_fingerprint +resolve_cert_reqs = ssl_.resolve_cert_reqs +resolve_ssl_version = ssl_.resolve_ssl_version +ssl_wrap_socket = ssl_.ssl_wrap_socket +current_time = timeout.current_time +Timeout = timeout.Timeout +Retry = retry.Retry +get_host = url.get_host +parse_url = url.parse_url +split_first = url.split_first +Url = url.Url diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi new file mode 100644 index 0000000..db77bd0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/connection.pyi @@ -0,0 +1,8 @@ +from typing import Any + +poll: Any +select: Any +HAS_IPV6: bool + +def is_connection_dropped(conn): ... +def create_connection(address, timeout=..., source_address=..., socket_options=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi new file mode 100644 index 0000000..a7e112f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/request.pyi @@ -0,0 +1,8 @@ +from typing import Any +# from ..packages import six + +# b = six.b + +ACCEPT_ENCODING: Any + +def make_headers(keep_alive=..., accept_encoding=..., user_agent=..., basic_auth=..., proxy_basic_auth=..., disable_cache=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi new file mode 100644 index 0000000..30463da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/response.pyi @@ -0,0 +1 @@ +def is_fp_closed(obj): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi new file mode 100644 index 0000000..c7c2178 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/retry.pyi @@ -0,0 +1,32 @@ +from typing import Any +from .. import exceptions +from .. import packages + +ConnectTimeoutError = exceptions.ConnectTimeoutError +MaxRetryError = exceptions.MaxRetryError +ProtocolError = exceptions.ProtocolError +ReadTimeoutError = exceptions.ReadTimeoutError +ResponseError = exceptions.ResponseError + +log: Any + +class Retry: + DEFAULT_METHOD_WHITELIST: Any + BACKOFF_MAX: Any + total: Any + connect: Any + read: Any + redirect: Any + status_forcelist: Any + method_whitelist: Any + backoff_factor: Any + raise_on_redirect: Any + def __init__(self, total=..., connect=..., read=..., redirect=..., method_whitelist=..., status_forcelist=..., backoff_factor=..., raise_on_redirect=..., _observed_errors=...) -> None: ... + def new(self, **kw): ... + @classmethod + def from_int(cls, retries, redirect=..., default=...): ... + def get_backoff_time(self): ... + def sleep(self): ... + def is_forced_retry(self, method, status_code): ... + def is_exhausted(self): ... + def increment(self, method=..., url=..., response=..., error=..., _pool=..., _stacktrace=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi new file mode 100644 index 0000000..fe1a3a0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/ssl_.pyi @@ -0,0 +1,20 @@ +from typing import Any +from .. import exceptions +import ssl + +SSLError = exceptions.SSLError +InsecurePlatformWarning = exceptions.InsecurePlatformWarning +SSLContext = ssl.SSLContext + +HAS_SNI: Any +create_default_context: Any +OP_NO_SSLv2: Any +OP_NO_SSLv3: Any +OP_NO_COMPRESSION: Any + +def assert_fingerprint(cert, fingerprint): ... +def resolve_cert_reqs(candidate): ... +def resolve_ssl_version(candidate): ... +def create_urllib3_context(ssl_version=..., cert_reqs=..., options=..., ciphers=...): ... +def ssl_wrap_socket(sock, keyfile=..., certfile=..., cert_reqs=..., ca_certs=..., + server_hostname=..., ssl_version=..., ciphers=..., ssl_context=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi new file mode 100644 index 0000000..0f3c97c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/timeout.pyi @@ -0,0 +1,20 @@ +from typing import Any +from .. import exceptions + +TimeoutStateError = exceptions.TimeoutStateError + +def current_time(): ... + +class Timeout: + DEFAULT_TIMEOUT: Any + total: Any + def __init__(self, total=..., connect=..., read=...) -> None: ... + @classmethod + def from_float(cls, timeout): ... + def clone(self): ... + def start_connect(self): ... + def get_connect_duration(self): ... + @property + def connect_timeout(self): ... + @property + def read_timeout(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi new file mode 100644 index 0000000..0e40ba5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/packages/urllib3/util/url.pyi @@ -0,0 +1,22 @@ +from typing import Any +from .. import exceptions + +LocationParseError = exceptions.LocationParseError + +url_attrs: Any + +class Url: + slots: Any + def __new__(cls, scheme=..., auth=..., host=..., port=..., path=..., query=..., fragment=...): ... + @property + def hostname(self): ... + @property + def request_uri(self): ... + @property + def netloc(self): ... + @property + def url(self): ... + +def split_first(s, delims): ... +def parse_url(url): ... +def get_host(url): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi new file mode 100644 index 0000000..33c7b79 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/sessions.pyi @@ -0,0 +1,113 @@ +# Stubs for requests.sessions (Python 3) + +from typing import Any, Union, List, MutableMapping, Text, Optional, IO, Tuple, Callable, Iterable +from . import adapters +from . import auth as _auth +from . import compat +from . import cookies +from . import models +from .models import Response +from . import hooks +from . import utils +from . import exceptions +from .packages.urllib3 import _collections +from . import structures +from . import status_codes + +BaseAdapter = adapters.BaseAdapter +OrderedDict = compat.OrderedDict +cookiejar_from_dict = cookies.cookiejar_from_dict +extract_cookies_to_jar = cookies.extract_cookies_to_jar +RequestsCookieJar = cookies.RequestsCookieJar +merge_cookies = cookies.merge_cookies +Request = models.Request +PreparedRequest = models.PreparedRequest +DEFAULT_REDIRECT_LIMIT = models.DEFAULT_REDIRECT_LIMIT +default_hooks = hooks.default_hooks +dispatch_hook = hooks.dispatch_hook +to_key_val_list = utils.to_key_val_list +default_headers = utils.default_headers +to_native_string = utils.to_native_string +TooManyRedirects = exceptions.TooManyRedirects +InvalidSchema = exceptions.InvalidSchema +ChunkedEncodingError = exceptions.ChunkedEncodingError +ContentDecodingError = exceptions.ContentDecodingError +RecentlyUsedContainer = _collections.RecentlyUsedContainer +CaseInsensitiveDict = structures.CaseInsensitiveDict +HTTPAdapter = adapters.HTTPAdapter +requote_uri = utils.requote_uri +get_environ_proxies = utils.get_environ_proxies +get_netrc_auth = utils.get_netrc_auth +should_bypass_proxies = utils.should_bypass_proxies +get_auth_from_url = utils.get_auth_from_url +codes = status_codes.codes +REDIRECT_STATI = models.REDIRECT_STATI + +REDIRECT_CACHE_SIZE: Any + +def merge_setting(request_setting, session_setting, dict_class=...): ... +def merge_hooks(request_hooks, session_hooks, dict_class=...): ... + +class SessionRedirectMixin: + def resolve_redirects(self, resp, req, stream=..., timeout=..., verify=..., cert=..., + proxies=...): ... + def rebuild_auth(self, prepared_request, response): ... + def rebuild_proxies(self, prepared_request, proxies): ... + +_Data = Union[None, bytes, MutableMapping[Text, Text], IO] + +_Hook = Callable[[Response], Any] +_Hooks = MutableMapping[Text, List[_Hook]] +_HooksInput = MutableMapping[Text, Union[Iterable[_Hook], _Hook]] + +class Session(SessionRedirectMixin): + __attrs__: Any + headers: MutableMapping[Text, Text] + auth: Union[None, Tuple[Text, Text], _auth.AuthBase, Callable[[Request], Request]] + proxies: MutableMapping[Text, Text] + hooks: _Hooks + params: Union[bytes, MutableMapping[Text, Text]] + stream: bool + verify: Union[None, bool, Text] + cert: Union[None, Text, Tuple[Text, Text]] + max_redirects: int + trust_env: bool + cookies: RequestsCookieJar + adapters: MutableMapping + redirect_cache: RecentlyUsedContainer + def __init__(self) -> None: ... + def __enter__(self) -> Session: ... + def __exit__(self, *args) -> None: ... + def prepare_request(self, request): ... + def request(self, method: str, url: str, + params: Union[None, bytes, MutableMapping[Text, Text]] = ..., + data: _Data = ..., + headers: Optional[MutableMapping[Text, Text]] = ..., + cookies: Union[None, RequestsCookieJar, MutableMapping[Text, Text]] = ..., + files: Optional[MutableMapping[Text, IO]] = ..., + auth: Union[None, Tuple[Text, Text], _auth.AuthBase, Callable[[Request], Request]] = ..., + timeout: Union[None, float, Tuple[float, float]] = ..., + allow_redirects: Optional[bool] = ..., + proxies: Optional[MutableMapping[Text, Text]] = ..., + hooks: Optional[_HooksInput] = ..., + stream: Optional[bool] = ..., + verify: Union[None, bool, Text] = ..., + cert: Union[Text, Tuple[Text, Text], None] = ..., + json: Optional[Any] = ..., + ) -> Response: ... + def get(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def options(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def head(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def post(self, url: Union[Text, bytes], data: _Data = ..., json: Optional[Any] = ..., **kwargs) -> Response: ... + def put(self, url: Union[Text, bytes], data: _Data = ..., **kwargs) -> Response: ... + def patch(self, url: Union[Text, bytes], data: _Data = ..., **kwargs) -> Response: ... + def delete(self, url: Union[Text, bytes], **kwargs) -> Response: ... + def send(self, request, **kwargs): ... + def merge_environment_settings(self, url, proxies, stream, verify, cert): ... + def get_adapter(self, url): ... + def close(self) -> None: ... + def mount(self, prefix: + Union[Text, bytes], + adapter: BaseAdapter) -> None: ... + +def session() -> Session: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi new file mode 100644 index 0000000..f9bf820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/status_codes.pyi @@ -0,0 +1,4 @@ +from typing import Any +from .structures import LookupDict + +codes: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi new file mode 100644 index 0000000..92cf27a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/structures.pyi @@ -0,0 +1,19 @@ +from typing import Any, Dict, Iterable, Iterator, Mapping, MutableMapping, Optional, Tuple, TypeVar, Union, Generic + +_VT = TypeVar('_VT') + +class CaseInsensitiveDict(MutableMapping[str, _VT], Generic[_VT]): + def __init__(self, data: Optional[Union[Mapping[str, _VT], Iterable[Tuple[str, _VT]]]] = ..., **kwargs: _VT) -> None: ... + def lower_items(self) -> Iterator[Tuple[str, _VT]]: ... + def __setitem__(self, key: str, value: _VT) -> None: ... + def __getitem__(self, key: str) -> _VT: ... + def __delitem__(self, key: str) -> None: ... + def __iter__(self) -> Iterator[str]: ... + def __len__(self) -> int: ... + +class LookupDict(Dict[str, _VT]): + name: Any + def __init__(self, name: Any = ...) -> None: ... + def __getitem__(self, key: str) -> Optional[_VT]: ... # type: ignore + def __getattr__(self, attr: str) -> _VT: ... + def __setattr__(self, attr: str, value: _VT) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi new file mode 100644 index 0000000..396a374 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/requests/utils.pyi @@ -0,0 +1,53 @@ +# Stubs for requests.utils (Python 3) + +from typing import Any +from . import compat +from . import cookies +from . import structures +from . import exceptions + +OrderedDict = compat.OrderedDict +RequestsCookieJar = cookies.RequestsCookieJar +cookiejar_from_dict = cookies.cookiejar_from_dict +CaseInsensitiveDict = structures.CaseInsensitiveDict +InvalidURL = exceptions.InvalidURL + +NETRC_FILES: Any +DEFAULT_CA_BUNDLE_PATH: Any + +def dict_to_sequence(d): ... +def super_len(o): ... +def get_netrc_auth(url): ... +def guess_filename(obj): ... +def from_key_val_list(value): ... +def to_key_val_list(value): ... +def parse_list_header(value): ... +def parse_dict_header(value): ... +def unquote_header_value(value, is_filename=...): ... +def dict_from_cookiejar(cj): ... +def add_dict_to_cookiejar(cj, cookie_dict): ... +def get_encodings_from_content(content): ... +def get_encoding_from_headers(headers): ... +def stream_decode_response_unicode(iterator, r): ... +def iter_slices(string, slice_length): ... +def get_unicode_from_response(r): ... + +UNRESERVED_SET: Any + +def unquote_unreserved(uri): ... +def requote_uri(uri): ... +def address_in_network(ip, net): ... +def dotted_netmask(mask): ... +def is_ipv4_address(string_ip): ... +def is_valid_cidr(string_network): ... +def set_environ(env_name, value): ... +def should_bypass_proxies(url): ... +def get_environ_proxies(url): ... +def default_user_agent(name=...): ... +def default_headers(): ... +def parse_header_links(value): ... +def guess_json_utf(data): ... +def prepend_scheme_if_needed(url, new_scheme): ... +def get_auth_from_url(url): ... +def to_native_string(string, encoding=...): ... +def urldefragauth(url): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi new file mode 100644 index 0000000..6221b4e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/__init__.pyi @@ -0,0 +1,13 @@ +from typing import Any, IO, Text, Union + +from simplejson.scanner import JSONDecodeError as JSONDecodeError +from simplejson.decoder import JSONDecoder as JSONDecoder +from simplejson.encoder import JSONEncoder as JSONEncoder, JSONEncoderForHTML as JSONEncoderForHTML + +_LoadsString = Union[Text, bytes, bytearray] + + +def dumps(obj: Any, *args: Any, **kwds: Any) -> str: ... +def dump(obj: Any, fp: IO[str], *args: Any, **kwds: Any) -> None: ... +def loads(s: _LoadsString, **kwds: Any) -> Any: ... +def load(fp: IO[str], **kwds: Any) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi new file mode 100644 index 0000000..59111ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/decoder.pyi @@ -0,0 +1,6 @@ +from typing import Any, Match + +class JSONDecoder(object): + def __init__(self, **kwargs): ... + def decode(self, s: str, _w: Match[str], _PY3: bool): ... + def raw_decode(self, s: str, idx: int, _w: Match[str], _PY3: bool): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi new file mode 100644 index 0000000..0e31806 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/encoder.pyi @@ -0,0 +1,9 @@ +from typing import Any, IO + +class JSONEncoder(object): + def __init__(self, *args, **kwargs): ... + def encode(self, o: Any): ... + def default(self, o: Any): ... + def iterencode(self, o: Any, _one_shot: bool): ... + +class JSONEncoderForHTML(JSONEncoder): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi new file mode 100644 index 0000000..5de484a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/simplejson/scanner.pyi @@ -0,0 +1,11 @@ +from typing import Optional + +class JSONDecodeError(ValueError): + msg: str = ... + doc: str = ... + pos: int = ... + end: Optional[int] = ... + lineno: int = ... + colno: int = ... + endlineno: Optional[int] = ... + endcolno: Optional[int] = ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi new file mode 100644 index 0000000..e89ac12 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/singledispatch.pyi @@ -0,0 +1,17 @@ +from typing import Any, Callable, Generic, Mapping, Optional, TypeVar, overload + + +_T = TypeVar("_T") + + +class _SingleDispatchCallable(Generic[_T]): + registry: Mapping[Any, Callable[..., _T]] + def dispatch(self, cls: Any) -> Callable[..., _T]: ... + @overload + def register(self, cls: Any) -> Callable[[Callable[..., _T]], Callable[..., _T]]: ... + @overload + def register(self, cls: Any, func: Callable[..., _T]) -> Callable[..., _T]: ... + def _clear_cache(self) -> None: ... + def __call__(self, *args: Any, **kwargs: Any) -> _T: ... + +def singledispatch(func: Callable[..., _T]) -> _SingleDispatchCallable[_T]: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi new file mode 100644 index 0000000..a360515 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/tabulate.pyi @@ -0,0 +1,18 @@ +# Stub for tabulate: https://bitbucket.org/astanin/python-tabulate +from typing import Any, Dict, Iterable, Sequence, Union + + +def __getattr__(name: str) -> Any: ... + +def tabulate( + tabular_data: Iterable[Iterable[Any]], + headers: Union[str, Dict[str, str], Sequence[str]] = ..., + tablefmt: str = ..., + floatfmt: str = ..., + numalign: str = ..., + stralign: str = ..., + missingval: str = ..., + showindex: str = ..., + disable_numparse: bool = ... +) -> str: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi new file mode 100644 index 0000000..e1ad18b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/termcolor.pyi @@ -0,0 +1,21 @@ +# Stub for termcolor: https://pypi.python.org/pypi/termcolor +from typing import Any, Iterable, Optional, Text + + +def colored( + text: Text, + color: Optional[Text] = ..., + on_color: Optional[Text] = ..., + attrs: Optional[Iterable[Text]] = ..., +) -> Text: + ... + + +def cprint( + text: Text, + color: Optional[Text] = ..., + on_color: Optional[Text] = ..., + attrs: Optional[Iterable[Text]] = ..., + **kwargs: Any, +) -> None: + ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/toml.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/toml.pyi new file mode 100644 index 0000000..2639178 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/toml.pyi @@ -0,0 +1,24 @@ +from typing import Any, IO, List, Mapping, MutableMapping, Optional, Protocol, Text, Type, Union +import datetime +import sys + +if sys.version_info >= (3, 4): + import pathlib + if sys.version_info >= (3, 6): + import os + _PathLike = Union[Text, pathlib.PurePath, os.PathLike] + else: + _PathLike = Union[Text, pathlib.PurePath] +else: + _PathLike = Text + +class _Writable(Protocol): + def write(self, obj: str) -> Any: ... + +class TomlDecodeError(Exception): ... + +def load(f: Union[_PathLike, List[Text], IO[str]], _dict: Type[MutableMapping[str, Any]] = ...) -> MutableMapping[str, Any]: ... +def loads(s: Text, _dict: Type[MutableMapping[str, Any]] = ...) -> MutableMapping[str, Any]: ... + +def dump(o: Mapping[str, Any], f: _Writable) -> str: ... +def dumps(o: Mapping[str, Any]) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi new file mode 100644 index 0000000..fdc9d87 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/typing_extensions.pyi @@ -0,0 +1,58 @@ +import abc +import sys +from typing import Callable +from typing import ClassVar as ClassVar +from typing import ContextManager as ContextManager +from typing import Counter as Counter +from typing import DefaultDict as DefaultDict +from typing import Deque as Deque +from typing import NewType as NewType +from typing import NoReturn as NoReturn +from typing import overload as overload +from typing import Text as Text +from typing import Type as Type +from typing import TYPE_CHECKING as TYPE_CHECKING +from typing import TypeVar, Any, Mapping, ItemsView, KeysView, ValuesView, Dict, Type + +_T = TypeVar('_T') +_F = TypeVar('_F', bound=Callable[..., Any]) +_TC = TypeVar('_TC', bound=Type[object]) +class _SpecialForm: + def __getitem__(self, typeargs: Any) -> Any: ... +def runtime(cls: _TC) -> _TC: ... +Protocol: _SpecialForm = ... +Final: _SpecialForm = ... +def final(f: _F) -> _F: ... +Literal: _SpecialForm = ... + +# Internal mypy fallback type for all typed dicts (does not exist at runtime) +class _TypedDict(Mapping[str, object], metaclass=abc.ABCMeta): + def copy(self: _T) -> _T: ... + # Using NoReturn so that only calls using mypy plugin hook that specialize the signature + # can go through. + def setdefault(self, k: NoReturn, default: object) -> object: ... + # Mypy plugin hook for 'pop' expects that 'default' has a type variable type. + def pop(self, k: NoReturn, default: _T = ...) -> object: ... + def update(self: _T, __m: _T) -> None: ... + if sys.version_info < (3, 0): + def has_key(self, k: str) -> bool: ... + def viewitems(self) -> ItemsView[str, object]: ... + def viewkeys(self) -> KeysView[str]: ... + def viewvalues(self) -> ValuesView[object]: ... + def __delitem__(self, k: NoReturn) -> None: ... + +# TypedDict is a (non-subscriptable) special form. +TypedDict: object = ... + +if sys.version_info >= (3, 3): + from typing import ChainMap as ChainMap + +if sys.version_info >= (3, 5): + from typing import AsyncIterable as AsyncIterable + from typing import AsyncIterator as AsyncIterator + from typing import AsyncContextManager as AsyncContextManager + from typing import Awaitable as Awaitable + from typing import Coroutine as Coroutine + +if sys.version_info >= (3, 6): + from typing import AsyncGenerator as AsyncGenerator diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/ujson.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/ujson.pyi new file mode 100644 index 0000000..7e00659 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/ujson.pyi @@ -0,0 +1,51 @@ +# Stubs for ujson +# See: https://pypi.python.org/pypi/ujson +from typing import Any, AnyStr, IO, Optional + +__version__: str + +def encode( + obj: Any, + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> str: ... + +def dumps( + obj: Any, + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> str: ... + +def dump( + obj: Any, + fp: IO[str], + ensure_ascii: bool = ..., + double_precision: int = ..., + encode_html_chars: bool = ..., + escape_forward_slashes: bool = ..., + sort_keys: bool = ..., + indent: int = ..., +) -> None: ... + +def decode( + s: AnyStr, + precise_float: bool = ..., +) -> Any: ... + +def loads( + s: AnyStr, + precise_float: bool = ..., +) -> Any: ... + +def load( + fp: IO[AnyStr], + precise_float: bool = ..., +) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi new file mode 100644 index 0000000..2de398a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/__init__.pyi @@ -0,0 +1,150 @@ +from types import ModuleType +from typing import Any + +from werkzeug import _internal +from werkzeug import datastructures +from werkzeug import debug +from werkzeug import exceptions +from werkzeug import formparser +from werkzeug import http +from werkzeug import local +from werkzeug import security +from werkzeug import serving +from werkzeug import test +from werkzeug import testapp +from werkzeug import urls +from werkzeug import useragents +from werkzeug import utils +from werkzeug import wrappers +from werkzeug import wsgi + +class module(ModuleType): + def __getattr__(self, name): ... + def __dir__(self): ... + + +__version__: Any + +run_simple = serving.run_simple +test_app = testapp.test_app +UserAgent = useragents.UserAgent +_easteregg = _internal._easteregg +DebuggedApplication = debug.DebuggedApplication +MultiDict = datastructures.MultiDict +CombinedMultiDict = datastructures.CombinedMultiDict +Headers = datastructures.Headers +EnvironHeaders = datastructures.EnvironHeaders +ImmutableList = datastructures.ImmutableList +ImmutableDict = datastructures.ImmutableDict +ImmutableMultiDict = datastructures.ImmutableMultiDict +TypeConversionDict = datastructures.TypeConversionDict +ImmutableTypeConversionDict = datastructures.ImmutableTypeConversionDict +Accept = datastructures.Accept +MIMEAccept = datastructures.MIMEAccept +CharsetAccept = datastructures.CharsetAccept +LanguageAccept = datastructures.LanguageAccept +RequestCacheControl = datastructures.RequestCacheControl +ResponseCacheControl = datastructures.ResponseCacheControl +ETags = datastructures.ETags +HeaderSet = datastructures.HeaderSet +WWWAuthenticate = datastructures.WWWAuthenticate +Authorization = datastructures.Authorization +FileMultiDict = datastructures.FileMultiDict +CallbackDict = datastructures.CallbackDict +FileStorage = datastructures.FileStorage +OrderedMultiDict = datastructures.OrderedMultiDict +ImmutableOrderedMultiDict = datastructures.ImmutableOrderedMultiDict +escape = utils.escape +environ_property = utils.environ_property +append_slash_redirect = utils.append_slash_redirect +redirect = utils.redirect +cached_property = utils.cached_property +import_string = utils.import_string +dump_cookie = http.dump_cookie +parse_cookie = http.parse_cookie +unescape = utils.unescape +format_string = utils.format_string +find_modules = utils.find_modules +header_property = utils.header_property +html = utils.html +xhtml = utils.xhtml +HTMLBuilder = utils.HTMLBuilder +validate_arguments = utils.validate_arguments +ArgumentValidationError = utils.ArgumentValidationError +bind_arguments = utils.bind_arguments +secure_filename = utils.secure_filename +BaseResponse = wrappers.BaseResponse +BaseRequest = wrappers.BaseRequest +Request = wrappers.Request +Response = wrappers.Response +AcceptMixin = wrappers.AcceptMixin +ETagRequestMixin = wrappers.ETagRequestMixin +ETagResponseMixin = wrappers.ETagResponseMixin +ResponseStreamMixin = wrappers.ResponseStreamMixin +CommonResponseDescriptorsMixin = wrappers.CommonResponseDescriptorsMixin +UserAgentMixin = wrappers.UserAgentMixin +AuthorizationMixin = wrappers.AuthorizationMixin +WWWAuthenticateMixin = wrappers.WWWAuthenticateMixin +CommonRequestDescriptorsMixin = wrappers.CommonRequestDescriptorsMixin +Local = local.Local +LocalManager = local.LocalManager +LocalProxy = local.LocalProxy +LocalStack = local.LocalStack +release_local = local.release_local +generate_password_hash = security.generate_password_hash +check_password_hash = security.check_password_hash +Client = test.Client +EnvironBuilder = test.EnvironBuilder +create_environ = test.create_environ +run_wsgi_app = test.run_wsgi_app +get_current_url = wsgi.get_current_url +get_host = wsgi.get_host +pop_path_info = wsgi.pop_path_info +peek_path_info = wsgi.peek_path_info +SharedDataMiddleware = wsgi.SharedDataMiddleware +DispatcherMiddleware = wsgi.DispatcherMiddleware +ClosingIterator = wsgi.ClosingIterator +FileWrapper = wsgi.FileWrapper +make_line_iter = wsgi.make_line_iter +LimitedStream = wsgi.LimitedStream +responder = wsgi.responder +wrap_file = wsgi.wrap_file +extract_path_info = wsgi.extract_path_info +parse_etags = http.parse_etags +parse_date = http.parse_date +http_date = http.http_date +cookie_date = http.cookie_date +parse_cache_control_header = http.parse_cache_control_header +is_resource_modified = http.is_resource_modified +parse_accept_header = http.parse_accept_header +parse_set_header = http.parse_set_header +quote_etag = http.quote_etag +unquote_etag = http.unquote_etag +generate_etag = http.generate_etag +dump_header = http.dump_header +parse_list_header = http.parse_list_header +parse_dict_header = http.parse_dict_header +parse_authorization_header = http.parse_authorization_header +parse_www_authenticate_header = http.parse_www_authenticate_header +remove_entity_headers = http.remove_entity_headers +is_entity_header = http.is_entity_header +remove_hop_by_hop_headers = http.remove_hop_by_hop_headers +parse_options_header = http.parse_options_header +dump_options_header = http.dump_options_header +is_hop_by_hop_header = http.is_hop_by_hop_header +unquote_header_value = http.unquote_header_value +quote_header_value = http.quote_header_value +HTTP_STATUS_CODES = http.HTTP_STATUS_CODES +url_decode = urls.url_decode +url_encode = urls.url_encode +url_quote = urls.url_quote +url_quote_plus = urls.url_quote_plus +url_unquote = urls.url_unquote +url_unquote_plus = urls.url_unquote_plus +url_fix = urls.url_fix +Href = urls.Href +iri_to_uri = urls.iri_to_uri +uri_to_iri = urls.uri_to_iri +parse_form_data = formparser.parse_form_data +abort = exceptions.Aborter +Aborter = exceptions.Aborter diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi new file mode 100644 index 0000000..bc4340d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_compat.pyi @@ -0,0 +1,48 @@ +import sys +from typing import Any, Optional, Text + +if sys.version_info < (3,): + import StringIO as BytesIO +else: + from io import StringIO as BytesIO + +PY2: Any +WIN: Any +unichr: Any +text_type: Any +string_types: Any +integer_types: Any +iterkeys: Any +itervalues: Any +iteritems: Any +iterlists: Any +iterlistvalues: Any +int_to_byte: Any +iter_bytes: Any + +def fix_tuple_repr(obj): ... +def implements_iterator(cls): ... +def implements_to_string(cls): ... +def native_string_result(func): ... +def implements_bool(cls): ... + +range_type: Any +NativeStringIO: Any + +def make_literal_wrapper(reference): ... +def normalize_string_tuple(tup): ... +def try_coerce_native(s): ... + +wsgi_get_bytes: Any + +def wsgi_decoding_dance(s, charset: Text = ..., errors: Text = ...): ... +def wsgi_encoding_dance(s, charset: Text = ..., errors: Text = ...): ... +def to_bytes(x, charset: Text = ..., errors: Text = ...): ... +def to_native(x, charset: Text = ..., errors: Text = ...): ... +def reraise(tp, value, tb: Optional[Any] = ...): ... + +imap: Any +izip: Any +ifilter: Any + +def to_unicode(x, charset: Text = ..., errors: Text = ..., allow_none_charset: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi new file mode 100644 index 0000000..64f63a1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_internal.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional + +class _Missing: + def __reduce__(self): ... + +class _DictAccessorProperty: + read_only: Any + name: Any + default: Any + load_func: Any + dump_func: Any + __doc__: Any + def __init__(self, name, default: Optional[Any] = ..., load_func: Optional[Any] = ..., dump_func: Optional[Any] = ..., + read_only: Optional[Any] = ..., doc: Optional[Any] = ...): ... + def __get__(self, obj, type: Optional[Any] = ...): ... + def __set__(self, obj, value): ... + def __delete__(self, obj): ... + +def _easteregg(app: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi new file mode 100644 index 0000000..be23222 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/_reloader.pyi @@ -0,0 +1,29 @@ +from typing import Any, Optional + +class ReloaderLoop: + name: Any + extra_files: Any + interval: float + def __init__(self, extra_files: Optional[Any] = ..., interval: float = ...): ... + def run(self): ... + def restart_with_reloader(self): ... + def trigger_reload(self, filename): ... + def log_reload(self, filename): ... + +class StatReloaderLoop(ReloaderLoop): + name: Any + def run(self): ... + +class WatchdogReloaderLoop(ReloaderLoop): + observable_paths: Any + name: Any + observer_class: Any + event_handler: Any + should_reload: Any + def __init__(self, *args, **kwargs): ... + def trigger_reload(self, filename): ... + def run(self): ... + +reloader_loops: Any + +def run_with_reloader(main_func, extra_files: Optional[Any] = ..., interval: float = ..., reloader_type: str = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi new file mode 100644 index 0000000..d02a482 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/atom.pyi @@ -0,0 +1,50 @@ +from typing import Any, Optional + +XHTML_NAMESPACE: Any + +def format_iso8601(obj): ... + +class AtomFeed: + default_generator: Any + title: Any + title_type: Any + url: Any + feed_url: Any + id: Any + updated: Any + author: Any + icon: Any + logo: Any + rights: Any + rights_type: Any + subtitle: Any + subtitle_type: Any + generator: Any + links: Any + entries: Any + def __init__(self, title: Optional[Any] = ..., entries: Optional[Any] = ..., **kwargs): ... + def add(self, *args, **kwargs): ... + def generate(self): ... + def to_string(self): ... + def get_response(self): ... + def __call__(self, environ, start_response): ... + +class FeedEntry: + title: Any + title_type: Any + content: Any + content_type: Any + url: Any + id: Any + updated: Any + summary: Any + summary_type: Any + author: Any + published: Any + rights: Any + links: Any + categories: Any + xml_base: Any + def __init__(self, title: Optional[Any] = ..., content: Optional[Any] = ..., feed_url: Optional[Any] = ..., **kwargs): ... + def generate(self): ... + def to_string(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi new file mode 100644 index 0000000..9ef76da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/cache.pyi @@ -0,0 +1,84 @@ +from typing import Any, Optional + +class BaseCache: + default_timeout: float + def __init__(self, default_timeout: float = ...): ... + def get(self, key): ... + def delete(self, key): ... + def get_many(self, *keys): ... + def get_dict(self, *keys): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + +class NullCache(BaseCache): ... + +class SimpleCache(BaseCache): + clear: Any + def __init__(self, threshold: int = ..., default_timeout: float = ...): ... + def get(self, key): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def has(self, key): ... + +class MemcachedCache(BaseCache): + key_prefix: Any + def __init__(self, servers: Optional[Any] = ..., default_timeout: float = ..., key_prefix: Optional[Any] = ...): ... + def get(self, key): ... + def get_dict(self, *keys): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def get_many(self, *keys): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + def import_preferred_memcache_lib(self, servers): ... + +GAEMemcachedCache: Any + +class RedisCache(BaseCache): + key_prefix: Any + def __init__(self, host: str = ..., port: int = ..., password: Optional[Any] = ..., db: int = ..., + default_timeout: float = ..., key_prefix: Optional[Any] = ..., **kwargs): ... + def dump_object(self, value): ... + def load_object(self, value): ... + def get(self, key): ... + def get_many(self, *keys): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set_many(self, mapping, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def delete_many(self, *keys): ... + def has(self, key): ... + def clear(self): ... + def inc(self, key, delta=...): ... + def dec(self, key, delta=...): ... + +class FileSystemCache(BaseCache): + def __init__(self, cache_dir, threshold: int = ..., default_timeout: float = ..., mode: int = ...): ... + def clear(self): ... + def get(self, key): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def delete(self, key): ... + def has(self, key): ... + +class UWSGICache(BaseCache): + cache: Any + def __init__(self, default_timeout: float = ..., cache: str = ...): ... + def get(self, key): ... + def delete(self, key): ... + def set(self, key, value, timeout: Optional[float] = ...): ... + def add(self, key, value, timeout: Optional[float] = ...): ... + def clear(self): ... + def has(self, key): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi new file mode 100644 index 0000000..97c6e56 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/fixers.pyi @@ -0,0 +1,38 @@ +from typing import Any, Sequence, Optional, Iterable +from wsgiref.types import WSGIApplication, WSGIEnvironment, StartResponse + +class CGIRootFix: + app: Any + app_root: Any + def __init__(self, app, app_root: str = ...): ... + def __call__(self, environ, start_response): ... + +LighttpdCGIRootFix: Any + +class PathInfoFromRequestUriFix: + app: Any + def __init__(self, app): ... + def __call__(self, environ, start_response): ... + +class ProxyFix(object): + app: WSGIApplication + num_proxies: int + def __init__(self, app: WSGIApplication, num_proxies: int = ...) -> None: ... + def get_remote_addr(self, forwarded_for: Sequence[str]) -> Optional[str]: ... + def __call__(self, environ: WSGIEnvironment, start_response: StartResponse) -> Iterable[bytes]: ... + +class HeaderRewriterFix: + app: Any + remove_headers: Any + add_headers: Any + def __init__(self, app, remove_headers: Optional[Any] = ..., add_headers: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +class InternetExplorerFix: + app: Any + fix_vary: Any + fix_attach: Any + def __init__(self, app, fix_vary: bool = ..., fix_attach: bool = ...): ... + def fix_headers(self, environ, headers, status: Optional[Any] = ...): ... + def run_fixed(self, environ, start_response): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi new file mode 100644 index 0000000..c7ce70c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/iterio.pyi @@ -0,0 +1,39 @@ +from typing import Any, Optional, Text, Union + +greenlet: Any + +class IterIO: + def __new__(cls, obj, sentinel: Union[Text, bytes] = ...): ... + def __iter__(self): ... + def tell(self): ... + def isatty(self): ... + def seek(self, pos, mode: int = ...): ... + def truncate(self, size: Optional[Any] = ...): ... + def write(self, s): ... + def writelines(self, list): ... + def read(self, n: int = ...): ... + def readlines(self, sizehint: int = ...): ... + def readline(self, length: Optional[Any] = ...): ... + def flush(self): ... + def __next__(self): ... + +class IterI(IterIO): + sentinel: Any + def __new__(cls, func, sentinel: Union[Text, bytes] = ...): ... + closed: Any + def close(self): ... + def write(self, s): ... + def writelines(self, list): ... + def flush(self): ... + +class IterO(IterIO): + sentinel: Any + closed: Any + pos: Any + def __new__(cls, gen, sentinel: Union[Text, bytes] = ...): ... + def __iter__(self): ... + def close(self): ... + def seek(self, pos, mode: int = ...): ... + def read(self, n: int = ...): ... + def readline(self, length: Optional[Any] = ...): ... + def readlines(self, sizehint: int = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi new file mode 100644 index 0000000..46f1972 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/jsrouting.pyi @@ -0,0 +1,10 @@ +from typing import Any + +def dumps(*args): ... +def render_template(name_parts, rules, converters): ... +def generate_map(map, name: str = ...): ... +def generate_adapter(adapter, name: str = ..., map_name: str = ...): ... +def js_to_url_function(converter): ... +def NumberConverter_js_to_url(conv): ... + +js_to_url_functions: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi new file mode 100644 index 0000000..0734a24 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/limiter.pyi @@ -0,0 +1,7 @@ +from typing import Any + +class StreamLimitMiddleware: + app: Any + maximum_size: Any + def __init__(self, app, maximum_size=...): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi new file mode 100644 index 0000000..7fd7c6a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/lint.pyi @@ -0,0 +1,43 @@ +from typing import Any + +class WSGIWarning(Warning): ... +class HTTPWarning(Warning): ... + +def check_string(context, obj, stacklevel: int = ...): ... + +class InputStream: + def __init__(self, stream): ... + def read(self, *args): ... + def readline(self, *args): ... + def __iter__(self): ... + def close(self): ... + +class ErrorStream: + def __init__(self, stream): ... + def write(self, s): ... + def flush(self): ... + def writelines(self, seq): ... + def close(self): ... + +class GuardedWrite: + def __init__(self, write, chunks): ... + def __call__(self, s): ... + +class GuardedIterator: + closed: Any + headers_set: Any + chunks: Any + def __init__(self, iterator, headers_set, chunks): ... + def __iter__(self): ... + def next(self): ... + def close(self): ... + def __del__(self): ... + +class LintMiddleware: + app: Any + def __init__(self, app): ... + def check_environ(self, environ): ... + def check_start_response(self, status, headers, exc_info): ... + def check_headers(self, headers): ... + def check_iterator(self, app_iter): ... + def __call__(self, *args, **kwargs): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi new file mode 100644 index 0000000..601c4f1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/profiler.pyi @@ -0,0 +1,15 @@ +from typing import Any, Optional + +available: Any + +class MergeStream: + streams: Any + def __init__(self, *streams): ... + def write(self, data): ... + +class ProfilerMiddleware: + def __init__(self, app, stream: Optional[Any] = ..., sort_by=..., restrictions=..., profile_dir: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +def make_action(app_factory, hostname: str = ..., port: int = ..., threaded: bool = ..., processes: int = ..., + stream: Optional[Any] = ..., sort_by=..., restrictions=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi new file mode 100644 index 0000000..009ad2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/securecookie.pyi @@ -0,0 +1,28 @@ +from typing import Any, Optional +from hmac import new as hmac +from hashlib import sha1 as _default_hash +from werkzeug.contrib.sessions import ModificationTrackingDict + +class UnquoteError(Exception): ... + +class SecureCookie(ModificationTrackingDict): + hash_method: Any + serialization_method: Any + quote_base64: Any + secret_key: Any + new: Any + def __init__(self, data: Optional[Any] = ..., secret_key: Optional[Any] = ..., new: bool = ...): ... + @property + def should_save(self): ... + @classmethod + def quote(cls, value): ... + @classmethod + def unquote(cls, value): ... + def serialize(self, expires: Optional[Any] = ...): ... + @classmethod + def unserialize(cls, string, secret_key): ... + @classmethod + def load_cookie(cls, request, key: str = ..., secret_key: Optional[Any] = ...): ... + def save_cookie(self, response, key: str = ..., expires: Optional[Any] = ..., session_expires: Optional[Any] = ..., + max_age: Optional[Any] = ..., path: str = ..., domain: Optional[Any] = ..., secure: Optional[Any] = ..., + httponly: bool = ..., force: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi new file mode 100644 index 0000000..b4b4ec2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/sessions.pyi @@ -0,0 +1,57 @@ +from typing import Any, Optional, Text +from werkzeug.datastructures import CallbackDict + +def generate_key(salt: Optional[Any] = ...): ... + +class ModificationTrackingDict(CallbackDict): + modified: Any + def __init__(self, *args, **kwargs): ... + def copy(self): ... + def __copy__(self): ... + +class Session(ModificationTrackingDict): + sid: Any + new: Any + def __init__(self, data, sid, new: bool = ...): ... + @property + def should_save(self): ... + +class SessionStore: + session_class: Any + def __init__(self, session_class: Optional[Any] = ...): ... + def is_valid_key(self, key): ... + def generate_key(self, salt: Optional[Any] = ...): ... + def new(self): ... + def save(self, session): ... + def save_if_modified(self, session): ... + def delete(self, session): ... + def get(self, sid): ... + +class FilesystemSessionStore(SessionStore): + path: Any + filename_template: str + renew_missing: Any + mode: Any + def __init__(self, path: Optional[Any] = ..., filename_template: Text = ..., session_class: Optional[Any] = ..., + renew_missing: bool = ..., mode: int = ...): ... + def get_session_filename(self, sid): ... + def save(self, session): ... + def delete(self, session): ... + def get(self, sid): ... + def list(self): ... + +class SessionMiddleware: + app: Any + store: Any + cookie_name: Any + cookie_age: Any + cookie_expires: Any + cookie_path: Any + cookie_domain: Any + cookie_secure: Any + cookie_httponly: Any + environ_key: Any + def __init__(self, app, store, cookie_name: str = ..., cookie_age: Optional[Any] = ..., cookie_expires: Optional[Any] = ..., + cookie_path: str = ..., cookie_domain: Optional[Any] = ..., cookie_secure: Optional[Any] = ..., + cookie_httponly: bool = ..., environ_key: str = ...): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi new file mode 100644 index 0000000..860ebb7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/testtools.pyi @@ -0,0 +1,9 @@ +from typing import Any +from werkzeug.wrappers import Response + +class ContentAccessors: + def xml(self): ... + def lxml(self): ... + def json(self): ... + +class TestResponse(Response, ContentAccessors): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi new file mode 100644 index 0000000..683eda0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/contrib/wrappers.pyi @@ -0,0 +1,27 @@ +from typing import Any + +def is_known_charset(charset): ... + +class JSONRequestMixin: + def json(self): ... + +class ProtobufRequestMixin: + protobuf_check_initialization: Any + def parse_protobuf(self, proto_type): ... + +class RoutingArgsRequestMixin: + routing_args: Any + routing_vars: Any + +class ReverseSlashBehaviorRequestMixin: + def path(self): ... + def script_root(self): ... + +class DynamicCharsetRequestMixin: + default_charset: Any + def unknown_charset(self, charset): ... + def charset(self): ... + +class DynamicCharsetResponseMixin: + default_charset: Any + charset: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi new file mode 100644 index 0000000..f10665f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/datastructures.pyi @@ -0,0 +1,425 @@ +import collections +from typing import Any, Optional, Mapping, Dict, TypeVar, Callable, Union, overload, Text +from collections import Container, Iterable, MutableSet + +_K = TypeVar("_K") +_V = TypeVar("_V") +_R = TypeVar("_R") +_D = TypeVar("_D") + +def is_immutable(self): ... +def iter_multi_items(mapping): ... +def native_itermethods(names): ... + +class ImmutableListMixin: + def __hash__(self): ... + def __reduce_ex__(self, protocol): ... + def __delitem__(self, key): ... + def __delslice__(self, i, j): ... + def __iadd__(self, other): ... + __imul__: Any + def __setitem__(self, key, value): ... + def __setslice__(self, i, j, value): ... + def append(self, item): ... + remove: Any + def extend(self, iterable): ... + def insert(self, pos, value): ... + def pop(self, index: int = ...): ... + def reverse(self): ... + def sort(self, cmp: Optional[Any] = ..., key: Optional[Any] = ..., reverse: Optional[Any] = ...): ... + +class ImmutableList(ImmutableListMixin, list): ... + +class ImmutableDictMixin: + @classmethod + def fromkeys(cls, *args, **kwargs): ... + def __reduce_ex__(self, protocol): ... + def __hash__(self): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def update(self, *args, **kwargs): ... + def pop(self, key, default: Optional[Any] = ...): ... + def popitem(self): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def clear(self): ... + +class ImmutableMultiDictMixin(ImmutableDictMixin): + def __reduce_ex__(self, protocol): ... + def add(self, key, value): ... + def popitemlist(self): ... + def poplist(self, key): ... + def setlist(self, key, new_list): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + +class UpdateDictMixin: + on_update: Any + def setdefault(self, key, default: Optional[Any] = ...): ... + def pop(self, key, default=...): ... + __setitem__: Any + __delitem__: Any + clear: Any + popitem: Any + update: Any + +class TypeConversionDict(Dict[_K, _V]): + @overload + def get(self, key: _K, *, type: None = ...) -> Optional[_V]: ... + @overload + def get(self, key: _K, default: _D, type: None = ...) -> Union[_V, _D]: ... + @overload + def get(self, key: _K, *, type: Callable[[_V], _R]) -> Optional[_R]: ... + @overload + def get(self, key: _K, default: _D, type: Callable[[_V], _R]) -> Union[_R, _D]: ... + +class ImmutableTypeConversionDict(ImmutableDictMixin, TypeConversionDict[_K, _V]): + def copy(self) -> TypeConversionDict[_K, _V]: ... + def __copy__(self) -> ImmutableTypeConversionDict[_K, _V]: ... + +class ViewItems: + def __init__(self, multi_dict, method, repr_name, *a, **kw): ... + def __iter__(self): ... + +class MultiDict(TypeConversionDict): + def __init__(self, mapping: Optional[Any] = ...): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def add(self, key, value): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def setlist(self, key, new_list): ... + def setdefault(self, key, default: Optional[Any] = ...): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + def items(self, multi: bool = ...): ... + def lists(self): ... + def keys(self): ... + __iter__: Any + def values(self): ... + def listvalues(self): ... + def copy(self): ... + def deepcopy(self, memo: Optional[Any] = ...): ... + def to_dict(self, flat: bool = ...): ... + def update(self, other_dict): ... + def pop(self, key, default=...): ... + def popitem(self): ... + def poplist(self, key): ... + def popitemlist(self): ... + def __copy__(self): ... + def __deepcopy__(self, memo): ... + +class _omd_bucket: + prev: Any + key: Any + value: Any + next: Any + def __init__(self, omd, key, value): ... + def unlink(self, omd): ... + +class OrderedMultiDict(MultiDict): + def __init__(self, mapping: Optional[Any] = ...): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + def __reduce_ex__(self, protocol): ... + def __getitem__(self, key): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + def keys(self): ... + __iter__: Any + def values(self): ... + def items(self, multi: bool = ...): ... + def lists(self): ... + def listvalues(self): ... + def add(self, key, value): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def setlist(self, key, new_list): ... + def setlistdefault(self, key, default_list: Optional[Any] = ...): ... + def update(self, mapping): ... + def poplist(self, key): ... + def pop(self, key, default=...): ... + def popitem(self): ... + def popitemlist(self): ... + +class Headers(collections.Mapping): + def __init__(self, defaults: Optional[Any] = ...): ... + def __getitem__(self, key, _get_mode: bool = ...): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + @overload + def get(self, key: str, *, type: None = ...) -> Optional[str]: ... + @overload + def get(self, key: str, default: _D, type: None = ...) -> Union[str, _D]: ... + @overload + def get(self, key: str, *, type: Callable[[str], _R]) -> Optional[_R]: ... + @overload + def get(self, key: str, default: _D, type: Callable[[str], _R]) -> Union[_R, _D]: ... + @overload + def get(self, key: str, *, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, *, type: None, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, *, type: Callable[[Any], _R], as_bytes: bool) -> Optional[_R]: ... + @overload + def get(self, key: str, default: Any, type: None, as_bytes: bool) -> Any: ... + @overload + def get(self, key: str, default: _D, type: Callable[[Any], _R], as_bytes: bool) -> Union[_R, _D]: ... + def getlist(self, key, type: Optional[Any] = ..., as_bytes: bool = ...): ... + def get_all(self, name): ... + def items(self, lower: bool = ...): ... + def keys(self, lower: bool = ...): ... + def values(self): ... + def extend(self, iterable): ... + def __delitem__(self, key: Any) -> None: ... + def remove(self, key): ... + def pop(self, **kwargs): ... + def popitem(self): ... + def __contains__(self, key): ... + has_key: Any + def __iter__(self): ... + def __len__(self): ... + def add(self, _key, _value, **kw): ... + def add_header(self, _key, _value, **_kw): ... + def clear(self): ... + def set(self, _key, _value, **kw): ... + def setdefault(self, key, value): ... + def __setitem__(self, key, value): ... + def to_list(self, charset: Text = ...): ... + def to_wsgi_list(self): ... + def copy(self): ... + def __copy__(self): ... + +class ImmutableHeadersMixin: + def __delitem__(self, key: str) -> None: ... + def __setitem__(self, key, value): ... + set: Any + def add(self, *args, **kwargs): ... + remove: Any + add_header: Any + def extend(self, iterable): ... + def insert(self, pos, value): ... + def pop(self, **kwargs): ... + def popitem(self): ... + def setdefault(self, key, default): ... + +class EnvironHeaders(ImmutableHeadersMixin, Headers): + environ: Any + def __init__(self, environ): ... + def __eq__(self, other): ... + def __getitem__(self, key, _get_mode: bool = ...): ... + def __len__(self): ... + def __iter__(self): ... + def copy(self): ... + +class CombinedMultiDict(ImmutableMultiDictMixin, MultiDict): + def __reduce_ex__(self, protocol): ... + dicts: Any + def __init__(self, dicts: Optional[Any] = ...): ... + @classmethod + def fromkeys(cls): ... + def __getitem__(self, key): ... + def get(self, key, default: Optional[Any] = ..., type: Optional[Any] = ...): ... + def getlist(self, key, type: Optional[Any] = ...): ... + def keys(self): ... + __iter__: Any + def items(self, multi: bool = ...): ... + def values(self): ... + def lists(self): ... + def listvalues(self): ... + def copy(self): ... + def to_dict(self, flat: bool = ...): ... + def __len__(self): ... + def __contains__(self, key): ... + has_key: Any + +class FileMultiDict(MultiDict): + def add_file(self, name, file, filename: Optional[Any] = ..., content_type: Optional[Any] = ...): ... + +class ImmutableDict(ImmutableDictMixin, dict): + def copy(self): ... + def __copy__(self): ... + +class ImmutableMultiDict(ImmutableMultiDictMixin, MultiDict): + def copy(self): ... + def __copy__(self): ... + +class ImmutableOrderedMultiDict(ImmutableMultiDictMixin, OrderedMultiDict): + def copy(self): ... + def __copy__(self): ... + +class Accept(ImmutableList): + provided: Any + def __init__(self, values=...): ... + def __getitem__(self, key): ... + def quality(self, key): ... + def __contains__(self, value): ... + def index(self, key): ... + def find(self, key): ... + def values(self): ... + def to_header(self): ... + def best_match(self, matches, default: Optional[Any] = ...): ... + @property + def best(self): ... + +class MIMEAccept(Accept): + @property + def accept_html(self): ... + @property + def accept_xhtml(self): ... + @property + def accept_json(self): ... + +class LanguageAccept(Accept): ... +class CharsetAccept(Accept): ... + +def cache_property(key, empty, type): ... + +class _CacheControl(UpdateDictMixin, dict): + no_cache: Any + no_store: Any + max_age: Any + no_transform: Any + on_update: Any + provided: Any + def __init__(self, values=..., on_update: Optional[Any] = ...): ... + def to_header(self): ... + +class RequestCacheControl(ImmutableDictMixin, _CacheControl): + max_stale: Any + min_fresh: Any + no_transform: Any + only_if_cached: Any + +class ResponseCacheControl(_CacheControl): + public: Any + private: Any + must_revalidate: Any + proxy_revalidate: Any + s_maxage: Any + +class CallbackDict(UpdateDictMixin, dict): + on_update: Any + def __init__(self, initial: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + +class HeaderSet(MutableSet): + on_update: Any + def __init__(self, headers: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def add(self, header): ... + def remove(self, header): ... + def update(self, iterable): ... + def discard(self, header): ... + def find(self, header): ... + def index(self, header): ... + def clear(self): ... + def as_set(self, preserve_casing: bool = ...): ... + def to_header(self): ... + def __getitem__(self, idx): ... + def __delitem__(self, idx): ... + def __setitem__(self, idx, value): ... + def __contains__(self, header): ... + def __len__(self): ... + def __iter__(self): ... + def __nonzero__(self): ... + +class ETags(Container, Iterable): + star_tag: Any + def __init__(self, strong_etags: Optional[Any] = ..., weak_etags: Optional[Any] = ..., star_tag: bool = ...): ... + def as_set(self, include_weak: bool = ...): ... + def is_weak(self, etag): ... + def contains_weak(self, etag): ... + def contains(self, etag): ... + def contains_raw(self, etag): ... + def to_header(self): ... + def __call__(self, etag: Optional[Any] = ..., data: Optional[Any] = ..., include_weak: bool = ...): ... + def __bool__(self): ... + __nonzero__: Any + def __iter__(self): ... + def __contains__(self, etag): ... + +class IfRange: + etag: Any + date: Any + def __init__(self, etag: Optional[Any] = ..., date: Optional[Any] = ...): ... + def to_header(self): ... + +class Range: + units: Any + ranges: Any + def __init__(self, units, ranges): ... + def range_for_length(self, length): ... + def make_content_range(self, length): ... + def to_header(self): ... + def to_content_range_header(self, length): ... + +class ContentRange: + on_update: Any + units: Optional[str] + start: Any + stop: Any + length: Any + def __init__(self, units: Optional[str], start, stop, length: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def set(self, start, stop, length: Optional[Any] = ..., units: Optional[str] = ...): ... + def unset(self) -> None: ... + def to_header(self): ... + def __nonzero__(self): ... + __bool__: Any + +class Authorization(ImmutableDictMixin, Dict[str, Any]): + type: str + def __init__(self, auth_type: str, data: Optional[Mapping[str, Any]] = ...) -> None: ... + @property + def username(self) -> Optional[str]: ... + @property + def password(self) -> Optional[str]: ... + @property + def realm(self) -> Optional[str]: ... + @property + def nonce(self) -> Optional[str]: ... + @property + def uri(self) -> Optional[str]: ... + @property + def nc(self) -> Optional[str]: ... + @property + def cnonce(self) -> Optional[str]: ... + @property + def response(self) -> Optional[str]: ... + @property + def opaque(self) -> Optional[str]: ... + @property + def qop(self) -> Optional[str]: ... + +class WWWAuthenticate(UpdateDictMixin, dict): + on_update: Any + def __init__(self, auth_type: Optional[Any] = ..., values: Optional[Any] = ..., on_update: Optional[Any] = ...): ... + def set_basic(self, realm: str = ...): ... + def set_digest(self, realm, nonce, qop=..., opaque: Optional[Any] = ..., algorithm: Optional[Any] = ..., + stale: bool = ...): ... + def to_header(self): ... + @staticmethod + def auth_property(name, doc: Optional[Any] = ...): ... + type: Any + realm: Any + domain: Any + nonce: Any + opaque: Any + algorithm: Any + qop: Any + stale: Any + +class FileStorage: + name: Any + stream: Any + filename: Any + headers: Any + def __init__(self, stream: Optional[Any] = ..., filename: Optional[Any] = ..., name: Optional[Any] = ..., + content_type: Optional[Any] = ..., content_length: Optional[Any] = ..., headers: Optional[Any] = ...): ... + @property + def content_type(self): ... + @property + def content_length(self): ... + @property + def mimetype(self): ... + @property + def mimetype_params(self): ... + def save(self, dst, buffer_size: int = ...): ... + def close(self): ... + def __nonzero__(self): ... + __bool__: Any + def __getattr__(self, name): ... + def __iter__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi new file mode 100644 index 0000000..d920ed0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/__init__.pyi @@ -0,0 +1,41 @@ +from typing import Any, Optional +from werkzeug.wrappers import BaseRequest as Request, BaseResponse as Response + +PIN_TIME: Any + +def hash_pin(pin): ... +def get_machine_id(): ... + +class _ConsoleFrame: + console: Any + id: Any + def __init__(self, namespace): ... + +def get_pin_and_cookie_name(app): ... + +class DebuggedApplication: + app: Any + evalex: Any + frames: Any + tracebacks: Any + request_key: Any + console_path: Any + console_init_func: Any + show_hidden_frames: Any + secret: Any + pin_logging: Any + pin: Any + def __init__(self, app, evalex: bool = ..., request_key: str = ..., console_path: str = ..., + console_init_func: Optional[Any] = ..., show_hidden_frames: bool = ..., lodgeit_url: Optional[Any] = ..., + pin_security: bool = ..., pin_logging: bool = ...): ... + @property + def pin_cookie_name(self): ... + def debug_application(self, environ, start_response): ... + def execute_command(self, request, command, frame): ... + def display_console(self, request): ... + def paste_traceback(self, request, traceback): ... + def get_resource(self, request, filename): ... + def check_pin_trust(self, environ): ... + def pin_auth(self, request): ... + def log_pin_request(self): ... + def __call__(self, environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi new file mode 100644 index 0000000..0323377 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/console.pyi @@ -0,0 +1,44 @@ +from typing import Any, Optional +import code + +class HTMLStringO: + def __init__(self): ... + def isatty(self): ... + def close(self): ... + def flush(self): ... + def seek(self, n, mode: int = ...): ... + def readline(self): ... + def reset(self): ... + def write(self, x): ... + def writelines(self, x): ... + +class ThreadedStream: + @staticmethod + def push(): ... + @staticmethod + def fetch(): ... + @staticmethod + def displayhook(obj): ... + def __setattr__(self, name, value): ... + def __dir__(self): ... + def __getattribute__(self, name): ... + +class _ConsoleLoader: + def __init__(self): ... + def register(self, code, source): ... + def get_source_by_code(self, code): ... + +class _InteractiveConsole(code.InteractiveInterpreter): + globals: Any + more: Any + buffer: Any + def __init__(self, globals, locals): ... + def runsource(self, source): ... + def runcode(self, code): ... + def showtraceback(self): ... + def showsyntaxerror(self, filename: Optional[Any] = ...): ... + def write(self, data): ... + +class Console: + def __init__(self, globals: Optional[Any] = ..., locals: Optional[Any] = ...): ... + def eval(self, code): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi new file mode 100644 index 0000000..4955919 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/repr.pyi @@ -0,0 +1,33 @@ +from typing import Any, Optional + +deque: Any +missing: Any +RegexType: Any +HELP_HTML: Any +OBJECT_DUMP_HTML: Any + +def debug_repr(obj): ... +def dump(obj=...): ... + +class _Helper: + def __call__(self, topic: Optional[Any] = ...): ... + +helper: Any + +class DebugReprGenerator: + def __init__(self): ... + list_repr: Any + tuple_repr: Any + set_repr: Any + frozenset_repr: Any + deque_repr: Any + def regex_repr(self, obj): ... + def string_repr(self, obj, limit: int = ...): ... + def dict_repr(self, d, recursive, limit: int = ...): ... + def object_repr(self, obj): ... + def dispatch_repr(self, obj, recursive): ... + def fallback_repr(self): ... + def repr(self, obj): ... + def dump_object(self, obj): ... + def dump_locals(self, d): ... + def render_object_dump(self, items, title, repr: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi new file mode 100644 index 0000000..90beed9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/debug/tbtools.pyi @@ -0,0 +1,63 @@ +from typing import Any, Optional + +UTF8_COOKIE: Any +system_exceptions: Any +HEADER: Any +FOOTER: Any +PAGE_HTML: Any +CONSOLE_HTML: Any +SUMMARY_HTML: Any +FRAME_HTML: Any +SOURCE_LINE_HTML: Any + +def render_console_html(secret, evalex_trusted: bool = ...): ... +def get_current_traceback(ignore_system_exceptions: bool = ..., show_hidden_frames: bool = ..., skip: int = ...): ... + +class Line: + lineno: Any + code: Any + in_frame: Any + current: Any + def __init__(self, lineno, code): ... + def classes(self): ... + def render(self): ... + +class Traceback: + exc_type: Any + exc_value: Any + exception_type: Any + frames: Any + def __init__(self, exc_type, exc_value, tb): ... + def filter_hidden_frames(self): ... + def is_syntax_error(self): ... + def exception(self): ... + def log(self, logfile: Optional[Any] = ...): ... + def paste(self): ... + def render_summary(self, include_title: bool = ...): ... + def render_full(self, evalex: bool = ..., secret: Optional[Any] = ..., evalex_trusted: bool = ...): ... + def generate_plaintext_traceback(self): ... + def plaintext(self): ... + id: Any + +class Frame: + lineno: Any + function_name: Any + locals: Any + globals: Any + filename: Any + module: Any + loader: Any + code: Any + hide: Any + info: Any + def __init__(self, exc_type, exc_value, tb): ... + def render(self): ... + def render_line_context(self): ... + def get_annotated_lines(self): ... + def eval(self, code, mode: str = ...): ... + def sourcelines(self): ... + def get_context_lines(self, context: int = ...): ... + @property + def current_line(self): ... + def console(self): ... + id: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi new file mode 100644 index 0000000..3686046 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/exceptions.pyi @@ -0,0 +1,161 @@ +from typing import Any, Dict, Tuple, List, Text, NoReturn, Optional, Protocol, Type, Union, Iterable + +from wsgiref.types import WSGIEnvironment, StartResponse +from werkzeug.wrappers import Response + +class _EnvironContainer(Protocol): + @property + def environ(self) -> WSGIEnvironment: ... + +class HTTPException(Exception): + code: Optional[int] + description: Optional[str] + response: Optional[Response] + def __init__(self, description: Optional[str] = ..., response: Optional[Response] = ...) -> None: ... + @classmethod + def wrap(cls, exception: Type[Exception], name: Optional[str] = ...) -> Any: ... + @property + def name(self) -> str: ... + def get_description(self, environ: Optional[WSGIEnvironment] = ...) -> Text: ... + def get_body(self, environ: Optional[WSGIEnvironment] = ...) -> Text: ... + def get_headers(self, environ: Optional[WSGIEnvironment] = ...) -> List[Tuple[str, str]]: ... + def get_response(self, environ: Optional[Union[WSGIEnvironment, _EnvironContainer]] = ...) -> Response: ... + def __call__(self, environ: WSGIEnvironment, start_response: StartResponse) -> Iterable[bytes]: ... + +default_exceptions: Dict[int, Type[HTTPException]] + +class BadRequest(HTTPException): + code: int + description: str + +class ClientDisconnected(BadRequest): ... +class SecurityError(BadRequest): ... +class BadHost(BadRequest): ... + +class Unauthorized(HTTPException): + code: int + description: str + +class Forbidden(HTTPException): + code: int + description: str + +class NotFound(HTTPException): + code: int + description: str + +class MethodNotAllowed(HTTPException): + code: int + description: str + valid_methods: Any + def __init__(self, valid_methods: Optional[Any] = ..., description: Optional[Any] = ...): ... + def get_headers(self, environ): ... + +class NotAcceptable(HTTPException): + code: int + description: str + +class RequestTimeout(HTTPException): + code: int + description: str + +class Conflict(HTTPException): + code: int + description: str + +class Gone(HTTPException): + code: int + description: str + +class LengthRequired(HTTPException): + code: int + description: str + +class PreconditionFailed(HTTPException): + code: int + description: str + +class RequestEntityTooLarge(HTTPException): + code: int + description: str + +class RequestURITooLarge(HTTPException): + code: int + description: str + +class UnsupportedMediaType(HTTPException): + code: int + description: str + +class RequestedRangeNotSatisfiable(HTTPException): + code: int + description: str + length: Any + units: str + def __init__(self, length: Optional[Any] = ..., units: str = ..., description: Optional[Any] = ...): ... + def get_headers(self, environ): ... + +class ExpectationFailed(HTTPException): + code: int + description: str + +class ImATeapot(HTTPException): + code: int + description: str + +class UnprocessableEntity(HTTPException): + code: int + description: str + +class Locked(HTTPException): + code: int + description: str + +class PreconditionRequired(HTTPException): + code: int + description: str + +class TooManyRequests(HTTPException): + code: int + description: str + +class RequestHeaderFieldsTooLarge(HTTPException): + code: int + description: str + +class UnavailableForLegalReasons(HTTPException): + code: int + description: str + +class InternalServerError(HTTPException): + code: int + description: str + +class NotImplemented(HTTPException): + code: int + description: str + +class BadGateway(HTTPException): + code: int + description: str + +class ServiceUnavailable(HTTPException): + code: int + description: str + +class GatewayTimeout(HTTPException): + code: int + description: str + +class HTTPVersionNotSupported(HTTPException): + code: int + description: str + +class Aborter: + mapping: Any + def __init__(self, mapping: Optional[Any] = ..., extra: Optional[Any] = ...) -> None: ... + def __call__(self, code: Union[int, Response], *args: Any, **kwargs: Any) -> NoReturn: ... + +def abort(status: Union[int, Response], *args: Any, **kwargs: Any) -> NoReturn: ... + +class BadRequestKeyError(BadRequest, KeyError): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi new file mode 100644 index 0000000..58695fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/filesystem.pyi @@ -0,0 +1,7 @@ +from typing import Any + +has_likely_buggy_unicode_filesystem: Any + +class BrokenFilesystemWarning(RuntimeWarning, UnicodeWarning): ... + +def get_filesystem_encoding(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi new file mode 100644 index 0000000..d0e6a73 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/formparser.pyi @@ -0,0 +1,45 @@ +from typing import Any, Optional, Text + +def default_stream_factory(total_content_length, filename, content_type, content_length: Optional[Any] = ...): ... +def parse_form_data(environ, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., max_content_length: Optional[Any] = ..., + cls: Optional[Any] = ..., silent: bool = ...): ... +def exhaust_stream(f): ... + +class FormDataParser: + stream_factory: Any + charset: Text + errors: Text + max_form_memory_size: Any + max_content_length: Any + cls: Any + silent: Any + def __init__(self, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., max_content_length: Optional[Any] = ..., cls: Optional[Any] = ..., + silent: bool = ...): ... + def get_parse_func(self, mimetype, options): ... + def parse_from_environ(self, environ): ... + def parse(self, stream, mimetype, content_length, options: Optional[Any] = ...): ... + parse_functions: Any + +def is_valid_multipart_boundary(boundary): ... +def parse_multipart_headers(iterable): ... + +class MultiPartParser: + charset: Text + errors: Text + max_form_memory_size: Any + stream_factory: Any + cls: Any + buffer_size: Any + def __init__(self, stream_factory: Optional[Any] = ..., charset: Text = ..., errors: Text = ..., + max_form_memory_size: Optional[Any] = ..., cls: Optional[Any] = ..., buffer_size=...): ... + def fail(self, message): ... + def get_part_encoding(self, headers): ... + def get_part_charset(self, headers) -> Text: ... + def start_file_streaming(self, filename, headers, total_content_length): ... + def in_memory_threshold_reached(self, bytes): ... + def validate_boundary(self, boundary): ... + def parse_lines(self, file, boundary, content_length, cap_at_buffer: bool = ...): ... + def parse_parts(self, file, boundary, content_length): ... + def parse(self, file, boundary, content_length): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi new file mode 100644 index 0000000..2e078ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/http.pyi @@ -0,0 +1,92 @@ +import sys +from datetime import datetime, timedelta +from typing import ( + Dict, Text, Union, Tuple, Any, Optional, Mapping, Iterable, Callable, List, Type, + TypeVar, Protocol, overload, SupportsInt, +) +from wsgiref.types import WSGIEnvironment + +from .datastructures import ( + Headers, Accept, RequestCacheControl, HeaderSet, Authorization, WWWAuthenticate, + IfRange, Range, ContentRange, ETags, TypeConversionDict, +) + +if sys.version_info < (3,): + _Str = TypeVar('_Str', str, unicode) + _ToBytes = Union[bytes, bytearray, buffer, unicode] + _ETagData = Union[str, unicode, bytearray, buffer, memoryview] +else: + _Str = str + _ToBytes = Union[bytes, bytearray, memoryview, str] + _ETagData = Union[bytes, bytearray, memoryview] + +_T = TypeVar("_T") +_U = TypeVar("_U") + +HTTP_STATUS_CODES: Dict[int, str] + +def wsgi_to_bytes(data: Union[bytes, Text]) -> bytes: ... +def bytes_to_wsgi(data: bytes) -> str: ... +def quote_header_value(value: Any, extra_chars: str = ..., allow_token: bool = ...) -> str: ... +def unquote_header_value(value: _Str, is_filename: bool = ...) -> _Str: ... +def dump_options_header(header: Optional[_Str], options: Mapping[_Str, Any]) -> _Str: ... +def dump_header(iterable: Union[Iterable[Any], Dict[_Str, Any]], allow_token: bool = ...) -> _Str: ... +def parse_list_header(value: _Str) -> List[_Str]: ... +@overload +def parse_dict_header(value: Union[bytes, Text]) -> Dict[Text, Optional[Text]]: ... +@overload +def parse_dict_header(value: Union[bytes, Text], cls: Type[_T]) -> _T: ... +@overload +def parse_options_header(value: None, multiple: bool = ...) -> Tuple[str, Dict[str, Optional[str]]]: ... +@overload +def parse_options_header(value: _Str) -> Tuple[_Str, Dict[_Str, Optional[_Str]]]: ... +# actually returns Tuple[_Str, Dict[_Str, Optional[_Str]], ...] +@overload +def parse_options_header(value: _Str, multiple: bool = ...) -> Tuple[Any, ...]: ... +@overload +def parse_accept_header(value: Optional[Text]) -> Accept: ... +@overload +def parse_accept_header(value: Optional[_Str], cls: Callable[[Optional[_Str]], _T]) -> _T: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], + on_update: Optional[Callable[[RequestCacheControl], Any]] = ...) -> RequestCacheControl: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], on_update: _T, + cls: Callable[[Dict[Text, Optional[Text]], _T], _U]) -> _U: ... +@overload +def parse_cache_control_header(value: Union[None, bytes, Text], *, + cls: Callable[[Dict[Text, Optional[Text]], None], _U]) -> _U: ... +def parse_set_header(value: Text, on_update: Optional[Callable[[HeaderSet], Any]] = ...) -> HeaderSet: ... +def parse_authorization_header(value: Union[None, bytes, Text]) -> Optional[Authorization]: ... +def parse_www_authenticate_header(value: Union[None, bytes, Text], + on_update: Optional[Callable[[WWWAuthenticate], Any]] = ...) -> WWWAuthenticate: ... +def parse_if_range_header(value: Optional[Text]) -> IfRange: ... +def parse_range_header(value: Optional[Text], make_inclusive: bool = ...) -> Optional[Range]: ... +def parse_content_range_header(value: Optional[Text], + on_update: Optional[Callable[[ContentRange], Any]] = ...) -> Optional[ContentRange]: ... +def quote_etag(etag: _Str, weak: bool = ...) -> _Str: ... +def unquote_etag(etag: Optional[_Str]) -> Tuple[Optional[_Str], Optional[_Str]]: ... +def parse_etags(value: Optional[Text]) -> ETags: ... +def generate_etag(data: _ETagData) -> str: ... +def parse_date(value: Optional[str]) -> Optional[datetime]: ... +def cookie_date(expires: Union[None, float, datetime] = ...) -> str: ... +def http_date(timestamp: Union[None, float, datetime] = ...) -> str: ... +def parse_age(value: Optional[SupportsInt] = ...) -> Optional[timedelta]: ... +def dump_age(age: Union[None, timedelta, SupportsInt]) -> Optional[str]: ... +def is_resource_modified(environ: WSGIEnvironment, etag: Optional[Text] = ..., data: Optional[_ETagData] = ..., + last_modified: Union[None, Text, datetime] = ..., ignore_if_range: bool = ...) -> bool: ... +def remove_entity_headers(headers: Union[List[Tuple[Text, Text]], Headers], allowed: Iterable[Text] = ...) -> None: ... +def remove_hop_by_hop_headers(headers: Union[List[Tuple[Text, Text]], Headers]) -> None: ... +def is_entity_header(header: Text) -> bool: ... +def is_hop_by_hop_header(header: Text) -> bool: ... +@overload +def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., + errors: Text = ...) -> TypeConversionDict: ... +@overload +def parse_cookie(header: Union[None, WSGIEnvironment, Text, bytes], charset: Text = ..., + errors: Text = ..., cls: Optional[Callable[[Iterable[Tuple[Text, Text]]], _T]] = ...) -> _T: ... +def dump_cookie(key: _ToBytes, value: _ToBytes = ..., max_age: Union[None, float, timedelta] = ..., + expires: Union[None, Text, float, datetime] = ..., path: Union[None, tuple, str, bytes] = ..., + domain: Union[None, str, bytes] = ..., secure: bool = ..., httponly: bool = ..., charset: Text = ..., + sync_expires: bool = ...) -> str: ... +def is_byte_range_valid(start: Optional[int], stop: Optional[int], length: Optional[int]) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi new file mode 100644 index 0000000..0fe642d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/local.pyi @@ -0,0 +1,100 @@ +from typing import Any, Optional + +def release_local(local): ... + +class Local: + def __init__(self): ... + def __iter__(self): ... + def __call__(self, proxy): ... + def __release_local__(self): ... + def __getattr__(self, name): ... + def __setattr__(self, name, value): ... + def __delattr__(self, name): ... + +class LocalStack: + def __init__(self): ... + def __release_local__(self): ... + def _get__ident_func__(self): ... + def _set__ident_func__(self, value): ... + __ident_func__: Any + def __call__(self): ... + def push(self, obj): ... + def pop(self): ... + @property + def top(self): ... + +class LocalManager: + locals: Any + ident_func: Any + def __init__(self, locals: Optional[Any] = ..., ident_func: Optional[Any] = ...): ... + def get_ident(self): ... + def cleanup(self): ... + def make_middleware(self, app): ... + def middleware(self, func): ... + +class LocalProxy: + def __init__(self, local, name: Optional[Any] = ...): ... + @property + def __dict__(self): ... + def __bool__(self): ... + def __unicode__(self): ... + def __dir__(self): ... + def __getattr__(self, name): ... + def __setitem__(self, key, value): ... + def __delitem__(self, key): ... + __getslice__: Any + def __setslice__(self, i, j, seq): ... + def __delslice__(self, i, j): ... + __setattr__: Any + __delattr__: Any + __lt__: Any + __le__: Any + __eq__: Any + __ne__: Any + __gt__: Any + __ge__: Any + __cmp__: Any + __hash__: Any + __call__: Any + __len__: Any + __getitem__: Any + __iter__: Any + __contains__: Any + __add__: Any + __sub__: Any + __mul__: Any + __floordiv__: Any + __mod__: Any + __divmod__: Any + __pow__: Any + __lshift__: Any + __rshift__: Any + __and__: Any + __xor__: Any + __or__: Any + __div__: Any + __truediv__: Any + __neg__: Any + __pos__: Any + __abs__: Any + __invert__: Any + __complex__: Any + __int__: Any + __long__: Any + __float__: Any + __oct__: Any + __hex__: Any + __index__: Any + __coerce__: Any + __enter__: Any + __exit__: Any + __radd__: Any + __rsub__: Any + __rmul__: Any + __rdiv__: Any + __rtruediv__: Any + __rfloordiv__: Any + __rmod__: Any + __rdivmod__: Any + __copy__: Any + __deepcopy__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi new file mode 100644 index 0000000..f666929 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/posixemulation.pyi @@ -0,0 +1,7 @@ +from typing import Any +from ._compat import to_unicode as to_unicode +from .filesystem import get_filesystem_encoding as get_filesystem_encoding + +can_rename_open_file: Any + +def rename(src, dst): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi new file mode 100644 index 0000000..347af55 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/routing.pyi @@ -0,0 +1,189 @@ +from typing import Any, Optional, Text +from werkzeug.exceptions import HTTPException + +def parse_converter_args(argstr): ... +def parse_rule(rule): ... + +class RoutingException(Exception): ... + +class RequestRedirect(HTTPException, RoutingException): + code: Any + new_url: Any + def __init__(self, new_url): ... + def get_response(self, environ): ... + +class RequestSlash(RoutingException): ... + +class RequestAliasRedirect(RoutingException): + matched_values: Any + def __init__(self, matched_values): ... + +class BuildError(RoutingException, LookupError): + endpoint: Any + values: Any + method: Any + adapter: Optional[MapAdapter] + def __init__(self, endpoint, values, method, adapter: Optional[MapAdapter] = ...) -> None: ... + @property + def suggested(self) -> Optional[Rule]: ... + def closest_rule(self, adapter: Optional[MapAdapter]) -> Optional[Rule]: ... + +class ValidationError(ValueError): ... + +class RuleFactory: + def get_rules(self, map): ... + +class Subdomain(RuleFactory): + subdomain: Any + rules: Any + def __init__(self, subdomain, rules): ... + def get_rules(self, map): ... + +class Submount(RuleFactory): + path: Any + rules: Any + def __init__(self, path, rules): ... + def get_rules(self, map): ... + +class EndpointPrefix(RuleFactory): + prefix: Any + rules: Any + def __init__(self, prefix, rules): ... + def get_rules(self, map): ... + +class RuleTemplate: + rules: Any + def __init__(self, rules): ... + def __call__(self, *args, **kwargs): ... + +class RuleTemplateFactory(RuleFactory): + rules: Any + context: Any + def __init__(self, rules, context): ... + def get_rules(self, map): ... + +class Rule(RuleFactory): + rule: Any + is_leaf: Any + map: Any + strict_slashes: Any + subdomain: Any + host: Any + defaults: Any + build_only: Any + alias: Any + methods: Any + endpoint: Any + redirect_to: Any + arguments: Any + def __init__(self, string, defaults: Optional[Any] = ..., subdomain: Optional[Any] = ..., methods: Optional[Any] = ..., + build_only: bool = ..., endpoint: Optional[Any] = ..., strict_slashes: Optional[Any] = ..., + redirect_to: Optional[Any] = ..., alias: bool = ..., host: Optional[Any] = ...): ... + def empty(self): ... + def get_empty_kwargs(self): ... + def get_rules(self, map): ... + def refresh(self): ... + def bind(self, map, rebind: bool = ...): ... + def get_converter(self, variable_name, converter_name, args, kwargs): ... + def compile(self): ... + def match(self, path, method: Optional[Any] = ...): ... + def build(self, values, append_unknown: bool = ...): ... + def provides_defaults_for(self, rule): ... + def suitable_for(self, values, method: Optional[Any] = ...): ... + def match_compare_key(self): ... + def build_compare_key(self): ... + def __eq__(self, other): ... + def __ne__(self, other): ... + +class BaseConverter: + regex: Any + weight: Any + map: Any + def __init__(self, map): ... + def to_python(self, value): ... + def to_url(self, value): ... + +class UnicodeConverter(BaseConverter): + regex: Any + def __init__(self, map, minlength: int = ..., maxlength: Optional[Any] = ..., length: Optional[Any] = ...): ... + +class AnyConverter(BaseConverter): + regex: Any + def __init__(self, map, *items): ... + +class PathConverter(BaseConverter): + regex: Any + weight: Any + +class NumberConverter(BaseConverter): + weight: Any + fixed_digits: Any + min: Any + max: Any + def __init__(self, map, fixed_digits: int = ..., min: Optional[Any] = ..., max: Optional[Any] = ...): ... + def to_python(self, value): ... + def to_url(self, value): ... + +class IntegerConverter(NumberConverter): + regex: Any + num_convert: Any + +class FloatConverter(NumberConverter): + regex: Any + num_convert: Any + def __init__(self, map, min: Optional[Any] = ..., max: Optional[Any] = ...): ... + +class UUIDConverter(BaseConverter): + regex: Any + def to_python(self, value): ... + def to_url(self, value): ... + +DEFAULT_CONVERTERS: Any + +class Map: + default_converters: Any + default_subdomain: Any + charset: Text + encoding_errors: Text + strict_slashes: Any + redirect_defaults: Any + host_matching: Any + converters: Any + sort_parameters: Any + sort_key: Any + def __init__(self, rules: Optional[Any] = ..., default_subdomain: str = ..., charset: Text = ..., + strict_slashes: bool = ..., redirect_defaults: bool = ..., converters: Optional[Any] = ..., + sort_parameters: bool = ..., sort_key: Optional[Any] = ..., encoding_errors: Text = ..., + host_matching: bool = ...): ... + def is_endpoint_expecting(self, endpoint, *arguments): ... + def iter_rules(self, endpoint: Optional[Any] = ...): ... + def add(self, rulefactory): ... + def bind(self, server_name, script_name: Optional[Any] = ..., subdomain: Optional[Any] = ..., url_scheme: str = ..., + default_method: str = ..., path_info: Optional[Any] = ..., query_args: Optional[Any] = ...): ... + def bind_to_environ(self, environ, server_name: Optional[Any] = ..., subdomain: Optional[Any] = ...): ... + def update(self): ... + +class MapAdapter: + map: Any + server_name: Any + script_name: Any + subdomain: Any + url_scheme: Any + path_info: Any + default_method: Any + query_args: Any + def __init__(self, map, server_name, script_name, subdomain, url_scheme, path_info, default_method, + query_args: Optional[Any] = ...): ... + def dispatch(self, view_func, path_info: Optional[Any] = ..., method: Optional[Any] = ..., + catch_http_exceptions: bool = ...): ... + def match(self, path_info: Optional[Any] = ..., method: Optional[Any] = ..., return_rule: bool = ..., + query_args: Optional[Any] = ...): ... + def test(self, path_info: Optional[Any] = ..., method: Optional[Any] = ...): ... + def allowed_methods(self, path_info: Optional[Any] = ...): ... + def get_host(self, domain_part): ... + def get_default_redirect(self, rule, method, values, query_args): ... + def encode_query_args(self, query_args): ... + def make_redirect_url(self, path_info, query_args: Optional[Any] = ..., domain_part: Optional[Any] = ...): ... + def make_alias_redirect_url(self, path, endpoint, values, method, query_args): ... + def build(self, endpoint, values: Optional[Any] = ..., method: Optional[Any] = ..., force_external: bool = ..., + append_unknown: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi new file mode 100644 index 0000000..b9db97a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/script.pyi @@ -0,0 +1,14 @@ +from typing import Any, Optional + +argument_types: Any +converters: Any + +def run(namespace: Optional[Any] = ..., action_prefix: str = ..., args: Optional[Any] = ...): ... +def fail(message, code: int = ...): ... +def find_actions(namespace, action_prefix): ... +def print_usage(actions): ... +def analyse_action(func): ... +def make_shell(init_func: Optional[Any] = ..., banner: Optional[Any] = ..., use_ipython: bool = ...): ... +def make_runserver(app_factory, hostname: str = ..., port: int = ..., use_reloader: bool = ..., use_debugger: bool = ..., + use_evalex: bool = ..., threaded: bool = ..., processes: int = ..., static_files: Optional[Any] = ..., + extra_files: Optional[Any] = ..., ssl_context: Optional[Any] = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi new file mode 100644 index 0000000..fcb2652 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/security.pyi @@ -0,0 +1,12 @@ +from typing import Any, Optional + +SALT_CHARS: Any +DEFAULT_PBKDF2_ITERATIONS: Any + +def pbkdf2_hex(data, salt, iterations=..., keylen: Optional[Any] = ..., hashfunc: Optional[Any] = ...): ... +def pbkdf2_bin(data, salt, iterations=..., keylen: Optional[Any] = ..., hashfunc: Optional[Any] = ...): ... +def safe_str_cmp(a, b): ... +def gen_salt(length): ... +def generate_password_hash(password, method: str = ..., salt_length: int = ...): ... +def check_password_hash(pwhash, password): ... +def safe_join(directory, filename): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi new file mode 100644 index 0000000..54bce97 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/serving.pyi @@ -0,0 +1,93 @@ +import sys +from typing import Any, Optional + +if sys.version_info < (3,): + from SocketServer import ThreadingMixIn, ForkingMixIn + from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler +else: + from socketserver import ThreadingMixIn, ForkingMixIn + from http.server import HTTPServer, BaseHTTPRequestHandler + +class _SslDummy: + def __getattr__(self, name): ... + +ssl: Any +LISTEN_QUEUE: Any +can_open_by_fd: Any + +class WSGIRequestHandler(BaseHTTPRequestHandler): + @property + def server_version(self): ... + def make_environ(self): ... + environ: Any + close_connection: Any + def run_wsgi(self): ... + def handle(self): ... + def initiate_shutdown(self): ... + def connection_dropped(self, error, environ: Optional[Any] = ...): ... + raw_requestline: Any + def handle_one_request(self): ... + def send_response(self, code, message: Optional[Any] = ...): ... + def version_string(self): ... + def address_string(self): ... + def port_integer(self): ... + def log_request(self, code: object = ..., size: object = ...) -> None: ... + def log_error(self, *args): ... + def log_message(self, format, *args): ... + def log(self, type, message, *args): ... + +BaseRequestHandler: Any + +def generate_adhoc_ssl_pair(cn: Optional[Any] = ...): ... +def make_ssl_devcert(base_path, host: Optional[Any] = ..., cn: Optional[Any] = ...): ... +def generate_adhoc_ssl_context(): ... +def load_ssl_context(cert_file, pkey_file: Optional[Any] = ..., protocol: Optional[Any] = ...): ... + +class _SSLContext: + def __init__(self, protocol): ... + def load_cert_chain(self, certfile, keyfile: Optional[Any] = ..., password: Optional[Any] = ...): ... + def wrap_socket(self, sock, **kwargs): ... + +def is_ssl_error(error: Optional[Any] = ...): ... +def select_ip_version(host, port): ... + +class BaseWSGIServer(HTTPServer): + multithread: Any + multiprocess: Any + request_queue_size: Any + address_family: Any + app: Any + passthrough_errors: Any + shutdown_signal: Any + host: Any + port: Any + socket: Any + server_address: Any + ssl_context: Any + def __init__(self, host, port, app, handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... + def log(self, type, message, *args): ... + def serve_forever(self): ... + def handle_error(self, request, client_address): ... + def get_request(self): ... + +class ThreadedWSGIServer(ThreadingMixIn, BaseWSGIServer): + multithread: Any + daemon_threads: Any + +class ForkingWSGIServer(ForkingMixIn, BaseWSGIServer): + multiprocess: Any + max_children: Any + def __init__(self, host, port, app, processes: int = ..., handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... + +def make_server(host: Optional[Any] = ..., port: Optional[Any] = ..., app: Optional[Any] = ..., threaded: bool = ..., + processes: int = ..., request_handler: Optional[Any] = ..., passthrough_errors: bool = ..., + ssl_context: Optional[Any] = ..., fd: Optional[Any] = ...): ... +def is_running_from_reloader(): ... +def run_simple(hostname, port, application, use_reloader: bool = ..., use_debugger: bool = ..., use_evalex: bool = ..., + extra_files: Optional[Any] = ..., reloader_interval: int = ..., reloader_type: str = ..., threaded: bool = ..., + processes: int = ..., request_handler: Optional[Any] = ..., static_files: Optional[Any] = ..., + passthrough_errors: bool = ..., ssl_context: Optional[Any] = ...): ... +def run_with_reloader(*args, **kwargs): ... +def main(): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi new file mode 100644 index 0000000..c67189e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/test.pyi @@ -0,0 +1,94 @@ +import sys +from typing import Any, Optional, Text + +if sys.version_info < (3,): + from urllib2 import Request as U2Request + from cookielib import CookieJar +else: + from urllib.request import Request as U2Request + from http.cookiejar import CookieJar + +def stream_encode_multipart(values, use_tempfile: int = ..., threshold=..., boundary: Optional[Any] = ..., + charset: Text = ...): ... +def encode_multipart(values, boundary: Optional[Any] = ..., charset: Text = ...): ... +def File(fd, filename: Optional[Any] = ..., mimetype: Optional[Any] = ...): ... + +class _TestCookieHeaders: + headers: Any + def __init__(self, headers): ... + def getheaders(self, name): ... + def get_all(self, name, default: Optional[Any] = ...): ... + +class _TestCookieResponse: + headers: Any + def __init__(self, headers): ... + def info(self): ... + +class _TestCookieJar(CookieJar): + def inject_wsgi(self, environ): ... + def extract_wsgi(self, environ, headers): ... + +class EnvironBuilder: + server_protocol: Any + wsgi_version: Any + request_class: Any + charset: Text + path: Any + base_url: Any + query_string: Any + args: Any + method: Any + headers: Any + content_type: Any + errors_stream: Any + multithread: Any + multiprocess: Any + run_once: Any + environ_base: Any + environ_overrides: Any + input_stream: Any + content_length: Any + closed: Any + def __init__(self, path: str = ..., base_url: Optional[Any] = ..., query_string: Optional[Any] = ..., + method: str = ..., input_stream: Optional[Any] = ..., content_type: Optional[Any] = ..., + content_length: Optional[Any] = ..., errors_stream: Optional[Any] = ..., multithread: bool = ..., + multiprocess: bool = ..., run_once: bool = ..., headers: Optional[Any] = ..., data: Optional[Any] = ..., + environ_base: Optional[Any] = ..., environ_overrides: Optional[Any] = ..., charset: Text = ...): ... + form: Any + files: Any + @property + def server_name(self): ... + @property + def server_port(self): ... + def __del__(self): ... + def close(self): ... + def get_environ(self): ... + def get_request(self, cls: Optional[Any] = ...): ... + +class ClientRedirectError(Exception): ... + +class Client: + application: Any + response_wrapper: Any + cookie_jar: Any + allow_subdomain_redirects: Any + def __init__(self, application, response_wrapper: Optional[Any] = ..., use_cookies: bool = ..., + allow_subdomain_redirects: bool = ...): ... + def set_cookie(self, server_name, key, value: str = ..., max_age: Optional[Any] = ..., expires: Optional[Any] = ..., + path: str = ..., domain: Optional[Any] = ..., secure: Optional[Any] = ..., httponly: bool = ..., + charset: Text = ...): ... + def delete_cookie(self, server_name, key, path: str = ..., domain: Optional[Any] = ...): ... + def run_wsgi_app(self, environ, buffered: bool = ...): ... + def resolve_redirect(self, response, new_location, environ, buffered: bool = ...): ... + def open(self, *args, **kwargs): ... + def get(self, *args, **kw): ... + def patch(self, *args, **kw): ... + def post(self, *args, **kw): ... + def head(self, *args, **kw): ... + def put(self, *args, **kw): ... + def delete(self, *args, **kw): ... + def options(self, *args, **kw): ... + def trace(self, *args, **kw): ... + +def create_environ(*args, **kwargs): ... +def run_wsgi_app(app, environ, buffered: bool = ...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi new file mode 100644 index 0000000..e45ea4a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/testapp.pyi @@ -0,0 +1,9 @@ +from typing import Any +from werkzeug.wrappers import BaseRequest as Request, BaseResponse as Response + +logo: Any +TEMPLATE: Any + +def iter_sys_path(): ... +def render_testapp(req): ... +def test_app(environ, start_response): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi new file mode 100644 index 0000000..e0b1306 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/urls.pyi @@ -0,0 +1,72 @@ +from collections import namedtuple +from typing import Any, Optional, Text + + +_URLTuple = namedtuple( + '_URLTuple', + ['scheme', 'netloc', 'path', 'query', 'fragment'] +) + + +class BaseURL(_URLTuple): + def replace(self, **kwargs): ... + @property + def host(self): ... + @property + def ascii_host(self): ... + @property + def port(self): ... + @property + def auth(self): ... + @property + def username(self): ... + @property + def raw_username(self): ... + @property + def password(self): ... + @property + def raw_password(self): ... + def decode_query(self, *args, **kwargs): ... + def join(self, *args, **kwargs): ... + def to_url(self): ... + def decode_netloc(self): ... + def to_uri_tuple(self): ... + def to_iri_tuple(self): ... + def get_file_location(self, pathformat: Optional[Any] = ...): ... + +class URL(BaseURL): + def encode_netloc(self): ... + def encode(self, charset: Text = ..., errors: Text = ...): ... + +class BytesURL(BaseURL): + def encode_netloc(self): ... + def decode(self, charset: Text = ..., errors: Text = ...): ... + +def url_parse(url, scheme: Optional[Any] = ..., allow_fragments: bool = ...): ... +def url_quote(string, charset: Text = ..., errors: Text = ..., safe: str = ..., unsafe: str = ...): ... +def url_quote_plus(string, charset: Text = ..., errors: Text = ..., safe: str = ...): ... +def url_unparse(components): ... +def url_unquote(string, charset: Text = ..., errors: Text = ..., unsafe: str = ...): ... +def url_unquote_plus(s, charset: Text = ..., errors: Text = ...): ... +def url_fix(s, charset: Text = ...): ... +def uri_to_iri(uri, charset: Text = ..., errors: Text = ...): ... +def iri_to_uri(iri, charset: Text = ..., errors: Text = ..., safe_conversion: bool = ...): ... +def url_decode(s, charset: Text = ..., decode_keys: bool = ..., include_empty: bool = ..., errors: Text = ..., + separator: str = ..., cls: Optional[Any] = ...): ... +def url_decode_stream(stream, charset: Text = ..., decode_keys: bool = ..., include_empty: bool = ..., errors: Text = ..., + separator: str = ..., cls: Optional[Any] = ..., limit: Optional[Any] = ..., + return_iterator: bool = ...): ... +def url_encode(obj, charset: Text = ..., encode_keys: bool = ..., sort: bool = ..., key: Optional[Any] = ..., + separator: bytes = ...): ... +def url_encode_stream(obj, stream: Optional[Any] = ..., charset: Text = ..., encode_keys: bool = ..., sort: bool = ..., + key: Optional[Any] = ..., separator: bytes = ...): ... +def url_join(base, url, allow_fragments: bool = ...): ... + +class Href: + base: Any + charset: Text + sort: Any + key: Any + def __init__(self, base: str = ..., charset: Text = ..., sort: bool = ..., key: Optional[Any] = ...): ... + def __getattr__(self, name): ... + def __call__(self, *path, **query): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi new file mode 100644 index 0000000..c7e8363 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/useragents.pyi @@ -0,0 +1,14 @@ +from typing import Any + +class UserAgentParser: + platforms: Any + browsers: Any + def __init__(self): ... + def __call__(self, user_agent): ... + +class UserAgent: + string: Any + def __init__(self, environ_or_string): ... + def to_header(self): ... + def __nonzero__(self): ... + __bool__: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi new file mode 100644 index 0000000..92465ef --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/utils.pyi @@ -0,0 +1,58 @@ +from typing import Any, Optional, overload, Type, TypeVar +from werkzeug._internal import _DictAccessorProperty +from werkzeug.wrappers import Response + +class cached_property(property): + __name__: Any + __module__: Any + __doc__: Any + func: Any + def __init__(self, func, name: Optional[Any] = ..., doc: Optional[Any] = ...): ... + def __set__(self, obj, value): ... + def __get__(self, obj, type: Optional[Any] = ...): ... + +class environ_property(_DictAccessorProperty): + read_only: Any + def lookup(self, obj): ... + +class header_property(_DictAccessorProperty): + def lookup(self, obj): ... + +class HTMLBuilder: + def __init__(self, dialect): ... + def __call__(self, s): ... + def __getattr__(self, tag): ... + +html: Any +xhtml: Any + +def get_content_type(mimetype, charset): ... +def format_string(string, context): ... +def secure_filename(filename): ... +def escape(s, quote: Optional[Any] = ...): ... +def unescape(s): ... + +# 'redirect' returns a werkzeug Response, unless you give it +# another Response type to use instead. +_RC = TypeVar("_RC", bound=Response) +@overload +def redirect(location, code: int = ..., Response: None = ...) -> Response: ... +@overload +def redirect(location, code: int = ..., Response: Type[_RC] = ...) -> _RC: ... + +def append_slash_redirect(environ, code: int = ...): ... +def import_string(import_name, silent: bool = ...): ... +def find_modules(import_path, include_packages: bool = ..., recursive: bool = ...): ... +def validate_arguments(func, args, kwargs, drop_extra: bool = ...): ... +def bind_arguments(func, args, kwargs): ... + +class ArgumentValidationError(ValueError): + missing: Any + extra: Any + extra_positional: Any + def __init__(self, missing: Optional[Any] = ..., extra: Optional[Any] = ..., extra_positional: Optional[Any] = ...): ... + +class ImportStringError(ImportError): + import_name: Any + exception: Any + def __init__(self, import_name, exception): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi new file mode 100644 index 0000000..74cb6ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wrappers.pyi @@ -0,0 +1,249 @@ +from datetime import datetime +from typing import ( + Any, Callable, Iterable, Iterator, Mapping, MutableMapping, Optional, Sequence, Text, Tuple, Type, TypeVar, Union, +) + +from wsgiref.types import WSGIEnvironment, InputStream + +from .datastructures import ( + Authorization, CombinedMultiDict, EnvironHeaders, Headers, ImmutableMultiDict, + MultiDict, ImmutableTypeConversionDict, HeaderSet, + Accept, MIMEAccept, CharsetAccept, LanguageAccept, +) +from .useragents import UserAgent + +class BaseRequest: + charset: str + encoding_errors: str + max_content_length: Optional[int] + max_form_memory_size: int + parameter_storage_class: Type + list_storage_class: Type + dict_storage_class: Type + form_data_parser_class: Type + trusted_hosts: Optional[Sequence[Text]] + disable_data_descriptor: Any + environ: WSGIEnvironment = ... + shallow: Any + def __init__(self, environ: WSGIEnvironment, populate_request: bool = ..., shallow: bool = ...) -> None: ... + @property + def url_charset(self) -> str: ... + @classmethod + def from_values(cls, *args, **kwargs) -> BaseRequest: ... + @classmethod + def application(cls, f): ... + @property + def want_form_data_parsed(self): ... + def make_form_data_parser(self): ... + def close(self) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, tb): ... + @property + def stream(self) -> InputStream: ... + input_stream: InputStream + args: ImmutableMultiDict + @property + def data(self) -> bytes: ... + # TODO: once Literal types are supported, overload with as_text + def get_data(self, cache: bool = ..., as_text: bool = ..., parse_form_data: bool = ...) -> Any: ... # returns bytes if as_text is False (the default), else Text + form: ImmutableMultiDict + values: CombinedMultiDict + files: MultiDict + @property + def cookies(self) -> ImmutableTypeConversionDict[str, str]: ... + headers: EnvironHeaders + path: Text + full_path: Text + script_root: Text + url: Text + base_url: Text + url_root: Text + host_url: Text + host: Text + query_string: bytes + method: Text + @property + def access_route(self) -> Sequence[str]: ... + @property + def remote_addr(self) -> str: ... + remote_user: Text + scheme: str + is_xhr: bool + is_secure: bool + is_multithread: bool + is_multiprocess: bool + is_run_once: bool + + # These are not preset at runtime but we add them since monkeypatching this + # class is quite common. + def __setattr__(self, name: str, value: Any): ... + def __getattr__(self, name: str): ... + +_OnCloseT = TypeVar('_OnCloseT', bound=Callable[[], Any]) +_SelfT = TypeVar('_SelfT', bound=BaseResponse) + +class BaseResponse: + charset: str + default_status: int + default_mimetype: str + implicit_sequence_conversion: bool + autocorrect_location_header: bool + automatically_set_content_length: bool + headers: Headers + status_code: int + status: str + direct_passthrough: bool + response: Iterable[bytes] + def __init__(self, response: Optional[Union[str, bytes, bytearray, Iterable[str], Iterable[bytes]]] = ..., + status: Optional[Union[Text, int]] = ..., + headers: Optional[Union[Headers, + Mapping[Text, Text], + Sequence[Tuple[Text, Text]]]] = ..., + mimetype: Optional[Text] = ..., + content_type: Optional[Text] = ..., + direct_passthrough: bool = ...) -> None: ... + def call_on_close(self, func: _OnCloseT) -> _OnCloseT: ... + @classmethod + def force_type(cls: Type[_SelfT], response: object, environ: Optional[WSGIEnvironment] = ...) -> _SelfT: ... + @classmethod + def from_app(cls: Type[_SelfT], app: Any, environ: WSGIEnvironment, buffered: bool = ...) -> _SelfT: ... + # TODO: once Literal types are supported, overload with as_text + def get_data(self, as_text: bool = ...) -> Any: ... # returns bytes if as_text is False (the default), else Text + def set_data(self, value: Union[bytes, Text]) -> None: ... + data: Any + def calculate_content_length(self) -> Optional[int]: ... + def make_sequence(self) -> None: ... + def iter_encoded(self) -> Iterator[bytes]: ... + def set_cookie(self, key, value: str = ..., max_age: Optional[Any] = ..., expires: Optional[Any] = ..., + path: str = ..., domain: Optional[Any] = ..., secure: bool = ..., httponly: bool = ...): ... + def delete_cookie(self, key, path: str = ..., domain: Optional[Any] = ...): ... + @property + def is_streamed(self) -> bool: ... + @property + def is_sequence(self) -> bool: ... + def close(self) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type, exc_value, tb): ... + # The no_etag argument if fictional, but required for compatibility with + # ETagResponseMixin + def freeze(self, no_etag: bool = ...) -> None: ... + def get_wsgi_headers(self, environ): ... + def get_app_iter(self, environ): ... + def get_wsgi_response(self, environ): ... + def __call__(self, environ, start_response): ... + +class AcceptMixin(object): + @property + def accept_mimetypes(self) -> MIMEAccept: ... + @property + def accept_charsets(self) -> CharsetAccept: ... + @property + def accept_encodings(self) -> Accept: ... + @property + def accept_languages(self) -> LanguageAccept: ... + +class ETagRequestMixin: + @property + def cache_control(self): ... + @property + def if_match(self): ... + @property + def if_none_match(self): ... + @property + def if_modified_since(self): ... + @property + def if_unmodified_since(self): ... + @property + def if_range(self): ... + @property + def range(self): ... + +class UserAgentMixin: + @property + def user_agent(self) -> UserAgent: ... + +class AuthorizationMixin: + @property + def authorization(self) -> Optional[Authorization]: ... + +class StreamOnlyMixin: + disable_data_descriptor: Any + want_form_data_parsed: Any + +class ETagResponseMixin: + @property + def cache_control(self): ... + status_code: Any + def make_conditional(self, request_or_environ, accept_ranges: bool = ..., complete_length: Optional[Any] = ...): ... + def add_etag(self, overwrite: bool = ..., weak: bool = ...): ... + def set_etag(self, etag, weak: bool = ...): ... + def get_etag(self): ... + def freeze(self, no_etag: bool = ...) -> None: ... + accept_ranges: Any + content_range: Any + +class ResponseStream: + mode: Any + response: Any + closed: Any + def __init__(self, response): ... + def write(self, value): ... + def writelines(self, seq): ... + def close(self): ... + def flush(self): ... + def isatty(self): ... + @property + def encoding(self): ... + +class ResponseStreamMixin: + @property + def stream(self) -> ResponseStream: ... + +class CommonRequestDescriptorsMixin: + @property + def content_type(self) -> Optional[str]: ... + @property + def content_length(self) -> Optional[int]: ... + @property + def content_encoding(self) -> Optional[str]: ... + @property + def content_md5(self) -> Optional[str]: ... + @property + def referrer(self) -> Optional[str]: ... + @property + def date(self) -> Optional[datetime]: ... + @property + def max_forwards(self) -> Optional[int]: ... + @property + def mimetype(self) -> str: ... + @property + def mimetype_params(self) -> Mapping[str, str]: ... + @property + def pragma(self) -> HeaderSet: ... + +class CommonResponseDescriptorsMixin: + mimetype: Optional[str] = ... + @property + def mimetype_params(self) -> MutableMapping[str, str]: ... + location: Optional[str] = ... + age: Any = ... # get: Optional[datetime.timedelta] + content_type: Optional[str] = ... + content_length: Optional[int] = ... + content_location: Optional[str] = ... + content_encoding: Optional[str] = ... + content_md5: Optional[str] = ... + date: Any = ... # get: Optional[datetime.datetime] + expires: Any = ... # get: Optional[datetime.datetime] + last_modified: Any = ... # get: Optional[datetime.datetime] + retry_after: Any = ... # get: Optional[datetime.datetime] + vary: Optional[str] = ... + content_language: Optional[str] = ... + allow: Optional[str] = ... + +class WWWAuthenticateMixin: + @property + def www_authenticate(self): ... + +class Request(BaseRequest, AcceptMixin, ETagRequestMixin, UserAgentMixin, AuthorizationMixin, CommonRequestDescriptorsMixin): ... +class PlainRequest(StreamOnlyMixin, Request): ... +class Response(BaseResponse, ETagResponseMixin, ResponseStreamMixin, CommonResponseDescriptorsMixin, WWWAuthenticateMixin): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi new file mode 100644 index 0000000..87deff4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/werkzeug/wsgi.pyi @@ -0,0 +1,91 @@ +from typing import Any, Optional, Protocol, Iterable, Text +from wsgiref.types import WSGIEnvironment, InputStream + +def responder(f): ... +def get_current_url(environ, root_only: bool = ..., strip_querystring: bool = ..., host_only: bool = ..., + trusted_hosts: Optional[Any] = ...): ... +def host_is_trusted(hostname, trusted_list): ... +def get_host(environ, trusted_hosts: Optional[Any] = ...): ... +def get_content_length(environ: WSGIEnvironment) -> Optional[int]: ... +def get_input_stream(environ: WSGIEnvironment, safe_fallback: bool = ...) -> InputStream: ... +def get_query_string(environ): ... +def get_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def get_script_name(environ, charset: Text = ..., errors: Text = ...): ... +def pop_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def peek_path_info(environ, charset: Text = ..., errors: Text = ...): ... +def extract_path_info(environ_or_baseurl, path_or_url, charset: Text = ..., errors: Text = ..., + collapse_http_schemes: bool = ...): ... + +class SharedDataMiddleware: + app: Any + exports: Any + cache: Any + cache_timeout: Any + fallback_mimetype: Any + def __init__(self, app, exports, disallow: Optional[Any] = ..., cache: bool = ..., cache_timeout=..., + fallback_mimetype: str = ...): ... + def is_allowed(self, filename): ... + def get_file_loader(self, filename): ... + def get_package_loader(self, package, package_path): ... + def get_directory_loader(self, directory): ... + def generate_etag(self, mtime, file_size, real_filename): ... + def __call__(self, environ, start_response): ... + +class DispatcherMiddleware: + app: Any + mounts: Any + def __init__(self, app, mounts: Optional[Any] = ...): ... + def __call__(self, environ, start_response): ... + +class ClosingIterator: + def __init__(self, iterable, callbacks: Optional[Any] = ...): ... + def __iter__(self): ... + def __next__(self): ... + def close(self): ... + +class _Readable(Protocol): + def read(self, size: int = ...) -> bytes: ... + +def wrap_file(environ: WSGIEnvironment, file: _Readable, buffer_size: int = ...) -> Iterable[bytes]: ... + +class FileWrapper: + file: _Readable + buffer_size: int + def __init__(self, file: _Readable, buffer_size: int = ...) -> None: ... + def close(self) -> None: ... + def seekable(self) -> bool: ... + def seek(self, offset: int, whence: int = ...) -> None: ... + def tell(self) -> Optional[int]: ... + def __iter__(self) -> FileWrapper: ... + def __next__(self) -> bytes: ... + +class _RangeWrapper: + iterable: Any + byte_range: Any + start_byte: Any + end_byte: Any + read_length: Any + seekable: Any + end_reached: Any + def __init__(self, iterable, start_byte: int = ..., byte_range: Optional[Any] = ...): ... + def __iter__(self): ... + def __next__(self): ... + def close(self): ... + +def make_line_iter(stream, limit: Optional[Any] = ..., buffer_size=..., cap_at_buffer: bool = ...): ... +def make_chunk_iter(stream, separator, limit: Optional[Any] = ..., buffer_size=..., cap_at_buffer: bool = ...): ... + +class LimitedStream: + limit: Any + def __init__(self, stream, limit): ... + def __iter__(self): ... + @property + def is_exhausted(self): ... + def on_exhausted(self): ... + def on_disconnect(self): ... + def exhaust(self, chunk_size=...): ... + def read(self, size: Optional[Any] = ...): ... + def readline(self, size: Optional[Any] = ...): ... + def readlines(self, size: Optional[Any] = ...): ... + def tell(self): ... + def __next__(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi new file mode 100644 index 0000000..c0fc6a9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/__init__.pyi @@ -0,0 +1,82 @@ +from typing import Any, IO, Iterator, Optional, overload, Sequence, Text, Union +import sys +from yaml.error import * # noqa: F403 +from yaml.tokens import * # noqa: F403 +from yaml.events import * # noqa: F403 +from yaml.nodes import * # noqa: F403 +from yaml.loader import * # noqa: F403 +from yaml.dumper import * # noqa: F403 +from . import resolver # Help mypy a bit; this is implied by loader and dumper +from .cyaml import * + +if sys.version_info < (3,): + _Str = Union[Text, str] +else: + _Str = str +# FIXME: the functions really return py2:unicode/py3:str if encoding is None, otherwise py2:str/py3:bytes. Waiting for python/mypy#5621 +_Yaml = Any + +__with_libyaml__: Any +__version__: str + +def scan(stream, Loader=...): ... +def parse(stream, Loader=...): ... +def compose(stream, Loader=...): ... +def compose_all(stream, Loader=...): ... +def load(stream: Union[str, IO[str]], Loader=...) -> Any: ... +def load_all(stream: Union[str, IO[str]], Loader=...) -> Iterator[Any]: ... +def full_load(stream: Union[str, IO[str]]) -> Any: ... +def full_load_all(stream: Union[str, IO[str]]) -> Iterator[Any]: ... +def safe_load(stream: Union[str, IO[str]]) -> Any: ... +def safe_load_all(stream: Union[str, IO[str]]) -> Iterator[Any]: ... +def emit(events, stream=..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=...): ... + +@overload +def serialize_all(nodes, stream: IO[str], Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def serialize_all(nodes, stream: None = ..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def serialize(node, stream: IO[str], Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def serialize(node, stream: None = ..., Dumper=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def dump_all(documents: Sequence[Any], stream: IO[str], Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def dump_all(documents: Sequence[Any], stream: None = ..., Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def dump(data: Any, stream: IO[str], Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def dump(data: Any, stream: None = ..., Dumper=..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def safe_dump_all(documents: Sequence[Any], stream: IO[str], default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def safe_dump_all(documents: Sequence[Any], stream: None = ..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +@overload +def safe_dump(data: Any, stream: IO[str], default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... +@overload +def safe_dump(data: Any, stream: None = ..., default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding: Optional[_Str] = ..., explicit_start=..., explicit_end=..., version=..., tags=...) -> _Yaml: ... + +def add_implicit_resolver(tag, regexp, first=..., Loader=..., Dumper=...): ... +def add_path_resolver(tag, path, kind=..., Loader=..., Dumper=...): ... +def add_constructor(tag, constructor, Loader=...): ... +def add_multi_constructor(tag_prefix, multi_constructor, Loader=...): ... +def add_representer(data_type, representer, Dumper=...): ... +def add_multi_representer(data_type, multi_representer, Dumper=...): ... + +class YAMLObjectMetaclass(type): + def __init__(self, name, bases, kwds) -> None: ... + +class YAMLObject(metaclass=YAMLObjectMetaclass): + yaml_loader: Any + yaml_dumper: Any + yaml_tag: Any + yaml_flow_style: Any + @classmethod + def from_yaml(cls, loader, node): ... + @classmethod + def to_yaml(cls, dumper, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi new file mode 100644 index 0000000..f1e2c03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/composer.pyi @@ -0,0 +1,17 @@ +from typing import Any +from yaml.error import Mark, YAMLError, MarkedYAMLError +from yaml.nodes import Node, ScalarNode, CollectionNode, SequenceNode, MappingNode + +class ComposerError(MarkedYAMLError): ... + +class Composer: + anchors: Any + def __init__(self) -> None: ... + def check_node(self): ... + def get_node(self): ... + def get_single_node(self): ... + def compose_document(self): ... + def compose_node(self, parent, index): ... + def compose_scalar_node(self, anchor): ... + def compose_sequence_node(self, anchor): ... + def compose_mapping_node(self, anchor): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi new file mode 100644 index 0000000..27bcdbe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/constructor.pyi @@ -0,0 +1,68 @@ +from yaml.error import Mark, YAMLError, MarkedYAMLError +from yaml.nodes import Node, ScalarNode, CollectionNode, SequenceNode, MappingNode + +from typing import Any + +class ConstructorError(MarkedYAMLError): ... + +class BaseConstructor: + yaml_constructors: Any + yaml_multi_constructors: Any + constructed_objects: Any + recursive_objects: Any + state_generators: Any + deep_construct: Any + def __init__(self) -> None: ... + def check_data(self): ... + def get_data(self): ... + def get_single_data(self): ... + def construct_document(self, node): ... + def construct_object(self, node, deep=...): ... + def construct_scalar(self, node): ... + def construct_sequence(self, node, deep=...): ... + def construct_mapping(self, node, deep=...): ... + def construct_pairs(self, node, deep=...): ... + @classmethod + def add_constructor(cls, tag, constructor): ... + @classmethod + def add_multi_constructor(cls, tag_prefix, multi_constructor): ... + +class SafeConstructor(BaseConstructor): + def construct_scalar(self, node): ... + def flatten_mapping(self, node): ... + def construct_mapping(self, node, deep=...): ... + def construct_yaml_null(self, node): ... + bool_values: Any + def construct_yaml_bool(self, node): ... + def construct_yaml_int(self, node): ... + inf_value: Any + nan_value: Any + def construct_yaml_float(self, node): ... + def construct_yaml_binary(self, node): ... + timestamp_regexp: Any + def construct_yaml_timestamp(self, node): ... + def construct_yaml_omap(self, node): ... + def construct_yaml_pairs(self, node): ... + def construct_yaml_set(self, node): ... + def construct_yaml_str(self, node): ... + def construct_yaml_seq(self, node): ... + def construct_yaml_map(self, node): ... + def construct_yaml_object(self, node, cls): ... + def construct_undefined(self, node): ... + +class Constructor(SafeConstructor): + def construct_python_str(self, node): ... + def construct_python_unicode(self, node): ... + def construct_python_long(self, node): ... + def construct_python_complex(self, node): ... + def construct_python_tuple(self, node): ... + def find_python_module(self, name, mark): ... + def find_python_name(self, name, mark): ... + def construct_python_name(self, suffix, node): ... + def construct_python_module(self, suffix, node): ... + class classobj: ... + def make_python_instance(self, suffix, node, args=..., kwds=..., newobj=...): ... + def set_python_instance_state(self, instance, state): ... + def construct_python_object(self, suffix, node): ... + def construct_python_object_apply(self, suffix, node, newobj=...): ... + def construct_python_object_new(self, suffix, node): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi new file mode 100644 index 0000000..0eef815 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/cyaml.pyi @@ -0,0 +1,47 @@ +from typing import Any, IO, Mapping, Optional, Sequence, Text, Union +from typing_extensions import Protocol + +from yaml.constructor import BaseConstructor, Constructor, SafeConstructor +from yaml.representer import BaseRepresenter, Representer, SafeRepresenter +from yaml.resolver import BaseResolver, Resolver +from yaml.serializer import Serializer + +class _Readable(Protocol): + def read(self, size: int) -> Union[Text, bytes]: ... + +class CParser: + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CBaseLoader(CParser, BaseConstructor, BaseResolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CLoader(CParser, SafeConstructor, Resolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CSafeLoader(CParser, SafeConstructor, Resolver): + def __init__(self, stream: Union[str, bytes, _Readable]) -> None: ... + +class CDangerLoader(CParser, Constructor, Resolver): ... # undocumented + +class CEmitter(object): + def __init__(self, stream: IO[Any], canonical: Optional[Any] = ..., + indent: Optional[int] = ..., width: Optional[int] = ..., + allow_unicode: Optional[Any] = ..., line_break: Optional[str] = ..., + encoding: Optional[Text] = ..., explicit_start: Optional[Any] = ..., + explicit_end: Optional[Any] = ..., version: Optional[Sequence[int]] = ..., + tags: Optional[Mapping[Text, Text]] = ...) -> None: ... + +class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): + def __init__(self, stream: IO[Any], default_style: Optional[str] = ..., + default_flow_style: Optional[bool] = ..., canonical: Optional[Any] = ..., + indent: Optional[int] = ..., width: Optional[int] = ..., + allow_unicode: Optional[Any] = ..., line_break: Optional[str] = ..., + encoding: Optional[Text] = ..., explicit_start: Optional[Any] = ..., + explicit_end: Optional[Any] = ..., version: Optional[Sequence[int]] = ..., + tags: Optional[Mapping[Text, Text]] = ...) -> None: ... + +class CDumper(CEmitter, SafeRepresenter, Resolver): ... + +CSafeDumper = CDumper + +class CDangerDumper(CEmitter, Serializer, Representer, Resolver): ... # undocumented diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi new file mode 100644 index 0000000..0586f13 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/dumper.pyi @@ -0,0 +1,13 @@ +from yaml.emitter import Emitter +from yaml.serializer import Serializer +from yaml.representer import BaseRepresenter, Representer, SafeRepresenter +from yaml.resolver import BaseResolver, Resolver + +class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + +class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + +class Dumper(Emitter, Serializer, Representer, Resolver): + def __init__(self, stream, default_style=..., default_flow_style=..., canonical=..., indent=..., width=..., allow_unicode=..., line_break=..., encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi new file mode 100644 index 0000000..5ca9cbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/emitter.pyi @@ -0,0 +1,106 @@ +from typing import Any +from yaml.error import YAMLError + +class EmitterError(YAMLError): ... + +class ScalarAnalysis: + scalar: Any + empty: Any + multiline: Any + allow_flow_plain: Any + allow_block_plain: Any + allow_single_quoted: Any + allow_double_quoted: Any + allow_block: Any + def __init__(self, scalar, empty, multiline, allow_flow_plain, allow_block_plain, allow_single_quoted, allow_double_quoted, allow_block) -> None: ... + +class Emitter: + DEFAULT_TAG_PREFIXES: Any + stream: Any + encoding: Any + states: Any + state: Any + events: Any + event: Any + indents: Any + indent: Any + flow_level: Any + root_context: Any + sequence_context: Any + mapping_context: Any + simple_key_context: Any + line: Any + column: Any + whitespace: Any + indention: Any + open_ended: Any + canonical: Any + allow_unicode: Any + best_indent: Any + best_width: Any + best_line_break: Any + tag_prefixes: Any + prepared_anchor: Any + prepared_tag: Any + analysis: Any + style: Any + def __init__(self, stream, canonical=..., indent=..., width=..., allow_unicode=..., line_break=...) -> None: ... + def dispose(self): ... + def emit(self, event): ... + def need_more_events(self): ... + def need_events(self, count): ... + def increase_indent(self, flow=..., indentless=...): ... + def expect_stream_start(self): ... + def expect_nothing(self): ... + def expect_first_document_start(self): ... + def expect_document_start(self, first=...): ... + def expect_document_end(self): ... + def expect_document_root(self): ... + def expect_node(self, root=..., sequence=..., mapping=..., simple_key=...): ... + def expect_alias(self): ... + def expect_scalar(self): ... + def expect_flow_sequence(self): ... + def expect_first_flow_sequence_item(self): ... + def expect_flow_sequence_item(self): ... + def expect_flow_mapping(self): ... + def expect_first_flow_mapping_key(self): ... + def expect_flow_mapping_key(self): ... + def expect_flow_mapping_simple_value(self): ... + def expect_flow_mapping_value(self): ... + def expect_block_sequence(self): ... + def expect_first_block_sequence_item(self): ... + def expect_block_sequence_item(self, first=...): ... + def expect_block_mapping(self): ... + def expect_first_block_mapping_key(self): ... + def expect_block_mapping_key(self, first=...): ... + def expect_block_mapping_simple_value(self): ... + def expect_block_mapping_value(self): ... + def check_empty_sequence(self): ... + def check_empty_mapping(self): ... + def check_empty_document(self): ... + def check_simple_key(self): ... + def process_anchor(self, indicator): ... + def process_tag(self): ... + def choose_scalar_style(self): ... + def process_scalar(self): ... + def prepare_version(self, version): ... + def prepare_tag_handle(self, handle): ... + def prepare_tag_prefix(self, prefix): ... + def prepare_tag(self, tag): ... + def prepare_anchor(self, anchor): ... + def analyze_scalar(self, scalar): ... + def flush_stream(self): ... + def write_stream_start(self): ... + def write_stream_end(self): ... + def write_indicator(self, indicator, need_whitespace, whitespace=..., indention=...): ... + def write_indent(self): ... + def write_line_break(self, data=...): ... + def write_version_directive(self, version_text): ... + def write_tag_directive(self, handle_text, prefix_text): ... + def write_single_quoted(self, text, split=...): ... + ESCAPE_REPLACEMENTS: Any + def write_double_quoted(self, text, split=...): ... + def determine_block_hints(self, text): ... + def write_folded(self, text): ... + def write_literal(self, text): ... + def write_plain(self, text, split=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi new file mode 100644 index 0000000..e567dd0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/error.pyi @@ -0,0 +1,21 @@ +from typing import Any + +class Mark: + name: Any + index: Any + line: Any + column: Any + buffer: Any + pointer: Any + def __init__(self, name, index, line, column, buffer, pointer) -> None: ... + def get_snippet(self, indent=..., max_length=...): ... + +class YAMLError(Exception): ... + +class MarkedYAMLError(YAMLError): + context: Any + context_mark: Any + problem: Any + problem_mark: Any + note: Any + def __init__(self, context=..., context_mark=..., problem=..., problem_mark=..., note=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi new file mode 100644 index 0000000..7096d15 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/events.pyi @@ -0,0 +1,62 @@ +from typing import Any + +class Event: + start_mark: Any + end_mark: Any + def __init__(self, start_mark=..., end_mark=...) -> None: ... + +class NodeEvent(Event): + anchor: Any + start_mark: Any + end_mark: Any + def __init__(self, anchor, start_mark=..., end_mark=...) -> None: ... + +class CollectionStartEvent(NodeEvent): + anchor: Any + tag: Any + implicit: Any + start_mark: Any + end_mark: Any + flow_style: Any + def __init__(self, anchor, tag, implicit, start_mark=..., end_mark=..., flow_style=...) -> None: ... + +class CollectionEndEvent(Event): ... + +class StreamStartEvent(Event): + start_mark: Any + end_mark: Any + encoding: Any + def __init__(self, start_mark=..., end_mark=..., encoding=...) -> None: ... + +class StreamEndEvent(Event): ... + +class DocumentStartEvent(Event): + start_mark: Any + end_mark: Any + explicit: Any + version: Any + tags: Any + def __init__(self, start_mark=..., end_mark=..., explicit=..., version=..., tags=...) -> None: ... + +class DocumentEndEvent(Event): + start_mark: Any + end_mark: Any + explicit: Any + def __init__(self, start_mark=..., end_mark=..., explicit=...) -> None: ... + +class AliasEvent(NodeEvent): ... + +class ScalarEvent(NodeEvent): + anchor: Any + tag: Any + implicit: Any + value: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, anchor, tag, implicit, value, start_mark=..., end_mark=..., style=...) -> None: ... + +class SequenceStartEvent(CollectionStartEvent): ... +class SequenceEndEvent(CollectionEndEvent): ... +class MappingStartEvent(CollectionStartEvent): ... +class MappingEndEvent(CollectionEndEvent): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi new file mode 100644 index 0000000..0e9afea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/loader.pyi @@ -0,0 +1,15 @@ +from yaml.reader import Reader +from yaml.scanner import Scanner +from yaml.parser import Parser +from yaml.composer import Composer +from yaml.constructor import BaseConstructor, SafeConstructor, Constructor +from yaml.resolver import BaseResolver, Resolver + +class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver): + def __init__(self, stream) -> None: ... + +class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver): + def __init__(self, stream) -> None: ... + +class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver): + def __init__(self, stream) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi new file mode 100644 index 0000000..f31fa7d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/nodes.pyi @@ -0,0 +1,31 @@ +from typing import Any + +class Node: + tag: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, tag, value, start_mark, end_mark) -> None: ... + +class ScalarNode(Node): + id: Any + tag: Any + value: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, tag, value, start_mark=..., end_mark=..., style=...) -> None: ... + +class CollectionNode(Node): + tag: Any + value: Any + start_mark: Any + end_mark: Any + flow_style: Any + def __init__(self, tag, value, start_mark=..., end_mark=..., flow_style=...) -> None: ... + +class SequenceNode(CollectionNode): + id: Any + +class MappingNode(CollectionNode): + id: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi new file mode 100644 index 0000000..4253e11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/parser.pyi @@ -0,0 +1,44 @@ +from typing import Any +from yaml.error import MarkedYAMLError + +class ParserError(MarkedYAMLError): ... + +class Parser: + DEFAULT_TAGS: Any + current_event: Any + yaml_version: Any + tag_handles: Any + states: Any + marks: Any + state: Any + def __init__(self) -> None: ... + def dispose(self): ... + def check_event(self, *choices): ... + def peek_event(self): ... + def get_event(self): ... + def parse_stream_start(self): ... + def parse_implicit_document_start(self): ... + def parse_document_start(self): ... + def parse_document_end(self): ... + def parse_document_content(self): ... + def process_directives(self): ... + def parse_block_node(self): ... + def parse_flow_node(self): ... + def parse_block_node_or_indentless_sequence(self): ... + def parse_node(self, block=..., indentless_sequence=...): ... + def parse_block_sequence_first_entry(self): ... + def parse_block_sequence_entry(self): ... + def parse_indentless_sequence_entry(self): ... + def parse_block_mapping_first_key(self): ... + def parse_block_mapping_key(self): ... + def parse_block_mapping_value(self): ... + def parse_flow_sequence_first_entry(self): ... + def parse_flow_sequence_entry(self, first=...): ... + def parse_flow_sequence_entry_mapping_key(self): ... + def parse_flow_sequence_entry_mapping_value(self): ... + def parse_flow_sequence_entry_mapping_end(self): ... + def parse_flow_mapping_first_key(self): ... + def parse_flow_mapping_key(self, first=...): ... + def parse_flow_mapping_value(self): ... + def parse_flow_mapping_empty_value(self): ... + def process_empty_scalar(self, mark): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi new file mode 100644 index 0000000..05adf0c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/reader.pyi @@ -0,0 +1,34 @@ +from typing import Any +from yaml.error import YAMLError + +class ReaderError(YAMLError): + name: Any + character: Any + position: Any + encoding: Any + reason: Any + def __init__(self, name, position, character, encoding, reason) -> None: ... + +class Reader: + name: Any + stream: Any + stream_pointer: Any + eof: Any + buffer: Any + pointer: Any + raw_buffer: Any + raw_decode: Any + encoding: Any + index: Any + line: Any + column: Any + def __init__(self, stream) -> None: ... + def peek(self, index=...): ... + def prefix(self, length=...): ... + def forward(self, length=...): ... + def get_mark(self): ... + def determine_encoding(self): ... + NON_PRINTABLE: Any + def check_printable(self, data): ... + def update(self, length): ... + def update_raw(self, size=...): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi new file mode 100644 index 0000000..7d4bbcc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/representer.pyi @@ -0,0 +1,54 @@ +from typing import Any +from yaml.error import YAMLError + +class RepresenterError(YAMLError): ... + +class BaseRepresenter: + yaml_representers: Any + yaml_multi_representers: Any + default_style: Any + default_flow_style: Any + represented_objects: Any + object_keeper: Any + alias_key: Any + def __init__(self, default_style=..., default_flow_style=...) -> None: ... + def represent(self, data): ... + def get_classobj_bases(self, cls): ... + def represent_data(self, data): ... + @classmethod + def add_representer(cls, data_type, representer): ... + @classmethod + def add_multi_representer(cls, data_type, representer): ... + def represent_scalar(self, tag, value, style=...): ... + def represent_sequence(self, tag, sequence, flow_style=...): ... + def represent_mapping(self, tag, mapping, flow_style=...): ... + def ignore_aliases(self, data): ... + +class SafeRepresenter(BaseRepresenter): + def ignore_aliases(self, data): ... + def represent_none(self, data): ... + def represent_str(self, data): ... + def represent_unicode(self, data): ... + def represent_bool(self, data): ... + def represent_int(self, data): ... + def represent_long(self, data): ... + inf_value: Any + def represent_float(self, data): ... + def represent_list(self, data): ... + def represent_dict(self, data): ... + def represent_set(self, data): ... + def represent_date(self, data): ... + def represent_datetime(self, data): ... + def represent_yaml_object(self, tag, data, cls, flow_style=...): ... + def represent_undefined(self, data): ... + +class Representer(SafeRepresenter): + def represent_str(self, data): ... + def represent_unicode(self, data): ... + def represent_long(self, data): ... + def represent_complex(self, data): ... + def represent_tuple(self, data): ... + def represent_name(self, data): ... + def represent_module(self, data): ... + def represent_instance(self, data): ... + def represent_object(self, data): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi new file mode 100644 index 0000000..7297560 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/resolver.pyi @@ -0,0 +1,24 @@ +from typing import Any +from yaml.error import YAMLError + +class ResolverError(YAMLError): ... + +class BaseResolver: + DEFAULT_SCALAR_TAG: Any + DEFAULT_SEQUENCE_TAG: Any + DEFAULT_MAPPING_TAG: Any + yaml_implicit_resolvers: Any + yaml_path_resolvers: Any + resolver_exact_paths: Any + resolver_prefix_paths: Any + def __init__(self) -> None: ... + @classmethod + def add_implicit_resolver(cls, tag, regexp, first): ... + @classmethod + def add_path_resolver(cls, tag, path, kind=...): ... + def descend_resolver(self, current_node, current_index): ... + def ascend_resolver(self): ... + def check_resolver_prefix(self, depth, path, kind, current_node, current_index): ... + def resolve(self, kind, value, implicit): ... + +class Resolver(BaseResolver): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi new file mode 100644 index 0000000..33f45da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/scanner.pyi @@ -0,0 +1,96 @@ +from typing import Any +from yaml.error import MarkedYAMLError + +class ScannerError(MarkedYAMLError): ... + +class SimpleKey: + token_number: Any + required: Any + index: Any + line: Any + column: Any + mark: Any + def __init__(self, token_number, required, index, line, column, mark) -> None: ... + +class Scanner: + done: Any + flow_level: Any + tokens: Any + tokens_taken: Any + indent: Any + indents: Any + allow_simple_key: Any + possible_simple_keys: Any + def __init__(self) -> None: ... + def check_token(self, *choices): ... + def peek_token(self): ... + def get_token(self): ... + def need_more_tokens(self): ... + def fetch_more_tokens(self): ... + def next_possible_simple_key(self): ... + def stale_possible_simple_keys(self): ... + def save_possible_simple_key(self): ... + def remove_possible_simple_key(self): ... + def unwind_indent(self, column): ... + def add_indent(self, column): ... + def fetch_stream_start(self): ... + def fetch_stream_end(self): ... + def fetch_directive(self): ... + def fetch_document_start(self): ... + def fetch_document_end(self): ... + def fetch_document_indicator(self, TokenClass): ... + def fetch_flow_sequence_start(self): ... + def fetch_flow_mapping_start(self): ... + def fetch_flow_collection_start(self, TokenClass): ... + def fetch_flow_sequence_end(self): ... + def fetch_flow_mapping_end(self): ... + def fetch_flow_collection_end(self, TokenClass): ... + def fetch_flow_entry(self): ... + def fetch_block_entry(self): ... + def fetch_key(self): ... + def fetch_value(self): ... + def fetch_alias(self): ... + def fetch_anchor(self): ... + def fetch_tag(self): ... + def fetch_literal(self): ... + def fetch_folded(self): ... + def fetch_block_scalar(self, style): ... + def fetch_single(self): ... + def fetch_double(self): ... + def fetch_flow_scalar(self, style): ... + def fetch_plain(self): ... + def check_directive(self): ... + def check_document_start(self): ... + def check_document_end(self): ... + def check_block_entry(self): ... + def check_key(self): ... + def check_value(self): ... + def check_plain(self): ... + def scan_to_next_token(self): ... + def scan_directive(self): ... + def scan_directive_name(self, start_mark): ... + def scan_yaml_directive_value(self, start_mark): ... + def scan_yaml_directive_number(self, start_mark): ... + def scan_tag_directive_value(self, start_mark): ... + def scan_tag_directive_handle(self, start_mark): ... + def scan_tag_directive_prefix(self, start_mark): ... + def scan_directive_ignored_line(self, start_mark): ... + def scan_anchor(self, TokenClass): ... + def scan_tag(self): ... + def scan_block_scalar(self, style): ... + def scan_block_scalar_indicators(self, start_mark): ... + def scan_block_scalar_ignored_line(self, start_mark): ... + def scan_block_scalar_indentation(self): ... + def scan_block_scalar_breaks(self, indent): ... + def scan_flow_scalar(self, style): ... + ESCAPE_REPLACEMENTS: Any + ESCAPE_CODES: Any + def scan_flow_scalar_non_spaces(self, double, start_mark): ... + def scan_flow_scalar_spaces(self, double, start_mark): ... + def scan_flow_scalar_breaks(self, double, start_mark): ... + def scan_plain(self): ... + def scan_plain_spaces(self, indent, start_mark): ... + def scan_tag_handle(self, name, start_mark): ... + def scan_tag_uri(self, name, start_mark): ... + def scan_uri_escapes(self, name, start_mark): ... + def scan_line_break(self): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi new file mode 100644 index 0000000..0c169e8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/serializer.pyi @@ -0,0 +1,23 @@ +from typing import Any +from yaml.error import YAMLError + +class SerializerError(YAMLError): ... + +class Serializer: + ANCHOR_TEMPLATE: Any + use_encoding: Any + use_explicit_start: Any + use_explicit_end: Any + use_version: Any + use_tags: Any + serialized_nodes: Any + anchors: Any + last_anchor_id: Any + closed: Any + def __init__(self, encoding=..., explicit_start=..., explicit_end=..., version=..., tags=...) -> None: ... + def open(self): ... + def close(self): ... + def serialize(self, node): ... + def anchor_node(self, node): ... + def generate_anchor(self, node): ... + def serialize_node(self, node, parent, index): ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi new file mode 100644 index 0000000..b258ec7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/2and3/yaml/tokens.pyi @@ -0,0 +1,93 @@ +from typing import Any + +class Token: + start_mark: Any + end_mark: Any + def __init__(self, start_mark, end_mark) -> None: ... + +class DirectiveToken(Token): + id: Any + name: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, name, value, start_mark, end_mark) -> None: ... + +class DocumentStartToken(Token): + id: Any + +class DocumentEndToken(Token): + id: Any + +class StreamStartToken(Token): + id: Any + start_mark: Any + end_mark: Any + encoding: Any + def __init__(self, start_mark=..., end_mark=..., encoding=...) -> None: ... + +class StreamEndToken(Token): + id: Any + +class BlockSequenceStartToken(Token): + id: Any + +class BlockMappingStartToken(Token): + id: Any + +class BlockEndToken(Token): + id: Any + +class FlowSequenceStartToken(Token): + id: Any + +class FlowMappingStartToken(Token): + id: Any + +class FlowSequenceEndToken(Token): + id: Any + +class FlowMappingEndToken(Token): + id: Any + +class KeyToken(Token): + id: Any + +class ValueToken(Token): + id: Any + +class BlockEntryToken(Token): + id: Any + +class FlowEntryToken(Token): + id: Any + +class AliasToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class AnchorToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class TagToken(Token): + id: Any + value: Any + start_mark: Any + end_mark: Any + def __init__(self, value, start_mark, end_mark) -> None: ... + +class ScalarToken(Token): + id: Any + value: Any + plain: Any + start_mark: Any + end_mark: Any + style: Any + def __init__(self, value, plain, start_mark, end_mark, style=...) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi new file mode 100644 index 0000000..ab2ae9e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3.5/contextvars.pyi @@ -0,0 +1,30 @@ +from typing import Any, Callable, ClassVar, Generic, Iterator, Mapping, TypeVar, Union + +_T = TypeVar('_T') + +class ContextVar(Generic[_T]): + def __init__(self, name: str, *, default: _T = ...) -> None: ... + @property + def name(self) -> str: ... + def get(self, default: _T = ...) -> _T: ... + def set(self, value: _T) -> Token[_T]: ... + def reset(self, token: Token[_T]) -> None: ... + +class Token(Generic[_T]): + @property + def var(self) -> ContextVar[_T]: ... + @property + def old_value(self) -> Any: ... # returns either _T or MISSING, but that's hard to express + MISSING: ClassVar[object] + +def copy_context() -> Context: ... + +# It doesn't make sense to make this generic, because for most Contexts each ContextVar will have +# a different value. +class Context(Mapping[ContextVar[Any], Any]): + def __init__(self) -> None: ... + def run(self, callable: Callable[..., _T], *args: Any, **kwargs: Any) -> _T: ... + def copy(self) -> Context: ... + def __getitem__(self, key: ContextVar[Any]) -> Any: ... + def __iter__(self) -> Iterator[ContextVar[Any]]: ... + def __len__(self) -> int: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/dataclasses.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/dataclasses.pyi new file mode 100644 index 0000000..f8bcd52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/dataclasses.pyi @@ -0,0 +1,71 @@ +from typing import overload, Any, Callable, Dict, Generic, Iterable, List, Mapping, Optional, Tuple, Type, TypeVar, Union + + +_T = TypeVar('_T') + +class _MISSING_TYPE: ... +MISSING: _MISSING_TYPE + +@overload +def asdict(obj: Any) -> Dict[str, Any]: ... +@overload +def asdict(obj: Any, *, dict_factory: Callable[[List[Tuple[str, Any]]], _T]) -> _T: ... + +@overload +def astuple(obj: Any) -> Tuple[Any, ...]: ... +@overload +def astuple(obj: Any, *, tuple_factory: Callable[[List[Any]], _T]) -> _T: ... + + +@overload +def dataclass(_cls: Type[_T]) -> Type[_T]: ... + +@overload +def dataclass(*, init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., + unsafe_hash: bool = ..., frozen: bool = ...) -> Callable[[Type[_T]], Type[_T]]: ... + + +class Field(Generic[_T]): + name: str + type: Type[_T] + default: _T + default_factory: Callable[[], _T] + repr: bool + hash: Optional[bool] + init: bool + compare: bool + metadata: Optional[Mapping[str, Any]] + + +# NOTE: Actual return type is 'Field[_T]', but we want to help type checkers +# to understand the magic that happens at runtime. +@overload # `default` and `default_factory` are optional and mutually exclusive. +def field(*, default: _T, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, default_factory: Callable[[], _T], + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> _T: ... + +@overload +def field(*, + init: bool = ..., repr: bool = ..., hash: Optional[bool] = ..., compare: bool = ..., + metadata: Optional[Mapping[str, Any]] = ...) -> Any: ... + + +def fields(class_or_instance: Any) -> Tuple[Field[Any], ...]: ... + +def is_dataclass(obj: Any) -> bool: ... + +class FrozenInstanceError(AttributeError): ... + +class InitVar(Generic[_T]): ... + +def make_dataclass(cls_name: str, fields: Iterable[Union[str, Tuple[str, type], Tuple[str, type, Field[Any]]]], *, + bases: Tuple[type, ...] = ..., namespace: Optional[Dict[str, Any]] = ..., + init: bool = ..., repr: bool = ..., eq: bool = ..., order: bool = ..., hash: bool = ..., + frozen: bool = ...): ... + +def replace(obj: _T, **changes: Any) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi new file mode 100644 index 0000000..ec73a29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/examples.pyi @@ -0,0 +1,5 @@ +from typing import Any + +html_parts: Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi new file mode 100644 index 0000000..382112b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/nodes.pyi @@ -0,0 +1,10 @@ +from typing import Any, List + +class reference: + def __init__(self, + rawsource: str = ..., + text: str = ..., + *children: List[Any], + **attributes) -> None: ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/__init__.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi new file mode 100644 index 0000000..024e962 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/nodes.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi new file mode 100644 index 0000000..58b9cd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/roles.pyi @@ -0,0 +1,12 @@ +import docutils.nodes +import docutils.parsers.rst.states + +from typing import Callable, Any, List, Dict, Tuple + +def register_local_role(name: str, + role_fn: Callable[[str, str, str, int, docutils.parsers.rst.states.Inliner, Dict, List], + Tuple[List[docutils.nodes.reference], List[docutils.nodes.reference]]] + ) -> None: + ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi new file mode 100644 index 0000000..ac00fe1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/docutils/parsers/rst/states.pyi @@ -0,0 +1,8 @@ +import typing +from typing import Any + +class Inliner: + def __init__(self) -> None: + ... + +def __getattr__(name) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi new file mode 100644 index 0000000..da8eb40 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/__init__.pyi @@ -0,0 +1,43 @@ +from typing import Mapping, Any, Optional, Union, Dict + +from . import algorithms + +def decode(jwt: Union[str, bytes], key: Union[str, bytes] = ..., + verify: bool = ..., algorithms: Optional[Any] = ..., + options: Optional[Mapping[Any, Any]] = ..., + **kwargs: Any) -> Dict[str, Any]: ... + +def encode(payload: Mapping[str, Any], key: Union[str, bytes], + algorithm: str = ..., headers: Optional[Mapping[str, Any]] = ..., + json_encoder: Optional[Any] = ...) -> bytes: ... + +def register_algorithm(alg_id: str, + alg_obj: algorithms.Algorithm) -> None: ... + +def unregister_algorithm(alg_id: str) -> None: ... + +class PyJWTError(Exception): ... +class InvalidTokenError(PyJWTError): ... +class DecodeError(InvalidTokenError): ... +class ExpiredSignatureError(InvalidTokenError): ... +class InvalidAudienceError(InvalidTokenError): ... +class InvalidIssuerError(InvalidTokenError): ... +class InvalidIssuedAtError(InvalidTokenError): ... +class ImmatureSignatureError(InvalidTokenError): ... +class InvalidKeyError(PyJWTError): ... +class InvalidAlgorithmError(InvalidTokenError): ... +class MissingRequiredClaimError(InvalidTokenError): ... +class InvalidSignatureError(DecodeError): ... + +# Compatibility aliases (deprecated) +ExpiredSignature = ExpiredSignatureError +InvalidAudience = InvalidAudienceError +InvalidIssuer = InvalidIssuerError + +# These aren't actually documented, but the package +# exports them in __init__.py, so we should at least +# make sure that mypy doesn't raise spurious errors +# if they're used. +get_unverified_header: Any +PyJWT: Any +PyJWS: Any diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi new file mode 100644 index 0000000..7177dc7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/algorithms.pyi @@ -0,0 +1,83 @@ +import sys +from hashlib import _Hash +from typing import Any, Set, Dict, Optional, ClassVar, Union, Generic, TypeVar + +requires_cryptography = Set[str] + +def get_default_algorithms() -> Dict[str, Algorithm]: ... + +_K = TypeVar("_K") + +class Algorithm(Generic[_K]): + def prepare_key(self, key: _K) -> _K: ... + def sign(self, msg: bytes, key: _K) -> bytes: ... + def verify(self, msg: bytes, key: _K, sig: bytes) -> bool: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... # should be key_obj: _K, see python/mypy#1337 + @staticmethod + def from_jwk(jwk: str) -> Any: ... # should return _K, see python/mypy#1337 + + +class NoneAlgorithm(Algorithm[None]): + def prepare_key(self, key: Optional[str]) -> None: ... + +class _HashAlg: + def __call__(self, arg: Union[bytes, bytearray, memoryview] = ...) -> _Hash: ... + +if sys.version_info >= (3, 6): + _LoadsString = Union[str, bytes, bytearray] +else: + _LoadsString = str + +class HMACAlgorithm(Algorithm[bytes]): + SHA256: ClassVar[_HashAlg] + SHA384: ClassVar[_HashAlg] + SHA512: ClassVar[_HashAlg] + hash_alg: _HashAlg + def __init__(self, _HashAlg) -> None: ... + def prepare_key(self, key: Union[str, bytes]) -> bytes: ... + @staticmethod + def to_jwk(key_obj: Union[str, bytes]) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> bytes: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class RSAAlgorithm(Algorithm): + SHA256: ClassVar[Any] + SHA384: ClassVar[Any] + SHA512: ClassVar[Any] + hash_alg: Any + def __init__(self, hash_alg: Any) -> None: ... + def prepare_key(self, key: Any) -> Any: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> Any: ... + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class ECAlgorithm(Algorithm): + SHA256: ClassVar[Any] + SHA384: ClassVar[Any] + SHA512: ClassVar[Any] + hash_alg: Any + def __init__(self, hash_alg: Any) -> None: ... + def prepare_key(self, key: Any) -> Any: ... + @staticmethod + def to_jwk(key_obj: Any) -> str: ... + @staticmethod + def from_jwk(jwk: _LoadsString) -> Any: ... + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... + +# Only defined if cryptography is installed. Types should be tightened when +# cryptography gets type hints. +# See https://github.com/python/typeshed/issues/2542 +class RSAPSSAlgorithm(RSAAlgorithm): + def sign(self, msg: bytes, key: Any) -> bytes: ... + def verify(self, msg: bytes, key: Any, sig: bytes) -> bool: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/__init__.pyi new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi new file mode 100644 index 0000000..b2bb1f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/__init__.pyi @@ -0,0 +1 @@ +from hashlib import _Hash as _HashAlg diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi new file mode 100644 index 0000000..e1342cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/py_ecdsa.pyi @@ -0,0 +1,10 @@ +from typing import Any +from jwt.algorithms import Algorithm + +from . import _HashAlg + +class ECAlgorithm(Algorithm): + SHA256: _HashAlg + SHA384: _HashAlg + SHA512: _HashAlg + def __init__(self, hash_alg: _HashAlg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi new file mode 100644 index 0000000..763b46a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/jwt/contrib/algorithms/pycrypto.pyi @@ -0,0 +1,10 @@ +from typing import Any +from jwt.algorithms import Algorithm + +from . import _HashAlg + +class RSAAlgorithm(Algorithm): + SHA256: _HashAlg + SHA384: _HashAlg + SHA512: _HashAlg + def __init__(self, hash_alg: _HashAlg) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/orjson.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/orjson.pyi new file mode 100644 index 0000000..9c1cdc1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/orjson.pyi @@ -0,0 +1,14 @@ +# https://github.com/ijl/orjson/blob/master/orjson.pyi + +from typing import Any, Callable, Optional, Union + +def dumps( + __obj: Any, default: Optional[Callable[[Any], Any]] = ..., option: Optional[int] = ... +) -> bytes: ... +def loads(__obj: Union[bytes, str]) -> Any: ... + +class JSONDecodeError(ValueError): ... +class JSONEncodeError(TypeError): ... + +OPT_STRICT_INTEGER: int +OPT_NAIVE_UTC: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi new file mode 100644 index 0000000..55914e1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/__init__.pyi @@ -0,0 +1,253 @@ +# Stubs for pkg_resources (Python 3.4) + +from typing import Any, Callable, Dict, IO, Iterable, Generator, Optional, Sequence, Tuple, List, Union, TypeVar, overload +from abc import ABCMeta +import importlib.abc +import types +import zipimport + +_T = TypeVar("_T") +_NestedStr = Union[str, Iterable[Union[str, Iterable[Any]]]] +_InstallerType = Callable[[Requirement], Optional[Distribution]] +_EPDistType = Union[Distribution, Requirement, str] +_MetadataType = Optional[IResourceProvider] +_PkgReqType = Union[str, Requirement] +_DistFinderType = Callable[[str, _Importer, bool], Generator[Distribution, None, None]] +_NSHandlerType = Callable[[_Importer, str, str, types.ModuleType], str] + +def declare_namespace(name: str) -> None: ... +def fixup_namespace_packages(path_item: str) -> None: ... + +class WorkingSet: + entries: List[str] + def __init__(self, entries: Optional[Iterable[str]] = ...) -> None: ... + def require(self, *requirements: _NestedStr) -> Sequence[Distribution]: ... + def run_script(self, requires: str, script_name: str) -> None: ... + def iter_entry_points(self, group: str, name: Optional[str] = ...) -> Generator[EntryPoint, None, None]: ... + def add_entry(self, entry: str) -> None: ... + def __contains__(self, dist: Distribution) -> bool: ... + def __iter__(self) -> Generator[Distribution, None, None]: ... + def find(self, req: Requirement) -> Optional[Distribution]: ... + def resolve( + self, requirements: Sequence[Requirement], env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ... + ) -> List[Distribution]: ... + def add(self, dist: Distribution, entry: Optional[str] = ..., insert: bool = ..., replace: bool = ...) -> None: ... + def subscribe(self, callback: Callable[[Distribution], None]) -> None: ... + def find_plugins( + self, plugin_env: Environment, full_env: Optional[Environment] = ..., fallback: bool = ... + ) -> Tuple[List[Distribution], Dict[Distribution, Exception]]: ... + +working_set: WorkingSet + +def require(*requirements: Union[str, Sequence[str]]) -> Sequence[Distribution]: ... +def run_script(requires: str, script_name: str) -> None: ... +def iter_entry_points(group: str, name: Optional[str] = ...) -> Generator[EntryPoint, None, None]: ... +def add_activation_listener(callback: Callable[[Distribution], None]) -> None: ... + +class Environment: + def __init__( + self, search_path: Optional[Sequence[str]] = ..., platform: Optional[str] = ..., python: Optional[str] = ... + ) -> None: ... + def __getitem__(self, project_name: str) -> List[Distribution]: ... + def __iter__(self) -> Generator[str, None, None]: ... + def add(self, dist: Distribution) -> None: ... + def remove(self, dist: Distribution) -> None: ... + def can_add(self, dist: Distribution) -> bool: ... + def __add__(self, other: Union[Distribution, Environment]) -> Environment: ... + def __iadd__(self, other: Union[Distribution, Environment]) -> Environment: ... + @overload + def best_match(self, req: Requirement, working_set: WorkingSet) -> Distribution: ... + @overload + def best_match(self, req: Requirement, working_set: WorkingSet, installer: Callable[[Requirement], _T] = ...) -> _T: ... + @overload + def obtain(self, requirement: Requirement) -> None: ... + @overload + def obtain(self, requirement: Requirement, installer: Callable[[Requirement], _T] = ...) -> _T: ... + def scan(self, search_path: Optional[Sequence[str]] = ...) -> None: ... + +def parse_requirements(strs: Union[str, Iterable[str]]) -> Generator[Requirement, None, None]: ... + +class Requirement: + unsafe_name: str + project_name: str + key: str + extras: Tuple[str, ...] + specs: List[Tuple[str, str]] + # TODO: change this to Optional[packaging.markers.Marker] once we can import + # packaging.markers + marker: Optional[Any] + @staticmethod + def parse(s: Union[str, Iterable[str]]) -> Requirement: ... + def __contains__(self, item: Union[Distribution, str, Tuple[str, ...]]) -> bool: ... + def __eq__(self, other_requirement: Any) -> bool: ... + +def load_entry_point(dist: _EPDistType, group: str, name: str) -> None: ... +def get_entry_info(dist: _EPDistType, group: str, name: str) -> Optional[EntryPoint]: ... +@overload +def get_entry_map(dist: _EPDistType) -> Dict[str, Dict[str, EntryPoint]]: ... +@overload +def get_entry_map(dist: _EPDistType, group: str) -> Dict[str, EntryPoint]: ... + +class EntryPoint: + name: str + module_name: str + attrs: Tuple[str, ...] + extras: Tuple[str, ...] + dist: Optional[Distribution] + def __init__( + self, + name: str, + module_name: str, + attrs: Tuple[str, ...] = ..., + extras: Tuple[str, ...] = ..., + dist: Optional[Distribution] = ..., + ) -> None: ... + @classmethod + def parse(cls, src: str, dist: Optional[Distribution] = ...) -> EntryPoint: ... + @classmethod + def parse_group( + cls, group: str, lines: Union[str, Sequence[str]], dist: Optional[Distribution] = ... + ) -> Dict[str, EntryPoint]: ... + @classmethod + def parse_map( + cls, data: Union[Dict[str, Union[str, Sequence[str]]], str, Sequence[str]], dist: Optional[Distribution] = ... + ) -> Dict[str, EntryPoint]: ... + def load(self, require: bool = ..., env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ...) -> Any: ... + def require(self, env: Optional[Environment] = ..., installer: Optional[_InstallerType] = ...) -> None: ... + def resolve(self) -> Any: ... + +def find_distributions(path_item: str, only: bool = ...) -> Generator[Distribution, None, None]: ... +def get_distribution(dist: Union[Requirement, str, Distribution]) -> Distribution: ... + +class Distribution(IResourceProvider, IMetadataProvider): + PKG_INFO: str + location: str + project_name: str + key: str + extras: List[str] + version: str + parsed_version: Tuple[str, ...] + py_version: str + platform: Optional[str] + precedence: int + def __init__( + self, + location: Optional[str] = ..., + metadata: Optional[str] = ..., + project_name: Optional[str] = ..., + version: Optional[str] = ..., + py_version: str = ..., + platform: Optional[str] = ..., + precedence: int = ..., + ) -> None: ... + @classmethod + def from_location( + cls, location: str, basename: str, metadata: Optional[str] = ..., **kw: Union[str, None, int] + ) -> Distribution: ... + @classmethod + def from_filename(cls, filename: str, metadata: Optional[str] = ..., **kw: Union[str, None, int]) -> Distribution: ... + def activate(self, path: Optional[List[str]] = ...) -> None: ... + def as_requirement(self) -> Requirement: ... + def requires(self, extras: Tuple[str, ...] = ...) -> List[Requirement]: ... + def clone(self, **kw: Union[str, int, None]) -> Requirement: ... + def egg_name(self) -> str: ... + def __cmp__(self, other: Any) -> bool: ... + def get_entry_info(self, group: str, name: str) -> Optional[EntryPoint]: ... + @overload + def get_entry_map(self) -> Dict[str, Dict[str, EntryPoint]]: ... + @overload + def get_entry_map(self, group: str) -> Dict[str, EntryPoint]: ... + def load_entry_point(self, group: str, name: str) -> None: ... + +EGG_DIST: int +BINARY_DIST: int +SOURCE_DIST: int +CHECKOUT_DIST: int +DEVELOP_DIST: int + +def resource_exists(package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... +def resource_stream(package_or_requirement: _PkgReqType, resource_name: str) -> IO[bytes]: ... +def resource_string(package_or_requirement: _PkgReqType, resource_name: str) -> bytes: ... +def resource_isdir(package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... +def resource_listdir(package_or_requirement: _PkgReqType, resource_name: str) -> List[str]: ... +def resource_filename(package_or_requirement: _PkgReqType, resource_name: str) -> str: ... +def set_extraction_path(path: str) -> None: ... +def cleanup_resources(force: bool = ...) -> List[str]: ... + +class IResourceManager: + def resource_exists(self, package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... + def resource_stream(self, package_or_requirement: _PkgReqType, resource_name: str) -> IO[bytes]: ... + def resource_string(self, package_or_requirement: _PkgReqType, resource_name: str) -> bytes: ... + def resource_isdir(self, package_or_requirement: _PkgReqType, resource_name: str) -> bool: ... + def resource_listdir(self, package_or_requirement: _PkgReqType, resource_name: str) -> List[str]: ... + def resource_filename(self, package_or_requirement: _PkgReqType, resource_name: str) -> str: ... + def set_extraction_path(self, path: str) -> None: ... + def cleanup_resources(self, force: bool = ...) -> List[str]: ... + def get_cache_path(self, archive_name: str, names: Tuple[str, ...] = ...) -> str: ... + def extraction_error(self) -> None: ... + def postprocess(self, tempname: str, filename: str) -> None: ... + +@overload +def get_provider(package_or_requirement: str) -> IResourceProvider: ... +@overload +def get_provider(package_or_requirement: Requirement) -> Distribution: ... + +class IMetadataProvider: + def has_metadata(self, name: str) -> bool: ... + def metadata_isdir(self, name: str) -> bool: ... + def metadata_listdir(self, name: str) -> List[str]: ... + def get_metadata(self, name: str) -> str: ... + def get_metadata_lines(self, name: str) -> Generator[str, None, None]: ... + def run_script(self, script_name: str, namespace: Dict[str, Any]) -> None: ... + +class ResolutionError(Exception): ... +class DistributionNotFound(ResolutionError): ... +class VersionConflict(ResolutionError): ... +class UnknownExtra(ResolutionError): ... + +class ExtractionError(Exception): + manager: IResourceManager + cache_path: str + original_error: Exception + +class _Importer(importlib.abc.MetaPathFinder, importlib.abc.InspectLoader, metaclass=ABCMeta): ... + +def register_finder(importer_type: type, distribution_finder: _DistFinderType) -> None: ... +def register_loader_type(loader_type: type, provider_factory: Callable[[types.ModuleType], IResourceProvider]) -> None: ... +def register_namespace_handler(importer_type: type, namespace_handler: _NSHandlerType) -> None: ... + +class IResourceProvider(IMetadataProvider): ... +class NullProvider: ... +class EggProvider(NullProvider): ... +class DefaultProvider(EggProvider): ... + +class PathMetadata(DefaultProvider, IResourceProvider): + def __init__(self, path: str, egg_info: str) -> None: ... + +class ZipProvider(EggProvider): ... + +class EggMetadata(ZipProvider, IResourceProvider): + def __init__(self, zipimporter: zipimport.zipimporter) -> None: ... + +class EmptyProvider(NullProvider): ... + +empty_provider: EmptyProvider + +class FileMetadata(EmptyProvider, IResourceProvider): + def __init__(self, path_to_pkg_info: str) -> None: ... + +def parse_version(v: str) -> Tuple[str, ...]: ... +def yield_lines(strs: _NestedStr) -> Generator[str, None, None]: ... +def split_sections(strs: _NestedStr) -> Generator[Tuple[Optional[str], str], None, None]: ... +def safe_name(name: str) -> str: ... +def safe_version(version: str) -> str: ... +def safe_extra(extra: str) -> str: ... +def to_filename(name_or_version: str) -> str: ... +def get_build_platform() -> str: ... +def get_platform() -> str: ... +def get_supported_platform() -> str: ... +def compatible_platforms(provided: Optional[str], required: Optional[str]) -> bool: ... +def get_default_cache() -> str: ... +def get_importer(path_item: str) -> _Importer: ... +def ensure_directory(path: str) -> None: ... +def normalize_path(filename: str) -> str: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi new file mode 100644 index 0000000..e7b17a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/pkg_resources/py31compat.pyi @@ -0,0 +1,14 @@ +from typing import Text +import os +import sys + +needs_makedirs: bool + +def _makedirs_31(path: Text, exist_ok: bool = ...) -> None: ... + +# _makedirs_31 has special behavior to handle an edge case that was removed in +# 3.4.1. No one should be using 3.4 instead of 3.4.1, so this should be fine. +if sys.version_info >= (3,): + makedirs = os.makedirs +else: + makedirs = _makedirs_31 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/__init__.pyi new file mode 100644 index 0000000..b785eac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/__init__.pyi @@ -0,0 +1,108 @@ +# Stubs for six (Python 3.5) + +from __future__ import print_function + +from typing import ( + Any, + AnyStr, + Callable, + Dict, + ItemsView, + Iterable, + KeysView, + Mapping, + NoReturn, + Optional, + Pattern, + Text, + Tuple, + Type, + TypeVar, + Union, + ValuesView, + overload, +) +import types +import typing +import unittest + +# Exports +from io import StringIO as StringIO, BytesIO as BytesIO +from builtins import next as next +from functools import wraps as wraps +from . import moves + +_T = TypeVar('_T') +_K = TypeVar('_K') +_V = TypeVar('_V') + +# TODO make constant, then move this stub to 2and3 +# https://github.com/python/typeshed/issues/17 +PY2 = False +PY3 = True +PY34: bool + +string_types = str, +integer_types = int, +class_types = type, +text_type = str +binary_type = bytes + +MAXSIZE: int + +# def add_move +# def remove_move + +def callable(obj: object) -> bool: ... + +def get_unbound_function(unbound: types.FunctionType) -> types.FunctionType: ... +def create_bound_method(func: types.FunctionType, obj: object) -> types.MethodType: ... +def create_unbound_method(func: types.FunctionType, cls: type) -> types.FunctionType: ... + +Iterator = object + +def get_method_function(meth: types.MethodType) -> types.FunctionType: ... +def get_method_self(meth: types.MethodType) -> Optional[object]: ... +def get_function_closure(fun: types.FunctionType) -> Optional[Tuple[types._Cell, ...]]: ... +def get_function_code(fun: types.FunctionType) -> types.CodeType: ... +def get_function_defaults(fun: types.FunctionType) -> Optional[Tuple[Any, ...]]: ... +def get_function_globals(fun: types.FunctionType) -> Dict[str, Any]: ... + +def iterkeys(d: Mapping[_K, _V]) -> typing.Iterator[_K]: ... +def itervalues(d: Mapping[_K, _V]) -> typing.Iterator[_V]: ... +def iteritems(d: Mapping[_K, _V]) -> typing.Iterator[Tuple[_K, _V]]: ... +# def iterlists + +def viewkeys(d: Mapping[_K, _V]) -> KeysView[_K]: ... +def viewvalues(d: Mapping[_K, _V]) -> ValuesView[_V]: ... +def viewitems(d: Mapping[_K, _V]) -> ItemsView[_K, _V]: ... + +def b(s: str) -> binary_type: ... +def u(s: str) -> text_type: ... + +unichr = chr +def int2byte(i: int) -> bytes: ... +def byte2int(bs: binary_type) -> int: ... +def indexbytes(buf: binary_type, i: int) -> int: ... +def iterbytes(buf: binary_type) -> typing.Iterator[int]: ... + +def assertCountEqual(self: unittest.TestCase, first: Iterable[_T], second: Iterable[_T], msg: Optional[str] = ...) -> None: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, msg: Optional[str] = ...) -> Any: ... +@overload +def assertRaisesRegex(self: unittest.TestCase, callable_obj: Callable[..., Any], *args: Any, **kwargs: Any) -> Any: ... +def assertRegex(self: unittest.TestCase, text: AnyStr, expected_regex: Union[AnyStr, Pattern[AnyStr]], msg: Optional[str] = ...) -> None: ... + +exec_ = exec + +def reraise(tp: Optional[Type[BaseException]], value: Optional[BaseException], tb: Optional[types.TracebackType] = ...) -> NoReturn: ... +def raise_from(value: Union[BaseException, Type[BaseException]], from_value: Optional[BaseException]) -> NoReturn: ... + +print_ = print + +def with_metaclass(meta: type, *bases: type) -> type: ... +def add_metaclass(metaclass: type) -> Callable[[_T], _T]: ... +def ensure_binary(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> bytes: ... +def ensure_str(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> str: ... +def ensure_text(s: Union[bytes, Text], encoding: str = ..., errors: str = ...) -> Text: ... +def python_2_unicode_compatible(klass: _T) -> _T: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/BaseHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/CGIHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi new file mode 100644 index 0000000..0e1ad71 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/SimpleHTTPServer.pyi @@ -0,0 +1 @@ +from http.server import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi new file mode 100644 index 0000000..3d6efce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/__init__.pyi @@ -0,0 +1,69 @@ +# Stubs for six.moves +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +import sys + +from io import StringIO as cStringIO +from builtins import filter as filter +from itertools import filterfalse as filterfalse +from builtins import input as input +from sys import intern as intern +from builtins import map as map +from os import getcwd as getcwd +from os import getcwdb as getcwdb +from builtins import range as range +from functools import reduce as reduce +from shlex import quote as shlex_quote +from io import StringIO as StringIO +from collections import UserDict as UserDict +from collections import UserList as UserList +from collections import UserString as UserString +from builtins import range as xrange +from builtins import zip as zip +from itertools import zip_longest as zip_longest +from . import builtins +from . import configparser +# import copyreg as copyreg +# import dbm.gnu as dbm_gnu +from . import _dummy_thread +from . import http_cookiejar +from . import http_cookies +from . import html_entities +from . import html_parser +from . import http_client +from . import email_mime_multipart +from . import email_mime_nonmultipart +from . import email_mime_text +from . import email_mime_base +from . import BaseHTTPServer +from . import CGIHTTPServer +from . import SimpleHTTPServer +from . import cPickle +from . import queue +from . import reprlib +from . import socketserver +from . import _thread +from . import tkinter +from . import tkinter_dialog +from . import tkinter_filedialog +# import tkinter.scrolledtext as tkinter_scrolledtext +# import tkinter.simpledialog as tkinter_simpledialog +# import tkinter.tix as tkinter_tix +from . import tkinter_ttk +from . import tkinter_constants +# import tkinter.dnd as tkinter_dnd +# import tkinter.colorchooser as tkinter_colorchooser +from . import tkinter_commondialog +from . import tkinter_tkfiledialog +# import tkinter.font as tkinter_font +# import tkinter.messagebox as tkinter_messagebox +# import tkinter.simpledialog as tkinter_tksimpledialog +from . import urllib_parse +from . import urllib_error +from . import urllib +from . import urllib_robotparser +# import xmlrpc.client as xmlrpc_client +# import xmlrpc.server as xmlrpc_server + +from importlib import reload as reload_module diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi new file mode 100644 index 0000000..2487961 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_dummy_thread.pyi @@ -0,0 +1 @@ +from _dummy_thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi new file mode 100644 index 0000000..25952a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/_thread.pyi @@ -0,0 +1 @@ +from _thread import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi new file mode 100644 index 0000000..9596ba0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/builtins.pyi @@ -0,0 +1 @@ +from builtins import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi new file mode 100644 index 0000000..2b944b5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/cPickle.pyi @@ -0,0 +1 @@ +from pickle import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi new file mode 100644 index 0000000..044861c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/configparser.pyi @@ -0,0 +1 @@ +from configparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi new file mode 100644 index 0000000..4df155c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_base.pyi @@ -0,0 +1 @@ +from email.mime.base import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi new file mode 100644 index 0000000..4f31241 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_multipart.pyi @@ -0,0 +1 @@ +from email.mime.multipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi new file mode 100644 index 0000000..c15c8c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_nonmultipart.pyi @@ -0,0 +1 @@ +from email.mime.nonmultipart import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi new file mode 100644 index 0000000..51e1473 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/email_mime_text.pyi @@ -0,0 +1 @@ +from email.mime.text import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi new file mode 100644 index 0000000..c1244dd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_entities.pyi @@ -0,0 +1 @@ +from html.entities import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi new file mode 100644 index 0000000..6db6dd8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/html_parser.pyi @@ -0,0 +1 @@ +from html.parser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi new file mode 100644 index 0000000..36d29b9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_client.pyi @@ -0,0 +1 @@ +from http.client import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi new file mode 100644 index 0000000..88a1aed --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookiejar.pyi @@ -0,0 +1 @@ +from http.cookiejar import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi new file mode 100644 index 0000000..9c59a53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/http_cookies.pyi @@ -0,0 +1 @@ +from http.cookies import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi new file mode 100644 index 0000000..fe7be53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/queue.pyi @@ -0,0 +1 @@ +from queue import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi new file mode 100644 index 0000000..c329846 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/reprlib.pyi @@ -0,0 +1 @@ +from reprlib import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi new file mode 100644 index 0000000..6101c8b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/socketserver.pyi @@ -0,0 +1 @@ +from socketserver import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi new file mode 100644 index 0000000..fc4d53a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter.pyi @@ -0,0 +1 @@ +from tkinter import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi new file mode 100644 index 0000000..34eb419 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_commondialog.pyi @@ -0,0 +1 @@ +from tkinter.commondialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi new file mode 100644 index 0000000..3c04f6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_constants.pyi @@ -0,0 +1 @@ +from tkinter.constants import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi new file mode 100644 index 0000000..0da73c2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_dialog.pyi @@ -0,0 +1 @@ +from tkinter.dialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi new file mode 100644 index 0000000..c4cc7c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_filedialog.pyi @@ -0,0 +1 @@ +from tkinter.filedialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi new file mode 100644 index 0000000..c4cc7c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_tkfiledialog.pyi @@ -0,0 +1 @@ +from tkinter.filedialog import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi new file mode 100644 index 0000000..14576f6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/tkinter_ttk.pyi @@ -0,0 +1 @@ +from tkinter.ttk import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi new file mode 100644 index 0000000..d08209c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/__init__.pyi @@ -0,0 +1,5 @@ +import six.moves.urllib.error as error +import six.moves.urllib.parse as parse +import six.moves.urllib.request as request +import six.moves.urllib.response as response +import six.moves.urllib.robotparser as robotparser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi new file mode 100644 index 0000000..83f0d22 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/error.pyi @@ -0,0 +1,3 @@ +from urllib.error import URLError as URLError +from urllib.error import HTTPError as HTTPError +from urllib.error import ContentTooShortError as ContentTooShortError diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi new file mode 100644 index 0000000..8b4310a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/parse.pyi @@ -0,0 +1,27 @@ +# Stubs for six.moves.urllib.parse +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from urllib.parse import ParseResult as ParseResult +from urllib.parse import SplitResult as SplitResult +from urllib.parse import parse_qs as parse_qs +from urllib.parse import parse_qsl as parse_qsl +from urllib.parse import urldefrag as urldefrag +from urllib.parse import urljoin as urljoin +from urllib.parse import urlparse as urlparse +from urllib.parse import urlsplit as urlsplit +from urllib.parse import urlunparse as urlunparse +from urllib.parse import urlunsplit as urlunsplit +from urllib.parse import quote as quote +from urllib.parse import quote_plus as quote_plus +from urllib.parse import unquote as unquote +from urllib.parse import unquote_plus as unquote_plus +from urllib.parse import urlencode as urlencode +# from urllib.parse import splitquery as splitquery +# from urllib.parse import splittag as splittag +# from urllib.parse import splituser as splituser +from urllib.parse import uses_fragment as uses_fragment +from urllib.parse import uses_netloc as uses_netloc +from urllib.parse import uses_params as uses_params +from urllib.parse import uses_query as uses_query +from urllib.parse import uses_relative as uses_relative diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi new file mode 100644 index 0000000..b01dea7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/request.pyi @@ -0,0 +1,39 @@ +# Stubs for six.moves.urllib.request +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +from urllib.request import urlopen as urlopen +from urllib.request import install_opener as install_opener +from urllib.request import build_opener as build_opener +from urllib.request import pathname2url as pathname2url +from urllib.request import url2pathname as url2pathname +from urllib.request import getproxies as getproxies +from urllib.request import Request as Request +from urllib.request import OpenerDirector as OpenerDirector +from urllib.request import HTTPDefaultErrorHandler as HTTPDefaultErrorHandler +from urllib.request import HTTPRedirectHandler as HTTPRedirectHandler +from urllib.request import HTTPCookieProcessor as HTTPCookieProcessor +from urllib.request import ProxyHandler as ProxyHandler +from urllib.request import BaseHandler as BaseHandler +from urllib.request import HTTPPasswordMgr as HTTPPasswordMgr +from urllib.request import HTTPPasswordMgrWithDefaultRealm as HTTPPasswordMgrWithDefaultRealm +from urllib.request import AbstractBasicAuthHandler as AbstractBasicAuthHandler +from urllib.request import HTTPBasicAuthHandler as HTTPBasicAuthHandler +from urllib.request import ProxyBasicAuthHandler as ProxyBasicAuthHandler +from urllib.request import AbstractDigestAuthHandler as AbstractDigestAuthHandler +from urllib.request import HTTPDigestAuthHandler as HTTPDigestAuthHandler +from urllib.request import ProxyDigestAuthHandler as ProxyDigestAuthHandler +from urllib.request import HTTPHandler as HTTPHandler +from urllib.request import HTTPSHandler as HTTPSHandler +from urllib.request import FileHandler as FileHandler +from urllib.request import FTPHandler as FTPHandler +from urllib.request import CacheFTPHandler as CacheFTPHandler +from urllib.request import UnknownHandler as UnknownHandler +from urllib.request import HTTPErrorProcessor as HTTPErrorProcessor +from urllib.request import urlretrieve as urlretrieve +from urllib.request import urlcleanup as urlcleanup +from urllib.request import URLopener as URLopener +from urllib.request import FancyURLopener as FancyURLopener +# from urllib.request import proxy_bypass as proxy_bypass +from urllib.request import parse_http_list as parse_http_list +from urllib.request import parse_keqv_list as parse_keqv_list diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi new file mode 100644 index 0000000..9f681ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/response.pyi @@ -0,0 +1,8 @@ +# Stubs for six.moves.urllib.response +# +# Note: Commented out items means they weren't implemented at the time. +# Uncomment them when the modules have been added to the typeshed. +# from urllib.response import addbase as addbase +# from urllib.response import addclosehook as addclosehook +# from urllib.response import addinfo as addinfo +from urllib.response import addinfourl as addinfourl diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi new file mode 100644 index 0000000..bccda14 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib/robotparser.pyi @@ -0,0 +1 @@ +from urllib.robotparser import RobotFileParser as RobotFileParser diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi new file mode 100644 index 0000000..2720072 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_error.pyi @@ -0,0 +1 @@ +from urllib.error import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi new file mode 100644 index 0000000..b557bbb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_parse.pyi @@ -0,0 +1 @@ +from urllib.parse import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi new file mode 100644 index 0000000..dc03dce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_request.pyi @@ -0,0 +1 @@ +from .urllib.request import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi new file mode 100644 index 0000000..bbee522 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_response.pyi @@ -0,0 +1 @@ +from .urllib.response import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi new file mode 100644 index 0000000..bbf5c3c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/six/moves/urllib_robotparser.pyi @@ -0,0 +1 @@ +from urllib.robotparser import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi new file mode 100644 index 0000000..f260032 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/__init__.pyi @@ -0,0 +1,2 @@ +# This module is a fork of the CPython 2 and 3 ast modules with PEP 484 support. +# See: https://github.com/python/typed_ast diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi new file mode 100644 index 0000000..c564342 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast27.pyi @@ -0,0 +1,361 @@ +import typing +from typing import Any, Optional, Union, Generic, Iterator + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> None: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> None: ... + +def parse(source: Union[str, bytes], filename: Union[str, bytes] = ..., mode: str = ...) -> AST: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> Optional[bytes]: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +PyCF_ONLY_AST: int + +# ast classes + +identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + type_comment: Optional[str] + +class ClassDef(stmt): + name: identifier + bases: typing.List[expr] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + type_comment: Optional[str] + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class Print(stmt): + dest: Optional[expr] + values: typing.List[expr] + nl: bool + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + context_expr: expr + optional_vars: Optional[expr] + body: typing.List[stmt] + type_comment: Optional[str] + +class Raise(stmt): + type: Optional[expr] + inst: Optional[expr] + tback: Optional[expr] + +class TryExcept(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + +class TryFinally(stmt): + body: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[identifier] + names: typing.List[alias] + level: Optional[int] + +class Exec(stmt): + body: expr + globals: Optional[expr] + locals: Optional[expr] + +class Global(stmt): + names: typing.List[identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + +class Ellipsis(slice): ... + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Yield(expr): + value: Optional[expr] + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + starargs: Optional[expr] + kwargs: Optional[expr] + +class Repr(expr): + value: expr + +class Num(expr): + n: Union[int, float, complex] + +class Str(expr): + s: bytes + kind: str + +class Attribute(expr): + value: expr + attr: identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Name(expr): + id: identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + + +class ExceptHandler(AST): + type: Optional[expr] + name: Optional[expr] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[expr] + vararg: Optional[identifier] + kwarg: Optional[identifier] + defaults: typing.List[expr] + type_comments: typing.List[Optional[str]] + +class keyword(AST): + arg: identifier + value: expr + +class alias(AST): + name: identifier + asname: Optional[identifier] + + +class TypeIgnore(AST): + lineno: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi new file mode 100644 index 0000000..1962b46 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/ast3.pyi @@ -0,0 +1,413 @@ +import typing +from typing import Any, Optional, Union, Generic, Iterator + +class NodeVisitor(): + def visit(self, node: AST) -> Any: ... + def generic_visit(self, node: AST) -> None: ... + +class NodeTransformer(NodeVisitor): + def generic_visit(self, node: AST) -> None: ... + +def parse(source: Union[str, bytes], + filename: Union[str, bytes] = ..., + mode: str = ..., + feature_version: int = ...) -> AST: ... +def copy_location(new_node: AST, old_node: AST) -> AST: ... +def dump(node: AST, annotate_fields: bool = ..., include_attributes: bool = ...) -> str: ... +def fix_missing_locations(node: AST) -> AST: ... +def get_docstring(node: AST, clean: bool = ...) -> str: ... +def increment_lineno(node: AST, n: int = ...) -> AST: ... +def iter_child_nodes(node: AST) -> Iterator[AST]: ... +def iter_fields(node: AST) -> Iterator[typing.Tuple[str, Any]]: ... +def literal_eval(node_or_string: Union[str, AST]) -> Any: ... +def walk(node: AST) -> Iterator[AST]: ... + +PyCF_ONLY_AST: int + +# ast classes + +identifier = str + +class AST: + _attributes: typing.Tuple[str, ...] + _fields: typing.Tuple[str, ...] + def __init__(self, *args, **kwargs) -> None: ... + +class mod(AST): + ... + +class Module(mod): + body: typing.List[stmt] + type_ignores: typing.List[TypeIgnore] + +class Interactive(mod): + body: typing.List[stmt] + +class Expression(mod): + body: expr + +class FunctionType(mod): + argtypes: typing.List[expr] + returns: expr + +class Suite(mod): + body: typing.List[stmt] + + +class stmt(AST): + lineno: int + col_offset: int + +class FunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + type_comment: Optional[str] + +class AsyncFunctionDef(stmt): + name: identifier + args: arguments + body: typing.List[stmt] + decorator_list: typing.List[expr] + returns: Optional[expr] + type_comment: Optional[str] + +class ClassDef(stmt): + name: identifier + bases: typing.List[expr] + keywords: typing.List[keyword] + body: typing.List[stmt] + decorator_list: typing.List[expr] + +class Return(stmt): + value: Optional[expr] + +class Delete(stmt): + targets: typing.List[expr] + +class Assign(stmt): + targets: typing.List[expr] + value: expr + type_comment: Optional[str] + +class AugAssign(stmt): + target: expr + op: operator + value: expr + +class AnnAssign(stmt): + target: expr + annotation: expr + value: Optional[expr] + simple: int + +class For(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class AsyncFor(stmt): + target: expr + iter: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + type_comment: Optional[str] + +class While(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class If(stmt): + test: expr + body: typing.List[stmt] + orelse: typing.List[stmt] + +class With(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + type_comment: Optional[str] + +class AsyncWith(stmt): + items: typing.List[withitem] + body: typing.List[stmt] + type_comment: Optional[str] + +class Raise(stmt): + exc: Optional[expr] + cause: Optional[expr] + +class Try(stmt): + body: typing.List[stmt] + handlers: typing.List[ExceptHandler] + orelse: typing.List[stmt] + finalbody: typing.List[stmt] + +class Assert(stmt): + test: expr + msg: Optional[expr] + +class Import(stmt): + names: typing.List[alias] + +class ImportFrom(stmt): + module: Optional[identifier] + names: typing.List[alias] + level: Optional[int] + +class Global(stmt): + names: typing.List[identifier] + +class Nonlocal(stmt): + names: typing.List[identifier] + +class Expr(stmt): + value: expr + +class Pass(stmt): ... +class Break(stmt): ... +class Continue(stmt): ... + + +class slice(AST): + ... + +_slice = slice # this lets us type the variable named 'slice' below + +class Slice(slice): + lower: Optional[expr] + upper: Optional[expr] + step: Optional[expr] + +class ExtSlice(slice): + dims: typing.List[slice] + +class Index(slice): + value: expr + + +class expr(AST): + lineno: int + col_offset: int + +class BoolOp(expr): + op: boolop + values: typing.List[expr] + +class BinOp(expr): + left: expr + op: operator + right: expr + +class UnaryOp(expr): + op: unaryop + operand: expr + +class Lambda(expr): + args: arguments + body: expr + +class IfExp(expr): + test: expr + body: expr + orelse: expr + +class Dict(expr): + keys: typing.List[expr] + values: typing.List[expr] + +class Set(expr): + elts: typing.List[expr] + +class ListComp(expr): + elt: expr + generators: typing.List[comprehension] + +class SetComp(expr): + elt: expr + generators: typing.List[comprehension] + +class DictComp(expr): + key: expr + value: expr + generators: typing.List[comprehension] + +class GeneratorExp(expr): + elt: expr + generators: typing.List[comprehension] + +class Await(expr): + value: expr + +class Yield(expr): + value: Optional[expr] + +class YieldFrom(expr): + value: expr + +class Compare(expr): + left: expr + ops: typing.List[cmpop] + comparators: typing.List[expr] + +class Call(expr): + func: expr + args: typing.List[expr] + keywords: typing.List[keyword] + +class Num(expr): + n: Union[float, int, complex] + +class Str(expr): + s: str + kind: str + +class FormattedValue(expr): + value: expr + conversion: typing.Optional[int] + format_spec: typing.Optional[expr] + +class JoinedStr(expr): + values: typing.List[expr] + +class Bytes(expr): + s: bytes + +class NameConstant(expr): + value: Any + +class Ellipsis(expr): ... + +class Attribute(expr): + value: expr + attr: identifier + ctx: expr_context + +class Subscript(expr): + value: expr + slice: _slice + ctx: expr_context + +class Starred(expr): + value: expr + ctx: expr_context + +class Name(expr): + id: identifier + ctx: expr_context + +class List(expr): + elts: typing.List[expr] + ctx: expr_context + +class Tuple(expr): + elts: typing.List[expr] + ctx: expr_context + + +class expr_context(AST): + ... + +class AugLoad(expr_context): ... +class AugStore(expr_context): ... +class Del(expr_context): ... +class Load(expr_context): ... +class Param(expr_context): ... +class Store(expr_context): ... + + +class boolop(AST): + ... + +class And(boolop): ... +class Or(boolop): ... + +class operator(AST): + ... + +class Add(operator): ... +class BitAnd(operator): ... +class BitOr(operator): ... +class BitXor(operator): ... +class Div(operator): ... +class FloorDiv(operator): ... +class LShift(operator): ... +class Mod(operator): ... +class Mult(operator): ... +class MatMult(operator): ... +class Pow(operator): ... +class RShift(operator): ... +class Sub(operator): ... + +class unaryop(AST): + ... + +class Invert(unaryop): ... +class Not(unaryop): ... +class UAdd(unaryop): ... +class USub(unaryop): ... + +class cmpop(AST): + ... + +class Eq(cmpop): ... +class Gt(cmpop): ... +class GtE(cmpop): ... +class In(cmpop): ... +class Is(cmpop): ... +class IsNot(cmpop): ... +class Lt(cmpop): ... +class LtE(cmpop): ... +class NotEq(cmpop): ... +class NotIn(cmpop): ... + + +class comprehension(AST): + target: expr + iter: expr + ifs: typing.List[expr] + is_async: int + + +class ExceptHandler(AST): + type: Optional[expr] + name: Optional[identifier] + body: typing.List[stmt] + lineno: int + col_offset: int + + +class arguments(AST): + args: typing.List[arg] + vararg: Optional[arg] + kwonlyargs: typing.List[arg] + kw_defaults: typing.List[expr] + kwarg: Optional[arg] + defaults: typing.List[expr] + +class arg(AST): + arg: identifier + annotation: Optional[expr] + lineno: int + col_offset: int + type_comment: typing.Optional[str] + +class keyword(AST): + arg: Optional[identifier] + value: expr + +class alias(AST): + name: identifier + asname: Optional[identifier] + +class withitem(AST): + context_expr: expr + optional_vars: Optional[expr] + + +class TypeIgnore(AST): + lineno: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi new file mode 100644 index 0000000..d5f1829 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/third_party/typeshed/third_party/3/typed_ast/conversions.pyi @@ -0,0 +1,4 @@ +from . import ast27 +from . import ast3 + +def py2to3(ast: ast27.AST) -> ast3.AST: ... diff --git a/vim/bundle/jedi-vim/pythonx/jedi/jedi/utils.py b/vim/bundle/jedi-vim/pythonx/jedi/jedi/utils.py new file mode 100644 index 0000000..a5cf84b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/jedi/utils.py @@ -0,0 +1,134 @@ +""" +Utilities for end-users. +""" + +from __future__ import absolute_import +import __main__ +from collections import namedtuple +import logging +import traceback +import re +import os +import sys + +from jedi import Interpreter + + +READLINE_DEBUG = False + + +def setup_readline(namespace_module=__main__): + """ + Install Jedi completer to :mod:`readline`. + + This function setups :mod:`readline` to use Jedi in Python interactive + shell. If you want to use a custom ``PYTHONSTARTUP`` file (typically + ``$HOME/.pythonrc.py``), you can add this piece of code:: + + try: + from jedi.utils import setup_readline + setup_readline() + except ImportError: + # Fallback to the stdlib readline completer if it is installed. + # Taken from http://docs.python.org/2/library/rlcompleter.html + print("Jedi is not installed, falling back to readline") + try: + import readline + import rlcompleter + readline.parse_and_bind("tab: complete") + except ImportError: + print("Readline is not installed either. No tab completion is enabled.") + + This will fallback to the readline completer if Jedi is not installed. + The readline completer will only complete names in the global namespace, + so for example:: + + ran + + will complete to ``range`` + + with both Jedi and readline, but:: + + range(10).cou + + will show complete to ``range(10).count`` only with Jedi. + + You'll also need to add ``export PYTHONSTARTUP=$HOME/.pythonrc.py`` to + your shell profile (usually ``.bash_profile`` or ``.profile`` if you use + bash). + + """ + if READLINE_DEBUG: + logging.basicConfig( + filename='/tmp/jedi.log', + filemode='a', + level=logging.DEBUG + ) + + class JediRL(object): + def complete(self, text, state): + """ + This complete stuff is pretty weird, a generator would make + a lot more sense, but probably due to backwards compatibility + this is still the way how it works. + + The only important part is stuff in the ``state == 0`` flow, + everything else has been copied from the ``rlcompleter`` std. + library module. + """ + if state == 0: + sys.path.insert(0, os.getcwd()) + # Calling python doesn't have a path, so add to sys.path. + try: + logging.debug("Start REPL completion: " + repr(text)) + interpreter = Interpreter(text, [namespace_module.__dict__]) + + completions = interpreter.completions() + logging.debug("REPL completions: %s", completions) + + self.matches = [ + text[:len(text) - c._like_name_length] + c.name_with_symbols + for c in completions + ] + except: + logging.error("REPL Completion error:\n" + traceback.format_exc()) + raise + finally: + sys.path.pop(0) + try: + return self.matches[state] + except IndexError: + return None + + try: + # Need to import this one as well to make sure it's executed before + # this code. This didn't use to be an issue until 3.3. Starting with + # 3.4 this is different, it always overwrites the completer if it's not + # already imported here. + import rlcompleter # noqa: F401 + import readline + except ImportError: + print("Jedi: Module readline not available.") + else: + readline.set_completer(JediRL().complete) + readline.parse_and_bind("tab: complete") + # jedi itself does the case matching + readline.parse_and_bind("set completion-ignore-case on") + # because it's easier to hit the tab just once + readline.parse_and_bind("set show-all-if-unmodified") + readline.parse_and_bind("set show-all-if-ambiguous on") + # don't repeat all the things written in the readline all the time + readline.parse_and_bind("set completion-prefix-display-length 2") + # No delimiters, Jedi handles that. + readline.set_completer_delims('') + + +def version_info(): + """ + Returns a namedtuple of Jedi's version, similar to Python's + ``sys.version_info``. + """ + Version = namedtuple('Version', 'major, minor, micro') + from jedi import __version__ + tupl = re.findall(r'[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/pytest.ini b/vim/bundle/jedi-vim/pythonx/jedi/pytest.ini new file mode 100644 index 0000000..6bb988a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/pytest.ini @@ -0,0 +1,14 @@ +[pytest] +addopts = --doctest-modules + +# Ignore broken files in blackbox test directories +norecursedirs = .* docs completion refactor absolute_import namespace_package + scripts extensions speed static_analysis not_in_sys_path + sample_venvs init_extension_module simple_import jedi/third_party + +# Activate `clean_jedi_cache` fixture for all tests. This should be +# fine as long as we are using `clean_jedi_cache` as a session scoped +# fixture. +usefixtures = clean_jedi_cache + +testpaths = jedi test diff --git a/vim/bundle/jedi-vim/pythonx/jedi/requirements.txt b/vim/bundle/jedi-vim/pythonx/jedi/requirements.txt new file mode 100644 index 0000000..00b9166 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/requirements.txt @@ -0,0 +1 @@ +parso>=0.5.0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/scripts/diff_parser_profile.py b/vim/bundle/jedi-vim/pythonx/jedi/scripts/diff_parser_profile.py new file mode 100755 index 0000000..a152a3e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/scripts/diff_parser_profile.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +""" +Profile a piece of Python code with ``cProfile`` that uses the diff parser. + +Usage: + profile.py [-d] [-s ] + profile.py -h | --help + +Options: + -h --help Show this screen. + -d --debug Enable Jedi internal debugging. + -s Sort the profile results, e.g. cumtime, name [default: time]. +""" + +import cProfile + +from docopt import docopt +from jedi.parser.python import load_grammar +from jedi.parser.diff import DiffParser +from jedi.parser.python import ParserWithRecovery +from jedi._compatibility import u +from jedi.common import splitlines +import jedi + + +def run(parser, lines): + diff_parser = DiffParser(parser) + diff_parser.update(lines) + # Make sure used_names is loaded + parser.module.used_names + + +def main(args): + if args['--debug']: + jedi.set_debug_function(notices=True) + + with open(args['']) as f: + code = f.read() + grammar = load_grammar() + parser = ParserWithRecovery(grammar, u(code)) + # Make sure used_names is loaded + parser.module.used_names + + code = code + '\na\n' # Add something so the diff parser needs to run. + lines = splitlines(code, keepends=True) + cProfile.runctx('run(parser, lines)', globals(), locals(), sort=args['-s']) + +if __name__ == '__main__': + args = docopt(__doc__) + main(args) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/scripts/memory_check.py b/vim/bundle/jedi-vim/pythonx/jedi/scripts/memory_check.py new file mode 100755 index 0000000..7bbcad2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/scripts/memory_check.py @@ -0,0 +1,58 @@ +#! /usr/bin/env python +""" +This is a convenience script to test the speed and memory usage of Jedi with +large libraries. + +Each library is preloaded by jedi, recording the time and memory consumed by +each operation. + +You can provide additional libraries via command line arguments. + +Note: This requires the psutil library, available on PyPI. +""" +import time +import sys +import os +import psutil +sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/..')) +import jedi + + +def used_memory(): + """Return the total MB of System Memory in use.""" + return psutil.virtual_memory().used / 2 ** 20 + + +def profile_preload(mod): + """Preload a module into Jedi, recording time and memory used.""" + base = used_memory() + t0 = time.time() + jedi.preload_module(mod) + elapsed = time.time() - t0 + used = used_memory() - base + return elapsed, used + + +def main(mods): + """Preload the modules, and print the time and memory used.""" + t0 = time.time() + baseline = used_memory() + print('Time (s) | Mem (MB) | Package') + print('------------------------------') + for mod in mods: + elapsed, used = profile_preload(mod) + if used > 0: + print('%8.2f | %8d | %s' % (elapsed, used, mod)) + print('------------------------------') + elapsed = time.time() - t0 + used = used_memory() - baseline + print('%8.2f | %8d | %s' % (elapsed, used, 'Total')) + + +if __name__ == '__main__': + if sys.argv[1:]: + mods = sys.argv[1:] + else: + mods = ['re', 'numpy', 'scipy', 'scipy.sparse', 'scipy.stats', + 'wx', 'decimal', 'PyQt4.QtGui', 'PySide.QtGui', 'Tkinter'] + main(mods) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/scripts/profile_output.py b/vim/bundle/jedi-vim/pythonx/jedi/scripts/profile_output.py new file mode 100755 index 0000000..27b9e9f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/scripts/profile_output.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3.6 +# -*- coding: utf-8 -*- +""" +Profile a piece of Python code with ``profile``. Tries a completion on a +certain piece of code. + +Usage: + profile.py [] [-n ] [-d] [-o] [-s ] [-i] [--precision] + profile.py -h | --help + +Options: + -h --help Show this screen. + -n Number of passes before profiling [default: 1]. + -d --debug Enable Jedi internal debugging. + -o --omit Omit profiler, just do a normal run. + -i --infer Infer types instead of completions. + -s Sort the profile results, e.g. cum, name [default: time]. + --precision Makes profile time formatting more precise (nanoseconds) +""" + +import time +try: + # For Python 2 + import cProfile as profile +except ImportError: + import profile +import pstats + +from docopt import docopt +import jedi + + +# Monkeypatch the time formatting function of profiling to make it easier to +# understand small time differences. +def f8(x): + ret = "%7.3f " % x + if ret == ' 0.000 ': + return "%6dµs" % (x * 1e6) + if ret.startswith(' 0.00'): + return "%8.4f" % x + return ret + + +def run(code, index, infer=False): + start = time.time() + script = jedi.Script(code) + if infer: + result = script.goto_definitions() + else: + result = script.completions() + print('Used %ss for the %sth run.' % (time.time() - start, index + 1)) + return result + + +def main(args): + code = args[''] + infer = args['--infer'] + n = int(args['-n']) + + for i in range(n): + run(code, i, infer=infer) + + if args['--precision']: + pstats.f8 = f8 + + jedi.set_debug_function(notices=args['--debug']) + if args['--omit']: + run(code, n, infer=infer) + else: + profile.runctx('run(code, n, infer=infer)', globals(), locals(), sort=args['-s']) + + +if __name__ == '__main__': + args = docopt(__doc__) + if args[''] is None: + args[''] = 'import numpy; numpy.array([0]).' + main(args) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/scripts/profiled_pytest.sh b/vim/bundle/jedi-vim/pythonx/jedi/scripts/profiled_pytest.sh new file mode 100755 index 0000000..b61df1c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/scripts/profiled_pytest.sh @@ -0,0 +1 @@ +python3 -m profile -s tottime $(which pytest) $@ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/scripts/wx_check.py b/vim/bundle/jedi-vim/pythonx/jedi/scripts/wx_check.py new file mode 100755 index 0000000..2692f43 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/scripts/wx_check.py @@ -0,0 +1,62 @@ +#! /usr/bin/env python +""" +Depends: ``objgraph`` (third party Python library) + +``wx._core`` is a very nice module to test Jedi's speed and memory performance +on big Python modules. Its size is ~16kLOC (one file). It also seems to look +like a typical big Python modules. A mix between a lot of different Python +things. + +You can view a markup version of it here: +https://github.com/wxWidgets/wxPython/blob/master/src/gtk/_core.py +""" + +import resource +import time +import sys +try: + import urllib.request as urllib2 +except ImportError: + import urllib2 +import gc +from os.path import abspath, dirname + +import objgraph + +sys.path.insert(0, dirname(dirname(abspath(__file__)))) +import jedi + + +def process_memory(): + """ + In kB according to + https://stackoverflow.com/questions/938733/total-memory-used-by-python-process + """ + return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss + + +uri = 'https://raw.githubusercontent.com/wxWidgets/wxPython/master/src/gtk/_core.py' + +wx_core = urllib2.urlopen(uri).read() + + +def run(): + start = time.time() + print('Process Memory before: %skB' % process_memory()) + # After this the module should be cached. + # Need to invent a path so that it's really cached. + jedi.Script(wx_core, path='foobar.py').completions() + + gc.collect() # make sure that it's all fair and the gc did its job. + print('Process Memory after: %skB' % process_memory()) + + print(objgraph.most_common_types(limit=50)) + print('\nIt took %s seconds to parse the file.' % (time.time() - start)) + + +print('First pass') +run() +print('\nSecond pass') +run() +print('\nThird pass') +run() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/setup.cfg b/vim/bundle/jedi-vim/pythonx/jedi/setup.cfg new file mode 100644 index 0000000..1295389 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/setup.cfg @@ -0,0 +1,12 @@ +[bdist_wheel] +universal=1 + +[flake8] +max-line-length = 100 +ignore = + # do not use bare 'except' + E722, + # don't know why this was ever even an option, 1+1 should be possible. + E226, + # line break before binary operator + W503, diff --git a/vim/bundle/jedi-vim/pythonx/jedi/setup.py b/vim/bundle/jedi-vim/pythonx/jedi/setup.py new file mode 100755 index 0000000..2be6a65 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/setup.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +from setuptools import setup, find_packages + +import os +import ast + +__AUTHOR__ = 'David Halter' +__AUTHOR_EMAIL__ = 'davidhalter88@gmail.com' + +# Get the version from within jedi. It's defined in exactly one place now. +with open('jedi/__init__.py') as f: + tree = ast.parse(f.read()) +version = tree.body[int(not hasattr(tree, 'docstring'))].value.s + +readme = open('README.rst').read() + '\n\n' + open('CHANGELOG.rst').read() +with open('requirements.txt') as f: + install_requires = f.read().splitlines() + +assert os.path.isfile("jedi/third_party/typeshed/LICENSE"), \ + "Please download the typeshed submodule first (Hint: git submodule update --init)" + +setup(name='jedi', + version=version, + description='An autocompletion tool for Python that can be used for text editors.', + author=__AUTHOR__, + author_email=__AUTHOR_EMAIL__, + include_package_data=True, + maintainer=__AUTHOR__, + maintainer_email=__AUTHOR_EMAIL__, + url='https://github.com/davidhalter/jedi', + license='MIT', + keywords='python completion refactoring vim', + long_description=readme, + packages=find_packages(exclude=['test', 'test.*']), + python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*', + install_requires=install_requires, + extras_require={ + 'testing': [ + # Pytest 5 doesn't support Python 2 and Python 3.4 anymore. + 'pytest>=3.1.0,<5.0.0', + # docopt for sith doctests + 'docopt', + # coloroma for colored debug output + 'colorama', + ], + }, + package_data={'jedi': ['*.pyi', 'third_party/typeshed/LICENSE', + 'third_party/typeshed/README']}, + platforms=['any'], + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Text Editors :: Integrated Development Environments (IDE)', + 'Topic :: Utilities', + ], + ) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/sith.py b/vim/bundle/jedi-vim/pythonx/jedi/sith.py new file mode 100755 index 0000000..17c6546 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/sith.py @@ -0,0 +1,224 @@ +#!/usr/bin/env python + +""" +Sith attacks (and helps debugging) Jedi. + +Randomly search Python files and run Jedi on it. Exception and used +arguments are recorded to ``./record.json`` (specified by --record):: + + ./sith.py random /path/to/sourcecode + +Redo recorded exception:: + + ./sith.py redo + +Show recorded exception:: + + ./sith.py show + +Run a specific operation + + ./sith.py run + +Where operation is one of completions, goto_assignments, goto_definitions, +usages, or call_signatures. + +Note: Line numbers start at 1; columns start at 0 (this is consistent with +many text editors, including Emacs). + +Usage: + sith.py [--pdb|--ipdb|--pudb] [-d] [-n=] [-f] [--record=] random [-s] [] + sith.py [--pdb|--ipdb|--pudb] [-d] [-f] [--record=] redo + sith.py [--pdb|--ipdb|--pudb] [-d] [-f] run + sith.py show [--record=] + sith.py -h | --help + +Options: + -h --help Show this screen. + --record= Exceptions are recorded in here [default: record.json]. + -f, --fs-cache By default, file system cache is off for reproducibility. + -n, --maxtries= Maximum of random tries [default: 100] + -d, --debug Jedi print debugging when an error is raised. + -s Shows the path/line numbers of every completion before it starts. + --pdb Launch pdb when error is raised. + --ipdb Launch ipdb when error is raised. + --pudb Launch pudb when error is raised. +""" + +from __future__ import print_function, division, unicode_literals +from docopt import docopt + +import json +import os +import random +import sys +import traceback + +import jedi + + +class SourceFinder(object): + _files = None + + @staticmethod + def fetch(file_path): + if not os.path.isdir(file_path): + yield file_path + return + for root, dirnames, filenames in os.walk(file_path): + for name in filenames: + if name.endswith('.py'): + yield os.path.join(root, name) + + @classmethod + def files(cls, file_path): + if cls._files is None: + cls._files = list(cls.fetch(file_path)) + return cls._files + + +class TestCase(object): + def __init__(self, operation, path, line, column, traceback=None): + if operation not in self.operations: + raise ValueError("%s is not a valid operation" % operation) + + # Set other attributes + self.operation = operation + self.path = path + self.line = line + self.column = column + self.traceback = traceback + + @classmethod + def from_cache(cls, record): + with open(record) as f: + args = json.load(f) + return cls(*args) + + operations = [ + 'completions', 'goto_assignments', 'goto_definitions', 'usages', + 'call_signatures'] + + @classmethod + def generate(cls, file_path): + operation = random.choice(cls.operations) + + path = random.choice(SourceFinder.files(file_path)) + with open(path) as f: + source = f.read() + lines = source.splitlines() + + if not lines: + lines = [''] + line = random.randint(1, len(lines)) + line_string = lines[line - 1] + line_len = len(line_string) + if line_string.endswith('\r\n'): + line_len -= 1 + if line_string.endswith('\n'): + line_len -= 1 + column = random.randint(0, line_len) + return cls(operation, path, line, column) + + def run(self, debugger, record=None, print_result=False): + try: + with open(self.path) as f: + self.script = jedi.Script(f.read(), self.line, self.column, self.path) + kwargs = {} + if self.operation == 'goto_assignments': + kwargs['follow_imports'] = random.choice([False, True]) + + self.objects = getattr(self.script, self.operation)(**kwargs) + if print_result: + print("{path}: Line {line} column {column}".format(**self.__dict__)) + self.show_location(self.line, self.column) + self.show_operation() + except Exception: + self.traceback = traceback.format_exc() + if record is not None: + call_args = (self.operation, self.path, self.line, self.column, self.traceback) + with open(record, 'w') as f: + json.dump(call_args, f) + self.show_errors() + if debugger: + einfo = sys.exc_info() + pdb = __import__(debugger) + if debugger == 'pudb': + pdb.post_mortem(einfo[2], einfo[0], einfo[1]) + else: + pdb.post_mortem(einfo[2]) + exit(1) + + def show_location(self, lineno, column, show=3): + # Three lines ought to be enough + lower = lineno - show if lineno - show > 0 else 0 + prefix = ' |' + for i, line in enumerate(self.script._source.split('\n')[lower:lineno]): + print(prefix, lower + i + 1, line) + print(prefix, ' ', ' ' * (column + len(str(lineno))), '^') + + def show_operation(self): + print("%s:\n" % self.operation.capitalize()) + if self.operation == 'completions': + self.show_completions() + else: + self.show_definitions() + + def show_completions(self): + for completion in self.objects: + print(completion.name) + + def show_definitions(self): + for completion in self.objects: + print(completion.desc_with_module) + if completion.module_path is None: + continue + if os.path.abspath(completion.module_path) == os.path.abspath(self.path): + self.show_location(completion.line, completion.column) + + def show_errors(self): + sys.stderr.write(self.traceback) + print(("Error with running Script(...).{operation}() with\n" + "\tpath: {path}\n" + "\tline: {line}\n" + "\tcolumn: {column}").format(**self.__dict__)) + + +def main(arguments): + debugger = 'pdb' if arguments['--pdb'] else \ + 'ipdb' if arguments['--ipdb'] else \ + 'pudb' if arguments['--pudb'] else None + record = arguments['--record'] + + jedi.settings.use_filesystem_cache = arguments['--fs-cache'] + if arguments['--debug']: + jedi.set_debug_function() + + if arguments['redo'] or arguments['show']: + t = TestCase.from_cache(record) + if arguments['show']: + t.show_errors() + else: + t.run(debugger) + elif arguments['run']: + TestCase( + arguments[''], arguments[''], + int(arguments['']), int(arguments['']) + ).run(debugger, print_result=True) + else: + for _ in range(int(arguments['--maxtries'])): + t = TestCase.generate(arguments[''] or '.') + if arguments['-s']: + print('%s %s %s %s ' % (t.operation, t.path, t.line, t.column)) + sys.stdout.flush() + else: + print('.', end='') + t.run(debugger, record) + + sys.stdout.flush() + print() + + +if __name__ == '__main__': + arguments = docopt(__doc__) + main(arguments) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/blabla_test_documentation.py b/vim/bundle/jedi-vim/pythonx/jedi/test/blabla_test_documentation.py new file mode 100644 index 0000000..7f6c478 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/blabla_test_documentation.py @@ -0,0 +1,29 @@ +def test_keyword_doc(Script): + r = list(Script("or", 1, 1).goto_definitions()) + assert len(r) == 1 + assert len(r[0].doc) > 100 + + r = list(Script("asfdasfd", 1, 1).goto_definitions()) + assert len(r) == 0 + + k = Script("fro").completions()[0] + imp_start = '\nThe ``import' + assert k.raw_doc.startswith(imp_start) + assert k.doc.startswith(imp_start) + + +def test_blablabla(Script): + defs = Script("import").goto_definitions() + assert len(defs) == 1 and [1 for d in defs if d.doc] + # unrelated to #44 + + +def test_operator_doc(Script): + r = list(Script("a == b", 1, 3).goto_definitions()) + assert len(r) == 1 + assert len(r[0].doc) > 100 + + +def test_lambda(Script): + defs = Script('lambda x: x', column=0).goto_definitions() + assert [d.type for d in defs] == ['keyword'] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/__init__.py new file mode 100644 index 0000000..dc4d725 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/__init__.py @@ -0,0 +1,8 @@ +""" needed for some modules to test against packages. """ + +some_variable = 1 + + +from . import imports +#? int() +imports.relative() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/arrays.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/arrays.py new file mode 100644 index 0000000..0a5d433 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/arrays.py @@ -0,0 +1,475 @@ +# ----------------- +# basic array lookups +# ----------------- + + +#? int() +[1,""][0] +#? str() +[1,""][1] +#? int() str() +[1,""][2] +#? int() str() +[1,""][20] +#? int() str() +[1,""][str(hello)] + +a = list() +#? list() +[a][0] + +#? list() +[[a,a,a]][2][100] + +c = [[a,""]] +#? str() +c[0][1] + +b = [6,7] + +#? int() +b[8-7] +# Something unreasonable: +#? int() +b[''] + +# ----------------- +# Slices +# ----------------- +#? list() +b[8:] + +#? list() +b[int():] + +#? list() +b[:] + +#? int() +b[:, 1] +#? int() +b[:1, 1] +#? int() +b[1:1, 1] +#? int() +b[1:1:, ...] +#? int() +b[1:1:5, ...] + +class _StrangeSlice(): + def __getitem__(self, sliced): + return sliced + +# Should not result in an error, just because the slice itself is returned. +#? slice() +_StrangeSlice()[1:2] + + +# ----------------- +# iterable multiplication +# ----------------- +a = ['']*2 +#? list() +a + +# ----------------- +# tuple assignments +# ----------------- +a1, b1 = (1, "") +#? int() +a1 +#? str() +b1 + +(a2, b2) = (1, "") +#? int() +a2 +#? str() +b2 + +# list assignment +[list1, list2] = (1, "") +#? int() +list1 +#? str() +list2 + +[list3, list4] = [1, ""] +#? int() +list3 +#? str() +list4 + +# ----------------- +# subtuple assignment +# ----------------- +(a3, (b3, c3)) = (1, ("", list)) +#? list +c3 + +a4, (b4, c4) = (1, ("", list)) +#? list +c4 +#? int() +a4 +#? str() +b4 + + +# ----------------- +# multiple assignments +# ----------------- +a = b = 1 +#? int() +a +#? int() +b + +(a, b) = (c, (e, f)) = ('2', (3, 4)) +#? str() +a +#? tuple() +b +#? str() +c +#? int() +e +#? int() +f + + +# ----------------- +# unnessecary braces +# ----------------- +a = (1) +#? int() +a +#? int() +(1) +#? int() +((1)) +#? int() +((1)+1) + +u, v = 1, "" +#? int() +u + +((u1, v1)) = 1, "" +#? int() +u1 +#? int() +(u1) + +(a), b = 1, '' +#? int() +a + +def a(): return '' +#? str() +(a)() +#? str() +(a)().title() +#? int() +(tuple).index() +#? int() +(tuple)().index() + +class C(): + def __init__(self): + self.a = (str()).upper() + +#? str() +C().a + +# ----------------- +# imbalanced sides +# ----------------- +(f, g) = (1,) +#? int() +f +#? [] +g. + +(f, g, h) = (1,'') +#? int() +f +#? str() +g +#? [] +h. + +(f1, g1) = 1 +#? [] +f1. +#? [] +g1. + +(f, g) = (1,'',1.0) +#? int() +f +#? str() +g + +# ----------------- +# dicts +# ----------------- +dic2 = {'asdf': 3, 'b': 'str'} +#? int() +dic2['asdf'] +#? None int() str() +dic2.get('asdf') + +# string literal +#? int() +dic2[r'asdf'] +#? int() +dic2[r'asdf'] +#? int() +dic2[r'as' 'd' u'f'] +#? int() str() +dic2['just_something'] + +# unpacking +a, b = dic2 +#? str() +a +a, b = {1: 'x', 2.0: 1j} +#? int() float() +a +#? int() float() +b + + +def f(): + """ github #83 """ + r = {} + r['status'] = (200, 'ok') + return r + +#? dict() +f() + +# completion within dicts +#? 9 ['str'] +{str: str} + +# iteration problem (detected with sith) +d = dict({'a':''}) +def y(a): + return a +#? +y(**d) + +# problem with more complicated casts +dic = {str(key): ''} +#? str() +dic[''] + + +for x in {1: 3.0, '': 1j}: + #? int() str() + x + +#? ['__iter__'] +dict().values().__iter__ + +d = dict(a=3, b='') +x, = d.values() +#? int() str() +x +#? int() str() +d['a'] +#? int() str() None +d.get('a') + +# ----------------- +# with variable as index +# ----------------- +a = (1, "") +index = 1 +#? str() +a[index] + +# these should just ouput the whole array +index = int +#? int() str() +a[index] +index = int() +#? int() str() +a[index] + +# dicts +index = 'asdf' + +dic2 = {'asdf': 3, 'b': 'str'} +#? int() +dic2[index] + +# ----------------- +# __getitem__ +# ----------------- + +class GetItem(): + def __getitem__(self, index): + return 1.0 + +#? float() +GetItem()[0] + +class GetItem(): + def __init__(self, el): + self.el = el + + def __getitem__(self, index): + return self.el + +#? str() +GetItem("")[1] + +class GetItemWithList(): + def __getitem__(self, index): + return [1, 1.0, 's'][index] + +#? float() +GetItemWithList()[1] + +for i in 0, 2: + #? int() str() + GetItemWithList()[i] + + +# With super +class SuperYeah(list): + def __getitem__(self, index): + return super()[index] + +#? +SuperYeah([1])[0] +#? +SuperYeah()[0] + +# ----------------- +# conversions +# ----------------- + +a = [1, ""] +#? int() str() +list(a)[1] + +#? int() str() +list(a)[0] +#? +set(a)[0] + +#? int() str() +list(set(a))[1] +#? int() str() +next(iter(set(a))) +#? int() str() +list(list(set(a)))[1] + +# does not yet work, because the recursion catching is not good enough (catches # to much) +#? int() str() +list(set(list(set(a))))[1] +#? int() str() +list(set(set(a)))[1] + +# frozenset +#? int() str() +list(frozenset(a))[1] +#? int() str() +list(set(frozenset(a)))[1] + +# iter +#? int() str() +list(iter(a))[1] +#? int() str() +list(iter(list(set(a))))[1] + +# tuple +#? int() str() +tuple(a)[1] +#? int() str() +tuple(list(set(a)))[1] + +#? int() +tuple((1,))[0] + +# implementation detail for lists, should not be visible +#? [] +list().__iterable + +# With a list comprehension. +for i in set(a for a in [1]): + #? int() + i + + +# ----------------- +# Merged Arrays +# ----------------- + +for x in [1] + ['']: + #? int() str() + x + +# ----------------- +# Potential Recursion Issues +# ----------------- +class X(): + def y(self): + self.a = [1] + + def x(self): + self.a = list(self.a) + #? int() + self.a[0] + +# ----------------- +# For loops with attribute assignment. +# ----------------- +def test_func(): + x = 'asdf' + for x.something in [6,7,8]: + pass + #? str() + x + + for x.something, b in [[6, 6.0]]: + pass + #? str() + x + + +#? int() +tuple({1})[0] + +# python >= 3.4 +# ----------------- +# PEP 3132 Extended Iterable Unpacking (star unpacking) +# ----------------- + +a, *b, c = [1, 'b', list, dict] +#? int() +a +#? +b +#? list +c + +# Not valid syntax +a, *b, *c = [1, 'd', list] +#? int() +a +#? +b +#? +c + +lc = [x for a, *x in [(1, '', 1.0)]] + +#? +lc[0][0] +#? +lc[0][1] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/async_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/async_.py new file mode 100644 index 0000000..e77a290 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/async_.py @@ -0,0 +1,109 @@ +""" +Tests for all async use cases. + +Currently we're not supporting completion of them, but they should at least not +raise errors or return extremely strange results. +""" + +# python >= 3.5 + +async def x(): + return 1 + +#? [] +x.cr_awai + +#? ['cr_await'] +x().cr_awai + +a = await x() +#? int() +a + +async def y(): + argh = await x() + #? int() + argh + #? ['__next__'] + x().__await__().__next + return 2 + +async def x2(): + async with open('asdf') as f: + #? ['readlines'] + f.readlines + +class A(): + @staticmethod + async def b(c=1, d=2): + return 1 + +#! 9 ['def b'] +await A.b() + +#! 11 ['param d=2'] +await A.b(d=3) + +class Awaitable: + def __await__(self): + yield None + return '' + +async def awaitable_test(): + foo = await Awaitable() + #? str() + foo + +# python >= 3.6 + +async def asgen(): + yield 1 + await asyncio.sleep(0) + yield 2 + +async def wrapper(): + #? int() + [x async for x in asgen()][0] + + async for y in asgen(): + #? int() + y + +#? ['__anext__'] +asgen().__ane +#? [] +asgen().mro + + +# Normal completion (#1092) +normal_var1 = 42 + +async def foo(): + normal_var2 = False + #? ['normal_var1', 'normal_var2'] + normal_var + + +class C: + @classmethod + async def async_for_classmethod(cls) -> "C": + return + + async def async_for_method(cls) -> int: + return + + +async def f(): + c = await C.async_for_method() + #? int() + c + d = await C().async_for_method() + #? int() + d + + e = await C.async_for_classmethod() + #? C() + e + f = await C().async_for_classmethod() + #? C() + f diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/basic.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/basic.py new file mode 100644 index 0000000..91e7f33 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/basic.py @@ -0,0 +1,328 @@ +# ----------------- +# cursor position +# ----------------- +#? 0 int +int() +#? 3 int +int() +#? 4 str +int(str) + + +# ----------------- +# should not complete +# ----------------- +#? [] +. +#? [] +str.. +#? [] +a(0):. +#? 2 [] +0x0 +#? [] +1j +#? ['and', 'or', 'if', 'is', 'in', 'not'] +1j +x = None() +#? +x + +# ----------------- +# if/else/elif +# ----------------- + +if (random.choice([0, 1])): + 1 +elif(random.choice([0, 1])): + a = 3 +else: + a = '' +#? int() str() +a +def func(): + if random.choice([0, 1]): + 1 + elif(random.choice([0, 1])): + a = 3 + else: + a = '' + #? int() str() + return a +#? int() str() +func() + +# ----------------- +# keywords +# ----------------- + +#? list() +assert [] + +def focus_return(): + #? list() + return [] + + +# ----------------- +# for loops +# ----------------- + +for a in [1,2]: + #? int() + a + +for a1 in 1,"": + #? int() str() + a1 + +for a3, b3 in (1,""), (1,""), (1,""): + #? int() + a3 + #? str() + b3 +for (a3, b3) in (1,""), (1,""), (1,""): + #? int() + a3 + #? str() + b3 + +for a4, (b4, c4) in (1,("", list)), (1,("", list)): + #? int() + a4 + #? str() + b4 + #? list + c4 + +a = [] +for i in [1,'']: + #? int() str() + i + a += [i] + +#? int() str() +a[0] + +for i in list([1,'']): + #? int() str() + i + +#? int() str() +for x in [1,'']: x + +a = [] +b = [1.0,''] +for i in b: + a += [i] + +#? float() str() +a[0] + +for i in [1,2,3]: + #? int() + i +else: + i + + +# ----------------- +# range() +# ----------------- +for i in range(10): + #? int() + i + +# ----------------- +# ternary operator +# ----------------- + +a = 3 +b = '' if a else set() +#? str() set() +b + +def ret(a): + return ['' if a else set()] + +#? str() set() +ret(1)[0] +#? str() set() +ret()[0] + +# ----------------- +# global vars +# ----------------- + +def global_define(): + #? int() + global global_var_in_func + global_var_in_func = 3 + +#? int() +global_var_in_func + +#? ['global_var_in_func'] +global_var_in_f + + +def funct1(): + # From issue #610 + global global_dict_var + global_dict_var = dict() +def funct2(): + #! ['global_dict_var', 'global_dict_var'] + global global_dict_var + #? dict() + global_dict_var + + +global_var_predefined = None + +def init_global_var_predefined(): + global global_var_predefined + if global_var_predefined is None: + global_var_predefined = 3 + +#? int() None +global_var_predefined + + +# ----------------- +# within docstrs +# ----------------- + +def a(): + """ + #? ['global_define'] + global_define + """ + pass + +#? +# str literals in comment """ upper + +def completion_in_comment(): + #? ['Exception'] + # might fail because the comment is not a leaf: Exception + pass + +some_word +#? ['Exception'] +# Very simple comment completion: Exception +# Commment after it + +# ----------------- +# magic methods +# ----------------- + +class A(object): pass +class B(): pass + +#? ['__init__'] +A.__init__ +#? ['__init__'] +B.__init__ + +#? ['__init__'] +int().__init__ + +# ----------------- +# comments +# ----------------- + +class A(): + def __init__(self): + self.hello = {} # comment shouldn't be a string +#? dict() +A().hello + +# ----------------- +# unicode +# ----------------- +a = 'smörbröd' +#? str() +a +xyz = 'smörbröd.py' +if 1: + #? str() + xyz + +#? +¹. + +# ----------------- +# exceptions +# ----------------- +try: + import math +except ImportError as i_a: + #? ['i_a'] + i_a + #? ImportError() + i_a +try: + import math +except ImportError, i_b: + # TODO check this only in Python2 + ##? ['i_b'] + i_b + ##? ImportError() + i_b + + +class MyException(Exception): + def __init__(self, my_attr): + self.my_attr = my_attr + +try: + raise MyException(1) +except MyException as e: + #? ['my_attr'] + e.my_attr + #? 22 ['my_attr'] + for x in e.my_attr: + pass + + +# ----------------- +# continuations +# ----------------- + +foo = \ +1 +#? int() +foo + +# ----------------- +# module attributes +# ----------------- + +# Don't move this to imports.py, because there's a star import. +#? str() +__file__ +#? ['__file__'] +__file__ + +#? str() +math.__file__ +# Should not lead to errors +#? +math() + +# ----------------- +# with statements +# ----------------- + +with open('') as f: + #? ['closed'] + f.closed + for line in f: + #? str() bytes() + line + +with open('') as f1, open('') as f2: + #? ['closed'] + f1.closed + #? ['closed'] + f2.closed diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/classes.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/classes.py new file mode 100644 index 0000000..6ab4031 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/classes.py @@ -0,0 +1,604 @@ +def find_class(): + """ This scope is special, because its in front of TestClass """ + #? ['ret'] + TestClass.ret + if 1: + #? ['ret'] + TestClass.ret + +class FindClass(): + #? [] + TestClass.ret + if a: + #? [] + TestClass.ret + + def find_class(self): + #? ['ret'] + TestClass.ret + if 1: + #? ['ret'] + TestClass.ret + +#? [] +FindClass().find_class.self +#? [] +FindClass().find_class.self.find_class + +# set variables, which should not be included, because they don't belong to the +# class +second = 1 +second = "" +class TestClass(object): + var_class = TestClass(1) + + def __init__(self2, first_param, second_param, third=1.0): + self2.var_inst = first_param + self2.second = second_param + self2.first = first_param + self2.first.var_on_argument = 5 + a = 3 + + def var_func(self): + return 1 + + def get_first(self): + # traversal + self.second_new = self.second + return self.var_inst + + def values(self): + self.var_local = 3 + #? ['var_class', 'var_func', 'var_inst', 'var_local'] + self.var_ + #? + var_local + + def ret(self, a1): + # should not know any class functions! + #? [] + values + #? + values + #? ['return'] + ret + return a1 + +# should not work +#? [] +var_local +#? [] +var_inst +#? [] +var_func + +# instance +inst = TestClass(1) + +#? ['var_class', 'var_func', 'var_inst', 'var_local'] +inst.var + +#? ['var_class', 'var_func'] +TestClass.var + +#? int() +inst.var_local +#? [] +TestClass.var_local. + +#? int() +TestClass().ret(1) +# Should not return int(), because we want the type before `.ret(1)`. +#? 11 TestClass() +TestClass().ret(1) +#? int() +inst.ret(1) + +myclass = TestClass(1, '', 3.0) +#? int() +myclass.get_first() +#? [] +myclass.get_first.real + +# too many params +#? int() +TestClass(1,1,1).var_inst + +# too few params +#? int() +TestClass(1).first +#? [] +TestClass(1).second. + +# complicated variable settings in class +#? str() +myclass.second +#? str() +myclass.second_new + +# multiple classes / ordering +ints = TestClass(1, 1.0) +strs = TestClass("", '') +#? float() +ints.second +#? str() +strs.second + +#? ['var_class'] +TestClass.var_class.var_class.var_class.var_class + +# operations (+, *, etc) shouldn't be InstanceElements - #246 +class A(): + def __init__(self): + self.addition = 1 + 2 +#? int() +A().addition + +# should also work before `=` +#? 8 int() +A().addition = None +#? 8 int() +A(1).addition = None +#? 1 A +A(1).addition = None +a = A() +#? 8 int() +a.addition = None + + +# ----------------- +# inheritance +# ----------------- + +class Base(object): + def method_base(self): + return 1 + +class SuperClass(Base): + class_super = 3 + def __init__(self): + self.var_super = '' + def method_super(self): + self.var2_super = list + +class Mixin(SuperClass): + def method_mixin(self): + return int + +#? 20 SuperClass +class SubClass(SuperClass): + class_sub = 3 + def __init__(self): + self.var_sub = '' + def method_sub(self): + self.var_sub = list + return tuple + +instance = SubClass() + +#? ['method_base', 'method_sub', 'method_super'] +instance.method_ +#? ['var2_super', 'var_sub', 'var_super'] +instance.var +#? ['class_sub', 'class_super'] +instance.class_ + +#? ['method_base', 'method_sub', 'method_super'] +SubClass.method_ +#? [] +SubClass.var +#? ['class_sub', 'class_super'] +SubClass.class_ + +# ----------------- +# inheritance of builtins +# ----------------- + +class Base(str): + pass + +#? ['upper'] +Base.upper +#? ['upper'] +Base().upper + +# ----------------- +# dynamic inheritance +# ----------------- + +class Angry(object): + def shout(self): + return 'THIS IS MALARKEY!' + +def classgetter(): + return Angry + +class Dude(classgetter()): + def react(self): + #? ['shout'] + self.s + +# ----------------- +# multiple inheritance # 1071 +# ----------------- + +class FactorMixin(object): + FACTOR_1 = 0.1 + +class Calc(object): + def sum(self, a, b): + self.xxx = 3 + return a + b + +class BetterCalc(Calc, FactorMixin): + def multiply_factor(self, a): + return a * self.FACTOR_1 + +calc = BetterCalc() +#? ['sum'] +calc.sum +#? ['multiply_factor'] +calc.multip +#? ['FACTOR_1'] +calc.FACTOR_1 +#? ['xxx'] +calc.xxx + +# ----------------- +# __call__ +# ----------------- + +class CallClass(): + def __call__(self): + return 1 + +#? int() +CallClass()() + +# ----------------- +# variable assignments +# ----------------- + +class V: + def __init__(self, a): + self.a = a + + def ret(self): + return self.a + + d = b + b = ret + if 1: + c = b + +#? int() +V(1).b() +#? int() +V(1).c() +#? +V(1).d() +# Only keywords should be possible to complete. +#? ['is', 'in', 'not', 'and', 'or', 'if'] +V(1).d() + + +# ----------------- +# ordering +# ----------------- +class A(): + def b(self): + #? int() + a_func() + #? str() + self.a_func() + return a_func() + + def a_func(self): + return "" + +def a_func(): + return 1 + +#? int() +A().b() +#? str() +A().a_func() + +# ----------------- +# nested classes +# ----------------- +class A(): + class B(): + pass + def b(self): + return 1.0 + +#? float() +A().b() + +class A(): + def b(self): + class B(): + def b(self): + return [] + return B().b() + +#? list() +A().b() + +# ----------------- +# ducktyping +# ----------------- + +def meth(self): + return self.a, self.b + +class WithoutMethod(): + a = 1 + def __init__(self): + self.b = 1.0 + def blub(self): + return self.b + m = meth + +class B(): + b = '' + +a = WithoutMethod().m() +#? int() +a[0] +#? float() +a[1] + +#? float() +WithoutMethod.blub(WithoutMethod()) +#? str() +WithoutMethod.blub(B()) + +# ----------------- +# __getattr__ / getattr() / __getattribute__ +# ----------------- + +#? str().upper +getattr(str(), 'upper') +#? str.upper +getattr(str, 'upper') + +# some strange getattr calls +#? +getattr(str, 1) +#? +getattr() +#? +getattr(str) +#? +getattr(getattr, 1) +#? +getattr(str, []) + + +class Base(): + def ret(self, b): + return b + +class Wrapper(): + def __init__(self, obj): + self.obj = obj + + def __getattr__(self, name): + return getattr(self.obj, name) + +class Wrapper2(): + def __getattribute__(self, name): + return getattr(Base(), name) + +#? int() +Wrapper(Base()).ret(3) + +#? int() +Wrapper2(Base()).ret(3) + +class GetattrArray(): + def __getattr__(self, name): + return [1] + +#? int() +GetattrArray().something[0] + + +# ----------------- +# private vars +# ----------------- +class PrivateVar(): + def __init__(self): + self.__var = 1 + #? int() + self.__var + #? ['__var'] + self.__var + + def __private_func(self): + return 1 + + #? int() + __private_func() + + def wrap_private(self): + return self.__private_func() +#? [] +PrivateVar().__var +#? +PrivateVar().__var +#? [] +PrivateVar().__private_func +#? [] +PrivateVar.__private_func +#? int() +PrivateVar().wrap_private() + + +class PrivateSub(PrivateVar): + def test(self): + #? [] + self.__var + + def wrap_private(self): + #? [] + self.__var + +#? [] +PrivateSub().__var + +# ----------------- +# super +# ----------------- +class Super(object): + a = 3 + def return_sup(self): + return 1 +SuperCopy = Super + +class TestSuper(Super): + #? + super() + def test(self): + #? SuperCopy() + super() + #? ['a'] + super().a + if 1: + #? SuperCopy() + super() + def a(): + #? + super() + + def return_sup(self): + #? int() + return super().return_sup() + +#? int() +TestSuper().return_sup() + + +Super = 3 + +class Foo(): + def foo(self): + return 1 +# Somehow overwriting the same name caused problems (#1044) +class Foo(Foo): + def foo(self): + #? int() + super().foo() + +# ----------------- +# if flow at class level +# ----------------- +class TestX(object): + def normal_method(self): + return 1 + + if True: + def conditional_method(self): + var = self.normal_method() + #? int() + var + return 2 + + def other_method(self): + var = self.conditional_method() + #? int() + var + +# ----------------- +# mro method +# ----------------- + +class A(object): + a = 3 + +#? ['mro'] +A.mro +#? [] +A().mro + + +# ----------------- +# mro resolution +# ----------------- + +class B(A()): + b = 3 + +#? +B.a +#? +B().a +#? int() +B.b +#? int() +B().b + + +# ----------------- +# With import +# ----------------- + +from import_tree.classes import Config2, BaseClass + +class Config(BaseClass): + """#884""" + +#? Config2() +Config.mode + +#? int() +Config.mode2 + + +# ----------------- +# Nested class/def/class +# ----------------- +class Foo(object): + a = 3 + def create_class(self): + class X(): + a = self.a + self.b = 3.0 + return X + +#? int() +Foo().create_class().a +#? float() +Foo().b + +class Foo(object): + def comprehension_definition(self): + return [1 for self.b in [1]] + +#? int() +Foo().b + +# ----------------- +# default arguments +# ----------------- + +default = '' +class DefaultArg(): + default = 3 + def x(self, arg=default): + #? str() + default + return arg + def y(self): + return default + +#? int() +DefaultArg().x() +#? str() +DefaultArg().y() +#? int() +DefaultArg.x() +#? str() +DefaultArg.y() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/completion.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/completion.py new file mode 100644 index 0000000..6700fa6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/completion.py @@ -0,0 +1,50 @@ +""" +Special cases of completions (typically special positions that caused issues +with context parsing. +""" + +def pass_decorator(func): + return func + + +def x(): + return ( + 1, +#? ["tuple"] +tuple + ) + + # Comment just somewhere + + +class MyClass: + @pass_decorator + def x(foo, +#? 5 ["tuple"] +tuple, + ): + return 1 + + +if x: + pass +#? ['else'] +else + +try: + pass +#? ['except', 'Exception'] +except + +try: + pass +#? 6 ['except', 'Exception'] +except AttributeError: + pass +#? ['finally'] +finally + +for x in y: + pass +#? ['else'] +else diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/complex.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/complex.py new file mode 100644 index 0000000..e8327f8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/complex.py @@ -0,0 +1,37 @@ +""" Mostly for stupid error reports of @dbrgn. :-) """ + +import time + +class Foo(object): + global time + asdf = time + +def asdfy(): + return Foo + +xorz = getattr(asdfy()(), 'asdf') +#? time +xorz + + + +def args_returner(*args): + return args + + +#? tuple() +args_returner(1)[:] +#? int() +args_returner(1)[:][0] + + +def kwargs_returner(**kwargs): + return kwargs + + +# TODO This is not really correct, needs correction probably at some point, but +# at least it doesn't raise an error. +#? int() +kwargs_returner(a=1)[:] +#? +kwargs_returner(b=1)[:][0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/comprehensions.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/comprehensions.py new file mode 100644 index 0000000..5a4c0a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/comprehensions.py @@ -0,0 +1,258 @@ +# ----------------- +# list comprehensions +# ----------------- + +# basics: + +a = ['' for a in [1]] +#? str() +a[0] +#? ['insert'] +a.insert + +a = [a for a in [1]] +#? int() +a[0] + +y = 1.0 +# Should not leak. +[y for y in [3]] +#? float() +y + +a = [a for a in (1, 2)] +#? int() +a[0] + +a = [a for a,b in [(1,'')]] +#? int() +a[0] +a = [a for (a,b) in [(1,'')]] +#? int() +a[0] + +arr = [1,''] +a = [a for a in arr] +#? int() +a[0] +#? str() +a[1] +#? int() str() +a[2] + +a = [a if 1.0 else '' for a in [1] if [1.0]] +#? int() str() +a[0] + +# name resolve should be correct +left, right = 'a', 'b' +left, right = [x for x in (left, right)] +#? str() +left + +# with a dict literal +#? int() +[a for a in {1:'x'}][0] + +# list comprehensions should also work in combination with functions +def _listen(arg): + for x in arg: + #? str() + x + +_listen(['' for x in [1]]) +#? +([str for x in []])[0] + +# ----------------- +# nested list comprehensions +# ----------------- + +b = [a for arr in [[1, 1.0]] for a in arr] +#? int() +b[0] +#? float() +b[1] + +b = [arr for arr in [[1, 1.0]] for a in arr] +#? int() +b[0][0] +#? float() +b[1][1] + +b = [a for arr in [[1]] if '' for a in arr if ''] +#? int() +b[0] + +b = [b for arr in [[[1.0]]] for a in arr for b in a] +#? float() +b[0] + +#? str() +[x for x in 'chr'][0] + +# jedi issue #26 +#? list() +a = [[int(v) for v in line.strip().split() if v] for line in ["123", str(), "123"] if line] +#? list() +a[0] +#? int() +a[0][0] + +# ----------------- +# generator comprehensions +# ----------------- + +left, right = (i for i in (1, '')) + +#? int() +left +#? str() +right + +gen = (i for i in (1,)) + +#? int() +next(gen) +#? +gen[0] + +gen = (a for arr in [[1.0]] for a in arr) +#? float() +next(gen) + +#? int() +(i for i in (1,)).send() + +# issues with different formats +left, right = (i for i in + ('1', 2)) +#? str() +left +#? int() +right + +# ----------------- +# name resolution in comprehensions. +# ----------------- + +def x(): + """Should not try to resolve to the if hio, which was a bug.""" + #? 22 + [a for a in h if hio] + if hio: pass + +# ----------------- +# slices +# ----------------- + +#? list() +foo = [x for x in [1, '']][:1] +#? int() +foo[0] +#? str() +foo[1] + +# ----------------- +# In class +# ----------------- + +class X(): + def __init__(self, bar): + self.bar = bar + + def foo(self): + x = [a for a in self.bar][0] + #? int() + x + return x + +#? int() +X([1]).foo() + +# set/dict comprehensions were introduced in 2.7, therefore: +# python >= 2.7 +# ----------------- +# dict comprehensions +# ----------------- + +#? int() +list({a - 1: 3 for a in [1]})[0] + +d = {a - 1: b for a, b in {1: 'a', 3: 1.0}.items()} +#? int() +list(d)[0] +#? str() float() +d.values()[0] +#? str() +d[0] +#? float() str() +d[1] +#? float() +d[2] + +# ----------------- +# set comprehensions +# ----------------- + +#? set() +{a - 1 for a in [1]} + +#? set() +{a for a in range(10)} + +#? int() +[x for x in {a for a in range(10)}][0] + +#? int() +{a for a in range(10)}.pop() +#? float() str() +{b for a in [[3.0], ['']] for b in a}.pop() + +#? int() +next(iter({a for a in range(10)})) + + +#? int() +[a for a in {1, 2, 3}][0] + +# ----------------- +# syntax errors +# ----------------- + +# Issue #1146 + +#? ['list'] +[int(str(x.value) for x in list + +def reset_missing_bracket(): pass + + +# ----------------- +# function calls +# ----------------- + +def foo(arg): + return arg + + +x = foo(x for x in [1]) + +#? int() +next(x) +#? +x[0] + +# While it's illegal to have more than one argument, when a generator +# expression is involved, it's still a valid parse tree and Jedi should still +# work (and especially not raise Exceptions). It's debatable wheter inferring +# values for invalid statements is a good idea, but not failing is a must. + +#? int() +next(foo(x for x in [1], 1)) + +def bar(x, y): + return y + +#? str() +next(bar(x for x in [1], x for x in [''])) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/context.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/context.py new file mode 100644 index 0000000..d77c79c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/context.py @@ -0,0 +1,55 @@ +class Base(): + myfoobar = 3 + + +class X(Base): + def func(self, foo): + pass + + +class Y(X): + def actual_function(self): + pass + + #? [] + def actual_function + #? ['func'] + def f + + #? ['__doc__'] + __doc__ + #? [] + def __doc__ + + # This might or might not be what we wanted, currently properties are also + # used like this. IMO this is not wanted ~dave. + #? ['__class__'] + def __class__ + #? [] + __class__ + + + #? ['__repr__'] + def __repr__ + + #? [] + def mro + + #? ['myfoobar'] + myfoobar + +#? [] +myfoobar + +# ----------------- +# Inheritance +# ----------------- + +class Super(): + enabled = True + if enabled: + yo_dude = 4 + +class Sub(Super): + #? ['yo_dude'] + yo_dud diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/decorators.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/decorators.py new file mode 100644 index 0000000..a61487a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/decorators.py @@ -0,0 +1,332 @@ +# ----------------- +# normal decorators +# ----------------- + +def decorator(func): + def wrapper(*args): + return func(1, *args) + return wrapper + +@decorator +def decorated(a,b): + return a,b + +exe = decorated(set, '') + +#? set +exe[1] + +#? int() +exe[0] + +# more complicated with args/kwargs +def dec(func): + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + return wrapper + +@dec +def fu(a, b, c, *args, **kwargs): + return a, b, c, args, kwargs + +exe = fu(list, c=set, b=3, d='') + +#? list +exe[0] +#? int() +exe[1] +#? set +exe[2] +#? [] +exe[3][0]. +#? str() +exe[4]['d'] + + +exe = fu(list, set, 3, '', d='') + +#? str() +exe[3][0] + +# ----------------- +# multiple decorators +# ----------------- +def dec2(func2): + def wrapper2(first_arg, *args2, **kwargs2): + return func2(first_arg, *args2, **kwargs2) + return wrapper2 + +@dec2 +@dec +def fu2(a, b, c, *args, **kwargs): + return a, b, c, args, kwargs + +exe = fu2(list, c=set, b=3, d='str') + +#? list +exe[0] +#? int() +exe[1] +#? set +exe[2] +#? [] +exe[3][0]. +#? str() +exe[4]['d'] + + +# ----------------- +# Decorator is a class +# ----------------- +def same_func(func): + return func + +class Decorator(object): + def __init__(self, func): + self.func = func + + def __call__(self, *args, **kwargs): + return self.func(1, *args, **kwargs) + +@Decorator +def nothing(a,b,c): + return a,b,c + +#? int() +nothing("")[0] +#? str() +nothing("")[1] + + +@same_func +@Decorator +def nothing(a,b,c): + return a,b,c + +#? int() +nothing("")[0] + +class MethodDecoratorAsClass(): + class_var = 3 + @Decorator + def func_without_self(arg, arg2): + return arg, arg2 + + @Decorator + def func_with_self(self, arg): + return self.class_var + +#? int() +MethodDecoratorAsClass().func_without_self('')[0] +#? str() +MethodDecoratorAsClass().func_without_self('')[1] +#? +MethodDecoratorAsClass().func_with_self(1) + + +class SelfVars(): + """Init decorator problem as an instance, #247""" + @Decorator + def __init__(self): + """ + __init__ decorators should be ignored when looking up variables in the + class. + """ + self.c = list + + @Decorator + def shouldnt_expose_var(not_self): + """ + Even though in real Python this shouldn't expose the variable, in this + case Jedi exposes the variable, because these kind of decorators are + normally descriptors, which SHOULD be exposed (at least 90%). + """ + not_self.b = 1.0 + + def other_method(self): + #? float() + self.b + #? list + self.c + +# ----------------- +# not found decorators (are just ignored) +# ----------------- +@not_found_decorator +def just_a_func(): + return 1 + +#? int() +just_a_func() + +#? ['__closure__'] +just_a_func.__closure__ + + +class JustAClass: + @not_found_decorator2 + def a(self): + return 1 + +#? ['__call__'] +JustAClass().a.__call__ +#? int() +JustAClass().a() +#? ['__call__'] +JustAClass.a.__call__ +#? int() +JustAClass.a() + +# ----------------- +# illegal decorators +# ----------------- + +class DecoratorWithoutCall(): + def __init__(self, func): + self.func = func + +@DecoratorWithoutCall +def f(): + return 1 + +# cannot be resolved - should be ignored +@DecoratorWithoutCall(None) +def g(): + return 1 + +#? +f() +#? int() +g() + + +class X(): + @str + def x(self): + pass + + def y(self): + #? str() + self.x + #? + self.x() + + +def decorator_var_args(function, *args): + return function(*args) + +@decorator_var_args +def function_var_args(param): + return param + +#? int() +function_var_args(1) + +# ----------------- +# method decorators +# ----------------- + +def dec(f): + def wrapper(s): + return f(s) + return wrapper + +class MethodDecorators(): + _class_var = 1 + def __init__(self): + self._method_var = '' + + @dec + def constant(self): + return 1.0 + + @dec + def class_var(self): + return self._class_var + + @dec + def method_var(self): + return self._method_var + +#? float() +MethodDecorators().constant() +#? int() +MethodDecorators().class_var() +#? str() +MethodDecorators().method_var() + + +class Base(): + @not_existing + def __init__(self): + pass + @not_existing + def b(self): + return '' + @dec + def c(self): + return 1 + +class MethodDecoratorDoesntExist(Base): + """#272 github: combination of method decorators and super()""" + def a(self): + #? + super().__init__() + #? str() + super().b() + #? int() + super().c() + #? float() + self.d() + + @doesnt_exist + def d(self): + return 1.0 + +# ----------------- +# others +# ----------------- +def memoize(function): + def wrapper(*args): + if random.choice([0, 1]): + pass + else: + rv = function(*args) + return rv + return wrapper + +@memoize +def follow_statement(stmt): + return stmt + +# here we had problems with the else clause, because the parent was not right. +#? int() +follow_statement(1) + +# ----------------- +# class decorators +# ----------------- + +# class decorators should just be ignored +@should_ignore +class A(): + x = 3 + def ret(self): + return 1 + +#? int() +A().ret() +#? int() +A().x + + +# ----------------- +# On decorator completions +# ----------------- + +import abc +#? ['abc'] +@abc + +#? ['abstractmethod'] +@abc.abstractmethod diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/definition.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/definition.py new file mode 100644 index 0000000..f896984 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/definition.py @@ -0,0 +1,68 @@ +""" +Fallback to callee definition when definition not found. +- https://github.com/davidhalter/jedi/issues/131 +- https://github.com/davidhalter/jedi/pull/149 +""" + +"""Parenthesis closed at next line.""" + +# Ignore these definitions for a little while, not sure if we really want them. +# python <= 2.5 + +#? isinstance +isinstance( +) + +#? isinstance +isinstance( +) + +#? isinstance +isinstance(None, +) + +#? isinstance +isinstance(None, +) + +"""Parenthesis closed at same line.""" + +# Note: len('isinstance(') == 11 +#? 11 isinstance +isinstance() + +# Note: len('isinstance(None,') == 16 +##? 16 isinstance +isinstance(None,) + +# Note: len('isinstance(None,') == 16 +##? 16 isinstance +isinstance(None, ) + +# Note: len('isinstance(None, ') == 17 +##? 17 isinstance +isinstance(None, ) + +# Note: len('isinstance( ') == 12 +##? 12 isinstance +isinstance( ) + +"""Unclosed parenthesis.""" + +#? isinstance +isinstance( + +def x(): pass # acts like EOF + +##? isinstance +isinstance( + +def x(): pass # acts like EOF + +#? isinstance +isinstance(None, + +def x(): pass # acts like EOF + +##? isinstance +isinstance(None, diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/descriptors.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/descriptors.py new file mode 100644 index 0000000..3cc01fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/descriptors.py @@ -0,0 +1,221 @@ +class RevealAccess(object): + """ + A data descriptor that sets and returns values + normally and prints a message logging their access. + """ + def __init__(self, initval=None, name='var'): + self.val = initval + self.name = name + + def __get__(self, obj, objtype): + print('Retrieving', self.name) + return self.val + + def __set__(self, obj, val): + print('Updating', self.name) + self.val = val + + def just_a_method(self): + pass + +class C(object): + x = RevealAccess(10, 'var "x"') + #? RevealAccess() + x + #? ['just_a_method'] + x.just_a_method + y = 5.0 + def __init__(self): + #? int() + self.x + + #? [] + self.just_a_method + #? [] + C.just_a_method + +m = C() +#? int() +m.x +#? float() +m.y +#? int() +C.x + +#? [] +m.just_a_method +#? [] +C.just_a_method + +# ----------------- +# properties +# ----------------- +class B(): + @property + def r(self): + return 1 + @r.setter + def r(self, value): + return '' + def t(self): + return '' + p = property(t) + +#? [] +B().r(). +#? int() +B().r + +#? str() +B().p +#? [] +B().p(). + +class PropClass(): + def __init__(self, a): + self.a = a + @property + def ret(self): + return self.a + + @ret.setter + def ret(self, value): + return 1.0 + + def ret2(self): + return self.a + ret2 = property(ret2) + + @property + def nested(self): + """ causes recusions in properties, should work """ + return self.ret + + @property + def nested2(self): + """ causes recusions in properties, should not work """ + return self.nested2 + + @property + def join1(self): + """ mutual recusion """ + return self.join2 + + @property + def join2(self): + """ mutual recusion """ + return self.join1 + +#? str() +PropClass("").ret +#? [] +PropClass().ret. + +#? str() +PropClass("").ret2 +#? +PropClass().ret2 + +#? int() +PropClass(1).nested +#? [] +PropClass().nested. + +#? +PropClass(1).nested2 +#? [] +PropClass().nested2. + +#? +PropClass(1).join1 +# ----------------- +# staticmethod/classmethod +# ----------------- + +class E(object): + a = '' + def __init__(self, a): + self.a = a + + def f(x): + return x + f = staticmethod(f) + #? + f.__func + + @staticmethod + def g(x): + return x + + def s(cls, x): + return x + s = classmethod(s) + + @classmethod + def t(cls, x): + return x + + @classmethod + def u(cls, x): + return cls.a + +e = E(1) +#? int() +e.f(1) +#? int() +E.f(1) +#? int() +e.g(1) +#? int() +E.g(1) + +#? int() +e.s(1) +#? int() +E.s(1) +#? int() +e.t(1) +#? int() +E.t(1) + +#? str() +e.u(1) +#? str() +E.u(1) + +# ----------------- +# Conditions +# ----------------- + +from functools import partial + + +class Memoize(): + def __init__(self, func): + self.func = func + + def __get__(self, obj, objtype): + if obj is None: + return self.func + + return partial(self, obj) + + def __call__(self, *args, **kwargs): + # We don't do caching here, but that's what would normally happen. + return self.func(*args, **kwargs) + + +class MemoizeTest(): + def __init__(self, x): + self.x = x + + @Memoize + def some_func(self): + return self.x + + +#? int() +MemoizeTest(10).some_func() +# Now also call the same function over the class (see if clause above). +#? float() +MemoizeTest.some_func(MemoizeTest(10.0)) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/docstring.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/docstring.py new file mode 100644 index 0000000..2b9f348 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/docstring.py @@ -0,0 +1,254 @@ +""" Test docstrings in functions and classes, which are used to infer types """ + +# ----------------- +# sphinx style +# ----------------- +def sphinxy(a, b, c, d, x): + """ asdfasdf + :param a: blablabla + :type a: str + :type b: (str, int) + :type c: random.Random + :type d: :class:`random.Random` + :param str x: blablabla + :rtype: dict + """ + #? str() + a + #? str() + b[0] + #? int() + b[1] + #? ['seed'] + c.seed + #? ['seed'] + d.seed + #? ['lower'] + x.lower + +#? dict() +sphinxy() + +# wrong declarations +def sphinxy2(a, b, x, y, z): + """ + :param a: Forgot type declaration + :type a: + :param b: Just something + :type b: `` + :param x: Just something without type + :param y: A function + :type y: def l(): pass + :param z: A keyword + :type z: return + :rtype: + """ + #? + a + #? + b + #? + x + #? + y + #? + z + +#? +sphinxy2() + + +def sphinxy_param_type_wrapped(a): + """ + :param str a: + Some description wrapped onto the next line with no space after the + colon. + """ + #? str() + a + + +# local classes -> github #370 +class ProgramNode(): + pass + +def local_classes(node, node2): + """ + :type node: ProgramNode + ... and the class definition after this func definition: + :type node2: ProgramNode2 + """ + #? ProgramNode() + node + #? ProgramNode2() + node2 + +class ProgramNode2(): + pass + + +def list_with_non_imports(lst): + """ + Should be able to work with tuples and lists and still import stuff. + + :type lst: (random.Random, [collections.defaultdict, ...]) + """ + #? ['seed'] + lst[0].seed + + import collections as col + # use some weird index + #? col.defaultdict() + lst[1][10] + + +def two_dots(a): + """ + :type a: json.decoder.JSONDecoder + """ + #? ['raw_decode'] + a.raw_decode + + +# sphinx returns +def return_module_object(): + """ + :rtype: :class:`random.Random` + """ + +#? ['seed'] +return_module_object().seed + + +# ----------------- +# epydoc style +# ----------------- +def epydoc(a, b): + """ asdfasdf + @type a: str + @param a: blablabla + @type b: (str, int) + @param b: blablah + @rtype: list + """ + #? str() + a + #? str() + b[0] + + #? int() + b[1] + +#? list() +epydoc() + + +# Returns with param type only +def rparam(a,b): + """ + @type a: str + """ + return a + +#? str() +rparam() + + +# Composite types +def composite(): + """ + @rtype: (str, int, dict) + """ + +x, y, z = composite() +#? str() +x +#? int() +y +#? dict() +z + + +# Both docstring and calculated return type +def both(): + """ + @rtype: str + """ + return 23 + +#? str() int() +both() + +class Test(object): + def __init__(self): + self.teststr = "" + """ + # jedi issue #210 + """ + def test(self): + #? ['teststr'] + self.teststr + +# ----------------- +# statement docstrings +# ----------------- +d = '' +""" bsdf """ +#? str() +d.upper() + +# ----------------- +# class docstrings +# ----------------- + +class InInit(): + def __init__(self, foo): + """ + :type foo: str + """ + #? str() + foo + + +class InClass(): + """ + :type foo: str + """ + def __init__(self, foo): + #? str() + foo + + +class InBoth(): + """ + :type foo: str + """ + def __init__(self, foo): + """ + :type foo: int + """ + #? str() int() + foo + + +def __init__(foo): + """ + :type foo: str + """ + #? str() + foo + + +# ----------------- +# Renamed imports (#507) +# ----------------- + +import datetime +from datetime import datetime as datetime_imported + +def import_issues(foo): + """ + @type foo: datetime_imported + """ + #? datetime.datetime() + foo diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_arrays.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_arrays.py new file mode 100644 index 0000000..0f03c8f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_arrays.py @@ -0,0 +1,309 @@ +""" +Checking for ``list.append`` and all the other possible array modifications. +""" +# ----------------- +# list.append +# ----------------- +arr = [] +for a in [1,2]: + arr.append(a); + +arr.append # should not cause an exception +arr.append() # should not cause an exception + +#? int() +arr[10] + +arr = [tuple()] +for a in [1,2]: + arr.append(a); + +#? int() tuple() +arr[10] +#? int() +arr[10].index() + +arr = list([]) +arr.append(1) +#? int() +arr[0] + +# ----------------- +# list.insert +# ----------------- +arr = [""] +arr.insert(0, 1.0) + +# on exception due to this, please! +arr.insert(0) +arr.insert() + +#? float() str() +arr[10] + +for a in arr: + #? float() str() + a + +#? float() str() +list(arr)[10] + +# ----------------- +# list.extend / set.update +# ----------------- + +arr = [1.0] +arr.extend([1,2,3]) +arr.extend([]) +arr.extend("") +arr.extend(list) # should ignore + +#? float() int() str() +arr[100] + +a = set(arr) +a.update(list(["", 1])) + +#? float() int() str() +list(a)[0] +# ----------------- +# set/list initialized as functions +# ----------------- + +st = set() +st.add(1) + +#? int() +for s in st: s + +lst = list() +lst.append(1) + +#? int() +for i in lst: i + +# ----------------- +# renames / type changes +# ----------------- +arr = [] +arr2 = arr +arr2.append('') +#? str() +arr2[0] + + +lst = [1] +lst.append(1.0) +s = set(lst) +s.add("ahh") +lst = list(s) +lst.append({}) + +#? dict() int() float() str() +lst[0] + +# should work with tuple conversion, too. +#? dict() int() float() str() +tuple(lst)[0] + +# but not with an iterator +#? +iter(lst)[0] + +# ----------------- +# complex including += +# ----------------- +class C(): pass +class D(): pass +class E(): pass +lst = [1] +lst.append(1.0) +lst += [C] +s = set(lst) +s.add("") +s += [D] +lst = list(s) +lst.append({}) +lst += [E] + +##? dict() int() float() str() C D E +lst[0] + +# ----------------- +# functions +# ----------------- + +def arr_append(arr4, a): + arr4.append(a) + +def add_to_arr(arr2, a): + arr2.append(a) + return arr2 + +def app(a): + arr3.append(a) + +arr3 = [1.0] +res = add_to_arr(arr3, 1) +arr_append(arr3, 'str') +app(set()) + +#? float() str() int() set() +arr3[10] + +#? float() str() int() set() +res[10] + +# ----------------- +# returns, special because the module dicts are not correct here. +# ----------------- +def blub(): + a = [] + a.append(1.0) + #? float() + a[0] + return a + +#? float() +blub()[0] + +# list with default +def blub(): + a = list([1]) + a.append(1.0) + return a + +#? int() float() +blub()[0] + +# empty list +def blub(): + a = list() + a.append(1.0) + return a +#? float() +blub()[0] + +# with if +def blub(): + if 1: + a = [] + a.append(1.0) + return a + +#? float() +blub()[0] + +# with else clause +def blub(): + if random.choice([0, 1]): + 1 + else: + a = [] + a.append(1) + return a + +#? int() +blub()[0] +# ----------------- +# returns, the same for classes +# ----------------- +class C(): + def blub(self, b): + if 1: + a = [] + a.append(b) + return a + + def blub2(self): + """ mapper function """ + a = self.blub(1.0) + #? float() + a[0] + return a + + def literal_arr(self, el): + self.a = [] + self.a.append(el) + #? int() + self.a[0] + return self.a + + def list_arr(self, el): + self.b = list([]) + self.b.append(el) + #? float() + self.b[0] + return self.b + +#? int() +C().blub(1)[0] +#? float() +C().blub2(1)[0] + +#? int() +C().a[0] +#? int() +C().literal_arr(1)[0] + +#? float() +C().b[0] +#? float() +C().list_arr(1.0)[0] + +# ----------------- +# array recursions +# ----------------- + +a = set([1.0]) +a.update(a) +a.update([1]) + +#? float() int() +list(a)[0] + +def first(a): + b = [] + b.append(a) + b.extend(second(a)) + return list(b) + +def second(a): + b = [] + b.extend(first(a)) + return list(b) + +#? float() +first(1.0)[0] + +def third(): + b = [] + b.extend + extend() + b.extend(first()) + return list(b) +#? +third()[0] + + +# ----------------- +# set.add +# ----------------- +st = {1.0} +for a in [1,2]: + st.add(a) + +st.append('') # lists should not have an influence + +st.add # should not cause an exception +st.add() + +st = {1.0} +st.add(1) +lst = list(st) + +lst.append('') + +#? float() int() str() +lst[0] + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_params.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_params.py new file mode 100644 index 0000000..1a48468 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/dynamic_params.py @@ -0,0 +1,159 @@ +""" +This is used for dynamic object completion. +Jedi tries to guess param types with a backtracking approach. +""" +def func(a, default_arg=2): + #? int() + default_arg + #? int() str() + return a + +#? int() +func(1) + +func + +int(1) + (int(2))+ func('') + +# Again the same function, but with another call. +def func(a): + #? float() + return a + +func(1.0) + +# Again the same function, but with no call. +def func(a): + #? + return a + +def func(a): + #? float() + return a +str(func(1.0)) + +# ----------------- +# *args, **args +# ----------------- +def arg(*args): + #? tuple() + args + #? int() + args[0] + +arg(1,"") +# ----------------- +# decorators +# ----------------- +def def_func(f): + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + return wrapper + +@def_func +def func(c): + #? str() + return c + +#? str() +func("something") + +@def_func +def func(c=1): + #? float() + return c + +func(1.0) + +def tricky_decorator(func): + def wrapper(*args): + return func(1, *args) + + return wrapper + + +@tricky_decorator +def func(a, b): + #? int() + a + #? float() + b + +func(1.0) + +# Needs to be here, because in this case func is an import -> shouldn't lead to +# exceptions. +import sys as func +func.sys + +# ----------------- +# classes +# ----------------- + +class A(): + def __init__(self, a): + #? str() + a + +A("s") + +class A(): + def __init__(self, a): + #? int() + a + self.a = a + + def test(self, a): + #? float() + a + self.c = self.test2() + + def test2(self): + #? int() + return self.a + + def test3(self): + #? int() + self.test2() + #? int() + self.c + +A(3).test(2.0) +A(3).test2() + + +def from_class(x): + #? + x + +from UNDEFINED import from_class + +class Foo(from_class(1),): + pass + +# ----------------- +# comprehensions +# ----------------- + +def from_comprehension(foo): + #? int() float() + return foo + +[from_comprehension(1.0) for n in (1,)] +[from_comprehension(n) for n in (1,)] + +# ----------------- +# lambdas +# ----------------- + +#? int() +x_lambda = lambda x: x + +x_lambda(1) + +class X(): + #? str() + x_method = lambda self, a: a + + +X().x_method('') diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/flow_analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/flow_analysis.py new file mode 100644 index 0000000..3eb50d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/flow_analysis.py @@ -0,0 +1,302 @@ +# ----------------- +# First a few name resolution things +# ----------------- + +x = 3 +if NOT_DEFINED: + x = '' +#? 6 int() +elif x: + pass +else: + #? int() + x + +x = 1 +try: + x = '' +#? 8 int() str() +except x: + #? 5 int() str() + x + x = 1.0 +else: + #? 5 int() str() + x + x = list +finally: + #? 5 int() str() float() list + x + x = tuple + +if False: + with open("") as defined_in_false: + #? ['flush'] + defined_in_false.flu + +# ----------------- +# Return checks +# ----------------- + +def foo(x): + if 1.0: + return 1 + else: + return '' + +#? int() +foo(1) + + +# Exceptions are not analyzed. So check both if branches +def try_except(x): + try: + if 0: + return 1 + else: + return '' + except AttributeError: + return 1.0 + +#? float() str() +try_except(1) + + +# Exceptions are not analyzed. So check both if branches +def try_except(x): + try: + if 0: + return 1 + else: + return '' + except AttributeError: + return 1.0 + +#? float() str() +try_except(1) + + +# ----------------- +# elif +# ----------------- + +def elif_flows1(x): + if False: + return 1 + elif True: + return 1.0 + else: + return '' + +#? float() +elif_flows1(1) + + +def elif_flows2(x): + try: + if False: + return 1 + elif 0: + return 1.0 + else: + return '' + except ValueError: + return set + +#? str() set +elif_flows2(1) + + +def elif_flows3(x): + try: + if True: + return 1 + elif 0: + return 1.0 + else: + return '' + except ValueError: + return set + +#? int() set +elif_flows3(1) + +# ----------------- +# mid-difficulty if statements +# ----------------- +def check(a): + if a is None: + return 1 + return '' + return set + +#? int() +check(None) +#? str() +check('asb') + +a = list +if 2 == True: + a = set +elif 1 == True: + a = 0 + +#? int() +a +if check != 1: + a = '' +#? str() +a +if check == check: + a = list +#? list +a +if check != check: + a = set +else: + a = dict +#? dict +a +if not (check is not check): + a = 1 +#? int() +a + + +# ----------------- +# name resolution +# ----------------- + +a = list +def elif_name(x): + try: + if True: + a = 1 + elif 0: + a = 1.0 + else: + return '' + except ValueError: + a = x + return a + +#? int() set +elif_name(set) + +if 0: + a = '' +else: + a = int + +#? int +a + +# ----------------- +# isinstance +# ----------------- + +class A(): pass + +def isinst(x): + if isinstance(x, A): + return dict + elif isinstance(x, int) and x == 1 or x is True: + return set + elif isinstance(x, (float, reversed)): + return list + elif not isinstance(x, str): + return tuple + return 1 + +#? dict +isinst(A()) +#? set +isinst(True) +#? set +isinst(1) +#? tuple +isinst(2) +#? list +isinst(1.0) +#? tuple +isinst(False) +#? int() +isinst('') + +# ----------------- +# flows that are not reachable should be able to access parent scopes. +# ----------------- + +foobar = '' + +if 0: + within_flow = 1.0 + #? float() + within_flow + #? str() + foobar + if 0: + nested = 1 + #? int() + nested + #? float() + within_flow + #? str() + foobar + #? + nested + +if False: + in_false = 1 + #? ['in_false'] + in_false + +# ----------------- +# True objects like modules +# ----------------- + +class X(): + pass +if X: + a = 1 +else: + a = '' +#? int() +a + + +# ----------------- +# Recursion issues +# ----------------- + +def possible_recursion_error(filename): + if filename == 'a': + return filename + # It seems like without the brackets there wouldn't be a RecursionError. + elif type(filename) == str: + return filename + + +if NOT_DEFINED: + s = str() +else: + s = str() +#? str() +possible_recursion_error(s) + + +# ----------------- +# In combination with imports +# ----------------- + +from import_tree import flow_import + +if 1 == flow_import.env: + a = 1 +elif 2 == flow_import.env: + a = '' +elif 3 == flow_import.env: + a = 1.0 + +#? int() str() +a diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/fstring.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/fstring.py new file mode 100644 index 0000000..32f29e9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/fstring.py @@ -0,0 +1,38 @@ +# python >= 3.6 + +class Foo: + bar = 1 + +#? 10 int() +f'{Foo.bar}' +#? 10 ['bar'] +f'{Foo.bar}' +#? 10 int() +Fr'{Foo.bar' +#? 10 ['bar'] +Fr'{Foo.bar' +#? int() +Fr'{Foo.bar +#? ['bar'] +Fr'{Foo.bar +#? ['Exception'] +F"{Excepti + +#? 8 Foo +Fr'a{Foo.bar' +#? str() +Fr'sasdf' + +#? 7 str() +Fr'''sasdf''' + '' + +#? ['upper'] +f'xyz'.uppe + + +#? 3 [] +f'f' + +# Github #1248 +#? int() +{"foo": 1}[f"foo"] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/functions.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/functions.py new file mode 100644 index 0000000..585b692 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/functions.py @@ -0,0 +1,498 @@ +def x(): + return + +#? None +x() + +def array(first_param): + #? ['first_param'] + first_param + return list() + +#? [] +array.first_param +#? [] +array.first_param. +func = array +#? [] +func.first_param + +#? list() +array() + +#? ['array'] +arr + + +def inputs(param): + return param + +#? list +inputs(list) + +def variable_middle(): + var = 3 + return var + +#? int() +variable_middle() + +def variable_rename(param): + var = param + return var + +#? int() +variable_rename(1) + +def multi_line_func(a, # comment blabla + + b): + return b + +#? str() +multi_line_func(1,'') + +def multi_line_call(b): + return b + + +multi_line_call( +#? int() + b=1) + + +# nothing after comma +def asdf(a): + return a + +x = asdf(a=1, + ) +#? int() +x + +# ----------------- +# double execution +# ----------------- +def double_exe(param): + return param + +#? str() +variable_rename(double_exe)("") + +# -> shouldn't work (and throw no error) +#? [] +variable_rename(list())(). +#? [] +variable_rename(1)(). + +# ----------------- +# recursions (should ignore) +# ----------------- +def recursion(a, b): + if a: + return b + else: + return recursion(a+".", b+1) + +# Does not also return int anymore, because we now support operators in simple cases. +#? float() +recursion("a", 1.0) + +def other(a): + return recursion2(a) + +def recursion2(a): + if random.choice([0, 1]): + return other(a) + else: + if random.choice([0, 1]): + return recursion2("") + else: + return a + +#? int() str() +recursion2(1) + +# ----------------- +# ordering +# ----------------- + +def a(): + #? int() + b() + return b() + +def b(): + return 1 + +#? int() +a() + +# ----------------- +# keyword arguments +# ----------------- + +def func(a=1, b=''): + return a, b + +exe = func(b=list, a=tuple) +#? tuple +exe[0] + +#? list +exe[1] + +# ----------------- +# default arguments +# ----------------- + +#? int() +func()[0] +#? str() +func()[1] +#? float() +func(1.0)[0] +#? str() +func(1.0)[1] + + +#? float() +func(a=1.0)[0] +#? str() +func(a=1.0)[1] +#? int() +func(b=1.0)[0] +#? float() +func(b=1.0)[1] +#? list +func(a=list, b=set)[0] +#? set +func(a=list, b=set)[1] + + +def func_default(a, b=1): + return a, b + + +def nested_default(**kwargs): + return func_default(**kwargs) + +#? float() +nested_default(a=1.0)[0] +#? int() +nested_default(a=1.0)[1] +#? str() +nested_default(a=1.0, b='')[1] + +# Defaults should only work if they are defined before - not after. +def default_function(a=default): + #? + return a + +#? +default_function() + +default = int() + +def default_function(a=default): + #? int() + return a + +#? int() +default_function() + +def default(a=default): + #? int() + a + +# ----------------- +# closures +# ----------------- +def a(): + l = 3 + def func_b(): + l = '' + #? str() + l + #? ['func_b'] + func_b + #? int() + l + +# ----------------- +# *args +# ----------------- + +def args_func(*args): + #? tuple() + return args + +exe = args_func(1, "") +#? int() +exe[0] +#? str() +exe[1] + +# illegal args (TypeError) +#? +args_func(*1)[0] +# iterator +#? int() +args_func(*iter([1]))[0] + +# different types +e = args_func(*[1+"", {}]) +#? int() str() +e[0] +#? dict() +e[1] + +_list = [1,""] +exe2 = args_func(_list)[0] + +#? str() +exe2[1] + +exe3 = args_func([1,""])[0] + +#? str() +exe3[1] + +def args_func(arg1, *args): + return arg1, args + +exe = args_func(1, "", list) +#? int() +exe[0] +#? tuple() +exe[1] +#? list +exe[1][1] + + +# In a dynamic search, both inputs should be given. +def simple(a): + #? int() str() + return a +def xargs(*args): + return simple(*args) + +xargs(1) +xargs('') + + +# *args without a self symbol +def memoize(func): + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + return wrapper + + +class Something(): + @memoize + def x(self, a, b=1): + return a + +#? int() +Something().x(1) + + +# ----------------- +# ** kwargs +# ----------------- +def kwargs_func(**kwargs): + #? ['keys'] + kwargs.keys + #? dict() + return kwargs + +exe = kwargs_func(a=3,b=4.0) +#? dict() +exe +#? int() +exe['a'] +#? float() +exe['b'] +#? int() float() +exe['c'] + +a = 'a' +exe2 = kwargs_func(**{a:3, + 'b':4.0}) + +#? int() +exe2['a'] +#? float() +exe2['b'] +#? int() float() +exe2['c'] + +exe3 = kwargs_func(**{k: v for k, v in [(a, 3), ('b', 4.0)]}) + +# Should resolve to the same as 2 but jedi is not smart enough yet +# Here to make sure it doesn't result in crash though +#? +exe3['a'] + +#? +exe3['b'] + +#? +exe3['c'] + +# ----------------- +# *args / ** kwargs +# ----------------- + +def func_without_call(*args, **kwargs): + #? tuple() + args + #? dict() + kwargs + +def fu(a=1, b="", *args, **kwargs): + return a, b, args, kwargs + +exe = fu(list, 1, "", c=set, d="") + +#? list +exe[0] +#? int() +exe[1] +#? tuple() +exe[2] +#? str() +exe[2][0] +#? dict() +exe[3] +#? set +exe[3]['c'] + + +def kwargs_iteration(**kwargs): + return kwargs + +for x in kwargs_iteration(d=3): + #? float() + {'d': 1.0, 'c': '1'}[x] + + +# ----------------- +# nested *args +# ----------------- +def function_args(a, b, c): + return b + +def nested_args(*args): + return function_args(*args) + +def nested_args2(*args, **kwargs): + return nested_args(*args) + +#? int() +nested_args('', 1, 1.0, list) +#? [] +nested_args(''). + +#? int() +nested_args2('', 1, 1.0) +#? [] +nested_args2(''). + +# ----------------- +# nested **kwargs +# ----------------- +def nested_kw(**kwargs1): + return function_args(**kwargs1) + +def nested_kw2(**kwargs2): + return nested_kw(**kwargs2) + +# invalid command, doesn't need to return anything +#? +nested_kw(b=1, c=1.0, list) +#? int() +nested_kw(b=1) +# invalid command, doesn't need to return anything +#? +nested_kw(d=1.0, b=1, list) +#? int() +nested_kw(a=3.0, b=1) +#? int() +nested_kw(b=1, a=r"") +#? [] +nested_kw(1, ''). +#? [] +nested_kw(a=''). + +#? int() +nested_kw2(b=1) +#? int() +nested_kw2(b=1, c=1.0) +#? int() +nested_kw2(c=1.0, b=1) +#? [] +nested_kw2(''). +#? [] +nested_kw2(a=''). +#? [] +nested_kw2('', b=1). + +# ----------------- +# nested *args/**kwargs +# ----------------- +def nested_both(*args, **kwargs): + return function_args(*args, **kwargs) + +def nested_both2(*args, **kwargs): + return nested_both(*args, **kwargs) + +# invalid commands, may return whatever. +#? list +nested_both('', b=1, c=1.0, list) +#? list +nested_both('', c=1.0, b=1, list) + +#? [] +nested_both(''). + +#? int() +nested_both2('', b=1, c=1.0) +#? int() +nested_both2('', c=1.0, b=1) +#? [] +nested_both2(''). + +# ----------------- +# nested *args/**kwargs with a default arg +# ----------------- +def function_def(a, b, c): + return a, b + +def nested_def(a, *args, **kwargs): + return function_def(a, *args, **kwargs) + +def nested_def2(*args, **kwargs): + return nested_def(*args, **kwargs) + +#? str() +nested_def2('', 1, 1.0)[0] +#? str() +nested_def2('', b=1, c=1.0)[0] +#? str() +nested_def2('', c=1.0, b=1)[0] +#? int() +nested_def2('', 1, 1.0)[1] +#? int() +nested_def2('', b=1, c=1.0)[1] +#? int() +nested_def2('', c=1.0, b=1)[1] +#? [] +nested_def2('')[1]. + +# ----------------- +# magic methods +# ----------------- +def a(): pass +#? ['__closure__'] +a.__closure__ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/generators.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/generators.py new file mode 100644 index 0000000..ee541df --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/generators.py @@ -0,0 +1,272 @@ +# ----------------- +# yield statement +# ----------------- +def gen(): + if random.choice([0, 1]): + yield 1 + else: + yield "" + +gen_exe = gen() +#? int() str() +next(gen_exe) + +#? int() str() list +next(gen_exe, list) + + +def gen_ret(value): + yield value + +#? int() +next(gen_ret(1)) + +#? [] +next(gen_ret()). + +# generators evaluate to true if cast by bool. +a = '' +if gen_ret(): + a = 3 +#? int() +a + + +# ----------------- +# generators should not be indexable +# ----------------- +def get(param): + if random.choice([0, 1]): + yield 1 + else: + yield "" + +#? [] +get()[0]. + +# ----------------- +# __iter__ +# ----------------- +for a in get(): + #? int() str() + a + + +class Get(): + def __iter__(self): + if random.choice([0, 1]): + yield 1 + else: + yield "" + +b = [] +for a in Get(): + #? int() str() + a + b += [a] + +#? list() +b +#? int() str() +b[0] + +g = iter(Get()) +#? int() str() +next(g) + +g = iter([1.0]) +#? float() +next(g) + + +# ----------------- +# __next__ +# ----------------- +class Counter: + def __init__(self, low, high): + self.current = low + self.high = high + + def __iter__(self): + return self + + def next(self): + """ need to have both __next__ and next, because of py2/3 testing """ + return self.__next__() + + def __next__(self): + if self.current > self.high: + raise StopIteration + else: + self.current += 1 + return self.current - 1 + + +for c in Counter(3, 8): + #? int() + print c + + +# ----------------- +# tuple assignments +# ----------------- +def gen(): + if random.choice([0,1]): + yield 1, "" + else: + yield 2, 1.0 + + +a, b = next(gen()) +#? int() +a +#? str() float() +b + + +def simple(): + if random.choice([0, 1]): + yield 1 + else: + yield "" + +a, b = simple() +#? int() str() +a +# For now this is ok. +#? +b + + +def simple2(): + yield 1 + yield "" + +a, b = simple2() +#? int() +a +#? str() +b + +a, = (a for a in [1]) +#? int() +a + +# ----------------- +# More complicated access +# ----------------- + +# `close` is a method wrapper. +#? ['__call__'] +gen().close.__call__ + +#? +gen().throw() + +#? ['co_consts'] +gen().gi_code.co_consts + +#? [] +gen.gi_code.co_consts + +# `send` is also a method wrapper. +#? ['__call__'] +gen().send.__call__ + +#? tuple() +gen().send() + +#? +gen()() + +# ----------------- +# empty yield +# ----------------- + +def x(): + yield + +#? None +next(x()) +#? gen() +x() + +def x(): + for i in range(3): + yield + +#? None +next(x()) + +# ----------------- +# yield in expression +# ----------------- + +def x(): + a= [(yield 1)] + +#? int() +next(x()) + +# ----------------- +# statements +# ----------------- +def x(): + foo = yield + #? + foo + +# ----------------- +# yield from +# ----------------- + +# python >= 3.4 + +def yield_from(): + yield from iter([1]) + +#? int() +next(yield_from()) + +def yield_from_multiple(): + yield from iter([1]) + yield str() + return 2.0 + +x, y = yield_from_multiple() +#? int() +x +#? str() +y + +def test_nested(): + x = yield from yield_from_multiple() + #? float() + x + yield x + +x, y, z = test_nested() +#? int() +x +#? str() +y +# For whatever reason this is currently empty +#? float() +z + + +def test_in_brackets(): + x = 1 + (yield from yield_from_multiple()) + #? float() + x + + generator = (1 for 1 in [1]) + x = yield from generator + #? None + x + x = yield from 1 + #? + x + x = yield from [1] + #? None + x diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/goto.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/goto.py new file mode 100644 index 0000000..029c59c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/goto.py @@ -0,0 +1,251 @@ +# goto_assignments command tests are different in syntax + +definition = 3 +#! 0 ['a = definition'] +a = definition + +#! [] +b +#! ['a = definition'] +a + +b = a +c = b +#! ['c = b'] +c + +cd = 1 +#! 1 ['cd = c'] +cd = c +#! 0 ['cd = e'] +cd = e + +#! ['module math'] +import math +#! ['module math'] +math + +#! ['module math'] +b = math +#! ['b = math'] +b + +#! 18 ['foo = 10'] +foo = 10;print(foo) + +# ----------------- +# classes +# ----------------- +class C(object): + def b(self): + #! ['b = math'] + b + #! ['def b'] + self.b + #! 14 ['def b'] + self.b() + #! 11 ['param self'] + self.b + return 1 + + #! ['def b'] + b + +#! ['b = math'] +b + +#! ['def b'] +C.b +#! ['def b'] +C().b +#! 0 ['class C'] +C().b +#! 0 ['class C'] +C().b + +D = C +#! ['def b'] +D.b +#! ['def b'] +D().b + +#! 0 ['D = C'] +D().b +#! 0 ['D = C'] +D().b + +def c(): + return '' + +#! ['def c'] +c +#! 0 ['def c'] +c() + + +class ClassVar(): + x = 3 + +#! ['x = 3'] +ClassVar.x +#! ['x = 3'] +ClassVar().x + +# before assignments +#! 10 ['x = 3'] +ClassVar.x = '' +#! 12 ['x = 3'] +ClassVar().x = '' + +# Recurring use of the same var name, github #315 +def f(t=None): + #! 9 ['param t=None'] + t = t or 1 + + +class X(): + pass + +#! 3 [] +X(foo=x) + + +# Multiple inheritance +class Foo: + def foo(self): + print("foo") +class Bar: + def bar(self): + print("bar") +class Baz(Foo, Bar): + def baz(self): + #! ['def foo'] + super().foo + #! ['def bar'] + super().bar + #! ['instance Foo'] + super() + +# ----------------- +# imports +# ----------------- + +#! ['module import_tree'] +import import_tree +#! ["a = ''"] +import_tree.a + +#! ['module mod1'] +import import_tree.mod1 +#! ['module mod1'] +from import_tree.mod1 +#! ['a = 1'] +import_tree.mod1.a + +#! ['module pkg'] +import import_tree.pkg +#! ['a = list'] +import_tree.pkg.a + +#! ['module mod1'] +import import_tree.pkg.mod1 +#! ['a = 1.0'] +import_tree.pkg.mod1.a +#! ["a = ''"] +import_tree.a + +#! ['module mod1'] +from import_tree.pkg import mod1 +#! ['a = 1.0'] +mod1.a + +#! ['module mod1'] +from import_tree import mod1 +#! ['a = 1'] +mod1.a + +#! ['a = 1.0'] +from import_tree.pkg.mod1 import a + +#! ['module os'] +from .imports import os + +#! ['some_variable = 1'] +from . import some_variable + +# ----------------- +# anonymous classes +# ----------------- +def func(): + class A(): + def b(self): + return 1 + return A() + +#! 8 ['def b'] +func().b() + +# ----------------- +# on itself +# ----------------- + +#! 7 ['class ClassDef'] +class ClassDef(): + """ abc """ + pass + +# ----------------- +# params +# ----------------- + +param = ClassDef +#! 8 ['param param'] +def ab1(param): pass +#! 9 ['param param'] +def ab2(param): pass +#! 11 ['param = ClassDef'] +def ab3(a=param): pass + +ab1(ClassDef);ab2(ClassDef);ab3(ClassDef) + +# ----------------- +# for loops +# ----------------- + +for i in range(1): + #! ['for i in range(1): i'] + i + +for key, value in [(1,2)]: + #! ['for key, value in [(1,2)]: key'] + key + +#! 4 ['for y in [1]: y'] +for y in [1]: + #! ['for y in [1]: y'] + y + +# ----------------- +# decorator +# ----------------- +def dec(dec_param=3): + pass + +#! 8 ['param dec_param=3'] +@dec(dec_param=5) +def y(): + pass + +class ClassDec(): + def class_func(func): + return func + +#! 14 ['def class_func'] +@ClassDec.class_func +def x(): + pass + +#! 2 ['class ClassDec'] +@ClassDec.class_func +def z(): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/__init__.py new file mode 100644 index 0000000..5cbbcd7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/__init__.py @@ -0,0 +1,7 @@ +a = '' + +from . import invisible_pkg + +the_pkg = invisible_pkg + +invisible_pkg = 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/classes.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/classes.py new file mode 100644 index 0000000..23b088c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/classes.py @@ -0,0 +1,10 @@ +blub = 1 + +class Config2(): + pass + + +class BaseClass(): + mode = Config2() + if isinstance(whaat, int): + mode2 = whaat diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/flow_import.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/flow_import.py new file mode 100644 index 0000000..a0a779e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/flow_import.py @@ -0,0 +1,4 @@ +if name: + env = 1 +else: + env = 2 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/invisible_pkg.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/invisible_pkg.py new file mode 100644 index 0000000..9c78ce2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/invisible_pkg.py @@ -0,0 +1,7 @@ +""" +It should not be possible to import this pkg except for the import_tree itself, +because it is overwritten there. (It would be possible with a sys.path +modification, though). +""" + +foo = 1.0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod1.py new file mode 100644 index 0000000..bd696d6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod1.py @@ -0,0 +1,4 @@ +a = 1 +from import_tree.random import a as c + +foobarbaz = 3.0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod2.py new file mode 100644 index 0000000..19914f5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/mod2.py @@ -0,0 +1 @@ +from . import mod1 as fake diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/__init__.py new file mode 100644 index 0000000..480f222 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/__init__.py @@ -0,0 +1,3 @@ +a = list + +from math import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/mod1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/mod1.py new file mode 100644 index 0000000..fe1d27f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/pkg/mod1.py @@ -0,0 +1,3 @@ +a = 1.0 + +from ..random import foobar diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/random.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/random.py new file mode 100644 index 0000000..7a34c4e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/random.py @@ -0,0 +1,6 @@ +""" +Here because random is also a builtin module. +""" +a = set + +foobar = 0 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class1.py new file mode 100644 index 0000000..cd1dd6a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class1.py @@ -0,0 +1,5 @@ +from . import recurse_class2 + +class C(recurse_class2.C): + def a(self): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class2.py new file mode 100644 index 0000000..c0a7df6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/recurse_class2.py @@ -0,0 +1,4 @@ +from . import recurse_class1 + +class C(recurse_class1.C): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename1.py new file mode 100644 index 0000000..bdc3315 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename1.py @@ -0,0 +1,3 @@ +""" used for renaming tests """ + +abc = 3 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename2.py new file mode 100644 index 0000000..3d1a12e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/import_tree/rename2.py @@ -0,0 +1,6 @@ +""" used for renaming tests """ + + +from import_tree.rename1 import abc + +abc diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/imports.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/imports.py new file mode 100644 index 0000000..150f274 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/imports.py @@ -0,0 +1,321 @@ +# ----------------- +# own structure +# ----------------- + +# do separate scopes +def scope_basic(): + from import_tree import mod1 + + #? int() + mod1.a + + #? [] + import_tree.a + + #? [] + import_tree.mod1 + + import import_tree + #? str() + import_tree.a + + +def scope_pkg(): + import import_tree.mod1 + + #? str() + import_tree.a + + #? ['mod1'] + import_tree.mod1 + + #? int() + import_tree.mod1.a + +def scope_nested(): + import import_tree.pkg.mod1 + + #? str() + import_tree.a + + #? list + import_tree.pkg.a + + #? ['sqrt'] + import_tree.pkg.sqrt + + #? ['pkg'] + import_tree.p + + #? float() + import_tree.pkg.mod1.a + #? ['a', 'foobar', '__name__', '__package__', '__file__', '__doc__'] + a = import_tree.pkg.mod1. + + import import_tree.random + #? set + import_tree.random.a + +def scope_nested2(): + """Multiple modules should be indexable, if imported""" + import import_tree.mod1 + import import_tree.pkg + #? ['mod1'] + import_tree.mod1 + #? ['pkg'] + import_tree.pkg + + # With the latest changes this completion also works, because submodules + # are always included (some nested import structures lead to this, + # typically). + #? ['rename1'] + import_tree.rename1 + +def scope_from_import_variable(): + """ + All of them shouldn't work, because "fake" imports don't work in python + without the use of ``sys.modules`` modifications (e.g. ``os.path`` see also + github issue #213 for clarification. + """ + a = 3 + #? + from import_tree.mod2.fake import a + #? + from import_tree.mod2.fake import c + + #? + a + #? + c + +def scope_from_import_variable_with_parenthesis(): + from import_tree.mod2.fake import ( + a, foobarbaz + ) + + #? + a + #? + foobarbaz + # shouldn't complete, should still list the name though. + #? ['foobarbaz'] + foobarbaz + + +def as_imports(): + from import_tree.mod1 import a as xyz + #? int() + xyz + import not_existant, import_tree.mod1 as foo + #? int() + foo.a + import import_tree.mod1 as bar + #? int() + bar.a + + +def broken_import(): + import import_tree.mod1 + #? import_tree.mod1 + from import_tree.mod1 + + #? 25 import_tree.mod1 + import import_tree.mod1. + #? 25 import_tree.mod1 + impo5t import_tree.mod1.foo + #? 25 import_tree.mod1 + import import_tree.mod1.foo. + #? 31 import_tree.mod1 + import json, import_tree.mod1.foo. + + # Cases with ; + mod1 = 3 + #? 25 int() + import import_tree; mod1. + #? 38 import_tree.mod1 + import_tree; import import_tree.mod1. + + #! ['module json'] + from json + + +def test_import_priorities(): + """ + It's possible to overwrite import paths in an ``__init__.py`` file, by + just assigining something there. + + See also #536. + """ + from import_tree import the_pkg, invisible_pkg + #? int() + invisible_pkg + # In real Python, this would be the module, but it's not, because Jedi + # doesn't care about most stateful issues such as __dict__, which it would + # need to, to do this in a correct way. + #? int() + the_pkg + # Importing foo is still possible, even though inivisible_pkg got changed. + #? float() + from import_tree.invisible_pkg import foo + + +# ----------------- +# std lib modules +# ----------------- +import tokenize +#? ['tok_name'] +tokenize.tok_name + +from pyclbr import * + +#? ['readmodule_ex'] +readmodule_ex +import os + +#? ['dirname'] +os.path.dirname + +from os.path import ( + expanduser +) + +#? os.path.expanduser +expanduser + +from itertools import (tee, + islice) +#? ['islice'] +islice + +from functools import (partial, wraps) +#? ['wraps'] +wraps + +from keyword import kwlist, \ + iskeyword +#? ['kwlist'] +kwlist + +#? [] +from keyword import not_existing1, not_existing2 + +from tokenize import io +tokenize.generate_tokens + +# ----------------- +# builtins +# ----------------- + +import sys +#? ['prefix'] +sys.prefix + +#? ['append'] +sys.path.append + +from math import * +#? ['cos', 'cosh'] +cos + +def func_with_import(): + import time + return time + +#? ['sleep'] +func_with_import().sleep + +# ----------------- +# relative imports +# ----------------- + +from .import_tree import mod1 +#? int() +mod1.a + +from ..import_tree import mod1 +#? +mod1.a + +from .......import_tree import mod1 +#? +mod1.a + +from .. import helpers +#? int() +helpers.sample_int + +from ..helpers import sample_int as f +#? int() +f + +from . import run +#? [] +run. + +from . import import_tree as imp_tree +#? str() +imp_tree.a + +from . import datetime as mod1 +#? [] +mod1. + +# self import +# this can cause recursions +from imports import * + +# ----------------- +# packages +# ----------------- + +from import_tree.mod1 import c +#? set +c + +from import_tree import recurse_class1 + +#? ['a'] +recurse_class1.C.a +# github #239 RecursionError +#? ['a'] +recurse_class1.C().a + +# ----------------- +# Jedi debugging +# ----------------- + +# memoizing issues (check git history for the fix) +import not_existing_import + +if not_existing_import: + a = not_existing_import +else: + a = not_existing_import +#? +a + +# ----------------- +# module underscore descriptors +# ----------------- + +def underscore(): + import keyword + #? ['__file__'] + keyword.__file__ + #? str() + keyword.__file__ + + # Does that also work for our own module? + #? ['__file__'] + __file__ + + +# ----------------- +# complex relative imports #784 +# ----------------- +def relative(): + #? ['foobar'] + from import_tree.pkg.mod1 import foobar + #? int() + foobar + return 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/invalid.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/invalid.py new file mode 100644 index 0000000..0b81cc9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/invalid.py @@ -0,0 +1,214 @@ +""" +This file is less about the results and much more about the fact, that no +exception should be thrown. + +Basically this file could change depending on the current implementation. But +there should never be any errors. +""" + +# wait until keywords are out of definitions (pydoc function). +##? 5 +'s'() + +#? [] +str()).upper + +# ----------------- +# funcs +# ----------------- +def asdf(a or b): # multiple param names + return a + +#? +asdf(2) + +asdf = '' + +from a import (b +def blub(): + return 0 +def wrong_indents(): + asdf = 3 + asdf + asdf( + # TODO this seems to be wrong now? + ##? int() + asdf +def openbrace(): + asdf = 3 + asdf( + #? int() + asdf + return 1 + +#? int() +openbrace() + +blub([ +#? int() +openbrace() + +def indentfault(): + asd( + indentback + +#? [] +indentfault(). + +def openbrace2(): + asd( +def normalfunc(): + return 1 + +#? int() +normalfunc() + +# dots in param +def f(seq1...=None): + return seq1 +#? +f(1) + +@ +def test_empty_decorator(): + return 1 + +#? int() +test_empty_decorator() + +def invalid_param(param=): + #? + param +# ----------------- +# flows +# ----------------- + +# first part not complete (raised errors) +if a + a +else: + #? ['AttributeError'] + AttributeError + +try +#? ['AttributeError'] +except AttributeError + pass +finally: + pass + +#? ['isinstance'] +if isi +try: + except TypeError: + #? str() + str() + +def break(): pass +# wrong ternary expression +a = '' +a = 1 if +#? str() +a + +# No completions for for loops without the right syntax +for for_local in : + for_local +#? [] +for_local +#? +for_local + + +# ----------------- +# list comprehensions +# ----------------- + +a2 = [for a2 in [0]] +#? +a2[0] + +a3 = [for xyz in] +#? +a3[0] + +a3 = [a4 for in 'b'] +#? +a3[0] + +a3 = [a4 for a in for x in y] +#? +a3[0] + +a = [for a in +def break(): pass + +#? str() +a[0] + +a = [a for a in [1,2] +def break(): pass +#? str() +a[0] + +#? [] +int()).real + +# ----------------- +# keywords +# ----------------- + +#! [] +as + +def empty_assert(): + x = 3 + assert + #? int() + x + +import datetime as + + +# ----------------- +# statements +# ----------------- + +call = '' +invalid = .call +#? +invalid + +invalid = call?.call +#? str() +invalid + +# comma +invalid = ,call +#? str() +invalid + + +# ----------------- +# classes +# ----------------- + +class BrokenPartsOfClass(): + def foo(self): + # This construct contains two places where Jedi with Python 3 can fail. + # It should just ignore those constructs and still execute `bar`. + pass + if 2: + try: + pass + except ValueError, e: + raise TypeError, e + else: + pass + + def bar(self): + self.x = 3 + return '' + +#? str() +BrokenPartsOfClass().bar() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/isinstance.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/isinstance.py new file mode 100644 index 0000000..15fb9a7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/isinstance.py @@ -0,0 +1,101 @@ +if isinstance(i, str): + #? str() + i + +if isinstance(j, (str, int)): + #? str() int() + j + +while isinstance(k, (str, int)): + #? str() int() + k + +if not isinstance(k, (str, int)): + #? + k + +while not isinstance(k, (str, int)): + #? + k + +assert isinstance(ass, int) +#? int() +ass + +assert isinstance(ass, str) +assert not isinstance(ass, int) + +if 2: + #? str() + ass + +# ----------------- +# invalid arguments +# ----------------- + +if isinstance(wrong, str()): + #? + wrong + +# ----------------- +# in functions +# ----------------- + +import datetime + + +def fooooo(obj): + if isinstance(obj, datetime.datetime): + #? datetime.datetime() + obj + + +def fooooo2(obj): + if isinstance(obj, datetime.date): + return obj + else: + return 1 + +a +# In earlier versions of Jedi, this returned both datetime and int, but now +# Jedi does flow checks and realizes that the top return isn't executed. +#? int() +fooooo2('') + + +def isinstance_func(arr): + for value in arr: + if isinstance(value, dict): + # Shouldn't fail, even with the dot. + #? 17 dict() + value. + elif isinstance(value, int): + x = value + #? int() + x + +# ----------------- +# Names with multiple indices. +# ----------------- + +class Test(): + def __init__(self, testing): + if isinstance(testing, str): + self.testing = testing + else: + self.testing = 10 + + def boo(self): + if isinstance(self.testing, str): + # TODO this is wrong, it should only be str. + #? str() int() + self.testing + #? Test() + self + +# ----------------- +# Syntax +# ----------------- + +#? +isinstance(1, int()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/keywords.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/keywords.py new file mode 100644 index 0000000..fa9bf52 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/keywords.py @@ -0,0 +1,59 @@ + +#? ['raise'] +raise + +#? ['Exception'] +except + +#? [] +b + continu + +#? [] +b + continue + +#? ['continue'] +b; continue + +#? ['continue'] +b; continu + +#? [] +c + pass + +#? [] +a + pass + +#? ['pass'] +b; pass + +# ----------------- +# Keywords should not appear everywhere. +# ----------------- + +#? [] +with open() as f +#? [] +def i +#? [] +class i + +#? [] +continue i + +# More syntax details, e.g. while only after newline, but not after semicolon, +# continue also after semicolon +#? ['while'] +while +#? [] +x while +#? [] +x; while +#? ['continue'] +x; continue + +#? [] +and +#? ['and'] +x and +#? [] +x * and diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/lambdas.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/lambdas.py new file mode 100644 index 0000000..524df0c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/lambdas.py @@ -0,0 +1,113 @@ +# ----------------- +# lambdas +# ----------------- +a = lambda: 3 +#? int() +a() + +x = [] +a = lambda x: x +#? int() +a(0) + +#? float() +(lambda x: x)(3.0) + +arg_l = lambda x, y: y, x +#? float() +arg_l[0]('', 1.0) +#? list() +arg_l[1] + +arg_l = lambda x, y: (y, x) +args = 1,"" +result = arg_l(*args) +#? tuple() +result +#? str() +result[0] +#? int() +result[1] + +def with_lambda(callable_lambda, *args, **kwargs): + return callable_lambda(1, *args, **kwargs) + +#? int() +with_lambda(arg_l, 1.0)[1] +#? float() +with_lambda(arg_l, 1.0)[0] +#? float() +with_lambda(arg_l, y=1.0)[0] +#? int() +with_lambda(lambda x: x) +#? float() +with_lambda(lambda x, y: y, y=1.0) + +arg_func = lambda *args, **kwargs: (args[0], kwargs['a']) +#? int() +arg_func(1, 2, a='', b=10)[0] +#? list() +arg_func(1, 2, a=[], b=10)[1] + +# magic method +a = lambda: 3 +#? ['__closure__'] +a.__closure__ + +class C(): + def __init__(self, foo=1.0): + self.a = lambda: 1 + self.foo = foo + + def ret(self): + return lambda: self.foo + + def with_param(self): + return lambda x: x + self.a() + + lambd = lambda self: self.foo + +#? int() +C().a() + +#? str() +C('foo').ret()() + +index = C().with_param()(1) +#? float() +['', 1, 1.0][index] + +#? float() +C().lambd() +#? int() +C(1).lambd() + + +def xy(param): + def ret(a, b): + return a + b + + return lambda b: ret(param, b) + +#? int() +xy(1)(2) + +# ----------------- +# lambda param (#379) +# ----------------- +class Test(object): + def __init__(self, pred=lambda a, b: a): + self.a = 1 + #? int() + self.a + #? float() + pred(1.0, 2) + +# ----------------- +# test_nocond in grammar (happens in list comprehensions with `if`) +# ----------------- +# Doesn't need to do anything yet. It should just not raise an error. These +# nocond lambdas make no sense at all. + +#? int() +[a for a in [1,2] if lambda: 3][0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_expression.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_expression.py new file mode 100644 index 0000000..37c835a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_expression.py @@ -0,0 +1,13 @@ +# python >= 3.8 +b = (a:=1, a) + +#? int() +b[0] +#? +b[1] + +# Should not fail +b = ('':=1,) + +#? int() +b[0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_param.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_param.py new file mode 100644 index 0000000..66ba59e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/named_param.py @@ -0,0 +1,62 @@ +""" +Named Params: +>>> def a(abc): pass +... +>>> a(abc=3) # <- this stuff (abc) +""" + +def a(abc): + pass + +#? 5 ['abc'] +a(abc) + + +def a(*some_args, **some_kwargs): + pass + +#? 11 [] +a(some_args) + +#? 13 [] +a(some_kwargs) + +def multiple(foo, bar): + pass + +#? 17 ['bar'] +multiple(foo, bar) + +#? ['bar'] +multiple(foo, bar + +my_lambda = lambda lambda_param: lambda_param + 1 +#? 22 ['lambda_param'] +my_lambda(lambda_param) + +# __call__ / __init__ +class Test(object): + def __init__(self, hello_other): + pass + + def __call__(self, hello): + pass + + def test(self, blub): + pass + +#? 10 ['hello_other'] +Test(hello=) +#? 12 ['hello'] +Test()(hello=) +#? 11 [] +Test()(self=) +#? 16 [] +Test().test(self=) +#? 16 ['blub'] +Test().test(blub=) + +# builtins + +#? 12 [] +any(iterable=) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/on_import.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/on_import.py new file mode 100644 index 0000000..733d741 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/on_import.py @@ -0,0 +1,110 @@ +def from_names(): + #? ['mod1'] + from import_tree.pkg. + #? ['path'] + from os. + +def from_names_goto(): + from import_tree import pkg + #? pkg + from import_tree.pkg + +def builtin_test(): + #? ['math'] + import math + +# ----------------- +# completions within imports +# ----------------- + +#? ['sqlite3'] +import sqlite3 + +#? ['classes'] +import classes + +#? ['timedelta'] +from datetime import timedel +#? 21 [] +from datetime.timedel import timedel + +# should not be possible, because names can only be looked up 1 level deep. +#? [] +from datetime.timedelta import resolution +#? [] +from datetime.timedelta import + +#? ['Cursor'] +from sqlite3 import Cursor + +#? ['some_variable'] +from . import some_variable +#? ['arrays'] +from . import arrays +#? [] +from . import import_tree as ren +#? [] +import json as + +import os +#? os.path.join +from os.path import join + +# ----------------- +# special positions -> edge cases +# ----------------- +import datetime + +#? 6 datetime +from datetime.time import time + +#? [] +import datetime. +#? [] +import datetime.date + +#? 21 ['import'] +from import_tree.pkg import pkg +#? 49 ['a', 'foobar', '__name__', '__doc__', '__file__', '__package__'] +from import_tree.pkg.mod1 import not_existant, # whitespace before +#? ['a', 'foobar', '__name__', '__doc__', '__file__', '__package__'] +from import_tree.pkg.mod1 import not_existant, +#? 22 ['mod1'] +from import_tree.pkg. import mod1 +#? 17 ['mod1', 'mod2', 'random', 'pkg', 'rename1', 'rename2', 'classes', 'recurse_class1', 'recurse_class2', 'invisible_pkg', 'flow_import'] +from import_tree. import pkg + +#? 18 ['pkg'] +from import_tree.p import pkg + +#? 17 ['import_tree'] +from .import_tree import +#? 10 ['run'] +from ..run import +#? ['run'] +from ..run +#? 10 ['run'] +from ..run. +#? [] +from ..run. + +#? ['run'] +from .. import run + +#? [] +from not_a_module import + + +#137 +import json +#? 23 json.dump +from json import load, dump +#? 17 json.load +from json import load, dump +# without the from clause: +import json, datetime +#? 7 json +import json, datetime +#? 13 datetime +import json, datetime + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/ordering.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/ordering.py new file mode 100644 index 0000000..61eb192 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/ordering.py @@ -0,0 +1,195 @@ +# ----------------- +# normal +# ----------------- +a = "" +a = 1 + +#? int() +a +#? [] +a.append + +a = list + +b = 1; b = "" +#? str() +b + +# temp should not be accessible before definition +#? [] +temp + +a = 1 +temp = b; +b = a +a = temp +#? int() +b +#? int() +b +#? str() +a + +a = tuple +if 1: + a = list + +#? ['append'] +a.append +#? ['index'] +a.index + +# ----------------- +# tuples exchanges +# ----------------- +a, b = 1, "" +#? int() +a +#? str() +b + +b, a = a, b +#? int() +b +#? str() +a + +b, a = a, b +#? int() +a +#? str() +b + +# ----------------- +# function +# ----------------- +def a(a=3): + #? int() + a + #? [] + a.func + return a + +#? int() +a(2) +#? [] +a(2).func + +a_param = 3 +def func(a_param): + # should not be int + #? [] + a_param. + +from os import path + + +# should not return a function, because `a` is a function above +def f(b, a): return a +#? [] +f(b=3). + +# ----------------- +# closure +# ----------------- + +def x(): + a = 0 + + def x(): + return a + + a = 3.0 + return x() + +#? float() +x() + +# ----------------- +# class +# ----------------- +class A(object): + a = "" + a = 3 + #? int() + a + a = list() + def __init__(self): + self.b = "" + + def before(self): + self.b = 3 + # TODO should this be so? include entries after cursor? + #? int() str() list + self.b + self.b = list + + self.a = 1 + #? str() int() + self.a + + #? ['after'] + self.after + + self.c = 3 + #? int() + self.c + + def after(self): + self.a = '' + + c = set() + +#? list() +A.a + +a = A() +#? ['after'] +a.after +#? [] +a.upper +#? [] +a.append +#? [] +a.real + +#? str() int() +a.a + +a = 3 +class a(): + def __init__(self, a): + self.a = a + +#? float() +a(1.0).a +#? +a().a + +# ----------------- +# imports +# ----------------- + +math = 3 +import math +#? ['cosh'] +math.cosh +#? [] +math.real + +math = 3 +#? int() +math +#? [] +math.cos + +# do the same for star imports +cosh = 3 +from math import * +# cosh doesn't work, but that's not a problem, star imports should be at the +# start of EVERY script! +cosh.real + +cosh = 3 +#? int() +cosh diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/parser.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/parser.py new file mode 100644 index 0000000..68793f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/parser.py @@ -0,0 +1,43 @@ +""" +Issues with the parser and not the type inference should be part of this file. +""" + +class IndentIssues(): + """ + issue jedi-vim#288 + Which is really a fast parser issue. It used to start a new block at the + parentheses, because it had problems with the indentation. + """ + def one_param( + self, + ): + return 1 + + def with_param( + self, + y): + return y + + + +#? int() +IndentIssues().one_param() + +#? str() +IndentIssues().with_param('') + + +""" +Just because there's a def keyword, doesn't mean it should not be able to +complete to definition. +""" +definition = 0 +#? ['definition'] +str(def + + +# It might be hard to determine the context +class Foo(object): + @property + #? ['str'] + def bar(str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_basic.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_basic.py new file mode 100644 index 0000000..aef5437 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_basic.py @@ -0,0 +1,183 @@ +""" Pep-0484 type hinting """ + +# python >= 3.4 + + +class A(): + pass + + +def function_parameters(a: A, b, c: str, d: int, e: str, f: str, g: int=4): + """ + :param e: if docstring and annotation agree, only one should be returned + :type e: str + :param f: if docstring and annotation disagree, both should be returned + :type f: int + """ + #? A() + a + #? + b + #? str() + c + #? int() + d + #? str() + e + #? int() str() + f + # int() + g + + +def return_unspecified(): + pass + +#? +return_unspecified() + + +def return_none() -> None: + """ + Return type None means the same as no return type as far as jedi + is concerned + """ + pass + +#? +return_none() + + +def return_str() -> str: + pass + +#? str() +return_str() + + +def return_custom_class() -> A: + pass + +#? A() +return_custom_class() + + +def return_annotation_and_docstring() -> str: + """ + :rtype: int + """ + pass + +#? str() +return_annotation_and_docstring() + + +def return_annotation_and_docstring_different() -> str: + """ + :rtype: str + """ + pass + +#? str() +return_annotation_and_docstring_different() + + +def annotation_forward_reference(b: "B") -> "B": + #? B() + b + +#? ["test_element"] +annotation_forward_reference(1).t + +class B: + test_element = 1 + pass + +#? B() +annotation_forward_reference(1) + + +class SelfReference: + test_element = 1 + def test_method(self, x: "SelfReference") -> "SelfReference": + #? SelfReference() + x + #? ["test_element", "test_method"] + self.t + #? ["test_element", "test_method"] + x.t + #? ["test_element", "test_method"] + self.test_method(1).t + +#? SelfReference() +SelfReference().test_method() + +def function_with_non_pep_0484_annotation( + x: "I can put anything here", + xx: "", + yy: "\r\n\0;+*&^564835(---^&*34", + y: 3 + 3, + zz: float) -> int("42"): + # infers int from function call + #? int() + x + # infers int from function call + #? int() + xx + # infers int from function call + #? int() + yy + # infers str from function call + #? str() + y + #? float() + zz +#? +function_with_non_pep_0484_annotation(1, 2, 3, "force string") + +def function_forward_reference_dynamic( + x: return_str_type(), + y: "return_str_type()") -> None: + #? str() + x + #? str() + y + +def return_str_type(): + return str + + +X = str +def function_with_assined_class_in_reference(x: X, y: "Y"): + #? str() + x + #? int() + y +Y = int + +def just_because_we_can(x: "flo" + "at"): + #? float() + x + + +def keyword_only(a: str, *, b: str): + #? ['startswith'] + a.startswi + #? ['startswith'] + b.startswi + + +def argskwargs(*args: int, **kwargs: float): + """ + This might be a bit confusing, but is part of the standard. + args is changed to Tuple[int] in this case and kwargs to Dict[str, float], + which makes sense if you think about it a bit. + """ + #? tuple() + args + #? int() + args[0] + #? str() + next(iter(kwargs.keys())) + #? float() + kwargs[''] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_comments.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_comments.py new file mode 100644 index 0000000..9f0661e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_comments.py @@ -0,0 +1,186 @@ +a = 3 # type: str +#? str() +a + +b = 3 # type: str but I write more +#? int() +b + +c = 3 # type: str # I comment more +#? str() +c + +d = "It should not read comments from the next line" +# type: int +#? str() +d + +# type: int +e = "It should not read comments from the previous line" +#? str() +e + +class BB: pass + +def test(a, b): + a = a # type: BB + c = a # type: str + d = a + # type: str + e = a # type: str # Should ignore long whitespace + + #? BB() + a + #? str() + c + #? BB() + d + #? str() + e + +a,b = 1, 2 # type: str, float +#? str() +a +#? float() +b + +class Employee: + pass + +from typing import List, Tuple +x = [] # type: List[Employee] +#? Employee() +x[1] +x, y, z = [], [], [] # type: List[int], List[int], List[str] +#? int() +y[2] +x, y, z = [], [], [] # type: (List[float], List[float], List[BB]) +for zi in z: + #? BB() + zi + +x = [ + 1, + 2, +] # type: List[str] + +#? str() +x[1] + + +for bar in foo(): # type: str + #? str() + bar + +for bar, baz in foo(): # type: int, float + #? int() + bar + #? float() + baz + +for bar, baz in foo(): + # type: str, str + """ type hinting on next line should not work """ + #? + bar + #? + baz + +with foo(): # type: int + ... + +with foo() as f: # type: str + #? str() + f + +with foo() as f: + # type: str + """ type hinting on next line should not work """ + #? + f + +aaa = some_extremely_long_function_name_that_doesnt_leave_room_for_hints() \ + # type: float # We should be able to put hints on the next line with a \ +#? float() +aaa + +# Test instance methods +class Dog: + def __init__(self, age, friends, name): + # type: (int, List[Tuple[str, Dog]], str) -> None + #? int() + self.age = age + self.friends = friends + + #? Dog() + friends[0][1] + + #? str() + self.name = name + + def friend_for_name(self, name): + # type: (str) -> Dog + for (friend_name, friend) in self.friends: + if friend_name == name: + return friend + raise ValueError() + + def bark(self): + pass + +buddy = Dog(UNKNOWN_NAME1, UNKNOWN_NAME2, UNKNOWN_NAME3) +friend = buddy.friend_for_name('buster') +# type of friend is determined by function return type +#! 9 ['def bark'] +friend.bark() + +friend = buddy.friends[0][1] +# type of friend is determined by function parameter type +#! 9 ['def bark'] +friend.bark() + +# type is determined by function parameter type following nested generics +#? str() +friend.name + +# Mypy comment describing function return type. +def annot(): + # type: () -> str + pass + +#? str() +annot() + +# Mypy variable type annotation. +x = UNKNOWN_NAME2 # type: str + +#? str() +x + +class Cat(object): + def __init__(self, age, friends, name): + # type: (int, List[Dog], str) -> None + self.age = age + self.friends = friends + self.name = name + +cat = Cat(UNKNOWN_NAME4, UNKNOWN_NAME5, UNKNOWN_NAME6) +#? str() +cat.name + + +# Check potential errors +def x(a, b): + # type: ([) -> a + #? + a +def x(a, b): + # type: (1) -> a + #? + a +def x(a, b, c): + # type: (str) -> a + #? + b + #? + c diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_typing.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_typing.py new file mode 100644 index 0000000..56c506d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0484_typing.py @@ -0,0 +1,424 @@ +""" +Test the typing library, with docstrings. This is needed since annotations +are not supported in python 2.7 else then annotating by comment (and this is +still TODO at 2016-01-23) +""" +import typing +class B: + pass + +def we_can_has_sequence(p, q, r, s, t, u): + """ + :type p: typing.Sequence[int] + :type q: typing.Sequence[B] + :type r: typing.Sequence[int] + :type s: typing.Sequence["int"] + :type t: typing.MutableSequence[dict] + :type u: typing.List[float] + """ + #? ["count"] + p.c + #? int() + p[1] + #? ["count"] + q.c + #? B() + q[1] + #? ["count"] + r.c + #? int() + r[1] + #? ["count"] + s.c + #? int() + s[1] + #? [] + s.a + #? ["append"] + t.a + #? dict() + t[1] + #? ["append"] + u.a + #? float() list() + u[1.0] + #? float() + u[1] + +def iterators(ps, qs, rs, ts): + """ + :type ps: typing.Iterable[int] + :type qs: typing.Iterator[str] + :type rs: typing.Sequence["ForwardReference"] + :type ts: typing.AbstractSet["float"] + """ + for p in ps: + #? int() + p + #? + next(ps) + a, b = ps + #? int() + a + ##? int() --- TODO fix support for tuple assignment + # https://github.com/davidhalter/jedi/pull/663#issuecomment-172317854 + # test below is just to make sure that in case it gets fixed by accident + # these tests will be fixed as well the way they should be + #? + b + + for q in qs: + #? str() + q + #? str() + next(qs) + for r in rs: + #? ForwardReference() + r + #? + next(rs) + for t in ts: + #? float() + t + +def sets(p, q): + """ + :type p: typing.AbstractSet[int] + :type q: typing.MutableSet[float] + """ + #? [] + p.a + #? ["add"] + q.a + +def tuple(p, q, r): + """ + :type p: typing.Tuple[int] + :type q: typing.Tuple[int, str, float] + :type r: typing.Tuple[B, ...] + """ + #? int() + p[0] + #? int() + q[0] + #? str() + q[1] + #? float() + q[2] + #? B() + r[0] + #? B() + r[1] + #? B() + r[2] + #? B() + r[10000] + i, s, f = q + #? int() + i + #? str() + s + #? float() + f + +class Key: + pass + +class Value: + pass + +def mapping(p, q, d, dd, r, s, t): + """ + :type p: typing.Mapping[Key, Value] + :type q: typing.MutableMapping[Key, Value] + :type d: typing.Dict[Key, Value] + :type dd: typing.DefaultDict[Key, Value] + :type r: typing.KeysView[Key] + :type s: typing.ValuesView[Value] + :type t: typing.ItemsView[Key, Value] + """ + #? [] + p.setd + #? ["setdefault"] + q.setd + #? ["setdefault"] + d.setd + #? ["setdefault"] + dd.setd + #? Value() + p[1] + for key in p: + #? Key() + key + for key in p.keys(): + #? Key() + key + for value in p.values(): + #? Value() + value + for item in p.items(): + #? Key() + item[0] + #? Value() + item[1] + (key, value) = item + #? Key() + key + #? Value() + value + for key, value in p.items(): + #? Key() + key + #? Value() + value + for key, value in q.items(): + #? Key() + key + #? Value() + value + for key, value in d.items(): + #? Key() + key + #? Value() + value + for key, value in dd.items(): + #? Key() + key + #? Value() + value + for key in r: + #? Key() + key + for value in s: + #? Value() + value + for key, value in t: + #? Key() + key + #? Value() + value + +def union(p, q, r, s, t): + """ + :type p: typing.Union[int] + :type q: typing.Union[int, int] + :type r: typing.Union[int, str, "int"] + :type s: typing.Union[int, typing.Union[str, "typing.Union['float', 'dict']"]] + :type t: typing.Union[int, None] + """ + #? int() + p + #? int() + q + #? int() str() + r + #? int() str() float() dict() + s + #? int() + t + +def optional(p): + """ + :type p: typing.Optional[int] + Optional does not do anything special. However it should be recognised + as being of that type. Jedi doesn't do anything with the extra into that + it can be None as well + """ + #? int() None + p + +class ForwardReference: + pass + +class TestDict(typing.Dict[str, int]): + def setdud(self): + pass + +def testdict(x): + """ + :type x: TestDict + """ + #? ["setdud", "setdefault"] + x.setd + for key in x.keys(): + #? str() + key + for value in x.values(): + #? int() + value + +x = TestDict() +#? ["setdud", "setdefault"] +x.setd +for key in x.keys(): + #? str() + key +for value in x.values(): + #? int() + value + +WrappingType = typing.NewType('WrappingType', str) # Chosen arbitrarily +y = WrappingType(0) # Per https://github.com/davidhalter/jedi/issues/1015#issuecomment-355795929 +#? str() +y + +def testnewtype(y): + """ + :type y: WrappingType + """ + #? str() + y + #? ["upper"] + y.u + +WrappingType2 = typing.NewType() + +def testnewtype2(y): + """ + :type y: WrappingType2 + """ + #? + y + #? [] + y. +# python >= 3.4 + +class TestDefaultDict(typing.DefaultDict[str, int]): + def setdud(self): + pass + +def testdict(x): + """ + :type x: TestDefaultDict + """ + #? ["setdud", "setdefault"] + x.setd + for key in x.keys(): + #? str() + key + for value in x.values(): + #? int() + value + +x = TestDefaultDict() +#? ["setdud", "setdefault"] +x.setd +for key in x.keys(): + #? str() + key +for value in x.values(): + #? int() + value +# python >= 3.4 + + +""" +docstrings have some auto-import, annotations can use all of Python's +import logic +""" +import typing as t +def union2(x: t.Union[int, str]): + #? int() str() + x +from typing import Union +def union3(x: Union[int, str]): + #? int() str() + x + +from typing import Union as U +def union4(x: U[int, str]): + #? int() str() + x + +# ------------------------- +# Type Vars +# ------------------------- + +TYPE_VARX = typing.TypeVar('TYPE_VARX') +TYPE_VAR_CONSTRAINTSX = typing.TypeVar('TYPE_VAR_CONSTRAINTSX', str, int) +# TODO there should at least be some results. +#? [] +TYPE_VARX. +#! ["TYPE_VARX = typing.TypeVar('TYPE_VARX')"] +TYPE_VARX + + +class WithTypeVar(typing.Generic[TYPE_VARX]): + def lala(self) -> TYPE_VARX: + ... + + +def maaan(p: WithTypeVar[int]): + #? int() + p.lala() + +def in_out1(x: TYPE_VARX) -> TYPE_VARX: ... + +#? int() +in_out1(1) +#? str() +in_out1("") +#? str() +in_out1(str()) +#? +in_out1() + +def in_out2(x: TYPE_VAR_CONSTRAINTSX) -> TYPE_VAR_CONSTRAINTSX: ... + +#? int() +in_out2(1) +#? str() +in_out2("") +#? str() +in_out2(str()) +#? str() int() +in_out2() +# TODO this should actually be str() int(), because of the constraints. +#? float() +in_out2(1.0) + +# ------------------------- +# TYPE_CHECKING +# ------------------------- + +if typing.TYPE_CHECKING: + with_type_checking = 1 +else: + without_type_checking = 1.0 +#? int() +with_type_checking +#? +without_type_checking + +def foo(a: typing.List, b: typing.Dict, c: typing.MutableMapping) -> typing.Type[int]: + #? ['append'] + a.appen + #? list() + a + #? + a[0] + #? ['setdefault'] + b.setd + #? ['setdefault'] + c.setd + #? typing.MutableMapping() + c + #? + c['asdf'] +#? int +foo() + +# ------------------------- +# cast +# ------------------------- + +def cast_tests(): + x = 3.0 + y = typing.cast(int, x) + #? int() + y + return typing.cast(str, x) + + +#? str() +cast_tests() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0526_variables.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0526_variables.py new file mode 100644 index 0000000..6af77d9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/pep0526_variables.py @@ -0,0 +1,115 @@ +""" +PEP 526 introduced a new way of using type annotations on variables. It was +introduced in Python 3.6. +""" +# python >= 3.6 + +import typing + +asdf = '' +asdf: int +# This is not necessarily correct, but for now this is ok (at least no error). +#? int() +asdf + + +direct: int = NOT_DEFINED +#? int() +direct + +with_typing_module: typing.List[float] = NOT_DEFINED +#? float() +with_typing_module[0] + +somelist = [1, 2, 3, "A", "A"] +element : int +for element in somelist: + #? int() + element + +test_string: str = NOT_DEFINED +#? str() +test_string + + +char: str +for char in NOT_DEFINED: + #? str() + char + + +# ------------------------- +# instance/class vars +# ------------------------- + +class Foo(): + bar: int + baz: typing.ClassVar[str] + + +#? +Foo.bar +#? int() +Foo().bar +#? str() +Foo.baz +#? str() +Foo().baz + +class VarClass: + var_instance1: int = 1 + var_instance2: float + var_class1: typing.ClassVar[str] = 1 + var_class2: typing.ClassVar[bytes] + + def __init__(self): + #? int() + d.var_instance1 + #? float() + d.var_instance2 + #? str() + d.var_class1 + #? bytes() + d.var_class2 + #? [] + d.int + #? ['var_class1', 'var_class2', 'var_instance1', 'var_instance2'] + self.var_ + + +#? ['var_class1', 'var_class2'] +VarClass.var_ +#? +VarClass.var_instance1 +#? +VarClass.var_instance2 +#? str() +VarClass.var_class1 +#? bytes() +VarClass.var_class2 +#? [] +VarClass.int + +d = VarClass() +#? ['var_class1', 'var_class2', 'var_instance1', 'var_instance2'] +d.var_ +#? int() +d.var_instance1 +#? float() +d.var_instance2 +#? str() +d.var_class1 +#? bytes() +d.var_class2 +#? [] +d.int + + + +import dataclasses +@dataclasses.dataclass +class DC: + name: int = 1 + +#? int() +DC().name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/positional_only_params.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/positional_only_params.py new file mode 100644 index 0000000..4126151 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/positional_only_params.py @@ -0,0 +1,29 @@ +# python >= 3.8 + +def positional_only_call(a, /, b): + #? str() + a + #? int() + b + return a + b + + +#? int() str() +positional_only_call('', 1) + + +def positional_only_call2(a, /, b=3): + return a + b + +#? int() +positional_only_call2(1) +#? int() +positional_only_call2(SOMETHING_UNDEFINED) +#? str() +positional_only_call2(SOMETHING_UNDEFINED, '') + +# Maybe change this? Because it's actually not correct +#? int() str() +positional_only_call2(a=1, b='') +#? tuple str() +positional_only_call2(b='', a=tuple) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/precedence.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/precedence.py new file mode 100644 index 0000000..6e9c1ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/precedence.py @@ -0,0 +1,143 @@ +""" +Test Jedi's operation understanding. Jedi should understand simple additions, +multiplications, etc. +""" +# ----------------- +# numbers +# ----------------- +x = [1, 'a', 1.0] + +#? int() str() float() +x[12] + +#? float() +x[1 + 1] + +index = 0 + 1 + +#? str() +x[index] + +#? int() +x[1 + (-1)] + +def calculate(number): + return number + constant + +constant = 1 + +#? float() +x[calculate(1)] + +def calculate(number): + return number + constant + +# ----------------- +# strings +# ----------------- + +x = 'upp' + 'e' + +#? str.upper +getattr(str, x + 'r') + +a = "a"*3 +#? str() +a +a = 3 * "a" +#? str() +a + +a = 3 * "a" +#? str() +a + +#? int() +(3 ** 3) +#? int() str() +(3 ** 'a') + +class X(): + foo = 2 +#? int() +(X.foo ** 3) + +# ----------------- +# assignments +# ----------------- + +x = [1, 'a', 1.0] + +i = 0 +i += 1 +i += 1 +#? float() +x[i] + +i = 1 +i += 1 +i -= 3 +i += 1 +#? int() +x[i] + +# ----------------- +# in +# ----------------- + +if 'X' in 'Y': + a = 3 +else: + a = '' +# For now don't really check for truth values. So in should return both +# results. +#? str() int() +a + +# ----------------- +# for flow assignments +# ----------------- + +class FooBar(object): + fuu = 0.1 + raboof = 'fourtytwo' + +# targets should be working +target = '' +for char in ['f', 'u', 'u']: + target += char +#? float() +getattr(FooBar, target) + +# github #24 +target = u'' +for char in reversed(['f', 'o', 'o', 'b', 'a', 'r']): + target += char + +#? str() +getattr(FooBar, target) + + +# ----------------- +# repetition problems -> could be very slow and memory expensive - shouldn't +# be. +# ----------------- + +b = [str(1)] +l = list +for x in [l(0), l(1), l(2), l(3), l(4), l(5), l(6), l(7), l(8), l(9), l(10), + l(11), l(12), l(13), l(14), l(15), l(16), l(17), l(18), l(19), l(20), + l(21), l(22), l(23), l(24), l(25), l(26), l(27), l(28), l(29)]: + b += x + +#? str() +b[1] + + +# ----------------- +# undefined names +# ----------------- +a = foobarbaz + 'hello' + +#? int() float() +{'hello': 1, 'bar': 1.0}[a] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/recursion.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/recursion.py new file mode 100644 index 0000000..ebbd69e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/recursion.py @@ -0,0 +1,93 @@ +""" +Code that might cause recursion issues (or has caused in the past). +""" + +def Recursion(): + def recurse(self): + self.a = self.a + self.b = self.b.recurse() + +#? +Recursion().a + +#? +Recursion().b + + +class X(): + def __init__(self): + self.recursive = [1, 3] + + def annoying(self): + self.recursive = [self.recursive[0]] + + def recurse(self): + self.recursive = [self.recursive[1]] + +#? int() +X().recursive[0] + + +def to_list(iterable): + return list(set(iterable)) + + +def recursion1(foo): + return to_list(to_list(foo)) + recursion1(foo) + +#? int() +recursion1([1,2])[0] + + +class FooListComp(): + def __init__(self): + self.recursive = [1] + + def annoying(self): + self.recursive = [x for x in self.recursive] + + +#? int() +FooListComp().recursive[0] + + +class InstanceAttributeIfs: + def b(self): + self.a1 = 1 + self.a2 = 1 + + def c(self): + self.a2 = '' + + def x(self): + self.b() + + if self.a1 == 1: + self.a1 = self.a1 + 1 + if self.a2 == UNDEFINED: + self.a2 = self.a2 + 1 + + #? int() + self.a1 + #? int() str() + self.a2 + +#? int() +InstanceAttributeIfs().a1 +#? int() str() +InstanceAttributeIfs().a2 + + + +class A: + def a(self, b): + for x in [self.a(i) for i in b]: + #? + x + +class B: + def a(self, b): + for i in b: + for i in self.a(i): + #? + yield i diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stdlib.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stdlib.py new file mode 100644 index 0000000..423212b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stdlib.py @@ -0,0 +1,332 @@ +""" +std library stuff +""" + +# ----------------- +# builtins +# ----------------- +arr = [''] + +#? str() +sorted(arr)[0] + +#? str() +next(reversed(arr)) +next(reversed(arr)) + +# should not fail if there's no return value. +def yielder(): + yield None + +#? None +next(reversed(yielder())) + +# empty reversed should not raise an error +#? +next(reversed()) + +#? str() bytes() +next(open('')) + +#? int() +{'a':2}.setdefault('a', 3) + +# Compiled classes should have the meta class attributes. +#? ['__itemsize__'] +tuple.__itemsize__ +#? [] +tuple().__itemsize__ + +# ----------------- +# type() calls with one parameter +# ----------------- +#? int +type(1) +#? int +type(int()) +#? type +type(int) +#? type +type(type) +#? list +type([]) + +def x(): + yield 1 +generator = type(x()) +#? generator +type(x for x in []) +#? type(x) +type(lambda: x) + +import math +import os +#? type(os) +type(math) +class X(): pass +#? type +type(X) + +# ----------------- +# type() calls with multiple parameters +# ----------------- + +X = type('X', (object,), dict(a=1)) + +# Doesn't work yet. +#? +X.a +#? +X + +if os.path.isfile(): + #? ['abspath'] + fails = os.path.abspath + +# The type vars and other underscored things from typeshed should not be +# findable. +#? +os._T + + +with open('foo') as f: + for line in f.readlines(): + #? str() bytes() + line +# ----------------- +# enumerate +# ----------------- +for i, j in enumerate(["as", "ad"]): + #? int() + i + #? str() + j + +# ----------------- +# re +# ----------------- +import re +c = re.compile(r'a') +# re.compile should not return str -> issue #68 +#? [] +c.startswith +#? int() +c.match().start() + +#? int() +re.match(r'a', 'a').start() + +for a in re.finditer('a', 'a'): + #? int() + a.start() + +# ----------------- +# ref +# ----------------- +import weakref + +#? int() +weakref.proxy(1) + +#? weakref.ref() +weakref.ref(1) +#? int() None +weakref.ref(1)() + +# ----------------- +# functools +# ----------------- +import functools + +basetwo = functools.partial(int, base=2) +#? int() +basetwo() + +def function(a, b): + return a, b +a = functools.partial(function, 0) + +#? int() +a('')[0] +#? str() +a('')[1] + +kw = functools.partial(function, b=1.0) +tup = kw(1) +#? int() +tup[0] +#? float() +tup[1] + +def my_decorator(f): + @functools.wraps(f) + def wrapper(*args, **kwds): + return f(*args, **kwds) + return wrapper + +@my_decorator +def example(a): + return a + +#? str() +example('') + + +# ----------------- +# sqlite3 (#84) +# ----------------- + +import sqlite3 +#? sqlite3.Connection() +con = sqlite3.connect() +#? sqlite3.Cursor() +c = con.cursor() + +def huhu(db): + """ + :type db: sqlite3.Connection + :param db: the db connection + """ + #? sqlite3.Connection() + db + +# ----------------- +# hashlib +# ----------------- + +import hashlib + +#? ['md5'] +hashlib.md5 + +# ----------------- +# copy +# ----------------- + +import copy +#? int() +copy.deepcopy(1) + +#? +copy.copy() + +# ----------------- +# json +# ----------------- + +# We don't want any results for json, because it depends on IO. +import json +#? +json.load('asdf') +#? +json.loads('[1]') + +# ----------------- +# random +# ----------------- + +import random +class A(object): + def say(self): pass +class B(object): + def shout(self): pass +cls = random.choice([A, B]) +#? ['say', 'shout'] +cls().s + +# ----------------- +# random +# ----------------- + +import zipfile +z = zipfile.ZipFile("foo") +# It's too slow. So we don't run it at the moment. +##? ['upper'] +z.read('name').upper + +# ----------------- +# contextlib +# ----------------- + +import contextlib +with contextlib.closing('asd') as string: + #? str() + string + +# ----------------- +# operator +# ----------------- + +import operator + +f = operator.itemgetter(1) +#? float() +f([1.0]) +#? str() +f([1, '']) + +g = operator.itemgetter(1, 2) +x1, x2 = g([1, 1.0, '']) +#? float() +x1 +#? str() +x2 + +x1, x2 = g([1, '']) +#? str() +x1 +#? int() str() +x2 + +# ----------------- +# shlex +# ----------------- + +# Github issue #929 +import shlex +qsplit = shlex.split("foo, ferwerwerw werw werw e") +for part in qsplit: + #? str() + part + +# ----------------- +# Unknown metaclass +# ----------------- + +# Github issue 1321 +class Meta(object): + pass + +class Test(metaclass=Meta): + def test_function(self): + result = super(Test, self).test_function() + #? [] + result. + +# ----------------- +# Enum +# ----------------- + +# python >= 3.4 +import enum + +class X(enum.Enum): + attr_x = 3 + attr_y = 2.0 + +#? ['mro'] +X.mro +#? ['attr_x', 'attr_y'] +X.attr_ +#? str() +X.attr_x.name +#? int() +X.attr_x.value +#? str() +X.attr_y.name +#? float() +X.attr_y.value +#? str() +X().name +#? float() +X().attr_x.attr_y.value diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only.pyi new file mode 100644 index 0000000..4f2f423 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only.pyi @@ -0,0 +1 @@ +in_stub_only: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/__init__.pyi new file mode 100644 index 0000000..77cf246 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/__init__.pyi @@ -0,0 +1 @@ +in_stub_only_folder: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_stub_only.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_stub_only.pyi new file mode 100644 index 0000000..4f2f423 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_stub_only.pyi @@ -0,0 +1 @@ +in_stub_only: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.py new file mode 100644 index 0000000..0f9111f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.py @@ -0,0 +1,2 @@ +in_python = '' +in_both = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.pyi new file mode 100644 index 0000000..53dc265 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/nested_with_stub.pyi @@ -0,0 +1,2 @@ +in_stub: int +in_both: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/python_only.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/python_only.py new file mode 100644 index 0000000..23370e0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/stub_only_folder/python_only.py @@ -0,0 +1 @@ +in_python = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.py new file mode 100644 index 0000000..7f064dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.py @@ -0,0 +1,2 @@ +in_with_stub_both = 5 +in_with_stub_python = 8 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.pyi new file mode 100644 index 0000000..7a3f3ec --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub.pyi @@ -0,0 +1,2 @@ +in_with_stub_both: str +in_with_stub_stub: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.py new file mode 100644 index 0000000..4201289 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.py @@ -0,0 +1,2 @@ +in_with_stub_both_folder = 5 +in_with_stub_python_folder = 8 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.pyi new file mode 100644 index 0000000..ea7ec38 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/__init__.pyi @@ -0,0 +1,2 @@ +in_with_stub_both_folder: str +in_with_stub_stub_folder: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_stub_only.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_stub_only.pyi new file mode 100644 index 0000000..4f2f423 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_stub_only.pyi @@ -0,0 +1 @@ +in_stub_only: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.py new file mode 100644 index 0000000..0f9111f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.py @@ -0,0 +1,2 @@ +in_python = '' +in_both = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.pyi new file mode 100644 index 0000000..53dc265 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/nested_with_stub.pyi @@ -0,0 +1,2 @@ +in_stub: int +in_both: float diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/python_only.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/python_only.py new file mode 100644 index 0000000..23370e0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stub_folder/with_stub_folder/python_only.py @@ -0,0 +1 @@ +in_python = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stubs.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stubs.py new file mode 100644 index 0000000..8301354 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/stubs.py @@ -0,0 +1,104 @@ +# python >= 3.4 +from stub_folder import with_stub, stub_only, with_stub_folder, stub_only_folder + +# ------------------------- +# Just files +# ------------------------- + +#? int() +stub_only.in_stub_only +#? str() +with_stub.in_with_stub_both +#? int() +with_stub.in_with_stub_python +#? float() +with_stub.in_with_stub_stub + +#! ['in_stub_only: int'] +stub_only.in_stub_only +#! ['in_with_stub_both = 5'] +with_stub.in_with_stub_both +#! ['in_with_stub_python = 8'] +with_stub.in_with_stub_python +#! ['in_with_stub_stub: float'] +with_stub.in_with_stub_stub + +#? ['in_stub_only'] +stub_only.in_ +#? ['in_stub_only'] +from stub_folder.stub_only import in_ +#? ['in_with_stub_both', 'in_with_stub_python', 'in_with_stub_stub'] +with_stub.in_ +#? ['in_with_stub_both', 'in_with_stub_python', 'in_with_stub_stub'] +from stub_folder.with_stub import in_ + +#? ['with_stub', 'stub_only', 'with_stub_folder', 'stub_only_folder'] +from stub_folder. + +# ------------------------- +# Folders +# ------------------------- + +#? int() +stub_only_folder.in_stub_only_folder +#? str() +with_stub_folder.in_with_stub_both_folder +#? int() +with_stub_folder.in_with_stub_python_folder +#? float() +with_stub_folder.in_with_stub_stub_folder + +#? ['in_stub_only_folder'] +stub_only_folder.in_ +#? ['in_with_stub_both_folder', 'in_with_stub_python_folder', 'in_with_stub_stub_folder'] +with_stub_folder.in_ + +# ------------------------- +# Folders nested with stubs +# ------------------------- + +from stub_folder.with_stub_folder import nested_stub_only, nested_with_stub, \ + python_only + +#? int() +nested_stub_only.in_stub_only +#? float() +nested_with_stub.in_both +#? str() +nested_with_stub.in_python +#? int() +nested_with_stub.in_stub +#? str() +python_only.in_python + +#? ['in_stub_only_folder'] +stub_only_folder.in_ +#? ['in_with_stub_both_folder', 'in_with_stub_python_folder', 'in_with_stub_stub_folder'] +with_stub_folder.in_ +#? ['in_python'] +python_only.in_ + +# ------------------------- +# Folders nested with stubs +# ------------------------- + +from stub_folder.stub_only_folder import nested_stub_only, nested_with_stub, \ + python_only + +#? int() +nested_stub_only.in_stub_only +#? float() +nested_with_stub.in_both +#? str() +nested_with_stub.in_python +#? int() +nested_with_stub.in_stub +#? str() +python_only.in_python + +#? ['in_stub_only'] +nested_stub_only.in_ +#? ['in_both', 'in_python', 'in_stub'] +nested_with_stub.in_ +#? ['in_python'] +python_only.in_ diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/sys_path.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/sys_path.py new file mode 100644 index 0000000..890f2fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/sys_path.py @@ -0,0 +1,24 @@ + +import sys +import os +from os import dirname + +sys.path.insert(0, '../../jedi') +sys.path.append(dirname(os.path.abspath('thirdparty' + os.path.sep + 'asdf'))) + +# modifications, that should fail: +# syntax err +sys.path.append('a' +* '/thirdparty') + +#? ['evaluate'] +import evaluate + +#? ['evaluator_function_cache'] +evaluate.Evaluator_fu + +# Those don't work because dirname and abspath are not properly understood. +##? ['jedi_'] +import jedi_ + +##? ['el'] +jedi_.el diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/PyQt4_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/PyQt4_.py new file mode 100644 index 0000000..f4e4183 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/PyQt4_.py @@ -0,0 +1,19 @@ +from PyQt4.QtCore import * +from PyQt4.QtGui import * + +#? ['QActionGroup'] +QActionGroup + +#? ['currentText'] +QStyleOptionComboBox().currentText + +#? [] +QStyleOptionComboBox().currentText. + +from PyQt4 import QtGui + +#? ['currentText'] +QtGui.QStyleOptionComboBox().currentText + +#? [] +QtGui.QStyleOptionComboBox().currentText. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/django_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/django_.py new file mode 100644 index 0000000..9914a6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/django_.py @@ -0,0 +1,11 @@ +#! ['class ObjectDoesNotExist'] +from django.core.exceptions import ObjectDoesNotExist +import django + +#? ['get_version'] +django.get_version + +from django.conf import settings + +#? ['configured'] +settings.configured diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/jedi_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/jedi_.py new file mode 100644 index 0000000..dc384b1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/jedi_.py @@ -0,0 +1,52 @@ + +from jedi import functions, evaluate, parsing + +el = functions.completions()[0] +#? ['description'] +el.description + +#? str() +el.description + + +scopes, path, dot, like = \ + api._prepare_goto(source, row, column, path, True) + +# has problems with that (sometimes) very deep nesting. +#? set() +el = scopes + +# get_names_for_scope is also recursion stuff +#? tuple() +el = list(evaluate.get_names_for_scope())[0] + +#? int() parsing.Module() +el = list(evaluate.get_names_for_scope(1))[0][0] +#? parsing.Module() +el = list(evaluate.get_names_for_scope())[0][0] + +#? list() +el = list(evaluate.get_names_for_scope(1))[0][1] +#? list() +el = list(evaluate.get_names_for_scope())[0][1] + +#? list() +parsing.Scope((0,0)).get_set_vars() +#? parsing.Import() parsing.Name() +parsing.Scope((0,0)).get_set_vars()[0] +# TODO access parent is not possible, because that is not set in the class +## parsing.Class() +parsing.Scope((0,0)).get_set_vars()[0].parent + +#? parsing.Import() parsing.Name() +el = list(evaluate.get_names_for_scope())[0][1][0] + +#? evaluate.Array() evaluate.Class() evaluate.Function() evaluate.Instance() +list(evaluate.follow_call())[0] + +# With the right recursion settings, this should be possible (and maybe more): +# Array Class Function Generator Instance Module +# However, this was produced with the recursion settings 10/350/10000, and +# lasted 18.5 seconds. So we just have to be content with the results. +#? evaluate.Class() evaluate.Function() +evaluate.get_scopes_for_name()[0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/psycopg2_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/psycopg2_.py new file mode 100644 index 0000000..834704b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/psycopg2_.py @@ -0,0 +1,11 @@ +import psycopg2 + +conn = psycopg2.connect('dbname=test') + +#? ['cursor'] +conn.cursor + +cur = conn.cursor() + +#? ['fetchall'] +cur.fetchall diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/pylab_.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/pylab_.py new file mode 100644 index 0000000..ab132a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/thirdparty/pylab_.py @@ -0,0 +1,36 @@ +import pylab + +# two gotos +#! ['module numpy'] +import numpy + +#! ['module random'] +import numpy.random + +#? ['array2string'] +numpy.array2string + +#? ['shape'] +numpy.matrix().shape + +#? ['random_integers'] +pylab.random_integers + +#? [] +numpy.random_integers + +#? ['random_integers'] +numpy.random.random_integers +#? ['sample'] +numpy.random.sample + +import numpy +na = numpy.array([1,2]) +#? ['shape'] +na.shape + +# shouldn't raise an error #29, jedi-vim +# doesn't return something, because matplotlib uses __import__ +fig = pylab.figure() +#? +fig.add_subplot diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/types.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/types.py new file mode 100644 index 0000000..753af6c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/types.py @@ -0,0 +1,188 @@ +# ----------------- +# non array +# ----------------- + +#? ['imag'] +int.imag + +#? [] +int.is_integer + +#? ['is_integer'] +float.is_int + +#? ['is_integer'] +1.0.is_integer + +#? ['upper'] +"".upper + +#? ['upper'] +r"".upper + +# strangely this didn't work, because the = is used for assignments +#? ['upper'] +"=".upper +a = "=" +#? ['upper'] +a.upper + + +# ----------------- +# lists +# ----------------- +arr = [] +#? ['append'] +arr.app + +#? ['append'] +list().app +#? ['append'] +[].append + +arr2 = [1,2,3] +#? ['append'] +arr2.app + +#? int() +arr.count(1) + +x = [] +#? +x.pop() +x = [3] +#? int() +x.pop() +x = [] +x.append(1.0) +#? float() +x.pop() + +# ----------------- +# dicts +# ----------------- +dic = {} + +#? ['copy', 'clear'] +dic.c + +dic2 = dict(a=1, b=2) +#? ['pop', 'popitem'] +dic2.p +#? ['popitem'] +{}.popitem + +dic2 = {'asdf': 3} +#? ['popitem'] +dic2.popitem + +#? int() +dic2['asdf'] + +d = {'a': 3, 1.0: list} + +#? int() list +d.values()[0] +##? int() list +dict(d).values()[0] + +#? str() +d.items()[0][0] +#? int() +d.items()[0][1] + +(a, b), = {a:1 for a in [1.0]}.items() +#? float() +a +#? int() +b + +# ----------------- +# tuples +# ----------------- +tup = ('',2) + +#? ['count'] +tup.c + +tup2 = tuple() +#? ['index'] +tup2.i +#? ['index'] +().i + +tup3 = 1,"" +#? ['index'] +tup3.index + +tup4 = 1,"" +#? ['index'] +tup4.index + +# ----------------- +# set +# ----------------- +set_t = {1,2} + +#? ['clear', 'copy'] +set_t.c + +set_t2 = set() + +#? ['clear', 'copy'] +set_t2.c + +# ----------------- +# pep 448 unpacking generalizations +# ----------------- +# python >= 3.5 + +d = {'a': 3} +dc = {v: 3 for v in ['a']} + +#? dict() +{**d} + +#? dict() +{**dc} + +#? str() +{**d, "b": "b"}["b"] + +#? str() +{**dc, "b": "b"}["b"] + +# Should resolve to int() but jedi is not smart enough yet +# Here to make sure it doesn't result in crash though +#? +{**d}["a"] + +# Should resolve to int() but jedi is not smart enough yet +# Here to make sure it doesn't result in crash though +#? +{**dc}["a"] + +s = {1, 2, 3} + +#? set() +{*s} + +#? set() +{*s, 4, *s} + +s = {1, 2, 3} +# Should resolve to int() but jedi is not smart enough yet +# Here to make sure it doesn't result in crash though +#? +{*s}.pop() + +#? int() +{*s, 4}.pop() + +# Should resolve to int() but jedi is not smart enough yet +# Here to make sure it doesn't result in crash though +#? +[*s][0] + +#? int() +[*s, 4][0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/completion/usages.py b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/usages.py new file mode 100644 index 0000000..3e05b7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/completion/usages.py @@ -0,0 +1,317 @@ +""" +Renaming tests. This means search for usages. +I always leave a little bit of space to add room for additions, because the +results always contain position informations. +""" +#< 4 (0,4), (3,0), (5,0), (17,0), (12,4), (14,5), (15,0) +def abc(): pass + +#< 0 (-3,4), (0,0), (2,0), (14,0), (9,4), (11,5), (12,0) +abc.d.a.bsaasd.abc.d + +abc +# unicode chars shouldn't be a problem. +x['smörbröd'].abc + +# With the new parser these statements are not recognized as stateents, because +# they are not valid Python. +if 1: + abc = +else: + (abc) = +abc = +#< (-17,4), (-14,0), (-12,0), (0,0), (-2,0), (-3,5), (-5,4) +abc + +abc = 5 + + +Abc = 3 + +#< 6 (0,6), (2,4), (5,8), (17,0) +class Abc(): + #< (-2,6), (0,4), (3,8), (15,0) + Abc + + def Abc(self): + Abc; self.c = 3 + + #< 17 (0,16), (2,8) + def a(self, Abc): + #< 10 (-2,16), (0,8) + Abc + + #< 19 (0,18), (2,8) + def self_test(self): + #< 12 (-2,18), (0,8) + self.b + +Abc.d.Abc + + +#< 4 (0,4), (5,1) +def blubi(): + pass + + +#< (-5,4), (0,1) +@blubi +def a(): pass + + +#< 0 (0,0), (1,0) +set_object_var = object() +set_object_var.var = 1 + + +response = 5 +#< 0 (0,0), (1,0), (2,0), (4,0) +response = HttpResponse(mimetype='application/pdf') +response['Content-Disposition'] = 'attachment; filename=%s.pdf' % id +response.write(pdf) +#< (-4,0), (-3,0), (-2,0), (0,0) +response + + +# ----------------- +# imports +# ----------------- +#< (0,7), (3,0) +import module_not_exists + +#< (-3,7), (0,0) +module_not_exists + + +#< ('rename1', 1,0), (0,24), (3,0), (6,17), ('rename2', 4,17), (11,17), (14,17), ('imports', 72, 16) +from import_tree import rename1 + +#< (0,8), ('rename1',3,0), ('rename2',4,32), ('rename2',6,0), (3,32), (8,32), (5,0) +rename1.abc + +#< (-3,8), ('rename1', 3,0), ('rename2', 4,32), ('rename2', 6,0), (0,32), (5,32), (2,0) +from import_tree.rename1 import abc +#< (-5,8), (-2,32), ('rename1', 3,0), ('rename2', 4,32), ('rename2', 6,0), (0,0), (3,32) +abc + +#< 20 ('rename1', 1,0), ('rename2', 4,17), (-11,24), (-8,0), (-5,17), (0,17), (3,17), ('imports', 72, 16) +from import_tree.rename1 import abc + +#< (0, 32), +from import_tree.rename1 import not_existing + +# Shouldn't raise an error or do anything weird. +from not_existing import * + +# ----------------- +# classes +# ----------------- + +class TestMethods(object): + #< 8 (0,8), (2,13) + def a_method(self): + #< 13 (-2,8), (0,13) + self.a_method() + #< 13 (2,8), (0,13), (3,13) + self.b_method() + + def b_method(self): + self.b_method + + +class TestClassVar(object): + #< 4 (0,4), (5,13), (7,21) + class_v = 1 + def a(self): + class_v = 1 + + #< (-5,4), (0,13), (2,21) + self.class_v + #< (-7,4), (-2,13), (0,21) + TestClassVar.class_v + #< (0,8), (-7, 8) + class_v + +class TestInstanceVar(): + def a(self): + #< 13 (4,13), (0,13) + self._instance_var = 3 + + def b(self): + #< (-4,13), (0,13) + self._instance_var + # A call to self used to trigger an error, because it's also a trailer + # with two children. + self() + + +class NestedClass(): + def __getattr__(self, name): + return self + +# Shouldn't find a definition, because there's other `instance`. +# TODO reenable that test +##< (0, 14), +NestedClass().instance + + +# ----------------- +# inheritance +# ----------------- +class Super(object): + #< 4 (0,4), (23,18), (25,13) + base_class = 1 + #< 4 (0,4), + class_var = 1 + + #< 8 (0,8), + def base_method(self): + #< 13 (0,13), (20,13) + self.base_var = 1 + #< 13 (0,13), + self.instance_var = 1 + + #< 8 (0,8), + def just_a_method(self): pass + + +#< 20 (0,16), (-18,6) +class TestClass(Super): + #< 4 (0,4), + class_var = 1 + + def x_method(self): + + #< (0,18), (2,13), (-23,4) + TestClass.base_class + #< (-2,18), (0,13), (-25,4) + self.base_class + #< (-20,13), (0,13) + self.base_var + #< (0, 18), + TestClass.base_var + + + #< 13 (5,13), (0,13) + self.instance_var = 3 + + #< 9 (0,8), + def just_a_method(self): + #< (-5,13), (0,13) + self.instance_var + + +# ----------------- +# properties +# ----------------- +class TestProperty: + + @property + #< 10 (0,8), (5,13) + def prop(self): + return 1 + + def a(self): + #< 13 (-5,8), (0,13) + self.prop + + @property + #< 13 (0,8), (4,5) + def rw_prop(self): + return self._rw_prop + + #< 8 (-4,8), (0,5) + @rw_prop.setter + #< 8 (0,8), (5,13) + def rw_prop(self, value): + self._rw_prop = value + + def b(self): + #< 13 (-5,8), (0,13) + self.rw_prop + +# ----------------- +# *args, **kwargs +# ----------------- +#< 11 (1,11), (0,8) +def f(**kwargs): + return kwargs + + +# ----------------- +# No result +# ----------------- +if isinstance(j, int): + #< (0, 4), + j + +# ----------------- +# Dynamic Param Search +# ----------------- + +class DynamicParam(): + def foo(self): + return + +def check(instance): + #< 13 (-5,8), (0,13) + instance.foo() + +check(DynamicParam()) + +# ----------------- +# Compiled Objects +# ----------------- + +import _sre + +# TODO reenable this, it's currently not working, because of 2/3 +# inconsistencies in typeshed (_sre exists in typeshed/2, but not in +# typeshed/3). +##< 0 (-3,7), (0,0), ('_sre', None, None) +_sre + +# ----------------- +# on syntax +# ----------------- + +#< 0 +import undefined + +# ----------------- +# comprehensions +# ----------------- + +#< 0 (0,0), (2,12) +x = 32 +#< 12 (-2,0), (0,12) +[x for x in x] + +#< 0 (0,0), (2,1), (2,12) +x = 32 +#< 12 (-2,0), (0,1), (0,12) +[x for b in x] + + +#< 1 (0,1), (0,7) +[x for x in something] +#< 7 (0,1), (0,7) +[x for x in something] + +x = 3 +#< 1 (0,1), (0,10) +{x:1 for x in something} +#< 10 (0,1), (0,10) +{x:1 for x in something} + +def x(): + zzz = 3 + if UNDEFINED: + zzz = 5 + if UNDEFINED2: + #< (3, 8), (4, 4), (0, 12), (-3, 8), (-5, 4) + zzz + else: + #< (0, 8), (1, 4), (-3, 12), (-6, 8), (-8, 4) + zzz + zzz diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/conftest.py b/vim/bundle/jedi-vim/pythonx/jedi/test/conftest.py new file mode 100644 index 0000000..45bb48e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/conftest.py @@ -0,0 +1,171 @@ +import os +import re +import subprocess + +import pytest + +from . import helpers +from . import run +from . import refactor + +import jedi +from jedi.api.environment import InterpreterEnvironment +from jedi.evaluate.analysis import Warning + + +def pytest_addoption(parser): + parser.addoption( + "--integration-case-dir", + default=os.path.join(helpers.test_dir, 'completion'), + help="Directory in which integration test case files locate.") + parser.addoption( + "--refactor-case-dir", + default=os.path.join(helpers.test_dir, 'refactor'), + help="Directory in which refactoring test case files locate.") + parser.addoption( + "--test-files", "-T", default=[], action='append', + help=( + "Specify test files using FILE_NAME[:LINE[,LINE[,...]]]. " + "For example: -T generators.py:10,13,19. " + "Note that you can use -m to specify the test case by id.")) + parser.addoption( + "--thirdparty", action='store_true', + help="Include integration tests that requires third party modules.") + + +def parse_test_files_option(opt): + """ + Parse option passed to --test-files into a key-value pair. + + >>> parse_test_files_option('generators.py:10,13,19') + ('generators.py', [10, 13, 19]) + """ + opt = str(opt) + if ':' in opt: + (f_name, rest) = opt.split(':', 1) + return f_name, list(map(int, rest.split(','))) + else: + return opt, [] + + +def pytest_generate_tests(metafunc): + """ + :type metafunc: _pytest.python.Metafunc + """ + test_files = dict(map(parse_test_files_option, + metafunc.config.option.test_files)) + if 'case' in metafunc.fixturenames: + base_dir = metafunc.config.option.integration_case_dir + thirdparty = metafunc.config.option.thirdparty + cases = list(run.collect_dir_tests(base_dir, test_files)) + if thirdparty: + cases.extend(run.collect_dir_tests( + os.path.join(base_dir, 'thirdparty'), test_files, True)) + ids = ["%s:%s" % (c.module_name, c.line_nr_test) for c in cases] + metafunc.parametrize('case', cases, ids=ids) + + if 'refactor_case' in metafunc.fixturenames: + base_dir = metafunc.config.option.refactor_case_dir + metafunc.parametrize( + 'refactor_case', + refactor.collect_dir_tests(base_dir, test_files)) + + if 'static_analysis_case' in metafunc.fixturenames: + base_dir = os.path.join(os.path.dirname(__file__), 'static_analysis') + cases = list(collect_static_analysis_tests(base_dir, test_files)) + metafunc.parametrize( + 'static_analysis_case', + cases, + ids=[c.name for c in cases] + ) + + +def collect_static_analysis_tests(base_dir, test_files): + for f_name in os.listdir(base_dir): + files_to_execute = [a for a in test_files.items() if a[0] in f_name] + if f_name.endswith(".py") and (not test_files or files_to_execute): + path = os.path.join(base_dir, f_name) + yield StaticAnalysisCase(path) + + +class StaticAnalysisCase(object): + """ + Static Analysis cases lie in the static_analysis folder. + The tests also start with `#!`, like the goto_definition tests. + """ + def __init__(self, path): + self._path = path + self.name = os.path.basename(path) + with open(path) as f: + self._source = f.read() + + self.skip = False + for line in self._source.splitlines(): + self.skip = self.skip or run.skip_python_version(line) + + def collect_comparison(self): + cases = [] + for line_nr, line in enumerate(self._source.splitlines(), 1): + match = re.match(r'(\s*)#! (\d+ )?(.*)$', line) + if match is not None: + column = int(match.group(2) or 0) + len(match.group(1)) + cases.append((line_nr + 1, column, match.group(3))) + return cases + + def run(self, compare_cb, environment): + analysis = jedi.Script( + self._source, + path=self._path, + environment=environment, + )._analysis() + typ_str = lambda inst: 'warning ' if isinstance(inst, Warning) else '' + analysis = [(r.line, r.column, typ_str(r) + r.name) + for r in analysis] + compare_cb(self, analysis, self.collect_comparison()) + + def __repr__(self): + return "<%s: %s>" % (self.__class__.__name__, os.path.basename(self._path)) + + +@pytest.fixture(scope='session') +def venv_path(tmpdir_factory, environment): + if environment.version_info.major < 3: + pytest.skip("python -m venv does not exist in Python 2") + + tmpdir = tmpdir_factory.mktemp('venv_path') + dirname = os.path.join(tmpdir.dirname, 'venv') + + # We cannot use the Python from tox because tox creates virtualenvs and + # they have different site.py files that work differently than the default + # ones. Instead, we find the real Python executable by printing the value + # of sys.base_prefix or sys.real_prefix if we are in a virtualenv. + output = subprocess.check_output([ + environment.executable, "-c", + "import sys; " + "print(sys.real_prefix if hasattr(sys, 'real_prefix') else sys.base_prefix)" + ]) + prefix = output.rstrip().decode('utf8') + if os.name == 'nt': + executable_path = os.path.join(prefix, 'python') + else: + executable_name = os.path.basename(environment.executable) + executable_path = os.path.join(prefix, 'bin', executable_name) + + subprocess.call([executable_path, '-m', 'venv', dirname]) + return dirname + + +@pytest.fixture() +def cwd_tmpdir(monkeypatch, tmpdir): + with helpers.set_cwd(tmpdir.strpath): + yield tmpdir + + +@pytest.fixture +def evaluator(Script): + return Script('')._evaluator + + +@pytest.fixture +def same_process_evaluator(Script): + return Script('', environment=InterpreterEnvironment())._evaluator diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/README.rst b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/README.rst new file mode 100644 index 0000000..ad8c5f7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/README.rst @@ -0,0 +1,5 @@ +Examples +======== + +Here you can find project structures that match other Python projects. This is +then used to check if jedi understands these structures. diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/app b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/app new file mode 100644 index 0000000..7394d2d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/app @@ -0,0 +1,12 @@ +#!/usr/bin/python + +import sys +sys.path[0:0] = [ + '/usr/lib/python3.4/site-packages', + '/tmp/.buildout/eggs/important_package.egg' +] + +import important_package + +if __name__ == '__main__': + sys.exit(important_package.main()) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/binary_file b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/binary_file new file mode 100644 index 0000000..f1ad755 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/binary_file @@ -0,0 +1 @@ +PNG diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/empty_file b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/bin/empty_file new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/buildout.cfg b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/buildout.cfg new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/src/proj_name/module_name.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/buildout_project/src/proj_name/module_name.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/models.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/models.py new file mode 100644 index 0000000..7890e53 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/app/models.py @@ -0,0 +1 @@ +SomeModel = "bar" diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/manage.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/manage.py new file mode 100644 index 0000000..8940f07 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/django/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "foobar.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/api_test1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/api/whatever/api_test1.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/test.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/issue1209/whatever/test.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel1.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel1.py new file mode 100644 index 0000000..79b35a5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel1.py @@ -0,0 +1 @@ +from .rel2 import name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel2.py new file mode 100644 index 0000000..14a0ee4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/namespace_package_relative_import/rel2.py @@ -0,0 +1 @@ +name = 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/no_python-stubs/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/no_python-stubs/__init__.pyi new file mode 100644 index 0000000..18770a1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/no_python-stubs/__init__.pyi @@ -0,0 +1 @@ +foo: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/__init__.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/__init__.pyi new file mode 100644 index 0000000..5e7ee1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/__init__.pyi @@ -0,0 +1,2 @@ +both: int +stub_only: str diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/module.pyi b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/module.pyi new file mode 100644 index 0000000..5333149 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python-stubs/module.pyi @@ -0,0 +1 @@ +in_sub_module: int diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/__init__.py new file mode 100644 index 0000000..d16c270 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/__init__.py @@ -0,0 +1,2 @@ +python_only = 1 +both = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/module.py b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/module.py new file mode 100644 index 0000000..375009f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/examples/stub_packages/with_python/module.py @@ -0,0 +1 @@ +in_sub_module = '' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/test/helpers.py new file mode 100644 index 0000000..f08af1a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/helpers.py @@ -0,0 +1,60 @@ +""" +A helper module for testing, improves compatibility for testing (as +``jedi._compatibility``) as well as introducing helper functions. +""" + +import sys +from contextlib import contextmanager + +if sys.hexversion < 0x02070000: + import unittest2 as unittest +else: + import unittest +TestCase = unittest.TestCase + +import os +import pytest +from os.path import abspath, dirname, join +from functools import partial, wraps + +test_dir = dirname(abspath(__file__)) +root_dir = dirname(test_dir) + +sample_int = 1 # This is used in completion/imports.py + +skip_if_windows = partial(pytest.param, + marks=pytest.mark.skipif("sys.platform=='win32'")) +skip_if_not_windows = partial(pytest.param, + marks=pytest.mark.skipif("sys.platform!='win32'")) + + +def get_example_dir(name): + return join(test_dir, 'examples', name) + + +def cwd_at(path): + """ + Decorator to run function at `path`. + + :type path: str + :arg path: relative path from repository root (e.g., ``'jedi'``). + """ + def decorator(func): + @wraps(func) + def wrapper(Script, **kwargs): + with set_cwd(path): + return func(Script, **kwargs) + return wrapper + return decorator + + +@contextmanager +def set_cwd(path, absolute_path=False): + repo_root = os.path.dirname(test_dir) + + oldcwd = os.getcwd() + os.chdir(os.path.join(repo_root, path)) + try: + yield + finally: + os.chdir(oldcwd) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/refactor.py b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor.py new file mode 100755 index 0000000..9cc10fd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +""" +Refactoring tests work a little bit similar to Black Box tests. But the idea is +here to compare two versions of code. **Note: Refactoring is currently not in +active development (and was never stable), the tests are therefore not really +valuable - just ignore them.** +""" +from __future__ import with_statement +import os +import re + +from functools import reduce +import jedi +from jedi import refactoring + + +class RefactoringCase(object): + + def __init__(self, name, source, line_nr, index, path, + new_name, start_line_test, desired): + self.name = name + self.source = source + self.line_nr = line_nr + self.index = index + self.path = path + self.new_name = new_name + self.start_line_test = start_line_test + self.desired = desired + + def refactor(self): + script = jedi.Script(self.source, self.line_nr, self.index, self.path) + f_name = os.path.basename(self.path) + refactor_func = getattr(refactoring, f_name.replace('.py', '')) + args = (self.new_name,) if self.new_name else () + return refactor_func(script, *args) + + def run(self): + refactor_object = self.refactor() + + # try to get the right excerpt of the newfile + f = refactor_object.new_files()[self.path] + lines = f.splitlines()[self.start_line_test:] + + end = self.start_line_test + len(lines) + pop_start = None + for i, l in enumerate(lines): + if l.startswith('# +++'): + end = i + break + elif '#? ' in l: + pop_start = i + lines.pop(pop_start) + self.result = '\n'.join(lines[:end - 1]).strip() + return self.result + + def check(self): + return self.run() == self.desired + + def __repr__(self): + return '<%s: %s:%s>' % (self.__class__.__name__, + self.name, self.line_nr - 1) + + +def collect_file_tests(source, path, lines_to_execute): + r = r'^# --- ?([^\n]*)\n((?:(?!\n# \+\+\+).)*)' \ + r'\n# \+\+\+((?:(?!\n# ---).)*)' + for match in re.finditer(r, source, re.DOTALL | re.MULTILINE): + name = match.group(1).strip() + first = match.group(2).strip() + second = match.group(3).strip() + start_line_test = source[:match.start()].count('\n') + 1 + + # get the line with the position of the operation + p = re.match(r'((?:(?!#\?).)*)#\? (\d*) ?([^\n]*)', first, re.DOTALL) + if p is None: + print("Please add a test start.") + continue + until = p.group(1) + index = int(p.group(2)) + new_name = p.group(3) + + line_nr = start_line_test + until.count('\n') + 2 + if lines_to_execute and line_nr - 1 not in lines_to_execute: + continue + + yield RefactoringCase(name, source, line_nr, index, path, + new_name, start_line_test, second) + + +def collect_dir_tests(base_dir, test_files): + for f_name in os.listdir(base_dir): + files_to_execute = [a for a in test_files.items() if a[0] in f_name] + lines_to_execute = reduce(lambda x, y: x + y[1], files_to_execute, []) + if f_name.endswith(".py") and (not test_files or files_to_execute): + path = os.path.join(base_dir, f_name) + with open(path) as f: + source = f.read() + for case in collect_file_tests(source, path, lines_to_execute): + yield case diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/extract.py b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/extract.py new file mode 100644 index 0000000..312aced --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/extract.py @@ -0,0 +1,47 @@ +# --- simple +def test(): + #? 35 a + return test(100, (30 + b, c) + 1) + +# +++ +def test(): + a = (30 + b, c) + 1 + return test(100, a) + + +# --- simple #2 +def test(): + #? 25 a + return test(100, (30 + b, c) + 1) + +# +++ +def test(): + a = 30 + b + return test(100, (a, c) + 1) + + +# --- multiline +def test(): + #? 30 x + return test(1, (30 + b, c) + + 1) +# +++ +def test(): + x = ((30 + b, c) + + 1) + return test(1, x +) + + +# --- multiline #2 +def test(): + #? 25 x + return test(1, (30 + b, c) + + 1) +# +++ +def test(): + x = 30 + b + return test(1, (x, c) + + 1) + + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/inline.py b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/inline.py new file mode 100644 index 0000000..c373be2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/inline.py @@ -0,0 +1,18 @@ +# --- simple +def test(): + #? 4 + a = (30 + b, c) + 1 + return test(100, a) +# +++ +def test(): + return test(100, (30 + b, c) + 1) + + +# --- simple +if 1: + #? 4 + a = 1, 2 + return test(100, a) +# +++ +if 1: + return test(100, (1, 2)) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/rename.py b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/rename.py new file mode 100644 index 0000000..e98c589 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/refactor/rename.py @@ -0,0 +1,17 @@ +""" +Test coverage for renaming is mostly being done by testing +`Script.usages`. +""" + +# --- simple +def test1(): + #? 7 blabla + test1() + AssertionError + return test1, test1.not_existing +# +++ +def blabla(): + blabla() + AssertionError + return blabla, blabla.not_existing + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/run.py b/vim/bundle/jedi-vim/pythonx/jedi/test/run.py new file mode 100755 index 0000000..9e87be2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/run.py @@ -0,0 +1,481 @@ +#!/usr/bin/env python +""" +|jedi| is mostly being tested by what I would call "Blackbox Tests". These +tests are just testing the interface and do input/output testing. This makes a +lot of sense for |jedi|. Jedi supports so many different code structures, that +it is just stupid to write 200'000 unittests in the manner of +``regression.py``. Also, it is impossible to do doctests/unittests on most of +the internal data structures. That's why |jedi| uses mostly these kind of +tests. + +There are different kind of tests: + +- completions / goto_definitions ``#?`` +- goto_assignments: ``#!`` +- usages: ``#<`` + +How to run tests? ++++++++++++++++++ + +Jedi uses pytest_ to run unit and integration tests. To run tests, +simply run ``pytest``. You can also use tox_ to run tests for +multiple Python versions. + +.. _pytest: http://pytest.org +.. _tox: http://testrun.org/tox + +Integration test cases are located in ``test/completion`` directory +and each test case is indicated by either the comment ``#?`` (completions / +definitions), ``#!`` (assignments), or ``#<`` (usages). +There is also support for third party libraries. In a normal test run they are +not being executed, you have to provide a ``--thirdparty`` option. + +In addition to standard `-k` and `-m` options in pytest, you can use the +`-T` (`--test-files`) option to specify integration test cases to run. +It takes the format of ``FILE_NAME[:LINE[,LINE[,...]]]`` where +``FILE_NAME`` is a file in ``test/completion`` and ``LINE`` is a line +number of the test comment. Here is some recipes: + +Run tests only in ``basic.py`` and ``imports.py``:: + + pytest test/test_integration.py -T basic.py -T imports.py + +Run test at line 4, 6, and 8 in ``basic.py``:: + + pytest test/test_integration.py -T basic.py:4,6,8 + +See ``pytest --help`` for more information. + +If you want to debug a test, just use the ``--pdb`` option. + +Alternate Test Runner ++++++++++++++++++++++ + +If you don't like the output of ``pytest``, there's an alternate test runner +that you can start by running ``./run.py``. The above example could be run by:: + + ./run.py basic 4 6 8 50-80 + +The advantage of this runner is simplicity and more customized error reports. +Using both runners will help you to have a quicker overview of what's +happening. + + +Auto-Completion ++++++++++++++++ + +Uses comments to specify a test in the next line. The comment says which +results are expected. The comment always begins with `#?`. The last row +symbolizes the cursor. + +For example:: + + #? ['real'] + a = 3; a.rea + +Because it follows ``a.rea`` and a is an ``int``, which has a ``real`` +property. + +Goto Definitions +++++++++++++++++ + +Definition tests use the same symbols like completion tests. This is +possible because the completion tests are defined with a list:: + + #? int() + ab = 3; ab + +Goto Assignments +++++++++++++++++ + +Tests look like this:: + + abc = 1 + #! ['abc=1'] + abc + +Additionally it is possible to specify the column by adding a number, which +describes the position of the test (otherwise it's just the end of line):: + + #! 2 ['abc=1'] + abc + +Usages +++++++ + +Tests look like this:: + + abc = 1 + #< abc@1,0 abc@3,0 + abc +""" +import os +import re +import sys +import operator +from ast import literal_eval +from io import StringIO +from functools import reduce + +import parso + +import jedi +from jedi import debug +from jedi._compatibility import unicode, is_py3 +from jedi.api.classes import Definition +from jedi.api.completion import get_user_scope +from jedi import parser_utils +from jedi.api.environment import get_default_environment, get_system_environment +from jedi.evaluate.gradual.conversion import convert_contexts + + +TEST_COMPLETIONS = 0 +TEST_DEFINITIONS = 1 +TEST_ASSIGNMENTS = 2 +TEST_USAGES = 3 + + +grammar36 = parso.load_grammar(version='3.6') + + +class IntegrationTestCase(object): + def __init__(self, test_type, correct, line_nr, column, start, line, + path=None, skip_version_info=None): + self.test_type = test_type + self.correct = correct + self.line_nr = line_nr + self.column = column + self.start = start + self.line = line + self.path = path + self._skip_version_info = skip_version_info + self._skip = None + + def set_skip(self, reason): + self._skip = reason + + def get_skip_reason(self, environment): + if self._skip is not None: + return self._skip + + if self._skip_version_info is None: + return + + comp_map = { + '==': 'eq', + '<=': 'le', + '>=': 'ge', + '<': 'lt', + '>': 'gt', + } + min_version, operator_ = self._skip_version_info + operation = getattr(operator, comp_map[operator_]) + if not operation(environment.version_info[:2], min_version): + return "Python version %s %s.%s" % ( + operator_, min_version[0], min_version[1] + ) + + @property + def module_name(self): + return os.path.splitext(os.path.basename(self.path))[0] + + @property + def line_nr_test(self): + """The test is always defined on the line before.""" + return self.line_nr - 1 + + def __repr__(self): + return '<%s: %s:%s %r>' % (self.__class__.__name__, self.path, + self.line_nr_test, self.line.rstrip()) + + def script(self, environment): + return jedi.Script( + self.source, self.line_nr, self.column, self.path, + environment=environment + ) + + def run(self, compare_cb, environment=None): + testers = { + TEST_COMPLETIONS: self.run_completion, + TEST_DEFINITIONS: self.run_goto_definitions, + TEST_ASSIGNMENTS: self.run_goto_assignments, + TEST_USAGES: self.run_usages, + } + return testers[self.test_type](compare_cb, environment) + + def run_completion(self, compare_cb, environment): + completions = self.script(environment).completions() + #import cProfile; cProfile.run('script.completions()') + + comp_str = {c.name for c in completions} + return compare_cb(self, comp_str, set(literal_eval(self.correct))) + + def run_goto_definitions(self, compare_cb, environment): + script = self.script(environment) + evaluator = script._evaluator + + def comparison(definition): + suffix = '()' if definition.type == 'instance' else '' + return definition.desc_with_module + suffix + + def definition(correct, correct_start, path): + should_be = set() + for match in re.finditer('(?:[^ ]+)', correct): + string = match.group(0) + parser = grammar36.parse(string, start_symbol='eval_input', error_recovery=False) + parser_utils.move(parser.get_root_node(), self.line_nr) + element = parser.get_root_node() + module_context = script._get_module() + # The context shouldn't matter for the test results. + user_context = get_user_scope(module_context, (self.line_nr, 0)) + if user_context.api_type == 'function': + user_context = user_context.get_function_execution() + element.parent = user_context.tree_node + results = convert_contexts( + evaluator.eval_element(user_context, element), + ) + if not results: + raise Exception('Could not resolve %s on line %s' + % (match.string, self.line_nr - 1)) + + should_be |= set(Definition(evaluator, r.name) for r in results) + debug.dbg('Finished getting types', color='YELLOW') + + # Because the objects have different ids, `repr`, then compare. + should = set(comparison(r) for r in should_be) + return should + + should = definition(self.correct, self.start, script.path) + result = script.goto_definitions() + is_str = set(comparison(r) for r in result) + return compare_cb(self, is_str, should) + + def run_goto_assignments(self, compare_cb, environment): + result = self.script(environment).goto_assignments() + comp_str = str(sorted(str(r.description) for r in result)) + return compare_cb(self, comp_str, self.correct) + + def run_usages(self, compare_cb, environment): + result = self.script(environment).usages() + self.correct = self.correct.strip() + compare = sorted((r.module_name, r.line, r.column) for r in result) + wanted = [] + if not self.correct: + positions = [] + else: + positions = literal_eval(self.correct) + for pos_tup in positions: + if type(pos_tup[0]) == str: + # this means that there is a module specified + wanted.append(pos_tup) + else: + line = pos_tup[0] + if pos_tup[0] is not None: + line += self.line_nr + wanted.append((self.module_name, line, pos_tup[1])) + + return compare_cb(self, compare, sorted(wanted)) + + +def skip_python_version(line): + # check for python minimal version number + match = re.match(r" *# *python *([<>]=?|==) *(\d+(?:\.\d+)?)$", line) + if match: + minimal_python_version = tuple(map(int, match.group(2).split("."))) + return minimal_python_version, match.group(1) + return None + + +def collect_file_tests(path, lines, lines_to_execute): + def makecase(t): + return IntegrationTestCase(t, correct, line_nr, column, + start, line, path=path, + skip_version_info=skip_version_info) + + start = None + correct = None + test_type = None + skip_version_info = None + for line_nr, line in enumerate(lines, 1): + if correct is not None: + r = re.match(r'^(\d+)\s*(.*)$', correct) + if r: + column = int(r.group(1)) + correct = r.group(2) + start += r.regs[2][0] # second group, start index + else: + column = len(line) - 1 # -1 for the \n + if test_type == '!': + yield makecase(TEST_ASSIGNMENTS) + elif test_type == '<': + yield makecase(TEST_USAGES) + elif correct.startswith('['): + yield makecase(TEST_COMPLETIONS) + else: + yield makecase(TEST_DEFINITIONS) + correct = None + else: + skip_version_info = skip_python_version(line) or skip_version_info + try: + r = re.search(r'(?:^|(?<=\s))#([?!<])\s*([^\n]*)', line) + # test_type is ? for completion and ! for goto_assignments + test_type = r.group(1) + correct = r.group(2) + # Quick hack to make everything work (not quite a bloody unicorn hack though). + if correct == '': + correct = ' ' + start = r.start() + except AttributeError: + correct = None + else: + # Skip the test, if this is not specified test. + for l in lines_to_execute: + if isinstance(l, tuple) and l[0] <= line_nr <= l[1] \ + or line_nr == l: + break + else: + if lines_to_execute: + correct = None + + +def collect_dir_tests(base_dir, test_files, check_thirdparty=False): + for f_name in os.listdir(base_dir): + files_to_execute = [a for a in test_files.items() if f_name.startswith(a[0])] + lines_to_execute = reduce(lambda x, y: x + y[1], files_to_execute, []) + if f_name.endswith(".py") and (not test_files or files_to_execute): + skip = None + if check_thirdparty: + lib = f_name.replace('_.py', '') + try: + # there is always an underline at the end. + # It looks like: completion/thirdparty/pylab_.py + __import__(lib) + except ImportError: + skip = 'Thirdparty-Library %s not found.' % lib + + path = os.path.join(base_dir, f_name) + + if is_py3: + with open(path, encoding='utf-8') as f: + source = f.read() + else: + with open(path) as f: + source = unicode(f.read(), 'UTF-8') + + for case in collect_file_tests(path, StringIO(source), + lines_to_execute): + case.source = source + if skip: + case.set_skip(skip) + yield case + + +docoptstr = """ +Using run.py to make debugging easier with integration tests. + +An alternative testing format, which is much more hacky, but very nice to +work with. + +Usage: + run.py [--pdb] [--debug] [--thirdparty] [--env ] [...] + run.py --help + +Options: + -h --help Show this screen. + --pdb Enable pdb debugging on fail. + -d, --debug Enable text output debugging (please install ``colorama``). + --thirdparty Also run thirdparty tests (in ``completion/thirdparty``). + --env A Python version, like 2.7, 3.4, etc. +""" +if __name__ == '__main__': + import docopt + arguments = docopt.docopt(docoptstr) + + import time + t_start = time.time() + + if arguments['--debug']: + jedi.set_debug_function() + + # get test list, that should be executed + test_files = {} + last = None + for arg in arguments['']: + match = re.match(r'(\d+)-(\d+)', arg) + if match: + start, end = match.groups() + test_files[last].append((int(start), int(end))) + elif arg.isdigit(): + if last is None: + continue + test_files[last].append(int(arg)) + else: + test_files[arg] = [] + last = arg + + # completion tests: + dir_ = os.path.dirname(os.path.realpath(__file__)) + completion_test_dir = os.path.join(dir_, '../test/completion') + completion_test_dir = os.path.abspath(completion_test_dir) + tests_fail = 0 + + # execute tests + cases = list(collect_dir_tests(completion_test_dir, test_files)) + if test_files or arguments['--thirdparty']: + completion_test_dir += '/thirdparty' + cases += collect_dir_tests(completion_test_dir, test_files, True) + + def file_change(current, tests, fails): + if current is None: + current = '' + else: + current = os.path.basename(current) + print('{:25} {} tests and {} fails.'.format(current, tests, fails)) + + def report(case, actual, desired): + if actual == desired: + return 0 + else: + print("\ttest fail @%d, actual = %s, desired = %s" + % (case.line_nr - 1, actual, desired)) + return 1 + + if arguments['--env']: + environment = get_system_environment(arguments['--env']) + else: + # Will be 3.6. + environment = get_default_environment() + + import traceback + current = cases[0].path if cases else None + count = fails = 0 + for c in cases: + if c.get_skip_reason(environment): + continue + if current != c.path: + file_change(current, count, fails) + current = c.path + count = fails = 0 + + try: + if c.run(report, environment): + tests_fail += 1 + fails += 1 + except Exception: + traceback.print_exc() + print("\ttest fail @%d" % (c.line_nr - 1)) + tests_fail += 1 + fails += 1 + if arguments['--pdb']: + import pdb + pdb.post_mortem() + + count += 1 + + file_change(current, count, fails) + + print('\nSummary: (%s fails of %s tests) in %.3fs' + % (tests_fail, len(cases), time.time() - t_start)) + + exit_code = 1 if tests_fail else 0 + sys.exit(exit_code) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/speed/precedence.py b/vim/bundle/jedi-vim/pythonx/jedi/test/speed/precedence.py new file mode 100644 index 0000000..afd8824 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/speed/precedence.py @@ -0,0 +1,37 @@ +def marks(code): + if '.' in code: + another(code[:code.index(',') - 1] + '!') + else: + another(code + '.') + + +def another(code2): + call(numbers(code2 + 'haha')) + +marks('start1 ') +marks('start2 ') + + +def alphabet(code4): + if 1: + if 2: + return code4 + 'a' + else: + return code4 + 'b' + else: + if 2: + return code4 + 'c' + else: + return code4 + 'd' + + +def numbers(code5): + if 2: + return alphabet(code5 + '1') + else: + return alphabet(code5 + '2') + + +def call(code3): + code3 = numbers(numbers('end')) + numbers(code3) + code3.partition diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_error.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_error.py new file mode 100644 index 0000000..7ceb939 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_error.py @@ -0,0 +1,113 @@ +class Cls(): + class_attr = '' + def __init__(self, input): + self.instance_attr = 3 + self.input = input + + def f(self): + #! 12 attribute-error + return self.not_existing + + def undefined_object(self, obj): + """ + Uses an arbitrary object and performs an operation on it, shouldn't + be a problem. + """ + obj.arbitrary_lookup + + def defined_lookup(self, obj): + """ + `obj` is defined by a call into this function. + """ + obj.upper + #! 4 attribute-error + obj.arbitrary_lookup + + #! 13 name-error + class_attr = a + +Cls(1).defined_lookup('') + +c = Cls(1) +c.class_attr +Cls.class_attr +#! 4 attribute-error +Cls.class_attr_error +c.instance_attr +#! 2 attribute-error +c.instance_attr_error + + +c.something = None + +#! 12 name-error +something = a +something + +# ----------------- +# Unused array variables should still raise attribute errors. +# ----------------- + +# should not raise anything. +for loop_variable in [1, 2]: + #! 4 name-error + x = undefined + loop_variable + +#! 28 name-error +for loop_variable in [1, 2, undefined]: + pass + +#! 7 attribute-error +[1, ''.undefined_attr] + + +def return_one(something): + return 1 + +#! 14 attribute-error +return_one(''.undefined_attribute) + +#! 12 name-error +[r for r in undefined] + +#! 1 name-error +[undefined for r in [1, 2]] + +[r for r in [1, 2]] + +# some random error that showed up +class NotCalled(): + def match_something(self, param): + seems_to_need_an_assignment = param + return [value.match_something() for value in []] + +# ----------------- +# decorators +# ----------------- + +#! 1 name-error +@undefined_decorator +def func(): + return 1 + +# ----------------- +# operators +# ----------------- + +string = '%s %s' % (1, 2) + +# Shouldn't raise an error, because `string` is really just a string, not an +# array or something. +string.upper + +# ----------------- +# imports +# ----------------- + +# Star imports and the like in modules should not cause attribute errors in +# this module. +import import_tree + +import_tree.a +import_tree.b diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_warnings.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_warnings.py new file mode 100644 index 0000000..0e1e5e9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/attribute_warnings.py @@ -0,0 +1,46 @@ +""" +Jedi issues warnings for possible errors if ``__getattr__``, +``__getattribute__`` or ``setattr`` are used. +""" + +# ----------------- +# __getattr*__ +# ----------------- + + +class Cls(): + def __getattr__(self, name): + return getattr(str, name) + + +Cls().upper + +#! 6 warning attribute-error +Cls().undefined + + +class Inherited(Cls): + pass + +Inherited().upper + +#! 12 warning attribute-error +Inherited().undefined + +# ----------------- +# setattr +# ----------------- + + +class SetattrCls(): + def __init__(self, dct): + # Jedi doesn't even try to understand such code + for k, v in dct.items(): + setattr(self, k, v) + + self.defined = 3 + +c = SetattrCls({'a': 'b'}) +c.defined +#! 2 warning attribute-error +c.undefined diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/branches.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/branches.py new file mode 100644 index 0000000..458d854 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/branches.py @@ -0,0 +1,52 @@ +# ----------------- +# Simple tests +# ----------------- + +import random + +if random.choice([0, 1]): + x = '' +else: + x = 1 +if random.choice([0, 1]): + y = '' +else: + y = 1 + +# A simple test +if x != 1: + x.upper() +else: + #! 2 attribute-error + x.upper() + pass + +# This operation is wrong, because the types could be different. +#! 6 type-error-operation +z = x + y +# However, here we have correct types. +if x == y: + z = x + y +else: + #! 6 type-error-operation + z = x + y + + +# TODO enable this one. +#x = 3 +#if x != 1: +# x.upper() + +# ----------------- +# With a function +# ----------------- + +def addition(a, b): + if type(a) == type(b): + return a + b + else: + #! 9 type-error-operation + return a + b + +addition(1, 1) +addition(1.0, '') diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/builtins.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/builtins.py new file mode 100644 index 0000000..86caca6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/builtins.py @@ -0,0 +1,11 @@ +# ---------- +# isinstance +# ---------- + +isinstance(1, int) +isinstance(1, (int, str)) + +#! 14 type-error-isinstance +isinstance(1, 1) +#! 14 type-error-isinstance +isinstance(1, [int, str]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/class_simple.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/class_simple.py new file mode 100644 index 0000000..3f84fde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/class_simple.py @@ -0,0 +1,13 @@ +class Base(object): + class Nested(): + def foo(): + pass + + +class X(Base.Nested): + pass + + +X().foo() +#! 4 attribute-error +X().bar() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/comprehensions.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/comprehensions.py new file mode 100644 index 0000000..8701b11 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/comprehensions.py @@ -0,0 +1,42 @@ +[a + 1 for a in [1, 2]] + +#! 3 type-error-operation +[a + '' for a in [1, 2]] +#! 3 type-error-operation +(a + '' for a in [1, 2]) + +#! 12 type-error-not-iterable +[a for a in 1] + +tuple(str(a) for a in [1]) + +#! 8 type-error-operation +tuple(a + 3 for a in ['']) + +# ---------- +# Some variables within are not defined +# ---------- + +abcdef = [] +#! 12 name-error +[1 for a in NOT_DEFINFED for b in abcdef if 1] + +#! 25 name-error +[1 for a in [1] for b in NOT_DEFINED if 1] + +#! 12 name-error +[1 for a in NOT_DEFINFED for b in [1] if 1] + +#! 19 name-error +(1 for a in [1] if NOT_DEFINED) + +# ---------- +# unbalanced sides. +# ---------- + +# ok +(1 for a, b in [(1, 2)]) +#! 13 value-error-too-few-values +(1 for a, b, c in [(1, 2)]) +#! 10 value-error-too-many-values +(1 for a, b in [(1, 2, 3)]) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/descriptors.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/descriptors.py new file mode 100644 index 0000000..0fc5d15 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/descriptors.py @@ -0,0 +1,13 @@ +# classmethod +class TarFile(): + @classmethod + def open(cls, name, **kwargs): + return cls.taropen(name, **kwargs) + + @classmethod + def taropen(cls, name, **kwargs): + return name + + +# should just work +TarFile.open('hallo') diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/generators.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/generators.py new file mode 100644 index 0000000..b941800 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/generators.py @@ -0,0 +1,7 @@ +def generator(): + yield 1 + +#! 11 type-error-not-subscriptable +generator()[0] + +list(generator())[0] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/__init__.py new file mode 100644 index 0000000..cb485f1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/__init__.py @@ -0,0 +1,5 @@ +""" +Another import tree, this time not for completion, but static analysis. +""" + +from .a import * diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/a.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/a.py new file mode 100644 index 0000000..b02981c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/a.py @@ -0,0 +1 @@ +from . import b diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/b.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/import_tree/b.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/imports.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/imports.py new file mode 100644 index 0000000..0df9bac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/imports.py @@ -0,0 +1,25 @@ + +#! 7 import-error +import not_existing + +import os + +from os.path import abspath +#! 20 import-error +from os.path import not_existing + +from datetime import date +date.today + +#! 5 attribute-error +date.not_existing_attribute + +#! 14 import-error +from datetime.date import today + +#! 16 import-error +import datetime.date +#! 7 import-error +import not_existing_nested.date + +import os.path diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/iterable.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/iterable.py new file mode 100644 index 0000000..0eae367 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/iterable.py @@ -0,0 +1,21 @@ + +a, b = {'asdf': 3, 'b': 'str'} +a + +x = [1] +x[0], b = {'a': 1, 'b': '2'} + +dct = {3: ''} +for x in dct: + pass + +#! 4 type-error-not-iterable +for x, y in dct: + pass + +# Shouldn't cause issues, because if there are no types (or we don't know what +# the types are, we should just ignore it. +#! 0 value-error-too-few-values +a, b = [] +#! 7 name-error +a, b = NOT_DEFINED diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/keywords.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/keywords.py new file mode 100644 index 0000000..e3fcaa4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/keywords.py @@ -0,0 +1,7 @@ +def raises(): + raise KeyError() + + +def wrong_name(): + #! 6 name-error + raise NotExistingException() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/normal_arguments.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/normal_arguments.py new file mode 100644 index 0000000..2fc8e81 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/normal_arguments.py @@ -0,0 +1,73 @@ +# ----------------- +# normal arguments (no keywords) +# ----------------- + + +def simple(a): + return a + +simple(1) +#! 6 type-error-too-few-arguments +simple() +#! 10 type-error-too-many-arguments +simple(1, 2) + + +#! 10 type-error-too-many-arguments +simple(1, 2, 3) + +# ----------------- +# keyword arguments +# ----------------- + +simple(a=1) +#! 7 type-error-keyword-argument +simple(b=1) +#! 10 type-error-too-many-arguments +simple(1, a=1) + + +def two_params(x, y): + return y + + +two_params(y=2, x=1) +two_params(1, y=2) + +#! 11 type-error-multiple-values +two_params(1, x=2) +#! 17 type-error-too-many-arguments +two_params(1, 2, y=3) + +# ----------------- +# default arguments +# ----------------- + +def default(x, y=1, z=2): + return x + +#! 7 type-error-too-few-arguments +default() +default(1) +default(1, 2) +default(1, 2, 3) +#! 17 type-error-too-many-arguments +default(1, 2, 3, 4) + +default(x=1) + +# ----------------- +# class arguments +# ----------------- + +class Instance(): + def __init__(self, foo): + self.foo = foo + +Instance(1).foo +Instance(foo=1).foo + +#! 12 type-error-too-many-arguments +Instance(1, 2).foo +#! 8 type-error-too-few-arguments +Instance().foo diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/operations.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/operations.py new file mode 100644 index 0000000..bca27c6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/operations.py @@ -0,0 +1,17 @@ +-1 + 1 +1 + 1.0 +#! 2 type-error-operation +1 + '1' +#! 2 type-error-operation +1 - '1' + +-1 - - 1 +# TODO uncomment +#-1 - int() +#int() - float() +float() - 3.0 + +a = 3 +b = '' +#! 2 type-error-operation +a + b diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/python2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/python2.py new file mode 100644 index 0000000..4d896e3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/python2.py @@ -0,0 +1,11 @@ +""" +Some special cases of Python 2. +""" +# python <= 2.7 + +# print is syntax: +print 1 +print(1) + +#! 6 name-error +print NOT_DEFINED diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/star_arguments.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/star_arguments.py new file mode 100644 index 0000000..34be43b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/star_arguments.py @@ -0,0 +1,119 @@ +# ----------------- +# *args +# ----------------- + + +def simple(a): + return a + + +def nested(*args): + return simple(*args) + +nested(1) +#! 6 type-error-too-few-arguments +nested() + + +def nested_no_call_to_function(*args): + return simple(1, *args) + + +def simple2(a, b, c): + return b +def nested(*args): + return simple2(1, *args) +def nested_twice(*args1): + return nested(*args1) + +nested_twice(2, 3) +#! 13 type-error-too-few-arguments +nested_twice(2) +#! 19 type-error-too-many-arguments +nested_twice(2, 3, 4) + + +# A named argument can be located before *args. +def star_args_with_named(*args): + return simple2(c='', *args) + +star_args_with_named(1, 2) +# ----------------- +# **kwargs +# ----------------- + + +def kwargs_test(**kwargs): + return simple2(1, **kwargs) + +kwargs_test(c=3, b=2) +#! 12 type-error-too-few-arguments +kwargs_test(c=3) +#! 12 type-error-too-few-arguments +kwargs_test(b=2) +#! 22 type-error-keyword-argument +kwargs_test(b=2, c=3, d=4) +#! 12 type-error-multiple-values +kwargs_test(b=2, c=3, a=4) + + +def kwargs_nested(**kwargs): + return kwargs_test(b=2, **kwargs) + +kwargs_nested(c=3) +#! 13 type-error-too-few-arguments +kwargs_nested() +#! 19 type-error-keyword-argument +kwargs_nested(c=2, d=4) +#! 14 type-error-multiple-values +kwargs_nested(c=2, a=4) +# TODO reenable +##! 14 type-error-multiple-values +#kwargs_nested(b=3, c=2) + +# ----------------- +# mixed *args/**kwargs +# ----------------- + +def simple_mixed(a, b, c): + return b + +def mixed(*args, **kwargs): + return simple_mixed(1, *args, **kwargs) + +mixed(1, 2) +mixed(1, c=2) +mixed(b=2, c=3) +mixed(c=4, b='') + +# need separate functions, otherwise these might swallow the errors +def mixed2(*args, **kwargs): + return simple_mixed(1, *args, **kwargs) + + +#! 7 type-error-too-few-arguments +mixed2(c=2) +#! 7 type-error-too-few-arguments +mixed2(3) +#! 13 type-error-too-many-arguments +mixed2(3, 4, 5) +# TODO reenable +##! 13 type-error-too-many-arguments +#mixed2(3, 4, c=5) +#! 7 type-error-multiple-values +mixed2(3, b=5) + +# ----------------- +# plain wrong arguments +# ----------------- + +#! 12 type-error-star-star +simple(1, **[]) +#! 12 type-error-star-star +simple(1, **1) +class A(): pass +#! 12 type-error-star-star +simple(1, **A()) + +#! 11 type-error-star +simple(1, *1) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/try_except.py b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/try_except.py new file mode 100644 index 0000000..540ba72 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/static_analysis/try_except.py @@ -0,0 +1,107 @@ +try: + #! 4 attribute-error + str.not_existing +except TypeError: + pass + +try: + str.not_existing +except AttributeError: + #! 4 attribute-error + str.not_existing + pass + +try: + import not_existing_import +except ImportError: + pass +try: + #! 7 import-error + import not_existing_import +except AttributeError: + pass + +# ----------------- +# multi except +# ----------------- +try: + str.not_existing +except (TypeError, AttributeError): pass + +try: + str.not_existing +except ImportError: + pass +except (NotImplementedError, AttributeError): pass + +try: + #! 4 attribute-error + str.not_existing +except (TypeError, NotImplementedError): pass + +# ----------------- +# detailed except +# ----------------- +try: + str.not_existing +except ((AttributeError)): pass +try: + #! 4 attribute-error + str.not_existing +except [AttributeError]: pass + +# Should be able to detect errors in except statement as well. +try: + pass +#! 7 name-error +except Undefined: + pass + +# ----------------- +# inheritance +# ----------------- + +try: + undefined +except Exception: + pass + +# should catch everything +try: + undefined +except: + pass + +# ----------------- +# kind of similar: hasattr +# ----------------- + +if hasattr(str, 'undefined'): + str.undefined + str.upper + #! 4 attribute-error + str.undefined2 + #! 4 attribute-error + int.undefined +else: + str.upper + #! 4 attribute-error + str.undefined + +# ----------------- +# arguments +# ----------------- + +def i_see(r): + return r + +def lala(): + # This weird structure checks if the error is actually resolved in the + # right place. + a = TypeError + try: + i_see() + except a: + pass + #! 5 type-error-too-few-arguments + i_see() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/__init__.py new file mode 100644 index 0000000..d2ae403 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/__init__.py @@ -0,0 +1,4 @@ +""" +An import tree, for testing usages. +""" + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/a.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/a.py new file mode 100644 index 0000000..acc8183 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/a.py @@ -0,0 +1,4 @@ +from . import b + +def foo(): + b.bar() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/b.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/b.py new file mode 100644 index 0000000..4371a5a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/import_tree_for_usages/b.py @@ -0,0 +1,2 @@ +def bar(): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/__init__.py new file mode 100644 index 0000000..3a03a82 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/__init__.py @@ -0,0 +1,5 @@ +from simple_import import module + + +def in_function(): + from simple_import import module2 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module2.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/simple_import/module2.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_analysis.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_analysis.py new file mode 100644 index 0000000..f0b6a44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_analysis.py @@ -0,0 +1,11 @@ +""" +Test of keywords and ``jedi.keywords`` +""" + + +def test_issue436(Script): + code = "bar = 0\nbar += 'foo' + 4" + errors = set(repr(e) for e in Script(code)._analysis()) + assert len(errors) == 2 + assert '' in errors + assert '' in errors diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api.py new file mode 100644 index 0000000..af7b9e7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api.py @@ -0,0 +1,302 @@ +""" +Test all things related to the ``jedi.api`` module. +""" + +import os +from textwrap import dedent + +from pytest import raises +from parso import cache + +from jedi import preload_module +from jedi.evaluate.gradual import typeshed + + +def test_preload_modules(): + def check_loaded(*modules): + for grammar_cache in cache.parser_cache.values(): + if None in grammar_cache: + break + # Filter the typeshed parser cache. + typeshed_cache_count = sum( + 1 for path in grammar_cache + if path is not None and path.startswith(typeshed.TYPESHED_PATH) + ) + # +1 for None module (currently used) + assert len(grammar_cache) - typeshed_cache_count == len(modules) + 1 + for i in modules: + assert [i in k for k in grammar_cache.keys() if k is not None] + + old_cache = cache.parser_cache.copy() + cache.parser_cache.clear() + + try: + preload_module('sys') + check_loaded() # compiled (c_builtin) modules shouldn't be in the cache. + preload_module('types', 'token') + check_loaded('types', 'token') + finally: + cache.parser_cache.update(old_cache) + + +def test_empty_script(Script): + assert Script('') + + +def test_line_number_errors(Script): + """ + Script should raise a ValueError if line/column numbers are not in a + valid range. + """ + s = 'hello' + # lines + with raises(ValueError): + Script(s, 2, 0) + with raises(ValueError): + Script(s, 0, 0) + + # columns + with raises(ValueError): + Script(s, 1, len(s) + 1) + with raises(ValueError): + Script(s, 1, -1) + + # ok + Script(s, 1, 0) + Script(s, 1, len(s)) + + +def _check_number(Script, source, result='float'): + completions = Script(source).completions() + assert completions[0].parent().name == result + + +def test_completion_on_number_literals(Script): + # No completions on an int literal (is a float). + assert [c.name for c in Script('1. ').completions()] \ + == ['and', 'if', 'in', 'is', 'not', 'or'] + + # Multiple points after an int literal basically mean that there's a float + # and a call after that. + _check_number(Script, '1..') + _check_number(Script, '1.0.') + + # power notation + _check_number(Script, '1.e14.') + _check_number(Script, '1.e-3.') + _check_number(Script, '9e3.') + assert Script('1.e3..').completions() == [] + assert Script('1.e-13..').completions() == [] + + +def test_completion_on_hex_literals(Script): + assert Script('0x1..').completions() == [] + _check_number(Script, '0x1.', 'int') # hexdecimal + # Completing binary literals doesn't work if they are not actually binary + # (invalid statements). + assert Script('0b2.b').completions() == [] + _check_number(Script, '0b1.', 'int') # binary + + _check_number(Script, '0x2e.', 'int') + _check_number(Script, '0xE7.', 'int') + _check_number(Script, '0xEa.', 'int') + # theoretically, but people can just check for syntax errors: + #assert Script('0x.').completions() == [] + + +def test_completion_on_complex_literals(Script): + assert Script('1j..').completions() == [] + _check_number(Script, '1j.', 'complex') + _check_number(Script, '44.j.', 'complex') + _check_number(Script, '4.0j.', 'complex') + # No dot no completion - I thought, but 4j is actually a literal after + # which a keyword like or is allowed. Good times, haha! + # However this has been disabled again, because it apparently annoyed + # users. So no completion after j without a space :) + assert not Script('4j').completions() + assert ({c.name for c in Script('4j ').completions()} == + {'if', 'and', 'in', 'is', 'not', 'or'}) + + +def test_goto_assignments_on_non_name(Script, environment): + assert Script('for').goto_assignments() == [] + + assert Script('assert').goto_assignments() == [] + assert Script('True').goto_assignments() == [] + + +def test_goto_definitions_on_non_name(Script): + assert Script('import x', column=0).goto_definitions() == [] + + +def test_goto_definitions_on_generator(Script): + def_, = Script('def x(): yield 1\ny=x()\ny').goto_definitions() + assert def_.name == 'Generator' + + +def test_goto_definition_not_multiple(Script): + """ + There should be only one Definition result if it leads back to the same + origin (e.g. instance method) + """ + + s = dedent('''\ + import random + class A(): + def __init__(self, a): + self.a = 3 + + def foo(self): + pass + + if random.randint(0, 1): + a = A(2) + else: + a = A(1) + a''') + assert len(Script(s).goto_definitions()) == 1 + + +def test_usage_description(Script): + descs = [u.description for u in Script("foo = ''; foo").usages()] + assert set(descs) == {"foo = ''", 'foo'} + + +def test_get_line_code(Script): + def get_line_code(source, line=None, **kwargs): + return Script(source, line=line).completions()[0].get_line_code(**kwargs) + + # On builtin + assert get_line_code('') == '' + + # On custom code + first_line = 'def foo():\n' + line = ' foo' + code = first_line + line + assert get_line_code(code) == first_line + + # With before/after + code = code + '\nother_line' + assert get_line_code(code, line=2) == first_line + assert get_line_code(code, line=2, after=1) == first_line + line + '\n' + assert get_line_code(code, line=2, after=2, before=1) == code + # Should just be the whole thing, since there are no more lines on both + # sides. + assert get_line_code(code, line=2, after=3, before=3) == code + + +def test_goto_assignments_follow_imports(Script): + code = dedent(""" + import inspect + inspect.isfunction""") + definition, = Script(code, column=0).goto_assignments(follow_imports=True) + assert 'inspect.py' in definition.module_path + assert (definition.line, definition.column) == (1, 0) + + definition, = Script(code).goto_assignments(follow_imports=True) + assert 'inspect.py' in definition.module_path + assert (definition.line, definition.column) > (1, 0) + + code = '''def param(p): pass\nparam(1)''' + start_pos = 1, len('def param(') + + script = Script(code, *start_pos) + definition, = script.goto_assignments(follow_imports=True) + assert (definition.line, definition.column) == start_pos + assert definition.name == 'p' + result, = definition.goto_assignments() + assert result.name == 'p' + result, = definition.infer() + assert result.name == 'int' + result, = result.infer() + assert result.name == 'int' + + definition, = script.goto_assignments() + assert (definition.line, definition.column) == start_pos + + d, = Script('a = 1\na').goto_assignments(follow_imports=True) + assert d.name == 'a' + + +def test_goto_module(Script): + def check(line, expected): + script = Script(path=path, line=line) + module, = script.goto_assignments() + assert module.module_path == expected + + base_path = os.path.join(os.path.dirname(__file__), 'simple_import') + path = os.path.join(base_path, '__init__.py') + + check(1, os.path.join(base_path, 'module.py')) + check(5, os.path.join(base_path, 'module2.py')) + + +def test_goto_definition_cursor(Script): + + s = ("class A():\n" + " def _something(self):\n" + " return\n" + " def different_line(self,\n" + " b):\n" + " return\n" + "A._something\n" + "A.different_line" + ) + + in_name = 2, 9 + under_score = 2, 8 + cls = 2, 7 + should1 = 7, 10 + diff_line = 4, 10 + should2 = 8, 10 + + def get_def(pos): + return [d.description for d in Script(s, *pos).goto_definitions()] + + in_name = get_def(in_name) + under_score = get_def(under_score) + should1 = get_def(should1) + should2 = get_def(should2) + + diff_line = get_def(diff_line) + + assert should1 == in_name + assert should1 == under_score + + assert should2 == diff_line + + assert get_def(cls) == [] + + +def test_no_statement_parent(Script): + source = dedent(""" + def f(): + pass + + class C: + pass + + variable = f if random.choice([0, 1]) else C""") + defs = Script(source, column=3).goto_definitions() + defs = sorted(defs, key=lambda d: d.line) + assert [d.description for d in defs] == ['def f', 'class C'] + + +def test_backslash_continuation_and_bracket(Script): + code = dedent(r""" + x = 0 + a = \ + [1, 2, 3, (x)]""") + + lines = code.splitlines() + column = lines[-1].index('(') + def_, = Script(code, line=len(lines), column=column).goto_definitions() + assert def_.name == 'int' + + +def test_goto_follow_builtin_imports(Script): + s = Script('import sys; sys') + d, = s.goto_assignments(follow_imports=True) + assert d.in_builtin_module() is True + d, = s.goto_assignments(follow_imports=True, follow_builtin_imports=True) + assert d.in_builtin_module() is True diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api_classes_follow_definition.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api_classes_follow_definition.py new file mode 100644 index 0000000..6e25119 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_api_classes_follow_definition.py @@ -0,0 +1,64 @@ +from itertools import chain + +import jedi +from ..helpers import cwd_at + + +def test_import_empty(Script): + """ github #340, return the full word. """ + completion = Script("import ").completions()[0] + definition = completion.infer()[0] + assert definition + + +def check_follow_definition_types(Script, source): + # nested import + completions = Script(source, path='some_path.py').completions() + defs = chain.from_iterable(c.infer() for c in completions) + return [d.type for d in defs] + + +def test_follow_import_incomplete(Script, environment): + """ + Completion on incomplete imports should always take the full completion + to do any evaluation. + """ + datetime = check_follow_definition_types(Script, "import itertool") + assert datetime == ['module'] + + # empty `from * import` parts + itert = jedi.Script("from itertools import ").completions() + definitions = [d for d in itert if d.name == 'chain'] + assert len(definitions) == 1 + assert [d.type for d in definitions[0].infer()] == ['class'] + + # incomplete `from * import` part + datetime = check_follow_definition_types(Script, "from datetime import datetim") + if environment.version_info.major == 2: + assert datetime == ['class'] + else: + assert set(datetime) == {'class', 'instance'} # py3: builtin and pure py version + # os.path check + ospath = check_follow_definition_types(Script, "from os.path import abspat") + assert set(ospath) == {'function'} + + # alias + alias = check_follow_definition_types(Script, "import io as abcd; abcd") + assert alias == ['module'] + + +@cwd_at('test/completion/import_tree') +def test_follow_definition_nested_import(Script): + types = check_follow_definition_types(Script, "import pkg.mod1; pkg") + assert types == ['module'] + + types = check_follow_definition_types(Script, "import pkg.mod1; pkg.mod1") + assert types == ['module'] + + types = check_follow_definition_types(Script, "import pkg.mod1; pkg.mod1.a") + assert types == ['instance'] + + +def test_follow_definition_land_on_import(Script): + types = check_follow_definition_types(Script, "import datetime; datetim") + assert types == ['module'] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_call_signatures.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_call_signatures.py new file mode 100644 index 0000000..4586d29 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_call_signatures.py @@ -0,0 +1,627 @@ +import sys +from textwrap import dedent +import inspect + +import pytest + +from ..helpers import TestCase +from jedi import cache +from jedi.parser_utils import get_call_signature +from jedi import Interpreter + + +def assert_signature(Script, source, expected_name, expected_index=0, line=None, column=None): + signatures = Script(source, line, column).call_signatures() + + assert len(signatures) <= 1 + + if not signatures: + assert expected_name is None, \ + 'There are no signatures, but `%s` expected.' % expected_name + else: + assert signatures[0].name == expected_name + assert signatures[0].index == expected_index + return signatures[0] + + +def test_valid_call(Script): + assert_signature(Script, 'bool()', 'bool', column=5) + + +class TestCallSignatures(TestCase): + @pytest.fixture(autouse=True) + def init(self, Script): + self.Script = Script + + def _run_simple(self, source, name, index=0, column=None, line=1): + assert_signature(self.Script, source, name, index, line, column) + + def test_simple(self): + run = self._run_simple + + # simple + s1 = "sorted(a, bool(" + run(s1, 'sorted', 0, 7) + run(s1, 'sorted', 1, 9) + run(s1, 'sorted', 1, 10) + run(s1, 'sorted', None, 11) + run(s1, 'bool', 0, 15) + + s2 = "abs(), " + run(s2, 'abs', 0, 4) + run(s2, None, column=5) + run(s2, None) + + s3 = "abs()." + run(s3, None, column=5) + run(s3, None) + + def test_more_complicated(self): + run = self._run_simple + + s4 = 'abs(bool(), , set,' + run(s4, None, column=3) + run(s4, 'abs', 0, 4) + run(s4, 'bool', 0, 9) + run(s4, 'abs', 0, 10) + run(s4, 'abs', None, 11) + + s5 = "sorted(1,\nif 2:\n def a():" + run(s5, 'sorted', 0, 7) + run(s5, 'sorted', 1, 9) + + s6 = "bool().__eq__(" + run(s6, '__eq__', 0) + run(s6, 'bool', 0, 5) + + s7 = "str().upper().center(" + s8 = "bool(int[abs(" + run(s7, 'center', 0) + run(s8, 'abs', 0) + run(s8, 'bool', 0, 10) + + run("import time; abc = time; abc.sleep(", 'sleep', 0) + + def test_issue_57(self): + # jedi #57 + s = "def func(alpha, beta): pass\n" \ + "func(alpha='101'," + self._run_simple(s, 'func', 0, column=13, line=2) + + def test_for(self): + # jedi-vim #11 + self._run_simple("for sorted(", 'sorted', 0) + self._run_simple("for s in sorted(", 'sorted', 0) + + +def test_with(Script): + # jedi-vim #9 + sigs = Script("with open(").call_signatures() + assert sigs + assert all(sig.name == 'open' for sig in sigs) + + +def test_call_signatures_empty_parentheses_pre_space(Script): + s = dedent("""\ + def f(a, b): + pass + f( )""") + assert_signature(Script, s, 'f', 0, line=3, column=3) + + +def test_multiple_signatures(Script): + s = dedent("""\ + if x: + def f(a, b): + pass + else: + def f(a, b): + pass + f(""") + assert len(Script(s).call_signatures()) == 2 + + +def test_call_signatures_whitespace(Script): + s = dedent("""\ + abs( + def x(): + pass + """) + assert_signature(Script, s, 'abs', 0, line=1, column=5) + + +def test_decorator_in_class(Script): + """ + There's still an implicit param, with a decorator. + Github issue #319. + """ + s = dedent("""\ + def static(func): + def wrapped(obj, *args): + return f(type(obj), *args) + return wrapped + + class C(object): + @static + def test(cls): + return 10 + + C().test(""") + + signatures = Script(s).call_signatures() + assert len(signatures) == 1 + x = [p.description for p in signatures[0].params] + assert x == ['param *args'] + + +def test_additional_brackets(Script): + assert_signature(Script, 'abs((', 'abs', 0) + + +def test_unterminated_strings(Script): + assert_signature(Script, 'abs(";', 'abs', 0) + + +def test_whitespace_before_bracket(Script): + assert_signature(Script, 'abs (', 'abs', 0) + assert_signature(Script, 'abs (";', 'abs', 0) + assert_signature(Script, 'abs\n(', None) + + +def test_brackets_in_string_literals(Script): + assert_signature(Script, 'abs (" (', 'abs', 0) + assert_signature(Script, 'abs (" )', 'abs', 0) + + +def test_function_definitions_should_break(Script): + """ + Function definitions (and other tokens that cannot exist within call + signatures) should break and not be able to return a call signature. + """ + assert_signature(Script, 'abs(\ndef x', 'abs', 0) + assert not Script('abs(\ndef x(): pass').call_signatures() + + +def test_flow_call(Script): + assert not Script('if (1').call_signatures() + + +def test_chained_calls(Script): + source = dedent(''' + class B(): + def test2(self, arg): + pass + + class A(): + def test1(self): + return B() + + A().test1().test2(''') + + assert_signature(Script, source, 'test2', 0) + + +def test_return(Script): + source = dedent(''' + def foo(): + return '.'.join()''') + + assert_signature(Script, source, 'join', 0, column=len(" return '.'.join(")) + + +def test_call_signature_on_module(Script): + """github issue #240""" + s = 'import datetime; datetime(' + # just don't throw an exception (if numpy doesn't exist, just ignore it) + assert Script(s).call_signatures() == [] + + +def test_complex(Script, environment): + s = """ + def abc(a,b): + pass + + def a(self): + abc( + + if 1: + pass + """ + assert_signature(Script, s, 'abc', 0, line=6, column=20) + s = """ + import re + def huhu(it): + re.compile( + return it * 2 + """ + sig1, sig2 = sorted(Script(s, line=4, column=27).call_signatures(), key=lambda s: s.line) + assert sig1.name == sig2.name == 'compile' + assert sig1.index == sig2.index == 0 + func1, = sig1._name.infer() + func2, = sig2._name.infer() + + if environment.version_info.major == 3: + # Do these checks just for Python 3, I'm too lazy to deal with this + # legacy stuff. ~ dave. + assert get_call_signature(func1.tree_node) \ + == 'compile(pattern: AnyStr, flags: _FlagsType = ...) -> Pattern[AnyStr]' + assert get_call_signature(func2.tree_node) \ + == 'compile(pattern: Pattern[AnyStr], flags: _FlagsType = ...) ->\nPattern[AnyStr]' + + # jedi-vim #70 + s = """def foo(""" + assert Script(s).call_signatures() == [] + + # jedi-vim #116 + s = """import itertools; test = getattr(itertools, 'chain'); test(""" + assert_signature(Script, s, 'chain', 0) + + +def _params(Script, source, line=None, column=None): + signatures = Script(source, line, column).call_signatures() + assert len(signatures) == 1 + return signatures[0].params + + +def test_int_params(Script): + sig1, sig2 = Script('int(').call_signatures() + # int is defined as: `int(x[, base])` + assert len(sig1.params) == 2 + assert sig1.params[0].name == 'x' + assert sig1.params[1].name == 'base' + assert len(sig2.params) == 1 + assert sig2.params[0].name == 'x' + + +def test_pow_params(Script): + # See Github #1357. + for sig in Script('pow(').call_signatures(): + param_names = [p.name for p in sig.params] + assert param_names in (['x', 'y'], ['x', 'y', 'z']) + + +def test_param_name(Script): + sigs = Script('open(something,').call_signatures() + for sig in sigs: + # All of the signatures (in Python the function is overloaded), + # contain the same param names. + assert sig.params[0].name in ['file', 'name'] + assert sig.params[1].name == 'mode' + assert sig.params[2].name == 'buffering' + + +def test_builtins(Script): + """ + The self keyword should be visible even for builtins, if not + instantiated. + """ + p = _params(Script, 'str.endswith(') + assert p[0].name == 'self' + assert p[1].name == 'suffix' + p = _params(Script, 'str().endswith(') + assert p[0].name == 'suffix' + + +def test_signature_is_definition(Script): + """ + Through inheritance, a call signature is a sub class of Definition. + Check if the attributes match. + """ + s = """class Spam(): pass\nSpam""" + signature = Script(s + '(').call_signatures()[0] + definition = Script(s + '(', column=0).goto_definitions()[0] + signature.line == 1 + signature.column == 6 + + # Now compare all the attributes that a CallSignature must also have. + for attr_name in dir(definition): + dont_scan = ['defined_names', 'parent', 'goto_assignments', 'infer', + 'params', 'get_signatures', 'execute'] + if attr_name.startswith('_') or attr_name in dont_scan: + continue + + attribute = getattr(definition, attr_name) + signature_attribute = getattr(signature, attr_name) + if inspect.ismethod(attribute): + assert attribute() == signature_attribute() + else: + assert attribute == signature_attribute + + +def test_no_signature(Script): + # str doesn't have a __call__ method + assert Script('str()(').call_signatures() == [] + + s = dedent("""\ + class X(): + pass + X()(""") + assert Script(s).call_signatures() == [] + assert len(Script(s, column=2).call_signatures()) == 1 + assert Script('').call_signatures() == [] + + +def test_dict_literal_in_incomplete_call(Script): + source = """\ + import json + + def foo(): + json.loads( + + json.load.return_value = {'foo': [], + 'bar': True} + + c = Foo() + """ + + script = Script(dedent(source), line=4, column=15) + assert script.call_signatures() + + +def test_completion_interference(Script): + """Seems to cause problems, see also #396.""" + cache.parser_cache.pop(None, None) + assert Script('open(').call_signatures() + + # complete something usual, before doing the same call_signatures again. + assert Script('from datetime import ').completions() + + assert Script('open(').call_signatures() + + +def test_keyword_argument_index(Script, environment): + def get(source, column=None): + return Script(source, column=column).call_signatures()[0] + + # The signature of sorted changed from 2 to 3. + py2_offset = int(environment.version_info.major == 2) + assert get('sorted([], key=a').index == 1 + py2_offset + assert get('sorted([], key=').index == 1 + py2_offset + assert get('sorted([], no_key=a').index is None + + kw_func = 'def foo(a, b): pass\nfoo(b=3, a=4)' + assert get(kw_func, column=len('foo(b')).index == 0 + assert get(kw_func, column=len('foo(b=')).index == 1 + assert get(kw_func, column=len('foo(b=3, a=')).index == 0 + + kw_func_simple = 'def foo(a, b): pass\nfoo(b=4)' + assert get(kw_func_simple, column=len('foo(b')).index == 0 + assert get(kw_func_simple, column=len('foo(b=')).index == 1 + + args_func = 'def foo(*kwargs): pass\n' + assert get(args_func + 'foo(a').index == 0 + assert get(args_func + 'foo(a, b').index == 0 + + kwargs_func = 'def foo(**kwargs): pass\n' + assert get(kwargs_func + 'foo(a=2').index == 0 + assert get(kwargs_func + 'foo(a=2, b=2').index == 0 + + both = 'def foo(*args, **kwargs): pass\n' + assert get(both + 'foo(a=2').index == 1 + assert get(both + 'foo(a=2, b=2').index == 1 + assert get(both + 'foo(a=2, b=2)', column=len('foo(b=2, a=2')).index == 1 + assert get(both + 'foo(a, b, c').index == 0 + + +code1 = 'def f(u, /, v=3, *, abc, abd, xyz): pass' +code2 = 'def g(u, /, v=3, *, abc, abd, xyz, **kwargs): pass' +code3 = 'def h(u, /, v, *args, x=1, y): pass' +code4 = 'def i(u, /, v, *args, x=1, y, **kwargs): pass' + + +_calls = [ + # No *args, **kwargs + (code1, 'f(', 0), + (code1, 'f(a', 0), + (code1, 'f(a,', 1), + (code1, 'f(a,b', 1), + (code1, 'f(a,b,', 2), + (code1, 'f(a,b,c', None), + (code1, 'f(a,b,a', 2), + (code1, 'f(a,b,a=', None), + (code1, 'f(a,b,abc', 2), + (code1, 'f(a,b,abc=(', 2), + (code1, 'f(a,b,abc=(f,1,2,3', 2), + (code1, 'f(a,b,abd', 3), + (code1, 'f(a,b,x', 4), + (code1, 'f(a,b,xy', 4), + (code1, 'f(a,b,xyz=', 4), + (code1, 'f(a,b,xy=', None), + (code1, 'f(u=', (0, None)), + (code1, 'f(v=', 1), + + # **kwargs + (code2, 'g(a,b,a', 2), + (code2, 'g(a,b,abc', 2), + (code2, 'g(a,b,abd', 3), + (code2, 'g(a,b,arr', 5), + (code2, 'g(a,b,xy', 4), + (code2, 'g(a,b,xyz=', 4), + (code2, 'g(a,b,xy=', 5), + (code2, 'g(a,b,abc=1,abd=4,', 4), + (code2, 'g(a,b,abc=1,xyz=3,abd=4,', 5), + (code2, 'g(a,b,abc=1,abd=4,lala', 5), + (code2, 'g(a,b,abc=1,abd=4,lala=', 5), + (code2, 'g(a,b,abc=1,abd=4,abd=', 5), + (code2, 'g(a,b,kw', 5), + (code2, 'g(a,b,kwargs=', 5), + (code2, 'g(u=', (0, 5)), + (code2, 'g(v=', 1), + + # *args + (code3, 'h(a,b,c', 2), + (code3, 'h(a,b,c,', 2), + (code3, 'h(a,b,c,d', 2), + (code3, 'h(a,b,c,d[', 2), + (code3, 'h(a,b,c,(3,', 2), + (code3, 'h(a,b,c,(3,)', 2), + (code3, 'h(a,b,args=', None), + (code3, 'h(u,v=', 1), + (code3, 'h(u=', (0, None)), + (code3, 'h(u,*xxx', 1), + (code3, 'h(u,*xxx,*yyy', 1), + (code3, 'h(u,*[]', 1), + (code3, 'h(u,*', 1), + (code3, 'h(u,*, *', 1), + (code3, 'h(u,1,**', 3), + (code3, 'h(u,**y', 1), + (code3, 'h(u,x=2,**', 1), + (code3, 'h(u,x=2,**y', 1), + (code3, 'h(u,v=2,**y', 3), + (code3, 'h(u,x=2,**vv', 1), + + # *args, **kwargs + (code4, 'i(a,b,c,d', 2), + (code4, 'i(a,b,c,d,e', 2), + (code4, 'i(a,b,c,d,e=', 5), + (code4, 'i(a,b,c,d,e=3', 5), + (code4, 'i(a,b,c,d=,x=', 3), + (code4, 'i(a,b,c,d=5,x=4', 3), + (code4, 'i(a,b,c,d=5,x=4,y', 4), + (code4, 'i(a,b,c,d=5,x=4,y=3,', 5), + (code4, 'i(a,b,c,d=5,y=4,x=3,', 5), + (code4, 'i(a,b,c,d=4,', 3), + (code4, 'i(a,b,c,x=1,d=,', 4), + + # Error nodes + (code4, 'i(1, [a,b', 1), + (code4, 'i(1, [a,b=,', 2), + (code4, 'i(1, [a?b,', 2), + (code4, 'i(1, [a?b,*', 2), + (code4, 'i(?b,*r,c', 1), + (code4, 'i(?*', 0), + (code4, 'i(?**', (0, 1)), +] + + +@pytest.mark.parametrize('ending', ['', ')']) +@pytest.mark.parametrize('code, call, expected_index', _calls) +def test_signature_index(skip_python2, Script, environment, code, call, expected_index, ending): + if isinstance(expected_index, tuple): + expected_index = expected_index[environment.version_info > (3, 8)] + if environment.version_info < (3, 8): + code = code.replace('/,', '') + + sig, = Script(code + '\n' + call + ending, column=len(call)).call_signatures() + index = sig.index + assert expected_index == index + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Python 2 doesn't support __signature__") +@pytest.mark.parametrize('code', ['foo', 'instance.foo']) +def test_arg_defaults(Script, environment, code): + def foo(arg="bla", arg1=1): + pass + + class Klass: + def foo(self, arg="bla", arg1=1): + pass + + instance = Klass() + + src = dedent(""" + def foo2(arg="bla", arg1=1): + pass + + class Klass2: + def foo2(self, arg="bla", arg1=1): + pass + + instance = Klass2() + """) + + executed_locals = dict() + exec(src, None, executed_locals) + locals_ = locals() + + def iter_scripts(): + yield Interpreter(code + '(', namespaces=[locals_]) + yield Script(src + code + "2(") + yield Interpreter(code + '2(', namespaces=[executed_locals]) + + for script in iter_scripts(): + signatures = script.call_signatures() + assert signatures[0].params[0].description in ('param arg="bla"', "param arg='bla'") + assert signatures[0].params[1].description == 'param arg1=1' + + +def test_bracket_start(Script): + def bracket_start(src): + signatures = Script(src).call_signatures() + assert len(signatures) == 1 + return signatures[0].bracket_start + + assert bracket_start('abs(') == (1, 3) + + +def test_different_caller(Script): + """ + It's possible to not use names, but another function result or an array + index and then get the call signature of it. + """ + + assert_signature(Script, '[abs][0](', 'abs', 0) + assert_signature(Script, '[abs][0]()', 'abs', 0, column=len('[abs][0](')) + + assert_signature(Script, '(abs)(', 'abs', 0) + assert_signature(Script, '(abs)()', 'abs', 0, column=len('(abs)(')) + + +def test_in_function(Script): + code = dedent('''\ + class X(): + @property + def func(''') + assert not Script(code).call_signatures() + + +def test_lambda_params(Script): + code = dedent('''\ + my_lambda = lambda x: x+1 + my_lambda(1)''') + sig, = Script(code, column=11).call_signatures() + assert sig.index == 0 + assert sig.name == '' + assert [p.name for p in sig.params] == ['x'] + + +CLASS_CODE = dedent('''\ +class X(): + def __init__(self, foo, bar): + self.foo = foo +''') + + +def test_class_creation(Script): + + sig, = Script(CLASS_CODE + 'X(').call_signatures() + assert sig.index == 0 + assert sig.name == 'X' + assert [p.name for p in sig.params] == ['foo', 'bar'] + + +def test_call_init_on_class(Script): + sig, = Script(CLASS_CODE + 'X.__init__(').call_signatures() + assert [p.name for p in sig.params] == ['self', 'foo', 'bar'] + + +def test_call_init_on_instance(Script): + sig, = Script(CLASS_CODE + 'X().__init__(').call_signatures() + assert [p.name for p in sig.params] == ['foo', 'bar'] + + +def test_call_magic_method(Script): + code = dedent('''\ + class X(): + def __call__(self, baz): + pass + ''') + sig, = Script(code + 'X()(').call_signatures() + assert sig.index == 0 + assert sig.name == 'X' + assert [p.name for p in sig.params] == ['baz'] + + sig, = Script(code + 'X.__call__(').call_signatures() + assert [p.name for p in sig.params] == ['self', 'baz'] + sig, = Script(code + 'X().__call__(').call_signatures() + assert [p.name for p in sig.params] == ['baz'] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_classes.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_classes.py new file mode 100644 index 0000000..d744971 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_classes.py @@ -0,0 +1,461 @@ +""" Test all things related to the ``jedi.api_classes`` module. +""" + +from textwrap import dedent +from inspect import cleandoc + +import pytest + +import jedi +from jedi import __doc__ as jedi_doc +from jedi.evaluate.compiled import CompiledContextName + + +def test_is_keyword(Script): + results = Script('str', 1, 1, None).goto_definitions() + assert len(results) == 1 and results[0].is_keyword is False + + +def test_basedefinition_type(Script, names): + def make_definitions(): + """ + Return a list of definitions for parametrized tests. + + :rtype: [jedi.api_classes.BaseDefinition] + """ + source = dedent(""" + import sys + + class C: + pass + + x = C() + + def f(): + pass + + def g(): + yield + + h = lambda: None + """) + + definitions = [] + definitions += names(source) + + source += dedent(""" + variable = sys or C or x or f or g or g() or h""") + lines = source.splitlines() + script = Script(source, len(lines), len('variable'), None) + definitions += script.goto_definitions() + + script2 = Script(source, 4, len('class C'), None) + definitions += script2.usages() + + source_param = "def f(a): return a" + script_param = Script(source_param, 1, len(source_param), None) + definitions += script_param.goto_assignments() + + return definitions + + for definition in make_definitions(): + assert definition.type in ('module', 'class', 'instance', 'function', + 'generator', 'statement', 'import', 'param') + + +@pytest.mark.parametrize( + ('src', 'expected_result', 'column'), [ + # import one level + ('import t', 'module', None), + ('import ', 'module', None), + ('import datetime; datetime', 'module', None), + + # from + ('from datetime import timedelta', 'class', None), + ('from datetime import timedelta; timedelta', 'class', None), + ('from json import tool', 'module', None), + ('from json import tool; tool', 'module', None), + + # import two levels + ('import json.tool; json', 'module', None), + ('import json.tool; json.tool', 'module', None), + ('import json.tool; json.tool.main', 'function', None), + ('import json.tool', 'module', None), + ('import json.tool', 'module', 9), + ] + +) +def test_basedefinition_type_import(Script, src, expected_result, column): + types = {t.type for t in Script(src, column=column).completions()} + assert types == {expected_result} + + +def test_function_call_signature_in_doc(Script): + defs = Script(""" + def f(x, y=1, z='a'): + pass + f""").goto_definitions() + doc = defs[0].docstring() + assert "f(x, y=1, z='a')" in str(doc) + + +def test_param_docstring(names): + param = names("def test(parameter): pass", all_scopes=True)[1] + assert param.name == 'parameter' + assert param.docstring() == '' + + +def test_class_call_signature(Script): + defs = Script(""" + class Foo: + def __init__(self, x, y=1, z='a'): + pass + Foo""").goto_definitions() + doc = defs[0].docstring() + assert doc == "Foo(x, y=1, z='a')" + + +def test_position_none_if_builtin(Script): + gotos = Script('import sys; sys.path').goto_assignments() + assert gotos[0].in_builtin_module() + assert gotos[0].line is not None + assert gotos[0].column is not None + + +def test_completion_docstring(Script, jedi_path): + """ + Jedi should follow imports in certain conditions + """ + def docstr(src, result): + c = Script(src, sys_path=[jedi_path]).completions()[0] + assert c.docstring(raw=True, fast=False) == cleandoc(result) + + c = Script('import jedi\njed', sys_path=[jedi_path]).completions()[0] + assert c.docstring(fast=False) == cleandoc(jedi_doc) + + docstr('import jedi\njedi.Scr', cleandoc(jedi.Script.__doc__)) + + docstr('abcd=3;abcd', '') + docstr('"hello"\nabcd=3\nabcd', '') + docstr( + dedent(''' + def x(): + "hello" + 0 + x'''), + 'hello' + ) + docstr( + dedent(''' + def x(): + "hello";0 + x'''), + 'hello' + ) + # Shouldn't work with a tuple. + docstr( + dedent(''' + def x(): + "hello",0 + x'''), + '' + ) + # Should also not work if we rename something. + docstr( + dedent(''' + def x(): + "hello" + y = x + y'''), + '' + ) + + +def test_completion_params(Script): + c = Script('import string; string.capwords').completions()[0] + assert [p.name for p in c.params] == ['s', 'sep'] + + +def test_functions_should_have_params(Script): + for c in Script('bool.').completions(): + if c.type == 'function': + assert isinstance(c.params, list) + + +def test_hashlib_params(Script, environment): + if environment.version_info < (3,): + pytest.skip() + + script = Script(source='from hashlib import sha256') + c, = script.completions() + assert [p.name for p in c.params] == ['arg'] + + +def test_signature_params(Script): + def check(defs): + params = defs[0].params + assert len(params) == 1 + assert params[0].name == 'bar' + + s = dedent(''' + def foo(bar): + pass + foo''') + + check(Script(s).goto_definitions()) + + check(Script(s).goto_assignments()) + check(Script(s + '\nbar=foo\nbar').goto_assignments()) + + +def test_param_endings(Script): + """ + Params should be represented without the comma and whitespace they have + around them. + """ + sig = Script('def x(a, b=5, c=""): pass\n x(').call_signatures()[0] + assert [p.description for p in sig.params] == ['param a', 'param b=5', 'param c=""'] + + +@pytest.mark.parametrize( + 'code, index, name, is_definition', [ + ('name', 0, 'name', False), + ('a = f(x)', 0, 'a', True), + ('a = f(x)', 1, 'f', False), + ('a = f(x)', 2, 'x', False), + ] +) +def test_is_definition(names, code, index, name, is_definition): + d = names( + dedent(code), + references=True, + all_scopes=True, + )[index] + assert d.name == name + assert d.is_definition() == is_definition + + +@pytest.mark.parametrize( + 'code, expected', ( + ('import x as a', [False, True]), + ('from x import y', [False, True]), + ('from x.z import y', [False, False, True]), + ) +) +def test_is_definition_import(names, code, expected): + ns = names(dedent(code), references=True, all_scopes=True) + # Assure that names are definitely sorted. + ns = sorted(ns, key=lambda name: (name.line, name.column)) + assert [name.is_definition() for name in ns] == expected + + +def test_parent(Script): + def _parent(source, line=None, column=None): + def_, = Script(dedent(source), line, column).goto_assignments() + return def_.parent() + + parent = _parent('foo=1\nfoo') + assert parent.type == 'module' + + parent = _parent(''' + def spam(): + if 1: + y=1 + y''') + assert parent.name == 'spam' + assert parent.parent().type == 'module' + + +def test_parent_on_function(Script): + code = 'def spam():\n pass' + def_, = Script(code, line=1, column=len('def spam')).goto_assignments() + parent = def_.parent() + assert parent.name == '' + assert parent.type == 'module' + + +def test_parent_on_completion(Script): + parent = Script(dedent('''\ + class Foo(): + def bar(): pass + Foo().bar''')).completions()[0].parent() + assert parent.name == 'Foo' + assert parent.type == 'class' + + parent = Script('str.join').completions()[0].parent() + assert parent.name == 'str' + assert parent.type == 'class' + + +def test_type(Script): + for c in Script('a = [str()]; a[0].').completions(): + if c.name == '__class__' and False: # TODO fix. + assert c.type == 'class' + else: + assert c.type in ('function', 'statement') + + for c in Script('list.').completions(): + assert c.type + + # Github issue #397, type should never raise an error. + for c in Script('import os; os.path.').completions(): + assert c.type + + +def test_type_II(Script): + """ + GitHub Issue #833, `keyword`s are seen as `module`s + """ + for c in Script('f').completions(): + if c.name == 'for': + assert c.type == 'keyword' + + +""" +This tests the BaseDefinition.goto_assignments function, not the jedi +function. They are not really different in functionality, but really +different as an implementation. +""" + + +def test_goto_assignment_repetition(names): + defs = names('a = 1; a', references=True, definitions=False) + # Repeat on the same variable. Shouldn't change once we're on a + # definition. + for _ in range(3): + assert len(defs) == 1 + ass = defs[0].goto_assignments() + assert ass[0].description == 'a = 1' + + +def test_goto_assignments_named_params(names): + src = """\ + def foo(a=1, bar=2): + pass + foo(bar=1) + """ + bar = names(dedent(src), references=True)[-1] + param = bar.goto_assignments()[0] + assert (param.line, param.column) == (1, 13) + assert param.type == 'param' + + +def test_class_call(names): + src = 'from threading import Thread; Thread(group=1)' + n = names(src, references=True)[-1] + assert n.name == 'group' + param_def = n.goto_assignments()[0] + assert param_def.name == 'group' + assert param_def.type == 'param' + + +def test_parentheses(names): + n = names('("").upper', references=True)[-1] + assert n.goto_assignments()[0].name == 'upper' + + +def test_import(names): + nms = names('from json import load', references=True) + assert nms[0].name == 'json' + assert nms[0].type == 'module' + n = nms[0].goto_assignments()[0] + assert n.name == 'json' + assert n.type == 'module' + + assert nms[1].name == 'load' + assert nms[1].type == 'function' + n = nms[1].goto_assignments()[0] + assert n.name == 'load' + assert n.type == 'function' + + nms = names('import os; os.path', references=True) + assert nms[0].name == 'os' + assert nms[0].type == 'module' + n = nms[0].goto_assignments()[0] + assert n.name == 'os' + assert n.type == 'module' + + n = nms[2].goto_assignments()[0] + assert n.name == 'path' + assert n.type == 'module' + + nms = names('import os.path', references=True) + n = nms[0].goto_assignments()[0] + assert n.name == 'os' + assert n.type == 'module' + n = nms[1].goto_assignments()[0] + # This is very special, normally the name doesn't chance, but since + # os.path is a sys.modules hack, it does. + assert n.name in ('ntpath', 'posixpath', 'os2emxpath') + assert n.type == 'module' + + +def test_import_alias(names): + nms = names('import json as foo', references=True) + assert nms[0].name == 'json' + assert nms[0].type == 'module' + assert nms[0]._name.tree_name.parent.type == 'dotted_as_name' + n = nms[0].goto_assignments()[0] + assert n.name == 'json' + assert n.type == 'module' + assert n._name._context.tree_node.type == 'file_input' + + assert nms[1].name == 'foo' + assert nms[1].type == 'module' + assert nms[1]._name.tree_name.parent.type == 'dotted_as_name' + ass = nms[1].goto_assignments() + assert len(ass) == 1 + assert ass[0].name == 'json' + assert ass[0].type == 'module' + assert ass[0]._name._context.tree_node.type == 'file_input' + + +def test_added_equals_to_params(Script): + def run(rest_source): + source = dedent(""" + def foo(bar, baz): + pass + """) + results = Script(source + rest_source).completions() + assert len(results) == 1 + return results[0] + + assert run('foo(bar').name_with_symbols == 'bar=' + assert run('foo(bar').complete == '=' + assert run('foo(bar, baz').complete == '=' + assert run(' bar').name_with_symbols == 'bar' + assert run(' bar').complete == '' + x = run('foo(bar=isins').name_with_symbols + assert x == 'isinstance' + + +def test_builtin_module_with_path(Script): + """ + This test simply tests if a module from /usr/lib/python3.8/lib-dynload/ has + a path or not. It shouldn't have a module_path, because that is just + confusing. + """ + semlock, = Script('from _multiprocessing import SemLock').goto_definitions() + assert isinstance(semlock._name, CompiledContextName) + assert semlock.module_path is None + assert semlock.in_builtin_module() is True + assert semlock.name == 'SemLock' + assert semlock.line is None + assert semlock.column is None + + +@pytest.mark.parametrize( + 'code, description', [ + ('int', 'instance int'), + ('str.index', 'instance int'), + ('1', None), + ] +) +def test_execute(Script, code, description): + definition, = Script(code).goto_assignments() + definitions = definition.execute() + if description is None: + assert not definitions + else: + d, = definitions + assert d.description == description diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_completion.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_completion.py new file mode 100644 index 0000000..178daee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_completion.py @@ -0,0 +1,267 @@ +from os.path import join, sep as s +import sys +from textwrap import dedent + +import pytest +from ..helpers import root_dir + + +def test_in_whitespace(Script): + code = dedent(''' + def x(): + pass''') + assert len(Script(code, column=2).completions()) > 20 + + +def test_empty_init(Script): + """This was actually an issue.""" + code = dedent('''\ + class X(object): pass + X(''') + assert Script(code).completions() + + +def test_in_empty_space(Script): + code = dedent('''\ + class X(object): + def __init__(self): + hello + ''') + comps = Script(code, 3, 7).completions() + self, = [c for c in comps if c.name == 'self'] + assert self.name == 'self' + def_, = self.infer() + assert def_.name == 'X' + + +def test_indent_context(Script): + """ + If an INDENT is the next supposed token, we should still be able to + complete. + """ + code = 'if 1:\nisinstanc' + comp, = Script(code).completions() + assert comp.name == 'isinstance' + + +def test_keyword_context(Script): + def get_names(*args, **kwargs): + return [d.name for d in Script(*args, **kwargs).completions()] + + names = get_names('if 1:\n pass\n') + assert 'if' in names + assert 'elif' in names + + +def test_os_nowait(Script): + """ github issue #45 """ + s = Script("import os; os.P_").completions() + assert 'P_NOWAIT' in [i.name for i in s] + + +def test_points_in_completion(Script): + """At some point, points were inserted into the completions, this + caused problems, sometimes. + """ + c = Script("if IndentationErr").completions() + assert c[0].name == 'IndentationError' + assert c[0].complete == 'or' + + +def test_loading_unicode_files_with_bad_global_charset(Script, monkeypatch, tmpdir): + dirname = str(tmpdir.mkdir('jedi-test')) + filename1 = join(dirname, 'test1.py') + filename2 = join(dirname, 'test2.py') + if sys.version_info < (3, 0): + data = "# coding: latin-1\nfoo = 'm\xf6p'\n" + else: + data = "# coding: latin-1\nfoo = 'm\xf6p'\n".encode("latin-1") + + with open(filename1, "wb") as f: + f.write(data) + s = Script("from test1 import foo\nfoo.", + line=2, column=4, path=filename2) + s.completions() + + +def test_fake_subnodes(Script): + """ + Test the number of subnodes of a fake object. + + There was a bug where the number of child nodes would grow on every + call to :func:``jedi.evaluate.compiled.fake.get_faked``. + + See Github PR#649 and isseu #591. + """ + def get_str_completion(values): + for c in values: + if c.name == 'str': + return c + limit = None + for i in range(2): + completions = Script('').completions() + c = get_str_completion(completions) + str_context, = c._name.infer() + n = len(str_context.tree_node.children[-1].children) + if i == 0: + limit = n + else: + assert n == limit + + +def test_generator(Script): + # Did have some problems with the usage of generator completions this + # way. + s = "def abc():\n" \ + " yield 1\n" \ + "abc()." + assert Script(s).completions() + + +def test_in_comment(Script): + assert Script(" # Comment").completions() + # TODO this is a bit ugly, that the behaviors in comments are different. + assert not Script("max_attr_value = int(2) # Cast to int for spe").completions() + + +def test_async(Script, environment): + if environment.version_info < (3, 5): + pytest.skip() + + code = dedent(''' + foo = 3 + async def x(): + hey = 3 + ho''' + ) + comps = Script(code, column=4).completions() + names = [c.name for c in comps] + assert 'foo' in names + assert 'hey' in names + + +def test_with_stmt_error_recovery(Script): + assert Script('with open('') as foo: foo.\na', line=1).completions() + + +@pytest.mark.parametrize( + 'code, has_keywords', ( + ('', True), + ('x;', True), + ('1', False), + ('1 ', True), + ('1\t', True), + ('1\n', True), + ('1\\\n', True), + ) +) +def test_keyword_completion(Script, code, has_keywords): + assert has_keywords == any(x.is_keyword for x in Script(code).completions()) + + +f1 = join(root_dir, 'example.py') +f2 = join(root_dir, 'test', 'example.py') +os_path = 'from os.path import *\n' +# os.path.sep escaped +se = s * 2 if s == '\\' else s + + +@pytest.mark.parametrize( + 'file, code, column, expected', [ + # General tests / relative paths + (None, '"comp', None, ['ile', 'lex']), # No files like comp + (None, '"test', None, [s]), + (None, '"test', 4, ['t' + s]), + ('example.py', '"test%scomp' % s, None, ['letion' + s]), + ('example.py', 'r"comp"', None, "A LOT"), + ('example.py', 'r"tes"', None, "A LOT"), + ('example.py', 'r"tes"', 5, ['t' + s]), + ('example.py', 'r" tes"', 6, []), + ('test%sexample.py' % se, 'r"tes"', 5, ['t' + s]), + ('test%sexample.py' % se, 'r"test%scomp"' % s, 5, ['t' + s]), + ('test%sexample.py' % se, 'r"test%scomp"' % s, 11, ['letion' + s]), + ('test%sexample.py' % se, '"%s"' % join('test', 'completion', 'basi'), 21, ['c.py']), + ('example.py', 'rb"' + join('..', 'jedi', 'tes'), None, ['t' + s]), + + # Absolute paths + (None, '"' + join(root_dir, 'test', 'test_ca'), None, ['che.py"']), + (None, '"%s"' % join(root_dir, 'test', 'test_ca'), len(root_dir) + 14, ['che.py']), + + # Longer quotes + ('example.py', 'r"""test', None, [s]), + ('example.py', 'r"""\ntest', None, []), + ('example.py', 'u"""tes\n', (1, 7), ['t' + s]), + ('example.py', '"""test%stest_cache.p"""' % s, 20, ['y']), + ('example.py', '"""test%stest_cache.p"""' % s, 19, ['py"""']), + + # Adding + ('example.py', '"test" + "%stest_cac' % se, None, ['he.py"']), + ('example.py', '"test" + "%s" + "test_cac' % se, None, ['he.py"']), + ('example.py', 'x = 1 + "test', None, []), + ('example.py', 'x = f("te" + "st)', 16, [s]), + ('example.py', 'x = f("te" + "st', 16, [s]), + ('example.py', 'x = f("te" + "st"', 16, [s]), + ('example.py', 'x = f("te" + "st")', 16, [s]), + ('example.py', 'x = f("t" + "est")', 16, [s]), + # This is actually not correct, but for now leave it here, because of + # Python 2. + ('example.py', 'x = f(b"t" + "est")', 17, [s]), + ('example.py', '"test" + "', None, [s]), + + # __file__ + (f1, os_path + 'dirname(__file__) + "%stest' % s, None, [s]), + (f2, os_path + 'dirname(__file__) + "%stest_ca' % se, None, ['che.py"']), + (f2, os_path + 'dirname(abspath(__file__)) + sep + "test_ca', None, ['che.py"']), + (f2, os_path + 'join(dirname(__file__), "completion") + sep + "basi', None, ['c.py"']), + (f2, os_path + 'join("test", "completion") + sep + "basi', None, ['c.py"']), + + # inside join + (f2, os_path + 'join(dirname(__file__), "completion", "basi', None, ['c.py"']), + (f2, os_path + 'join(dirname(__file__), "completion", "basi)', 43, ['c.py"']), + (f2, os_path + 'join(dirname(__file__), "completion", "basi")', 43, ['c.py']), + (f2, os_path + 'join(dirname(__file__), "completion", "basi)', 35, ['']), + (f2, os_path + 'join(dirname(__file__), "completion", "basi)', 33, ['on"']), + (f2, os_path + 'join(dirname(__file__), "completion", "basi")', 33, ['on"']), + + # join with one argument. join will not get evaluated and the result is + # that directories and in a slash. This is unfortunate, but doesn't + # really matter. + (f2, os_path + 'join("tes', 9, ['t"']), + (f2, os_path + 'join(\'tes)', 9, ["t'"]), + (f2, os_path + 'join(r"tes"', 10, ['t']), + (f2, os_path + 'join("""tes""")', 11, ['t']), + + # Almost like join but not really + (f2, os_path + 'join["tes', 9, ['t' + s]), + (f2, os_path + 'join["tes"', 9, ['t' + s]), + (f2, os_path + 'join["tes"]', 9, ['t' + s]), + (f2, os_path + 'join[dirname(__file__), "completi', 33, []), + (f2, os_path + 'join[dirname(__file__), "completi"', 33, []), + (f2, os_path + 'join[dirname(__file__), "completi"]', 33, []), + + # With full paths + (f2, 'import os\nos.path.join(os.path.dirname(__file__), "completi', 49, ['on"']), + (f2, 'import os\nos.path.join(os.path.dirname(__file__), "completi"', 49, ['on']), + (f2, 'import os\nos.path.join(os.path.dirname(__file__), "completi")', 49, ['on']), + + # With alias + (f2, 'import os.path as p as p\np.join(p.dirname(__file__), "completi', None, ['on"']), + (f2, 'from os.path import dirname, join as j\nj(dirname(__file__), "completi', + None, ['on"']), + + # Trying to break it + (f2, os_path + 'join(["tes', 10, ['t' + s]), + (f2, os_path + 'join(["tes"]', 10, ['t' + s]), + (f2, os_path + 'join(["tes"])', 10, ['t' + s]), + (f2, os_path + 'join("test", "test_cac" + x,', 22, ['he.py']), + ] +) +def test_file_path_completions(Script, file, code, column, expected): + line = None + if isinstance(column, tuple): + line, column = column + comps = Script(code, path=file, line=line, column=column).completions() + if expected == "A LOT": + assert len(comps) > 100 # This is basically global completions. + else: + assert [c.complete for c in comps] == expected diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_defined_names.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_defined_names.py new file mode 100644 index 0000000..259e360 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_defined_names.py @@ -0,0 +1,169 @@ +""" +Tests for `api.names`. +""" + +from textwrap import dedent + + +def _assert_definition_names(definitions, names_): + assert [d.name for d in definitions] == names_ + + +def _check_names(names, source, names_): + definitions = names(dedent(source)) + _assert_definition_names(definitions, names_) + return definitions + + +def test_get_definitions_flat(names): + _check_names(names, """ + import module + class Class: + pass + def func(): + pass + data = None + """, ['module', 'Class', 'func', 'data']) + + +def test_dotted_assignment(names): + _check_names(names, """ + x = Class() + x.y.z = None + """, ['x', 'z']) # TODO is this behavior what we want? + + +def test_multiple_assignment(names): + _check_names(names, "x = y = None", ['x', 'y']) + + +def test_multiple_imports(names): + _check_names(names, """ + from module import a, b + from another_module import * + """, ['a', 'b']) + + +def test_nested_definitions(names): + definitions = _check_names(names, """ + class Class: + def f(): + pass + def g(): + pass + """, ['Class']) + subdefinitions = definitions[0].defined_names() + _assert_definition_names(subdefinitions, ['f', 'g']) + assert [d.full_name for d in subdefinitions] == ['__main__.Class.f', '__main__.Class.g'] + + +def test_nested_class(names): + definitions = _check_names(names, """ + class L1: + class L2: + class L3: + def f(): pass + def f(): pass + def f(): pass + def f(): pass + """, ['L1', 'f']) + subdefs = definitions[0].defined_names() + subsubdefs = subdefs[0].defined_names() + _assert_definition_names(subdefs, ['L2', 'f']) + _assert_definition_names(subsubdefs, ['L3', 'f']) + _assert_definition_names(subsubdefs[0].defined_names(), ['f']) + + +def test_class_fields_with_all_scopes_false(names): + definitions = _check_names(names, """ + from module import f + g = f(f) + class C: + h = g + + def foo(x=a): + bar = x + return bar + """, ['f', 'g', 'C', 'foo']) + C_subdefs = definitions[-2].defined_names() + foo_subdefs = definitions[-1].defined_names() + _assert_definition_names(C_subdefs, ['h']) + _assert_definition_names(foo_subdefs, ['x', 'bar']) + + +def test_async_stmt_with_all_scopes_false(names): + definitions = _check_names(names, """ + from module import f + import asyncio + + g = f(f) + class C: + h = g + def __init__(self): + pass + + async def __aenter__(self): + pass + + def foo(x=a): + bar = x + return bar + + async def async_foo(duration): + async def wait(): + await asyncio.sleep(100) + for i in range(duration//100): + await wait() + return duration//100*100 + + async with C() as cinst: + d = cinst + """, ['f', 'asyncio', 'g', 'C', 'foo', 'async_foo', 'cinst', 'd']) + C_subdefs = definitions[3].defined_names() + foo_subdefs = definitions[4].defined_names() + async_foo_subdefs = definitions[5].defined_names() + cinst_subdefs = definitions[6].defined_names() + _assert_definition_names(C_subdefs, ['h', '__init__', '__aenter__']) + _assert_definition_names(foo_subdefs, ['x', 'bar']) + _assert_definition_names(async_foo_subdefs, ['duration', 'wait', 'i']) + # We treat d as a name outside `async with` block + _assert_definition_names(cinst_subdefs, []) + + +def test_follow_imports(names): + # github issue #344 + imp = names('import datetime')[0] + assert imp.name == 'datetime' + datetime_names = [str(d.name) for d in imp.defined_names()] + assert 'timedelta' in datetime_names + + +def test_names_twice(names): + source = dedent(''' + def lol(): + pass + ''') + + defs = names(source=source) + assert defs[0].defined_names() == [] + + +def test_simple_name(names): + defs = names('foo', references=True) + assert not defs[0]._name.infer() + + +def test_no_error(names): + code = dedent(""" + def foo(a, b): + if a == 10: + if b is None: + print("foo") + a = 20 + """) + func_name, = names(code) + a, b, a20 = func_name.defined_names() + assert a.name == 'a' + assert b.name == 'b' + assert a20.name == 'a' + assert a20.goto_assignments() == [a20] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_environment.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_environment.py new file mode 100644 index 0000000..2d774a8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_environment.py @@ -0,0 +1,155 @@ +import os +import sys + +import pytest + +import jedi +from jedi._compatibility import py_version +from jedi.api.environment import get_default_environment, find_virtualenvs, \ + InvalidPythonEnvironment, find_system_environments, \ + get_system_environment, create_environment, InterpreterEnvironment, \ + get_cached_default_environment + + +def test_sys_path(): + assert get_default_environment().get_sys_path() + + +def test_find_system_environments(): + envs = list(find_system_environments()) + assert len(envs) + for env in envs: + assert env.version_info + assert env.get_sys_path() + parser_version = env.get_grammar().version_info + assert parser_version[:2] == env.version_info[:2] + + +@pytest.mark.parametrize( + 'version', + ['2.7', '3.3', '3.4', '3.5', '3.6', '3.7'] +) +def test_versions(version): + try: + env = get_system_environment(version) + except InvalidPythonEnvironment: + if int(version.replace('.', '')) == py_version: + # At least the current version has to work + raise + pytest.skip() + + assert version == str(env.version_info[0]) + '.' + str(env.version_info[1]) + assert env.get_sys_path() + + +def test_load_module(evaluator): + access_path = evaluator.compiled_subprocess.load_module( + dotted_name=u'math', + sys_path=evaluator.get_sys_path() + ) + name, access_handle = access_path.accesses[0] + + assert access_handle.py__bool__() is True + assert access_handle.get_api_type() == 'module' + with pytest.raises(AttributeError): + access_handle.py__mro__() + + +def test_error_in_environment(evaluator, Script, environment): + if isinstance(environment, InterpreterEnvironment): + pytest.skip("We don't catch these errors at the moment.") + + # Provoke an error to show how Jedi can recover from it. + with pytest.raises(jedi.InternalError): + evaluator.compiled_subprocess._test_raise_error(KeyboardInterrupt) + # The second time it should raise an InternalError again. + with pytest.raises(jedi.InternalError): + evaluator.compiled_subprocess._test_raise_error(KeyboardInterrupt) + # Jedi should still work. + def_, = Script('str').goto_definitions() + assert def_.name == 'str' + + +def test_stdout_in_subprocess(evaluator, Script): + evaluator.compiled_subprocess._test_print(stdout='.') + Script('1').goto_definitions() + + +def test_killed_subprocess(evaluator, Script, environment): + if isinstance(environment, InterpreterEnvironment): + pytest.skip("We cannot kill our own process") + # Just kill the subprocess. + evaluator.compiled_subprocess._compiled_subprocess._get_process().kill() + # Since the process was terminated (and nobody knows about it) the first + # Jedi call fails. + with pytest.raises(jedi.InternalError): + Script('str').goto_definitions() + + def_, = Script('str').goto_definitions() + # Jedi should now work again. + assert def_.name == 'str' + + +def test_not_existing_virtualenv(monkeypatch): + """Should not match the path that was given""" + path = '/foo/bar/jedi_baz' + monkeypatch.setenv('VIRTUAL_ENV', path) + assert get_default_environment().executable != path + + +def test_working_venv(venv_path, monkeypatch): + monkeypatch.setenv('VIRTUAL_ENV', venv_path) + assert get_default_environment().path == venv_path + + +def test_scanning_venvs(venv_path): + parent_dir = os.path.dirname(venv_path) + assert any(venv.path == venv_path + for venv in find_virtualenvs([parent_dir])) + + +def test_create_environment_venv_path(venv_path): + environment = create_environment(venv_path) + assert environment.path == venv_path + + +def test_create_environment_executable(): + environment = create_environment(sys.executable) + assert environment.executable == sys.executable + + +def test_get_default_environment_from_env_does_not_use_safe(tmpdir, monkeypatch): + fake_python = os.path.join(str(tmpdir), 'fake_python') + with open(fake_python, 'w') as f: + f.write('') + + def _get_subprocess(self): + if self._start_executable != fake_python: + raise RuntimeError('Should not get called!') + self.executable = fake_python + self.path = 'fake' + + monkeypatch.setattr('jedi.api.environment.Environment._get_subprocess', + _get_subprocess) + + monkeypatch.setenv('VIRTUAL_ENV', fake_python) + env = get_default_environment() + assert env.path == 'fake' + + +@pytest.mark.parametrize('virtualenv', ['', 'fufuuuuu', sys.prefix]) +def test_get_default_environment_when_embedded(monkeypatch, virtualenv): + # When using Python embedded, sometimes the executable is not a Python + # executable. + executable_name = 'RANDOM_EXE' + monkeypatch.setattr(sys, 'executable', executable_name) + monkeypatch.setenv('VIRTUAL_ENV', virtualenv) + env = get_default_environment() + assert env.executable != executable_name + + +def test_changing_venv(venv_path, monkeypatch): + monkeypatch.setitem(os.environ, 'VIRTUAL_ENV', venv_path) + get_cached_default_environment() + monkeypatch.setitem(os.environ, 'VIRTUAL_ENV', sys.executable) + assert get_cached_default_environment().executable == sys.executable diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_full_name.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_full_name.py new file mode 100644 index 0000000..829c124 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_full_name.py @@ -0,0 +1,114 @@ +""" +Tests for :attr:`.BaseDefinition.full_name`. + +There are three kinds of test: + +#. Test classes derived from :class:`MixinTestFullName`. + Child class defines :attr:`.operation` to alter how + the api definition instance is created. + +#. :class:`TestFullDefinedName` is to test combination of + ``obj.full_name`` and ``jedi.defined_names``. + +#. Misc single-function tests. +""" + +import textwrap + +import pytest + +import jedi +from ..helpers import TestCase + + +class MixinTestFullName(object): + operation = None + + @pytest.fixture(autouse=True) + def init(self, Script, environment): + self.Script = Script + self.environment = environment + + def check(self, source, desired): + script = self.Script(textwrap.dedent(source)) + definitions = getattr(script, type(self).operation)() + for d in definitions: + self.assertEqual(d.full_name, desired) + + def test_os_path_join(self): + self.check('import os; os.path.join', 'os.path.join') + + def test_builtin(self): + self.check('TypeError', 'builtins.TypeError') + + +class TestFullNameWithGotoDefinitions(MixinTestFullName, TestCase): + operation = 'goto_definitions' + + def test_tuple_mapping(self): + if self.environment.version_info.major == 2: + pytest.skip('Python 2 also yields None.') + + self.check(""" + import re + any_re = re.compile('.*') + any_re""", 'typing.Pattern') + + def test_from_import(self): + self.check('from os import path', 'os.path') + + +class TestFullNameWithCompletions(MixinTestFullName, TestCase): + operation = 'completions' + + +class TestFullDefinedName(TestCase): + """ + Test combination of ``obj.full_name`` and ``jedi.defined_names``. + """ + @pytest.fixture(autouse=True) + def init(self, environment): + self.environment = environment + + def check(self, source, desired): + definitions = jedi.names(textwrap.dedent(source), environment=self.environment) + full_names = [d.full_name for d in definitions] + self.assertEqual(full_names, desired) + + def test_local_names(self): + self.check(""" + def f(): pass + class C: pass + """, ['__main__.f', '__main__.C']) + + def test_imports(self): + self.check(""" + import os + from os import path + from os.path import join + from os import path as opath + """, ['os', 'os.path', 'os.path.join', 'os.path']) + + +def test_sub_module(Script, jedi_path): + """ + ``full_name needs to check sys.path to actually find it's real path module + path. + """ + sys_path = [jedi_path] + defs = Script('from jedi.api import classes; classes', sys_path=sys_path).goto_definitions() + assert [d.full_name for d in defs] == ['jedi.api.classes'] + defs = Script('import jedi.api; jedi.api', sys_path=sys_path).goto_definitions() + assert [d.full_name for d in defs] == ['jedi.api'] + + +def test_os_path(Script): + d, = Script('from os.path import join').completions() + assert d.full_name == 'os.path.join' + d, = Script('import os.p').completions() + assert d.full_name == 'os.path' + + +def test_os_issues(Script): + """Issue #873""" + assert [c.name for c in Script('import os\nos.nt''').completions()] == ['nt'] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_interpreter.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_interpreter.py new file mode 100644 index 0000000..e97f498 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_interpreter.py @@ -0,0 +1,507 @@ +""" +Tests of ``jedi.api.Interpreter``. +""" +import sys + +import pytest + +import jedi +from jedi._compatibility import is_py3, py_version +from jedi.evaluate.compiled import mixed, context +from importlib import import_module + +if py_version > 30: + def exec_(source, global_map): + exec(source, global_map) +else: + eval(compile("""def exec_(source, global_map): + exec source in global_map """, 'blub', 'exec')) + + +class _GlobalNameSpace: + class SideEffectContainer: + pass + + +def get_completion(source, namespace): + i = jedi.Interpreter(source, [namespace]) + completions = i.completions() + assert len(completions) == 1 + return completions[0] + + +def test_builtin_details(): + import keyword + + class EmptyClass: + pass + + variable = EmptyClass() + + def func(): + pass + + cls = get_completion('EmptyClass', locals()) + var = get_completion('variable', locals()) + f = get_completion('func', locals()) + m = get_completion('keyword', locals()) + assert cls.type == 'class' + assert var.type == 'instance' + assert f.type == 'function' + assert m.type == 'module' + + +def test_numpy_like_non_zero(): + """ + Numpy-like array can't be caster to bool and need to be compacre with + `is`/`is not` and not `==`/`!=` + """ + + class NumpyNonZero: + + def __zero__(self): + raise ValueError('Numpy arrays would raise and tell you to use .any() or all()') + def __bool__(self): + raise ValueError('Numpy arrays would raise and tell you to use .any() or all()') + + class NumpyLike: + + def __eq__(self, other): + return NumpyNonZero() + + def something(self): + pass + + x = NumpyLike() + d = {'a': x} + + # just assert these do not raise. They (strangely) trigger different + # codepath + get_completion('d["a"].some', {'d':d}) + get_completion('x.some', {'x':x}) + + +def test_nested_resolve(): + class XX: + def x(): + pass + + cls = get_completion('XX', locals()) + func = get_completion('XX.x', locals()) + assert (func.line, func.column) == (cls.line + 1, 12) + + +def test_side_effect_completion(): + """ + In the repl it's possible to cause side effects that are not documented in + Python code, however we want references to Python code as well. Therefore + we need some mixed kind of magic for tests. + """ + _GlobalNameSpace.SideEffectContainer.foo = 1 + side_effect = get_completion('SideEffectContainer', _GlobalNameSpace.__dict__) + + # It's a class that contains MixedObject. + context, = side_effect._name.infer() + assert isinstance(context, mixed.MixedObject) + foo = get_completion('SideEffectContainer.foo', _GlobalNameSpace.__dict__) + assert foo.name == 'foo' + + +def _assert_interpreter_complete(source, namespace, completions, + **kwds): + script = jedi.Interpreter(source, [namespace], **kwds) + cs = script.completions() + actual = [c.name for c in cs] + assert sorted(actual) == sorted(completions) + + +def test_complete_raw_function(): + from os.path import join + _assert_interpreter_complete('join("").up', + locals(), + ['upper']) + + +def test_complete_raw_function_different_name(): + from os.path import join as pjoin + _assert_interpreter_complete('pjoin("").up', + locals(), + ['upper']) + + +def test_complete_raw_module(): + import os + _assert_interpreter_complete('os.path.join("a").up', + locals(), + ['upper']) + + +def test_complete_raw_instance(): + import datetime + dt = datetime.datetime(2013, 1, 1) + completions = ['time', 'timetz', 'timetuple'] + if is_py3: + completions += ['timestamp'] + _assert_interpreter_complete('(dt - dt).ti', + locals(), + completions) + + +def test_list(): + array = ['haha', 1] + _assert_interpreter_complete('array[0].uppe', + locals(), + ['upper']) + _assert_interpreter_complete('array[0].real', + locals(), + []) + + # something different, no index given, still just return the right + _assert_interpreter_complete('array[int].real', + locals(), + ['real']) + _assert_interpreter_complete('array[int()].real', + locals(), + ['real']) + # inexistent index + _assert_interpreter_complete('array[2].upper', + locals(), + ['upper']) + + +def test_getattr(): + class Foo1: + bar = [] + baz = 'bar' + _assert_interpreter_complete('getattr(Foo1, baz).app', locals(), ['append']) + + +def test_slice(): + class Foo1: + bar = [] + baz = 'xbarx' + _assert_interpreter_complete('getattr(Foo1, baz[1:-1]).append', + locals(), + ['append']) + + +def test_getitem_side_effects(): + class Foo2: + def __getitem__(self, index): + # Possible side effects here, should therefore not call this. + if True: + raise NotImplementedError() + return index + + foo = Foo2() + _assert_interpreter_complete('foo["asdf"].upper', locals(), ['upper']) + + +@pytest.fixture(params=[False, True]) +def allow_descriptor_access_or_not(request, monkeypatch): + monkeypatch.setattr(jedi.Interpreter, '_allow_descriptor_getattr_default', request.param) + return request.param + + +def test_property_error_oldstyle(allow_descriptor_access_or_not): + lst = [] + class Foo3: + @property + def bar(self): + lst.append(1) + raise ValueError + + foo = Foo3() + _assert_interpreter_complete('foo.bar', locals(), ['bar']) + _assert_interpreter_complete('foo.bar.baz', locals(), []) + + if allow_descriptor_access_or_not: + assert lst == [1, 1] + else: + # There should not be side effects + assert lst == [] + + +def test_property_error_newstyle(allow_descriptor_access_or_not): + lst = [] + class Foo3(object): + @property + def bar(self): + lst.append(1) + raise ValueError + + foo = Foo3() + _assert_interpreter_complete('foo.bar', locals(), ['bar']) + _assert_interpreter_complete('foo.bar.baz', locals(), []) + + if allow_descriptor_access_or_not: + assert lst == [1, 1] + else: + # There should not be side effects + assert lst == [] + + +def test_property_content(): + class Foo3(object): + @property + def bar(self): + return 1 + + foo = Foo3() + def_, = jedi.Interpreter('foo.bar', [locals()]).goto_definitions() + assert def_.name == 'int' + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +def test_param_completion(): + def foo(bar): + pass + + lambd = lambda xyz: 3 + + _assert_interpreter_complete('foo(bar', locals(), ['bar']) + assert bool(jedi.Interpreter('lambd(xyz', [locals()]).completions()) == is_py3 + + +def test_endless_yield(): + lst = [1] * 10000 + # If iterating over lists it should not be possible to take an extremely + # long time. + _assert_interpreter_complete('list(lst)[9000].rea', locals(), ['real']) + + +@pytest.mark.skipif('py_version < 33', reason='inspect.signature was created in 3.3.') +def test_completion_params(): + foo = lambda a, b=3: None + + script = jedi.Interpreter('foo', [locals()]) + c, = script.completions() + assert [p.name for p in c.params] == ['a', 'b'] + assert c.params[0].infer() == [] + t, = c.params[1].infer() + assert t.name == 'int' + + +@pytest.mark.skipif('py_version < 33', reason='inspect.signature was created in 3.3.') +def test_completion_param_annotations(): + # Need to define this function not directly in Python. Otherwise Jedi is to + # clever and uses the Python code instead of the signature object. + code = 'def foo(a: 1, b: str, c: int = 1.0) -> bytes: pass' + exec_(code, locals()) + script = jedi.Interpreter('foo', [locals()]) + c, = script.completions() + a, b, c = c.params + assert a.infer() == [] + assert [d.name for d in b.infer()] == ['str'] + assert {d.name for d in c.infer()} == {'int', 'float'} + + d, = jedi.Interpreter('foo()', [locals()]).goto_definitions() + assert d.name == 'bytes' + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +def test_keyword_argument(): + def f(some_keyword_argument): + pass + + c, = jedi.Interpreter("f(some_keyw", [{'f': f}]).completions() + assert c.name == 'some_keyword_argument' + assert c.complete == 'ord_argument=' + + # This needs inspect.signature to work. + if is_py3: + # Make it impossible for jedi to find the source of the function. + f.__name__ = 'xSOMETHING' + c, = jedi.Interpreter("x(some_keyw", [{'x': f}]).completions() + assert c.name == 'some_keyword_argument' + + +def test_more_complex_instances(): + class Something: + def foo(self, other): + return self + + class Base: + def wow(self): + return Something() + + #script = jedi.Interpreter('Base().wow().foo', [locals()]) + #c, = script.completions() + #assert c.name == 'foo' + + x = Base() + script = jedi.Interpreter('x.wow().foo', [locals()]) + c, = script.completions() + assert c.name == 'foo' + + +def test_repr_execution_issue(): + """ + Anticipate inspect.getfile executing a __repr__ of all kinds of objects. + See also #919. + """ + class ErrorRepr: + def __repr__(self): + raise Exception('xyz') + + er = ErrorRepr() + + script = jedi.Interpreter('er', [locals()]) + d, = script.goto_definitions() + assert d.name == 'ErrorRepr' + assert d.type == 'instance' + + +def test_dir_magic_method(): + class CompleteAttrs(object): + def __getattr__(self, name): + if name == 'foo': + return 1 + if name == 'bar': + return 2 + raise AttributeError(name) + + def __dir__(self): + if is_py3: + names = object.__dir__(self) + else: + names = dir(object()) + return ['foo', 'bar'] + names + + itp = jedi.Interpreter("ca.", [{'ca': CompleteAttrs()}]) + completions = itp.completions() + names = [c.name for c in completions] + assert ('__dir__' in names) == is_py3 + assert '__class__' in names + assert 'foo' in names + assert 'bar' in names + + foo = [c for c in completions if c.name == 'foo'][0] + assert foo.infer() == [] + + +def test_name_not_findable(): + class X(): + if 0: + NOT_FINDABLE + + def hidden(self): + return + + hidden.__name__ = 'NOT_FINDABLE' + + setattr(X, 'NOT_FINDABLE', X.hidden) + + assert jedi.Interpreter("X.NOT_FINDA", [locals()]).completions() + + +def test_stubs_working(): + from multiprocessing import cpu_count + defs = jedi.Interpreter("cpu_count()", [locals()]).goto_definitions() + assert [d.name for d in defs] == ['int'] + + +def test_sys_path_docstring(): # Was an issue in #1298 + import jedi + s = jedi.Interpreter("from sys import path\npath", line=2, column=4, namespaces=[locals()]) + s.completions()[0].docstring() + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +@pytest.mark.parametrize( + 'code, completions', [ + ('x[0].uppe', ['upper']), + ('x[1337].uppe', ['upper']), + ('x[""].uppe', ['upper']), + ('x.appen', ['append']), + + ('y.add', ['add']), + ('y[0].', []), + ('list(y)[0].', []), # TODO use stubs properly to improve this. + + ('z[0].uppe', ['upper']), + ('z[0].append', ['append']), + ('z[1].uppe', ['upper']), + ('z[1].append', []), + + ('collections.deque().app', ['append', 'appendleft']), + ('deq.app', ['append', 'appendleft']), + ('deq.pop', ['pop', 'popleft']), + ('deq.pop().', []), + + ('collections.Counter("asdf").setdef', ['setdefault']), + ('collections.Counter("asdf").pop().imag', ['imag']), + ('list(collections.Counter("asdf").keys())[0].uppe', ['upper']), + ('counter.setdefa', ['setdefault']), + ('counter.pop().imag', []), # TODO stubs could make this better + ('counter.keys())[0].uppe', []), + + ('string.upper().uppe', ['upper']), + ('"".upper().uppe', ['upper']), + ] +) +def test_simple_completions(code, completions): + x = [str] + y = {1} + z = {1: str, 2: list} + import collections + deq = collections.deque([1]) + counter = collections.Counter(['asdf']) + string = '' + + defs = jedi.Interpreter(code, [locals()]).completions() + assert [d.name for d in defs] == completions + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Python 2 doesn't have lru_cache") +def test__wrapped__(): + from functools import lru_cache + + @lru_cache(maxsize=128) + def syslogs_to_df(): + pass + + c, = jedi.Interpreter('syslogs_to_df', [locals()]).completions() + # Apparently the function starts on the line where the decorator starts. + assert c.line == syslogs_to_df.__wrapped__.__code__.co_firstlineno + 1 + + +@pytest.mark.parametrize('module_name', ['sys', 'time']) +def test_core_module_completes(module_name): + module = import_module(module_name) + assert jedi.Interpreter(module_name + '.\n', [locals()]).completions() + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +@pytest.mark.parametrize( + 'code, expected, index', [ + ('a(', ['a', 'b', 'c'], 0), + ('b(', ['b', 'c'], 0), + # Might or might not be correct, because c is given as a keyword + # argument as well, but that is just what inspect.signature returns. + ('c(', ['b', 'c'], 0), + ] +) +def test_partial_signatures(code, expected, index): + import functools + + def func(a, b, c): + pass + + a = functools.partial(func) + b = functools.partial(func, 1) + c = functools.partial(func, 1, c=2) + + sig, = jedi.Interpreter(code, [locals()]).call_signatures() + assert sig.name == 'partial' + assert [p.name for p in sig.params] == expected + assert index == sig.index + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +def test_type_var(): + """This was an issue before, see Github #1369""" + import typing + x = typing.TypeVar('myvar') + def_, = jedi.Interpreter('x', [locals()]).goto_definitions() + assert def_.name == 'TypeVar' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_keyword.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_keyword.py new file mode 100644 index 0000000..219e3ff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_keyword.py @@ -0,0 +1,60 @@ +""" +Test of keywords and ``jedi.keywords`` +""" + +import pytest + + +def test_goto_assignments_keyword(Script): + """ + Bug: goto assignments on ``in`` used to raise AttributeError:: + + 'unicode' object has no attribute 'generate_call_path' + """ + Script('in').goto_assignments() + + +def test_keyword(Script, environment): + """ github jedi-vim issue #44 """ + defs = Script("print").goto_definitions() + if environment.version_info.major < 3: + assert defs == [] + else: + assert [d.docstring() for d in defs] + + assert Script("import").goto_assignments() == [] + + completions = Script("import", 1, 1).completions() + assert len(completions) > 10 and 'if' in [c.name for c in completions] + assert Script("assert").goto_definitions() == [] + + +def test_keyword_attributes(Script): + def_, = Script('def').completions() + assert def_.name == 'def' + assert def_.complete == '' + assert def_.is_keyword is True + assert def_.is_stub() is False + assert def_.goto_assignments(only_stubs=True) == [] + assert def_.goto_assignments() == [] + assert def_.infer() == [] + assert def_.parent() is None + assert def_.docstring() + assert def_.description == 'keyword def' + assert def_.get_line_code() == '' + assert def_.full_name is None + assert def_.line is def_.column is None + assert def_.in_builtin_module() is True + assert def_.module_name in ('builtins', '__builtin__') + assert 'typeshed' in def_.module_path + assert def_.type == 'keyword' + + +def test_none_keyword(Script, environment): + if environment.version_info.major == 2: + # Just don't care about Python 2 anymore, it's almost gone. + pytest.skip() + + none, = Script('None').completions() + assert not none.docstring() + assert none.name == 'None' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_project.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_project.py new file mode 100644 index 0000000..a9fccb0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_project.py @@ -0,0 +1,24 @@ +import os + +from ..helpers import get_example_dir, set_cwd, root_dir +from jedi import Interpreter + + +def test_django_default_project(Script): + dir = get_example_dir('django') + + script = Script( + "from app import models\nmodels.SomeMo", + path=os.path.join(dir, 'models/x.py') + ) + c, = script.completions() + assert c.name == "SomeModel" + assert script._evaluator.project._django is True + + +def test_interpreter_project_path(): + # Run from anywhere it should be the cwd. + dir = os.path.join(root_dir, 'test') + with set_cwd(dir): + project = Interpreter('', [locals()])._evaluator.project + assert project._path == dir diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_settings.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_settings.py new file mode 100644 index 0000000..24ae05f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_settings.py @@ -0,0 +1,34 @@ +import os + +import pytest + +from jedi import api +from jedi.evaluate import imports +from ..helpers import cwd_at + + +@pytest.mark.skipif('True', reason='Skip for now, test case is not really supported.') +@cwd_at('jedi') +def test_add_dynamic_mods(Script): + fname = '__main__.py' + api.settings.additional_dynamic_modules = [fname] + # Fictional module that defines a function. + src1 = "def r(a): return a" + # Other fictional modules in another place in the fs. + src2 = 'from .. import setup; setup.r(1)' + script = Script(src1, path='../setup.py') + imports.load_module(script._evaluator, os.path.abspath(fname), src2) + result = script.goto_definitions() + assert len(result) == 1 + assert result[0].description == 'class int' + + +def test_add_bracket_after_function(monkeypatch, Script): + settings = api.settings + monkeypatch.setattr(settings, 'add_bracket_after_function', True) + script = Script('''\ +def foo(): + pass +foo''') + completions = script.completions() + assert completions[0].complete == '(' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_signatures.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_signatures.py new file mode 100644 index 0000000..7264cee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_signatures.py @@ -0,0 +1,74 @@ +import sys + +import pytest + +_tuple_code = 'from typing import Tuple\ndef f(x: Tuple[int]): ...\nf' + + +@pytest.mark.parametrize( + 'code, expected_params, execute_annotation', [ + ('def f(x: 1, y): ...\nf', [None, None], True), + ('def f(x: 1, y): ...\nf', ['instance int', None], False), + ('def f(x: int): ...\nf', ['instance int'], True), + ('from typing import List\ndef f(x: List[int]): ...\nf', ['instance list'], True), + ('from typing import List\ndef f(x: List[int]): ...\nf', ['class list'], False), + (_tuple_code, ['Tuple: _SpecialForm = ...'], True), + (_tuple_code, ['Tuple: _SpecialForm = ...'], False), + ('x=str\ndef f(p: x): ...\nx=int\nf', ['instance int'], True), + + ('def f(*args, **kwargs): ...\nf', [None, None], False), + ('def f(*args: int, **kwargs: str): ...\nf', ['class int', 'class str'], False), + ] +) +def test_param_annotation(Script, code, expected_params, execute_annotation, skip_python2): + func, = Script(code).goto_assignments() + sig, = func.get_signatures() + for p, expected in zip(sig.params, expected_params): + annotations = p.infer_annotation(execute_annotation=execute_annotation) + if expected is None: + assert not annotations + else: + annotation, = annotations + assert annotation.description == expected + + +@pytest.mark.parametrize( + 'code, expected_params', [ + ('def f(x=1, y=int, z): pass\nf', ['instance int', 'class int', None]), + ('def f(*args, **kwargs): pass\nf', [None, None]), + ('x=1\ndef f(p=x): pass\nx=""\nf', ['instance int']), + ] +) +def test_param_default(Script, code, expected_params): + func, = Script(code).goto_assignments() + sig, = func.get_signatures() + for p, expected in zip(sig.params, expected_params): + annotations = p.infer_default() + if expected is None: + assert not annotations + else: + annotation, = annotations + assert annotation.description == expected + + +@pytest.mark.skipif(sys.version_info < (3, 5), reason="Python <3.5 doesn't support __signature__") +@pytest.mark.parametrize( + 'code, index, param_code, kind', [ + ('def f(x=1): pass\nf', 0, 'x=1', 'POSITIONAL_OR_KEYWORD'), + ('def f(*args:int): pass\nf', 0, '*args: int', 'VAR_POSITIONAL'), + ('def f(**kwargs: List[x]): pass\nf', 0, '**kwargs: List[x]', 'VAR_KEYWORD'), + ('def f(*, x:int=5): pass\nf', 0, 'x: int=5', 'KEYWORD_ONLY'), + ('def f(*args, x): pass\nf', 1, 'x', 'KEYWORD_ONLY'), + ] +) +def test_param_kind_and_name(code, index, param_code, kind, Script, skip_python2): + func, = Script(code).goto_assignments() + sig, = func.get_signatures() + param = sig.params[index] + assert param.to_string() == param_code + assert param.kind.name == kind + + +def test_staticmethod(Script): + s, = Script('staticmethod(').call_signatures() + assert s.to_string() == 'staticmethod(f: Callable)' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_unicode.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_unicode.py new file mode 100644 index 0000000..7fd28bb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_unicode.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +""" +All character set and unicode related tests. +""" +from jedi._compatibility import u, unicode + + +def test_unicode_script(Script): + """ normally no unicode objects are being used. (<=2.7) """ + s = unicode("import datetime; datetime.timedelta") + completions = Script(s).completions() + assert len(completions) + assert type(completions[0].description) is unicode + + s = u("author='öä'; author") + completions = Script(s).completions() + x = completions[0].description + assert type(x) is unicode + + s = u("#-*- coding: iso-8859-1 -*-\nauthor='öä'; author") + s = s.encode('latin-1') + completions = Script(s).completions() + assert type(completions[0].description) is unicode + + +def test_unicode_attribute(Script): + """ github jedi-vim issue #94 """ + s1 = u('#-*- coding: utf-8 -*-\nclass Person():\n' + ' name = "e"\n\nPerson().name.') + completions1 = Script(s1).completions() + assert 'strip' in [c.name for c in completions1] + s2 = u('#-*- coding: utf-8 -*-\nclass Person():\n' + ' name = "é"\n\nPerson().name.') + completions2 = Script(s2).completions() + assert 'strip' in [c.name for c in completions2] + + +def test_multibyte_script(Script): + """ `jedi.Script` must accept multi-byte string source. """ + try: + code = u("import datetime; datetime.d") + comment = u("# multi-byte comment あいうえおä") + s = (u('%s\n%s') % (code, comment)).encode('utf-8') + except NameError: + pass # python 3 has no unicode method + else: + assert len(Script(s, 1, len(code)).completions()) + + +def test_goto_definition_at_zero(Script): + """At zero usually sometimes raises unicode issues.""" + assert Script("a", 1, 1).goto_definitions() == [] + s = Script("str", 1, 1).goto_definitions() + assert len(s) == 1 + assert list(s)[0].description == 'class str' + assert Script("", 1, 0).goto_definitions() == [] + + +def test_complete_at_zero(Script): + s = Script("str", 1, 3).completions() + assert len(s) == 1 + assert list(s)[0].name == 'str' + + s = Script("", 1, 0).completions() + assert len(s) > 0 + + +def test_wrong_encoding(Script, tmpdir): + x = tmpdir.join('x.py') + # Use both latin-1 and utf-8 (a really broken file). + x.write_binary(u'foobar = 1\nä'.encode('latin-1') + u'ä'.encode('utf-8')) + + c, = Script('import x; x.foo', sys_path=[tmpdir.strpath]).completions() + assert c.name == 'foobar' + + +def test_encoding_parameter(Script): + name = u('hö') + s = Script(name.encode('latin-1'), encoding='latin-1') + assert s._module_node.get_code() == name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_usages.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_usages.py new file mode 100644 index 0000000..245951b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_api/test_usages.py @@ -0,0 +1,14 @@ +def test_import_usage(Script): + s = Script("from .. import foo", line=1, column=18, path="foo.py") + assert [usage.line for usage in s.usages()] == [1] + + +def test_exclude_builtin_modules(Script): + def get(include): + return [(d.line, d.column) for d in Script(source, column=8).usages(include_builtins=include)] + source = '''import sys\nprint(sys.path)''' + places = get(include=True) + assert len(places) > 2 # Includes stubs + + places = get(include=False) + assert places == [(1, 7), (2, 6)] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_cache.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_cache.py new file mode 100644 index 0000000..79bdefc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_cache.py @@ -0,0 +1,29 @@ +""" +Test all things related to the ``jedi.cache`` module. +""" + + +def test_cache_call_signatures(Script): + """ + See github issue #390. + """ + def check(column, call_name, path=None): + assert Script(s, 1, column, path).call_signatures()[0].name == call_name + + s = 'str(int())' + + for i in range(3): + check(8, 'int') + check(4, 'str') + # Can keep doing these calls and always get the right result. + + # Now lets specify a source_path of boo and alternate these calls, it + # should still work. + for i in range(3): + check(8, 'int', 'boo') + check(4, 'str', 'boo') + + +def test_cache_line_split_issues(Script): + """Should still work even if there's a newline.""" + assert Script('int(\n').call_signatures()[0].name == 'int' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_compatibility.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_compatibility.py new file mode 100644 index 0000000..01c9dae --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_compatibility.py @@ -0,0 +1,26 @@ +from collections import namedtuple +from jedi._compatibility import highest_pickle_protocol + + +def test_highest_pickle_protocol(): + v = namedtuple('version', 'major, minor') + assert highest_pickle_protocol([v(2, 7), v(2, 7)]) == 2 + assert highest_pickle_protocol([v(2, 7), v(3, 3)]) == 2 + assert highest_pickle_protocol([v(2, 7), v(3, 4)]) == 2 + assert highest_pickle_protocol([v(2, 7), v(3, 5)]) == 2 + assert highest_pickle_protocol([v(2, 7), v(3, 6)]) == 2 + assert highest_pickle_protocol([v(3, 3), v(2, 7)]) == 2 + assert highest_pickle_protocol([v(3, 3), v(3, 3)]) == 3 + assert highest_pickle_protocol([v(3, 3), v(3, 4)]) == 3 + assert highest_pickle_protocol([v(3, 3), v(3, 5)]) == 3 + assert highest_pickle_protocol([v(3, 3), v(3, 6)]) == 3 + assert highest_pickle_protocol([v(3, 4), v(2, 7)]) == 2 + assert highest_pickle_protocol([v(3, 4), v(3, 3)]) == 3 + assert highest_pickle_protocol([v(3, 4), v(3, 4)]) == 4 + assert highest_pickle_protocol([v(3, 4), v(3, 5)]) == 4 + assert highest_pickle_protocol([v(3, 4), v(3, 6)]) == 4 + assert highest_pickle_protocol([v(3, 6), v(2, 7)]) == 2 + assert highest_pickle_protocol([v(3, 6), v(3, 3)]) == 3 + assert highest_pickle_protocol([v(3, 6), v(3, 4)]) == 4 + assert highest_pickle_protocol([v(3, 6), v(3, 5)]) == 4 + assert highest_pickle_protocol([v(3, 6), v(3, 6)]) == 4 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_debug.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_debug.py new file mode 100644 index 0000000..0033107 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_debug.py @@ -0,0 +1,9 @@ +import jedi +from jedi import debug + +def test_simple(): + jedi.set_debug_function() + debug.speed('foo') + debug.dbg('bar') + debug.warning('baz') + jedi.set_debug_function(None, False, False, False) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/local_module.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/local_module.py new file mode 100644 index 0000000..aa4bf00 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/local_module.py @@ -0,0 +1,14 @@ +""" +This is a module that imports the *standard library* unittest, +despite there being a local "unittest" module. It specifies that it +wants the stdlib one with the ``absolute_import`` __future__ import. + +The twisted equivalent of this module is ``twisted.trial._synctest``. +""" +from __future__ import absolute_import + +import unittest + + +class Assertions(unittest.TestCase): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/unittest.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/unittest.py new file mode 100644 index 0000000..eee1e93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/absolute_import/unittest.py @@ -0,0 +1,14 @@ +""" +This is a module that shadows a builtin (intentionally). + +It imports a local module, which in turn imports stdlib unittest (the +name shadowed by this module). If that is properly resolved, there's +no problem. However, if jedi doesn't understand absolute_imports, it +will get this module again, causing infinite recursion. +""" +from local_module import Assertions + + +class TestCase(Assertions): + def test(self): + self.assertT diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py new file mode 100644 index 0000000..e876bc1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/__init__.py @@ -0,0 +1 @@ + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask/ext/__init__.py @@ -0,0 +1 @@ + diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py new file mode 100644 index 0000000..e9b3fff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_baz/__init__.py @@ -0,0 +1 @@ +Baz = 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_foo.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_foo.py new file mode 100644 index 0000000..0b910b8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flask_foo.py @@ -0,0 +1,2 @@ +class Foo(object): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py new file mode 100644 index 0000000..6629f9a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/bar.py @@ -0,0 +1,2 @@ +class Bar(object): + pass diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py new file mode 100644 index 0000000..266e809 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/flask-site-packages/flaskext/moo/__init__.py @@ -0,0 +1 @@ +Moo = 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns1/pkg/ns1_file.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns1/pkg/ns1_file.py new file mode 100644 index 0000000..940279f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns1/pkg/ns1_file.py @@ -0,0 +1 @@ +foo = 'ns1_file!' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns2/pkg/ns2_file.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns2/pkg/ns2_file.py new file mode 100644 index 0000000..e87d7d8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_namespace_package/ns2/pkg/ns2_file.py @@ -0,0 +1 @@ +foo = 'ns2_file!' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_nested_namespaces/namespace/pkg/module.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_nested_namespaces/namespace/pkg/module.py new file mode 100644 index 0000000..3c37820 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/implicit_nested_namespaces/namespace/pkg/module.py @@ -0,0 +1 @@ +CONST = 1 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/init_extension_module/__init__.cpython-34m.so new file mode 100755 index 0000000000000000000000000000000000000000..abfadc39cf3f41ffd58890d8696622dadae2513a GIT binary patch literal 16493 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 bcq 3: + return a + + annot_ret('')""") + assert [d.name for d in Script(source).goto_definitions()] == ['str'] + + source = dedent("""\ + def annot(a:int): + return a + + annot('')""") + + assert [d.name for d in Script(source).goto_definitions()] == ['int'] + + +@pytest.mark.parametrize('reference', [ + 'assert 1', + '1', + 'def x(): pass', + '1, 2', + r'1\n' +]) +def test_illegal_forward_references(Script, environment, reference): + if environment.version_info.major == 2: + pytest.skip() + + source = 'def foo(bar: "%s"): bar' % reference + + assert not Script(source).goto_definitions() + + +def test_lambda_forward_references(Script, environment): + if environment.version_info.major == 2: + pytest.skip() + + source = 'def foo(bar: "lambda: 3"): bar' + + # For now just receiving the 3 is ok. I'm doubting that this is what we + # want. We also execute functions. Should we only execute classes? + assert Script(source).goto_definitions() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_buildout_detection.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_buildout_detection.py new file mode 100644 index 0000000..622ded2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_buildout_detection.py @@ -0,0 +1,91 @@ +import os +from textwrap import dedent + +from jedi._compatibility import force_unicode +from jedi.evaluate.sys_path import (_get_parent_dir_with_file, + _get_buildout_script_paths, + check_sys_path_modifications) + +from ..helpers import cwd_at + + +def check_module_test(Script, code): + module_context = Script(code)._get_module() + return check_sys_path_modifications(module_context) + + +@cwd_at('test/examples/buildout_project/src/proj_name') +def test_parent_dir_with_file(Script): + parent = _get_parent_dir_with_file( + os.path.abspath(os.curdir), 'buildout.cfg') + assert parent is not None + assert parent.endswith(os.path.join('test', 'examples', 'buildout_project')) + + +@cwd_at('test/examples/buildout_project/src/proj_name') +def test_buildout_detection(Script): + scripts = list(_get_buildout_script_paths(os.path.abspath('./module_name.py'))) + assert len(scripts) == 1 + curdir = os.path.abspath(os.curdir) + appdir_path = os.path.normpath(os.path.join(curdir, '../../bin/app')) + assert scripts[0] == appdir_path + + +def test_append_on_non_sys_path(Script): + code = dedent(""" + class Dummy(object): + path = [] + + d = Dummy() + d.path.append('foo')""" + ) + + paths = check_module_test(Script, code) + assert not paths + assert 'foo' not in paths + + +def test_path_from_invalid_sys_path_assignment(Script): + code = dedent(""" + import sys + sys.path = 'invalid'""" + ) + + paths = check_module_test(Script, code) + assert not paths + assert 'invalid' not in paths + + +@cwd_at('test/examples/buildout_project/src/proj_name/') +def test_sys_path_with_modifications(Script): + code = dedent(""" + import os + """) + + path = os.path.abspath(os.path.join(os.curdir, 'module_name.py')) + paths = Script(code, path=path)._evaluator.get_sys_path() + assert '/tmp/.buildout/eggs/important_package.egg' in paths + + +def test_path_from_sys_path_assignment(Script): + code = dedent(""" + #!/usr/bin/python + + import sys + sys.path[0:0] = [ + '/usr/lib/python3.4/site-packages', + '/home/test/.buildout/eggs/important_package.egg' + ] + + path[0:0] = [1] + + import important_package + + if __name__ == '__main__': + sys.exit(important_package.main())""" + ) + + paths = check_module_test(Script, code) + paths = list(map(force_unicode, paths)) + assert 1 not in paths + assert '/home/test/.buildout/eggs/important_package.egg' in paths diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_compiled.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_compiled.py new file mode 100644 index 0000000..00bda1e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_compiled.py @@ -0,0 +1,171 @@ +from textwrap import dedent +import math +import sys +from collections import Counter +from datetime import datetime + +import pytest + +from jedi.evaluate import compiled +from jedi.evaluate.compiled.access import DirectObjectAccess +from jedi.evaluate.gradual.conversion import _stub_to_python_context_set + + +def test_simple(evaluator, environment): + obj = compiled.create_simple_object(evaluator, u'_str_') + upper, = obj.py__getattribute__(u'upper') + objs = list(upper.execute_evaluated()) + assert len(objs) == 1 + if environment.version_info.major == 2: + expected = 'unicode' + else: + expected = 'str' + assert objs[0].name.string_name == expected + + +def test_builtin_loading(evaluator): + string, = evaluator.builtins_module.py__getattribute__(u'str') + from_name, = string.py__getattribute__(u'__init__') + assert from_name.tree_node + assert not from_name.py__doc__() # It's a stub + + +def test_next_docstr(evaluator): + next_ = compiled.builtin_from_name(evaluator, u'next') + assert next_.tree_node is not None + assert next_.py__doc__() == '' # It's a stub + for non_stub in _stub_to_python_context_set(next_): + assert non_stub.py__doc__() == next.__doc__ + + +def test_parse_function_doc_illegal_docstr(): + docstr = """ + test_func(o + + doesn't have a closing bracket. + """ + assert ('', '') == compiled.context._parse_function_doc(docstr) + + +def test_doc(evaluator): + """ + Even CompiledObject docs always return empty docstrings - not None, that's + just a Jedi API definition. + """ + str_ = compiled.create_simple_object(evaluator, u'') + # Equals `''.__getnewargs__` + obj, = str_.py__getattribute__(u'__getnewargs__') + assert obj.py__doc__() == '' + + +def test_string_literals(Script, environment): + def typ(string): + d = Script("a = %s; a" % string).goto_definitions()[0] + return d.name + + assert typ('""') == 'str' + assert typ('r""') == 'str' + if environment.version_info.major > 2: + assert typ('br""') == 'bytes' + assert typ('b""') == 'bytes' + assert typ('u""') == 'str' + else: + assert typ('b""') == 'str' + assert typ('u""') == 'unicode' + + +def test_method_completion(Script, environment): + code = dedent(''' + class Foo: + def bar(self): + pass + + foo = Foo() + foo.bar.__func__''') + assert [c.name for c in Script(code).completions()] == ['__func__'] + + +def test_time_docstring(Script): + import time + comp, = Script('import time\ntime.sleep').completions() + assert comp.docstring(raw=True) == time.sleep.__doc__ + expected = 'sleep(secs: float) -> None\n\n' + time.sleep.__doc__ + assert comp.docstring() == expected + + +def test_dict_values(Script, environment): + if environment.version_info.major == 2: + # It looks like typeshed for Python 2 returns Any. + pytest.skip() + assert Script('import sys\nsys.modules["alshdb;lasdhf"]').goto_definitions() + + +def test_getitem_on_none(Script): + script = Script('None[1j]') + assert not script.goto_definitions() + issue, = script._evaluator.analysis + assert issue.name == 'type-error-not-subscriptable' + + +def _return_int(): + return 1 + + +@pytest.mark.parametrize( + 'attribute, expected_name, expected_parent', [ + ('x', 'int', 'builtins'), + ('y', 'int', 'builtins'), + ('z', 'bool', 'builtins'), + ('cos', 'cos', 'math'), + ('dec', 'Decimal', 'decimal'), + ('dt', 'datetime', 'datetime'), + ('ret_int', '_return_int', 'test.test_evaluate.test_compiled'), + ] +) +def test_parent_context(same_process_evaluator, attribute, expected_name, expected_parent): + import decimal + + class C: + x = 1 + y = int + z = True + cos = math.cos + dec = decimal.Decimal(1) + dt = datetime(2000, 1, 1) + ret_int = _return_int + + o = compiled.CompiledObject( + same_process_evaluator, + DirectObjectAccess(same_process_evaluator, C) + ) + x, = o.py__getattribute__(attribute) + assert x.py__name__() == expected_name + module_name = x.parent_context.py__name__() + if module_name == '__builtin__': + module_name = 'builtins' # Python 2 + assert module_name == expected_parent + assert x.parent_context.parent_context is None + + +@pytest.mark.skipif(sys.version_info[0] == 2, reason="Ignore Python 2, because EOL") +@pytest.mark.parametrize( + 'obj, expected_names', [ + ('', ['str']), + (str, ['str']), + (''.upper, ['str', 'upper']), + (str.upper, ['str', 'upper']), + + (math.cos, ['cos']), + + (Counter, ['Counter']), + (Counter(""), ['Counter']), + (Counter.most_common, ['Counter', 'most_common']), + (Counter("").most_common, ['Counter', 'most_common']), + ] +) +def test_qualified_names(same_process_evaluator, obj, expected_names): + o = compiled.CompiledObject( + same_process_evaluator, + DirectObjectAccess(same_process_evaluator, obj) + ) + assert o.get_qualified_names() == tuple(expected_names) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_context.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_context.py new file mode 100644 index 0000000..a5ed8ce --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_context.py @@ -0,0 +1,21 @@ +from jedi._compatibility import force_unicode + + +def test_module_attributes(Script): + def_, = Script('__name__').completions() + assert def_.name == '__name__' + assert def_.line is None + assert def_.column is None + str_, = def_.infer() + assert str_.name == 'str' + + +def test_module__file__(Script, environment): + assert not Script('__file__').goto_definitions() + def_, = Script('__file__', path='example.py').goto_definitions() + value = force_unicode(def_._name._context.get_safe_value()) + assert value.endswith('example.py') + + def_, = Script('import antigravity; antigravity.__file__').goto_definitions() + value = force_unicode(def_._name._context.get_safe_value()) + assert value.endswith('.py') diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_docstring.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_docstring.py new file mode 100644 index 0000000..269a54c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_docstring.py @@ -0,0 +1,416 @@ +""" +Testing of docstring related issues and especially ``jedi.docstrings``. +""" + +from textwrap import dedent +import jedi +import pytest +from ..helpers import unittest +import sys + +try: + import numpydoc # NOQA +except ImportError: + numpydoc_unavailable = True +else: + numpydoc_unavailable = False + +try: + import numpy # NOQA +except ImportError: + numpy_unavailable = True +else: + numpy_unavailable = False + +if sys.version_info.major == 2: + # In Python 2 there's an issue with tox/docutils that makes the tests fail, + # Python 2 is soon end-of-life, so just don't support numpydoc for it anymore. + numpydoc_unavailable = True + + +def test_function_doc(Script): + defs = Script(""" + def func(): + '''Docstring of `func`.''' + func""").goto_definitions() + assert defs[0].docstring() == 'func()\n\nDocstring of `func`.' + + +def test_class_doc(Script): + defs = Script(""" + class TestClass(): + '''Docstring of `TestClass`.''' + TestClass""").goto_definitions() + + expected = 'Docstring of `TestClass`.' + assert defs[0].docstring(raw=True) == expected + assert defs[0].docstring() == 'TestClass()\n\n' + expected + + +def test_class_doc_with_init(Script): + d, = Script(""" + class TestClass(): + '''Docstring''' + def __init__(self, foo, bar=3): pass + TestClass""").goto_definitions() + + assert d.docstring() == 'TestClass(foo, bar=3)\n\nDocstring' + + +def test_instance_doc(Script): + defs = Script(""" + class TestClass(): + '''Docstring of `TestClass`.''' + tc = TestClass() + tc""").goto_definitions() + assert defs[0].docstring() == 'Docstring of `TestClass`.' + + +@unittest.skip('need evaluator class for that') +def test_attribute_docstring(Script): + defs = Script(""" + x = None + '''Docstring of `x`.''' + x""").goto_definitions() + assert defs[0].docstring() == 'Docstring of `x`.' + + +@unittest.skip('need evaluator class for that') +def test_multiple_docstrings(Script): + defs = Script(""" + def func(): + '''Original docstring.''' + x = func + '''Docstring of `x`.''' + x""").goto_definitions() + docs = [d.docstring() for d in defs] + assert docs == ['Original docstring.', 'Docstring of `x`.'] + + +def test_completion(Script): + assert Script(''' + class DocstringCompletion(): + #? [] + """ asdfas """''').completions() + + +def test_docstrings_type_dotted_import(Script): + s = """ + def func(arg): + ''' + :type arg: random.Random + ''' + arg.""" + names = [c.name for c in Script(s).completions()] + assert 'seed' in names + + +def test_docstrings_param_type(Script): + s = """ + def func(arg): + ''' + :param str arg: some description + ''' + arg.""" + names = [c.name for c in Script(s).completions()] + assert 'join' in names + + +def test_docstrings_type_str(Script): + s = """ + def func(arg): + ''' + :type arg: str + ''' + arg.""" + + names = [c.name for c in Script(s).completions()] + assert 'join' in names + + +def test_docstring_instance(Script): + # The types hint that it's a certain kind + s = dedent(""" + class A: + def __init__(self,a): + ''' + :type a: threading.Thread + ''' + + if a is not None: + a.start() + + self.a = a + + + def method_b(c): + ''' + :type c: A + ''' + + c.""") + + names = [c.name for c in Script(s).completions()] + assert 'a' in names + assert '__init__' in names + assert 'mro' not in names # Exists only for types. + + +def test_docstring_keyword(Script): + completions = Script('assert').completions() + assert 'assert' in completions[0].docstring() + + +def test_docstring_params_formatting(Script): + defs = Script(""" + def func(param1, + param2, + param3): + pass + func""").goto_definitions() + assert defs[0].docstring() == 'func(param1, param2, param3)' + + +# ---- Numpy Style Tests --- + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_parameters(): + s = dedent(''' + def foobar(x, y): + """ + Parameters + ---------- + x : int + y : str + """ + y.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_parameters_set_of_values(): + s = dedent(''' + def foobar(x, y): + """ + Parameters + ---------- + x : {'foo', 'bar', 100500}, optional + """ + x.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + assert 'numerator' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_parameters_alternative_types(): + s = dedent(''' + def foobar(x, y): + """ + Parameters + ---------- + x : int or str or list + """ + x.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + assert 'numerator' in names + assert 'append' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_invalid(): + s = dedent(''' + def foobar(x, y): + """ + Parameters + ---------- + x : int (str, py.path.local + """ + x.''') + + assert not jedi.Script(s).completions() + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_returns(): + s = dedent(''' + def foobar(): + """ + Returns + ---------- + x : int + y : str + """ + return x + + def bazbiz(): + z = foobar() + z.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + assert 'numerator' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_returns_set_of_values(): + s = dedent(''' + def foobar(): + """ + Returns + ---------- + x : {'foo', 'bar', 100500} + """ + return x + + def bazbiz(): + z = foobar() + z.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + assert 'numerator' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_returns_alternative_types(): + s = dedent(''' + def foobar(): + """ + Returns + ---------- + int or list of str + """ + return x + + def bazbiz(): + z = foobar() + z.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' not in names + assert 'capitalize' not in names + assert 'numerator' in names + assert 'append' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_returns_list_of(): + s = dedent(''' + def foobar(): + """ + Returns + ---------- + list of str + """ + return x + + def bazbiz(): + z = foobar() + z.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'append' in names + assert 'isupper' not in names + assert 'capitalize' not in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_returns_obj(): + s = dedent(''' + def foobar(x, y): + """ + Returns + ---------- + int or random.Random + """ + return x + y + + def bazbiz(): + z = foobar(x, y) + z.''') + script = jedi.Script(s) + names = [c.name for c in script.completions()] + assert 'numerator' in names + assert 'seed' in names + + +@pytest.mark.skipif(numpydoc_unavailable, + reason='numpydoc module is unavailable') +def test_numpydoc_yields(): + s = dedent(''' + def foobar(): + """ + Yields + ---------- + x : int + y : str + """ + return x + + def bazbiz(): + z = foobar(): + z.''') + names = [c.name for c in jedi.Script(s).completions()] + assert 'isupper' in names + assert 'capitalize' in names + assert 'numerator' in names + + +@pytest.mark.skipif(numpydoc_unavailable or numpy_unavailable, + reason='numpydoc or numpy module is unavailable') +def test_numpy_returns(): + s = dedent(''' + import numpy + x = numpy.asarray([]) + x.d''' + ) + names = [c.name for c in jedi.Script(s).completions()] + assert 'diagonal' in names + + +@pytest.mark.skipif(numpydoc_unavailable or numpy_unavailable, + reason='numpydoc or numpy module is unavailable') +def test_numpy_comp_returns(): + s = dedent(''' + import numpy + x = numpy.array([]) + x.d''' + ) + names = [c.name for c in jedi.Script(s).completions()] + assert 'diagonal' in names + + +def test_decorator(Script): + code = dedent(''' + def decorator(name=None): + def _decorate(func): + @wraps(func) + def wrapper(*args, **kwargs): + """wrapper docstring""" + return func(*args, **kwargs) + return wrapper + return _decorate + + + @decorator('testing') + def check_user(f): + """Nice docstring""" + pass + + check_user''') + + d, = Script(code).goto_definitions() + assert d.docstring(raw=True) == 'Nice docstring' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_extension.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_extension.py new file mode 100644 index 0000000..7dfcfd0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_extension.py @@ -0,0 +1,57 @@ +""" +Test compiled module +""" +import os + +import jedi +from ..helpers import cwd_at +import pytest + + +def test_completions(Script): + s = Script('import _ctypes; _ctypes.') + assert len(s.completions()) >= 15 + + +def test_call_signatures_extension(Script): + if os.name == 'nt': + func = 'LoadLibrary' + params = 1 + else: + func = 'dlopen' + params = 2 + s = Script('import _ctypes; _ctypes.%s(' % (func,)) + sigs = s.call_signatures() + assert len(sigs) == 1 + assert len(sigs[0].params) == params + + +def test_call_signatures_stdlib(Script): + s = Script('import math; math.cos(') + sigs = s.call_signatures() + assert len(sigs) == 1 + assert len(sigs[0].params) == 1 + + +# Check only on linux 64 bit platform and Python3.4. +@pytest.mark.skipif('sys.platform != "linux" or sys.maxsize <= 2**32 or sys.version_info[:2] != (3, 4)') +@cwd_at('test/test_evaluate') +def test_init_extension_module(Script): + """ + ``__init__`` extension modules are also packages and Jedi should understand + that. + + Originally coming from #472. + + This test was built by the module.c and setup.py combination you can find + in the init_extension_module folder. You can easily build the + `__init__.cpython-34m.so` by compiling it (create a virtualenv and run + `setup.py install`. + + This is also why this test only runs on certain systems (and Python 3.4). + """ + s = jedi.Script('import init_extension_module as i\ni.', path='not_existing.py') + assert 'foo' in [c.name for c in s.completions()] + + s = jedi.Script('from init_extension_module import foo\nfoo', path='not_existing.py') + assert ['foo'] == [c.name for c in s.completions()] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_fstring.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_fstring.py new file mode 100644 index 0000000..2805e44 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_fstring.py @@ -0,0 +1,19 @@ +import pytest +from textwrap import dedent + + +@pytest.fixture(autouse=True) +def skip_not_supported(environment): + if environment.version_info < (3, 6): + pytest.skip() + + +def test_fstring_multiline(Script): + code = dedent("""\ + '' f'''s{ + str.uppe + ''' + """ + ) + c, = Script(code, line=2, column=9).completions() + assert c.name == 'upper' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stub_loading.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stub_loading.py new file mode 100644 index 0000000..40dcffa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stub_loading.py @@ -0,0 +1,27 @@ +from functools import partial +from test.helpers import get_example_dir +from jedi.api.project import Project + +import pytest + + +@pytest.fixture +def ScriptInStubFolder(Script): + path = get_example_dir('stub_packages') + project = Project(path, sys_path=[path], smart_sys_path=False) + return partial(Script, _project=project) + + +@pytest.mark.parametrize( + ('code', 'expected'), [ + ('from no_python import foo', ['int']), + ('from with_python import stub_only', ['str']), + ('from with_python import python_only', ['int']), + ('from with_python import both', ['int']), + ('from with_python import something_random', []), + ('from with_python.module import in_sub_module', ['int']), + ] +) +def test_find_stubs_infer(ScriptInStubFolder, code, expected): + defs = ScriptInStubFolder(code).goto_definitions() + assert [d.name for d in defs] == expected diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stubs.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stubs.py new file mode 100644 index 0000000..0782469 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_stubs.py @@ -0,0 +1,94 @@ +import os + +import pytest + +from jedi.api.project import Project +from test.helpers import root_dir + + +@pytest.mark.parametrize('type_', ['goto', 'infer']) +@pytest.mark.parametrize('way', ['direct', 'indirect']) +@pytest.mark.parametrize( + 'kwargs', [ + dict(only_stubs=False, prefer_stubs=False), + dict(only_stubs=False, prefer_stubs=True), + dict(only_stubs=True, prefer_stubs=False), + ] +) +@pytest.mark.parametrize( + ('code', 'full_name', 'has_stub', 'has_python', 'goto_changes'), [ + ['import os; os.walk', 'os.walk', True, True, {}], + ['from collections import Counter', 'collections.Counter', True, True, {}], + ['from collections', 'collections', True, True, {}], + ['from collections import Counter; Counter', 'collections.Counter', True, True, {}], + ['from collections import Counter; Counter()', 'collections.Counter', True, True, {}], + ['from collections import Counter; Counter.most_common', + 'collections.Counter.most_common', True, True, {}], + ['from collections import deque', 'collections.deque', True, False, {'has_python': True}], + + ['from keyword import kwlist; kwlist', 'typing.Sequence', True, True, + {'full_name': 'keyword.kwlist'}], + ['from keyword import kwlist', 'typing.Sequence', True, True, + {'full_name': 'keyword.kwlist'}], + + ['from socket import AF_INET', 'socket.AddressFamily', True, False, + {'full_name': 'socket.AF_INET'}], + ['from socket import socket', 'socket.socket', True, True, {}], + + ['import with_stub', 'with_stub', True, True, {}], + ['import with_stub', 'with_stub', True, True, {}], + ['import with_stub_folder.python_only', 'with_stub_folder.python_only', False, True, {}], + ['import stub_only', 'stub_only', True, False, {}], + ]) +def test_infer_and_goto(Script, code, full_name, has_stub, has_python, way, + kwargs, type_, goto_changes, environment): + if environment.version_info < (3, 5): + # We just don't care about much of the detailed Python 2 failures + # anymore, because its end-of-life soon. (same for 3.4) + pytest.skip() + + if type_ == 'infer' and full_name == 'typing.Sequence' and environment.version_info >= (3, 7): + # In Python 3.7+ there's not really a sequence definition, there's just + # a name that leads nowhere. + has_python = False + + project = Project(os.path.join(root_dir, 'test', 'completion', 'stub_folder')) + s = Script(code, _project=project) + prefer_stubs = kwargs['prefer_stubs'] + only_stubs = kwargs['only_stubs'] + + if type_ == 'goto': + full_name = goto_changes.get('full_name', full_name) + has_python = goto_changes.get('has_python', has_python) + + if way == 'direct': + if type_ == 'goto': + defs = s.goto_assignments(follow_imports=True, **kwargs) + else: + defs = s.goto_definitions(**kwargs) + else: + goto_defs = s.goto_assignments( + # Prefering stubs when we want to go to python and vice versa + prefer_stubs=not (prefer_stubs or only_stubs), + follow_imports=True, + ) + if type_ == 'goto': + defs = [d for goto_def in goto_defs for d in goto_def.goto_assignments(**kwargs)] + else: + defs = [d for goto_def in goto_defs for d in goto_def.infer(**kwargs)] + + if not has_stub and only_stubs: + assert not defs + else: + assert defs + + for d in defs: + if prefer_stubs and has_stub: + assert d.is_stub() + elif only_stubs: + assert d.is_stub() + else: + assert has_python == (not d.is_stub()) + assert d.full_name == full_name + + assert d.is_stub() == d.module_path.endswith('.pyi') diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_typeshed.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_typeshed.py new file mode 100644 index 0000000..4cd485a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_gradual/test_typeshed.py @@ -0,0 +1,236 @@ +import os + +import pytest +from parso.utils import PythonVersionInfo + +from jedi.evaluate.gradual import typeshed, stub_context +from jedi.evaluate.context import TreeInstance, BoundMethod, FunctionContext, \ + MethodContext, ClassContext + +TYPESHED_PYTHON3 = os.path.join(typeshed.TYPESHED_PATH, 'stdlib', '3') + + +def test_get_typeshed_directories(): + def get_dirs(version_info): + return { + d.replace(typeshed.TYPESHED_PATH, '').lstrip(os.path.sep) + for d in typeshed._get_typeshed_directories(version_info) + } + + def transform(set_): + return {x.replace('/', os.path.sep) for x in set_} + + dirs = get_dirs(PythonVersionInfo(2, 7)) + assert dirs == transform({'stdlib/2and3', 'stdlib/2', 'third_party/2and3', 'third_party/2'}) + + dirs = get_dirs(PythonVersionInfo(3, 4)) + assert dirs == transform({'stdlib/2and3', 'stdlib/3', 'third_party/2and3', 'third_party/3'}) + + dirs = get_dirs(PythonVersionInfo(3, 5)) + assert dirs == transform({'stdlib/2and3', 'stdlib/3', 'stdlib/3.5', + 'third_party/2and3', 'third_party/3', 'third_party/3.5'}) + + dirs = get_dirs(PythonVersionInfo(3, 6)) + assert dirs == transform({'stdlib/2and3', 'stdlib/3', 'stdlib/3.5', + 'stdlib/3.6', 'third_party/2and3', + 'third_party/3', 'third_party/3.5', 'third_party/3.6'}) + + +def test_get_stub_files(): + def get_map(version_info): + return typeshed._create_stub_map(version_info) + + map_ = typeshed._create_stub_map(TYPESHED_PYTHON3) + assert map_['functools'] == os.path.join(TYPESHED_PYTHON3, 'functools.pyi') + + +def test_function(Script, environment): + code = 'import threading; threading.current_thread' + def_, = Script(code).goto_definitions() + context = def_._name._context + assert isinstance(context, FunctionContext), context + + def_, = Script(code + '()').goto_definitions() + context = def_._name._context + assert isinstance(context, TreeInstance) + + def_, = Script('import threading; threading.Thread').goto_definitions() + assert isinstance(def_._name._context, ClassContext), def_ + + +def test_keywords_variable(Script): + code = 'import keyword; keyword.kwlist' + for seq in Script(code).goto_definitions(): + assert seq.name == 'Sequence' + # This points towards the typeshed implementation + stub_seq, = seq.goto_assignments(only_stubs=True) + assert typeshed.TYPESHED_PATH in stub_seq.module_path + + +def test_class(Script): + def_, = Script('import threading; threading.Thread').goto_definitions() + context = def_._name._context + assert isinstance(context, ClassContext), context + + +def test_instance(Script): + def_, = Script('import threading; threading.Thread()').goto_definitions() + context = def_._name._context + assert isinstance(context, TreeInstance) + + +def test_class_function(Script): + def_, = Script('import threading; threading.Thread.getName').goto_definitions() + context = def_._name._context + assert isinstance(context, MethodContext), context + + +def test_method(Script): + code = 'import threading; threading.Thread().getName' + def_, = Script(code).goto_definitions() + context = def_._name._context + assert isinstance(context, BoundMethod), context + assert isinstance(context._wrapped_context, MethodContext), context + + def_, = Script(code + '()').goto_definitions() + context = def_._name._context + assert isinstance(context, TreeInstance) + assert context.class_context.py__name__() == 'str' + + +def test_sys_exc_info(Script): + code = 'import sys; sys.exc_info()' + none, def_ = Script(code + '[1]').goto_definitions() + # It's an optional. + assert def_.name == 'BaseException' + assert def_.type == 'instance' + assert none.name == 'NoneType' + + none, def_ = Script(code + '[0]').goto_definitions() + assert def_.name == 'BaseException' + assert def_.type == 'class' + + +def test_sys_getwindowsversion(Script, environment): + # This should only exist on Windows, but type inference should happen + # everywhere. + definitions = Script('import sys; sys.getwindowsversion().major').goto_definitions() + if environment.version_info.major == 2: + assert not definitions + else: + def_, = definitions + assert def_.name == 'int' + + +def test_sys_hexversion(Script): + script = Script('import sys; sys.hexversion') + def_, = script.completions() + assert isinstance(def_._name, stub_context._StubName), def_._name + assert typeshed.TYPESHED_PATH in def_.module_path + def_, = script.goto_definitions() + assert def_.name == 'int' + + +def test_math(Script): + def_, = Script('import math; math.acos()').goto_definitions() + assert def_.name == 'float' + context = def_._name._context + assert context + + +def test_type_var(Script): + def_, = Script('import typing; T = typing.TypeVar("T1")').goto_definitions() + assert def_.name == 'TypeVar' + assert def_.description == 'TypeVar = object()' + + +@pytest.mark.parametrize( + 'code, full_name', ( + ('import math', 'math'), + ('from math import cos', 'math.cos') + ) +) +def test_math_is_stub(Script, code, full_name): + s = Script(code) + cos, = s.goto_definitions() + wanted = os.path.join('typeshed', 'stdlib', '2and3', 'math.pyi') + assert cos.module_path.endswith(wanted) + assert cos.is_stub() is True + assert cos.goto_assignments(only_stubs=True) == [cos] + assert cos.full_name == full_name + + cos, = s.goto_assignments() + assert cos.module_path.endswith(wanted) + assert cos.goto_assignments(only_stubs=True) == [cos] + assert cos.is_stub() is True + assert cos.full_name == full_name + + +def test_goto_stubs(Script): + s = Script('import os; os') + os_module, = s.goto_definitions() + assert os_module.full_name == 'os' + assert os_module.is_stub() is False + stub, = os_module.goto_assignments(only_stubs=True) + assert stub.is_stub() is True + + os_module, = s.goto_assignments() + + +def _assert_is_same(d1, d2): + assert d1.name == d2.name + assert d1.module_path == d2.module_path + assert d1.line == d2.line + assert d1.column == d2.column + + +@pytest.mark.parametrize('type_', ['goto', 'infer']) +@pytest.mark.parametrize( + 'code', [ + 'import os; os.walk', + 'from collections import Counter; Counter', + 'from collections import Counter; Counter()', + 'from collections import Counter; Counter.most_common', + ]) +def test_goto_stubs_on_itself(Script, code, type_): + """ + If goto_stubs is used on an identifier in e.g. the stdlib, we should goto + the stub of it. + """ + s = Script(code) + if type_ == 'infer': + def_, = s.goto_definitions() + else: + def_, = s.goto_assignments(follow_imports=True) + stub, = def_.goto_assignments(only_stubs=True) + + script_on_source = Script( + path=def_.module_path, + line=def_.line, + column=def_.column + ) + if type_ == 'infer': + definition, = script_on_source.goto_definitions() + else: + definition, = script_on_source.goto_assignments() + same_stub, = definition.goto_assignments(only_stubs=True) + _assert_is_same(same_stub, stub) + _assert_is_same(definition, def_) + assert same_stub.module_path != def_.module_path + + # And the reverse. + script_on_stub = Script( + path=same_stub.module_path, + line=same_stub.line, + column=same_stub.column + ) + + if type_ == 'infer': + same_definition, = script_on_stub.goto_definitions() + same_definition2, = same_stub.infer() + else: + same_definition, = script_on_stub.goto_assignments() + same_definition2, = same_stub.goto_assignments() + + _assert_is_same(same_definition, definition) + _assert_is_same(same_definition, same_definition2) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_helpers.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_helpers.py new file mode 100644 index 0000000..65dd01c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_helpers.py @@ -0,0 +1,16 @@ +from textwrap import dedent + +from jedi import names +from jedi.evaluate import helpers + + +def test_call_of_leaf_in_brackets(environment): + s = dedent(""" + x = 1 + type(x) + """) + last_x = names(s, references=True, definitions=False, environment=environment)[-1] + name = last_x._name.tree_name + + call = helpers.call_of_leaf(name) + assert call == name diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_implicit_namespace_package.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_implicit_namespace_package.py new file mode 100644 index 0000000..9dd5044 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_implicit_namespace_package.py @@ -0,0 +1,105 @@ +from os.path import dirname, join + +import pytest + + +@pytest.fixture(autouse=True) +def skip_not_supported_versions(environment): + if environment.version_info < (3, 4): + pytest.skip() + + +def test_implicit_namespace_package(Script): + sys_path = [join(dirname(__file__), d) + for d in ['implicit_namespace_package/ns1', 'implicit_namespace_package/ns2']] + + def script_with_path(*args, **kwargs): + return Script(sys_path=sys_path, *args, **kwargs) + + # goto definition + assert script_with_path('from pkg import ns1_file').goto_definitions() + assert script_with_path('from pkg import ns2_file').goto_definitions() + assert not script_with_path('from pkg import ns3_file').goto_definitions() + + # goto assignment + tests = { + 'from pkg.ns2_file import foo': 'ns2_file!', + 'from pkg.ns1_file import foo': 'ns1_file!', + } + for source, solution in tests.items(): + ass = script_with_path(source).goto_assignments() + assert len(ass) == 1 + assert ass[0].description == "foo = '%s'" % solution + + # completion + completions = script_with_path('from pkg import ').completions() + names = [c.name for c in completions] + compare = ['ns1_file', 'ns2_file'] + # must at least contain these items, other items are not important + assert set(compare) == set(names) + + tests = { + 'from pkg import ns2_file as x': 'ns2_file!', + 'from pkg import ns1_file as x': 'ns1_file!' + } + for source, solution in tests.items(): + for c in script_with_path(source + '; x.').completions(): + if c.name == 'foo': + completion = c + solution = "foo = '%s'" % solution + assert completion.description == solution + + +def test_implicit_nested_namespace_package(Script): + code = 'from implicit_nested_namespaces.namespace.pkg.module import CONST' + + sys_path = [dirname(__file__)] + + script = Script(sys_path=sys_path, source=code, line=1, column=61) + + result = script.goto_definitions() + + assert len(result) == 1 + + implicit_pkg, = Script(code, column=10, sys_path=sys_path).goto_definitions() + assert implicit_pkg.type == 'module' + assert implicit_pkg.module_path is None + + +def test_implicit_namespace_package_import_autocomplete(Script): + CODE = 'from implicit_name' + + sys_path = [dirname(__file__)] + + script = Script(sys_path=sys_path, source=CODE) + compl = script.completions() + assert [c.name for c in compl] == ['implicit_namespace_package'] + + +def test_namespace_package_in_multiple_directories_autocompletion(Script): + CODE = 'from pkg.' + sys_path = [join(dirname(__file__), d) + for d in ['implicit_namespace_package/ns1', 'implicit_namespace_package/ns2']] + + script = Script(sys_path=sys_path, source=CODE) + compl = script.completions() + assert set(c.name for c in compl) == set(['ns1_file', 'ns2_file']) + + +def test_namespace_package_in_multiple_directories_goto_definition(Script): + CODE = 'from pkg import ns1_file' + sys_path = [join(dirname(__file__), d) + for d in ['implicit_namespace_package/ns1', 'implicit_namespace_package/ns2']] + script = Script(sys_path=sys_path, source=CODE) + result = script.goto_definitions() + assert len(result) == 1 + + +def test_namespace_name_autocompletion_full_name(Script): + CODE = 'from pk' + sys_path = [join(dirname(__file__), d) + for d in ['implicit_namespace_package/ns1', 'implicit_namespace_package/ns2']] + + script = Script(sys_path=sys_path, source=CODE) + compl = script.completions() + assert set(c.full_name for c in compl) == set(['pkg']) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_imports.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_imports.py new file mode 100644 index 0000000..0edc3a8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_imports.py @@ -0,0 +1,477 @@ +""" +Tests of various import related things that could not be tested with "Black Box +Tests". +""" + +import os + +import pytest +from jedi.file_io import FileIO, KnownContentFileIO + +from jedi._compatibility import find_module_py33, find_module +from jedi.evaluate import compiled +from jedi.evaluate import imports +from jedi.api.project import Project +from jedi.evaluate.gradual.conversion import _stub_to_python_context_set +from ..helpers import cwd_at, get_example_dir, test_dir, root_dir + +THIS_DIR = os.path.dirname(__file__) + + +@pytest.mark.skipif('sys.version_info < (3,3)') +def test_find_module_py33(): + """Needs to work like the old find_module.""" + assert find_module_py33('_io') == (None, False) + with pytest.raises(ImportError): + assert find_module_py33('_DOESNTEXIST_') == (None, None) + + +def test_find_module_package(): + file_io, is_package = find_module('json') + assert file_io.path.endswith(os.path.join('json', '__init__.py')) + assert is_package is True + + +def test_find_module_not_package(): + file_io, is_package = find_module('io') + assert file_io.path.endswith('io.py') + assert is_package is False + + +pkg_zip_path = os.path.join(os.path.dirname(__file__), + 'zipped_imports', + 'pkg.zip') + + +def test_find_module_package_zipped(Script, evaluator, environment): + sys_path = environment.get_sys_path() + [pkg_zip_path] + script = Script('import pkg; pkg.mod', sys_path=sys_path) + assert len(script.completions()) == 1 + + file_io, is_package = evaluator.compiled_subprocess.get_module_info( + sys_path=sys_path, + string=u'pkg', + full_name=u'pkg' + ) + assert file_io is not None + assert file_io.path.endswith(os.path.join('pkg.zip', 'pkg', '__init__.py')) + assert file_io._zip_path.endswith('pkg.zip') + assert is_package is True + + +@pytest.mark.parametrize( + 'code, file, package, path', [ + ('import pkg', '__init__.py', 'pkg', 'pkg'), + ('import pkg', '__init__.py', 'pkg', 'pkg'), + + ('from pkg import module', 'module.py', 'pkg', None), + ('from pkg.module', 'module.py', 'pkg', None), + + ('from pkg import nested', os.path.join('nested', '__init__.py'), + 'pkg.nested', os.path.join('pkg', 'nested')), + ('from pkg.nested', os.path.join('nested', '__init__.py'), + 'pkg.nested', os.path.join('pkg', 'nested')), + + ('from pkg.nested import nested_module', + os.path.join('nested', 'nested_module.py'), 'pkg.nested', None), + ('from pkg.nested.nested_module', + os.path.join('nested', 'nested_module.py'), 'pkg.nested', None), + + ('from pkg.namespace import namespace_module', + os.path.join('namespace', 'namespace_module.py'), 'pkg.namespace', None), + ('from pkg.namespace.namespace_module', + os.path.join('namespace', 'namespace_module.py'), 'pkg.namespace', None), + ] + +) +def test_correct_zip_package_behavior(Script, evaluator, environment, code, + file, package, path, skip_python2): + sys_path = environment.get_sys_path() + [pkg_zip_path] + pkg, = Script(code, sys_path=sys_path).goto_definitions() + context, = pkg._name.infer() + assert context.py__file__() == os.path.join(pkg_zip_path, 'pkg', file) + assert '.'.join(context.py__package__()) == package + assert context.is_package is (path is not None) + if path is not None: + assert context.py__path__() == [os.path.join(pkg_zip_path, path)] + + +def test_find_module_not_package_zipped(Script, evaluator, environment): + path = os.path.join(os.path.dirname(__file__), 'zipped_imports/not_pkg.zip') + sys_path = environment.get_sys_path() + [path] + script = Script('import not_pkg; not_pkg.val', sys_path=sys_path) + assert len(script.completions()) == 1 + + file_io, is_package = evaluator.compiled_subprocess.get_module_info( + sys_path=sys_path, + string=u'not_pkg', + full_name=u'not_pkg' + ) + assert file_io.path.endswith(os.path.join('not_pkg.zip', 'not_pkg.py')) + assert is_package is False + + +@cwd_at('test/test_evaluate/not_in_sys_path/pkg') +def test_import_not_in_sys_path(Script): + """ + non-direct imports (not in sys.path) + """ + a = Script(path='module.py', line=5).goto_definitions() + assert a[0].name == 'int' + + a = Script(path='module.py', line=6).goto_definitions() + assert a[0].name == 'str' + a = Script(path='module.py', line=7).goto_definitions() + assert a[0].name == 'str' + + +@pytest.mark.parametrize("code,name", [ + ("from flask.ext import foo; foo.", "Foo"), # flask_foo.py + ("from flask.ext import bar; bar.", "Bar"), # flaskext/bar.py + ("from flask.ext import baz; baz.", "Baz"), # flask_baz/__init__.py + ("from flask.ext import moo; moo.", "Moo"), # flaskext/moo/__init__.py + ("from flask.ext.", "foo"), + ("from flask.ext.", "bar"), + ("from flask.ext.", "baz"), + ("from flask.ext.", "moo"), + pytest.param("import flask.ext.foo; flask.ext.foo.", "Foo", marks=pytest.mark.xfail), + pytest.param("import flask.ext.bar; flask.ext.bar.", "Foo", marks=pytest.mark.xfail), + pytest.param("import flask.ext.baz; flask.ext.baz.", "Foo", marks=pytest.mark.xfail), + pytest.param("import flask.ext.moo; flask.ext.moo.", "Foo", marks=pytest.mark.xfail), +]) +def test_flask_ext(Script, code, name): + """flask.ext.foo is really imported from flaskext.foo or flask_foo. + """ + path = os.path.join(os.path.dirname(__file__), 'flask-site-packages') + completions = Script(code, sys_path=[path]).completions() + assert name in [c.name for c in completions] + + +@cwd_at('test/test_evaluate/') +def test_not_importable_file(Script): + src = 'import not_importable_file as x; x.' + assert not Script(src, path='example.py').completions() + + +def test_import_unique(Script): + src = "import os; os.path" + defs = Script(src, path='example.py').goto_definitions() + parent_contexts = [d._name._context for d in defs] + assert len(parent_contexts) == len(set(parent_contexts)) + + +def test_cache_works_with_sys_path_param(Script, tmpdir): + foo_path = tmpdir.join('foo') + bar_path = tmpdir.join('bar') + foo_path.join('module.py').write('foo = 123', ensure=True) + bar_path.join('module.py').write('bar = 123', ensure=True) + foo_completions = Script('import module; module.', + sys_path=[foo_path.strpath]).completions() + bar_completions = Script('import module; module.', + sys_path=[bar_path.strpath]).completions() + assert 'foo' in [c.name for c in foo_completions] + assert 'bar' not in [c.name for c in foo_completions] + + assert 'bar' in [c.name for c in bar_completions] + assert 'foo' not in [c.name for c in bar_completions] + + +def test_import_completion_docstring(Script): + import abc + s = Script('"""test"""\nimport ab') + abc_completions = [c for c in s.completions() if c.name == 'abc'] + assert len(abc_completions) == 1 + assert abc_completions[0].docstring(fast=False) == abc.__doc__ + + # However for performance reasons not all modules are loaded and the + # docstring is empty in this case. + assert abc_completions[0].docstring() == '' + + +def test_goto_definition_on_import(Script): + assert Script("import sys_blabla", 1, 8).goto_definitions() == [] + assert len(Script("import sys", 1, 8).goto_definitions()) == 1 + + +@cwd_at('jedi') +def test_complete_on_empty_import(Script): + assert Script("from datetime import").completions()[0].name == 'import' + # should just list the files in the directory + assert 10 < len(Script("from .", path='whatever.py').completions()) < 30 + + # Global import + assert len(Script("from . import", 1, 5, 'whatever.py').completions()) > 30 + # relative import + assert 10 < len(Script("from . import", 1, 6, 'whatever.py').completions()) < 30 + + # Global import + assert len(Script("from . import classes", 1, 5, 'whatever.py').completions()) > 30 + # relative import + assert 10 < len(Script("from . import classes", 1, 6, 'whatever.py').completions()) < 30 + + wanted = {'ImportError', 'import', 'ImportWarning'} + assert {c.name for c in Script("import").completions()} == wanted + assert len(Script("import import", path='').completions()) > 0 + + # 111 + assert Script("from datetime import").completions()[0].name == 'import' + assert Script("from datetime import ").completions() + + +def test_imports_on_global_namespace_without_path(Script): + """If the path is None, there shouldn't be any import problem""" + completions = Script("import operator").completions() + assert [c.name for c in completions] == ['operator'] + completions = Script("import operator", path='example.py').completions() + assert [c.name for c in completions] == ['operator'] + + # the first one has a path the second doesn't + completions = Script("import keyword", path='example.py').completions() + assert [c.name for c in completions] == ['keyword'] + completions = Script("import keyword").completions() + assert [c.name for c in completions] == ['keyword'] + + +def test_named_import(Script): + """named import - jedi-vim issue #8""" + s = "import time as dt" + assert len(Script(s, 1, 15, '/').goto_definitions()) == 1 + assert len(Script(s, 1, 10, '/').goto_definitions()) == 1 + + +@pytest.mark.skipif('True', reason='The nested import stuff is still very messy.') +def test_goto_following_on_imports(Script): + s = "import multiprocessing.dummy; multiprocessing.dummy" + g = Script(s).goto_assignments() + assert len(g) == 1 + assert (g[0].line, g[0].column) != (0, 0) + + +def test_goto_assignments(Script): + sys, = Script("import sys", 1, 10).goto_assignments(follow_imports=True) + assert sys.type == 'module' + + +def test_os_after_from(Script): + def check(source, result, column=None): + completions = Script(source, column=column).completions() + assert [c.name for c in completions] == result + + check('\nfrom os. ', ['path']) + check('\nfrom os ', ['import']) + check('from os ', ['import']) + check('\nfrom os import whatever', ['import'], len('from os im')) + + check('from os\\\n', ['import']) + check('from os \\\n', ['import']) + + +def test_os_issues(Script): + def import_names(*args, **kwargs): + return [d.name for d in Script(*args, **kwargs).completions()] + + # Github issue #759 + s = 'import os, s' + assert 'sys' in import_names(s) + assert 'path' not in import_names(s, column=len(s) - 1) + assert 'os' in import_names(s, column=len(s) - 3) + + # Some more checks + s = 'from os import path, e' + assert 'environ' in import_names(s) + assert 'json' not in import_names(s, column=len(s) - 1) + assert 'environ' in import_names(s, column=len(s) - 1) + assert 'path' in import_names(s, column=len(s) - 3) + + +def test_path_issues(Script): + """ + See pull request #684 for details. + """ + source = '''from datetime import ''' + assert Script(source).completions() + + +def test_compiled_import_none(monkeypatch, Script): + """ + Related to #1079. An import might somehow fail and return None. + """ + script = Script('import sys') + monkeypatch.setattr(compiled, 'load_module', lambda *args, **kwargs: None) + def_, = script.goto_definitions() + assert def_.type == 'module' + context, = def_._name.infer() + assert not _stub_to_python_context_set(context) + + +@pytest.mark.parametrize( + ('path', 'is_package', 'goal'), [ + (os.path.join(THIS_DIR, 'test_docstring.py'), False, ('ok', 'lala', 'test_imports')), + (os.path.join(THIS_DIR, '__init__.py'), True, ('ok', 'lala', 'x', 'test_imports')), + ] +) +def test_get_modules_containing_name(evaluator, path, goal, is_package): + module = imports._load_python_module( + evaluator, + FileIO(path), + import_names=('ok', 'lala', 'x'), + is_package=is_package, + ) + assert module + input_module, found_module = imports.get_modules_containing_name( + evaluator, + [module], + 'string_that_only_exists_here' + ) + assert input_module is module + assert found_module.string_names == goal + + +@pytest.mark.parametrize( + ('path', 'base_names', 'is_package', 'names'), [ + ('/foo/bar.py', ('foo',), False, ('foo', 'bar')), + ('/foo/bar.py', ('foo', 'baz'), False, ('foo', 'baz', 'bar')), + ('/foo/__init__.py', ('foo',), True, ('foo',)), + ('/__init__.py', ('foo',), True, ('foo',)), + ('/foo/bar/__init__.py', ('foo',), True, ('foo',)), + ('/foo/bar/__init__.py', ('foo', 'bar'), True, ('foo', 'bar')), + ] +) +def test_load_module_from_path(evaluator, path, base_names, is_package, names): + file_io = KnownContentFileIO(path, '') + m = imports._load_module_from_path(evaluator, file_io, base_names) + assert m.is_package == is_package + assert m.string_names == names + + +@pytest.mark.parametrize( + 'path', ('api/whatever/test_this.py', 'api/whatever/file')) +@pytest.mark.parametrize('empty_sys_path', (False, True)) +def test_relative_imports_with_multiple_similar_directories(Script, path, empty_sys_path): + dir = get_example_dir('issue1209') + if empty_sys_path: + project = Project(dir, sys_path=(), smart_sys_path=False) + else: + project = Project(dir) + script = Script( + "from . ", + path=os.path.join(dir, path), + _project=project, + ) + name, import_ = script.completions() + assert import_.name == 'import' + assert name.name == 'api_test1' + + +def test_relative_imports_with_outside_paths(Script): + dir = get_example_dir('issue1209') + project = Project(dir, sys_path=[], smart_sys_path=False) + script = Script( + "from ...", + path=os.path.join(dir, 'api/whatever/test_this.py'), + _project=project, + ) + assert [c.name for c in script.completions()] == ['api', 'import', 'whatever'] + + script = Script( + "from " + '.' * 100, + path=os.path.join(dir, 'api/whatever/test_this.py'), + _project=project, + ) + assert [c.name for c in script.completions()] == ['import'] + + +@cwd_at('test/examples/issue1209/api/whatever/') +def test_relative_imports_without_path(Script): + project = Project('.', sys_path=[], smart_sys_path=False) + script = Script("from . ", _project=project) + assert [c.name for c in script.completions()] == ['api_test1', 'import'] + + script = Script("from .. ", _project=project) + assert [c.name for c in script.completions()] == ['import', 'whatever'] + + script = Script("from ... ", _project=project) + assert [c.name for c in script.completions()] == ['api', 'import', 'whatever'] + + +def test_relative_import_out_of_file_system(Script): + script = Script("from " + '.' * 100) + import_, = script.completions() + assert import_.name == 'import' + + script = Script("from " + '.' * 100 + 'abc import ABCMeta') + assert not script.goto_definitions() + assert not script.completions() + + +@pytest.mark.parametrize( + 'level, directory, project_path, result', [ + (1, '/a/b/c', '/a', (['b', 'c'], '/a')), + (2, '/a/b/c', '/a', (['b'], '/a')), + (3, '/a/b/c', '/a', ([], '/a')), + (4, '/a/b/c', '/a', (None, '/')), + (5, '/a/b/c', '/a', (None, None)), + (1, '/', '/', ([], '/')), + (2, '/', '/', (None, None)), + (1, '/a/b', '/a/b/c', (None, '/a/b')), + (2, '/a/b', '/a/b/c', (None, '/a')), + (3, '/a/b', '/a/b/c', (None, '/')), + ] +) +def test_level_to_import_path(level, directory, project_path, result): + assert imports._level_to_base_import_path(project_path, directory, level) == result + + +def test_import_name_calculation(Script): + s = Script(path=os.path.join(test_dir, 'completion', 'isinstance.py')) + m = s._get_module() + assert m.string_names == ('test', 'completion', 'isinstance') + + +@pytest.mark.parametrize('name', ('builtins', 'typing')) +def test_pre_defined_imports_module(Script, environment, name): + if environment.version_info.major < 3 and name == 'builtins': + name = '__builtin__' + + path = os.path.join(root_dir, name + '.py') + module = Script('', path=path)._get_module() + assert module.string_names == (name,) + + assert module.evaluator.builtins_module.py__file__() != path + assert module.evaluator.typing_module.py__file__() != path + + +@pytest.mark.parametrize('name', ('builtins', 'typing')) +def test_import_needed_modules_by_jedi(Script, environment, tmpdir, name): + if environment.version_info.major < 3 and name == 'builtins': + name = '__builtin__' + + module_path = tmpdir.join(name + '.py') + module_path.write('int = ...') + script = Script( + 'import ' + name, + path=tmpdir.join('something.py').strpath, + sys_path=[tmpdir.strpath] + environment.get_sys_path(), + ) + module, = script.goto_definitions() + assert module._evaluator.builtins_module.py__file__() != module_path + assert module._evaluator.typing_module.py__file__() != module_path + + +def test_import_with_semicolon(Script): + names = [c.name for c in Script('xzy; from abc import ').completions()] + assert 'ABCMeta' in names + assert 'abc' not in names + + +def test_relative_import_star(Script): + # Coming from github #1235 + import jedi + + source = """ + from . import * + furl.c + """ + script = jedi.Script(source, 3, len("furl.c"), 'export.py') + + assert script.completions() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_literals.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_literals.py new file mode 100644 index 0000000..dd72f8e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_literals.py @@ -0,0 +1,46 @@ +import pytest +from jedi.evaluate.context import TreeInstance + + +def _eval_literal(Script, code, is_fstring=False): + def_, = Script(code).goto_definitions() + if is_fstring: + assert def_.name == 'str' + assert isinstance(def_._name._context, TreeInstance) + return '' + else: + return def_._name._context.get_safe_value() + + +def test_f_strings(Script, environment): + """ + f literals are not really supported in Jedi. They just get ignored and an + empty string is returned. + """ + if environment.version_info < (3, 6): + pytest.skip() + + assert _eval_literal(Script, 'f"asdf"', is_fstring=True) == '' + assert _eval_literal(Script, 'f"{asdf} "', is_fstring=True) == '' + assert _eval_literal(Script, 'F"{asdf} "', is_fstring=True) == '' + assert _eval_literal(Script, 'rF"{asdf} "', is_fstring=True) == '' + + +def test_rb_strings(Script, environment): + assert _eval_literal(Script, 'br"asdf"') == b'asdf' + obj = _eval_literal(Script, 'rb"asdf"') + + # rb is not valid in Python 2. Due to error recovery we just get a + # string. + assert obj == b'asdf' + + +def test_thousand_separators(Script, environment): + if environment.version_info < (3, 6): + pytest.skip() + + assert _eval_literal(Script, '1_2_3') == 123 + assert _eval_literal(Script, '123_456_789') == 123456789 + assert _eval_literal(Script, '0x3_4') == 52 + assert _eval_literal(Script, '0b1_0') == 2 + assert _eval_literal(Script, '0o1_0') == 8 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_mixed.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_mixed.py new file mode 100644 index 0000000..5940fe6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_mixed.py @@ -0,0 +1,7 @@ +import jedi + + +def test_on_code(): + from functools import wraps + i = jedi.Interpreter("wraps.__code__", [{'wraps':wraps}]) + assert i.goto_definitions() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_namespace_package.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_namespace_package.py new file mode 100644 index 0000000..1b15658 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_namespace_package.py @@ -0,0 +1,96 @@ +from os.path import dirname, join + +import pytest +import py + +from ..helpers import get_example_dir + + +SYS_PATH = [join(dirname(__file__), d) + for d in ['namespace_package/ns1', 'namespace_package/ns2']] + + +def script_with_path(Script, *args, **kwargs): + return Script(sys_path=SYS_PATH, *args, **kwargs) + + +def test_goto_definition(Script): + assert script_with_path(Script, 'from pkg import ns1_file').goto_definitions() + assert script_with_path(Script, 'from pkg import ns2_file').goto_definitions() + assert not script_with_path(Script, 'from pkg import ns3_file').goto_definitions() + + +@pytest.mark.parametrize( + ('source', 'solution'), [ + ('from pkg.ns2_folder.nested import foo', 'nested!'), + ('from pkg.ns2_folder import foo', 'ns2_folder!'), + ('from pkg.ns2_file import foo', 'ns2_file!'), + ('from pkg.ns1_folder import foo', 'ns1_folder!'), + ('from pkg.ns1_file import foo', 'ns1_file!'), + ('from pkg import foo', 'ns1!'), + ] +) +def test_goto_assignment(Script, source, solution): + ass = script_with_path(Script, source).goto_assignments() + assert len(ass) == 1 + assert ass[0].description == "foo = '%s'" % solution + + +def test_simple_completions(Script): + # completion + completions = script_with_path(Script, 'from pkg import ').completions() + names = [str(c.name) for c in completions] # str because of unicode + compare = ['foo', 'ns1_file', 'ns1_folder', 'ns2_folder', 'ns2_file', + 'pkg_resources', 'pkgutil', '__name__', '__path__', + '__package__', '__file__', '__doc__'] + # must at least contain these items, other items are not important + assert set(compare) == set(names) + + +@pytest.mark.parametrize( + ('source', 'solution'), [ + ('from pkg import ns2_folder as x', 'ns2_folder!'), + ('from pkg import ns2_file as x', 'ns2_file!'), + ('from pkg.ns2_folder import nested as x', 'nested!'), + ('from pkg import ns1_folder as x', 'ns1_folder!'), + ('from pkg import ns1_file as x', 'ns1_file!'), + ('import pkg as x', 'ns1!'), + ] +) +def test_completions(Script, source, solution): + for c in script_with_path(Script, source + '; x.').completions(): + if c.name == 'foo': + completion = c + solution = "foo = '%s'" % solution + assert completion.description == solution + + +def test_nested_namespace_package(Script): + code = 'from nested_namespaces.namespace.pkg import CONST' + + sys_path = [dirname(__file__)] + + script = Script(sys_path=sys_path, source=code, line=1, column=45) + + result = script.goto_definitions() + + assert len(result) == 1 + + +def test_relative_import(Script, environment, tmpdir): + """ + Attempt a relative import in a very simple namespace package. + """ + if environment.version_info < (3, 4): + pytest.skip() + + directory = get_example_dir('namespace_package_relative_import') + # Need to copy the content in a directory where there's no __init__.py. + py.path.local(directory).copy(tmpdir) + file_path = join(tmpdir.strpath, "rel1.py") + script = Script(path=file_path, line=1) + d, = script.goto_definitions() + assert d.name == 'int' + d, = script.goto_assignments() + assert d.name == 'name' + assert d.module_name == 'rel2' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_precedence.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_precedence.py new file mode 100644 index 0000000..2e97119 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_precedence.py @@ -0,0 +1,18 @@ +from jedi.evaluate.compiled import CompiledObject + +import pytest + + +@pytest.mark.parametrize('source', [ + pytest.param('1 == 1'), + pytest.param('1.0 == 1'), + # Unfortunately for now not possible, because it's a typeshed object. + pytest.param('... == ...', marks=pytest.mark.xfail), +]) +def test_equals(Script, environment, source): + if environment.version_info.major < 3: + pytest.skip("Ellipsis does not exists in 2") + script = Script(source) + node = script._module_node.children[0] + first, = script._get_module().eval_node(node) + assert isinstance(first, CompiledObject) and first.get_safe_value() is True diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_pyc.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_pyc.py new file mode 100644 index 0000000..3744957 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_pyc.py @@ -0,0 +1,73 @@ +""" +Test completions from *.pyc files: + + - generate a dummy python module + - compile the dummy module to generate a *.pyc + - delete the pure python dummy module + - try jedi on the generated *.pyc +""" +import os +import shutil +import sys + +import pytest + +import jedi +from jedi.api.environment import SameEnvironment, InterpreterEnvironment + + +SRC = """class Foo: + pass + +class Bar: + pass +""" + + +@pytest.fixture +def pyc_project_path(tmpdir): + path = tmpdir.strpath + dummy_package_path = os.path.join(path, "dummy_package") + os.mkdir(dummy_package_path) + with open(os.path.join(dummy_package_path, "__init__.py"), 'w'): + pass + + dummy_path = os.path.join(dummy_package_path, 'dummy.py') + with open(dummy_path, 'w') as f: + f.write(SRC) + import compileall + compileall.compile_file(dummy_path) + os.remove(dummy_path) + + if sys.version_info.major == 3: + # Python3 specific: + # To import pyc modules, we must move them out of the __pycache__ + # directory and rename them to remove ".cpython-%s%d" + # see: http://stackoverflow.com/questions/11648440/python-does-not-detect-pyc-files + pycache = os.path.join(dummy_package_path, "__pycache__") + for f in os.listdir(pycache): + dst = f.replace('.cpython-%s%s' % sys.version_info[:2], "") + dst = os.path.join(dummy_package_path, dst) + shutil.copy(os.path.join(pycache, f), dst) + try: + yield path + finally: + shutil.rmtree(path) + + +def test_pyc(pyc_project_path, environment): + """ + The list of completion must be greater than 2. + """ + path = os.path.join(pyc_project_path, 'blub.py') + if not isinstance(environment, InterpreterEnvironment): + # We are using the same version for pyc completions here, because it + # was compiled in that version. However with interpreter environments + # we also have the same version and it's easier to debug. + environment = SameEnvironment() + environment = environment + s = jedi.Script( + "from dummy_package import dummy; dummy.", + path=path, + environment=environment) + assert len(s.completions()) >= 2 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_representation.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_representation.py new file mode 100644 index 0000000..6113023 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_representation.py @@ -0,0 +1,34 @@ +from textwrap import dedent + + +def get_definition_and_evaluator(Script, source): + first, = Script(dedent(source)).goto_definitions() + return first._name._context, first._evaluator + + +def test_function_execution(Script): + """ + We've been having an issue of a mutable list that was changed inside the + function execution. Test if an execution always returns the same result. + """ + + s = """ + def x(): + return str() + x""" + func, evaluator = get_definition_and_evaluator(Script, s) + # Now just use the internals of the result (easiest way to get a fully + # usable function). + # Should return the same result both times. + assert len(func.execute_evaluated()) == 1 + assert len(func.execute_evaluated()) == 1 + + +def test_class_mro(Script): + s = """ + class X(object): + pass + X""" + cls, evaluator = get_definition_and_evaluator(Script, s) + mro = cls.py__mro__() + assert [c.name.string_name for c in mro] == ['X', 'object'] diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_signature.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_signature.py new file mode 100644 index 0000000..0bb5cba --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_signature.py @@ -0,0 +1,268 @@ +from textwrap import dedent +from operator import ge, lt +import re + +import pytest + +from jedi.evaluate.gradual.conversion import _stub_to_python_context_set + + +@pytest.mark.parametrize( + 'code, sig, names, op, version', [ + ('import math; math.cos', 'cos(x, /)', ['x'], ge, (2, 7)), + + ('next', 'next(iterator, default=None, /)', ['iterator', 'default'], ge, (2, 7)), + + ('str', "str(object='', /) -> str", ['object'], ge, (2, 7)), + + ('pow', 'pow(x, y, z=None, /) -> number', ['x', 'y', 'z'], lt, (3, 5)), + ('pow', 'pow(x, y, z=None, /)', ['x', 'y', 'z'], ge, (3, 5)), + + ('bytes.partition', 'partition(self, sep, /) -> (head, sep, tail)', ['self', 'sep'], lt, (3, 5)), + ('bytes.partition', 'partition(self, sep, /)', ['self', 'sep'], ge, (3, 5)), + + ('bytes().partition', 'partition(sep, /) -> (head, sep, tail)', ['sep'], lt, (3, 5)), + ('bytes().partition', 'partition(sep, /)', ['sep'], ge, (3, 5)), + ] +) +def test_compiled_signature(Script, environment, code, sig, names, op, version): + if not op(environment.version_info, version): + return # The test right next to it should take over. + + d, = Script(code).goto_definitions() + context, = d._name.infer() + compiled, = _stub_to_python_context_set(context) + signature, = compiled.get_signatures() + assert signature.to_string() == sig + assert [n.string_name for n in signature.get_param_names()] == names + + +classmethod_code = ''' +class X: + @classmethod + def x(cls, a, b): + pass + + @staticmethod + def static(a, b): + pass +''' + + +partial_code = ''' +import functools + +def func(a, b, c): + pass + +a = functools.partial(func) +b = functools.partial(func, 1) +c = functools.partial(func, 1, c=2) +d = functools.partial() +''' + + +@pytest.mark.parametrize( + 'code, expected', [ + ('def f(a, * args, x): pass\n f(', 'f(a, *args, x)'), + ('def f(a, *, x): pass\n f(', 'f(a, *, x)'), + ('def f(*, x= 3,**kwargs): pass\n f(', 'f(*, x=3, **kwargs)'), + ('def f(x,/,y,* ,z): pass\n f(', 'f(x, /, y, *, z)'), + ('def f(a, /, *, x=3, **kwargs): pass\n f(', 'f(a, /, *, x=3, **kwargs)'), + + (classmethod_code + 'X.x(', 'x(cls, a, b)'), + (classmethod_code + 'X().x(', 'x(cls, a, b)'), + (classmethod_code + 'X.static(', 'static(a, b)'), + (classmethod_code + 'X().static(', 'static(a, b)'), + + (partial_code + 'a(', 'func(a, b, c)'), + (partial_code + 'b(', 'func(b, c)'), + (partial_code + 'c(', 'func(b)'), + (partial_code + 'd(', None), + ] +) +def test_tree_signature(Script, environment, code, expected): + # Only test this in the latest version, because of / + if environment.version_info < (3, 8): + pytest.skip() + + if expected is None: + assert not Script(code).call_signatures() + else: + sig, = Script(code).call_signatures() + assert expected == sig.to_string() + + +@pytest.mark.parametrize( + 'combination, expected', [ + # Functions + ('full_redirect(simple)', 'b, *, c'), + ('full_redirect(simple4)', 'b, x: int'), + ('full_redirect(a)', 'b, *args'), + ('full_redirect(kw)', 'b, *, c, **kwargs'), + ('full_redirect(akw)', 'c, *args, **kwargs'), + + # Non functions + ('full_redirect(lambda x, y: ...)', 'y'), + ('full_redirect()', '*args, **kwargs'), + ('full_redirect(1)', '*args, **kwargs'), + + # Classes / inheritance + ('full_redirect(C)', 'z, *, c'), + ('full_redirect(C())', 'y'), + ('D', 'D(a, z, /)'), + ('D()', 'D(x, y)'), + ('D().foo', 'foo(a, *, bar, z, **kwargs)'), + + # Merging + ('two_redirects(simple, simple)', 'a, b, *, c'), + ('two_redirects(simple2, simple2)', 'x'), + ('two_redirects(akw, kw)', 'a, c, *args, **kwargs'), + ('two_redirects(kw, akw)', 'a, b, *args, c, **kwargs'), + + ('combined_redirect(simple, simple2)', 'a, b, /, *, x'), + ('combined_redirect(simple, simple3)', 'a, b, /, *, a, x: int'), + ('combined_redirect(simple2, simple)', 'x, /, *, a, b, c'), + ('combined_redirect(simple3, simple)', 'a, x: int, /, *, a, b, c'), + + ('combined_redirect(simple, kw)', 'a, b, /, *, a, b, c, **kwargs'), + ('combined_redirect(kw, simple)', 'a, b, /, *, a, b, c'), + + ('combined_lot_of_args(kw, simple4)', '*, b'), + ('combined_lot_of_args(simple4, kw)', '*, b, c, **kwargs'), + + ('combined_redirect(combined_redirect(simple2, simple4), combined_redirect(kw, simple5))', + 'x, /, *, y'), + ('combined_redirect(combined_redirect(simple4, simple2), combined_redirect(simple5, kw))', + 'a, b, x: int, /, *, a, b, c, **kwargs'), + ('combined_redirect(combined_redirect(a, kw), combined_redirect(kw, simple5))', + 'a, b, /, *args, y'), + + ('no_redirect(kw)', '*args, **kwargs'), + ('no_redirect(akw)', '*args, **kwargs'), + ('no_redirect(simple)', '*args, **kwargs'), + ] +) +def test_nested_signatures(Script, environment, combination, expected, skip_pre_python35): + code = dedent(''' + def simple(a, b, *, c): ... + def simple2(x): ... + def simple3(a, x: int): ... + def simple4(a, b, x: int): ... + def simple5(y): ... + def a(a, b, *args): ... + def kw(a, b, *, c, **kwargs): ... + def akw(a, c, *args, **kwargs): ... + + def no_redirect(func): + return lambda *args, **kwargs: func(1) + def full_redirect(func): + return lambda *args, **kwargs: func(1, *args, **kwargs) + def two_redirects(func1, func2): + return lambda *args, **kwargs: func1(*args, **kwargs) + func2(1, *args, **kwargs) + def combined_redirect(func1, func2): + return lambda *args, **kwargs: func1(*args) + func2(**kwargs) + def combined_lot_of_args(func1, func2): + return lambda *args, **kwargs: func1(1, 2, 3, 4, *args) + func2(a=3, x=1, y=1, **kwargs) + + class C: + def __init__(self, a, z, *, c): ... + def __call__(self, x, y): ... + + def foo(self, bar, z, **kwargs): ... + + class D(C): + def __init__(self, *args): + super().__init__(*args) + + def foo(self, a, **kwargs): + super().foo(**kwargs) + ''') + code += 'z = ' + combination + '\nz(' + sig, = Script(code).call_signatures() + computed = sig.to_string() + if not re.match(r'\w+\(', expected): + expected = '(' + expected + ')' + assert expected == computed + + +def test_pow_signature(Script): + # See github #1357 + sigs = Script('pow(').call_signatures() + strings = {sig.to_string() for sig in sigs} + assert strings == {'pow(x: float, y: float, z: float, /) -> float', + 'pow(x: float, y: float, /) -> float', + 'pow(x: int, y: int, z: int, /) -> Any', + 'pow(x: int, y: int, /) -> Any'} + + +@pytest.mark.parametrize( + 'code, signature', [ + [dedent(''' + import functools + def f(x): + pass + def x(f): + @functools.wraps(f) + def wrapper(*args): + # Have no arguments here, but because of wraps, the signature + # should still be f's. + return f(*args) + return wrapper + + x(f)('''), 'f(x, /)'], + [dedent(''' + import functools + def f(x): + pass + def x(f): + @functools.wraps(f) + def wrapper(): + # Have no arguments here, but because of wraps, the signature + # should still be f's. + return 1 + return wrapper + + x(f)('''), 'f()'], + ] +) +def test_wraps_signature(Script, code, signature, skip_pre_python35): + sigs = Script(code).call_signatures() + assert {sig.to_string() for sig in sigs} == {signature} + + +@pytest.mark.parametrize( + 'start, start_params', [ + ['@dataclass\nclass X:', []], + ['@dataclass(eq=True)\nclass X:', []], + [dedent(''' + class Y(): + y: int + @dataclass + class X(Y):'''), []], + [dedent(''' + @dataclass + class Y(): + y: int + z = 5 + @dataclass + class X(Y):'''), ['y']], + ] +) +def test_dataclass_signature(Script, skip_pre_python37, start, start_params): + code = dedent(''' + name: str + foo = 3 + price: float + quantity: int = 0.0 + + X(''') + + code = 'from dataclasses import dataclass\n' + start + code + + sig, = Script(code).call_signatures() + assert [p.name for p in sig.params] == start_params + ['name', 'price', 'quantity'] + quantity, = sig.params[-1].infer() + assert quantity.name == 'int' + price, = sig.params[-2].infer() + assert price.name == 'float' diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_stdlib.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_stdlib.py new file mode 100644 index 0000000..fb98d8a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_stdlib.py @@ -0,0 +1,103 @@ +""" +Tests of various stdlib related things that could not be tested +with "Black Box Tests". +""" +from textwrap import dedent + +import pytest + + +@pytest.mark.parametrize(['letter', 'expected'], [ + ('n', ['name']), + ('s', ['smart']), +]) +def test_namedtuple_str(letter, expected, Script): + source = dedent("""\ + import collections + Person = collections.namedtuple('Person', 'name smart') + dave = Person('Dave', False) + dave.%s""") % letter + result = Script(source).completions() + completions = set(r.name for r in result) + assert completions == set(expected) + + +def test_namedtuple_list(Script): + source = dedent("""\ + import collections + Cat = collections.namedtuple('Person', ['legs', u'length', 'large']) + garfield = Cat(4, '85cm', True) + garfield.l""") + result = Script(source).completions() + completions = set(r.name for r in result) + assert completions == {'legs', 'length', 'large'} + + +def test_namedtuple_content(Script): + source = dedent("""\ + import collections + Foo = collections.namedtuple('Foo', ['bar', 'baz']) + named = Foo(baz=4, bar=3.0) + unnamed = Foo(4, '') + """) + + def d(source): + x, = Script(source).goto_definitions() + return x.name + + assert d(source + 'unnamed.bar') == 'int' + assert d(source + 'unnamed.baz') == 'str' + assert d(source + 'named.bar') == 'float' + assert d(source + 'named.baz') == 'int' + + +def test_nested_namedtuples(Script): + """ + From issue #730. + """ + s = Script(dedent(''' + import collections + Dataset = collections.namedtuple('Dataset', ['data']) + Datasets = collections.namedtuple('Datasets', ['train']) + train_x = Datasets(train=Dataset('data_value')) + train_x.train.''' + )) + assert 'data' in [c.name for c in s.completions()] + + +def test_namedtuple_goto_definitions(Script): + source = dedent(""" + from collections import namedtuple + + Foo = namedtuple('Foo', 'id timestamp gps_timestamp attributes') + Foo""") + + from jedi.api import Script + + d1, = Script(source).goto_definitions() + + assert d1.get_line_code() == "class Foo(tuple):\n" + assert d1.module_path is None + + +def test_re_sub(Script, environment): + """ + This whole test was taken out of completion/stdlib.py, because of the + version differences. + """ + def run(code): + defs = Script(code).goto_definitions() + return {d.name for d in defs} + + names = run("import re; re.sub('a', 'a', 'f')") + if environment.version_info.major == 2: + assert names == {'str'} + else: + assert names == {'str'} + + # This param is missing because of overloading. + names = run("import re; re.sub('a', 'a')") + if environment.version_info.major == 2: + assert names == {'str', 'unicode'} + else: + assert names == {'str', 'bytes'} diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_sys_path.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_sys_path.py new file mode 100644 index 0000000..deaa64c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/test_sys_path.py @@ -0,0 +1,110 @@ +import os +from glob import glob +import sys +import shutil + +import pytest +from ..helpers import skip_if_windows, skip_if_not_windows + +from jedi.evaluate import sys_path +from jedi.api.environment import create_environment + + +def test_paths_from_assignment(Script): + def paths(src): + script = Script(src, path='/foo/bar.py') + expr_stmt = script._module_node.children[0] + return set(sys_path._paths_from_assignment(script._get_module(), expr_stmt)) + + # Normalize paths for Windows. + path_a = os.path.abspath('/foo/a') + path_b = os.path.abspath('/foo/b') + path_c = os.path.abspath('/foo/c') + + assert paths('sys.path[0:0] = ["a"]') == {path_a} + assert paths('sys.path = ["b", 1, x + 3, y, "c"]') == {path_b, path_c} + assert paths('sys.path = a = ["a"]') == {path_a} + + # Fail for complicated examples. + assert paths('sys.path, other = ["a"], 2') == set() + + +def test_venv_and_pths(venv_path): + pjoin = os.path.join + + CUR_DIR = os.path.dirname(__file__) + site_pkg_path = pjoin(venv_path, 'lib') + if os.name == 'nt': + site_pkg_path = pjoin(site_pkg_path, 'site-packages') + else: + site_pkg_path = glob(pjoin(site_pkg_path, 'python*', 'site-packages'))[0] + shutil.rmtree(site_pkg_path) + shutil.copytree(pjoin(CUR_DIR, 'sample_venvs', 'pth_directory'), site_pkg_path) + + virtualenv = create_environment(venv_path) + venv_paths = virtualenv.get_sys_path() + + ETALON = [ + # For now disable egg-links. I have no idea how they work... ~ dave + #pjoin('/path', 'from', 'egg-link'), + #pjoin(site_pkg_path, '.', 'relative', 'egg-link', 'path'), + site_pkg_path, + pjoin(site_pkg_path, 'dir-from-foo-pth'), + '/foo/smth.py:module', + # Not sure why it's added twice. It has to do with site.py which is not + # something we can change. However this obviously also doesn't matter. + '/foo/smth.py:from_func', + '/foo/smth.py:from_func', + ] + + # Ensure that pth and egg-link paths were added. + assert venv_paths[-len(ETALON):] == ETALON + + # Ensure that none of venv dirs leaked to the interpreter. + assert not set(sys.path).intersection(ETALON) + + +_s = ['/a', '/b', '/c/d/'] + + +@pytest.mark.parametrize( + 'sys_path_, module_path, expected, is_package', [ + (_s, '/a/b', ('b',), False), + (_s, '/a/b/c', ('b', 'c'), False), + (_s, '/a/b.py', ('b',), False), + (_s, '/a/b/c.py', ('b', 'c'), False), + (_s, '/x/b.py', None, False), + (_s, '/c/d/x.py', ('x',), False), + (_s, '/c/d/x.py', ('x',), False), + (_s, '/c/d/x/y.py', ('x', 'y'), False), + # If dots are in there they also resolve. These are obviously illegal + # in Python, but Jedi can handle them. Give the user a bit more freedom + # that he will have to correct eventually. + (_s, '/a/b.c.py', ('b.c',), False), + (_s, '/a/b.d/foo.bar.py', ('b.d', 'foo.bar'), False), + + (_s, '/a/.py', None, False), + (_s, '/a/c/.py', None, False), + + (['/foo'], '/foo/bar/__init__.py', ('bar',), True), + (['/foo'], '/foo/bar/baz/__init__.py', ('bar', 'baz'), True), + + skip_if_windows(['/foo'], '/foo/bar.so', ('bar',), False), + skip_if_windows(['/foo'], '/foo/bar/__init__.so', ('bar',), True), + skip_if_not_windows(['/foo'], '/foo/bar.pyd', ('bar',), False), + skip_if_not_windows(['/foo'], '/foo/bar/__init__.pyd', ('bar',), True), + + (['/foo'], '/x/bar.py', None, False), + (['/foo'], '/foo/bar.xyz', ('bar.xyz',), False), + + (['/foo', '/foo/bar'], '/foo/bar/baz', ('baz',), False), + (['/foo/bar', '/foo'], '/foo/bar/baz', ('baz',), False), + + (['/'], '/bar/baz.py', ('bar', 'baz',), False), + ]) +def test_transform_path_to_dotted(sys_path_, module_path, expected, is_package): + # transform_path_to_dotted expects normalized absolute paths. + sys_path_ = [os.path.abspath(path) for path in sys_path_] + module_path = os.path.abspath(module_path) + assert sys_path.transform_path_to_dotted(sys_path_, module_path) \ + == (expected, is_package) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/not_pkg.zip b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/not_pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..f1516a6aaf8a2bc2f646e122937b72555fdd010d GIT binary patch literal 204 zcmWIWW@Zs#-~htsdp>zEAOS800fxN%lK6t`biIPg&=iAanuJMIa6X07mLFiU0rr literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/pkg.zip b/vim/bundle/jedi-vim/pythonx/jedi/test/test_evaluate/zipped_imports/pkg.zip new file mode 100644 index 0000000000000000000000000000000000000000..0344f746975f4f6ceb1fca740e58d8baafd45406 GIT binary patch literal 1057 zcmWIWW@h1H00EJ`pFF?}D8a%Yz)+B#t{)n~!%+UCCme*oGKw$+0Ck8kGca&4Oy5-E z_h7*_Q6r!Zdm!cqVvvsb_{_Y_lK6PNf=X}gQ|Ci31fMvgdqQ6;@Wfev&9k0Qn>d^- z3|4MBGUrl=-nynYUw)j~b4G|Ynl)M3Sr1}7&~P9`a}Y1oLAm)Ur8%iU!$B@91G*{! z>N0KbGn&4k8$tv0PxxIw4Yup5Hgo67Vn(2;>>LIGd+tdCoe07(PcSfK`c(M=1>k@W z$O3sHFEKZ@xF9h(RUf353+Q16hGaCgiWq9)y5ixkL|8S;8`UaqnD*4-lGGF=d)m4SyZK zLydt)4lt-e?#CUe5WNZwTN;%a(USw*6x6_k1P22Hwn#=eB?)F6EXon?z!vEUcXXp_ kL`eb&Gq5EBgc 30 + # `open` completions have a closed attribute. + assert [1 for c in comps if c.name == 'closed'] + + +def test_string_literals(Script): + """Simplified case of jedi-vim#377.""" + source = dedent(""" + x = ur''' + + def foo(): + pass + """) + + script = Script(dedent(source)) + assert script._get_module().tree_node.end_pos == (6, 0) + assert script.completions() + + +def test_incomplete_function(Script): + source = '''return ImportErr''' + + script = Script(dedent(source), 1, 3) + assert script.completions() + + +def test_decorator_string_issue(Script): + """ + Test case from #589 + """ + source = dedent('''\ + """ + @""" + def bla(): + pass + + bla.''') + + s = Script(source) + assert s.completions() + assert s._get_module().tree_node.get_code() == source diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_parser_utils.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_parser_utils.py new file mode 100644 index 0000000..c085710 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_parso_integration/test_parser_utils.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +from jedi._compatibility import is_py3 +from jedi import parser_utils +from parso import parse +from parso.python import tree + +import pytest + + +class TestCallAndName: + def get_call(self, source): + # Get the simple_stmt and then the first one. + node = parse(source).children[0] + if node.type == 'simple_stmt': + return node.children[0] + return node + + def test_name_and_call_positions(self): + name = self.get_call('name\nsomething_else') + assert name.value == 'name' + assert name.start_pos == (1, 0) + assert name.end_pos == (1, 4) + + leaf = self.get_call('1.0\n') + assert leaf.value == '1.0' + assert parser_utils.safe_literal_eval(leaf.value) == 1.0 + assert leaf.start_pos == (1, 0) + assert leaf.end_pos == (1, 3) + + def test_call_type(self): + call = self.get_call('hello') + assert isinstance(call, tree.Name) + + def test_literal_type(self): + literal = self.get_call('1.0') + assert isinstance(literal, tree.Literal) + assert type(parser_utils.safe_literal_eval(literal.value)) == float + + literal = self.get_call('1') + assert isinstance(literal, tree.Literal) + assert type(parser_utils.safe_literal_eval(literal.value)) == int + + literal = self.get_call('"hello"') + assert isinstance(literal, tree.Literal) + assert parser_utils.safe_literal_eval(literal.value) == 'hello' + + +def test_user_statement_on_import(): + """github #285""" + s = "from datetime import (\n" \ + " time)" + + for pos in [(2, 1), (2, 4)]: + p = parse(s) + stmt = parser_utils.get_statement_of_position(p, pos) + assert isinstance(stmt, tree.Import) + assert [n.value for n in stmt.get_defined_names()] == ['time'] + + +def test_hex_values_in_docstring(): + source = r''' + def foo(object): + """ + \xff + """ + return 1 + ''' + + doc = parser_utils.clean_scope_docstring(next(parse(source).iter_funcdefs())) + if is_py3: + assert doc == '\xff' + else: + assert doc == u'�' + + +@pytest.mark.parametrize( + 'code,call_signature', [ + ('def my_function(x, typed: Type, z):\n return', 'my_function(x, typed: Type, z)'), + ('def my_function(x, y, z) -> str:\n return', 'my_function(x, y, z) -> str'), + ('lambda x, y, z: x + y * z\n', '(x, y, z)') + ]) +def test_get_call_signature(code, call_signature): + node = parse(code, version='3.5').children[0] + if node.type == 'simple_stmt': + node = node.children[0] + assert parser_utils.get_call_signature(node) == call_signature diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_settings.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_settings.py new file mode 100644 index 0000000..e97b2fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_settings.py @@ -0,0 +1,34 @@ +import pytest + +from jedi import settings +from jedi.evaluate.names import ContextName +from jedi.evaluate.compiled import CompiledContextName +from jedi.evaluate.gradual.typeshed import StubModuleContext + + +@pytest.fixture() +def auto_import_json(monkeypatch): + monkeypatch.setattr(settings, 'auto_import_modules', ['json']) + + +def test_base_auto_import_modules(auto_import_json, Script): + loads, = Script('import json; json.loads').goto_definitions() + assert isinstance(loads._name, ContextName) + context, = loads._name.infer() + assert isinstance(context.parent_context, StubModuleContext) + + +def test_auto_import_modules_imports(auto_import_json, Script): + main, = Script('from json import tool; tool.main').goto_definitions() + assert isinstance(main._name, CompiledContextName) + + +def test_additional_dynamic_modules(monkeypatch, Script): + # We could add further tests, but for now it's even more important that + # this doesn't fail. + monkeypatch.setattr( + settings, + 'additional_dynamic_modules', + ['/foo/bar/jedi_not_existing_file.py'] + ) + assert not Script('def some_func(f):\n f.').completions() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_speed.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_speed.py new file mode 100644 index 0000000..ba5784a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_speed.py @@ -0,0 +1,73 @@ +""" +Speed tests of Jedi. To prove that certain things don't take longer than they +should. +""" + +import time +import functools + +from .helpers import cwd_at +import jedi + + +def _check_speed(time_per_run, number=4, run_warm=True): + """ Speed checks should typically be very tolerant. Some machines are + faster than others, but the tests should still pass. These tests are + here to assure that certain effects that kill jedi performance are not + reintroduced to Jedi.""" + def decorated(func): + @functools.wraps(func) + def wrapper(Script, **kwargs): + if run_warm: + func(Script=Script, **kwargs) + first = time.time() + for i in range(number): + func(Script=Script, **kwargs) + single_time = (time.time() - first) / number + message = 'speed issue %s, %s' % (func, single_time) + assert single_time < time_per_run, message + return wrapper + return decorated + + +@_check_speed(0.5) +def test_os_path_join(Script): + s = "from posixpath import join; join('', '')." + assert len(Script(s).completions()) > 10 # is a str completion + + +@_check_speed(0.15) +def test_scipy_speed(Script): + s = 'import scipy.weave; scipy.weave.inline(' + script = Script(s, 1, len(s), '') + script.call_signatures() + + +@_check_speed(0.8) +@cwd_at('test') +def test_precedence_slowdown(Script): + """ + Precedence calculation can slow down things significantly in edge + cases. Having strange recursion structures increases the problem. + """ + with open('speed/precedence.py') as f: + line = len(f.read().splitlines()) + assert Script(line=line, path='speed/precedence.py').goto_definitions() + + +@_check_speed(0.1) +def test_no_repr_computation(Script): + """ + For Interpreter completion aquisition of sourcefile can trigger + unwanted computation of repr(). Exemple : big pandas data. + See issue #919. + """ + class SlowRepr: + "class to test what happens if __repr__ is very slow." + def some_method(self): + pass + + def __repr__(self): + time.sleep(0.2) + test = SlowRepr() + jedi.Interpreter('test.som', [locals()]).completions() diff --git a/vim/bundle/jedi-vim/pythonx/jedi/test/test_utils.py b/vim/bundle/jedi-vim/pythonx/jedi/test/test_utils.py new file mode 100644 index 0000000..17328a3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/test/test_utils.py @@ -0,0 +1,115 @@ +try: + import readline +except ImportError: + readline = False + +from jedi import utils + +from .helpers import unittest, cwd_at + + +@unittest.skipIf(not readline, "readline not found") +class TestSetupReadline(unittest.TestCase): + class NameSpace(object): + pass + + def __init__(self, *args, **kwargs): + super(type(self), self).__init__(*args, **kwargs) + + self.namespace = self.NameSpace() + utils.setup_readline(self.namespace) + + def completions(self, text): + completer = readline.get_completer() + i = 0 + completions = [] + while True: + completion = completer(text, i) + if completion is None: + break + completions.append(completion) + i += 1 + return completions + + def test_simple(self): + assert self.completions('list') == ['list'] + assert self.completions('importerror') == ['ImportError'] + s = "print(BaseE" + assert self.completions(s) == [s + 'xception'] + + def test_nested(self): + assert self.completions('list.Insert') == ['list.insert'] + assert self.completions('list().Insert') == ['list().insert'] + + def test_magic_methods(self): + assert self.completions('list.__getitem__') == ['list.__getitem__'] + assert self.completions('list().__getitem__') == ['list().__getitem__'] + + def test_modules(self): + import sys + import os + self.namespace.sys = sys + self.namespace.os = os + + try: + assert self.completions('os.path.join') == ['os.path.join'] + string = 'os.path.join("a").upper' + assert self.completions(string) == [string] + + c = {'os.' + d for d in dir(os) if d.startswith('ch')} + assert set(self.completions('os.ch')) == set(c) + finally: + del self.namespace.sys + del self.namespace.os + + def test_calls(self): + s = 'str(bytes' + assert self.completions(s) == [s, 'str(BytesWarning'] + + def test_import(self): + s = 'from os.path import a' + assert set(self.completions(s)) == {s + 'ltsep', s + 'bspath'} + assert self.completions('import keyword') == ['import keyword'] + + import os + s = 'from os import ' + goal = {s + el for el in dir(os)} + # There are minor differences, e.g. the dir doesn't include deleted + # items as well as items that are not only available on linux. + difference = set(self.completions(s)).symmetric_difference(goal) + difference = {x for x in difference if not x.startswith('from os import _')} + # There are quite a few differences, because both Windows and Linux + # (posix and nt) libraries are included. + assert len(difference) < 38 + + @cwd_at('test') + def test_local_import(self): + s = 'import test_utils' + assert self.completions(s) == [s] + + def test_preexisting_values(self): + self.namespace.a = range(10) + assert set(self.completions('a.')) == {'a.' + n for n in dir(range(1))} + del self.namespace.a + + def test_colorama(self): + """ + Only test it if colorama library is available. + + This module is being tested because it uses ``setattr`` at some point, + which Jedi doesn't understand, but it should still work in the REPL. + """ + try: + # if colorama is installed + import colorama + except ImportError: + pass + else: + self.namespace.colorama = colorama + assert self.completions('colorama') + assert self.completions('colorama.Fore.BLACK') == ['colorama.Fore.BLACK'] + del self.namespace.colorama + + +def test_version_info(): + assert utils.version_info()[:2] > (0, 7) diff --git a/vim/bundle/jedi-vim/pythonx/jedi/tox.ini b/vim/bundle/jedi-vim/pythonx/jedi/tox.ini new file mode 100644 index 0000000..e5cac2e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/jedi/tox.ini @@ -0,0 +1,39 @@ +[tox] +envlist = py27, py34, py35, py36, py37 +[testenv] +extras = testing +deps = +# for testing the typing module + py27: typing + py34: typing +# numpydoc for typing scipy stack + numpydoc +# sphinx, a dependency of numpydoc, dropped Python 2 support in version 2.0 + sphinx < 2.0 + cov: coverage +# Overwrite the parso version (only used sometimes). + git+https://github.com/davidhalter/parso.git +passenv = JEDI_TEST_ENVIRONMENT +setenv = +# https://github.com/tomchristie/django-rest-framework/issues/1957 +# tox corrupts __pycache__, solution from here: + PYTHONDONTWRITEBYTECODE=1 +# Enable all warnings. + PYTHONWARNINGS=always +# To test Jedi in different versions than the same Python version, set a +# different test environment. + env27: JEDI_TEST_ENVIRONMENT=27 + env34: JEDI_TEST_ENVIRONMENT=34 + env35: JEDI_TEST_ENVIRONMENT=35 + env36: JEDI_TEST_ENVIRONMENT=36 + env37: JEDI_TEST_ENVIRONMENT=37 +commands = + pytest {posargs} +[testenv:cov] +commands = + coverage run --source jedi -m pytest + coverage report +[testenv:sith] +commands = + {envpython} -c "import os; a='{envtmpdir}'; os.path.exists(a) or os.makedirs(a)" + {envpython} sith.py --record {envtmpdir}/record.json random {posargs:jedi} diff --git a/vim/bundle/jedi-vim/pythonx/parso/.coveragerc b/vim/bundle/jedi-vim/pythonx/parso/.coveragerc new file mode 100644 index 0000000..c022851 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/.coveragerc @@ -0,0 +1,11 @@ +[run] +source = parso + +[report] +# Regexes for lines to exclude from consideration +exclude_lines = + # Don't complain about missing debug-only code: + def __repr__ + + # Don't complain if non-runnable code isn't run: + if __name__ == .__main__.: diff --git a/vim/bundle/jedi-vim/pythonx/parso/.travis.yml b/vim/bundle/jedi-vim/pythonx/parso/.travis.yml new file mode 100644 index 0000000..9be70c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/.travis.yml @@ -0,0 +1,25 @@ +dist: xenial +language: python +python: + - 2.7 + - 3.4 + - 3.5 + - 3.6 + - 3.7 + - 3.8-dev + - pypy2.7-6.0 + - pypy3.5-6.0 +matrix: + include: + - python: 3.5 + env: TOXENV=py35-coverage +install: + - pip install --quiet tox-travis +script: + - tox +after_script: + - | + if [ "${TOXENV%-coverage}" == "$TOXENV" ]; then + pip install --quiet coveralls; + coveralls; + fi diff --git a/vim/bundle/jedi-vim/pythonx/parso/AUTHORS.txt b/vim/bundle/jedi-vim/pythonx/parso/AUTHORS.txt new file mode 100644 index 0000000..e16c04c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/AUTHORS.txt @@ -0,0 +1,54 @@ +Main Authors +============ + +David Halter (@davidhalter) + +Code Contributors +================= +Alisdair Robertson (@robodair) + + +Code Contributors (to Jedi and therefore possibly to this library) +================================================================== + +Takafumi Arakaki (@tkf) +Danilo Bargen (@dbrgn) +Laurens Van Houtven (@lvh) <_@lvh.cc> +Aldo Stracquadanio (@Astrac) +Jean-Louis Fuchs (@ganwell) +tek (@tek) +Yasha Borevich (@jjay) +Aaron Griffin +andviro (@andviro) +Mike Gilbert (@floppym) +Aaron Meurer (@asmeurer) +Lubos Trilety +Akinori Hattori (@hattya) +srusskih (@srusskih) +Steven Silvester (@blink1073) +Colin Duquesnoy (@ColinDuquesnoy) +Jorgen Schaefer (@jorgenschaefer) +Fredrik Bergroth (@fbergroth) +Mathias Fußenegger (@mfussenegger) +Syohei Yoshida (@syohex) +ppalucky (@ppalucky) +immerrr (@immerrr) immerrr@gmail.com +Albertas Agejevas (@alga) +Savor d'Isavano (@KenetJervet) +Phillip Berndt (@phillipberndt) +Ian Lee (@IanLee1521) +Farkhad Khatamov (@hatamov) +Kevin Kelley (@kelleyk) +Sid Shanker (@squidarth) +Reinoud Elhorst (@reinhrst) +Guido van Rossum (@gvanrossum) +Dmytro Sadovnychyi (@sadovnychyi) +Cristi Burcă (@scribu) +bstaint (@bstaint) +Mathias Rav (@Mortal) +Daniel Fiterman (@dfit99) +Simon Ruggier (@sruggier) +Élie Gouzien (@ElieGouzien) + + +Note: (@user) means a github user name. diff --git a/vim/bundle/jedi-vim/pythonx/parso/CHANGELOG.rst b/vim/bundle/jedi-vim/pythonx/parso/CHANGELOG.rst new file mode 100644 index 0000000..a02b191 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/CHANGELOG.rst @@ -0,0 +1,77 @@ +.. :changelog: + +Changelog +--------- + +0.5.1 (2019-07-13) +++++++++++++++++++ + +- Fix: Some unicode identifiers were not correctly tokenized +- Fix: Line continuations in f-strings are now working + +0.5.0 (2019-06-20) +++++++++++++++++++ + +- **Breaking Change** comp_for is now called sync_comp_for for all Python + versions to be compatible with the Python 3.8 Grammar +- Added .pyi stubs for a lot of the parso API +- Small FileIO changes + +0.4.0 (2019-04-05) +++++++++++++++++++ + +- Python 3.8 support +- FileIO support, it's now possible to use abstract file IO, support is alpha + +0.3.4 (2019-02-13) ++++++++++++++++++++ + +- Fix an f-string tokenizer error + +0.3.3 (2019-02-06) ++++++++++++++++++++ + +- Fix async errors in the diff parser +- A fix in iter_errors +- This is a very small bugfix release + +0.3.2 (2019-01-24) ++++++++++++++++++++ + +- 20+ bugfixes in the diff parser and 3 in the tokenizer +- A fuzzer for the diff parser, to give confidence that the diff parser is in a + good shape. +- Some bugfixes for f-string + +0.3.1 (2018-07-09) ++++++++++++++++++++ + +- Bugfixes in the diff parser and keyword-only arguments + +0.3.0 (2018-06-30) ++++++++++++++++++++ + +- Rewrote the pgen2 parser generator. + +0.2.1 (2018-05-21) ++++++++++++++++++++ + +- A bugfix for the diff parser. +- Grammar files can now be loaded from a specific path. + +0.2.0 (2018-04-15) ++++++++++++++++++++ + +- f-strings are now parsed as a part of the normal Python grammar. This makes + it way easier to deal with them. + +0.1.1 (2017-11-05) ++++++++++++++++++++ + +- Fixed a few bugs in the caching layer +- Added support for Python 3.7 + +0.1.0 (2017-09-04) ++++++++++++++++++++ + +- Pulling the library out of Jedi. Some APIs will definitely change. diff --git a/vim/bundle/jedi-vim/pythonx/parso/CONTRIBUTING.md b/vim/bundle/jedi-vim/pythonx/parso/CONTRIBUTING.md new file mode 100644 index 0000000..60aa841 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/CONTRIBUTING.md @@ -0,0 +1,8 @@ +We <3 Pull Requests! Three core things: + + 1. If you are adding functionality or fixing a bug, please add a test! + 2. Add your name to AUTHORS.txt + 3. Use the PEP8 style guide. + + If you want to add methods to the parser tree, we will need to discuss this in + an issue first. diff --git a/vim/bundle/jedi-vim/pythonx/parso/LICENSE.txt b/vim/bundle/jedi-vim/pythonx/parso/LICENSE.txt new file mode 100644 index 0000000..08c41db --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/LICENSE.txt @@ -0,0 +1,86 @@ +All contributions towards parso are MIT licensed. + +Some Python files have been taken from the standard library and are therefore +PSF licensed. Modifications on these files are dual licensed (both MIT and +PSF). These files are: + +- parso/pgen2/* +- parso/tokenize.py +- parso/token.py +- test/test_pgen2.py + +Also some test files under test/normalizer_issue_files have been copied from +https://github.com/PyCQA/pycodestyle (Expat License == MIT License). + +------------------------------------------------------------------------------- +The MIT License (MIT) + +Copyright (c) <2013-2017> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +------------------------------------------------------------------------------- + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. diff --git a/vim/bundle/jedi-vim/pythonx/parso/MANIFEST.in b/vim/bundle/jedi-vim/pythonx/parso/MANIFEST.in new file mode 100644 index 0000000..fb90b35 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/MANIFEST.in @@ -0,0 +1,12 @@ +include README.rst +include CHANGELOG.rst +include LICENSE.txt +include AUTHORS.txt +include .coveragerc +include conftest.py +include pytest.ini +include tox.ini +include parso/python/grammar*.txt +recursive-include test * +recursive-include docs * +recursive-exclude * *.pyc diff --git a/vim/bundle/jedi-vim/pythonx/parso/README.rst b/vim/bundle/jedi-vim/pythonx/parso/README.rst new file mode 100644 index 0000000..1056ea6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/README.rst @@ -0,0 +1,91 @@ +################################################################### +parso - A Python Parser +################################################################### + + +.. image:: https://travis-ci.org/davidhalter/parso.svg?branch=master + :target: https://travis-ci.org/davidhalter/parso + :alt: Travis CI build status + +.. image:: https://coveralls.io/repos/github/davidhalter/parso/badge.svg?branch=master + :target: https://coveralls.io/github/davidhalter/parso?branch=master + :alt: Coverage Status + +.. image:: https://raw.githubusercontent.com/davidhalter/parso/master/docs/_static/logo_characters.png + +Parso is a Python parser that supports error recovery and round-trip parsing +for different Python versions (in multiple Python versions). Parso is also able +to list multiple syntax errors in your python file. + +Parso has been battle-tested by jedi_. It was pulled out of jedi to be useful +for other projects as well. + +Parso consists of a small API to parse Python and analyse the syntax tree. + +A simple example: + +.. code-block:: python + + >>> import parso + >>> module = parso.parse('hello + 1', version="3.6") + >>> expr = module.children[0] + >>> expr + PythonNode(arith_expr, [, , ]) + >>> print(expr.get_code()) + hello + 1 + >>> name = expr.children[0] + >>> name + + >>> name.end_pos + (1, 5) + >>> expr.end_pos + (1, 9) + +To list multiple issues: + +.. code-block:: python + + >>> grammar = parso.load_grammar() + >>> module = grammar.parse('foo +\nbar\ncontinue') + >>> error1, error2 = grammar.iter_errors(module) + >>> error1.message + 'SyntaxError: invalid syntax' + >>> error2.message + "SyntaxError: 'continue' not properly in loop" + +Resources +========= + +- `Testing `_ +- `PyPI `_ +- `Docs `_ +- Uses `semantic versioning `_ + +Installation +============ + + pip install parso + +Future +====== + +- There will be better support for refactoring and comments. Stay tuned. +- There's a WIP PEP8 validator. It's however not in a good shape, yet. + +Known Issues +============ + +- `async`/`await` are already used as keywords in Python3.6. +- `from __future__ import print_function` is not ignored. + + +Acknowledgements +================ + +- Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 + (originally used in lib2to3). +- `Salome Schneider `_ + for the extremely awesome parso logo. + + +.. _jedi: https://github.com/davidhalter/jedi diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/__init__.py new file mode 100644 index 0000000..a16a72f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/__init__.py @@ -0,0 +1,58 @@ +r""" +Parso is a Python parser that supports error recovery and round-trip parsing +for different Python versions (in multiple Python versions). Parso is also able +to list multiple syntax errors in your python file. + +Parso has been battle-tested by jedi_. It was pulled out of jedi to be useful +for other projects as well. + +Parso consists of a small API to parse Python and analyse the syntax tree. + +.. _jedi: https://github.com/davidhalter/jedi + +A simple example: + +>>> import parso +>>> module = parso.parse('hello + 1', version="3.6") +>>> expr = module.children[0] +>>> expr +PythonNode(arith_expr, [, , ]) +>>> print(expr.get_code()) +hello + 1 +>>> name = expr.children[0] +>>> name + +>>> name.end_pos +(1, 5) +>>> expr.end_pos +(1, 9) + +To list multiple issues: + +>>> grammar = parso.load_grammar() +>>> module = grammar.parse('foo +\nbar\ncontinue') +>>> error1, error2 = grammar.iter_errors(module) +>>> error1.message +'SyntaxError: invalid syntax' +>>> error2.message +"SyntaxError: 'continue' not properly in loop" +""" + +from parso.parser import ParserSyntaxError +from parso.grammar import Grammar, load_grammar +from parso.utils import split_lines, python_bytes_to_unicode + + +__version__ = '0.5.1' + + +def parse(code=None, **kwargs): + """ + A utility function to avoid loading grammars. + Params are documented in :py:meth:`parso.Grammar.parse`. + + :param str version: The version used by :py:func:`parso.load_grammar`. + """ + version = kwargs.pop('version', None) + grammar = load_grammar(version=version) + return grammar.parse(code, **kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/_compatibility.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/_compatibility.py new file mode 100644 index 0000000..db411ee --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/_compatibility.py @@ -0,0 +1,103 @@ +""" +To ensure compatibility from Python ``2.6`` - ``3.3``, a module has been +created. Clearly there is huge need to use conforming syntax. +""" +import sys +import platform + +# Cannot use sys.version.major and minor names, because in Python 2.6 it's not +# a namedtuple. +py_version = int(str(sys.version_info[0]) + str(sys.version_info[1])) + +# unicode function +try: + unicode = unicode +except NameError: + unicode = str + +is_pypy = platform.python_implementation() == 'PyPy' + + +def use_metaclass(meta, *bases): + """ Create a class with a metaclass. """ + if not bases: + bases = (object,) + return meta("HackClass", bases, {}) + + +try: + encoding = sys.stdout.encoding + if encoding is None: + encoding = 'utf-8' +except AttributeError: + encoding = 'ascii' + + +def u(string): + """Cast to unicode DAMMIT! + Written because Python2 repr always implicitly casts to a string, so we + have to cast back to a unicode (and we know that we always deal with valid + unicode, because we check that in the beginning). + """ + if py_version >= 30: + return str(string) + + if not isinstance(string, unicode): + return unicode(str(string), 'UTF-8') + return string + + +try: + FileNotFoundError = FileNotFoundError +except NameError: + FileNotFoundError = IOError + + +def utf8_repr(func): + """ + ``__repr__`` methods in Python 2 don't allow unicode objects to be + returned. Therefore cast them to utf-8 bytes in this decorator. + """ + def wrapper(self): + result = func(self) + if isinstance(result, unicode): + return result.encode('utf-8') + else: + return result + + if py_version >= 30: + return func + else: + return wrapper + + +try: + from functools import total_ordering +except ImportError: + # Python 2.6 + def total_ordering(cls): + """Class decorator that fills in missing ordering methods""" + convert = { + '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)), + ('__le__', lambda self, other: self < other or self == other), + ('__ge__', lambda self, other: not self < other)], + '__le__': [('__ge__', lambda self, other: not self <= other or self == other), + ('__lt__', lambda self, other: self <= other and not self == other), + ('__gt__', lambda self, other: not self <= other)], + '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)), + ('__ge__', lambda self, other: self > other or self == other), + ('__le__', lambda self, other: not self > other)], + '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other), + ('__gt__', lambda self, other: self >= other and not self == other), + ('__lt__', lambda self, other: not self >= other)] + } + roots = set(dir(cls)) & set(convert) + if not roots: + raise ValueError('must define at least one ordering operation: < > <= >=') + root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__ + for opname, opfunc in convert[root]: + if opname not in roots: + opfunc.__name__ = opname + opfunc.__doc__ = getattr(int, opname).__doc__ + setattr(cls, opname, opfunc) + return cls diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/cache.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/cache.py new file mode 100644 index 0000000..1f8d886 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/cache.py @@ -0,0 +1,169 @@ +import time +import os +import sys +import hashlib +import gc +import shutil +import platform +import errno +import logging + +try: + import cPickle as pickle +except: + import pickle + +from parso._compatibility import FileNotFoundError + +LOG = logging.getLogger(__name__) + + +_PICKLE_VERSION = 32 +""" +Version number (integer) for file system cache. + +Increment this number when there are any incompatible changes in +the parser tree classes. For example, the following changes +are regarded as incompatible. + +- A class name is changed. +- A class is moved to another module. +- A __slot__ of a class is changed. +""" + +_VERSION_TAG = '%s-%s%s-%s' % ( + platform.python_implementation(), + sys.version_info[0], + sys.version_info[1], + _PICKLE_VERSION +) +""" +Short name for distinguish Python implementations and versions. + +It's like `sys.implementation.cache_tag` but for Python < 3.3 +we generate something similar. See: +http://docs.python.org/3/library/sys.html#sys.implementation +""" + + +def _get_default_cache_path(): + if platform.system().lower() == 'windows': + dir_ = os.path.join(os.getenv('LOCALAPPDATA') or '~', 'Parso', 'Parso') + elif platform.system().lower() == 'darwin': + dir_ = os.path.join('~', 'Library', 'Caches', 'Parso') + else: + dir_ = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', 'parso') + return os.path.expanduser(dir_) + + +_default_cache_path = _get_default_cache_path() +""" +The path where the cache is stored. + +On Linux, this defaults to ``~/.cache/parso/``, on OS X to +``~/Library/Caches/Parso/`` and on Windows to ``%LOCALAPPDATA%\\Parso\\Parso\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/parso`` is used instead of the default one. +""" + +parser_cache = {} + + +class _NodeCacheItem(object): + def __init__(self, node, lines, change_time=None): + self.node = node + self.lines = lines + if change_time is None: + change_time = time.time() + self.change_time = change_time + + +def load_module(hashed_grammar, file_io, cache_path=None): + """ + Returns a module or None, if it fails. + """ + p_time = file_io.get_last_modified() + if p_time is None: + return None + + try: + module_cache_item = parser_cache[hashed_grammar][file_io.path] + if p_time <= module_cache_item.change_time: + return module_cache_item.node + except KeyError: + return _load_from_file_system( + hashed_grammar, + file_io.path, + p_time, + cache_path=cache_path + ) + + +def _load_from_file_system(hashed_grammar, path, p_time, cache_path=None): + cache_path = _get_hashed_path(hashed_grammar, path, cache_path=cache_path) + try: + try: + if p_time > os.path.getmtime(cache_path): + # Cache is outdated + return None + except OSError as e: + if e.errno == errno.ENOENT: + # In Python 2 instead of an IOError here we get an OSError. + raise FileNotFoundError + else: + raise + + with open(cache_path, 'rb') as f: + gc.disable() + try: + module_cache_item = pickle.load(f) + finally: + gc.enable() + except FileNotFoundError: + return None + else: + parser_cache.setdefault(hashed_grammar, {})[path] = module_cache_item + LOG.debug('pickle loaded: %s', path) + return module_cache_item.node + + +def save_module(hashed_grammar, file_io, module, lines, pickling=True, cache_path=None): + path = file_io.path + try: + p_time = None if path is None else file_io.get_last_modified() + except OSError: + p_time = None + pickling = False + + item = _NodeCacheItem(module, lines, p_time) + parser_cache.setdefault(hashed_grammar, {})[path] = item + if pickling and path is not None: + _save_to_file_system(hashed_grammar, path, item, cache_path=cache_path) + + +def _save_to_file_system(hashed_grammar, path, item, cache_path=None): + with open(_get_hashed_path(hashed_grammar, path, cache_path=cache_path), 'wb') as f: + pickle.dump(item, f, pickle.HIGHEST_PROTOCOL) + + +def clear_cache(cache_path=None): + if cache_path is None: + cache_path = _default_cache_path + shutil.rmtree(cache_path) + parser_cache.clear() + + +def _get_hashed_path(hashed_grammar, path, cache_path=None): + directory = _get_cache_directory_path(cache_path=cache_path) + + file_hash = hashlib.sha256(path.encode("utf-8")).hexdigest() + return os.path.join(directory, '%s-%s.pkl' % (hashed_grammar, file_hash)) + + +def _get_cache_directory_path(cache_path=None): + if cache_path is None: + cache_path = _default_cache_path + directory = os.path.join(cache_path, _VERSION_TAG) + if not os.path.exists(directory): + os.makedirs(directory) + return directory diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/file_io.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/file_io.py new file mode 100644 index 0000000..94fe08e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/file_io.py @@ -0,0 +1,35 @@ +import os + + +class FileIO(object): + def __init__(self, path): + self.path = path + + def read(self): # Returns bytes/str + # We would like to read unicode here, but we cannot, because we are not + # sure if it is a valid unicode file. Therefore just read whatever is + # here. + with open(self.path, 'rb') as f: + return f.read() + + def get_last_modified(self): + """ + Returns float - timestamp or None, if path doesn't exist. + """ + try: + return os.path.getmtime(self.path) + except OSError: + # Might raise FileNotFoundError, OSError for Python 2 + return None + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.path) + + +class KnownContentFileIO(FileIO): + def __init__(self, path, content): + super(KnownContentFileIO, self).__init__(path) + self._content = content + + def read(self): + return self._content diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/grammar.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/grammar.py new file mode 100644 index 0000000..41bbe20 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/grammar.py @@ -0,0 +1,256 @@ +import hashlib +import os + +from parso._compatibility import FileNotFoundError, is_pypy +from parso.pgen2 import generate_grammar +from parso.utils import split_lines, python_bytes_to_unicode, parse_version_string +from parso.python.diff import DiffParser +from parso.python.tokenize import tokenize_lines, tokenize +from parso.python.token import PythonTokenTypes +from parso.cache import parser_cache, load_module, save_module +from parso.parser import BaseParser +from parso.python.parser import Parser as PythonParser +from parso.python.errors import ErrorFinderConfig +from parso.python import pep8 +from parso.file_io import FileIO, KnownContentFileIO + +_loaded_grammars = {} + + +class Grammar(object): + """ + :py:func:`parso.load_grammar` returns instances of this class. + + Creating custom none-python grammars by calling this is not supported, yet. + """ + #:param text: A BNF representation of your grammar. + _error_normalizer_config = None + _token_namespace = None + _default_normalizer_config = pep8.PEP8NormalizerConfig() + + def __init__(self, text, tokenizer, parser=BaseParser, diff_parser=None): + self._pgen_grammar = generate_grammar( + text, + token_namespace=self._get_token_namespace() + ) + self._parser = parser + self._tokenizer = tokenizer + self._diff_parser = diff_parser + self._hashed = hashlib.sha256(text.encode("utf-8")).hexdigest() + + def parse(self, code=None, **kwargs): + """ + If you want to parse a Python file you want to start here, most likely. + + If you need finer grained control over the parsed instance, there will be + other ways to access it. + + :param str code: A unicode or bytes string. When it's not possible to + decode bytes to a string, returns a + :py:class:`UnicodeDecodeError`. + :param bool error_recovery: If enabled, any code will be returned. If + it is invalid, it will be returned as an error node. If disabled, + you will get a ParseError when encountering syntax errors in your + code. + :param str start_symbol: The grammar rule (nonterminal) that you want + to parse. Only allowed to be used when error_recovery is False. + :param str path: The path to the file you want to open. Only needed for caching. + :param bool cache: Keeps a copy of the parser tree in RAM and on disk + if a path is given. Returns the cached trees if the corresponding + files on disk have not changed. Note that this stores pickle files + on your file system (e.g. for Linux in ``~/.cache/parso/``). + :param bool diff_cache: Diffs the cached python module against the new + code and tries to parse only the parts that have changed. Returns + the same (changed) module that is found in cache. Using this option + requires you to not do anything anymore with the cached modules + under that path, because the contents of it might change. This + option is still somewhat experimental. If you want stability, + please don't use it. + :param bool cache_path: If given saves the parso cache in this + directory. If not given, defaults to the default cache places on + each platform. + + :return: A subclass of :py:class:`parso.tree.NodeOrLeaf`. Typically a + :py:class:`parso.python.tree.Module`. + """ + if 'start_pos' in kwargs: + raise TypeError("parse() got an unexpected keyword argument.") + return self._parse(code=code, **kwargs) + + def _parse(self, code=None, error_recovery=True, path=None, + start_symbol=None, cache=False, diff_cache=False, + cache_path=None, file_io=None, start_pos=(1, 0)): + """ + Wanted python3.5 * operator and keyword only arguments. Therefore just + wrap it all. + start_pos here is just a parameter internally used. Might be public + sometime in the future. + """ + if code is None and path is None and file_io is None: + raise TypeError("Please provide either code or a path.") + + if start_symbol is None: + start_symbol = self._start_nonterminal + + if error_recovery and start_symbol != 'file_input': + raise NotImplementedError("This is currently not implemented.") + + if file_io is None: + if code is None: + file_io = FileIO(path) + else: + file_io = KnownContentFileIO(path, code) + + if cache and file_io.path is not None: + module_node = load_module(self._hashed, file_io, cache_path=cache_path) + if module_node is not None: + return module_node + + if code is None: + code = file_io.read() + code = python_bytes_to_unicode(code) + + lines = split_lines(code, keepends=True) + if diff_cache: + if self._diff_parser is None: + raise TypeError("You have to define a diff parser to be able " + "to use this option.") + try: + module_cache_item = parser_cache[self._hashed][file_io.path] + except KeyError: + pass + else: + module_node = module_cache_item.node + old_lines = module_cache_item.lines + if old_lines == lines: + return module_node + + new_node = self._diff_parser( + self._pgen_grammar, self._tokenizer, module_node + ).update( + old_lines=old_lines, + new_lines=lines + ) + save_module(self._hashed, file_io, new_node, lines, + # Never pickle in pypy, it's slow as hell. + pickling=cache and not is_pypy, + cache_path=cache_path) + return new_node + + tokens = self._tokenizer(lines, start_pos) + + p = self._parser( + self._pgen_grammar, + error_recovery=error_recovery, + start_nonterminal=start_symbol + ) + root_node = p.parse(tokens=tokens) + + if cache or diff_cache: + save_module(self._hashed, file_io, root_node, lines, + # Never pickle in pypy, it's slow as hell. + pickling=cache and not is_pypy, + cache_path=cache_path) + return root_node + + def _get_token_namespace(self): + ns = self._token_namespace + if ns is None: + raise ValueError("The token namespace should be set.") + return ns + + def iter_errors(self, node): + """ + Given a :py:class:`parso.tree.NodeOrLeaf` returns a generator of + :py:class:`parso.normalizer.Issue` objects. For Python this is + a list of syntax/indentation errors. + """ + if self._error_normalizer_config is None: + raise ValueError("No error normalizer specified for this grammar.") + + return self._get_normalizer_issues(node, self._error_normalizer_config) + + def _get_normalizer(self, normalizer_config): + if normalizer_config is None: + normalizer_config = self._default_normalizer_config + if normalizer_config is None: + raise ValueError("You need to specify a normalizer, because " + "there's no default normalizer for this tree.") + return normalizer_config.create_normalizer(self) + + def _normalize(self, node, normalizer_config=None): + """ + TODO this is not public, yet. + The returned code will be normalized, e.g. PEP8 for Python. + """ + normalizer = self._get_normalizer(normalizer_config) + return normalizer.walk(node) + + def _get_normalizer_issues(self, node, normalizer_config=None): + normalizer = self._get_normalizer(normalizer_config) + normalizer.walk(node) + return normalizer.issues + + def __repr__(self): + nonterminals = self._pgen_grammar.nonterminal_to_dfas.keys() + txt = ' '.join(list(nonterminals)[:3]) + ' ...' + return '<%s:%s>' % (self.__class__.__name__, txt) + + +class PythonGrammar(Grammar): + _error_normalizer_config = ErrorFinderConfig() + _token_namespace = PythonTokenTypes + _start_nonterminal = 'file_input' + + def __init__(self, version_info, bnf_text): + super(PythonGrammar, self).__init__( + bnf_text, + tokenizer=self._tokenize_lines, + parser=PythonParser, + diff_parser=DiffParser + ) + self.version_info = version_info + + def _tokenize_lines(self, lines, start_pos): + return tokenize_lines(lines, self.version_info, start_pos=start_pos) + + def _tokenize(self, code): + # Used by Jedi. + return tokenize(code, self.version_info) + + +def load_grammar(**kwargs): + """ + Loads a :py:class:`parso.Grammar`. The default version is the current Python + version. + + :param str version: A python version string, e.g. ``version='3.3'``. + :param str path: A path to a grammar file + """ + def load_grammar(language='python', version=None, path=None): + if language == 'python': + version_info = parse_version_string(version) + + file = path or os.path.join( + 'python', + 'grammar%s%s.txt' % (version_info.major, version_info.minor) + ) + + global _loaded_grammars + path = os.path.join(os.path.dirname(__file__), file) + try: + return _loaded_grammars[path] + except KeyError: + try: + with open(path) as f: + bnf_text = f.read() + + grammar = PythonGrammar(version_info, bnf_text) + return _loaded_grammars.setdefault(path, grammar) + except FileNotFoundError: + message = "Python version %s is currently not supported." % version + raise NotImplementedError(message) + else: + raise NotImplementedError("No support for language %s." % language) + + return load_grammar(**kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/normalizer.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/normalizer.py new file mode 100644 index 0000000..b076fe5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/normalizer.py @@ -0,0 +1,183 @@ +from contextlib import contextmanager + +from parso._compatibility import use_metaclass + + +class _NormalizerMeta(type): + def __new__(cls, name, bases, dct): + new_cls = type.__new__(cls, name, bases, dct) + new_cls.rule_value_classes = {} + new_cls.rule_type_classes = {} + return new_cls + + +class Normalizer(use_metaclass(_NormalizerMeta)): + def __init__(self, grammar, config): + self.grammar = grammar + self._config = config + self.issues = [] + + self._rule_type_instances = self._instantiate_rules('rule_type_classes') + self._rule_value_instances = self._instantiate_rules('rule_value_classes') + + def _instantiate_rules(self, attr): + dct = {} + for base in type(self).mro(): + rules_map = getattr(base, attr, {}) + for type_, rule_classes in rules_map.items(): + new = [rule_cls(self) for rule_cls in rule_classes] + dct.setdefault(type_, []).extend(new) + return dct + + def walk(self, node): + self.initialize(node) + value = self.visit(node) + self.finalize() + return value + + def visit(self, node): + try: + children = node.children + except AttributeError: + return self.visit_leaf(node) + else: + with self.visit_node(node): + return ''.join(self.visit(child) for child in children) + + @contextmanager + def visit_node(self, node): + self._check_type_rules(node) + yield + + def _check_type_rules(self, node): + for rule in self._rule_type_instances.get(node.type, []): + rule.feed_node(node) + + def visit_leaf(self, leaf): + self._check_type_rules(leaf) + + for rule in self._rule_value_instances.get(leaf.value, []): + rule.feed_node(leaf) + + return leaf.prefix + leaf.value + + def initialize(self, node): + pass + + def finalize(self): + pass + + def add_issue(self, node, code, message): + issue = Issue(node, code, message) + if issue not in self.issues: + self.issues.append(issue) + return True + + @classmethod + def register_rule(cls, **kwargs): + """ + Use it as a class decorator:: + + normalizer = Normalizer('grammar', 'config') + @normalizer.register_rule(value='foo') + class MyRule(Rule): + error_code = 42 + """ + return cls._register_rule(**kwargs) + + @classmethod + def _register_rule(cls, value=None, values=(), type=None, types=()): + values = list(values) + types = list(types) + if value is not None: + values.append(value) + if type is not None: + types.append(type) + + if not values and not types: + raise ValueError("You must register at least something.") + + def decorator(rule_cls): + for v in values: + cls.rule_value_classes.setdefault(v, []).append(rule_cls) + for t in types: + cls.rule_type_classes.setdefault(t, []).append(rule_cls) + return rule_cls + + return decorator + + +class NormalizerConfig(object): + normalizer_class = Normalizer + + def create_normalizer(self, grammar): + if self.normalizer_class is None: + return None + + return self.normalizer_class(grammar, self) + + +class Issue(object): + def __init__(self, node, code, message): + self._node = node + self.code = code + """ + An integer code that stands for the type of error. + """ + self.message = message + """ + A message (string) for the issue. + """ + self.start_pos = node.start_pos + """ + The start position position of the error as a tuple (line, column). As + always in |parso| the first line is 1 and the first column 0. + """ + + def __eq__(self, other): + return self.start_pos == other.start_pos and self.code == other.code + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self.code, self.start_pos)) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.code) + + +class Rule(object): + code = None + message = None + + def __init__(self, normalizer): + self._normalizer = normalizer + + def is_issue(self, node): + raise NotImplementedError() + + def get_node(self, node): + return node + + def _get_message(self, message): + if message is None: + message = self.message + if message is None: + raise ValueError("The message on the class is not set.") + return message + + def add_issue(self, node, code=None, message=None): + if code is None: + code = self.code + if code is None: + raise ValueError("The error code on the class is not set.") + + message = self._get_message(message) + + self._normalizer.add_issue(node, code, message) + + def feed_node(self, node): + if self.is_issue(node): + issue_node = self.get_node(node) + self.add_issue(issue_node) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/parser.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/parser.py new file mode 100644 index 0000000..859e3f8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/parser.py @@ -0,0 +1,211 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. +# 99% of the code is different from pgen2, now. + +""" +The ``Parser`` tries to convert the available Python code in an easy to read +format, something like an abstract syntax tree. The classes who represent this +tree, are sitting in the :mod:`parso.tree` module. + +The Python module ``tokenize`` is a very important part in the ``Parser``, +because it splits the code into different words (tokens). Sometimes it looks a +bit messy. Sorry for that! You might ask now: "Why didn't you use the ``ast`` +module for this? Well, ``ast`` does a very good job understanding proper Python +code, but fails to work as soon as there's a single line of broken code. + +There's one important optimization that needs to be known: Statements are not +being parsed completely. ``Statement`` is just a representation of the tokens +within the statement. This lowers memory usage and cpu time and reduces the +complexity of the ``Parser`` (there's another parser sitting inside +``Statement``, which produces ``Array`` and ``Call``). +""" +from parso import tree +from parso.pgen2.generator import ReservedString + + +class ParserSyntaxError(Exception): + """ + Contains error information about the parser tree. + + May be raised as an exception. + """ + def __init__(self, message, error_leaf): + self.message = message + self.error_leaf = error_leaf + + +class InternalParseError(Exception): + """ + Exception to signal the parser is stuck and error recovery didn't help. + Basically this shouldn't happen. It's a sign that something is really + wrong. + """ + + def __init__(self, msg, type_, value, start_pos): + Exception.__init__(self, "%s: type=%r, value=%r, start_pos=%r" % + (msg, type_.name, value, start_pos)) + self.msg = msg + self.type = type + self.value = value + self.start_pos = start_pos + + +class Stack(list): + def _allowed_transition_names_and_token_types(self): + def iterate(): + # An API just for Jedi. + for stack_node in reversed(self): + for transition in stack_node.dfa.transitions: + if isinstance(transition, ReservedString): + yield transition.value + else: + yield transition # A token type + + if not stack_node.dfa.is_final: + break + + return list(iterate()) + + +class StackNode(object): + def __init__(self, dfa): + self.dfa = dfa + self.nodes = [] + + @property + def nonterminal(self): + return self.dfa.from_rule + + def __repr__(self): + return '%s(%s, %s)' % (self.__class__.__name__, self.dfa, self.nodes) + + +def _token_to_transition(grammar, type_, value): + # Map from token to label + if type_.contains_syntax: + # Check for reserved words (keywords) + try: + return grammar.reserved_syntax_strings[value] + except KeyError: + pass + + return type_ + + +class BaseParser(object): + """Parser engine. + + A Parser instance contains state pertaining to the current token + sequence, and should not be used concurrently by different threads + to parse separate token sequences. + + See python/tokenize.py for how to get input tokens by a string. + + When a syntax error occurs, error_recovery() is called. + """ + + node_map = {} + default_node = tree.Node + + leaf_map = { + } + default_leaf = tree.Leaf + + def __init__(self, pgen_grammar, start_nonterminal='file_input', error_recovery=False): + self._pgen_grammar = pgen_grammar + self._start_nonterminal = start_nonterminal + self._error_recovery = error_recovery + + def parse(self, tokens): + first_dfa = self._pgen_grammar.nonterminal_to_dfas[self._start_nonterminal][0] + self.stack = Stack([StackNode(first_dfa)]) + + for token in tokens: + self._add_token(token) + + while True: + tos = self.stack[-1] + if not tos.dfa.is_final: + # We never broke out -- EOF is too soon -- Unfinished statement. + # However, the error recovery might have added the token again, if + # the stack is empty, we're fine. + raise InternalParseError( + "incomplete input", token.type, token.value, token.start_pos + ) + + if len(self.stack) > 1: + self._pop() + else: + return self.convert_node(tos.nonterminal, tos.nodes) + + def error_recovery(self, token): + if self._error_recovery: + raise NotImplementedError("Error Recovery is not implemented") + else: + type_, value, start_pos, prefix = token + error_leaf = tree.ErrorLeaf(type_, value, start_pos, prefix) + raise ParserSyntaxError('SyntaxError: invalid syntax', error_leaf) + + def convert_node(self, nonterminal, children): + try: + node = self.node_map[nonterminal](children) + except KeyError: + node = self.default_node(nonterminal, children) + for c in children: + c.parent = node + return node + + def convert_leaf(self, type_, value, prefix, start_pos): + try: + return self.leaf_map[type_](value, start_pos, prefix) + except KeyError: + return self.default_leaf(value, start_pos, prefix) + + def _add_token(self, token): + """ + This is the only core function for parsing. Here happens basically + everything. Everything is well prepared by the parser generator and we + only apply the necessary steps here. + """ + grammar = self._pgen_grammar + stack = self.stack + type_, value, start_pos, prefix = token + transition = _token_to_transition(grammar, type_, value) + + while True: + try: + plan = stack[-1].dfa.transitions[transition] + break + except KeyError: + if stack[-1].dfa.is_final: + self._pop() + else: + self.error_recovery(token) + return + except IndexError: + raise InternalParseError("too much input", type_, value, start_pos) + + stack[-1].dfa = plan.next_dfa + + for push in plan.dfa_pushes: + stack.append(StackNode(push)) + + leaf = self.convert_leaf(type_, value, prefix, start_pos) + stack[-1].nodes.append(leaf) + + def _pop(self): + tos = self.stack.pop() + # If there's exactly one child, return that child instead of + # creating a new node. We still create expr_stmt and + # file_input though, because a lot of Jedi depends on its + # logic. + if len(tos.nodes) == 1: + new_node = tos.nodes[0] + else: + new_node = self.convert_node(tos.dfa.from_rule, tos.nodes) + + self.stack[-1].nodes.append(new_node) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/__init__.py new file mode 100644 index 0000000..d4d9dcd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/__init__.py @@ -0,0 +1,10 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. +# Copyright 2014 David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +from parso.pgen2.generator import generate_grammar diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/generator.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/generator.py new file mode 100644 index 0000000..184afb3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/generator.py @@ -0,0 +1,358 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +""" +This module defines the data structures used to represent a grammar. + +Specifying grammars in pgen is possible with this grammar:: + + grammar: (NEWLINE | rule)* ENDMARKER + rule: NAME ':' rhs NEWLINE + rhs: items ('|' items)* + items: item+ + item: '[' rhs ']' | atom ['+' | '*'] + atom: '(' rhs ')' | NAME | STRING + +This grammar is self-referencing. + +This parser generator (pgen2) was created by Guido Rossum and used for lib2to3. +Most of the code has been refactored to make it more Pythonic. Since this was a +"copy" of the CPython Parser parser "pgen", there was some work needed to make +it more readable. It should also be slightly faster than the original pgen2, +because we made some optimizations. +""" + +from ast import literal_eval + +from parso.pgen2.grammar_parser import GrammarParser, NFAState + + +class Grammar(object): + """ + Once initialized, this class supplies the grammar tables for the + parsing engine implemented by parse.py. The parsing engine + accesses the instance variables directly. + + The only important part in this parsers are dfas and transitions between + dfas. + """ + + def __init__(self, start_nonterminal, rule_to_dfas, reserved_syntax_strings): + self.nonterminal_to_dfas = rule_to_dfas # Dict[str, List[DFAState]] + self.reserved_syntax_strings = reserved_syntax_strings + self.start_nonterminal = start_nonterminal + + +class DFAPlan(object): + """ + Plans are used for the parser to create stack nodes and do the proper + DFA state transitions. + """ + def __init__(self, next_dfa, dfa_pushes=[]): + self.next_dfa = next_dfa + self.dfa_pushes = dfa_pushes + + def __repr__(self): + return '%s(%s, %s)' % (self.__class__.__name__, self.next_dfa, self.dfa_pushes) + + +class DFAState(object): + """ + The DFAState object is the core class for pretty much anything. DFAState + are the vertices of an ordered graph while arcs and transitions are the + edges. + + Arcs are the initial edges, where most DFAStates are not connected and + transitions are then calculated to connect the DFA state machines that have + different nonterminals. + """ + def __init__(self, from_rule, nfa_set, final): + assert isinstance(nfa_set, set) + assert isinstance(next(iter(nfa_set)), NFAState) + assert isinstance(final, NFAState) + self.from_rule = from_rule + self.nfa_set = nfa_set + self.arcs = {} # map from terminals/nonterminals to DFAState + # In an intermediary step we set these nonterminal arcs (which has the + # same structure as arcs). These don't contain terminals anymore. + self.nonterminal_arcs = {} + + # Transitions are basically the only thing that the parser is using + # with is_final. Everyting else is purely here to create a parser. + self.transitions = {} #: Dict[Union[TokenType, ReservedString], DFAPlan] + self.is_final = final in nfa_set + + def add_arc(self, next_, label): + assert isinstance(label, str) + assert label not in self.arcs + assert isinstance(next_, DFAState) + self.arcs[label] = next_ + + def unifystate(self, old, new): + for label, next_ in self.arcs.items(): + if next_ is old: + self.arcs[label] = new + + def __eq__(self, other): + # Equality test -- ignore the nfa_set instance variable + assert isinstance(other, DFAState) + if self.is_final != other.is_final: + return False + # Can't just return self.arcs == other.arcs, because that + # would invoke this method recursively, with cycles... + if len(self.arcs) != len(other.arcs): + return False + for label, next_ in self.arcs.items(): + if next_ is not other.arcs.get(label): + return False + return True + + __hash__ = None # For Py3 compatibility. + + def __repr__(self): + return '<%s: %s is_final=%s>' % ( + self.__class__.__name__, self.from_rule, self.is_final + ) + + +class ReservedString(object): + """ + Most grammars will have certain keywords and operators that are mentioned + in the grammar as strings (e.g. "if") and not token types (e.g. NUMBER). + This class basically is the former. + """ + + def __init__(self, value): + self.value = value + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.value) + + +def _simplify_dfas(dfas): + """ + This is not theoretically optimal, but works well enough. + Algorithm: repeatedly look for two states that have the same + set of arcs (same labels pointing to the same nodes) and + unify them, until things stop changing. + + dfas is a list of DFAState instances + """ + changes = True + while changes: + changes = False + for i, state_i in enumerate(dfas): + for j in range(i + 1, len(dfas)): + state_j = dfas[j] + if state_i == state_j: + #print " unify", i, j + del dfas[j] + for state in dfas: + state.unifystate(state_j, state_i) + changes = True + break + + +def _make_dfas(start, finish): + """ + Uses the powerset construction algorithm to create DFA states from sets of + NFA states. + + Also does state reduction if some states are not needed. + """ + # To turn an NFA into a DFA, we define the states of the DFA + # to correspond to *sets* of states of the NFA. Then do some + # state reduction. + assert isinstance(start, NFAState) + assert isinstance(finish, NFAState) + + def addclosure(nfa_state, base_nfa_set): + assert isinstance(nfa_state, NFAState) + if nfa_state in base_nfa_set: + return + base_nfa_set.add(nfa_state) + for nfa_arc in nfa_state.arcs: + if nfa_arc.nonterminal_or_string is None: + addclosure(nfa_arc.next, base_nfa_set) + + base_nfa_set = set() + addclosure(start, base_nfa_set) + states = [DFAState(start.from_rule, base_nfa_set, finish)] + for state in states: # NB states grows while we're iterating + arcs = {} + # Find state transitions and store them in arcs. + for nfa_state in state.nfa_set: + for nfa_arc in nfa_state.arcs: + if nfa_arc.nonterminal_or_string is not None: + nfa_set = arcs.setdefault(nfa_arc.nonterminal_or_string, set()) + addclosure(nfa_arc.next, nfa_set) + + # Now create the dfa's with no None's in arcs anymore. All Nones have + # been eliminated and state transitions (arcs) are properly defined, we + # just need to create the dfa's. + for nonterminal_or_string, nfa_set in arcs.items(): + for nested_state in states: + if nested_state.nfa_set == nfa_set: + # The DFA state already exists for this rule. + break + else: + nested_state = DFAState(start.from_rule, nfa_set, finish) + states.append(nested_state) + + state.add_arc(nested_state, nonterminal_or_string) + return states # List of DFAState instances; first one is start + + +def _dump_nfa(start, finish): + print("Dump of NFA for", start.from_rule) + todo = [start] + for i, state in enumerate(todo): + print(" State", i, state is finish and "(final)" or "") + for label, next_ in state.arcs: + if next_ in todo: + j = todo.index(next_) + else: + j = len(todo) + todo.append(next_) + if label is None: + print(" -> %d" % j) + else: + print(" %s -> %d" % (label, j)) + + +def _dump_dfas(dfas): + print("Dump of DFA for", dfas[0].from_rule) + for i, state in enumerate(dfas): + print(" State", i, state.is_final and "(final)" or "") + for nonterminal, next_ in state.arcs.items(): + print(" %s -> %d" % (nonterminal, dfas.index(next_))) + + +def generate_grammar(bnf_grammar, token_namespace): + """ + ``bnf_text`` is a grammar in extended BNF (using * for repetition, + for + at-least-once repetition, [] for optional parts, | for alternatives and () + for grouping). + + It's not EBNF according to ISO/IEC 14977. It's a dialect Python uses in its + own parser. + """ + rule_to_dfas = {} + start_nonterminal = None + for nfa_a, nfa_z in GrammarParser(bnf_grammar).parse(): + #_dump_nfa(a, z) + dfas = _make_dfas(nfa_a, nfa_z) + #_dump_dfas(dfas) + # oldlen = len(dfas) + _simplify_dfas(dfas) + # newlen = len(dfas) + rule_to_dfas[nfa_a.from_rule] = dfas + #print(nfa_a.from_rule, oldlen, newlen) + + if start_nonterminal is None: + start_nonterminal = nfa_a.from_rule + + reserved_strings = {} + for nonterminal, dfas in rule_to_dfas.items(): + for dfa_state in dfas: + for terminal_or_nonterminal, next_dfa in dfa_state.arcs.items(): + if terminal_or_nonterminal in rule_to_dfas: + dfa_state.nonterminal_arcs[terminal_or_nonterminal] = next_dfa + else: + transition = _make_transition( + token_namespace, + reserved_strings, + terminal_or_nonterminal + ) + dfa_state.transitions[transition] = DFAPlan(next_dfa) + + _calculate_tree_traversal(rule_to_dfas) + return Grammar(start_nonterminal, rule_to_dfas, reserved_strings) + + +def _make_transition(token_namespace, reserved_syntax_strings, label): + """ + Creates a reserved string ("if", "for", "*", ...) or returns the token type + (NUMBER, STRING, ...) for a given grammar terminal. + """ + if label[0].isalpha(): + # A named token (e.g. NAME, NUMBER, STRING) + return getattr(token_namespace, label) + else: + # Either a keyword or an operator + assert label[0] in ('"', "'"), label + assert not label.startswith('"""') and not label.startswith("'''") + value = literal_eval(label) + try: + return reserved_syntax_strings[value] + except KeyError: + r = reserved_syntax_strings[value] = ReservedString(value) + return r + + +def _calculate_tree_traversal(nonterminal_to_dfas): + """ + By this point we know how dfas can move around within a stack node, but we + don't know how we can add a new stack node (nonterminal transitions). + """ + # Map from grammar rule (nonterminal) name to a set of tokens. + first_plans = {} + + nonterminals = list(nonterminal_to_dfas.keys()) + nonterminals.sort() + for nonterminal in nonterminals: + if nonterminal not in first_plans: + _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal) + + # Now that we have calculated the first terminals, we are sure that + # there is no left recursion or ambiguities. + + for dfas in nonterminal_to_dfas.values(): + for dfa_state in dfas: + for nonterminal, next_dfa in dfa_state.nonterminal_arcs.items(): + for transition, pushes in first_plans[nonterminal].items(): + dfa_state.transitions[transition] = DFAPlan(next_dfa, pushes) + + +def _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal): + """ + Calculates the first plan in the first_plans dictionary for every given + nonterminal. This is going to be used to know when to create stack nodes. + """ + dfas = nonterminal_to_dfas[nonterminal] + new_first_plans = {} + first_plans[nonterminal] = None # dummy to detect left recursion + # We only need to check the first dfa. All the following ones are not + # interesting to find first terminals. + state = dfas[0] + for transition, next_ in state.transitions.items(): + # It's a string. We have finally found a possible first token. + new_first_plans[transition] = [next_.next_dfa] + + for nonterminal2, next_ in state.nonterminal_arcs.items(): + # It's a nonterminal and we have either a left recursion issue + # in the grammar or we have to recurse. + try: + first_plans2 = first_plans[nonterminal2] + except KeyError: + first_plans2 = _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal2) + else: + if first_plans2 is None: + raise ValueError("left recursion for rule %r" % nonterminal) + + for t, pushes in first_plans2.items(): + check = new_first_plans.get(t) + if check is not None: + raise ValueError( + "Rule %s is ambiguous; %s is the" + " start of the rule %s as well as %s." + % (nonterminal, t, nonterminal2, check[-1].from_rule) + ) + new_first_plans[t] = [next_] + pushes + + first_plans[nonterminal] = new_first_plans + return new_first_plans diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/grammar_parser.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/grammar_parser.py new file mode 100644 index 0000000..623a455 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/pgen2/grammar_parser.py @@ -0,0 +1,156 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +from parso.python.tokenize import tokenize +from parso.utils import parse_version_string +from parso.python.token import PythonTokenTypes + + +class GrammarParser(): + """ + The parser for Python grammar files. + """ + def __init__(self, bnf_grammar): + self._bnf_grammar = bnf_grammar + self.generator = tokenize( + bnf_grammar, + version_info=parse_version_string('3.6') + ) + self._gettoken() # Initialize lookahead + + def parse(self): + # grammar: (NEWLINE | rule)* ENDMARKER + while self.type != PythonTokenTypes.ENDMARKER: + while self.type == PythonTokenTypes.NEWLINE: + self._gettoken() + + # rule: NAME ':' rhs NEWLINE + self._current_rule_name = self._expect(PythonTokenTypes.NAME) + self._expect(PythonTokenTypes.OP, ':') + + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.NEWLINE) + + yield a, z + + def _parse_rhs(self): + # rhs: items ('|' items)* + a, z = self._parse_items() + if self.value != "|": + return a, z + else: + aa = NFAState(self._current_rule_name) + zz = NFAState(self._current_rule_name) + while True: + # Add the possibility to go into the state of a and come back + # to finish. + aa.add_arc(a) + z.add_arc(zz) + if self.value != "|": + break + + self._gettoken() + a, z = self._parse_items() + return aa, zz + + def _parse_items(self): + # items: item+ + a, b = self._parse_item() + while self.type in (PythonTokenTypes.NAME, PythonTokenTypes.STRING) \ + or self.value in ('(', '['): + c, d = self._parse_item() + # Need to end on the next item. + b.add_arc(c) + b = d + return a, b + + def _parse_item(self): + # item: '[' rhs ']' | atom ['+' | '*'] + if self.value == "[": + self._gettoken() + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.OP, ']') + # Make it also possible that there is no token and change the + # state. + a.add_arc(z) + return a, z + else: + a, z = self._parse_atom() + value = self.value + if value not in ("+", "*"): + return a, z + self._gettoken() + # Make it clear that we can go back to the old state and repeat. + z.add_arc(a) + if value == "+": + return a, z + else: + # The end state is the same as the beginning, nothing must + # change. + return a, a + + def _parse_atom(self): + # atom: '(' rhs ')' | NAME | STRING + if self.value == "(": + self._gettoken() + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.OP, ')') + return a, z + elif self.type in (PythonTokenTypes.NAME, PythonTokenTypes.STRING): + a = NFAState(self._current_rule_name) + z = NFAState(self._current_rule_name) + # Make it clear that the state transition requires that value. + a.add_arc(z, self.value) + self._gettoken() + return a, z + else: + self._raise_error("expected (...) or NAME or STRING, got %s/%s", + self.type, self.value) + + def _expect(self, type_, value=None): + if self.type != type_: + self._raise_error("expected %s, got %s [%s]", + type_, self.type, self.value) + if value is not None and self.value != value: + self._raise_error("expected %s, got %s", value, self.value) + value = self.value + self._gettoken() + return value + + def _gettoken(self): + tup = next(self.generator) + self.type, self.value, self.begin, prefix = tup + + def _raise_error(self, msg, *args): + if args: + try: + msg = msg % args + except: + msg = " ".join([msg] + list(map(str, args))) + line = self._bnf_grammar.splitlines()[self.begin[0] - 1] + raise SyntaxError(msg, ('', self.begin[0], + self.begin[1], line)) + + +class NFAArc(object): + def __init__(self, next_, nonterminal_or_string): + self.next = next_ + self.nonterminal_or_string = nonterminal_or_string + + +class NFAState(object): + def __init__(self, from_rule): + self.from_rule = from_rule + self.arcs = [] # List[nonterminal (str), NFAState] + + def add_arc(self, next_, nonterminal_or_string=None): + assert nonterminal_or_string is None or isinstance(nonterminal_or_string, str) + assert isinstance(next_, NFAState) + self.arcs.append(NFAArc(next_, nonterminal_or_string)) + + def __repr__(self): + return '<%s: from %s>' % (self.__class__.__name__, self.from_rule) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/diff.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/diff.py new file mode 100644 index 0000000..2dcf027 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/diff.py @@ -0,0 +1,718 @@ +""" +Basically a contains parser that is faster, because it tries to parse only +parts and if anything changes, it only reparses the changed parts. + +It works with a simple diff in the beginning and will try to reuse old parser +fragments. +""" +import re +import difflib +from collections import namedtuple +import logging + +from parso.utils import split_lines +from parso.python.parser import Parser +from parso.python.tree import EndMarker +from parso.python.tokenize import PythonToken +from parso.python.token import PythonTokenTypes + +LOG = logging.getLogger(__name__) +DEBUG_DIFF_PARSER = False + +_INDENTATION_TOKENS = 'INDENT', 'ERROR_DEDENT', 'DEDENT' + + +def _get_previous_leaf_if_indentation(leaf): + while leaf and leaf.type == 'error_leaf' \ + and leaf.token_type in _INDENTATION_TOKENS: + leaf = leaf.get_previous_leaf() + return leaf + + +def _get_next_leaf_if_indentation(leaf): + while leaf and leaf.type == 'error_leaf' \ + and leaf.token_type in _INDENTATION_TOKENS: + leaf = leaf.get_previous_leaf() + return leaf + + +def _assert_valid_graph(node): + """ + Checks if the parent/children relationship is correct. + + This is a check that only runs during debugging/testing. + """ + try: + children = node.children + except AttributeError: + # Ignore INDENT is necessary, because indent/dedent tokens don't + # contain value/prefix and are just around, because of the tokenizer. + if node.type == 'error_leaf' and node.token_type in _INDENTATION_TOKENS: + assert not node.value + assert not node.prefix + return + + # Calculate the content between two start positions. + previous_leaf = _get_previous_leaf_if_indentation(node.get_previous_leaf()) + if previous_leaf is None: + content = node.prefix + previous_start_pos = 1, 0 + else: + assert previous_leaf.end_pos <= node.start_pos, \ + (previous_leaf, node) + + content = previous_leaf.value + node.prefix + previous_start_pos = previous_leaf.start_pos + + if '\n' in content or '\r' in content: + splitted = split_lines(content) + line = previous_start_pos[0] + len(splitted) - 1 + actual = line, len(splitted[-1]) + else: + actual = previous_start_pos[0], previous_start_pos[1] + len(content) + + assert node.start_pos == actual, (node.start_pos, actual) + else: + for child in children: + assert child.parent == node, (node, child) + _assert_valid_graph(child) + + +def _get_debug_error_message(module, old_lines, new_lines): + current_lines = split_lines(module.get_code(), keepends=True) + current_diff = difflib.unified_diff(new_lines, current_lines) + old_new_diff = difflib.unified_diff(old_lines, new_lines) + import parso + return ( + "There's an issue with the diff parser. Please " + "report (parso v%s) - Old/New:\n%s\nActual Diff (May be empty):\n%s" + % (parso.__version__, ''.join(old_new_diff), ''.join(current_diff)) + ) + + +def _get_last_line(node_or_leaf): + last_leaf = node_or_leaf.get_last_leaf() + if _ends_with_newline(last_leaf): + return last_leaf.start_pos[0] + else: + return last_leaf.end_pos[0] + + +def _skip_dedent_error_leaves(leaf): + while leaf is not None and leaf.type == 'error_leaf' and leaf.token_type == 'DEDENT': + leaf = leaf.get_previous_leaf() + return leaf + + +def _ends_with_newline(leaf, suffix=''): + leaf = _skip_dedent_error_leaves(leaf) + + if leaf.type == 'error_leaf': + typ = leaf.token_type.lower() + else: + typ = leaf.type + + return typ == 'newline' or suffix.endswith('\n') or suffix.endswith('\r') + + +def _flows_finished(pgen_grammar, stack): + """ + if, while, for and try might not be finished, because another part might + still be parsed. + """ + for stack_node in stack: + if stack_node.nonterminal in ('if_stmt', 'while_stmt', 'for_stmt', 'try_stmt'): + return False + return True + + +def _func_or_class_has_suite(node): + if node.type == 'decorated': + node = node.children[-1] + if node.type in ('async_funcdef', 'async_stmt'): + node = node.children[-1] + return node.type in ('classdef', 'funcdef') and node.children[-1].type == 'suite' + + +def _suite_or_file_input_is_valid(pgen_grammar, stack): + if not _flows_finished(pgen_grammar, stack): + return False + + for stack_node in reversed(stack): + if stack_node.nonterminal == 'decorator': + # A decorator is only valid with the upcoming function. + return False + + if stack_node.nonterminal == 'suite': + # If only newline is in the suite, the suite is not valid, yet. + return len(stack_node.nodes) > 1 + # Not reaching a suite means that we're dealing with file_input levels + # where there's no need for a valid statement in it. It can also be empty. + return True + + +def _is_flow_node(node): + if node.type == 'async_stmt': + node = node.children[1] + try: + value = node.children[0].value + except AttributeError: + return False + return value in ('if', 'for', 'while', 'try', 'with') + + +class _PositionUpdatingFinished(Exception): + pass + + +def _update_positions(nodes, line_offset, last_leaf): + for node in nodes: + try: + children = node.children + except AttributeError: + # Is a leaf + node.line += line_offset + if node is last_leaf: + raise _PositionUpdatingFinished + else: + _update_positions(children, line_offset, last_leaf) + + +class DiffParser(object): + """ + An advanced form of parsing a file faster. Unfortunately comes with huge + side effects. It changes the given module. + """ + def __init__(self, pgen_grammar, tokenizer, module): + self._pgen_grammar = pgen_grammar + self._tokenizer = tokenizer + self._module = module + + def _reset(self): + self._copy_count = 0 + self._parser_count = 0 + + self._nodes_tree = _NodesTree(self._module) + + def update(self, old_lines, new_lines): + ''' + The algorithm works as follows: + + Equal: + - Assure that the start is a newline, otherwise parse until we get + one. + - Copy from parsed_until_line + 1 to max(i2 + 1) + - Make sure that the indentation is correct (e.g. add DEDENT) + - Add old and change positions + Insert: + - Parse from parsed_until_line + 1 to min(j2 + 1), hopefully not + much more. + + Returns the new module node. + ''' + LOG.debug('diff parser start') + # Reset the used names cache so they get regenerated. + self._module._used_names = None + + self._parser_lines_new = new_lines + + self._reset() + + line_length = len(new_lines) + sm = difflib.SequenceMatcher(None, old_lines, self._parser_lines_new) + opcodes = sm.get_opcodes() + LOG.debug('line_lengths old: %s; new: %s' % (len(old_lines), line_length)) + + for operation, i1, i2, j1, j2 in opcodes: + LOG.debug('-> code[%s] old[%s:%s] new[%s:%s]', + operation, i1 + 1, i2, j1 + 1, j2) + + if j2 == line_length and new_lines[-1] == '': + # The empty part after the last newline is not relevant. + j2 -= 1 + + if operation == 'equal': + line_offset = j1 - i1 + self._copy_from_old_parser(line_offset, i2, j2) + elif operation == 'replace': + self._parse(until_line=j2) + elif operation == 'insert': + self._parse(until_line=j2) + else: + assert operation == 'delete' + + # With this action all change will finally be applied and we have a + # changed module. + self._nodes_tree.close() + + if DEBUG_DIFF_PARSER: + # If there is reasonable suspicion that the diff parser is not + # behaving well, this should be enabled. + try: + assert self._module.get_code() == ''.join(new_lines) + _assert_valid_graph(self._module) + except AssertionError: + print(_get_debug_error_message(self._module, old_lines, new_lines)) + raise + + last_pos = self._module.end_pos[0] + if last_pos != line_length: + raise Exception( + ('(%s != %s) ' % (last_pos, line_length)) + + _get_debug_error_message(self._module, old_lines, new_lines) + ) + LOG.debug('diff parser end') + return self._module + + def _enabled_debugging(self, old_lines, lines_new): + if self._module.get_code() != ''.join(lines_new): + LOG.warning('parser issue:\n%s\n%s', ''.join(old_lines), ''.join(lines_new)) + + def _copy_from_old_parser(self, line_offset, until_line_old, until_line_new): + last_until_line = -1 + while until_line_new > self._nodes_tree.parsed_until_line: + parsed_until_line_old = self._nodes_tree.parsed_until_line - line_offset + line_stmt = self._get_old_line_stmt(parsed_until_line_old + 1) + if line_stmt is None: + # Parse 1 line at least. We don't need more, because we just + # want to get into a state where the old parser has statements + # again that can be copied (e.g. not lines within parentheses). + self._parse(self._nodes_tree.parsed_until_line + 1) + else: + p_children = line_stmt.parent.children + index = p_children.index(line_stmt) + + from_ = self._nodes_tree.parsed_until_line + 1 + copied_nodes = self._nodes_tree.copy_nodes( + p_children[index:], + until_line_old, + line_offset + ) + # Match all the nodes that are in the wanted range. + if copied_nodes: + self._copy_count += 1 + + to = self._nodes_tree.parsed_until_line + + LOG.debug('copy old[%s:%s] new[%s:%s]', + copied_nodes[0].start_pos[0], + copied_nodes[-1].end_pos[0] - 1, from_, to) + else: + # We have copied as much as possible (but definitely not too + # much). Therefore we just parse a bit more. + self._parse(self._nodes_tree.parsed_until_line + 1) + # Since there are potential bugs that might loop here endlessly, we + # just stop here. + assert last_until_line != self._nodes_tree.parsed_until_line, last_until_line + last_until_line = self._nodes_tree.parsed_until_line + + def _get_old_line_stmt(self, old_line): + leaf = self._module.get_leaf_for_position((old_line, 0), include_prefixes=True) + + if _ends_with_newline(leaf): + leaf = leaf.get_next_leaf() + if leaf.get_start_pos_of_prefix()[0] == old_line: + node = leaf + while node.parent.type not in ('file_input', 'suite'): + node = node.parent + + # Make sure that if only the `else:` line of an if statement is + # copied that not the whole thing is going to be copied. + if node.start_pos[0] >= old_line: + return node + # Must be on the same line. Otherwise we need to parse that bit. + return None + + def _parse(self, until_line): + """ + Parses at least until the given line, but might just parse more until a + valid state is reached. + """ + last_until_line = 0 + while until_line > self._nodes_tree.parsed_until_line: + node = self._try_parse_part(until_line) + nodes = node.children + + self._nodes_tree.add_parsed_nodes(nodes) + LOG.debug( + 'parse_part from %s to %s (to %s in part parser)', + nodes[0].get_start_pos_of_prefix()[0], + self._nodes_tree.parsed_until_line, + node.end_pos[0] - 1 + ) + # Since the tokenizer sometimes has bugs, we cannot be sure that + # this loop terminates. Therefore assert that there's always a + # change. + assert last_until_line != self._nodes_tree.parsed_until_line, last_until_line + last_until_line = self._nodes_tree.parsed_until_line + + def _try_parse_part(self, until_line): + """ + Sets up a normal parser that uses a spezialized tokenizer to only parse + until a certain position (or a bit longer if the statement hasn't + ended. + """ + self._parser_count += 1 + # TODO speed up, shouldn't copy the whole list all the time. + # memoryview? + parsed_until_line = self._nodes_tree.parsed_until_line + lines_after = self._parser_lines_new[parsed_until_line:] + tokens = self._diff_tokenize( + lines_after, + until_line, + line_offset=parsed_until_line + ) + self._active_parser = Parser( + self._pgen_grammar, + error_recovery=True + ) + return self._active_parser.parse(tokens=tokens) + + def _diff_tokenize(self, lines, until_line, line_offset=0): + is_first_token = True + omitted_first_indent = False + indents = [] + tokens = self._tokenizer(lines, (1, 0)) + stack = self._active_parser.stack + for typ, string, start_pos, prefix in tokens: + start_pos = start_pos[0] + line_offset, start_pos[1] + if typ == PythonTokenTypes.INDENT: + indents.append(start_pos[1]) + if is_first_token: + omitted_first_indent = True + # We want to get rid of indents that are only here because + # we only parse part of the file. These indents would only + # get parsed as error leafs, which doesn't make any sense. + is_first_token = False + continue + is_first_token = False + + # In case of omitted_first_indent, it might not be dedented fully. + # However this is a sign for us that a dedent happened. + if typ == PythonTokenTypes.DEDENT \ + or typ == PythonTokenTypes.ERROR_DEDENT \ + and omitted_first_indent and len(indents) == 1: + indents.pop() + if omitted_first_indent and not indents: + # We are done here, only thing that can come now is an + # endmarker or another dedented code block. + typ, string, start_pos, prefix = next(tokens) + if '\n' in prefix or '\r' in prefix: + prefix = re.sub(r'[^\n\r]+\Z', '', prefix) + else: + assert start_pos[1] >= len(prefix), repr(prefix) + if start_pos[1] - len(prefix) == 0: + prefix = '' + yield PythonToken( + PythonTokenTypes.ENDMARKER, '', + (start_pos[0] + line_offset, 0), + prefix + ) + break + elif typ == PythonTokenTypes.NEWLINE and start_pos[0] >= until_line: + yield PythonToken(typ, string, start_pos, prefix) + # Check if the parser is actually in a valid suite state. + if _suite_or_file_input_is_valid(self._pgen_grammar, stack): + start_pos = start_pos[0] + 1, 0 + while len(indents) > int(omitted_first_indent): + indents.pop() + yield PythonToken(PythonTokenTypes.DEDENT, '', start_pos, '') + + yield PythonToken(PythonTokenTypes.ENDMARKER, '', start_pos, '') + break + else: + continue + + yield PythonToken(typ, string, start_pos, prefix) + + +class _NodesTreeNode(object): + _ChildrenGroup = namedtuple('_ChildrenGroup', 'prefix children line_offset last_line_offset_leaf') + + def __init__(self, tree_node, parent=None): + self.tree_node = tree_node + self._children_groups = [] + self.parent = parent + self._node_children = [] + + def finish(self): + children = [] + for prefix, children_part, line_offset, last_line_offset_leaf in self._children_groups: + first_leaf = _get_next_leaf_if_indentation( + children_part[0].get_first_leaf() + ) + + first_leaf.prefix = prefix + first_leaf.prefix + if line_offset != 0: + try: + _update_positions( + children_part, line_offset, last_line_offset_leaf) + except _PositionUpdatingFinished: + pass + children += children_part + self.tree_node.children = children + # Reset the parents + for node in children: + node.parent = self.tree_node + + for node_child in self._node_children: + node_child.finish() + + def add_child_node(self, child_node): + self._node_children.append(child_node) + + def add_tree_nodes(self, prefix, children, line_offset=0, last_line_offset_leaf=None): + if last_line_offset_leaf is None: + last_line_offset_leaf = children[-1].get_last_leaf() + group = self._ChildrenGroup(prefix, children, line_offset, last_line_offset_leaf) + self._children_groups.append(group) + + def get_last_line(self, suffix): + line = 0 + if self._children_groups: + children_group = self._children_groups[-1] + last_leaf = _get_previous_leaf_if_indentation( + children_group.last_line_offset_leaf + ) + + line = last_leaf.end_pos[0] + children_group.line_offset + + # Newlines end on the next line, which means that they would cover + # the next line. That line is not fully parsed at this point. + if _ends_with_newline(last_leaf, suffix): + line -= 1 + line += len(split_lines(suffix)) - 1 + + if suffix and not suffix.endswith('\n') and not suffix.endswith('\r'): + # This is the end of a file (that doesn't end with a newline). + line += 1 + + if self._node_children: + return max(line, self._node_children[-1].get_last_line(suffix)) + return line + + +class _NodesTree(object): + def __init__(self, module): + self._base_node = _NodesTreeNode(module) + self._working_stack = [self._base_node] + self._module = module + self._prefix_remainder = '' + self.prefix = '' + + @property + def parsed_until_line(self): + return self._working_stack[-1].get_last_line(self.prefix) + + def _get_insertion_node(self, indentation_node): + indentation = indentation_node.start_pos[1] + + # find insertion node + while True: + node = self._working_stack[-1] + tree_node = node.tree_node + if tree_node.type == 'suite': + # A suite starts with NEWLINE, ... + node_indentation = tree_node.children[1].start_pos[1] + + if indentation >= node_indentation: # Not a Dedent + # We might be at the most outer layer: modules. We + # don't want to depend on the first statement + # having the right indentation. + return node + + elif tree_node.type == 'file_input': + return node + + self._working_stack.pop() + + def add_parsed_nodes(self, tree_nodes): + old_prefix = self.prefix + tree_nodes = self._remove_endmarker(tree_nodes) + if not tree_nodes: + self.prefix = old_prefix + self.prefix + return + + assert tree_nodes[0].type != 'newline' + + node = self._get_insertion_node(tree_nodes[0]) + assert node.tree_node.type in ('suite', 'file_input') + node.add_tree_nodes(old_prefix, tree_nodes) + # tos = Top of stack + self._update_tos(tree_nodes[-1]) + + def _update_tos(self, tree_node): + if tree_node.type in ('suite', 'file_input'): + new_tos = _NodesTreeNode(tree_node) + new_tos.add_tree_nodes('', list(tree_node.children)) + + self._working_stack[-1].add_child_node(new_tos) + self._working_stack.append(new_tos) + + self._update_tos(tree_node.children[-1]) + elif _func_or_class_has_suite(tree_node): + self._update_tos(tree_node.children[-1]) + + def _remove_endmarker(self, tree_nodes): + """ + Helps cleaning up the tree nodes that get inserted. + """ + last_leaf = tree_nodes[-1].get_last_leaf() + is_endmarker = last_leaf.type == 'endmarker' + self._prefix_remainder = '' + if is_endmarker: + separation = max(last_leaf.prefix.rfind('\n'), last_leaf.prefix.rfind('\r')) + if separation > -1: + # Remove the whitespace part of the prefix after a newline. + # That is not relevant if parentheses were opened. Always parse + # until the end of a line. + last_leaf.prefix, self._prefix_remainder = \ + last_leaf.prefix[:separation + 1], last_leaf.prefix[separation + 1:] + + self.prefix = '' + + if is_endmarker: + self.prefix = last_leaf.prefix + + tree_nodes = tree_nodes[:-1] + return tree_nodes + + def copy_nodes(self, tree_nodes, until_line, line_offset): + """ + Copies tree nodes from the old parser tree. + + Returns the number of tree nodes that were copied. + """ + if tree_nodes[0].type in ('error_leaf', 'error_node'): + # Avoid copying errors in the beginning. Can lead to a lot of + # issues. + return [] + + self._get_insertion_node(tree_nodes[0]) + + new_nodes, self._working_stack, self.prefix = self._copy_nodes( + list(self._working_stack), + tree_nodes, + until_line, + line_offset, + self.prefix, + ) + return new_nodes + + def _copy_nodes(self, working_stack, nodes, until_line, line_offset, prefix=''): + new_nodes = [] + + new_prefix = '' + for node in nodes: + if node.start_pos[0] > until_line: + break + + if node.type == 'endmarker': + break + + if node.type == 'error_leaf' and node.token_type in ('DEDENT', 'ERROR_DEDENT'): + break + # TODO this check might take a bit of time for large files. We + # might want to change this to do more intelligent guessing or + # binary search. + if _get_last_line(node) > until_line: + # We can split up functions and classes later. + if _func_or_class_has_suite(node): + new_nodes.append(node) + break + + new_nodes.append(node) + + if not new_nodes: + return [], working_stack, prefix + + tos = working_stack[-1] + last_node = new_nodes[-1] + had_valid_suite_last = False + if _func_or_class_has_suite(last_node): + suite = last_node + while suite.type != 'suite': + suite = suite.children[-1] + + suite_tos = _NodesTreeNode(suite) + # Don't need to pass line_offset here, it's already done by the + # parent. + suite_nodes, new_working_stack, new_prefix = self._copy_nodes( + working_stack + [suite_tos], suite.children, until_line, line_offset + ) + if len(suite_nodes) < 2: + # A suite only with newline is not valid. + new_nodes.pop() + new_prefix = '' + else: + assert new_nodes + tos.add_child_node(suite_tos) + working_stack = new_working_stack + had_valid_suite_last = True + + if new_nodes: + last_node = new_nodes[-1] + if (last_node.type in ('error_leaf', 'error_node') or + _is_flow_node(new_nodes[-1])): + # Error leafs/nodes don't have a defined start/end. Error + # nodes might not end with a newline (e.g. if there's an + # open `(`). Therefore ignore all of them unless they are + # succeeded with valid parser state. + # If we copy flows at the end, they might be continued + # after the copy limit (in the new parser). + # In this while loop we try to remove until we find a newline. + new_prefix = '' + new_nodes.pop() + while new_nodes: + last_node = new_nodes[-1] + if last_node.get_last_leaf().type == 'newline': + break + new_nodes.pop() + + if new_nodes: + if not _ends_with_newline(new_nodes[-1].get_last_leaf()) and not had_valid_suite_last: + p = new_nodes[-1].get_next_leaf().prefix + # We are not allowed to remove the newline at the end of the + # line, otherwise it's going to be missing. This happens e.g. + # if a bracket is around before that moves newlines to + # prefixes. + new_prefix = split_lines(p, keepends=True)[0] + + if had_valid_suite_last: + last = new_nodes[-1] + if last.type == 'decorated': + last = last.children[-1] + if last.type in ('async_funcdef', 'async_stmt'): + last = last.children[-1] + last_line_offset_leaf = last.children[-2].get_last_leaf() + assert last_line_offset_leaf == ':' + else: + last_line_offset_leaf = new_nodes[-1].get_last_leaf() + tos.add_tree_nodes(prefix, new_nodes, line_offset, last_line_offset_leaf) + prefix = new_prefix + self._prefix_remainder = '' + + return new_nodes, working_stack, prefix + + def close(self): + self._base_node.finish() + + # Add an endmarker. + try: + last_leaf = self._module.get_last_leaf() + except IndexError: + end_pos = [1, 0] + else: + last_leaf = _skip_dedent_error_leaves(last_leaf) + end_pos = list(last_leaf.end_pos) + lines = split_lines(self.prefix) + assert len(lines) > 0 + if len(lines) == 1: + end_pos[1] += len(lines[0]) + else: + end_pos[0] += len(lines) - 1 + end_pos[1] = len(lines[-1]) + + endmarker = EndMarker('', tuple(end_pos), self.prefix + self._prefix_remainder) + endmarker.parent = self._module + self._module.children.append(endmarker) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/errors.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/errors.py new file mode 100644 index 0000000..b6e6e5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/errors.py @@ -0,0 +1,1011 @@ +# -*- coding: utf-8 -*- +import codecs +import warnings +import re +from contextlib import contextmanager + +from parso.normalizer import Normalizer, NormalizerConfig, Issue, Rule +from parso.python.tree import search_ancestor + +_BLOCK_STMTS = ('if_stmt', 'while_stmt', 'for_stmt', 'try_stmt', 'with_stmt') +_STAR_EXPR_PARENTS = ('testlist_star_expr', 'testlist_comp', 'exprlist') +# This is the maximal block size given by python. +_MAX_BLOCK_SIZE = 20 +_MAX_INDENT_COUNT = 100 +ALLOWED_FUTURES = ( + 'all_feature_names', 'nested_scopes', 'generators', 'division', + 'absolute_import', 'with_statement', 'print_function', 'unicode_literals', +) +_COMP_FOR_TYPES = ('comp_for', 'sync_comp_for') + + +def _iter_stmts(scope): + """ + Iterates over all statements and splits up simple_stmt. + """ + for child in scope.children: + if child.type == 'simple_stmt': + for child2 in child.children: + if child2.type == 'newline' or child2 == ';': + continue + yield child2 + else: + yield child + + +def _get_comprehension_type(atom): + first, second = atom.children[:2] + if second.type == 'testlist_comp' and second.children[1].type in _COMP_FOR_TYPES: + if first == '[': + return 'list comprehension' + else: + return 'generator expression' + elif second.type == 'dictorsetmaker' and second.children[-1].type in _COMP_FOR_TYPES: + if second.children[1] == ':': + return 'dict comprehension' + else: + return 'set comprehension' + return None + + +def _is_future_import(import_from): + # It looks like a __future__ import that is relative is still a future + # import. That feels kind of odd, but whatever. + # if import_from.level != 0: + # return False + from_names = import_from.get_from_names() + return [n.value for n in from_names] == ['__future__'] + + +def _remove_parens(atom): + """ + Returns the inner part of an expression like `(foo)`. Also removes nested + parens. + """ + try: + children = atom.children + except AttributeError: + pass + else: + if len(children) == 3 and children[0] == '(': + return _remove_parens(atom.children[1]) + return atom + + +def _iter_params(parent_node): + return (n for n in parent_node.children if n.type == 'param') + + +def _is_future_import_first(import_from): + """ + Checks if the import is the first statement of a file. + """ + found_docstring = False + for stmt in _iter_stmts(import_from.get_root_node()): + if stmt.type == 'string' and not found_docstring: + continue + found_docstring = True + + if stmt == import_from: + return True + if stmt.type == 'import_from' and _is_future_import(stmt): + continue + return False + + +def _iter_definition_exprs_from_lists(exprlist): + for child in exprlist.children[::2]: + if child.type == 'atom' and child.children[0] in ('(', '['): + testlist_comp = child.children[0] + if testlist_comp.type == 'testlist_comp': + for expr in _iter_definition_exprs_from_lists(testlist_comp): + yield expr + continue + elif child.children[0] == '[': + yield testlist_comp + continue + + yield child + + +def _get_expr_stmt_definition_exprs(expr_stmt): + exprs = [] + for list_ in expr_stmt.children[:-2:2]: + if list_.type in ('testlist_star_expr', 'testlist'): + exprs += _iter_definition_exprs_from_lists(list_) + else: + exprs.append(list_) + return exprs + + +def _get_for_stmt_definition_exprs(for_stmt): + exprlist = for_stmt.children[1] + if exprlist.type != 'exprlist': + return [exprlist] + return list(_iter_definition_exprs_from_lists(exprlist)) + + +class _Context(object): + def __init__(self, node, add_syntax_error, parent_context=None): + self.node = node + self.blocks = [] + self.parent_context = parent_context + self._used_name_dict = {} + self._global_names = [] + self._nonlocal_names = [] + self._nonlocal_names_in_subscopes = [] + self._add_syntax_error = add_syntax_error + + def is_async_funcdef(self): + # Stupidly enough async funcdefs can have two different forms, + # depending if a decorator is used or not. + return self.is_function() \ + and self.node.parent.type in ('async_funcdef', 'async_stmt') + + def is_function(self): + return self.node.type == 'funcdef' + + def add_name(self, name): + parent_type = name.parent.type + if parent_type == 'trailer': + # We are only interested in first level names. + return + + if parent_type == 'global_stmt': + self._global_names.append(name) + elif parent_type == 'nonlocal_stmt': + self._nonlocal_names.append(name) + else: + self._used_name_dict.setdefault(name.value, []).append(name) + + def finalize(self): + """ + Returns a list of nonlocal names that need to be part of that scope. + """ + self._analyze_names(self._global_names, 'global') + self._analyze_names(self._nonlocal_names, 'nonlocal') + + # Python2.6 doesn't have dict comprehensions. + global_name_strs = dict((n.value, n) for n in self._global_names) + for nonlocal_name in self._nonlocal_names: + try: + global_name = global_name_strs[nonlocal_name.value] + except KeyError: + continue + + message = "name '%s' is nonlocal and global" % global_name.value + if global_name.start_pos < nonlocal_name.start_pos: + error_name = global_name + else: + error_name = nonlocal_name + self._add_syntax_error(error_name, message) + + nonlocals_not_handled = [] + for nonlocal_name in self._nonlocal_names_in_subscopes: + search = nonlocal_name.value + if search in global_name_strs or self.parent_context is None: + message = "no binding for nonlocal '%s' found" % nonlocal_name.value + self._add_syntax_error(nonlocal_name, message) + elif not self.is_function() or \ + nonlocal_name.value not in self._used_name_dict: + nonlocals_not_handled.append(nonlocal_name) + return self._nonlocal_names + nonlocals_not_handled + + def _analyze_names(self, globals_or_nonlocals, type_): + def raise_(message): + self._add_syntax_error(base_name, message % (base_name.value, type_)) + + params = [] + if self.node.type == 'funcdef': + params = self.node.get_params() + + for base_name in globals_or_nonlocals: + found_global_or_nonlocal = False + # Somehow Python does it the reversed way. + for name in reversed(self._used_name_dict.get(base_name.value, [])): + if name.start_pos > base_name.start_pos: + # All following names don't have to be checked. + found_global_or_nonlocal = True + + parent = name.parent + if parent.type == 'param' and parent.name == name: + # Skip those here, these definitions belong to the next + # scope. + continue + + if name.is_definition(): + if parent.type == 'expr_stmt' \ + and parent.children[1].type == 'annassign': + if found_global_or_nonlocal: + # If it's after the global the error seems to be + # placed there. + base_name = name + raise_("annotated name '%s' can't be %s") + break + else: + message = "name '%s' is assigned to before %s declaration" + else: + message = "name '%s' is used prior to %s declaration" + + if not found_global_or_nonlocal: + raise_(message) + # Only add an error for the first occurence. + break + + for param in params: + if param.name.value == base_name.value: + raise_("name '%s' is parameter and %s"), + + @contextmanager + def add_block(self, node): + self.blocks.append(node) + yield + self.blocks.pop() + + def add_context(self, node): + return _Context(node, self._add_syntax_error, parent_context=self) + + def close_child_context(self, child_context): + self._nonlocal_names_in_subscopes += child_context.finalize() + + +class ErrorFinder(Normalizer): + """ + Searches for errors in the syntax tree. + """ + def __init__(self, *args, **kwargs): + super(ErrorFinder, self).__init__(*args, **kwargs) + self._error_dict = {} + self.version = self.grammar.version_info + + def initialize(self, node): + def create_context(node): + if node is None: + return None + + parent_context = create_context(node.parent) + if node.type in ('classdef', 'funcdef', 'file_input'): + return _Context(node, self._add_syntax_error, parent_context) + return parent_context + + self.context = create_context(node) or _Context(node, self._add_syntax_error) + self._indentation_count = 0 + + def visit(self, node): + if node.type == 'error_node': + with self.visit_node(node): + # Don't need to investigate the inners of an error node. We + # might find errors in there that should be ignored, because + # the error node itself already shows that there's an issue. + return '' + return super(ErrorFinder, self).visit(node) + + @contextmanager + def visit_node(self, node): + self._check_type_rules(node) + + if node.type in _BLOCK_STMTS: + with self.context.add_block(node): + if len(self.context.blocks) == _MAX_BLOCK_SIZE: + self._add_syntax_error(node, "too many statically nested blocks") + yield + return + elif node.type == 'suite': + self._indentation_count += 1 + if self._indentation_count == _MAX_INDENT_COUNT: + self._add_indentation_error(node.children[1], "too many levels of indentation") + + yield + + if node.type == 'suite': + self._indentation_count -= 1 + elif node.type in ('classdef', 'funcdef'): + context = self.context + self.context = context.parent_context + self.context.close_child_context(context) + + def visit_leaf(self, leaf): + if leaf.type == 'error_leaf': + if leaf.token_type in ('INDENT', 'ERROR_DEDENT'): + # Indents/Dedents itself never have a prefix. They are just + # "pseudo" tokens that get removed by the syntax tree later. + # Therefore in case of an error we also have to check for this. + spacing = list(leaf.get_next_leaf()._split_prefix())[-1] + if leaf.token_type == 'INDENT': + message = 'unexpected indent' + else: + message = 'unindent does not match any outer indentation level' + self._add_indentation_error(spacing, message) + else: + if leaf.value.startswith('\\'): + message = 'unexpected character after line continuation character' + else: + match = re.match('\\w{,2}("{1,3}|\'{1,3})', leaf.value) + if match is None: + message = 'invalid syntax' + else: + if len(match.group(1)) == 1: + message = 'EOL while scanning string literal' + else: + message = 'EOF while scanning triple-quoted string literal' + self._add_syntax_error(leaf, message) + return '' + elif leaf.value == ':': + parent = leaf.parent + if parent.type in ('classdef', 'funcdef'): + self.context = self.context.add_context(parent) + + # The rest is rule based. + return super(ErrorFinder, self).visit_leaf(leaf) + + def _add_indentation_error(self, spacing, message): + self.add_issue(spacing, 903, "IndentationError: " + message) + + def _add_syntax_error(self, node, message): + self.add_issue(node, 901, "SyntaxError: " + message) + + def add_issue(self, node, code, message): + # Overwrite the default behavior. + # Check if the issues are on the same line. + line = node.start_pos[0] + args = (code, message, node) + self._error_dict.setdefault(line, args) + + def finalize(self): + self.context.finalize() + + for code, message, node in self._error_dict.values(): + self.issues.append(Issue(node, code, message)) + + +class IndentationRule(Rule): + code = 903 + + def _get_message(self, message): + message = super(IndentationRule, self)._get_message(message) + return "IndentationError: " + message + + +@ErrorFinder.register_rule(type='error_node') +class _ExpectIndentedBlock(IndentationRule): + message = 'expected an indented block' + + def get_node(self, node): + leaf = node.get_next_leaf() + return list(leaf._split_prefix())[-1] + + def is_issue(self, node): + # This is the beginning of a suite that is not indented. + return node.children[-1].type == 'newline' + + +class ErrorFinderConfig(NormalizerConfig): + normalizer_class = ErrorFinder + + +class SyntaxRule(Rule): + code = 901 + + def _get_message(self, message): + message = super(SyntaxRule, self)._get_message(message) + return "SyntaxError: " + message + + +@ErrorFinder.register_rule(type='error_node') +class _InvalidSyntaxRule(SyntaxRule): + message = "invalid syntax" + + def get_node(self, node): + return node.get_next_leaf() + + def is_issue(self, node): + # Error leafs will be added later as an error. + return node.get_next_leaf().type != 'error_leaf' + + +@ErrorFinder.register_rule(value='await') +class _AwaitOutsideAsync(SyntaxRule): + message = "'await' outside async function" + + def is_issue(self, leaf): + return not self._normalizer.context.is_async_funcdef() + + def get_error_node(self, node): + # Return the whole await statement. + return node.parent + + +@ErrorFinder.register_rule(value='break') +class _BreakOutsideLoop(SyntaxRule): + message = "'break' outside loop" + + def is_issue(self, leaf): + in_loop = False + for block in self._normalizer.context.blocks: + if block.type in ('for_stmt', 'while_stmt'): + in_loop = True + return not in_loop + + +@ErrorFinder.register_rule(value='continue') +class _ContinueChecks(SyntaxRule): + message = "'continue' not properly in loop" + message_in_finally = "'continue' not supported inside 'finally' clause" + + def is_issue(self, leaf): + in_loop = False + for block in self._normalizer.context.blocks: + if block.type in ('for_stmt', 'while_stmt'): + in_loop = True + if block.type == 'try_stmt': + last_block = block.children[-3] + if last_block == 'finally' and leaf.start_pos > last_block.start_pos: + self.add_issue(leaf, message=self.message_in_finally) + return False # Error already added + if not in_loop: + return True + + +@ErrorFinder.register_rule(value='from') +class _YieldFromCheck(SyntaxRule): + message = "'yield from' inside async function" + + def get_node(self, leaf): + return leaf.parent.parent # This is the actual yield statement. + + def is_issue(self, leaf): + return leaf.parent.type == 'yield_arg' \ + and self._normalizer.context.is_async_funcdef() + + +@ErrorFinder.register_rule(type='name') +class _NameChecks(SyntaxRule): + message = 'cannot assign to __debug__' + message_none = 'cannot assign to None' + + def is_issue(self, leaf): + self._normalizer.context.add_name(leaf) + + if leaf.value == '__debug__' and leaf.is_definition(): + return True + if leaf.value == 'None' and self._normalizer.version < (3, 0) \ + and leaf.is_definition(): + self.add_issue(leaf, message=self.message_none) + + +@ErrorFinder.register_rule(type='string') +class _StringChecks(SyntaxRule): + message = "bytes can only contain ASCII literal characters." + + def is_issue(self, leaf): + string_prefix = leaf.string_prefix.lower() + if 'b' in string_prefix \ + and self._normalizer.version >= (3, 0) \ + and any(c for c in leaf.value if ord(c) > 127): + # b'ä' + return True + + if 'r' not in string_prefix: + # Raw strings don't need to be checked if they have proper + # escaping. + is_bytes = self._normalizer.version < (3, 0) + if 'b' in string_prefix: + is_bytes = True + if 'u' in string_prefix: + is_bytes = False + + payload = leaf._get_payload() + if is_bytes: + payload = payload.encode('utf-8') + func = codecs.escape_decode + else: + func = codecs.unicode_escape_decode + + try: + with warnings.catch_warnings(): + # The warnings from parsing strings are not relevant. + warnings.filterwarnings('ignore') + func(payload) + except UnicodeDecodeError as e: + self.add_issue(leaf, message='(unicode error) ' + str(e)) + except ValueError as e: + self.add_issue(leaf, message='(value error) ' + str(e)) + + +@ErrorFinder.register_rule(value='*') +class _StarCheck(SyntaxRule): + message = "named arguments must follow bare *" + + def is_issue(self, leaf): + params = leaf.parent + if params.type == 'parameters' and params: + after = params.children[params.children.index(leaf) + 1:] + after = [child for child in after + if child not in (',', ')') and not child.star_count] + return len(after) == 0 + + +@ErrorFinder.register_rule(value='**') +class _StarStarCheck(SyntaxRule): + # e.g. {**{} for a in [1]} + # TODO this should probably get a better end_pos including + # the next sibling of leaf. + message = "dict unpacking cannot be used in dict comprehension" + + def is_issue(self, leaf): + if leaf.parent.type == 'dictorsetmaker': + comp_for = leaf.get_next_sibling().get_next_sibling() + return comp_for is not None and comp_for.type in _COMP_FOR_TYPES + + +@ErrorFinder.register_rule(value='yield') +@ErrorFinder.register_rule(value='return') +class _ReturnAndYieldChecks(SyntaxRule): + message = "'return' with value in async generator" + message_async_yield = "'yield' inside async function" + + def get_node(self, leaf): + return leaf.parent + + def is_issue(self, leaf): + if self._normalizer.context.node.type != 'funcdef': + self.add_issue(self.get_node(leaf), message="'%s' outside function" % leaf.value) + elif self._normalizer.context.is_async_funcdef() \ + and any(self._normalizer.context.node.iter_yield_exprs()): + if leaf.value == 'return' and leaf.parent.type == 'return_stmt': + return True + elif leaf.value == 'yield' \ + and leaf.get_next_leaf() != 'from' \ + and self._normalizer.version == (3, 5): + self.add_issue(self.get_node(leaf), message=self.message_async_yield) + + +@ErrorFinder.register_rule(type='strings') +class _BytesAndStringMix(SyntaxRule): + # e.g. 's' b'' + message = "cannot mix bytes and nonbytes literals" + + def _is_bytes_literal(self, string): + if string.type == 'fstring': + return False + return 'b' in string.string_prefix.lower() + + def is_issue(self, node): + first = node.children[0] + # In Python 2 it's allowed to mix bytes and unicode. + if self._normalizer.version >= (3, 0): + first_is_bytes = self._is_bytes_literal(first) + for string in node.children[1:]: + if first_is_bytes != self._is_bytes_literal(string): + return True + + +@ErrorFinder.register_rule(type='import_as_names') +class _TrailingImportComma(SyntaxRule): + # e.g. from foo import a, + message = "trailing comma not allowed without surrounding parentheses" + + def is_issue(self, node): + if node.children[-1] == ',': + return True + + +@ErrorFinder.register_rule(type='import_from') +class _ImportStarInFunction(SyntaxRule): + message = "import * only allowed at module level" + + def is_issue(self, node): + return node.is_star_import() and self._normalizer.context.parent_context is not None + + +@ErrorFinder.register_rule(type='import_from') +class _FutureImportRule(SyntaxRule): + message = "from __future__ imports must occur at the beginning of the file" + + def is_issue(self, node): + if _is_future_import(node): + if not _is_future_import_first(node): + return True + + for from_name, future_name in node.get_paths(): + name = future_name.value + allowed_futures = list(ALLOWED_FUTURES) + if self._normalizer.version >= (3, 5): + allowed_futures.append('generator_stop') + + if name == 'braces': + self.add_issue(node, message="not a chance") + elif name == 'barry_as_FLUFL': + m = "Seriously I'm not implementing this :) ~ Dave" + self.add_issue(node, message=m) + elif name not in ALLOWED_FUTURES: + message = "future feature %s is not defined" % name + self.add_issue(node, message=message) + + +@ErrorFinder.register_rule(type='star_expr') +class _StarExprRule(SyntaxRule): + message = "starred assignment target must be in a list or tuple" + message_iterable_unpacking = "iterable unpacking cannot be used in comprehension" + message_assignment = "can use starred expression only as assignment target" + + def is_issue(self, node): + if node.parent.type not in _STAR_EXPR_PARENTS: + return True + if node.parent.type == 'testlist_comp': + # [*[] for a in [1]] + if node.parent.children[1].type in _COMP_FOR_TYPES: + self.add_issue(node, message=self.message_iterable_unpacking) + if self._normalizer.version <= (3, 4): + n = search_ancestor(node, 'for_stmt', 'expr_stmt') + found_definition = False + if n is not None: + if n.type == 'expr_stmt': + exprs = _get_expr_stmt_definition_exprs(n) + else: + exprs = _get_for_stmt_definition_exprs(n) + if node in exprs: + found_definition = True + + if not found_definition: + self.add_issue(node, message=self.message_assignment) + + +@ErrorFinder.register_rule(types=_STAR_EXPR_PARENTS) +class _StarExprParentRule(SyntaxRule): + def is_issue(self, node): + if node.parent.type == 'del_stmt': + self.add_issue(node.parent, message="can't use starred expression here") + else: + def is_definition(node, ancestor): + if ancestor is None: + return False + + type_ = ancestor.type + if type_ == 'trailer': + return False + + if type_ == 'expr_stmt': + return node.start_pos < ancestor.children[-1].start_pos + + return is_definition(node, ancestor.parent) + + if is_definition(node, node.parent): + args = [c for c in node.children if c != ','] + starred = [c for c in args if c.type == 'star_expr'] + if len(starred) > 1: + message = "two starred expressions in assignment" + self.add_issue(starred[1], message=message) + elif starred: + count = args.index(starred[0]) + if count >= 256: + message = "too many expressions in star-unpacking assignment" + self.add_issue(starred[0], message=message) + + +@ErrorFinder.register_rule(type='annassign') +class _AnnotatorRule(SyntaxRule): + # True: int + # {}: float + message = "illegal target for annotation" + + def get_node(self, node): + return node.parent + + def is_issue(self, node): + type_ = None + lhs = node.parent.children[0] + lhs = _remove_parens(lhs) + try: + children = lhs.children + except AttributeError: + pass + else: + if ',' in children or lhs.type == 'atom' and children[0] == '(': + type_ = 'tuple' + elif lhs.type == 'atom' and children[0] == '[': + type_ = 'list' + trailer = children[-1] + + if type_ is None: + if not (lhs.type == 'name' + # subscript/attributes are allowed + or lhs.type in ('atom_expr', 'power') + and trailer.type == 'trailer' + and trailer.children[0] != '('): + return True + else: + # x, y: str + message = "only single target (not %s) can be annotated" + self.add_issue(lhs.parent, message=message % type_) + + +@ErrorFinder.register_rule(type='argument') +class _ArgumentRule(SyntaxRule): + def is_issue(self, node): + first = node.children[0] + if node.children[1] == '=' and first.type != 'name': + if first.type == 'lambdef': + # f(lambda: 1=1) + if self._normalizer.version < (3, 8): + message = "lambda cannot contain assignment" + else: + message = 'expression cannot contain assignment, perhaps you meant "=="?' + else: + # f(+x=1) + if self._normalizer.version < (3, 8): + message = "keyword can't be an expression" + else: + message = 'expression cannot contain assignment, perhaps you meant "=="?' + self.add_issue(first, message=message) + + +@ErrorFinder.register_rule(type='nonlocal_stmt') +class _NonlocalModuleLevelRule(SyntaxRule): + message = "nonlocal declaration not allowed at module level" + + def is_issue(self, node): + return self._normalizer.context.parent_context is None + + +@ErrorFinder.register_rule(type='arglist') +class _ArglistRule(SyntaxRule): + @property + def message(self): + if self._normalizer.version < (3, 7): + return "Generator expression must be parenthesized if not sole argument" + else: + return "Generator expression must be parenthesized" + + def is_issue(self, node): + first_arg = node.children[0] + if first_arg.type == 'argument' \ + and first_arg.children[1].type in _COMP_FOR_TYPES: + # e.g. foo(x for x in [], b) + return len(node.children) >= 2 + else: + arg_set = set() + kw_only = False + kw_unpacking_only = False + is_old_starred = False + # In python 3 this would be a bit easier (stars are part of + # argument), but we have to understand both. + for argument in node.children: + if argument == ',': + continue + + if argument in ('*', '**'): + # Python < 3.5 has the order engraved in the grammar + # file. No need to do anything here. + is_old_starred = True + continue + if is_old_starred: + is_old_starred = False + continue + + if argument.type == 'argument': + first = argument.children[0] + if first in ('*', '**'): + if first == '*': + if kw_unpacking_only: + # foo(**kwargs, *args) + message = "iterable argument unpacking " \ + "follows keyword argument unpacking" + self.add_issue(argument, message=message) + else: + kw_unpacking_only = True + else: # Is a keyword argument. + kw_only = True + if first.type == 'name': + if first.value in arg_set: + # f(x=1, x=2) + self.add_issue(first, message="keyword argument repeated") + else: + arg_set.add(first.value) + else: + if kw_unpacking_only: + # f(**x, y) + message = "positional argument follows keyword argument unpacking" + self.add_issue(argument, message=message) + elif kw_only: + # f(x=2, y) + message = "positional argument follows keyword argument" + self.add_issue(argument, message=message) + + +@ErrorFinder.register_rule(type='parameters') +@ErrorFinder.register_rule(type='lambdef') +class _ParameterRule(SyntaxRule): + # def f(x=3, y): pass + message = "non-default argument follows default argument" + + def is_issue(self, node): + param_names = set() + default_only = False + for p in _iter_params(node): + if p.name.value in param_names: + message = "duplicate argument '%s' in function definition" + self.add_issue(p.name, message=message % p.name.value) + param_names.add(p.name.value) + + if p.default is None and not p.star_count: + if default_only: + return True + else: + default_only = True + + +@ErrorFinder.register_rule(type='try_stmt') +class _TryStmtRule(SyntaxRule): + message = "default 'except:' must be last" + + def is_issue(self, try_stmt): + default_except = None + for except_clause in try_stmt.children[3::3]: + if except_clause in ('else', 'finally'): + break + if except_clause == 'except': + default_except = except_clause + elif default_except is not None: + self.add_issue(default_except, message=self.message) + + +@ErrorFinder.register_rule(type='fstring') +class _FStringRule(SyntaxRule): + _fstring_grammar = None + message_nested = "f-string: expressions nested too deeply" + message_conversion = "f-string: invalid conversion character: expected 's', 'r', or 'a'" + + def _check_format_spec(self, format_spec, depth): + self._check_fstring_contents(format_spec.children[1:], depth) + + def _check_fstring_expr(self, fstring_expr, depth): + if depth >= 2: + self.add_issue(fstring_expr, message=self.message_nested) + + conversion = fstring_expr.children[2] + if conversion.type == 'fstring_conversion': + name = conversion.children[1] + if name.value not in ('s', 'r', 'a'): + self.add_issue(name, message=self.message_conversion) + + format_spec = fstring_expr.children[-2] + if format_spec.type == 'fstring_format_spec': + self._check_format_spec(format_spec, depth + 1) + + def is_issue(self, fstring): + self._check_fstring_contents(fstring.children[1:-1]) + + def _check_fstring_contents(self, children, depth=0): + for fstring_content in children: + if fstring_content.type == 'fstring_expr': + self._check_fstring_expr(fstring_content, depth) + + +class _CheckAssignmentRule(SyntaxRule): + def _check_assignment(self, node, is_deletion=False): + error = None + type_ = node.type + if type_ == 'lambdef': + error = 'lambda' + elif type_ == 'atom': + first, second = node.children[:2] + error = _get_comprehension_type(node) + if error is None: + if second.type == 'dictorsetmaker': + if self._normalizer.version < (3, 8): + error = 'literal' + else: + if second.children[1] == ':': + error = 'dict display' + else: + error = 'set display' + elif first in ('(', '['): + if second.type == 'yield_expr': + error = 'yield expression' + elif second.type == 'testlist_comp': + # This is not a comprehension, they were handled + # further above. + for child in second.children[::2]: + self._check_assignment(child, is_deletion) + else: # Everything handled, must be useless brackets. + self._check_assignment(second, is_deletion) + elif type_ == 'keyword': + if self._normalizer.version < (3, 8): + error = 'keyword' + else: + error = str(node.value) + elif type_ == 'operator': + if node.value == '...': + error = 'Ellipsis' + elif type_ == 'comparison': + error = 'comparison' + elif type_ in ('string', 'number', 'strings'): + error = 'literal' + elif type_ == 'yield_expr': + # This one seems to be a slightly different warning in Python. + message = 'assignment to yield expression not possible' + self.add_issue(node, message=message) + elif type_ == 'test': + error = 'conditional expression' + elif type_ in ('atom_expr', 'power'): + if node.children[0] == 'await': + error = 'await expression' + elif node.children[-2] == '**': + error = 'operator' + else: + # Has a trailer + trailer = node.children[-1] + assert trailer.type == 'trailer' + if trailer.children[0] == '(': + error = 'function call' + elif type_ in ('testlist_star_expr', 'exprlist', 'testlist'): + for child in node.children[::2]: + self._check_assignment(child, is_deletion) + elif ('expr' in type_ and type_ != 'star_expr' # is a substring + or '_test' in type_ + or type_ in ('term', 'factor')): + error = 'operator' + + if error is not None: + cannot = "can't" if self._normalizer.version < (3, 8) else "cannot" + message = ' '.join([cannot, "delete" if is_deletion else "assign to", error]) + self.add_issue(node, message=message) + + +@ErrorFinder.register_rule(type='sync_comp_for') +class _CompForRule(_CheckAssignmentRule): + message = "asynchronous comprehension outside of an asynchronous function" + + def is_issue(self, node): + expr_list = node.children[1] + print(expr_list) + if expr_list.type != 'expr_list': # Already handled. + self._check_assignment(expr_list) + + return node.parent.children[0] == 'async' \ + and not self._normalizer.context.is_async_funcdef() + + +@ErrorFinder.register_rule(type='expr_stmt') +class _ExprStmtRule(_CheckAssignmentRule): + message = "illegal expression for augmented assignment" + + def is_issue(self, node): + for before_equal in node.children[:-2:2]: + self._check_assignment(before_equal) + + augassign = node.children[1] + if augassign != '=' and augassign.type != 'annassign': # Is augassign. + return node.children[0].type in ('testlist_star_expr', 'atom', 'testlist') + + +@ErrorFinder.register_rule(type='with_item') +class _WithItemRule(_CheckAssignmentRule): + def is_issue(self, with_item): + self._check_assignment(with_item.children[2]) + + +@ErrorFinder.register_rule(type='del_stmt') +class _DelStmtRule(_CheckAssignmentRule): + def is_issue(self, del_stmt): + child = del_stmt.children[1] + + if child.type != 'expr_list': # Already handled. + self._check_assignment(child, is_deletion=True) + + +@ErrorFinder.register_rule(type='expr_list') +class _ExprListRule(_CheckAssignmentRule): + def is_issue(self, expr_list): + for expr in expr_list.children[::2]: + self._check_assignment(expr) + + +@ErrorFinder.register_rule(type='for_stmt') +class _ForStmtRule(_CheckAssignmentRule): + def is_issue(self, for_stmt): + # Some of the nodes here are already used, so no else if + expr_list = for_stmt.children[1] + if expr_list.type != 'expr_list': # Already handled. + self._check_assignment(expr_list) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar26.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar26.txt new file mode 100644 index 0000000..d9cede2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar26.txt @@ -0,0 +1,159 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Commands for Kees Blom's railroad program +#diagram:token NAME +#diagram:token NUMBER +#diagram:token STRING +#diagram:token NEWLINE +#diagram:token ENDMARKER +#diagram:token INDENT +#diagram:output\input python.bla +#diagram:token DEDENT +#diagram:output\textwidth 20.04cm\oddsidemargin 0.0cm\evensidemargin 0.0cm +#diagram:rules + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ':' suite +parameters: '(' [varargslist] ')' +varargslist: ((fpdef ['=' test] ',')* + ('*' NAME [',' '**' NAME] | '**' NAME) | + fpdef ['=' test] (',' fpdef ['=' test])* [',']) +fpdef: NAME | '(' fplist ')' +fplist: fpdef (',' fpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist))*) +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test [',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item ':' suite +# Dave: Python2.6 actually defines a little bit of a different label called +# 'with_var'. However in 2.7+ this is the default. Apply it for +# consistency reasons. +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [('as' | ',') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [listmaker] ']' | + '{' [dictorsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | strings) +strings: STRING+ +listmaker: test ( list_for | (',' test)* [','] ) +# Dave: Renamed testlist_gexpr to testlist_comp, because in 2.7+ this is the +# default. It's more consistent like this. +testlist_comp: test ( gen_for | (',' test)* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: '.' '.' '.' | test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: expr (',' expr)* [','] +testlist: test (',' test)* [','] +# Dave: Rename from dictmaker to dictorsetmaker, because this is more +# consistent with the following grammars. +dictorsetmaker: test ':' test (',' test ':' test)* [','] + +classdef: 'class' NAME ['(' [testlist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +argument: test [gen_for] | test '=' test # Really [keyword '='] test + +list_iter: list_for | list_if +list_for: 'for' exprlist 'in' testlist_safe [list_iter] +list_if: 'if' old_test [list_iter] + +gen_iter: gen_for | gen_if +gen_for: 'for' exprlist 'in' or_test [gen_iter] +gen_if: 'if' old_test [gen_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [testlist] diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar27.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar27.txt new file mode 100644 index 0000000..ddb6847 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar27.txt @@ -0,0 +1,143 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ':' suite +parameters: '(' [varargslist] ')' +varargslist: ((fpdef ['=' test] ',')* + ('*' NAME [',' '**' NAME] | '**' NAME) | + fpdef ['=' test] (',' fpdef ['=' test])* [',']) +fpdef: NAME | '(' fplist ')' +fplist: fpdef (',' fpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist))*) +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test [',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [('as' | ',') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [listmaker] ']' | + '{' [dictorsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | strings) +strings: STRING+ +listmaker: test ( list_for | (',' test)* [','] ) +testlist_comp: test ( sync_comp_for | (',' test)* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: '.' '.' '.' | test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: expr (',' expr)* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [testlist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test + +list_iter: list_for | list_if +list_for: 'for' exprlist 'in' testlist_safe [list_iter] +list_if: 'if' old_test [list_iter] + +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' old_test [comp_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [testlist] diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar33.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar33.txt new file mode 100644 index 0000000..787a166 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar33.txt @@ -0,0 +1,134 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test # Really [keyword '='] test +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar34.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar34.txt new file mode 100644 index 0000000..2b497d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar34.txt @@ -0,0 +1,134 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test # Really [keyword '='] test +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar35.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar35.txt new file mode 100644 index 0000000..e2ee9c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar35.txt @@ -0,0 +1,153 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +# NOTE: Reinoud Elhorst, using ASYNC/AWAIT keywords instead of tokens +# skipping python3.5 compatibility, in favour of 3.7 solution +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (sync_comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (sync_comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [sync_comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar36.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar36.txt new file mode 100644 index 0000000..3e1e3e2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar36.txt @@ -0,0 +1,158 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +# NOTE: Francisco Souza/Reinoud Elhorst, using ASYNC/'await' keywords instead of +# skipping python3.5+ compatibility, in favour of 3.7 solution +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist_comp [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar37.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar37.txt new file mode 100644 index 0000000..3090b93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar37.txt @@ -0,0 +1,156 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar38.txt b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar38.txt new file mode 100644 index 0000000..1cea0fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/grammar38.txt @@ -0,0 +1,171 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://devguide.python.org/grammar/ + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: ( + (tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [',' [ tfpdef ['=' test] ( + ',' tfpdef ['=' test])* ([',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]]) + | '*' [tfpdef] (',' tfpdef ['=' test])* ([',' ['**' tfpdef [',']]]) + | '**' tfpdef [',']]] ) +| (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +) +tfpdef: NAME [':' test] +varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [ (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']) ]] | (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist_star_expr] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite] +while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +namedexpr_test: test [':=' test] +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test ':=' test | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist_star_expr + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist ['='] [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/parser.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/parser.py new file mode 100644 index 0000000..46bdc77 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/parser.py @@ -0,0 +1,218 @@ +from parso.python import tree +from parso.python.token import PythonTokenTypes +from parso.parser import BaseParser + + +NAME = PythonTokenTypes.NAME +INDENT = PythonTokenTypes.INDENT +DEDENT = PythonTokenTypes.DEDENT + + +class Parser(BaseParser): + """ + This class is used to parse a Python file, it then divides them into a + class structure of different scopes. + + :param pgen_grammar: The grammar object of pgen2. Loaded by load_grammar. + """ + + node_map = { + 'expr_stmt': tree.ExprStmt, + 'classdef': tree.Class, + 'funcdef': tree.Function, + 'file_input': tree.Module, + 'import_name': tree.ImportName, + 'import_from': tree.ImportFrom, + 'break_stmt': tree.KeywordStatement, + 'continue_stmt': tree.KeywordStatement, + 'return_stmt': tree.ReturnStmt, + 'raise_stmt': tree.KeywordStatement, + 'yield_expr': tree.YieldExpr, + 'del_stmt': tree.KeywordStatement, + 'pass_stmt': tree.KeywordStatement, + 'global_stmt': tree.GlobalStmt, + 'nonlocal_stmt': tree.KeywordStatement, + 'print_stmt': tree.KeywordStatement, + 'assert_stmt': tree.AssertStmt, + 'if_stmt': tree.IfStmt, + 'with_stmt': tree.WithStmt, + 'for_stmt': tree.ForStmt, + 'while_stmt': tree.WhileStmt, + 'try_stmt': tree.TryStmt, + 'sync_comp_for': tree.SyncCompFor, + # Not sure if this is the best idea, but IMO it's the easiest way to + # avoid extreme amounts of work around the subtle difference of 2/3 + # grammar in list comoprehensions. + 'list_for': tree.SyncCompFor, + # Same here. This just exists in Python 2.6. + 'gen_for': tree.SyncCompFor, + 'decorator': tree.Decorator, + 'lambdef': tree.Lambda, + 'old_lambdef': tree.Lambda, + 'lambdef_nocond': tree.Lambda, + } + default_node = tree.PythonNode + + # Names/Keywords are handled separately + _leaf_map = { + PythonTokenTypes.STRING: tree.String, + PythonTokenTypes.NUMBER: tree.Number, + PythonTokenTypes.NEWLINE: tree.Newline, + PythonTokenTypes.ENDMARKER: tree.EndMarker, + PythonTokenTypes.FSTRING_STRING: tree.FStringString, + PythonTokenTypes.FSTRING_START: tree.FStringStart, + PythonTokenTypes.FSTRING_END: tree.FStringEnd, + } + + def __init__(self, pgen_grammar, error_recovery=True, start_nonterminal='file_input'): + super(Parser, self).__init__(pgen_grammar, start_nonterminal, + error_recovery=error_recovery) + + self.syntax_errors = [] + self._omit_dedent_list = [] + self._indent_counter = 0 + + def parse(self, tokens): + if self._error_recovery: + if self._start_nonterminal != 'file_input': + raise NotImplementedError + + tokens = self._recovery_tokenize(tokens) + + return super(Parser, self).parse(tokens) + + def convert_node(self, nonterminal, children): + """ + Convert raw node information to a PythonBaseNode instance. + + This is passed to the parser driver which calls it whenever a reduction of a + grammar rule produces a new complete node, so that the tree is build + strictly bottom-up. + """ + try: + node = self.node_map[nonterminal](children) + except KeyError: + if nonterminal == 'suite': + # We don't want the INDENT/DEDENT in our parser tree. Those + # leaves are just cancer. They are virtual leaves and not real + # ones and therefore have pseudo start/end positions and no + # prefixes. Just ignore them. + children = [children[0]] + children[2:-1] + elif nonterminal == 'list_if': + # Make transitioning from 2 to 3 easier. + nonterminal = 'comp_if' + elif nonterminal == 'listmaker': + # Same as list_if above. + nonterminal = 'testlist_comp' + node = self.default_node(nonterminal, children) + for c in children: + c.parent = node + return node + + def convert_leaf(self, type, value, prefix, start_pos): + # print('leaf', repr(value), token.tok_name[type]) + if type == NAME: + if value in self._pgen_grammar.reserved_syntax_strings: + return tree.Keyword(value, start_pos, prefix) + else: + return tree.Name(value, start_pos, prefix) + + return self._leaf_map.get(type, tree.Operator)(value, start_pos, prefix) + + def error_recovery(self, token): + tos_nodes = self.stack[-1].nodes + if tos_nodes: + last_leaf = tos_nodes[-1].get_last_leaf() + else: + last_leaf = None + + if self._start_nonterminal == 'file_input' and \ + (token.type == PythonTokenTypes.ENDMARKER + or token.type == DEDENT and '\n' not in last_leaf.value + and '\r' not in last_leaf.value): + # In Python statements need to end with a newline. But since it's + # possible (and valid in Python ) that there's no newline at the + # end of a file, we have to recover even if the user doesn't want + # error recovery. + if self.stack[-1].dfa.from_rule == 'simple_stmt': + try: + plan = self.stack[-1].dfa.transitions[PythonTokenTypes.NEWLINE] + except KeyError: + pass + else: + if plan.next_dfa.is_final and not plan.dfa_pushes: + # We are ignoring here that the newline would be + # required for a simple_stmt. + self.stack[-1].dfa = plan.next_dfa + self._add_token(token) + return + + if not self._error_recovery: + return super(Parser, self).error_recovery(token) + + def current_suite(stack): + # For now just discard everything that is not a suite or + # file_input, if we detect an error. + for until_index, stack_node in reversed(list(enumerate(stack))): + # `suite` can sometimes be only simple_stmt, not stmt. + if stack_node.nonterminal == 'file_input': + break + elif stack_node.nonterminal == 'suite': + # In the case where we just have a newline we don't want to + # do error recovery here. In all other cases, we want to do + # error recovery. + if len(stack_node.nodes) != 1: + break + return until_index + + until_index = current_suite(self.stack) + + if self._stack_removal(until_index + 1): + self._add_token(token) + else: + typ, value, start_pos, prefix = token + if typ == INDENT: + # For every deleted INDENT we have to delete a DEDENT as well. + # Otherwise the parser will get into trouble and DEDENT too early. + self._omit_dedent_list.append(self._indent_counter) + + error_leaf = tree.PythonErrorLeaf(typ.name, value, start_pos, prefix) + self.stack[-1].nodes.append(error_leaf) + + tos = self.stack[-1] + if tos.nonterminal == 'suite': + # Need at least one statement in the suite. This happend with the + # error recovery above. + try: + tos.dfa = tos.dfa.arcs['stmt'] + except KeyError: + # We're already in a final state. + pass + + def _stack_removal(self, start_index): + all_nodes = [node for stack_node in self.stack[start_index:] for node in stack_node.nodes] + + if all_nodes: + node = tree.PythonErrorNode(all_nodes) + for n in all_nodes: + n.parent = node + self.stack[start_index - 1].nodes.append(node) + + self.stack[start_index:] = [] + return bool(all_nodes) + + def _recovery_tokenize(self, tokens): + for token in tokens: + typ = token[0] + if typ == DEDENT: + # We need to count indents, because if we just omit any DEDENT, + # we might omit them in the wrong place. + o = self._omit_dedent_list + if o and o[-1] == self._indent_counter: + o.pop() + continue + + self._indent_counter -= 1 + elif typ == INDENT: + self._indent_counter += 1 + yield token diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/pep8.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/pep8.py new file mode 100644 index 0000000..2a037f9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/pep8.py @@ -0,0 +1,727 @@ +import re +from contextlib import contextmanager + +from parso.python.errors import ErrorFinder, ErrorFinderConfig +from parso.normalizer import Rule +from parso.python.tree import search_ancestor, Flow, Scope + + +_IMPORT_TYPES = ('import_name', 'import_from') +_SUITE_INTRODUCERS = ('classdef', 'funcdef', 'if_stmt', 'while_stmt', + 'for_stmt', 'try_stmt', 'with_stmt') +_NON_STAR_TYPES = ('term', 'import_from', 'power') +_OPENING_BRACKETS = '(', '[', '{' +_CLOSING_BRACKETS = ')', ']', '}' +_FACTOR = '+', '-', '~' +_ALLOW_SPACE = '*', '+', '-', '**', '/', '//', '@' +_BITWISE_OPERATOR = '<<', '>>', '|', '&', '^' +_NEEDS_SPACE = ('=', '%', '->', + '<', '>', '==', '>=', '<=', '<>', '!=', + '+=', '-=', '*=', '@=', '/=', '%=', '&=', '|=', '^=', '<<=', + '>>=', '**=', '//=') +_NEEDS_SPACE += _BITWISE_OPERATOR +_IMPLICIT_INDENTATION_TYPES = ('dictorsetmaker', 'argument') +_POSSIBLE_SLICE_PARENTS = ('subscript', 'subscriptlist', 'sliceop') + + +class IndentationTypes(object): + VERTICAL_BRACKET = object() + HANGING_BRACKET = object() + BACKSLASH = object() + SUITE = object() + IMPLICIT = object() + + +class IndentationNode(object): + type = IndentationTypes.SUITE + + def __init__(self, config, indentation, parent=None): + self.bracket_indentation = self.indentation = indentation + self.parent = parent + + def __repr__(self): + return '<%s>' % self.__class__.__name__ + + def get_latest_suite_node(self): + n = self + while n is not None: + if n.type == IndentationTypes.SUITE: + return n + + n = n.parent + + +class BracketNode(IndentationNode): + def __init__(self, config, leaf, parent, in_suite_introducer=False): + self.leaf = leaf + + # Figure out here what the indentation is. For chained brackets + # we can basically use the previous indentation. + previous_leaf = leaf + n = parent + if n.type == IndentationTypes.IMPLICIT: + n = n.parent + while True: + if hasattr(n, 'leaf') and previous_leaf.line != n.leaf.line: + break + + previous_leaf = previous_leaf.get_previous_leaf() + if not isinstance(n, BracketNode) or previous_leaf != n.leaf: + break + n = n.parent + parent_indentation = n.indentation + + + next_leaf = leaf.get_next_leaf() + if '\n' in next_leaf.prefix: + # This implies code like: + # foobarbaz( + # a, + # b, + # ) + self.bracket_indentation = parent_indentation \ + + config.closing_bracket_hanging_indentation + self.indentation = parent_indentation + config.indentation + self.type = IndentationTypes.HANGING_BRACKET + else: + # Implies code like: + # foobarbaz( + # a, + # b, + # ) + expected_end_indent = leaf.end_pos[1] + if '\t' in config.indentation: + self.indentation = None + else: + self.indentation = ' ' * expected_end_indent + self.bracket_indentation = self.indentation + self.type = IndentationTypes.VERTICAL_BRACKET + + if in_suite_introducer and parent.type == IndentationTypes.SUITE \ + and self.indentation == parent_indentation + config.indentation: + self.indentation += config.indentation + # The closing bracket should have the same indentation. + self.bracket_indentation = self.indentation + self.parent = parent + + +class ImplicitNode(BracketNode): + """ + Implicit indentation after keyword arguments, default arguments, + annotations and dict values. + """ + def __init__(self, config, leaf, parent): + super(ImplicitNode, self).__init__(config, leaf, parent) + self.type = IndentationTypes.IMPLICIT + + next_leaf = leaf.get_next_leaf() + if leaf == ':' and '\n' not in next_leaf.prefix: + self.indentation += ' ' + + +class BackslashNode(IndentationNode): + type = IndentationTypes.BACKSLASH + + def __init__(self, config, parent_indentation, containing_leaf, spacing, parent=None): + expr_stmt = search_ancestor(containing_leaf, 'expr_stmt') + if expr_stmt is not None: + equals = expr_stmt.children[-2] + + if '\t' in config.indentation: + # TODO unite with the code of BracketNode + self.indentation = None + else: + # If the backslash follows the equals, use normal indentation + # otherwise it should align with the equals. + if equals.end_pos == spacing.start_pos: + self.indentation = parent_indentation + config.indentation + else: + # +1 because there is a space. + self.indentation = ' ' * (equals.end_pos[1] + 1) + else: + self.indentation = parent_indentation + config.indentation + self.bracket_indentation = self.indentation + self.parent = parent + + +def _is_magic_name(name): + return name.value.startswith('__') and name.value.endswith('__') + + +class PEP8Normalizer(ErrorFinder): + def __init__(self, *args, **kwargs): + super(PEP8Normalizer, self).__init__(*args, **kwargs) + self._previous_part = None + self._previous_leaf = None + self._on_newline = True + self._newline_count = 0 + self._wanted_newline_count = None + self._max_new_lines_in_prefix = 0 + self._new_statement = True + self._implicit_indentation_possible = False + # The top of stack of the indentation nodes. + self._indentation_tos = self._last_indentation_tos = \ + IndentationNode(self._config, indentation='') + self._in_suite_introducer = False + + if ' ' in self._config.indentation: + self._indentation_type = 'spaces' + self._wrong_indentation_char = '\t' + else: + self._indentation_type = 'tabs' + self._wrong_indentation_char = ' ' + + @contextmanager + def visit_node(self, node): + with super(PEP8Normalizer, self).visit_node(node): + with self._visit_node(node): + yield + + @contextmanager + def _visit_node(self, node): + typ = node.type + + if typ in 'import_name': + names = node.get_defined_names() + if len(names) > 1: + for name in names[:1]: + self.add_issue(name, 401, 'Multiple imports on one line') + elif typ == 'lambdef': + expr_stmt = node.parent + # Check if it's simply defining a single name, not something like + # foo.bar or x[1], where using a lambda could make more sense. + if expr_stmt.type == 'expr_stmt' and any(n.type == 'name' for n in expr_stmt.children[:-2:2]): + self.add_issue(node, 731, 'Do not assign a lambda expression, use a def') + elif typ == 'try_stmt': + for child in node.children: + # Here we can simply check if it's an except, because otherwise + # it would be an except_clause. + if child.type == 'keyword' and child.value == 'except': + self.add_issue(child, 722, 'Do not use bare except, specify exception instead') + elif typ == 'comparison': + for child in node.children: + if child.type not in ('atom_expr', 'power'): + continue + if len(child.children) > 2: + continue + trailer = child.children[1] + atom = child.children[0] + if trailer.type == 'trailer' and atom.type == 'name' \ + and atom.value == 'type': + self.add_issue(node, 721, "Do not compare types, use 'isinstance()") + break + elif typ == 'file_input': + endmarker = node.children[-1] + prev = endmarker.get_previous_leaf() + prefix = endmarker.prefix + if (not prefix.endswith('\n') and ( + prefix or prev is None or prev.value != '\n')): + self.add_issue(endmarker, 292, "No newline at end of file") + + if typ in _IMPORT_TYPES: + simple_stmt = node.parent + module = simple_stmt.parent + #if module.type == 'simple_stmt': + if module.type == 'file_input': + index = module.children.index(simple_stmt) + for child in module.children[:index]: + children = [child] + if child.type == 'simple_stmt': + # Remove the newline. + children = child.children[:-1] + + found_docstring = False + for c in children: + if c.type == 'string' and not found_docstring: + continue + found_docstring = True + + if c.type == 'expr_stmt' and \ + all(_is_magic_name(n) for n in c.get_defined_names()): + continue + + if c.type in _IMPORT_TYPES or isinstance(c, Flow): + continue + + self.add_issue(node, 402, 'Module level import not at top of file') + break + else: + continue + break + + implicit_indentation_possible = typ in _IMPLICIT_INDENTATION_TYPES + in_introducer = typ in _SUITE_INTRODUCERS + if in_introducer: + self._in_suite_introducer = True + elif typ == 'suite': + if self._indentation_tos.type == IndentationTypes.BACKSLASH: + self._indentation_tos = self._indentation_tos.parent + + self._indentation_tos = IndentationNode( + self._config, + self._indentation_tos.indentation + self._config.indentation, + parent=self._indentation_tos + ) + elif implicit_indentation_possible: + self._implicit_indentation_possible = True + yield + if typ == 'suite': + assert self._indentation_tos.type == IndentationTypes.SUITE + self._indentation_tos = self._indentation_tos.parent + # If we dedent, no lines are needed anymore. + self._wanted_newline_count = None + elif implicit_indentation_possible: + self._implicit_indentation_possible = False + if self._indentation_tos.type == IndentationTypes.IMPLICIT: + self._indentation_tos = self._indentation_tos.parent + elif in_introducer: + self._in_suite_introducer = False + if typ in ('classdef', 'funcdef'): + self._wanted_newline_count = self._get_wanted_blank_lines_count() + + def _check_tabs_spaces(self, spacing): + if self._wrong_indentation_char in spacing.value: + self.add_issue(spacing, 101, 'Indentation contains ' + self._indentation_type) + return True + return False + + def _get_wanted_blank_lines_count(self): + suite_node = self._indentation_tos.get_latest_suite_node() + return int(suite_node.parent is None) + 1 + + def _reset_newlines(self, spacing, leaf, is_comment=False): + self._max_new_lines_in_prefix = \ + max(self._max_new_lines_in_prefix, self._newline_count) + + wanted = self._wanted_newline_count + if wanted is not None: + # Need to substract one + blank_lines = self._newline_count - 1 + if wanted > blank_lines and leaf.type != 'endmarker': + # In case of a comment we don't need to add the issue, yet. + if not is_comment: + # TODO end_pos wrong. + code = 302 if wanted == 2 else 301 + message = "expected %s blank line, found %s" \ + % (wanted, blank_lines) + self.add_issue(spacing, code, message) + self._wanted_newline_count = None + else: + self._wanted_newline_count = None + + if not is_comment: + wanted = self._get_wanted_blank_lines_count() + actual = self._max_new_lines_in_prefix - 1 + + val = leaf.value + needs_lines = ( + val == '@' and leaf.parent.type == 'decorator' + or ( + val == 'class' + or val == 'async' and leaf.get_next_leaf() == 'def' + or val == 'def' and self._previous_leaf != 'async' + ) and leaf.parent.parent.type != 'decorated' + ) + if needs_lines and actual < wanted: + func_or_cls = leaf.parent + suite = func_or_cls.parent + if suite.type == 'decorated': + suite = suite.parent + + # The first leaf of a file or a suite should not need blank + # lines. + if suite.children[int(suite.type == 'suite')] != func_or_cls: + code = 302 if wanted == 2 else 301 + message = "expected %s blank line, found %s" \ + % (wanted, actual) + self.add_issue(spacing, code, message) + + self._max_new_lines_in_prefix = 0 + + self._newline_count = 0 + + def visit_leaf(self, leaf): + super(PEP8Normalizer, self).visit_leaf(leaf) + for part in leaf._split_prefix(): + if part.type == 'spacing': + # This part is used for the part call after for. + break + self._visit_part(part, part.create_spacing_part(), leaf) + + self._analyse_non_prefix(leaf) + self._visit_part(leaf, part, leaf) + + # Cleanup + self._last_indentation_tos = self._indentation_tos + + self._new_statement = leaf.type == 'newline' + + # TODO does this work? with brackets and stuff? + if leaf.type == 'newline' and \ + self._indentation_tos.type == IndentationTypes.BACKSLASH: + self._indentation_tos = self._indentation_tos.parent + + if leaf.value == ':' and leaf.parent.type in _SUITE_INTRODUCERS: + self._in_suite_introducer = False + elif leaf.value == 'elif': + self._in_suite_introducer = True + + if not self._new_statement: + self._reset_newlines(part, leaf) + self._max_blank_lines = 0 + + self._previous_leaf = leaf + + return leaf.value + + def _visit_part(self, part, spacing, leaf): + value = part.value + type_ = part.type + if type_ == 'error_leaf': + return + + if value == ',' and part.parent.type == 'dictorsetmaker': + self._indentation_tos = self._indentation_tos.parent + + node = self._indentation_tos + + if type_ == 'comment': + if value.startswith('##'): + # Whole blocks of # should not raise an error. + if value.lstrip('#'): + self.add_issue(part, 266, "Too many leading '#' for block comment.") + elif self._on_newline: + if not re.match(r'#:? ', value) and not value == '#' \ + and not (value.startswith('#!') and part.start_pos == (1, 0)): + self.add_issue(part, 265, "Block comment should start with '# '") + else: + if not re.match(r'#:? [^ ]', value): + self.add_issue(part, 262, "Inline comment should start with '# '") + + self._reset_newlines(spacing, leaf, is_comment=True) + elif type_ == 'newline': + if self._newline_count > self._get_wanted_blank_lines_count(): + self.add_issue(part, 303, "Too many blank lines (%s)" % self._newline_count) + elif leaf in ('def', 'class') \ + and leaf.parent.parent.type == 'decorated': + self.add_issue(part, 304, "Blank lines found after function decorator") + + + self._newline_count += 1 + + if type_ == 'backslash': + # TODO is this enough checking? What about ==? + if node.type != IndentationTypes.BACKSLASH: + if node.type != IndentationTypes.SUITE: + self.add_issue(part, 502, 'The backslash is redundant between brackets') + else: + indentation = node.indentation + if self._in_suite_introducer and node.type == IndentationTypes.SUITE: + indentation += self._config.indentation + + self._indentation_tos = BackslashNode( + self._config, + indentation, + part, + spacing, + parent=self._indentation_tos + ) + elif self._on_newline: + indentation = spacing.value + if node.type == IndentationTypes.BACKSLASH \ + and self._previous_part.type == 'newline': + self._indentation_tos = self._indentation_tos.parent + + if not self._check_tabs_spaces(spacing): + should_be_indentation = node.indentation + if type_ == 'comment': + # Comments can be dedented. So we have to care for that. + n = self._last_indentation_tos + while True: + if len(indentation) > len(n.indentation): + break + + should_be_indentation = n.indentation + + self._last_indentation_tos = n + if n == node: + break + n = n.parent + + if self._new_statement: + if type_ == 'newline': + if indentation: + self.add_issue(spacing, 291, 'Trailing whitespace') + elif indentation != should_be_indentation: + s = '%s %s' % (len(self._config.indentation), self._indentation_type) + self.add_issue(part, 111, 'Indentation is not a multiple of ' + s) + else: + if value in '])}': + should_be_indentation = node.bracket_indentation + else: + should_be_indentation = node.indentation + if self._in_suite_introducer and indentation == \ + node.get_latest_suite_node().indentation \ + + self._config.indentation: + self.add_issue(part, 129, "Line with same indent as next logical block") + elif indentation != should_be_indentation: + if not self._check_tabs_spaces(spacing) and part.value != '\n': + if value in '])}': + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 124, "Closing bracket does not match visual indentation") + else: + self.add_issue(part, 123, "Losing bracket does not match indentation of opening bracket's line") + else: + if len(indentation) < len(should_be_indentation): + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 128, 'Continuation line under-indented for visual indent') + elif node.type == IndentationTypes.BACKSLASH: + self.add_issue(part, 122, 'Continuation line missing indentation or outdented') + elif node.type == IndentationTypes.IMPLICIT: + self.add_issue(part, 135, 'xxx') + else: + self.add_issue(part, 121, 'Continuation line under-indented for hanging indent') + else: + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 127, 'Continuation line over-indented for visual indent') + elif node.type == IndentationTypes.IMPLICIT: + self.add_issue(part, 136, 'xxx') + else: + self.add_issue(part, 126, 'Continuation line over-indented for hanging indent') + else: + self._check_spacing(part, spacing) + + self._check_line_length(part, spacing) + # ------------------------------- + # Finalizing. Updating the state. + # ------------------------------- + if value and value in '()[]{}' and type_ != 'error_leaf' \ + and part.parent.type != 'error_node': + if value in _OPENING_BRACKETS: + self._indentation_tos = BracketNode( + self._config, part, + parent=self._indentation_tos, + in_suite_introducer=self._in_suite_introducer + ) + else: + assert node.type != IndentationTypes.IMPLICIT + self._indentation_tos = self._indentation_tos.parent + elif value in ('=', ':') and self._implicit_indentation_possible \ + and part.parent.type in _IMPLICIT_INDENTATION_TYPES: + indentation = node.indentation + self._indentation_tos = ImplicitNode( + self._config, part, parent=self._indentation_tos + ) + + self._on_newline = type_ in ('newline', 'backslash', 'bom') + + self._previous_part = part + self._previous_spacing = spacing + + def _check_line_length(self, part, spacing): + if part.type == 'backslash': + last_column = part.start_pos[1] + 1 + else: + last_column = part.end_pos[1] + if last_column > self._config.max_characters \ + and spacing.start_pos[1] <= self._config.max_characters : + # Special case for long URLs in multi-line docstrings or comments, + # but still report the error when the 72 first chars are whitespaces. + report = True + if part.type == 'comment': + splitted = part.value[1:].split() + if len(splitted) == 1 \ + and (part.end_pos[1] - len(splitted[0])) < 72: + report = False + if report: + self.add_issue( + part, + 501, + 'Line too long (%s > %s characters)' % + (last_column, self._config.max_characters), + ) + + def _check_spacing(self, part, spacing): + def add_if_spaces(*args): + if spaces: + return self.add_issue(*args) + + def add_not_spaces(*args): + if not spaces: + return self.add_issue(*args) + + spaces = spacing.value + prev = self._previous_part + if prev is not None and prev.type == 'error_leaf' or part.type == 'error_leaf': + return + + type_ = part.type + if '\t' in spaces: + self.add_issue(spacing, 223, 'Used tab to separate tokens') + elif type_ == 'comment': + if len(spaces) < self._config.spaces_before_comment: + self.add_issue(spacing, 261, 'At least two spaces before inline comment') + elif type_ == 'newline': + add_if_spaces(spacing, 291, 'Trailing whitespace') + elif len(spaces) > 1: + self.add_issue(spacing, 221, 'Multiple spaces used') + else: + if prev in _OPENING_BRACKETS: + message = "Whitespace after '%s'" % part.value + add_if_spaces(spacing, 201, message) + elif part in _CLOSING_BRACKETS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 202, message) + elif part in (',', ';') or part == ':' \ + and part.parent.type not in _POSSIBLE_SLICE_PARENTS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 203, message) + elif prev == ':' and prev.parent.type in _POSSIBLE_SLICE_PARENTS: + pass # TODO + elif prev in (',', ';', ':'): + add_not_spaces(spacing, 231, "missing whitespace after '%s'") + elif part == ':': # Is a subscript + # TODO + pass + elif part in ('*', '**') and part.parent.type not in _NON_STAR_TYPES \ + or prev in ('*', '**') \ + and prev.parent.type not in _NON_STAR_TYPES: + # TODO + pass + elif prev in _FACTOR and prev.parent.type == 'factor': + pass + elif prev == '@' and prev.parent.type == 'decorator': + pass # TODO should probably raise an error if there's a space here + elif part in _NEEDS_SPACE or prev in _NEEDS_SPACE: + if part == '=' and part.parent.type in ('argument', 'param') \ + or prev == '=' and prev.parent.type in ('argument', 'param'): + if part == '=': + param = part.parent + else: + param = prev.parent + if param.type == 'param' and param.annotation: + add_not_spaces(spacing, 252, 'Expected spaces around annotation equals') + else: + add_if_spaces(spacing, 251, 'Unexpected spaces around keyword / parameter equals') + elif part in _BITWISE_OPERATOR or prev in _BITWISE_OPERATOR: + add_not_spaces(spacing, 227, 'Missing whitespace around bitwise or shift operator') + elif part == '%' or prev == '%': + add_not_spaces(spacing, 228, 'Missing whitespace around modulo operator') + else: + message_225 = 'Missing whitespace between tokens' + add_not_spaces(spacing, 225, message_225) + elif type_ == 'keyword' or prev.type == 'keyword': + add_not_spaces(spacing, 275, 'Missing whitespace around keyword') + else: + prev_spacing = self._previous_spacing + if prev in _ALLOW_SPACE and spaces != prev_spacing.value \ + and '\n' not in self._previous_leaf.prefix: + message = "Whitespace before operator doesn't match with whitespace after" + self.add_issue(spacing, 229, message) + + if spaces and part not in _ALLOW_SPACE and prev not in _ALLOW_SPACE: + message_225 = 'Missing whitespace between tokens' + #print('xy', spacing) + #self.add_issue(spacing, 225, message_225) + # TODO why only brackets? + if part in _OPENING_BRACKETS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 211, message) + + def _analyse_non_prefix(self, leaf): + typ = leaf.type + if typ == 'name' and leaf.value in ('l', 'O', 'I'): + if leaf.is_definition(): + message = "Do not define %s named 'l', 'O', or 'I' one line" + if leaf.parent.type == 'class' and leaf.parent.name == leaf: + self.add_issue(leaf, 742, message % 'classes') + elif leaf.parent.type == 'function' and leaf.parent.name == leaf: + self.add_issue(leaf, 743, message % 'function') + else: + self.add_issuadd_issue(741, message % 'variables', leaf) + elif leaf.value == ':': + if isinstance(leaf.parent, (Flow, Scope)) and leaf.parent.type != 'lambdef': + next_leaf = leaf.get_next_leaf() + if next_leaf.type != 'newline': + if leaf.parent.type == 'funcdef': + self.add_issue(next_leaf, 704, 'Multiple statements on one line (def)') + else: + self.add_issue(next_leaf, 701, 'Multiple statements on one line (colon)') + elif leaf.value == ';': + if leaf.get_next_leaf().type in ('newline', 'endmarker'): + self.add_issue(leaf, 703, 'Statement ends with a semicolon') + else: + self.add_issue(leaf, 702, 'Multiple statements on one line (semicolon)') + elif leaf.value in ('==', '!='): + comparison = leaf.parent + index = comparison.children.index(leaf) + left = comparison.children[index - 1] + right = comparison.children[index + 1] + for node in left, right: + if node.type == 'keyword' or node.type == 'name': + if node.value == 'None': + message = "comparison to None should be 'if cond is None:'" + self.add_issue(leaf, 711, message) + break + elif node.value in ('True', 'False'): + message = "comparison to False/True should be 'if cond is True:' or 'if cond:'" + self.add_issue(leaf, 712, message) + break + elif leaf.value in ('in', 'is'): + comparison = leaf.parent + if comparison.type == 'comparison' and comparison.parent.type == 'not_test': + if leaf.value == 'in': + self.add_issue(leaf, 713, "test for membership should be 'not in'") + else: + self.add_issue(leaf, 714, "test for object identity should be 'is not'") + elif typ == 'string': + # Checking multiline strings + for i, line in enumerate(leaf.value.splitlines()[1:]): + indentation = re.match(r'[ \t]*', line).group(0) + start_pos = leaf.line + i, len(indentation) + # TODO check multiline indentation. + elif typ == 'endmarker': + if self._newline_count >= 2: + self.add_issue(leaf, 391, 'Blank line at end of file') + + def add_issue(self, node, code, message): + if self._previous_leaf is not None: + if search_ancestor(self._previous_leaf, 'error_node') is not None: + return + if self._previous_leaf.type == 'error_leaf': + return + if search_ancestor(node, 'error_node') is not None: + return + if code in (901, 903): + # 901 and 903 are raised by the ErrorFinder. + super(PEP8Normalizer, self).add_issue(node, code, message) + else: + # Skip ErrorFinder here, because it has custom behavior. + super(ErrorFinder, self).add_issue(node, code, message) + + +class PEP8NormalizerConfig(ErrorFinderConfig): + normalizer_class = PEP8Normalizer + """ + Normalizing to PEP8. Not really implemented, yet. + """ + def __init__(self, indentation=' ' * 4, hanging_indentation=None, + max_characters=79, spaces_before_comment=2): + self.indentation = indentation + if hanging_indentation is None: + hanging_indentation = indentation + self.hanging_indentation = hanging_indentation + self.closing_bracket_hanging_indentation = '' + self.break_after_binary = False + self.max_characters = max_characters + self.spaces_before_comment = spaces_before_comment + + +# TODO this is not yet ready. +#@PEP8Normalizer.register_rule(type='endmarker') +class BlankLineAtEnd(Rule): + code = 392 + message = 'Blank line at end of file' + + def is_issue(self, leaf): + return self._newline_count >= 2 diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/prefix.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/prefix.py new file mode 100644 index 0000000..b7f1e1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/prefix.py @@ -0,0 +1,97 @@ +import re +from codecs import BOM_UTF8 + +from parso.python.tokenize import group + +unicode_bom = BOM_UTF8.decode('utf-8') + + +class PrefixPart(object): + def __init__(self, leaf, typ, value, spacing='', start_pos=None): + assert start_pos is not None + self.parent = leaf + self.type = typ + self.value = value + self.spacing = spacing + self.start_pos = start_pos + + @property + def end_pos(self): + if self.value.endswith('\n'): + return self.start_pos[0] + 1, 0 + if self.value == unicode_bom: + # The bom doesn't have a length at the start of a Python file. + return self.start_pos + return self.start_pos[0], self.start_pos[1] + len(self.value) + + def create_spacing_part(self): + column = self.start_pos[1] - len(self.spacing) + return PrefixPart( + self.parent, 'spacing', self.spacing, + start_pos=(self.start_pos[0], column) + ) + + def __repr__(self): + return '%s(%s, %s, %s)' % ( + self.__class__.__name__, + self.type, + repr(self.value), + self.start_pos + ) + + +_comment = r'#[^\n\r\f]*' +_backslash = r'\\\r?\n' +_newline = r'\r?\n' +_form_feed = r'\f' +_only_spacing = '$' +_spacing = r'[ \t]*' +_bom = unicode_bom + +_regex = group( + _comment, _backslash, _newline, _form_feed, _only_spacing, _bom, + capture=True +) +_regex = re.compile(group(_spacing, capture=True) + _regex) + + +_types = { + '#': 'comment', + '\\': 'backslash', + '\f': 'formfeed', + '\n': 'newline', + '\r': 'newline', + unicode_bom: 'bom' +} + + +def split_prefix(leaf, start_pos): + line, column = start_pos + start = 0 + value = spacing = '' + bom = False + while start != len(leaf.prefix): + match =_regex.match(leaf.prefix, start) + spacing = match.group(1) + value = match.group(2) + if not value: + break + type_ = _types[value[0]] + yield PrefixPart( + leaf, type_, value, spacing, + start_pos=(line, column + start - int(bom) + len(spacing)) + ) + if type_ == 'bom': + bom = True + + start = match.end(0) + if value.endswith('\n'): + line += 1 + column = -start + + if value: + spacing = '' + yield PrefixPart( + leaf, 'spacing', spacing, + start_pos=(line, column + start) + ) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/token.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/token.py new file mode 100644 index 0000000..bb86ec9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/token.py @@ -0,0 +1,27 @@ +from __future__ import absolute_import + + +class TokenType(object): + def __init__(self, name, contains_syntax=False): + self.name = name + self.contains_syntax = contains_syntax + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.name) + + +class TokenTypes(object): + """ + Basically an enum, but Python 2 doesn't have enums in the standard library. + """ + def __init__(self, names, contains_syntax): + for name in names: + setattr(self, name, TokenType(name, contains_syntax=name in contains_syntax)) + + +PythonTokenTypes = TokenTypes(( + 'STRING', 'NUMBER', 'NAME', 'ERRORTOKEN', 'NEWLINE', 'INDENT', 'DEDENT', + 'ERROR_DEDENT', 'FSTRING_STRING', 'FSTRING_START', 'FSTRING_END', 'OP', + 'ENDMARKER'), + contains_syntax=('NAME', 'OP'), +) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tokenize.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tokenize.py new file mode 100644 index 0000000..48d128b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tokenize.py @@ -0,0 +1,686 @@ +# -*- coding: utf-8 -*- +""" +This tokenizer has been copied from the ``tokenize.py`` standard library +tokenizer. The reason was simple: The standard library tokenizer fails +if the indentation is not right. To make it possible to do error recovery the + tokenizer needed to be rewritten. + +Basically this is a stripped down version of the standard library module, so +you can read the documentation there. Additionally we included some speed and +memory optimizations here. +""" +from __future__ import absolute_import + +import sys +import string +import re +from collections import namedtuple +import itertools as _itertools +from codecs import BOM_UTF8 + +from parso.python.token import PythonTokenTypes +from parso._compatibility import py_version +from parso.utils import split_lines + + +# Maximum code point of Unicode 6.0: 0x10ffff (1,114,111) +MAX_UNICODE = '\U0010ffff' + +STRING = PythonTokenTypes.STRING +NAME = PythonTokenTypes.NAME +NUMBER = PythonTokenTypes.NUMBER +OP = PythonTokenTypes.OP +NEWLINE = PythonTokenTypes.NEWLINE +INDENT = PythonTokenTypes.INDENT +DEDENT = PythonTokenTypes.DEDENT +ENDMARKER = PythonTokenTypes.ENDMARKER +ERRORTOKEN = PythonTokenTypes.ERRORTOKEN +ERROR_DEDENT = PythonTokenTypes.ERROR_DEDENT +FSTRING_START = PythonTokenTypes.FSTRING_START +FSTRING_STRING = PythonTokenTypes.FSTRING_STRING +FSTRING_END = PythonTokenTypes.FSTRING_END + +TokenCollection = namedtuple( + 'TokenCollection', + 'pseudo_token single_quoted triple_quoted endpats whitespace ' + 'fstring_pattern_map always_break_tokens', +) + +BOM_UTF8_STRING = BOM_UTF8.decode('utf-8') + +_token_collection_cache = {} + +if py_version >= 30: + # Python 3 has str.isidentifier() to check if a char is a valid identifier + is_identifier = str.isidentifier +else: + # Python 2 doesn't, but it's not that important anymore and if you tokenize + # Python 2 code with this, it's still ok. It's just that parsing Python 3 + # code with this function is not 100% correct. + # This just means that Python 2 code matches a few identifiers too much, + # but that doesn't really matter. + def is_identifier(s): + return True + + +def group(*choices, **kwargs): + capture = kwargs.pop('capture', False) # Python 2, arrghhhhh :( + assert not kwargs + + start = '(' + if not capture: + start += '?:' + return start + '|'.join(choices) + ')' + + +def maybe(*choices): + return group(*choices) + '?' + + +# Return the empty string, plus all of the valid string prefixes. +def _all_string_prefixes(version_info, include_fstring=False, only_fstring=False): + def different_case_versions(prefix): + for s in _itertools.product(*[(c, c.upper()) for c in prefix]): + yield ''.join(s) + # The valid string prefixes. Only contain the lower case versions, + # and don't contain any permuations (include 'fr', but not + # 'rf'). The various permutations will be generated. + valid_string_prefixes = ['b', 'r', 'u'] + if version_info >= (3, 0): + valid_string_prefixes.append('br') + + result = set(['']) + if version_info >= (3, 6) and include_fstring: + f = ['f', 'fr'] + if only_fstring: + valid_string_prefixes = f + result = set() + else: + valid_string_prefixes += f + elif only_fstring: + return set() + + # if we add binary f-strings, add: ['fb', 'fbr'] + for prefix in valid_string_prefixes: + for t in _itertools.permutations(prefix): + # create a list with upper and lower versions of each + # character + result.update(different_case_versions(t)) + if version_info <= (2, 7): + # In Python 2 the order cannot just be random. + result.update(different_case_versions('ur')) + result.update(different_case_versions('br')) + return result + + +def _compile(expr): + return re.compile(expr, re.UNICODE) + + +def _get_token_collection(version_info): + try: + return _token_collection_cache[tuple(version_info)] + except KeyError: + _token_collection_cache[tuple(version_info)] = result = \ + _create_token_collection(version_info) + return result + + +fstring_string_single_line = _compile(r'(?:\{\{|\}\}|\\(?:\r\n?|\n)|[^{}\r\n])+') +fstring_string_multi_line = _compile(r'(?:[^{}]+|\{\{|\}\})+') +fstring_format_spec_single_line = _compile(r'(?:\\(?:\r\n?|\n)|[^{}\r\n])+') +fstring_format_spec_multi_line = _compile(r'[^{}]+') + + +def _create_token_collection(version_info): + # Note: we use unicode matching for names ("\w") but ascii matching for + # number literals. + Whitespace = r'[ \f\t]*' + whitespace = _compile(Whitespace) + Comment = r'#[^\r\n]*' + # Python 2 is pretty much not working properly anymore, we just ignore + # parsing unicode properly, which is fine, I guess. + if version_info[0] == 2: + Name = r'([A-Za-z_0-9]+)' + elif sys.version_info[0] == 2: + # Unfortunately the regex engine cannot deal with the regex below, so + # just use this one. + Name = r'(\w+)' + else: + Name = u'([A-Za-z_0-9\u0080-' + MAX_UNICODE + ']+)' + + if version_info >= (3, 6): + Hexnumber = r'0[xX](?:_?[0-9a-fA-F])+' + Binnumber = r'0[bB](?:_?[01])+' + Octnumber = r'0[oO](?:_?[0-7])+' + Decnumber = r'(?:0(?:_?0)*|[1-9](?:_?[0-9])*)' + Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber) + Exponent = r'[eE][-+]?[0-9](?:_?[0-9])*' + Pointfloat = group(r'[0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?', + r'\.[0-9](?:_?[0-9])*') + maybe(Exponent) + Expfloat = r'[0-9](?:_?[0-9])*' + Exponent + Floatnumber = group(Pointfloat, Expfloat) + Imagnumber = group(r'[0-9](?:_?[0-9])*[jJ]', Floatnumber + r'[jJ]') + else: + Hexnumber = r'0[xX][0-9a-fA-F]+' + Binnumber = r'0[bB][01]+' + if version_info >= (3, 0): + Octnumber = r'0[oO][0-7]+' + else: + Octnumber = '0[oO]?[0-7]+' + Decnumber = r'(?:0+|[1-9][0-9]*)' + Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber) + if version_info[0] < 3: + Intnumber += '[lL]?' + Exponent = r'[eE][-+]?[0-9]+' + Pointfloat = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(Exponent) + Expfloat = r'[0-9]+' + Exponent + Floatnumber = group(Pointfloat, Expfloat) + Imagnumber = group(r'[0-9]+[jJ]', Floatnumber + r'[jJ]') + Number = group(Imagnumber, Floatnumber, Intnumber) + + # Note that since _all_string_prefixes includes the empty string, + # StringPrefix can be the empty string (making it optional). + possible_prefixes = _all_string_prefixes(version_info) + StringPrefix = group(*possible_prefixes) + StringPrefixWithF = group(*_all_string_prefixes(version_info, include_fstring=True)) + fstring_prefixes = _all_string_prefixes(version_info, include_fstring=True, only_fstring=True) + FStringStart = group(*fstring_prefixes) + + # Tail end of ' string. + Single = r"(?:\\.|[^'\\])*'" + # Tail end of " string. + Double = r'(?:\\.|[^"\\])*"' + # Tail end of ''' string. + Single3 = r"(?:\\.|'(?!'')|[^'\\])*'''" + # Tail end of """ string. + Double3 = r'(?:\\.|"(?!"")|[^"\\])*"""' + Triple = group(StringPrefixWithF + "'''", StringPrefixWithF + '"""') + + # Because of leftmost-then-longest match semantics, be sure to put the + # longest operators first (e.g., if = came before ==, == would get + # recognized as two instances of =). + Operator = group(r"\*\*=?", r">>=?", r"<<=?", + r"//=?", r"->", + r"[+\-*/%&@`|^!=<>]=?", + r"~") + + Bracket = '[][(){}]' + + special_args = [r'\r\n?', r'\n', r'[;.,@]'] + if version_info >= (3, 0): + special_args.insert(0, r'\.\.\.') + if version_info >= (3, 8): + special_args.insert(0, ":=?") + else: + special_args.insert(0, ":") + Special = group(*special_args) + + Funny = group(Operator, Bracket, Special) + + # First (or only) line of ' or " string. + ContStr = group(StringPrefix + r"'[^\r\n'\\]*(?:\\.[^\r\n'\\]*)*" + + group("'", r'\\(?:\r\n?|\n)'), + StringPrefix + r'"[^\r\n"\\]*(?:\\.[^\r\n"\\]*)*' + + group('"', r'\\(?:\r\n?|\n)')) + pseudo_extra_pool = [Comment, Triple] + all_quotes = '"', "'", '"""', "'''" + if fstring_prefixes: + pseudo_extra_pool.append(FStringStart + group(*all_quotes)) + + PseudoExtras = group(r'\\(?:\r\n?|\n)|\Z', *pseudo_extra_pool) + PseudoToken = group(Whitespace, capture=True) + \ + group(PseudoExtras, Number, Funny, ContStr, Name, capture=True) + + # For a given string prefix plus quotes, endpats maps it to a regex + # to match the remainder of that string. _prefix can be empty, for + # a normal single or triple quoted string (with no prefix). + endpats = {} + for _prefix in possible_prefixes: + endpats[_prefix + "'"] = _compile(Single) + endpats[_prefix + '"'] = _compile(Double) + endpats[_prefix + "'''"] = _compile(Single3) + endpats[_prefix + '"""'] = _compile(Double3) + + # A set of all of the single and triple quoted string prefixes, + # including the opening quotes. + single_quoted = set() + triple_quoted = set() + fstring_pattern_map = {} + for t in possible_prefixes: + for quote in '"', "'": + single_quoted.add(t + quote) + + for quote in '"""', "'''": + triple_quoted.add(t + quote) + + for t in fstring_prefixes: + for quote in all_quotes: + fstring_pattern_map[t + quote] = quote + + ALWAYS_BREAK_TOKENS = (';', 'import', 'class', 'def', 'try', 'except', + 'finally', 'while', 'with', 'return') + pseudo_token_compiled = _compile(PseudoToken) + return TokenCollection( + pseudo_token_compiled, single_quoted, triple_quoted, endpats, + whitespace, fstring_pattern_map, ALWAYS_BREAK_TOKENS + ) + + +class Token(namedtuple('Token', ['type', 'string', 'start_pos', 'prefix'])): + @property + def end_pos(self): + lines = split_lines(self.string) + if len(lines) > 1: + return self.start_pos[0] + len(lines) - 1, 0 + else: + return self.start_pos[0], self.start_pos[1] + len(self.string) + + +class PythonToken(Token): + def __repr__(self): + return ('TokenInfo(type=%s, string=%r, start_pos=%r, prefix=%r)' % + self._replace(type=self.type.name)) + + +class FStringNode(object): + def __init__(self, quote): + self.quote = quote + self.parentheses_count = 0 + self.previous_lines = '' + self.last_string_start_pos = None + # In the syntax there can be multiple format_spec's nested: + # {x:{y:3}} + self.format_spec_count = 0 + + def open_parentheses(self, character): + self.parentheses_count += 1 + + def close_parentheses(self, character): + self.parentheses_count -= 1 + if self.parentheses_count == 0: + # No parentheses means that the format spec is also finished. + self.format_spec_count = 0 + + def allow_multiline(self): + return len(self.quote) == 3 + + def is_in_expr(self): + return self.parentheses_count > self.format_spec_count + + def is_in_format_spec(self): + return not self.is_in_expr() and self.format_spec_count + + +def _close_fstring_if_necessary(fstring_stack, string, start_pos, additional_prefix): + for fstring_stack_index, node in enumerate(fstring_stack): + if string.startswith(node.quote): + token = PythonToken( + FSTRING_END, + node.quote, + start_pos, + prefix=additional_prefix, + ) + additional_prefix = '' + assert not node.previous_lines + del fstring_stack[fstring_stack_index:] + return token, '', len(node.quote) + return None, additional_prefix, 0 + + +def _find_fstring_string(endpats, fstring_stack, line, lnum, pos): + tos = fstring_stack[-1] + allow_multiline = tos.allow_multiline() + if tos.is_in_format_spec(): + if allow_multiline: + regex = fstring_format_spec_multi_line + else: + regex = fstring_format_spec_single_line + else: + if allow_multiline: + regex = fstring_string_multi_line + else: + regex = fstring_string_single_line + + match = regex.match(line, pos) + if match is None: + return tos.previous_lines, pos + + if not tos.previous_lines: + tos.last_string_start_pos = (lnum, pos) + + string = match.group(0) + for fstring_stack_node in fstring_stack: + end_match = endpats[fstring_stack_node.quote].match(string) + if end_match is not None: + string = end_match.group(0)[:-len(fstring_stack_node.quote)] + + new_pos = pos + new_pos += len(string) + # even if allow_multiline is False, we still need to check for trailing + # newlines, because a single-line f-string can contain line continuations + if string.endswith('\n') or string.endswith('\r'): + tos.previous_lines += string + string = '' + else: + string = tos.previous_lines + string + + return string, new_pos + + +def tokenize(code, version_info, start_pos=(1, 0)): + """Generate tokens from a the source code (string).""" + lines = split_lines(code, keepends=True) + return tokenize_lines(lines, version_info, start_pos=start_pos) + + +def _print_tokens(func): + """ + A small helper function to help debug the tokenize_lines function. + """ + def wrapper(*args, **kwargs): + for token in func(*args, **kwargs): + yield token + + return wrapper + + +# @_print_tokens +def tokenize_lines(lines, version_info, start_pos=(1, 0)): + """ + A heavily modified Python standard library tokenizer. + + Additionally to the default information, yields also the prefix of each + token. This idea comes from lib2to3. The prefix contains all information + that is irrelevant for the parser like newlines in parentheses or comments. + """ + def dedent_if_necessary(start): + while start < indents[-1]: + if start > indents[-2]: + yield PythonToken(ERROR_DEDENT, '', (lnum, 0), '') + break + yield PythonToken(DEDENT, '', spos, '') + indents.pop() + + pseudo_token, single_quoted, triple_quoted, endpats, whitespace, \ + fstring_pattern_map, always_break_tokens, = \ + _get_token_collection(version_info) + paren_level = 0 # count parentheses + indents = [0] + max = 0 + numchars = '0123456789' + contstr = '' + contline = None + # We start with a newline. This makes indent at the first position + # possible. It's not valid Python, but still better than an INDENT in the + # second line (and not in the first). This makes quite a few things in + # Jedi's fast parser possible. + new_line = True + prefix = '' # Should never be required, but here for safety + additional_prefix = '' + first = True + lnum = start_pos[0] - 1 + fstring_stack = [] + for line in lines: # loop over lines in stream + lnum += 1 + pos = 0 + max = len(line) + if first: + if line.startswith(BOM_UTF8_STRING): + additional_prefix = BOM_UTF8_STRING + line = line[1:] + max = len(line) + + # Fake that the part before was already parsed. + line = '^' * start_pos[1] + line + pos = start_pos[1] + max += start_pos[1] + + first = False + + if contstr: # continued string + endmatch = endprog.match(line) + if endmatch: + pos = endmatch.end(0) + yield PythonToken( + STRING, contstr + line[:pos], + contstr_start, prefix) + contstr = '' + contline = None + else: + contstr = contstr + line + contline = contline + line + continue + + while pos < max: + if fstring_stack: + tos = fstring_stack[-1] + if not tos.is_in_expr(): + string, pos = _find_fstring_string(endpats, fstring_stack, line, lnum, pos) + if string: + yield PythonToken( + FSTRING_STRING, string, + tos.last_string_start_pos, + # Never has a prefix because it can start anywhere and + # include whitespace. + prefix='' + ) + tos.previous_lines = '' + continue + if pos == max: + break + + rest = line[pos:] + fstring_end_token, additional_prefix, quote_length = _close_fstring_if_necessary( + fstring_stack, + rest, + (lnum, pos), + additional_prefix, + ) + pos += quote_length + if fstring_end_token is not None: + yield fstring_end_token + continue + + pseudomatch = pseudo_token.match(line, pos) + if not pseudomatch: # scan for tokens + match = whitespace.match(line, pos) + if pos == 0: + for t in dedent_if_necessary(match.end()): + yield t + pos = match.end() + new_line = False + yield PythonToken( + ERRORTOKEN, line[pos], (lnum, pos), + additional_prefix + match.group(0) + ) + additional_prefix = '' + pos += 1 + continue + + prefix = additional_prefix + pseudomatch.group(1) + additional_prefix = '' + start, pos = pseudomatch.span(2) + spos = (lnum, start) + token = pseudomatch.group(2) + if token == '': + assert prefix + additional_prefix = prefix + # This means that we have a line with whitespace/comments at + # the end, which just results in an endmarker. + break + initial = token[0] + + if new_line and initial not in '\r\n\\#': + new_line = False + if paren_level == 0 and not fstring_stack: + i = 0 + indent_start = start + while line[i] == '\f': + i += 1 + # TODO don't we need to change spos as well? + indent_start -= 1 + if indent_start > indents[-1]: + yield PythonToken(INDENT, '', spos, '') + indents.append(indent_start) + for t in dedent_if_necessary(indent_start): + yield t + + if (initial in numchars or # ordinary number + (initial == '.' and token != '.' and token != '...')): + yield PythonToken(NUMBER, token, spos, prefix) + elif pseudomatch.group(3) is not None: # ordinary name + if token in always_break_tokens: + fstring_stack[:] = [] + paren_level = 0 + # We only want to dedent if the token is on a new line. + if re.match(r'[ \f\t]*$', line[:start]): + while True: + indent = indents.pop() + if indent > start: + yield PythonToken(DEDENT, '', spos, '') + else: + indents.append(indent) + break + if is_identifier(token): + yield PythonToken(NAME, token, spos, prefix) + else: + for t in _split_illegal_unicode_name(token, spos, prefix): + yield t # yield from Python 2 + elif initial in '\r\n': + if any(not f.allow_multiline() for f in fstring_stack): + # Would use fstring_stack.clear, but that's not available + # in Python 2. + fstring_stack[:] = [] + + if not new_line and paren_level == 0 and not fstring_stack: + yield PythonToken(NEWLINE, token, spos, prefix) + else: + additional_prefix = prefix + token + new_line = True + elif initial == '#': # Comments + assert not token.endswith("\n") + additional_prefix = prefix + token + elif token in triple_quoted: + endprog = endpats[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + yield PythonToken(STRING, token, spos, prefix) + else: + contstr_start = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + + # Check up to the first 3 chars of the token to see if + # they're in the single_quoted set. If so, they start + # a string. + # We're using the first 3, because we're looking for + # "rb'" (for example) at the start of the token. If + # we switch to longer prefixes, this needs to be + # adjusted. + # Note that initial == token[:1]. + # Also note that single quote checking must come after + # triple quote checking (above). + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] in '\r\n': # continued string + # This means that a single quoted string ends with a + # backslash and is continued. + contstr_start = lnum, start + endprog = (endpats.get(initial) or endpats.get(token[1]) + or endpats.get(token[2])) + contstr = line[start:] + contline = line + break + else: # ordinary string + yield PythonToken(STRING, token, spos, prefix) + elif token in fstring_pattern_map: # The start of an fstring. + fstring_stack.append(FStringNode(fstring_pattern_map[token])) + yield PythonToken(FSTRING_START, token, spos, prefix) + elif initial == '\\' and line[start:] in ('\\\n', '\\\r\n', '\\\r'): # continued stmt + additional_prefix += prefix + line[start:] + break + else: + if token in '([{': + if fstring_stack: + fstring_stack[-1].open_parentheses(token) + else: + paren_level += 1 + elif token in ')]}': + if fstring_stack: + fstring_stack[-1].close_parentheses(token) + else: + if paren_level: + paren_level -= 1 + elif token == ':' and fstring_stack \ + and fstring_stack[-1].parentheses_count \ + - fstring_stack[-1].format_spec_count == 1: + fstring_stack[-1].format_spec_count += 1 + + yield PythonToken(OP, token, spos, prefix) + + if contstr: + yield PythonToken(ERRORTOKEN, contstr, contstr_start, prefix) + if contstr.endswith('\n') or contstr.endswith('\r'): + new_line = True + + end_pos = lnum, max + # As the last position we just take the maximally possible position. We + # remove -1 for the last new line. + for indent in indents[1:]: + yield PythonToken(DEDENT, '', end_pos, '') + yield PythonToken(ENDMARKER, '', end_pos, additional_prefix) + + +def _split_illegal_unicode_name(token, start_pos, prefix): + def create_token(): + return PythonToken(ERRORTOKEN if is_illegal else NAME, found, pos, prefix) + + found = '' + is_illegal = False + pos = start_pos + for i, char in enumerate(token): + if is_illegal: + if is_identifier(char): + yield create_token() + found = char + is_illegal = False + prefix = '' + pos = start_pos[0], start_pos[1] + i + else: + found += char + else: + new_found = found + char + if is_identifier(new_found): + found = new_found + else: + if found: + yield create_token() + prefix = '' + pos = start_pos[0], start_pos[1] + i + found = char + is_illegal = True + + if found: + yield create_token() + + +if __name__ == "__main__": + if len(sys.argv) >= 2: + path = sys.argv[1] + with open(path) as f: + code = f.read() + else: + code = sys.stdin.read() + + from parso.utils import python_bytes_to_unicode, parse_version_string + + if isinstance(code, bytes): + code = python_bytes_to_unicode(code) + + for token in tokenize(code, parse_version_string()): + print(token) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tree.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tree.py new file mode 100644 index 0000000..7d4a490 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/python/tree.py @@ -0,0 +1,1245 @@ +""" +This is the syntax tree for Python syntaxes (2 & 3). The classes represent +syntax elements like functions and imports. + +All of the nodes can be traced back to the `Python grammar file +`_. If you want to know how +a tree is structured, just analyse that file (for each Python version it's a +bit different). + +There's a lot of logic here that makes it easier for Jedi (and other libraries) +to deal with a Python syntax tree. + +By using :py:meth:`parso.tree.NodeOrLeaf.get_code` on a module, you can get +back the 1-to-1 representation of the input given to the parser. This is +important if you want to refactor a parser tree. + +>>> from parso import parse +>>> parser = parse('import os') +>>> module = parser.get_root_node() +>>> module + + +Any subclasses of :class:`Scope`, including :class:`Module` has an attribute +:attr:`iter_imports `: + +>>> list(module.iter_imports()) +[] + +Changes to the Python Grammar +----------------------------- + +A few things have changed when looking at Python grammar files: + +- :class:`Param` does not exist in Python grammar files. It is essentially a + part of a ``parameters`` node. |parso| splits it up to make it easier to + analyse parameters. However this just makes it easier to deal with the syntax + tree, it doesn't actually change the valid syntax. +- A few nodes like `lambdef` and `lambdef_nocond` have been merged in the + syntax tree to make it easier to do deal with them. + +Parser Tree Classes +------------------- +""" + +import re +try: + from collections.abc import Mapping +except ImportError: + from collections import Mapping + +from parso._compatibility import utf8_repr, unicode +from parso.tree import Node, BaseNode, Leaf, ErrorNode, ErrorLeaf, \ + search_ancestor +from parso.python.prefix import split_prefix +from parso.utils import split_lines + +_FLOW_CONTAINERS = set(['if_stmt', 'while_stmt', 'for_stmt', 'try_stmt', + 'with_stmt', 'async_stmt', 'suite']) +_RETURN_STMT_CONTAINERS = set(['suite', 'simple_stmt']) | _FLOW_CONTAINERS +_FUNC_CONTAINERS = set(['suite', 'simple_stmt', 'decorated']) | _FLOW_CONTAINERS +_GET_DEFINITION_TYPES = set([ + 'expr_stmt', 'sync_comp_for', 'with_stmt', 'for_stmt', 'import_name', + 'import_from', 'param' +]) +_IMPORTS = set(['import_name', 'import_from']) + + +class DocstringMixin(object): + __slots__ = () + + def get_doc_node(self): + """ + Returns the string leaf of a docstring. e.g. ``r'''foo'''``. + """ + if self.type == 'file_input': + node = self.children[0] + elif self.type in ('funcdef', 'classdef'): + node = self.children[self.children.index(':') + 1] + if node.type == 'suite': # Normally a suite + node = node.children[1] # -> NEWLINE stmt + else: # ExprStmt + simple_stmt = self.parent + c = simple_stmt.parent.children + index = c.index(simple_stmt) + if not index: + return None + node = c[index - 1] + + if node.type == 'simple_stmt': + node = node.children[0] + if node.type == 'string': + return node + return None + + +class PythonMixin(object): + """ + Some Python specific utitilies. + """ + __slots__ = () + + def get_name_of_position(self, position): + """ + Given a (line, column) tuple, returns a :py:class:`Name` or ``None`` if + there is no name at that position. + """ + for c in self.children: + if isinstance(c, Leaf): + if c.type == 'name' and c.start_pos <= position <= c.end_pos: + return c + else: + result = c.get_name_of_position(position) + if result is not None: + return result + return None + + +class PythonLeaf(PythonMixin, Leaf): + __slots__ = () + + def _split_prefix(self): + return split_prefix(self, self.get_start_pos_of_prefix()) + + def get_start_pos_of_prefix(self): + """ + Basically calls :py:meth:`parso.tree.NodeOrLeaf.get_start_pos_of_prefix`. + """ + # TODO it is really ugly that we have to override it. Maybe change + # indent error leafs somehow? No idea how, though. + previous_leaf = self.get_previous_leaf() + if previous_leaf is not None and previous_leaf.type == 'error_leaf' \ + and previous_leaf.token_type in ('INDENT', 'DEDENT', 'ERROR_DEDENT'): + previous_leaf = previous_leaf.get_previous_leaf() + + if previous_leaf is None: # It's the first leaf. + lines = split_lines(self.prefix) + # + 1 is needed because split_lines always returns at least ['']. + return self.line - len(lines) + 1, 0 # It's the first leaf. + return previous_leaf.end_pos + + +class _LeafWithoutNewlines(PythonLeaf): + """ + Simply here to optimize performance. + """ + __slots__ = () + + @property + def end_pos(self): + return self.line, self.column + len(self.value) + + +# Python base classes +class PythonBaseNode(PythonMixin, BaseNode): + __slots__ = () + + +class PythonNode(PythonMixin, Node): + __slots__ = () + + +class PythonErrorNode(PythonMixin, ErrorNode): + __slots__ = () + + +class PythonErrorLeaf(ErrorLeaf, PythonLeaf): + __slots__ = () + + +class EndMarker(_LeafWithoutNewlines): + __slots__ = () + type = 'endmarker' + + @utf8_repr + def __repr__(self): + return "<%s: prefix=%s end_pos=%s>" % ( + type(self).__name__, repr(self.prefix), self.end_pos + ) + + +class Newline(PythonLeaf): + """Contains NEWLINE and ENDMARKER tokens.""" + __slots__ = () + type = 'newline' + + @utf8_repr + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, repr(self.value)) + + +class Name(_LeafWithoutNewlines): + """ + A string. Sometimes it is important to know if the string belongs to a name + or not. + """ + type = 'name' + __slots__ = () + + def __repr__(self): + return "<%s: %s@%s,%s>" % (type(self).__name__, self.value, + self.line, self.column) + + def is_definition(self): + """ + Returns True if the name is being defined. + """ + return self.get_definition() is not None + + def get_definition(self, import_name_always=False): + """ + Returns None if there's on definition for a name. + + :param import_name_alway: Specifies if an import name is always a + definition. Normally foo in `from foo import bar` is not a + definition. + """ + node = self.parent + type_ = node.type + if type_ in ('power', 'atom_expr'): + # In `self.x = 3` self is not a definition, but x is. + return None + + if type_ in ('funcdef', 'classdef'): + if self == node.name: + return node + return None + + if type_ == 'except_clause': + # TODO in Python 2 this doesn't work correctly. See grammar file. + # I think we'll just let it be. Python 2 will be gone in a few + # years. + if self.get_previous_sibling() == 'as': + return node.parent # The try_stmt. + return None + + while node is not None: + if node.type == 'suite': + return None + if node.type in _GET_DEFINITION_TYPES: + if self in node.get_defined_names(): + return node + if import_name_always and node.type in _IMPORTS: + return node + return None + node = node.parent + return None + + +class Literal(PythonLeaf): + __slots__ = () + + +class Number(Literal): + type = 'number' + __slots__ = () + + +class String(Literal): + type = 'string' + __slots__ = () + + @property + def string_prefix(self): + return re.match(r'\w*(?=[\'"])', self.value).group(0) + + def _get_payload(self): + match = re.search( + r'''('{3}|"{3}|'|")(.*)$''', + self.value, + flags=re.DOTALL + ) + return match.group(2)[:-len(match.group(1))] + + +class FStringString(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_string' + __slots__ = () + + +class FStringStart(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_start' + __slots__ = () + + +class FStringEnd(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_end' + __slots__ = () + + +class _StringComparisonMixin(object): + def __eq__(self, other): + """ + Make comparisons with strings easy. + Improves the readability of the parser. + """ + if isinstance(other, (str, unicode)): + return self.value == other + + return self is other + + def __ne__(self, other): + """Python 2 compatibility.""" + return not self.__eq__(other) + + def __hash__(self): + return hash(self.value) + + +class Operator(_LeafWithoutNewlines, _StringComparisonMixin): + type = 'operator' + __slots__ = () + + +class Keyword(_LeafWithoutNewlines, _StringComparisonMixin): + type = 'keyword' + __slots__ = () + + +class Scope(PythonBaseNode, DocstringMixin): + """ + Super class for the parser tree, which represents the state of a python + text file. + A Scope is either a function, class or lambda. + """ + __slots__ = () + + def __init__(self, children): + super(Scope, self).__init__(children) + + def iter_funcdefs(self): + """ + Returns a generator of `funcdef` nodes. + """ + return self._search_in_scope('funcdef') + + def iter_classdefs(self): + """ + Returns a generator of `classdef` nodes. + """ + return self._search_in_scope('classdef') + + def iter_imports(self): + """ + Returns a generator of `import_name` and `import_from` nodes. + """ + return self._search_in_scope('import_name', 'import_from') + + def _search_in_scope(self, *names): + def scan(children): + for element in children: + if element.type in names: + yield element + if element.type in _FUNC_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def get_suite(self): + """ + Returns the part that is executed by the function. + """ + return self.children[-1] + + def __repr__(self): + try: + name = self.name.value + except AttributeError: + name = '' + + return "<%s: %s@%s-%s>" % (type(self).__name__, name, + self.start_pos[0], self.end_pos[0]) + + +class Module(Scope): + """ + The top scope, which is always a module. + Depending on the underlying parser this may be a full module or just a part + of a module. + """ + __slots__ = ('_used_names',) + type = 'file_input' + + def __init__(self, children): + super(Module, self).__init__(children) + self._used_names = None + + def _iter_future_import_names(self): + """ + :return: A list of future import names. + :rtype: list of str + """ + # In Python it's not allowed to use future imports after the first + # actual (non-future) statement. However this is not a linter here, + # just return all future imports. If people want to scan for issues + # they should use the API. + for imp in self.iter_imports(): + if imp.type == 'import_from' and imp.level == 0: + for path in imp.get_paths(): + names = [name.value for name in path] + if len(names) == 2 and names[0] == '__future__': + yield names[1] + + def _has_explicit_absolute_import(self): + """ + Checks if imports in this module are explicitly absolute, i.e. there + is a ``__future__`` import. + Currently not public, might be in the future. + :return bool: + """ + for name in self._iter_future_import_names(): + if name == 'absolute_import': + return True + return False + + def get_used_names(self): + """ + Returns all the :class:`Name` leafs that exist in this module. This + includes both definitions and references of names. + """ + if self._used_names is None: + # Don't directly use self._used_names to eliminate a lookup. + dct = {} + + def recurse(node): + try: + children = node.children + except AttributeError: + if node.type == 'name': + arr = dct.setdefault(node.value, []) + arr.append(node) + else: + for child in children: + recurse(child) + + recurse(self) + self._used_names = UsedNamesMapping(dct) + return self._used_names + + +class Decorator(PythonBaseNode): + type = 'decorator' + __slots__ = () + + +class ClassOrFunc(Scope): + __slots__ = () + + @property + def name(self): + """ + Returns the `Name` leaf that defines the function or class name. + """ + return self.children[1] + + def get_decorators(self): + """ + :rtype: list of :class:`Decorator` + """ + decorated = self.parent + if decorated.type == 'async_funcdef': + decorated = decorated.parent + + if decorated.type == 'decorated': + if decorated.children[0].type == 'decorators': + return decorated.children[0].children + else: + return decorated.children[:1] + else: + return [] + + +class Class(ClassOrFunc): + """ + Used to store the parsed contents of a python class. + """ + type = 'classdef' + __slots__ = () + + def __init__(self, children): + super(Class, self).__init__(children) + + def get_super_arglist(self): + """ + Returns the `arglist` node that defines the super classes. It returns + None if there are no arguments. + """ + if self.children[2] != '(': # Has no parentheses + return None + else: + if self.children[3] == ')': # Empty parentheses + return None + else: + return self.children[3] + + +def _create_params(parent, argslist_list): + """ + `argslist_list` is a list that can contain an argslist as a first item, but + most not. It's basically the items between the parameter brackets (which is + at most one item). + This function modifies the parser structure. It generates `Param` objects + from the normal ast. Those param objects do not exist in a normal ast, but + make the evaluation of the ast tree so much easier. + You could also say that this function replaces the argslist node with a + list of Param objects. + """ + def check_python2_nested_param(node): + """ + Python 2 allows params to look like ``def x(a, (b, c))``, which is + basically a way of unpacking tuples in params. Python 3 has ditched + this behavior. Jedi currently just ignores those constructs. + """ + return node.type == 'fpdef' and node.children[0] == '(' + + try: + first = argslist_list[0] + except IndexError: + return [] + + if first.type in ('name', 'fpdef'): + if check_python2_nested_param(first): + return [first] + else: + return [Param([first], parent)] + elif first == '*': + return [first] + else: # argslist is a `typedargslist` or a `varargslist`. + if first.type == 'tfpdef': + children = [first] + else: + children = first.children + new_children = [] + start = 0 + # Start with offset 1, because the end is higher. + for end, child in enumerate(children + [None], 1): + if child is None or child == ',': + param_children = children[start:end] + if param_children: # Could as well be comma and then end. + if param_children[0] == '*' \ + and (len(param_children) == 1 + or param_children[1] == ',') \ + or check_python2_nested_param(param_children[0]) \ + or param_children[0] == '/': + for p in param_children: + p.parent = parent + new_children += param_children + else: + new_children.append(Param(param_children, parent)) + start = end + return new_children + + +class Function(ClassOrFunc): + """ + Used to store the parsed contents of a python function. + + Children:: + + 0. + 1. + 2. parameter list (including open-paren and close-paren s) + 3. or 5. + 4. or 6. Node() representing function body + 3. -> (if annotation is also present) + 4. annotation (if present) + """ + type = 'funcdef' + + def __init__(self, children): + super(Function, self).__init__(children) + parameters = self.children[2] # After `def foo` + parameters.children[1:-1] = _create_params(parameters, parameters.children[1:-1]) + + def _get_param_nodes(self): + return self.children[2].children + + def get_params(self): + """ + Returns a list of `Param()`. + """ + return [p for p in self._get_param_nodes() if p.type == 'param'] + + @property + def name(self): + return self.children[1] # First token after `def` + + def iter_yield_exprs(self): + """ + Returns a generator of `yield_expr`. + """ + def scan(children): + for element in children: + if element.type in ('classdef', 'funcdef', 'lambdef'): + continue + + try: + nested_children = element.children + except AttributeError: + if element.value == 'yield': + if element.parent.type == 'yield_expr': + yield element.parent + else: + yield element + else: + for result in scan(nested_children): + yield result + + return scan(self.children) + + def iter_return_stmts(self): + """ + Returns a generator of `return_stmt`. + """ + def scan(children): + for element in children: + if element.type == 'return_stmt' \ + or element.type == 'keyword' and element.value == 'return': + yield element + if element.type in _RETURN_STMT_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def iter_raise_stmts(self): + """ + Returns a generator of `raise_stmt`. Includes raise statements inside try-except blocks + """ + def scan(children): + for element in children: + if element.type == 'raise_stmt' \ + or element.type == 'keyword' and element.value == 'raise': + yield element + if element.type in _RETURN_STMT_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def is_generator(self): + """ + :return bool: Checks if a function is a generator or not. + """ + return next(self.iter_yield_exprs(), None) is not None + + @property + def annotation(self): + """ + Returns the test node after `->` or `None` if there is no annotation. + """ + try: + if self.children[3] == "->": + return self.children[4] + assert self.children[3] == ":" + return None + except IndexError: + return None + + +class Lambda(Function): + """ + Lambdas are basically trimmed functions, so give it the same interface. + + Children:: + + 0. + *. for each argument x + -2. + -1. Node() representing body + """ + type = 'lambdef' + __slots__ = () + + def __init__(self, children): + # We don't want to call the Function constructor, call its parent. + super(Function, self).__init__(children) + # Everything between `lambda` and the `:` operator is a parameter. + self.children[1:-2] = _create_params(self, self.children[1:-2]) + + @property + def name(self): + """ + Raises an AttributeError. Lambdas don't have a defined name. + """ + raise AttributeError("lambda is not named.") + + def _get_param_nodes(self): + return self.children[1:-2] + + @property + def annotation(self): + """ + Returns `None`, lambdas don't have annotations. + """ + return None + + def __repr__(self): + return "<%s@%s>" % (self.__class__.__name__, self.start_pos) + + +class Flow(PythonBaseNode): + __slots__ = () + + +class IfStmt(Flow): + type = 'if_stmt' + __slots__ = () + + def get_test_nodes(self): + """ + E.g. returns all the `test` nodes that are named as x, below: + + if x: + pass + elif x: + pass + """ + for i, c in enumerate(self.children): + if c in ('elif', 'if'): + yield self.children[i + 1] + + def get_corresponding_test_node(self, node): + """ + Searches for the branch in which the node is and returns the + corresponding test node (see function above). However if the node is in + the test node itself and not in the suite return None. + """ + start_pos = node.start_pos + for check_node in reversed(list(self.get_test_nodes())): + if check_node.start_pos < start_pos: + if start_pos < check_node.end_pos: + return None + # In this case the node is within the check_node itself, + # not in the suite + else: + return check_node + + def is_node_after_else(self, node): + """ + Checks if a node is defined after `else`. + """ + for c in self.children: + if c == 'else': + if node.start_pos > c.start_pos: + return True + else: + return False + + +class WhileStmt(Flow): + type = 'while_stmt' + __slots__ = () + + +class ForStmt(Flow): + type = 'for_stmt' + __slots__ = () + + def get_testlist(self): + """ + Returns the input node ``y`` from: ``for x in y:``. + """ + return self.children[3] + + def get_defined_names(self): + return _defined_names(self.children[1]) + + +class TryStmt(Flow): + type = 'try_stmt' + __slots__ = () + + def get_except_clause_tests(self): + """ + Returns the ``test`` nodes found in ``except_clause`` nodes. + Returns ``[None]`` for except clauses without an exception given. + """ + for node in self.children: + if node.type == 'except_clause': + yield node.children[1] + elif node == 'except': + yield None + + +class WithStmt(Flow): + type = 'with_stmt' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the with statement defines. The + defined names are set after `as`. + """ + names = [] + for with_item in self.children[1:-2:2]: + # Check with items for 'as' names. + if with_item.type == 'with_item': + names += _defined_names(with_item.children[2]) + return names + + def get_test_node_from_name(self, name): + node = name.parent + if node.type != 'with_item': + raise ValueError('The name is not actually part of a with statement.') + return node.children[0] + + +class Import(PythonBaseNode): + __slots__ = () + + def get_path_for_name(self, name): + """ + The path is the list of names that leads to the searched name. + + :return list of Name: + """ + try: + # The name may be an alias. If it is, just map it back to the name. + name = self._aliases()[name] + except KeyError: + pass + + for path in self.get_paths(): + if name in path: + return path[:path.index(name) + 1] + raise ValueError('Name should be defined in the import itself') + + def is_nested(self): + return False # By default, sub classes may overwrite this behavior + + def is_star_import(self): + return self.children[-1] == '*' + + +class ImportFrom(Import): + type = 'import_from' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the import defines. The + defined names are set after `import` or in case an alias - `as` - is + present that name is returned. + """ + return [alias or name for name, alias in self._as_name_tuples()] + + def _aliases(self): + """Mapping from alias to its corresponding name.""" + return dict((alias, name) for name, alias in self._as_name_tuples() + if alias is not None) + + def get_from_names(self): + for n in self.children[1:]: + if n not in ('.', '...'): + break + if n.type == 'dotted_name': # from x.y import + return n.children[::2] + elif n == 'import': # from . import + return [] + else: # from x import + return [n] + + @property + def level(self): + """The level parameter of ``__import__``.""" + level = 0 + for n in self.children[1:]: + if n in ('.', '...'): + level += len(n.value) + else: + break + return level + + def _as_name_tuples(self): + last = self.children[-1] + if last == ')': + last = self.children[-2] + elif last == '*': + return # No names defined directly. + + if last.type == 'import_as_names': + as_names = last.children[::2] + else: + as_names = [last] + for as_name in as_names: + if as_name.type == 'name': + yield as_name, None + else: + yield as_name.children[::2] # yields x, y -> ``x as y`` + + def get_paths(self): + """ + The import paths defined in an import statement. Typically an array + like this: ``[, ]``. + + :return list of list of Name: + """ + dotted = self.get_from_names() + + if self.children[-1] == '*': + return [dotted] + return [dotted + [name] for name, alias in self._as_name_tuples()] + + +class ImportName(Import): + """For ``import_name`` nodes. Covers normal imports without ``from``.""" + type = 'import_name' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the import defines. The defined names + is always the first name after `import` or in case an alias - `as` - is + present that name is returned. + """ + return [alias or path[0] for path, alias in self._dotted_as_names()] + + @property + def level(self): + """The level parameter of ``__import__``.""" + return 0 # Obviously 0 for imports without from. + + def get_paths(self): + return [path for path, alias in self._dotted_as_names()] + + def _dotted_as_names(self): + """Generator of (list(path), alias) where alias may be None.""" + dotted_as_names = self.children[1] + if dotted_as_names.type == 'dotted_as_names': + as_names = dotted_as_names.children[::2] + else: + as_names = [dotted_as_names] + + for as_name in as_names: + if as_name.type == 'dotted_as_name': + alias = as_name.children[2] + as_name = as_name.children[0] + else: + alias = None + if as_name.type == 'name': + yield [as_name], alias + else: + # dotted_names + yield as_name.children[::2], alias + + def is_nested(self): + """ + This checks for the special case of nested imports, without aliases and + from statement:: + + import foo.bar + """ + return bool([1 for path, alias in self._dotted_as_names() + if alias is None and len(path) > 1]) + + def _aliases(self): + """ + :return list of Name: Returns all the alias + """ + return dict((alias, path[-1]) for path, alias in self._dotted_as_names() + if alias is not None) + + +class KeywordStatement(PythonBaseNode): + """ + For the following statements: `assert`, `del`, `global`, `nonlocal`, + `raise`, `return`, `yield`. + + `pass`, `continue` and `break` are not in there, because they are just + simple keywords and the parser reduces it to a keyword. + """ + __slots__ = () + + @property + def type(self): + """ + Keyword statements start with the keyword and end with `_stmt`. You can + crosscheck this with the Python grammar. + """ + return '%s_stmt' % self.keyword + + @property + def keyword(self): + return self.children[0].value + + +class AssertStmt(KeywordStatement): + __slots__ = () + + @property + def assertion(self): + return self.children[1] + + +class GlobalStmt(KeywordStatement): + __slots__ = () + + def get_global_names(self): + return self.children[1::2] + + +class ReturnStmt(KeywordStatement): + __slots__ = () + + +class YieldExpr(PythonBaseNode): + type = 'yield_expr' + __slots__ = () + + +def _defined_names(current): + """ + A helper function to find the defined names in statements, for loops and + list comprehensions. + """ + names = [] + if current.type in ('testlist_star_expr', 'testlist_comp', 'exprlist', 'testlist'): + for child in current.children[::2]: + names += _defined_names(child) + elif current.type in ('atom', 'star_expr'): + names += _defined_names(current.children[1]) + elif current.type in ('power', 'atom_expr'): + if current.children[-2] != '**': # Just if there's no operation + trailer = current.children[-1] + if trailer.children[0] == '.': + names.append(trailer.children[1]) + else: + names.append(current) + return names + + +class ExprStmt(PythonBaseNode, DocstringMixin): + type = 'expr_stmt' + __slots__ = () + + def get_defined_names(self): + """ + Returns a list of `Name` defined before the `=` sign. + """ + names = [] + if self.children[1].type == 'annassign': + names = _defined_names(self.children[0]) + return [ + name + for i in range(0, len(self.children) - 2, 2) + if '=' in self.children[i + 1].value + for name in _defined_names(self.children[i]) + ] + names + + def get_rhs(self): + """Returns the right-hand-side of the equals.""" + return self.children[-1] + + def yield_operators(self): + """ + Returns a generator of `+=`, `=`, etc. or None if there is no operation. + """ + first = self.children[1] + if first.type == 'annassign': + if len(first.children) <= 2: + return # No operator is available, it's just PEP 484. + + first = first.children[2] + yield first + + for operator in self.children[3::2]: + yield operator + + +class Param(PythonBaseNode): + """ + It's a helper class that makes business logic with params much easier. The + Python grammar defines no ``param`` node. It defines it in a different way + that is not really suited to working with parameters. + """ + type = 'param' + + def __init__(self, children, parent): + super(Param, self).__init__(children) + self.parent = parent + for child in children: + child.parent = self + + @property + def star_count(self): + """ + Is `0` in case of `foo`, `1` in case of `*foo` or `2` in case of + `**foo`. + """ + first = self.children[0] + if first in ('*', '**'): + return len(first.value) + return 0 + + @property + def default(self): + """ + The default is the test node that appears after the `=`. Is `None` in + case no default is present. + """ + has_comma = self.children[-1] == ',' + try: + if self.children[-2 - int(has_comma)] == '=': + return self.children[-1 - int(has_comma)] + except IndexError: + return None + + @property + def annotation(self): + """ + The default is the test node that appears after `:`. Is `None` in case + no annotation is present. + """ + tfpdef = self._tfpdef() + if tfpdef.type == 'tfpdef': + assert tfpdef.children[1] == ":" + assert len(tfpdef.children) == 3 + annotation = tfpdef.children[2] + return annotation + else: + return None + + def _tfpdef(self): + """ + tfpdef: see e.g. grammar36.txt. + """ + offset = int(self.children[0] in ('*', '**')) + return self.children[offset] + + @property + def name(self): + """ + The `Name` leaf of the param. + """ + if self._tfpdef().type == 'tfpdef': + return self._tfpdef().children[0] + else: + return self._tfpdef() + + def get_defined_names(self): + return [self.name] + + @property + def position_index(self): + """ + Property for the positional index of a paramter. + """ + index = self.parent.children.index(self) + try: + keyword_only_index = self.parent.children.index('*') + if index > keyword_only_index: + # Skip the ` *, ` + index -= 2 + except ValueError: + pass + try: + keyword_only_index = self.parent.children.index('/') + if index > keyword_only_index: + # Skip the ` /, ` + index -= 2 + except ValueError: + pass + return index - 1 + + def get_parent_function(self): + """ + Returns the function/lambda of a parameter. + """ + return search_ancestor(self, 'funcdef', 'lambdef') + + def get_code(self, include_prefix=True, include_comma=True): + """ + Like all the other get_code functions, but includes the param + `include_comma`. + + :param include_comma bool: If enabled includes the comma in the string output. + """ + if include_comma: + return super(Param, self).get_code(include_prefix) + + children = self.children + if children[-1] == ',': + children = children[:-1] + return self._get_code_for_children( + children, + include_prefix=include_prefix + ) + + def __repr__(self): + default = '' if self.default is None else '=%s' % self.default.get_code() + return '<%s: %s>' % (type(self).__name__, str(self._tfpdef()) + default) + + +class SyncCompFor(PythonBaseNode): + type = 'sync_comp_for' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the comprehension defines. + """ + # allow async for + return _defined_names(self.children[1]) + + +# This is simply here so an older Jedi version can work with this new parso +# version. Can be deleted in the next release. +CompFor = SyncCompFor + + +class UsedNamesMapping(Mapping): + """ + This class exists for the sole purpose of creating an immutable dict. + """ + def __init__(self, dct): + self._dict = dct + + def __getitem__(self, key): + return self._dict[key] + + def __len__(self): + return len(self._dict) + + def __iter__(self): + return iter(self._dict) + + def __hash__(self): + return id(self) + + def __eq__(self, other): + # Comparing these dicts does not make sense. + return self is other diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/tree.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/tree.py new file mode 100644 index 0000000..f5871a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/tree.py @@ -0,0 +1,366 @@ +from abc import abstractmethod, abstractproperty + +from parso._compatibility import utf8_repr, encoding, py_version +from parso.utils import split_lines + + +def search_ancestor(node, *node_types): + """ + Recursively looks at the parents of a node and returns the first found node + that matches node_types. Returns ``None`` if no matching node is found. + + :param node: The ancestors of this node will be checked. + :param node_types: type names that are searched for. + :type node_types: tuple of str + """ + while True: + node = node.parent + if node is None or node.type in node_types: + return node + + +class NodeOrLeaf(object): + """ + The base class for nodes and leaves. + """ + __slots__ = () + type = None + ''' + The type is a string that typically matches the types of the grammar file. + ''' + + def get_root_node(self): + """ + Returns the root node of a parser tree. The returned node doesn't have + a parent node like all the other nodes/leaves. + """ + scope = self + while scope.parent is not None: + scope = scope.parent + return scope + + def get_next_sibling(self): + """ + Returns the node immediately following this node in this parent's + children list. If this node does not have a next sibling, it is None + """ + # Can't use index(); we need to test by identity + for i, child in enumerate(self.parent.children): + if child is self: + try: + return self.parent.children[i + 1] + except IndexError: + return None + + def get_previous_sibling(self): + """ + Returns the node immediately preceding this node in this parent's + children list. If this node does not have a previous sibling, it is + None. + """ + # Can't use index(); we need to test by identity + for i, child in enumerate(self.parent.children): + if child is self: + if i == 0: + return None + return self.parent.children[i - 1] + + def get_previous_leaf(self): + """ + Returns the previous leaf in the parser tree. + Returns `None` if this is the first element in the parser tree. + """ + node = self + while True: + c = node.parent.children + i = c.index(node) + if i == 0: + node = node.parent + if node.parent is None: + return None + else: + node = c[i - 1] + break + + while True: + try: + node = node.children[-1] + except AttributeError: # A Leaf doesn't have children. + return node + + def get_next_leaf(self): + """ + Returns the next leaf in the parser tree. + Returns None if this is the last element in the parser tree. + """ + node = self + while True: + c = node.parent.children + i = c.index(node) + if i == len(c) - 1: + node = node.parent + if node.parent is None: + return None + else: + node = c[i + 1] + break + + while True: + try: + node = node.children[0] + except AttributeError: # A Leaf doesn't have children. + return node + + @abstractproperty + def start_pos(self): + """ + Returns the starting position of the prefix as a tuple, e.g. `(3, 4)`. + + :return tuple of int: (line, column) + """ + + @abstractproperty + def end_pos(self): + """ + Returns the end position of the prefix as a tuple, e.g. `(3, 4)`. + + :return tuple of int: (line, column) + """ + + @abstractmethod + def get_start_pos_of_prefix(self): + """ + Returns the start_pos of the prefix. This means basically it returns + the end_pos of the last prefix. The `get_start_pos_of_prefix()` of the + prefix `+` in `2 + 1` would be `(1, 1)`, while the start_pos is + `(1, 2)`. + + :return tuple of int: (line, column) + """ + + @abstractmethod + def get_first_leaf(self): + """ + Returns the first leaf of a node or itself if this is a leaf. + """ + + @abstractmethod + def get_last_leaf(self): + """ + Returns the last leaf of a node or itself if this is a leaf. + """ + + @abstractmethod + def get_code(self, include_prefix=True): + """ + Returns the code that was input the input for the parser for this node. + + :param include_prefix: Removes the prefix (whitespace and comments) of + e.g. a statement. + """ + + +class Leaf(NodeOrLeaf): + ''' + Leafs are basically tokens with a better API. Leafs exactly know where they + were defined and what text preceeds them. + ''' + __slots__ = ('value', 'parent', 'line', 'column', 'prefix') + + def __init__(self, value, start_pos, prefix=''): + self.value = value + ''' + :py:func:`str` The value of the current token. + ''' + self.start_pos = start_pos + self.prefix = prefix + ''' + :py:func:`str` Typically a mixture of whitespace and comments. Stuff + that is syntactically irrelevant for the syntax tree. + ''' + self.parent = None + ''' + The parent :class:`BaseNode` of this leaf. + ''' + + @property + def start_pos(self): + return self.line, self.column + + @start_pos.setter + def start_pos(self, value): + self.line = value[0] + self.column = value[1] + + def get_start_pos_of_prefix(self): + previous_leaf = self.get_previous_leaf() + if previous_leaf is None: + lines = split_lines(self.prefix) + # + 1 is needed because split_lines always returns at least ['']. + return self.line - len(lines) + 1, 0 # It's the first leaf. + return previous_leaf.end_pos + + def get_first_leaf(self): + return self + + def get_last_leaf(self): + return self + + def get_code(self, include_prefix=True): + if include_prefix: + return self.prefix + self.value + else: + return self.value + + @property + def end_pos(self): + lines = split_lines(self.value) + end_pos_line = self.line + len(lines) - 1 + # Check for multiline token + if self.line == end_pos_line: + end_pos_column = self.column + len(lines[-1]) + else: + end_pos_column = len(lines[-1]) + return end_pos_line, end_pos_column + + @utf8_repr + def __repr__(self): + value = self.value + if not value: + value = self.type + return "<%s: %s>" % (type(self).__name__, value) + + +class TypedLeaf(Leaf): + __slots__ = ('type',) + + def __init__(self, type, value, start_pos, prefix=''): + super(TypedLeaf, self).__init__(value, start_pos, prefix) + self.type = type + + +class BaseNode(NodeOrLeaf): + """ + The super class for all nodes. + A node has children, a type and possibly a parent node. + """ + __slots__ = ('children', 'parent') + type = None + + def __init__(self, children): + self.children = children + """ + A list of :class:`NodeOrLeaf` child nodes. + """ + self.parent = None + ''' + The parent :class:`BaseNode` of this leaf. + None if this is the root node. + ''' + + @property + def start_pos(self): + return self.children[0].start_pos + + def get_start_pos_of_prefix(self): + return self.children[0].get_start_pos_of_prefix() + + @property + def end_pos(self): + return self.children[-1].end_pos + + def _get_code_for_children(self, children, include_prefix): + if include_prefix: + return "".join(c.get_code() for c in children) + else: + first = children[0].get_code(include_prefix=False) + return first + "".join(c.get_code() for c in children[1:]) + + def get_code(self, include_prefix=True): + return self._get_code_for_children(self.children, include_prefix) + + def get_leaf_for_position(self, position, include_prefixes=False): + """ + Get the :py:class:`parso.tree.Leaf` at ``position`` + + :param tuple position: A position tuple, row, column. Rows start from 1 + :param bool include_prefixes: If ``False``, ``None`` will be returned if ``position`` falls + on whitespace or comments before a leaf + :return: :py:class:`parso.tree.Leaf` at ``position``, or ``None`` + """ + def binary_search(lower, upper): + if lower == upper: + element = self.children[lower] + if not include_prefixes and position < element.start_pos: + # We're on a prefix. + return None + # In case we have prefixes, a leaf always matches + try: + return element.get_leaf_for_position(position, include_prefixes) + except AttributeError: + return element + + + index = int((lower + upper) / 2) + element = self.children[index] + if position <= element.end_pos: + return binary_search(lower, index) + else: + return binary_search(index + 1, upper) + + if not ((1, 0) <= position <= self.children[-1].end_pos): + raise ValueError('Please provide a position that exists within this node.') + return binary_search(0, len(self.children) - 1) + + def get_first_leaf(self): + return self.children[0].get_first_leaf() + + def get_last_leaf(self): + return self.children[-1].get_last_leaf() + + @utf8_repr + def __repr__(self): + code = self.get_code().replace('\n', ' ').replace('\r', ' ').strip() + if not py_version >= 30: + code = code.encode(encoding, 'replace') + return "<%s: %s@%s,%s>" % \ + (type(self).__name__, code, self.start_pos[0], self.start_pos[1]) + + +class Node(BaseNode): + """Concrete implementation for interior nodes.""" + __slots__ = ('type',) + + def __init__(self, type, children): + super(Node, self).__init__(children) + self.type = type + + def __repr__(self): + return "%s(%s, %r)" % (self.__class__.__name__, self.type, self.children) + + +class ErrorNode(BaseNode): + """ + A node that contains valid nodes/leaves that we're follow by a token that + was invalid. This basically means that the leaf after this node is where + Python would mark a syntax error. + """ + __slots__ = () + type = 'error_node' + + +class ErrorLeaf(Leaf): + """ + A leaf that is either completely invalid in a language (like `$` in Python) + or is invalid at that position. Like the star in `1 +* 1`. + """ + __slots__ = ('token_type',) + type = 'error_leaf' + + def __init__(self, token_type, value, start_pos, prefix=''): + super(ErrorLeaf, self).__init__(value, start_pos, prefix) + self.token_type = token_type + + def __repr__(self): + return "<%s: %s:%s, %s>" % \ + (type(self).__name__, self.token_type, repr(self.value), self.start_pos) diff --git a/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/utils.py b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/utils.py new file mode 100644 index 0000000..579c4cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/build/lib/parso/utils.py @@ -0,0 +1,175 @@ +from collections import namedtuple +import re +import sys +from ast import literal_eval + +from parso._compatibility import unicode, total_ordering + +# The following is a list in Python that are line breaks in str.splitlines, but +# not in Python. In Python only \r (Carriage Return, 0xD) and \n (Line Feed, +# 0xA) are allowed to split lines. +_NON_LINE_BREAKS = ( + u'\v', # Vertical Tabulation 0xB + u'\f', # Form Feed 0xC + u'\x1C', # File Separator + u'\x1D', # Group Separator + u'\x1E', # Record Separator + u'\x85', # Next Line (NEL - Equivalent to CR+LF. + # Used to mark end-of-line on some IBM mainframes.) + u'\u2028', # Line Separator + u'\u2029', # Paragraph Separator +) + +Version = namedtuple('Version', 'major, minor, micro') + + +def split_lines(string, keepends=False): + r""" + Intended for Python code. In contrast to Python's :py:meth:`str.splitlines`, + looks at form feeds and other special characters as normal text. Just + splits ``\n`` and ``\r\n``. + Also different: Returns ``[""]`` for an empty string input. + + In Python 2.7 form feeds are used as normal characters when using + str.splitlines. However in Python 3 somewhere there was a decision to split + also on form feeds. + """ + if keepends: + lst = string.splitlines(True) + + # We have to merge lines that were broken by form feed characters. + merge = [] + for i, line in enumerate(lst): + try: + last_chr = line[-1] + except IndexError: + pass + else: + if last_chr in _NON_LINE_BREAKS: + merge.append(i) + + for index in reversed(merge): + try: + lst[index] = lst[index] + lst[index + 1] + del lst[index + 1] + except IndexError: + # index + 1 can be empty and therefore there's no need to + # merge. + pass + + # The stdlib's implementation of the end is inconsistent when calling + # it with/without keepends. One time there's an empty string in the + # end, one time there's none. + if string.endswith('\n') or string.endswith('\r') or string == '': + lst.append('') + return lst + else: + return re.split(r'\n|\r\n|\r', string) + + +def python_bytes_to_unicode(source, encoding='utf-8', errors='strict'): + """ + Checks for unicode BOMs and PEP 263 encoding declarations. Then returns a + unicode object like in :py:meth:`bytes.decode`. + + :param encoding: See :py:meth:`bytes.decode` documentation. + :param errors: See :py:meth:`bytes.decode` documentation. ``errors`` can be + ``'strict'``, ``'replace'`` or ``'ignore'``. + """ + def detect_encoding(): + """ + For the implementation of encoding definitions in Python, look at: + - http://www.python.org/dev/peps/pep-0263/ + - http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations + """ + byte_mark = literal_eval(r"b'\xef\xbb\xbf'") + if source.startswith(byte_mark): + # UTF-8 byte-order mark + return 'utf-8' + + first_two_lines = re.match(br'(?:[^\n]*\n){0,2}', source).group(0) + possible_encoding = re.search(br"coding[=:]\s*([-\w.]+)", + first_two_lines) + if possible_encoding: + return possible_encoding.group(1) + else: + # the default if nothing else has been set -> PEP 263 + return encoding + + if isinstance(source, unicode): + # only cast str/bytes + return source + + encoding = detect_encoding() + if not isinstance(encoding, unicode): + encoding = unicode(encoding, 'utf-8', 'replace') + + # Cast to unicode + return unicode(source, encoding, errors) + + +def version_info(): + """ + Returns a namedtuple of parso's version, similar to Python's + ``sys.version_info``. + """ + from parso import __version__ + tupl = re.findall(r'[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) + + +def _parse_version(version): + match = re.match(r'(\d+)(?:\.(\d)(?:\.\d+)?)?$', version) + if match is None: + raise ValueError('The given version is not in the right format. ' + 'Use something like "3.2" or "3".') + + major = int(match.group(1)) + minor = match.group(2) + if minor is None: + # Use the latest Python in case it's not exactly defined, because the + # grammars are typically backwards compatible? + if major == 2: + minor = "7" + elif major == 3: + minor = "6" + else: + raise NotImplementedError("Sorry, no support yet for those fancy new/old versions.") + minor = int(minor) + return PythonVersionInfo(major, minor) + + +@total_ordering +class PythonVersionInfo(namedtuple('Version', 'major, minor')): + def __gt__(self, other): + if isinstance(other, tuple): + if len(other) != 2: + raise ValueError("Can only compare to tuples of length 2.") + return (self.major, self.minor) > other + super(PythonVersionInfo, self).__gt__(other) + + return (self.major, self.minor) + + def __eq__(self, other): + if isinstance(other, tuple): + if len(other) != 2: + raise ValueError("Can only compare to tuples of length 2.") + return (self.major, self.minor) == other + super(PythonVersionInfo, self).__eq__(other) + + def __ne__(self, other): + return not self.__eq__(other) + + +def parse_version_string(version=None): + """ + Checks for a valid version number (e.g. `3.2` or `2.7.1` or `3`) and + returns a corresponding version info that is always two characters long in + decimal. + """ + if version is None: + version = '%s.%s' % sys.version_info[:2] + if not isinstance(version, (unicode, str)): + raise TypeError("version must be a string like 3.2.") + + return _parse_version(version) diff --git a/vim/bundle/jedi-vim/pythonx/parso/conftest.py b/vim/bundle/jedi-vim/pythonx/parso/conftest.py new file mode 100644 index 0000000..f69ad9e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/conftest.py @@ -0,0 +1,163 @@ +import re +import tempfile +import shutil +import logging +import sys +import os + +import pytest + +import parso +from parso import cache +from parso.utils import parse_version_string + +collect_ignore = ["setup.py"] + +VERSIONS_2 = '2.6', '2.7' +VERSIONS_3 = '3.3', '3.4', '3.5', '3.6', '3.7', '3.8' + + +@pytest.fixture(scope='session') +def clean_parso_cache(): + """ + Set the default cache directory to a temporary directory during tests. + + Note that you can't use built-in `tmpdir` and `monkeypatch` + fixture here because their scope is 'function', which is not used + in 'session' scope fixture. + + This fixture is activated in ../pytest.ini. + """ + old = cache._default_cache_path + tmp = tempfile.mkdtemp(prefix='parso-test-') + cache._default_cache_path = tmp + yield + cache._default_cache_path = old + shutil.rmtree(tmp) + + +def pytest_addoption(parser): + parser.addoption("--logging", "-L", action='store_true', + help="Enables the logging output.") + + +def pytest_generate_tests(metafunc): + if 'normalizer_issue_case' in metafunc.fixturenames: + base_dir = os.path.join(os.path.dirname(__file__), 'test', 'normalizer_issue_files') + + cases = list(colllect_normalizer_tests(base_dir)) + metafunc.parametrize( + 'normalizer_issue_case', + cases, + ids=[c.name for c in cases] + ) + elif 'each_version' in metafunc.fixturenames: + metafunc.parametrize('each_version', VERSIONS_2 + VERSIONS_3) + elif 'each_py2_version' in metafunc.fixturenames: + metafunc.parametrize('each_py2_version', VERSIONS_2) + elif 'each_py3_version' in metafunc.fixturenames: + metafunc.parametrize('each_py3_version', VERSIONS_3) + elif 'version_ge_py36' in metafunc.fixturenames: + metafunc.parametrize('version_ge_py36', ['3.6', '3.7']) + + +class NormalizerIssueCase(object): + """ + Static Analysis cases lie in the static_analysis folder. + The tests also start with `#!`, like the goto_definition tests. + """ + def __init__(self, path): + self.path = path + self.name = os.path.basename(path) + match = re.search(r'python([\d.]+)\.py', self.name) + self.python_version = match and match.group(1) + + +def colllect_normalizer_tests(base_dir): + for f_name in os.listdir(base_dir): + if f_name.endswith(".py"): + path = os.path.join(base_dir, f_name) + yield NormalizerIssueCase(path) + + +def pytest_configure(config): + if config.option.logging: + root = logging.getLogger() + root.setLevel(logging.DEBUG) + + ch = logging.StreamHandler(sys.stdout) + ch.setLevel(logging.DEBUG) + #formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') + #ch.setFormatter(formatter) + + root.addHandler(ch) + + +class Checker(): + def __init__(self, version, is_passing): + self.version = version + self._is_passing = is_passing + self.grammar = parso.load_grammar(version=self.version) + + def parse(self, code): + if self._is_passing: + return parso.parse(code, version=self.version, error_recovery=False) + else: + self._invalid_syntax(code) + + def _invalid_syntax(self, code): + with pytest.raises(parso.ParserSyntaxError): + module = parso.parse(code, version=self.version, error_recovery=False) + # For debugging + print(module.children) + + def get_error(self, code): + errors = list(self.grammar.iter_errors(self.grammar.parse(code))) + assert bool(errors) != self._is_passing + if errors: + return errors[0] + + def get_error_message(self, code): + error = self.get_error(code) + if error is None: + return + return error.message + + def assert_no_error_in_passing(self, code): + if self._is_passing: + module = self.grammar.parse(code) + assert not list(self.grammar.iter_errors(module)) + + +@pytest.fixture +def works_not_in_py(each_version): + return Checker(each_version, False) + + +@pytest.fixture +def works_in_py2(each_version): + return Checker(each_version, each_version.startswith('2')) + + +@pytest.fixture +def works_ge_py27(each_version): + version_info = parse_version_string(each_version) + return Checker(each_version, version_info >= (2, 7)) + + +@pytest.fixture +def works_ge_py3(each_version): + version_info = parse_version_string(each_version) + return Checker(each_version, version_info >= (3, 0)) + + +@pytest.fixture +def works_ge_py35(each_version): + version_info = parse_version_string(each_version) + return Checker(each_version, version_info >= (3, 5)) + + +@pytest.fixture +def works_ge_py38(each_version): + version_info = parse_version_string(each_version) + return Checker(each_version, version_info >= (3, 8)) diff --git a/vim/bundle/jedi-vim/pythonx/parso/deploy-master.sh b/vim/bundle/jedi-vim/pythonx/parso/deploy-master.sh new file mode 100755 index 0000000..8179d01 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/deploy-master.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +# The script creates a separate folder in build/ and creates tags there, pushes +# them and then uploads the package to PyPI. + +set -eu -o pipefail + +BASE_DIR=$(dirname $(readlink -f "$0")) +cd $BASE_DIR + +git fetch --tags + +PROJECT_NAME=parso +BRANCH=master +BUILD_FOLDER=build + +[ -d $BUILD_FOLDER ] || mkdir $BUILD_FOLDER +# Remove the previous deployment first. +# Checkout the right branch +cd $BUILD_FOLDER +rm -rf $PROJECT_NAME +git clone .. $PROJECT_NAME +cd $PROJECT_NAME +git checkout $BRANCH + +# Test first. +tox + +# Create tag +tag=v$(python -c "import $PROJECT_NAME; print($PROJECT_NAME.__version__)") + +master_ref=$(git show-ref -s heads/$BRANCH) +tag_ref=$(git show-ref -s $tag || true) +if [[ $tag_ref ]]; then + if [[ $tag_ref != $master_ref ]]; then + echo 'Cannot tag something that has already been tagged with another commit.' + exit 1 + fi +else + git tag -a $tag + git push --tags +fi + +# Package and upload to PyPI +#rm -rf dist/ - Not needed anymore, because the folder is never reused. +echo `pwd` +python setup.py sdist bdist_wheel +# Maybe do a pip install twine before. +twine upload dist/* + +cd $BASE_DIR +# The tags have been pushed to this repo. Push the tags to github, now. +git push --tags diff --git a/vim/bundle/jedi-vim/pythonx/parso/dist/parso-0.5.1-py3.6.egg b/vim/bundle/jedi-vim/pythonx/parso/dist/parso-0.5.1-py3.6.egg new file mode 100644 index 0000000000000000000000000000000000000000..0bd5259fd2bdad2303efd0f60045e29354bbc0e0 GIT binary patch literal 184945 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%0ABtCh6wx}_|= zPCJpIK)%uga?_s;fW6>%$Ult#pT+zU`mW6RKa7LK^8rPlpF^K_#h*-jGZS0Z|G2>4 zJrTZ8sKpc%wR0(Q1Vl1%G;p^2T^wQOBmPPNa-MQfAo_V{Bk1~t@<%Y! z`)ySD;fIaqD{1*4LHa<~&wl9C|1;|U!^t&(A!)RrC5QzrD=5JI)e8L$2mTrUpPB#j zg8UF20u%cc7|6>rLHgwQi~YmOmzV#A{(_bmZ7N(}Z1mPcYZ0vM`pO69oH}Svj{NUezk;BB%(a!PLK>mY4 zHzWHd8?*`Ffr0|aegA5O{$!+Je{Md1%;kTh3@hjFP7n-m*So_YwM&AW;AhSq?LTn1 ze#fy23V2=xanAn6d0_iJhmGxboPi_dt{o8P@^2huzJK7b|Bj=I$r7sp3YyrUmHK&J zwBrB3;rJb=ST%?f^|zeXH~+x-t)BfySYfI`>lFYJ=4W{zwEltfTRmI9m~})3$>RZv z6hCuLjQ@ed{kwU++ZRuB0CDm`cKGw@lhy7Q&Tpg54;yqth(2-y>37llS5H`Q|CM24 z&;1)u==xg5s0#rAn1D3%vlRYGzY_i^X7~3X9B15t=m3i1bRf>pM{$g_Ul@OsU-~;j zyRxz_7BrDu<6q-=WBTt9KMKtJozhJiCy`76ItzmKxu5TGyc>R{{7BgIGvP-J^kBCa zvjMqs80h*r!iuf@LiqoP-)xWf1L2^X7B0a*(h2<;GeEa+tN%j(pCIc&KAn+NR9+;{+l3`f{qk_wL*U=Ch(sF-GA%k|LLrv zFjPxJ0a`Hw$zL_H%JXmRAIALeQvX_`@lUY}{iXH(jr_ZcjlUj;eyuk4ANH#8zp#H- zd+b;AuXUFGgXS~;zoGwLb?I07ulcP0LuU*9H~QbRTfLEi0v(tD0B+D%Ht4|6{^`fQ G{(k@;n9j=p literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/Makefile b/vim/bundle/jedi-vim/pythonx/parso/docs/Makefile new file mode 100644 index 0000000..1348ee3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/parso.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/parso.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/parso" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/parso" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/README.md b/vim/bundle/jedi-vim/pythonx/parso/docs/README.md new file mode 100644 index 0000000..d931ca3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/README.md @@ -0,0 +1,6 @@ +Installation +------------ + +Install sphinx:: + + sudo pip install sphinx diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo.png b/vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3e47a6932a304d4c96cdfa5e4ebb8d77e9ed45 GIT binary patch literal 204714 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 oI`r=~O00BCPmJlG~zMcZ@L9H7oZPYRvr!5n}DF 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo_characters.png b/vim/bundle/jedi-vim/pythonx/parso/docs/_static/logo_characters.png new file mode 100644 index 0000000000000000000000000000000000000000..c2387ec540d9105f93a8da5dd5dbe387db874598 GIT binary patch literal 56519 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 + +

    diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_templates/sidebarlogo.html b/vim/bundle/jedi-vim/pythonx/parso/docs/_templates/sidebarlogo.html new file mode 100644 index 0000000..d9243c4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_templates/sidebarlogo.html @@ -0,0 +1,3 @@ +

    diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/LICENSE b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/LICENSE new file mode 100644 index 0000000..8daab7e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/LICENSE @@ -0,0 +1,37 @@ +Copyright (c) 2010 by Armin Ronacher. + +Some rights reserved. + +Redistribution and use in source and binary forms of the theme, with or +without modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +* The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +We kindly ask you to only use these themes in an unmodified manner just +for Flask and Flask-related products, not for unrelated projects. If you +like the visual style and want to use it for your own projects, please +consider making some larger changes to the themes (such as changing +font faces, sizes, colors or margins). + +THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/layout.html b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/layout.html new file mode 100644 index 0000000..bcd9dde --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/layout.html @@ -0,0 +1,27 @@ +{%- extends "basic/layout.html" %} +{%- block extrahead %} + {{ super() }} + {% if theme_touch_icon %} + + {% endif %} + + + Fork me + +{% endblock %} +{%- block relbar2 %}{% endblock %} +{% block header %} + {{ super() }} + {% if pagename == 'index' %} +
    + {% endif %} +{% endblock %} +{%- block footer %} + + {% if pagename == 'index' %} +
    + {% endif %} +{%- endblock %} diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/relations.html b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/relations.html new file mode 100644 index 0000000..3bbcde8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/relations.html @@ -0,0 +1,19 @@ +

    Related Topics

    + diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/flasky.css_t b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/flasky.css_t new file mode 100644 index 0000000..79ab478 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/flasky.css_t @@ -0,0 +1,394 @@ +/* + * flasky.css_t + * ~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + +{% set page_width = '940px' %} +{% set sidebar_width = '220px' %} + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: 'Georgia', serif; + font-size: 17px; + background-color: white; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + width: {{ page_width }}; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 {{ sidebar_width }}; +} + +div.sphinxsidebar { + width: {{ sidebar_width }}; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +img.floatingflask { + padding: 0 0 10px 10px; + float: right; +} + +div.footer { + width: {{ page_width }}; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +div.related { + display: none; +} + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebar { + font-size: 14px; + line-height: 1.5; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0 0 20px 0; + margin: 0; + text-align: center; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: 'Garamond', 'Georgia', serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: 'Georgia', serif; + font-size: 1em; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +{% if theme_index_logo %} +div.indexwrapper h1 { + text-indent: -999999px; + background: url({{ theme_index_logo }}) no-repeat center center; + height: {{ theme_index_logo_height }}; +} +{% endif %} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #ddd; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + background: #fafafa; + margin: 20px -30px; + padding: 10px 30px; + border-top: 1px solid #ccc; + border-bottom: 1px solid #ccc; +} + +div.admonition tt.xref, div.admonition a tt { + border-bottom: 1px solid #fafafa; +} + +dd div.admonition { + margin-left: -60px; + padding-left: 60px; +} + +div.admonition p.admonition-title { + font-family: 'Garamond', 'Georgia', serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: white; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt { + font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +img.screenshot { +} + +tt.descname, tt.descclassname { + font-size: 0.95em; +} + +tt.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #eee; + -webkit-box-shadow: 2px 2px 4px #eee; + box-shadow: 2px 2px 4px #eee; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #eee; + background: #fdfdfd; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.footnote td.label { + width: 0px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #eee; + padding: 7px 30px; + margin: 15px -30px; + line-height: 1.3em; +} + +dl pre, blockquote pre, li pre { + margin-left: -60px; + padding-left: 60px; +} + +dl dl pre { + margin-left: -90px; + padding-left: 90px; +} + +tt { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid white; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt { + background: #EEE; +} diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/small_flask.css b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/small_flask.css new file mode 100644 index 0000000..1c6df30 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/static/small_flask.css @@ -0,0 +1,70 @@ +/* + * small_flask.css_t + * ~~~~~~~~~~~~~~~~~ + * + * :copyright: Copyright 2010 by Armin Ronacher. + * :license: Flask Design License, see LICENSE for details. + */ + +body { + margin: 0; + padding: 20px 30px; +} + +div.documentwrapper { + float: none; + background: white; +} + +div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: white; +} + +div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, +div.sphinxsidebar h3 a { + color: white; +} + +div.sphinxsidebar a { + color: #aaa; +} + +div.sphinxsidebar p.logo { + display: none; +} + +div.document { + width: 100%; + margin: 0; +} + +div.related { + display: block; + margin: 0; + padding: 10px 0 20px 0; +} + +div.related ul, +div.related ul li { + margin: 0; + padding: 0; +} + +div.footer { + display: none; +} + +div.bodywrapper { + margin: 0; +} + +div.body { + min-height: 0; + padding: 0; +} diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/theme.conf b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/theme.conf new file mode 100644 index 0000000..1d5657f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask/theme.conf @@ -0,0 +1,9 @@ +[theme] +inherit = basic +stylesheet = flasky.css +pygments_style = flask_theme_support.FlaskyStyle + +[options] +index_logo = +index_logo_height = 120px +touch_icon = diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask_theme_support.py b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask_theme_support.py new file mode 100644 index 0000000..d3e33c0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/_themes/flask_theme_support.py @@ -0,0 +1,125 @@ +""" +Copyright (c) 2010 by Armin Ronacher. + +Some rights reserved. + +Redistribution and use in source and binary forms of the theme, with or +without modification, are permitted provided that the following conditions +are met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +* The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +We kindly ask you to only use these themes in an unmodified manner just +for Flask and Flask-related products, not for unrelated projects. If you +like the visual style and want to use it for your own projects, please +consider making some larger changes to the themes (such as changing +font faces, sizes, colors or margins). + +THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +""" +# flasky extensions. flasky pygments style based on tango style +from pygments.style import Style +from pygments.token import Keyword, Name, Comment, String, Error, \ + Number, Operator, Generic, Whitespace, Punctuation, Other, Literal + + +class FlaskyStyle(Style): + background_color = "#f8f8f8" + default_style = "" + + styles = { + # No corresponding class for the following: + #Text: "", # class: '' + Whitespace: "underline #f8f8f8", # class: 'w' + Error: "#a40000 border:#ef2929", # class: 'err' + Other: "#000000", # class 'x' + + Comment: "italic #8f5902", # class: 'c' + Comment.Preproc: "noitalic", # class: 'cp' + + Keyword: "bold #004461", # class: 'k' + Keyword.Constant: "bold #004461", # class: 'kc' + Keyword.Declaration: "bold #004461", # class: 'kd' + Keyword.Namespace: "bold #004461", # class: 'kn' + Keyword.Pseudo: "bold #004461", # class: 'kp' + Keyword.Reserved: "bold #004461", # class: 'kr' + Keyword.Type: "bold #004461", # class: 'kt' + + Operator: "#582800", # class: 'o' + Operator.Word: "bold #004461", # class: 'ow' - like keywords + + Punctuation: "bold #000000", # class: 'p' + + # because special names such as Name.Class, Name.Function, etc. + # are not recognized as such later in the parsing, we choose them + # to look the same as ordinary variables. + Name: "#000000", # class: 'n' + Name.Attribute: "#c4a000", # class: 'na' - to be revised + Name.Builtin: "#004461", # class: 'nb' + Name.Builtin.Pseudo: "#3465a4", # class: 'bp' + Name.Class: "#000000", # class: 'nc' - to be revised + Name.Constant: "#000000", # class: 'no' - to be revised + Name.Decorator: "#888", # class: 'nd' - to be revised + Name.Entity: "#ce5c00", # class: 'ni' + Name.Exception: "bold #cc0000", # class: 'ne' + Name.Function: "#000000", # class: 'nf' + Name.Property: "#000000", # class: 'py' + Name.Label: "#f57900", # class: 'nl' + Name.Namespace: "#000000", # class: 'nn' - to be revised + Name.Other: "#000000", # class: 'nx' + Name.Tag: "bold #004461", # class: 'nt' - like a keyword + Name.Variable: "#000000", # class: 'nv' - to be revised + Name.Variable.Class: "#000000", # class: 'vc' - to be revised + Name.Variable.Global: "#000000", # class: 'vg' - to be revised + Name.Variable.Instance: "#000000", # class: 'vi' - to be revised + + Number: "#990000", # class: 'm' + + Literal: "#000000", # class: 'l' + Literal.Date: "#000000", # class: 'ld' + + String: "#4e9a06", # class: 's' + String.Backtick: "#4e9a06", # class: 'sb' + String.Char: "#4e9a06", # class: 'sc' + String.Doc: "italic #8f5902", # class: 'sd' - like a comment + String.Double: "#4e9a06", # class: 's2' + String.Escape: "#4e9a06", # class: 'se' + String.Heredoc: "#4e9a06", # class: 'sh' + String.Interpol: "#4e9a06", # class: 'si' + String.Other: "#4e9a06", # class: 'sx' + String.Regex: "#4e9a06", # class: 'sr' + String.Single: "#4e9a06", # class: 's1' + String.Symbol: "#4e9a06", # class: 'ss' + + Generic: "#000000", # class: 'g' + Generic.Deleted: "#a40000", # class: 'gd' + Generic.Emph: "italic #000000", # class: 'ge' + Generic.Error: "#ef2929", # class: 'gr' + Generic.Heading: "bold #000080", # class: 'gh' + Generic.Inserted: "#00A000", # class: 'gi' + Generic.Output: "#888", # class: 'go' + Generic.Prompt: "#745334", # class: 'gp' + Generic.Strong: "bold #000000", # class: 'gs' + Generic.Subheading: "bold #800080", # class: 'gu' + Generic.Traceback: "bold #a40000", # class: 'gt' + } diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/conf.py b/vim/bundle/jedi-vim/pythonx/parso/docs/conf.py new file mode 100644 index 0000000..f1d0d59 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/conf.py @@ -0,0 +1,290 @@ +# -*- coding: utf-8 -*- +# +# parso documentation build configuration file, created by +# sphinx-quickstart on Wed Dec 26 00:11:34 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +sys.path.insert(0, os.path.abspath('..')) +sys.path.append(os.path.abspath('_themes')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'sphinx.ext.todo', + 'sphinx.ext.intersphinx', 'sphinx.ext.inheritance_diagram'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'parso' +copyright = u'parso contributors' + +import parso +from parso.utils import version_info + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '.'.join(str(x) for x in version_info()[:2]) +# The full version, including alpha/beta/rc tags. +release = parso.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = [] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'flask' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = ['_themes'] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +html_sidebars = { + '**': [ + 'sidebarlogo.html', + 'localtoc.html', + #'relations.html', + 'ghbuttons.html', + #'sourcelink.html', + 'searchbox.html' + ] +} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'parsodoc' + +#html_style = 'default.css' # Force usage of default template on RTD + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'parso.tex', u'parso documentation', + u'parso contributors', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'parso', u'parso Documentation', + [u'parso contributors'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'parso', u'parso documentation', + u'parso contributors', 'parso', 'Awesome Python autocompletion library.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# -- Options for todo module --------------------------------------------------- + +todo_include_todos = False + +# -- Options for autodoc module ------------------------------------------------ + +autoclass_content = 'both' +autodoc_member_order = 'bysource' +autodoc_default_flags = [] +#autodoc_default_flags = ['members', 'undoc-members'] + + +# -- Options for intersphinx module -------------------------------------------- + +intersphinx_mapping = { + 'http://docs.python.org/': ('https://docs.python.org/3.6', None), +} + + +def skip_deprecated(app, what, name, obj, skip, options): + """ + All attributes containing a deprecated note shouldn't be documented + anymore. This makes it even clearer that they are not supported anymore. + """ + doc = obj.__doc__ + return skip or doc and '.. deprecated::' in doc + + +def setup(app): + app.connect('autodoc-skip-member', skip_deprecated) diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/docs/development.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/development.rst new file mode 100644 index 0000000..f723162 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/development.rst @@ -0,0 +1,38 @@ +.. include:: ../global.rst + +Development +=========== + +If you want to contribute anything to |parso|, just open an issue or pull +request to discuss it. We welcome changes! Please check the ``CONTRIBUTING.md`` +file in the repository, first. + + +Deprecations Process +-------------------- + +The deprecation process is as follows: + +1. A deprecation is announced in the next major/minor release. +2. We wait either at least a year & at least two minor releases until we remove + the deprecated functionality. + + +Testing +------- + +The test suite depends on ``tox`` and ``pytest``:: + + pip install tox pytest + +To run the tests for all supported Python versions:: + + tox + +If you want to test only a specific Python version (e.g. Python 2.7), it's as +easy as:: + + tox -e py27 + +Tests are also run automatically on `Travis CI +`_. diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/docs/installation.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/installation.rst new file mode 100644 index 0000000..a2de258 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/installation.rst @@ -0,0 +1,32 @@ +.. include:: ../global.rst + +Installation and Configuration +============================== + +The preferred way (pip) +----------------------- + +On any system you can install |parso| directly from the Python package index +using pip:: + + sudo pip install parso + + +From git +-------- +If you want to install the current development version (master branch):: + + sudo pip install -e git://github.com/davidhalter/parso.git#egg=parso + + +Manual installation from a downloaded package (not recommended) +--------------------------------------------------------------- + +If you prefer not to use an automated package installer, you can `download +`__ a current copy of +|parso| and install it manually. + +To install it, navigate to the directory containing `setup.py` on your console +and type:: + + sudo python setup.py install diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/docs/parser-tree.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/parser-tree.rst new file mode 100644 index 0000000..6eb2006 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/parser-tree.rst @@ -0,0 +1,49 @@ +.. include:: ../global.rst + +.. _parser-tree: + +Parser Tree +=========== + +The parser tree is returned by calling :py:meth:`parso.Grammar.parse`. + +.. note:: Note that parso positions are always 1 based for lines and zero + based for columns. This means the first position in a file is (1, 0). + +Parser Tree Base Classes +------------------------ + +Generally there are two types of classes you will deal with: +:py:class:`parso.tree.Leaf` and :py:class:`parso.tree.BaseNode`. + +.. autoclass:: parso.tree.BaseNode + :show-inheritance: + :members: + +.. autoclass:: parso.tree.Leaf + :show-inheritance: + :members: + +All nodes and leaves have these methods/properties: + +.. autoclass:: parso.tree.NodeOrLeaf + :members: + :undoc-members: + :show-inheritance: + + +Python Parser Tree +------------------ + +.. currentmodule:: parso.python.tree + +.. automodule:: parso.python.tree + :members: + :undoc-members: + :show-inheritance: + + +Utility +------- + +.. autofunction:: parso.tree.search_ancestor diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/docs/usage.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/usage.rst new file mode 100644 index 0000000..072d2e5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/docs/usage.rst @@ -0,0 +1,68 @@ +.. include:: ../global.rst + +Usage +===== + +|parso| works around grammars. You can simply create Python grammars by calling +:py:func:`parso.load_grammar`. Grammars (with a custom tokenizer and custom parser trees) +can also be created by directly instantiating :py:func:`parso.Grammar`. More information +about the resulting objects can be found in the :ref:`parser tree documentation +`. + +The simplest way of using parso is without even loading a grammar +(:py:func:`parso.parse`): + +.. sourcecode:: python + + >>> import parso + >>> parso.parse('foo + bar') + + +Loading a Grammar +----------------- + +Typically if you want to work with one specific Python version, use: + +.. autofunction:: parso.load_grammar + +Grammar methods +--------------- + +You will get back a grammar object that you can use to parse code and find +issues in it: + +.. autoclass:: parso.Grammar + :members: + :undoc-members: + + +Error Retrieval +--------------- + +|parso| is able to find multiple errors in your source code. Iterating through +those errors yields the following instances: + +.. autoclass:: parso.normalizer.Issue + :members: + :undoc-members: + + +Utility +------- + +|parso| also offers some utility functions that can be really useful: + +.. autofunction:: parso.parse +.. autofunction:: parso.split_lines +.. autofunction:: parso.python_bytes_to_unicode + + +Used By +------- + +- jedi_ (which is used by IPython and a lot of editor plugins). +- mutmut_ (mutation tester) + + +.. _jedi: https://github.com/davidhalter/jedi +.. _mutmut: https://github.com/boxed/mutmut diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/global.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/global.rst new file mode 100644 index 0000000..ec50aaf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/global.rst @@ -0,0 +1,4 @@ +:orphan: + +.. |jedi| replace:: *jedi* +.. |parso| replace:: *parso* diff --git a/vim/bundle/jedi-vim/pythonx/parso/docs/index.rst b/vim/bundle/jedi-vim/pythonx/parso/docs/index.rst new file mode 100644 index 0000000..50fb0a8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/docs/index.rst @@ -0,0 +1,31 @@ +.. include global.rst + +parso - A Python Parser +======================= + +Release v\ |release|. (:doc:`Installation `) + +.. automodule:: parso + +.. _toc: + +Docs +---- + +.. toctree:: + :maxdepth: 2 + + docs/installation + docs/usage + docs/parser-tree + docs/development + + +.. _resources: + +Resources +--------- + +- `Source Code on Github `_ +- `Travis Testing `_ +- `Python Package Index `_ diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/PKG-INFO b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/PKG-INFO new file mode 100644 index 0000000..6320eff --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/PKG-INFO @@ -0,0 +1,201 @@ +Metadata-Version: 2.1 +Name: parso +Version: 0.5.1 +Summary: A Python Parser +Home-page: https://github.com/davidhalter/parso +Author: David Halter +Author-email: davidhalter88@gmail.com +Maintainer: David Halter +Maintainer-email: davidhalter88@gmail.com +License: MIT +Description: ################################################################### + parso - A Python Parser + ################################################################### + + + .. image:: https://travis-ci.org/davidhalter/parso.svg?branch=master + :target: https://travis-ci.org/davidhalter/parso + :alt: Travis CI build status + + .. image:: https://coveralls.io/repos/github/davidhalter/parso/badge.svg?branch=master + :target: https://coveralls.io/github/davidhalter/parso?branch=master + :alt: Coverage Status + + .. image:: https://raw.githubusercontent.com/davidhalter/parso/master/docs/_static/logo_characters.png + + Parso is a Python parser that supports error recovery and round-trip parsing + for different Python versions (in multiple Python versions). Parso is also able + to list multiple syntax errors in your python file. + + Parso has been battle-tested by jedi_. It was pulled out of jedi to be useful + for other projects as well. + + Parso consists of a small API to parse Python and analyse the syntax tree. + + A simple example: + + .. code-block:: python + + >>> import parso + >>> module = parso.parse('hello + 1', version="3.6") + >>> expr = module.children[0] + >>> expr + PythonNode(arith_expr, [, , ]) + >>> print(expr.get_code()) + hello + 1 + >>> name = expr.children[0] + >>> name + + >>> name.end_pos + (1, 5) + >>> expr.end_pos + (1, 9) + + To list multiple issues: + + .. code-block:: python + + >>> grammar = parso.load_grammar() + >>> module = grammar.parse('foo +\nbar\ncontinue') + >>> error1, error2 = grammar.iter_errors(module) + >>> error1.message + 'SyntaxError: invalid syntax' + >>> error2.message + "SyntaxError: 'continue' not properly in loop" + + Resources + ========= + + - `Testing `_ + - `PyPI `_ + - `Docs `_ + - Uses `semantic versioning `_ + + Installation + ============ + + pip install parso + + Future + ====== + + - There will be better support for refactoring and comments. Stay tuned. + - There's a WIP PEP8 validator. It's however not in a good shape, yet. + + Known Issues + ============ + + - `async`/`await` are already used as keywords in Python3.6. + - `from __future__ import print_function` is not ignored. + + + Acknowledgements + ================ + + - Guido van Rossum (@gvanrossum) for creating the parser generator pgen2 + (originally used in lib2to3). + - `Salome Schneider `_ + for the extremely awesome parso logo. + + + .. _jedi: https://github.com/davidhalter/jedi + + + .. :changelog: + + Changelog + --------- + + 0.5.1 (2019-07-13) + ++++++++++++++++++ + + - Fix: Some unicode identifiers were not correctly tokenized + - Fix: Line continuations in f-strings are now working + + 0.5.0 (2019-06-20) + ++++++++++++++++++ + + - **Breaking Change** comp_for is now called sync_comp_for for all Python + versions to be compatible with the Python 3.8 Grammar + - Added .pyi stubs for a lot of the parso API + - Small FileIO changes + + 0.4.0 (2019-04-05) + ++++++++++++++++++ + + - Python 3.8 support + - FileIO support, it's now possible to use abstract file IO, support is alpha + + 0.3.4 (2019-02-13) + +++++++++++++++++++ + + - Fix an f-string tokenizer error + + 0.3.3 (2019-02-06) + +++++++++++++++++++ + + - Fix async errors in the diff parser + - A fix in iter_errors + - This is a very small bugfix release + + 0.3.2 (2019-01-24) + +++++++++++++++++++ + + - 20+ bugfixes in the diff parser and 3 in the tokenizer + - A fuzzer for the diff parser, to give confidence that the diff parser is in a + good shape. + - Some bugfixes for f-string + + 0.3.1 (2018-07-09) + +++++++++++++++++++ + + - Bugfixes in the diff parser and keyword-only arguments + + 0.3.0 (2018-06-30) + +++++++++++++++++++ + + - Rewrote the pgen2 parser generator. + + 0.2.1 (2018-05-21) + +++++++++++++++++++ + + - A bugfix for the diff parser. + - Grammar files can now be loaded from a specific path. + + 0.2.0 (2018-04-15) + +++++++++++++++++++ + + - f-strings are now parsed as a part of the normal Python grammar. This makes + it way easier to deal with them. + + 0.1.1 (2017-11-05) + +++++++++++++++++++ + + - Fixed a few bugs in the caching layer + - Added support for Python 3.7 + + 0.1.0 (2017-09-04) + +++++++++++++++++++ + + - Pulling the library out of Jedi. Some APIs will definitely change. + +Keywords: python parser parsing +Platform: any +Classifier: Development Status :: 4 - Beta +Classifier: Environment :: Plugins +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Programming Language :: Python :: 3.6 +Classifier: Programming Language :: Python :: 3.7 +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Text Editors :: Integrated Development Environments (IDE) +Classifier: Topic :: Utilities +Provides-Extra: testing diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/SOURCES.txt b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/SOURCES.txt new file mode 100644 index 0000000..fb8cd88 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/SOURCES.txt @@ -0,0 +1,123 @@ +.coveragerc +AUTHORS.txt +CHANGELOG.rst +LICENSE.txt +MANIFEST.in +README.rst +conftest.py +pytest.ini +setup.cfg +setup.py +tox.ini +docs/Makefile +docs/README.md +docs/conf.py +docs/global.rst +docs/index.rst +docs/_static/logo.png +docs/_static/logo_characters.png +docs/_templates/ghbuttons.html +docs/_templates/sidebarlogo.html +docs/_themes/flask_theme_support.py +docs/_themes/flask/LICENSE +docs/_themes/flask/layout.html +docs/_themes/flask/relations.html +docs/_themes/flask/theme.conf +docs/_themes/flask/static/flasky.css_t +docs/_themes/flask/static/small_flask.css +docs/docs/development.rst +docs/docs/installation.rst +docs/docs/parser-tree.rst +docs/docs/usage.rst +parso/__init__.py +parso/_compatibility.py +parso/cache.py +parso/file_io.py +parso/grammar.py +parso/normalizer.py +parso/parser.py +parso/tree.py +parso/utils.py +parso.egg-info/PKG-INFO +parso.egg-info/SOURCES.txt +parso.egg-info/dependency_links.txt +parso.egg-info/requires.txt +parso.egg-info/top_level.txt +parso/pgen2/__init__.py +parso/pgen2/generator.py +parso/pgen2/grammar_parser.py +parso/python/__init__.py +parso/python/diff.py +parso/python/errors.py +parso/python/grammar26.txt +parso/python/grammar27.txt +parso/python/grammar33.txt +parso/python/grammar34.txt +parso/python/grammar35.txt +parso/python/grammar36.txt +parso/python/grammar37.txt +parso/python/grammar38.txt +parso/python/parser.py +parso/python/pep8.py +parso/python/prefix.py +parso/python/token.py +parso/python/tokenize.py +parso/python/tree.py +test/__init__.py +test/failing_examples.py +test/fuzz_diff_parser.py +test/test_absolute_import.py +test/test_cache.py +test/test_diff_parser.py +test/test_error_recovery.py +test/test_file_python_errors.py +test/test_fstring.py +test/test_get_code.py +test/test_grammar.py +test/test_load_grammar.py +test/test_normalizer_issues_files.py +test/test_old_fast_parser.py +test/test_param_splitting.py +test/test_parser.py +test/test_parser_tree.py +test/test_pep8.py +test/test_pgen2.py +test/test_prefix.py +test/test_python_errors.py +test/test_tokenize.py +test/test_utils.py +test/normalizer_issue_files/E10.py +test/normalizer_issue_files/E101.py +test/normalizer_issue_files/E11.py +test/normalizer_issue_files/E12_first.py +test/normalizer_issue_files/E12_not_first.py +test/normalizer_issue_files/E12_not_second.py +test/normalizer_issue_files/E12_second.py +test/normalizer_issue_files/E12_third.py +test/normalizer_issue_files/E20.py +test/normalizer_issue_files/E21.py +test/normalizer_issue_files/E22.py +test/normalizer_issue_files/E23.py +test/normalizer_issue_files/E25.py +test/normalizer_issue_files/E26.py +test/normalizer_issue_files/E27.py +test/normalizer_issue_files/E29.py +test/normalizer_issue_files/E30.py +test/normalizer_issue_files/E30not.py +test/normalizer_issue_files/E40.py +test/normalizer_issue_files/E50.py +test/normalizer_issue_files/E70.py +test/normalizer_issue_files/E71.py +test/normalizer_issue_files/E72.py +test/normalizer_issue_files/E73.py +test/normalizer_issue_files/LICENSE +test/normalizer_issue_files/allowed_syntax.py +test/normalizer_issue_files/allowed_syntax_python2.py +test/normalizer_issue_files/allowed_syntax_python3.4.py +test/normalizer_issue_files/allowed_syntax_python3.5.py +test/normalizer_issue_files/allowed_syntax_python3.6.py +test/normalizer_issue_files/latin-1.py +test/normalizer_issue_files/python2.7.py +test/normalizer_issue_files/python3.py +test/normalizer_issue_files/utf-8-bom.py +test/normalizer_issue_files/utf-8.py \ No newline at end of file diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/dependency_links.txt b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/requires.txt b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/requires.txt new file mode 100644 index 0000000..05fa46b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/requires.txt @@ -0,0 +1,4 @@ + +[testing] +pytest>=3.0.7 +docopt diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/top_level.txt b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/top_level.txt new file mode 100644 index 0000000..0e23344 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso.egg-info/top_level.txt @@ -0,0 +1 @@ +parso diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.py new file mode 100644 index 0000000..a16a72f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.py @@ -0,0 +1,58 @@ +r""" +Parso is a Python parser that supports error recovery and round-trip parsing +for different Python versions (in multiple Python versions). Parso is also able +to list multiple syntax errors in your python file. + +Parso has been battle-tested by jedi_. It was pulled out of jedi to be useful +for other projects as well. + +Parso consists of a small API to parse Python and analyse the syntax tree. + +.. _jedi: https://github.com/davidhalter/jedi + +A simple example: + +>>> import parso +>>> module = parso.parse('hello + 1', version="3.6") +>>> expr = module.children[0] +>>> expr +PythonNode(arith_expr, [, , ]) +>>> print(expr.get_code()) +hello + 1 +>>> name = expr.children[0] +>>> name + +>>> name.end_pos +(1, 5) +>>> expr.end_pos +(1, 9) + +To list multiple issues: + +>>> grammar = parso.load_grammar() +>>> module = grammar.parse('foo +\nbar\ncontinue') +>>> error1, error2 = grammar.iter_errors(module) +>>> error1.message +'SyntaxError: invalid syntax' +>>> error2.message +"SyntaxError: 'continue' not properly in loop" +""" + +from parso.parser import ParserSyntaxError +from parso.grammar import Grammar, load_grammar +from parso.utils import split_lines, python_bytes_to_unicode + + +__version__ = '0.5.1' + + +def parse(code=None, **kwargs): + """ + A utility function to avoid loading grammars. + Params are documented in :py:meth:`parso.Grammar.parse`. + + :param str version: The version used by :py:func:`parso.load_grammar`. + """ + version = kwargs.pop('version', None) + grammar = load_grammar(version=version) + return grammar.parse(code, **kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.pyi new file mode 100644 index 0000000..5f72f07 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/__init__.pyi @@ -0,0 +1,19 @@ +from typing import Any, Optional, Union + +from parso.grammar import Grammar as Grammar, load_grammar as load_grammar +from parso.parser import ParserSyntaxError as ParserSyntaxError +from parso.utils import python_bytes_to_unicode as python_bytes_to_unicode, split_lines as split_lines + +__version__: str = ... + +def parse( + code: Optional[Union[str, bytes]], + *, + version: Optional[str] = None, + error_recovery: bool = True, + path: Optional[str] = None, + start_symbol: Optional[str] = None, + cache: bool = False, + diff_cache: bool = False, + cache_path: Optional[str] = None, +) -> Any: ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/__init__.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3a6925ee404ec45a0cec8d06af16aae9803f3f0 GIT binary patch literal 1820 zcmZWq&2HO95GM6w*=rj}Pq_|^01^?KvJ#{~1xJVr6hTlxHIST`7|cpsiR&)8#O~5I z1LxFU+jCzbZ_($_HK)EpPn}&-vf>ipiaR?$-+Z$(dVY9FzWnv|^7W4Aef74UHh#at zSO17h;zeHKCoSP;t*GVO@3v@Xov4#_qpsU`#7@?Wdf9HYi~DZ0m+U3IWcPPJBFWBM zFCg@&<9XzQDlLI)pm0%{ROV2igefp7HK5C)kjiLaN=XHZ&E+*y70^5ZCCfZHF^U(? zgy&1LK%Imy7EH0+to@;Z<}%kX;5lTaFuV}#;b9QMJraS4=u9wTBnYm}y_K$VLvL#| z8qi-QO9e#@e8B|^Nt01ZHOv^xVMdJ+?8Go_SOT*Ou2{n35Z)NLL7k!$0_CzaAQ$co zFzSp!soA0wE+uJFB&1OCip`M=w7OwJY(mX3IYgVmzz^kUzVv%*nlbo8e5xVcz-sf8N(cGfLEjA)5$TM{ZcSRjZ|ZJYPZuen=#ys zCYN=%Lh;-Ttb=gLOgy(vgMe&6x~Mt&MNCfXAtHN5{ug;;7P35v3#rLqbPO-5;wv@?RCR;BVO~pkjVCjd`8uW9IuPvdCB?> z5ZhUZ%XQc@biOv_SnSwI^`Q2U)ReXJ=+)@ zePhtyz=2%i#ZeNAB`VunLdxQZ{Db4h3;fl0wm+HLG7eg+-s_r^)xkCyc(AVv!A&f9 z&h+YW-JtQT!Y+)BjLV$cB7f?hhA+a=bne?2_~1bD?40`!FK2EaEr@sl{a}K597`1{$na>T*9NU8QS|T479!{t=xjJ+f zm=evfp%sHf&dUs^7R~}peOy%IjG1)&u`YF!W?jyY*sV6+7|&=1+NgC8jo}^kb<nx&|b9*St!fMs%t^8ptI^&)>b>e-cYsFPA}>; z*X4_+4p8^saG1)Bxgl|K&9h-m{q4}@(X4UIb1Y6A7M0pVqY=Iu|8G36ci$pU{G z?5}!pjKsuobWro)fGE{M)#$JmHSv|Ln}Zwe*9W#3T6L}1`d;nFag$^myATfW)^cdI YcF*d&KI!956I?p21OJi#sNHG*2WzW19smFU literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/_compatibility.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/_compatibility.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d4e4141724c2211e789e734c05c09e642e7ff745 GIT binary patch literal 3620 zcmbVPPmkNi6`vs~kK4=g5n#)OT^L5OUL@Gmtq<9{^(Ic#1YC+UT5*@+ zC^I9kC1`=7GEg6TEQ+2B-+Zi~*6`r66HBR3kD_XW)Y`+d= zP@f0FANY?*cEuwiIBcq23Q&{?Z{UAKGUr1goP)-SaPQC=Gulwh%(Oe2#FlQc1NHd1oJ z9?Z>HW^8ZoX8-oy9=i^$Tm4&md)HXRCX&xm!N!qhLm{$etVCo4@3ZYxL@J##GZuiF zXf~eh3ziANnUQR!ai?q~)g;OGnVx4RdeUz`M%_G zpkP?-co~JRLq!~q)~RYhYf+n-(e*odEz)t4RC=PmE|hI3`WjRQv^%V+t^qw)^dT|M zk{Ea8=(mhp^l@heW?T}`-d%jT9cg13&XQPi!QOr6z4z|#{sr(BmSODl$?PtbI+JOQ;R%{tVn`1tDcXenVG|y1JwX4yWjNRwHyW zXQ%Yto~t^rNL_#`uZs-*4Wmelbd=YX(6iJ4+umrF#iwZYk5n|B3UwEEMdAq!Xp=Ub z#hVZkcPvZ&%~Zxws<-;(WVHtKc6wB`;N5c+hLpl{zyd?R?XYHSR48{~yx5`E@&oEQ z>UCUA^Nx`wN<*o*K)>GT zYt?vzx60l+Z39_-cZO_FQK2rqXC`nW6P?JPMOzpE1?oNC;uZQ8j3Bwpe1Rs23c?dA7zSx6d`tMKPB00V5v05_`wiPcIsX&~+$v$XL46uI#<0egTU? zjk(T)X&M>Kw$;y}Pr)A|lDEoKDNHaA$9uK7$s0Q$Q=#nTBHIlyDHIa{NjlOr@Dm+Q z=hL}OWHFoKa%S?tW&m(Eo*Y&Kt;q zkuud*{(SBJWGa;@W>{8UROQ7`{QKC#KL+|HRF(*jxeid#fsCT%20pg&2j6bcDM#F3 K-2tLH&i?>oNDnUn literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/cache.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/cache.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7869560cb302ab29c000c685582db36ce22bcabf GIT binary patch literal 3553 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/parser.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/__pycache__/parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b1edd0c28d90a11bbc94b0f08384d26fef79fc11 GIT binary patch literal 6822 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

    %1UBOB6pQ!F4;Z3FEvR z;YR9sBCCOnNt)C^L<^aKX^_m-7%n~cn)@qYX@xnl6v%9*%#e`8lw0z3_!!LyiUjWN zk4df(s(gpmW3!Az!(;dzATD}T00(7US I#6%5()!N%h4FY$*L{)+_(T#o%WIq)0 zk65+9TX;9OZK?;4xth%x(6c>j8E^1PRE)j;H8qhI#r)Wu#AnH@J#d8Rjg%jxj1b$% zqwA2&LHHFQ)Q@w!J8+8PxujSjg$ER77dESan1gBL?eMper}si=%XQQoeic!Zxd{C+0k#{xW7bW@OMGlJ=j;SWB=F7b&1oZAOo ze)clK&rDhP`>0gwBuHA-rpvJk`y;l9ljs1%85^Xy^f~hxQZiGFV3XigeaO*2Wh6$yI_XPBxp?LQo6%U{N@6Kpvj z@$;cHu3esj;Dp%r$)&}F%hJag@mEe>pO4;~SpVGA`dR3k?VL+zru+^r=*1k-WJ94I zLAnqm@ZVy(BEq*a+qv*9m|iD>XM2P%CcJ!%C_^_zEqX=f4moLD4#aKj# zC=!LaxJ-h-*kKNI#s*4Yb%S`3q?GkMxTB0Z>V&yT!^6~5A|o-*GjG=xXXA)*s3#E& zV-xj#HZGf&*u2Q*I-6J7++;)MP^6HeiaR;j`w^c07fz983HA_s6z0oL!NxgPvP&;A z=u;fm#+e;<(hFD6nTkf{80IA*Utt`TNa!~Q=cy1o56iu866&(Peg|5hj>AK#zycbft&v5L=%?kA5tdan7DBw z=p4IFLK1}rzA+gt5b)z;0*<+bQ`|<6{7DxDsWzN;$4(OprAy&uaG-lh)u3Z!LE$PP zZUV+};R2)eI}^f|LZb5sfL-=fIGKB7;}Y|)VX86DrrVYs6Gb0!6>=m$;&808BZzC` zMs{F?aUEyK#O5UJ$6vaE&iMLA)T|KuAI0`2aiEk<+5za@MHU+g=C1zQD@;DwLb955 z75_E(0Qw^)cZ0E^q`l>#%%%%3@_JII+{h}Fx?(Bwunt3e>9#sdlTUmL1>?coxJ>q` zd<>XW82c@?jrGCr;vV!DlAzy~A*PaOaXM}Ye5saDYE>QM4QA{0Ez*iTJ zsd#S+!NPF38Io#~2=JJI$M8pa}{d|IYI*!A?NKh|05R9M@ z<)d@}WWeKs=*ib&-GL?qY$^P%*5KZ5>z>b=Jie}Lz9MBZ87ydJb0 zb$g-C7%$-6I3H|m`Rz!`bdq<}2|gMmtSd|Lpl5%k+IVHCoe28<&f5;){9CF%ID$Yeez!zSUuV(>}lI^M_i`vy>X!^)eiC*{saCT#vJ1IEvxdvW30=nu(T8hZNYW76Nx1> z%TcI>3?g6L52A{l7Q1oSNVrI+bfVFnNG@a;ukEtQT~^*@)4S{kyX?7dY)Jdd=ifMZ z{PP!o96rBFi=PUq!X)lL(+<`XIp?**ID0f?a=k&L=pt>EabLl${)J+|m+kG`cD`30jE^QZkFAwZN@svd+w@+B7tP`ewaoqE!b;r8b z9LoQ4EWh~~dhb|RWr0JQ`m3p77OL_5hAsa#u-9`uPxB6-b6s3_d0}Afpw5f1!9?(9 zW?3Z<*Ns?b>7p z+DI~@l~=DX$Mw3AfvTiN)x3WvQi;dIW>ZKJ>qYMqp}R7s0e5F+RxpIN6vUorcXZFg zVu2nnj5}RjEe-cR+VT17>rbp#3a_i6l)bg>TkvK}#CQ#9*)pHdLe+aO*%bG&)i54O zzu>8)EiepXNejZ;gy6vA&;?;JRohL zSbF?#T$PEmv}cWULd4xR97>C{bORRNx+Y~J(?kB!$4mZ)HZ z(|kzter3rQvGCoq3oU42VO{WW{(jhA=oqkVEp!5@l404^VWg^^UOH(e^$oC|CEq-Q z!kWynl9OXcn9a&;iWO{^P1#duokVNODdneGiREnhGR>Fo>gN0#*{U15K?FfpZg^8$ zT}AQGddQkKXWV|^Zadm~#5CKn<@6(V%YwIBzp~J0QJ;E4vqxY}p4)NI%O0TxW^mw9 z`QW3GM_p-&20VbkH>5D{^2Z-#PH^+uP4E0`7d#Qe#|VyqKmkfAw!A{^lu;DgCPoC!o=-IXhw!Cauv9JTX zKC*^P==T3HUg32t1McaCZ5&Bsjd)3OtVo!v8OEWp)}DXQdBl03yv4Dod9S5)XK`U+ zb8{1LCRVK`a&3W&`wJb>QB=&I0}>X#Jp}e37Z{H@zaWL7xQ1AW#8%kAVHm_g)Kj6V zwsbpsVT7jn{b(8s?jKy8UEUJS<*n6K+|Aj3<{9cRRC(s@#k)USj#pk;jw?SuH+Ozp z63M9JC^CfJeRFYTS-o=R?)>s*b>(bD9>lAqN?j%ZutC8?W8^Q4p4$2k)AxT#@gdq|6 z5>0ZD3k_!&fBrE#)e#g{!DS^oXCGk&{D>_2=Q2(D#!Y;k_(O-PUW^iGQoRM&c|zDw zJ85x^w_Eo6X~3)DkISFz2D>=U!z6W_Cj>-bttp|B>V zj?%gdps%tcFQ8|Peu`9R(kr+XO-oEgG2J$zjSTa2vIFfvJe=o(442jb_h<|f94wj^}6b*>hLo^jGM{GQw?Si!cF@A z=(XQ3-3{jZD`yAG{A`0TMHgX)_HqliB3-Q^idmUPRE1b;z_^9j<>bJQ3z~S9{l>nR z!w%SE8VC7K80(6Y+SPONdGw@gD+2{dGRW91U5rAd8%ewK)_rs;QeMI8k2Ysky=VEo zk1K^VZxkVaM6wK&i*R)wM3E#5$zv#BS$bW|QPBF-)MpL;TA%SETCPTvI+TI&INJ({H64lqD-%oo(`R6s3J74iidt5op0_J+zt~^G zQRJJDo&ouP2O9Op!oj6E4^DVzIf9M0~UmRjm|_h2$$F zr}SwMb%hCT~r|0VbxDFq~Cy@D!H^c++QXQ{Do`*G)CFN z(?(4QgcilAqMJjXI?;Zm467YsTE+hqP&b@*SHnsY8J61lzWIBvim2$Wz%XV`MZ@wbAw#|TP0Cg@syG{ zk?Q}c9QiJ$m+w(=iHfmm-V; zVp0m#Nn(>6jF}fq1x7?p4Gs>X&7h||girgE=qNF{tr16QCDQ3EieBpHUsBbVROZYx zBav++*@(`)V3Zdd&c;GPuBn5A-W*xRqfN+zJ}uLU+r7?^YKhoj4$|h+_&E9mOZr*X z_$5Bf(25xC2+}pzmUl>oE9sn+MJnju7&$=&;aW~oK^T<>P*m7;pmLU)lnfG952urj zB#ICVQvM_fjM>R>8@1Fy9-4)zW<^QWHw>o3)e!$#^vu3wp2pxmG%GviU#1$xU)la? zm&Ps4TK8>q?24&-F~js*CUB;enZtmU?L!6gk5Kl%jcu`= 30: + return str(string) + + if not isinstance(string, unicode): + return unicode(str(string), 'UTF-8') + return string + + +try: + FileNotFoundError = FileNotFoundError +except NameError: + FileNotFoundError = IOError + + +def utf8_repr(func): + """ + ``__repr__`` methods in Python 2 don't allow unicode objects to be + returned. Therefore cast them to utf-8 bytes in this decorator. + """ + def wrapper(self): + result = func(self) + if isinstance(result, unicode): + return result.encode('utf-8') + else: + return result + + if py_version >= 30: + return func + else: + return wrapper + + +try: + from functools import total_ordering +except ImportError: + # Python 2.6 + def total_ordering(cls): + """Class decorator that fills in missing ordering methods""" + convert = { + '__lt__': [('__gt__', lambda self, other: not (self < other or self == other)), + ('__le__', lambda self, other: self < other or self == other), + ('__ge__', lambda self, other: not self < other)], + '__le__': [('__ge__', lambda self, other: not self <= other or self == other), + ('__lt__', lambda self, other: self <= other and not self == other), + ('__gt__', lambda self, other: not self <= other)], + '__gt__': [('__lt__', lambda self, other: not (self > other or self == other)), + ('__ge__', lambda self, other: self > other or self == other), + ('__le__', lambda self, other: not self > other)], + '__ge__': [('__le__', lambda self, other: (not self >= other) or self == other), + ('__gt__', lambda self, other: self >= other and not self == other), + ('__lt__', lambda self, other: not self >= other)] + } + roots = set(dir(cls)) & set(convert) + if not roots: + raise ValueError('must define at least one ordering operation: < > <= >=') + root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__ + for opname, opfunc in convert[root]: + if opname not in roots: + opfunc.__name__ = opname + opfunc.__doc__ = getattr(int, opname).__doc__ + setattr(cls, opname, opfunc) + return cls diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/cache.py b/vim/bundle/jedi-vim/pythonx/parso/parso/cache.py new file mode 100644 index 0000000..1f8d886 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/cache.py @@ -0,0 +1,169 @@ +import time +import os +import sys +import hashlib +import gc +import shutil +import platform +import errno +import logging + +try: + import cPickle as pickle +except: + import pickle + +from parso._compatibility import FileNotFoundError + +LOG = logging.getLogger(__name__) + + +_PICKLE_VERSION = 32 +""" +Version number (integer) for file system cache. + +Increment this number when there are any incompatible changes in +the parser tree classes. For example, the following changes +are regarded as incompatible. + +- A class name is changed. +- A class is moved to another module. +- A __slot__ of a class is changed. +""" + +_VERSION_TAG = '%s-%s%s-%s' % ( + platform.python_implementation(), + sys.version_info[0], + sys.version_info[1], + _PICKLE_VERSION +) +""" +Short name for distinguish Python implementations and versions. + +It's like `sys.implementation.cache_tag` but for Python < 3.3 +we generate something similar. See: +http://docs.python.org/3/library/sys.html#sys.implementation +""" + + +def _get_default_cache_path(): + if platform.system().lower() == 'windows': + dir_ = os.path.join(os.getenv('LOCALAPPDATA') or '~', 'Parso', 'Parso') + elif platform.system().lower() == 'darwin': + dir_ = os.path.join('~', 'Library', 'Caches', 'Parso') + else: + dir_ = os.path.join(os.getenv('XDG_CACHE_HOME') or '~/.cache', 'parso') + return os.path.expanduser(dir_) + + +_default_cache_path = _get_default_cache_path() +""" +The path where the cache is stored. + +On Linux, this defaults to ``~/.cache/parso/``, on OS X to +``~/Library/Caches/Parso/`` and on Windows to ``%LOCALAPPDATA%\\Parso\\Parso\\``. +On Linux, if environment variable ``$XDG_CACHE_HOME`` is set, +``$XDG_CACHE_HOME/parso`` is used instead of the default one. +""" + +parser_cache = {} + + +class _NodeCacheItem(object): + def __init__(self, node, lines, change_time=None): + self.node = node + self.lines = lines + if change_time is None: + change_time = time.time() + self.change_time = change_time + + +def load_module(hashed_grammar, file_io, cache_path=None): + """ + Returns a module or None, if it fails. + """ + p_time = file_io.get_last_modified() + if p_time is None: + return None + + try: + module_cache_item = parser_cache[hashed_grammar][file_io.path] + if p_time <= module_cache_item.change_time: + return module_cache_item.node + except KeyError: + return _load_from_file_system( + hashed_grammar, + file_io.path, + p_time, + cache_path=cache_path + ) + + +def _load_from_file_system(hashed_grammar, path, p_time, cache_path=None): + cache_path = _get_hashed_path(hashed_grammar, path, cache_path=cache_path) + try: + try: + if p_time > os.path.getmtime(cache_path): + # Cache is outdated + return None + except OSError as e: + if e.errno == errno.ENOENT: + # In Python 2 instead of an IOError here we get an OSError. + raise FileNotFoundError + else: + raise + + with open(cache_path, 'rb') as f: + gc.disable() + try: + module_cache_item = pickle.load(f) + finally: + gc.enable() + except FileNotFoundError: + return None + else: + parser_cache.setdefault(hashed_grammar, {})[path] = module_cache_item + LOG.debug('pickle loaded: %s', path) + return module_cache_item.node + + +def save_module(hashed_grammar, file_io, module, lines, pickling=True, cache_path=None): + path = file_io.path + try: + p_time = None if path is None else file_io.get_last_modified() + except OSError: + p_time = None + pickling = False + + item = _NodeCacheItem(module, lines, p_time) + parser_cache.setdefault(hashed_grammar, {})[path] = item + if pickling and path is not None: + _save_to_file_system(hashed_grammar, path, item, cache_path=cache_path) + + +def _save_to_file_system(hashed_grammar, path, item, cache_path=None): + with open(_get_hashed_path(hashed_grammar, path, cache_path=cache_path), 'wb') as f: + pickle.dump(item, f, pickle.HIGHEST_PROTOCOL) + + +def clear_cache(cache_path=None): + if cache_path is None: + cache_path = _default_cache_path + shutil.rmtree(cache_path) + parser_cache.clear() + + +def _get_hashed_path(hashed_grammar, path, cache_path=None): + directory = _get_cache_directory_path(cache_path=cache_path) + + file_hash = hashlib.sha256(path.encode("utf-8")).hexdigest() + return os.path.join(directory, '%s-%s.pkl' % (hashed_grammar, file_hash)) + + +def _get_cache_directory_path(cache_path=None): + if cache_path is None: + cache_path = _default_cache_path + directory = os.path.join(cache_path, _VERSION_TAG) + if not os.path.exists(directory): + os.makedirs(directory) + return directory diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/file_io.py b/vim/bundle/jedi-vim/pythonx/parso/parso/file_io.py new file mode 100644 index 0000000..94fe08e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/file_io.py @@ -0,0 +1,35 @@ +import os + + +class FileIO(object): + def __init__(self, path): + self.path = path + + def read(self): # Returns bytes/str + # We would like to read unicode here, but we cannot, because we are not + # sure if it is a valid unicode file. Therefore just read whatever is + # here. + with open(self.path, 'rb') as f: + return f.read() + + def get_last_modified(self): + """ + Returns float - timestamp or None, if path doesn't exist. + """ + try: + return os.path.getmtime(self.path) + except OSError: + # Might raise FileNotFoundError, OSError for Python 2 + return None + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.path) + + +class KnownContentFileIO(FileIO): + def __init__(self, path, content): + super(KnownContentFileIO, self).__init__(path) + self._content = content + + def read(self): + return self._content diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.py b/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.py new file mode 100644 index 0000000..41bbe20 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.py @@ -0,0 +1,256 @@ +import hashlib +import os + +from parso._compatibility import FileNotFoundError, is_pypy +from parso.pgen2 import generate_grammar +from parso.utils import split_lines, python_bytes_to_unicode, parse_version_string +from parso.python.diff import DiffParser +from parso.python.tokenize import tokenize_lines, tokenize +from parso.python.token import PythonTokenTypes +from parso.cache import parser_cache, load_module, save_module +from parso.parser import BaseParser +from parso.python.parser import Parser as PythonParser +from parso.python.errors import ErrorFinderConfig +from parso.python import pep8 +from parso.file_io import FileIO, KnownContentFileIO + +_loaded_grammars = {} + + +class Grammar(object): + """ + :py:func:`parso.load_grammar` returns instances of this class. + + Creating custom none-python grammars by calling this is not supported, yet. + """ + #:param text: A BNF representation of your grammar. + _error_normalizer_config = None + _token_namespace = None + _default_normalizer_config = pep8.PEP8NormalizerConfig() + + def __init__(self, text, tokenizer, parser=BaseParser, diff_parser=None): + self._pgen_grammar = generate_grammar( + text, + token_namespace=self._get_token_namespace() + ) + self._parser = parser + self._tokenizer = tokenizer + self._diff_parser = diff_parser + self._hashed = hashlib.sha256(text.encode("utf-8")).hexdigest() + + def parse(self, code=None, **kwargs): + """ + If you want to parse a Python file you want to start here, most likely. + + If you need finer grained control over the parsed instance, there will be + other ways to access it. + + :param str code: A unicode or bytes string. When it's not possible to + decode bytes to a string, returns a + :py:class:`UnicodeDecodeError`. + :param bool error_recovery: If enabled, any code will be returned. If + it is invalid, it will be returned as an error node. If disabled, + you will get a ParseError when encountering syntax errors in your + code. + :param str start_symbol: The grammar rule (nonterminal) that you want + to parse. Only allowed to be used when error_recovery is False. + :param str path: The path to the file you want to open. Only needed for caching. + :param bool cache: Keeps a copy of the parser tree in RAM and on disk + if a path is given. Returns the cached trees if the corresponding + files on disk have not changed. Note that this stores pickle files + on your file system (e.g. for Linux in ``~/.cache/parso/``). + :param bool diff_cache: Diffs the cached python module against the new + code and tries to parse only the parts that have changed. Returns + the same (changed) module that is found in cache. Using this option + requires you to not do anything anymore with the cached modules + under that path, because the contents of it might change. This + option is still somewhat experimental. If you want stability, + please don't use it. + :param bool cache_path: If given saves the parso cache in this + directory. If not given, defaults to the default cache places on + each platform. + + :return: A subclass of :py:class:`parso.tree.NodeOrLeaf`. Typically a + :py:class:`parso.python.tree.Module`. + """ + if 'start_pos' in kwargs: + raise TypeError("parse() got an unexpected keyword argument.") + return self._parse(code=code, **kwargs) + + def _parse(self, code=None, error_recovery=True, path=None, + start_symbol=None, cache=False, diff_cache=False, + cache_path=None, file_io=None, start_pos=(1, 0)): + """ + Wanted python3.5 * operator and keyword only arguments. Therefore just + wrap it all. + start_pos here is just a parameter internally used. Might be public + sometime in the future. + """ + if code is None and path is None and file_io is None: + raise TypeError("Please provide either code or a path.") + + if start_symbol is None: + start_symbol = self._start_nonterminal + + if error_recovery and start_symbol != 'file_input': + raise NotImplementedError("This is currently not implemented.") + + if file_io is None: + if code is None: + file_io = FileIO(path) + else: + file_io = KnownContentFileIO(path, code) + + if cache and file_io.path is not None: + module_node = load_module(self._hashed, file_io, cache_path=cache_path) + if module_node is not None: + return module_node + + if code is None: + code = file_io.read() + code = python_bytes_to_unicode(code) + + lines = split_lines(code, keepends=True) + if diff_cache: + if self._diff_parser is None: + raise TypeError("You have to define a diff parser to be able " + "to use this option.") + try: + module_cache_item = parser_cache[self._hashed][file_io.path] + except KeyError: + pass + else: + module_node = module_cache_item.node + old_lines = module_cache_item.lines + if old_lines == lines: + return module_node + + new_node = self._diff_parser( + self._pgen_grammar, self._tokenizer, module_node + ).update( + old_lines=old_lines, + new_lines=lines + ) + save_module(self._hashed, file_io, new_node, lines, + # Never pickle in pypy, it's slow as hell. + pickling=cache and not is_pypy, + cache_path=cache_path) + return new_node + + tokens = self._tokenizer(lines, start_pos) + + p = self._parser( + self._pgen_grammar, + error_recovery=error_recovery, + start_nonterminal=start_symbol + ) + root_node = p.parse(tokens=tokens) + + if cache or diff_cache: + save_module(self._hashed, file_io, root_node, lines, + # Never pickle in pypy, it's slow as hell. + pickling=cache and not is_pypy, + cache_path=cache_path) + return root_node + + def _get_token_namespace(self): + ns = self._token_namespace + if ns is None: + raise ValueError("The token namespace should be set.") + return ns + + def iter_errors(self, node): + """ + Given a :py:class:`parso.tree.NodeOrLeaf` returns a generator of + :py:class:`parso.normalizer.Issue` objects. For Python this is + a list of syntax/indentation errors. + """ + if self._error_normalizer_config is None: + raise ValueError("No error normalizer specified for this grammar.") + + return self._get_normalizer_issues(node, self._error_normalizer_config) + + def _get_normalizer(self, normalizer_config): + if normalizer_config is None: + normalizer_config = self._default_normalizer_config + if normalizer_config is None: + raise ValueError("You need to specify a normalizer, because " + "there's no default normalizer for this tree.") + return normalizer_config.create_normalizer(self) + + def _normalize(self, node, normalizer_config=None): + """ + TODO this is not public, yet. + The returned code will be normalized, e.g. PEP8 for Python. + """ + normalizer = self._get_normalizer(normalizer_config) + return normalizer.walk(node) + + def _get_normalizer_issues(self, node, normalizer_config=None): + normalizer = self._get_normalizer(normalizer_config) + normalizer.walk(node) + return normalizer.issues + + def __repr__(self): + nonterminals = self._pgen_grammar.nonterminal_to_dfas.keys() + txt = ' '.join(list(nonterminals)[:3]) + ' ...' + return '<%s:%s>' % (self.__class__.__name__, txt) + + +class PythonGrammar(Grammar): + _error_normalizer_config = ErrorFinderConfig() + _token_namespace = PythonTokenTypes + _start_nonterminal = 'file_input' + + def __init__(self, version_info, bnf_text): + super(PythonGrammar, self).__init__( + bnf_text, + tokenizer=self._tokenize_lines, + parser=PythonParser, + diff_parser=DiffParser + ) + self.version_info = version_info + + def _tokenize_lines(self, lines, start_pos): + return tokenize_lines(lines, self.version_info, start_pos=start_pos) + + def _tokenize(self, code): + # Used by Jedi. + return tokenize(code, self.version_info) + + +def load_grammar(**kwargs): + """ + Loads a :py:class:`parso.Grammar`. The default version is the current Python + version. + + :param str version: A python version string, e.g. ``version='3.3'``. + :param str path: A path to a grammar file + """ + def load_grammar(language='python', version=None, path=None): + if language == 'python': + version_info = parse_version_string(version) + + file = path or os.path.join( + 'python', + 'grammar%s%s.txt' % (version_info.major, version_info.minor) + ) + + global _loaded_grammars + path = os.path.join(os.path.dirname(__file__), file) + try: + return _loaded_grammars[path] + except KeyError: + try: + with open(path) as f: + bnf_text = f.read() + + grammar = PythonGrammar(version_info, bnf_text) + return _loaded_grammars.setdefault(path, grammar) + except FileNotFoundError: + message = "Python version %s is currently not supported." % version + raise NotImplementedError(message) + else: + raise NotImplementedError("No support for language %s." % language) + + return load_grammar(**kwargs) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.pyi new file mode 100644 index 0000000..e5cd2ea --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/grammar.pyi @@ -0,0 +1,38 @@ +from typing import Any, Callable, Generic, Optional, Sequence, TypeVar, Union +from typing_extensions import Literal + +from parso.utils import PythonVersionInfo + +_Token = Any +_NodeT = TypeVar("_NodeT") + +class Grammar(Generic[_NodeT]): + _default_normalizer_config: Optional[Any] = ... + _error_normalizer_config: Optional[Any] = None + _start_nonterminal: str = ... + _token_namespace: Optional[str] = None + def __init__( + self, + text: str, + tokenizer: Callable[[Sequence[str], int], Sequence[_Token]], + parser: Any = ..., + diff_parser: Any = ..., + ) -> None: ... + def parse( + self, + code: Union[str, bytes] = ..., + error_recovery: bool = ..., + path: Optional[str] = ..., + start_symbol: Optional[str] = ..., + cache: bool = ..., + diff_cache: bool = ..., + cache_path: Optional[str] = ..., + ) -> _NodeT: ... + +class PythonGrammar(Grammar): + version_info: PythonVersionInfo + def __init__(self, version_info: PythonVersionInfo, bnf_text: str) -> None: ... + +def load_grammar( + language: Literal["python"] = "python", version: Optional[str] = ..., path: str = ... +) -> Grammar: ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/normalizer.py b/vim/bundle/jedi-vim/pythonx/parso/parso/normalizer.py new file mode 100644 index 0000000..b076fe5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/normalizer.py @@ -0,0 +1,183 @@ +from contextlib import contextmanager + +from parso._compatibility import use_metaclass + + +class _NormalizerMeta(type): + def __new__(cls, name, bases, dct): + new_cls = type.__new__(cls, name, bases, dct) + new_cls.rule_value_classes = {} + new_cls.rule_type_classes = {} + return new_cls + + +class Normalizer(use_metaclass(_NormalizerMeta)): + def __init__(self, grammar, config): + self.grammar = grammar + self._config = config + self.issues = [] + + self._rule_type_instances = self._instantiate_rules('rule_type_classes') + self._rule_value_instances = self._instantiate_rules('rule_value_classes') + + def _instantiate_rules(self, attr): + dct = {} + for base in type(self).mro(): + rules_map = getattr(base, attr, {}) + for type_, rule_classes in rules_map.items(): + new = [rule_cls(self) for rule_cls in rule_classes] + dct.setdefault(type_, []).extend(new) + return dct + + def walk(self, node): + self.initialize(node) + value = self.visit(node) + self.finalize() + return value + + def visit(self, node): + try: + children = node.children + except AttributeError: + return self.visit_leaf(node) + else: + with self.visit_node(node): + return ''.join(self.visit(child) for child in children) + + @contextmanager + def visit_node(self, node): + self._check_type_rules(node) + yield + + def _check_type_rules(self, node): + for rule in self._rule_type_instances.get(node.type, []): + rule.feed_node(node) + + def visit_leaf(self, leaf): + self._check_type_rules(leaf) + + for rule in self._rule_value_instances.get(leaf.value, []): + rule.feed_node(leaf) + + return leaf.prefix + leaf.value + + def initialize(self, node): + pass + + def finalize(self): + pass + + def add_issue(self, node, code, message): + issue = Issue(node, code, message) + if issue not in self.issues: + self.issues.append(issue) + return True + + @classmethod + def register_rule(cls, **kwargs): + """ + Use it as a class decorator:: + + normalizer = Normalizer('grammar', 'config') + @normalizer.register_rule(value='foo') + class MyRule(Rule): + error_code = 42 + """ + return cls._register_rule(**kwargs) + + @classmethod + def _register_rule(cls, value=None, values=(), type=None, types=()): + values = list(values) + types = list(types) + if value is not None: + values.append(value) + if type is not None: + types.append(type) + + if not values and not types: + raise ValueError("You must register at least something.") + + def decorator(rule_cls): + for v in values: + cls.rule_value_classes.setdefault(v, []).append(rule_cls) + for t in types: + cls.rule_type_classes.setdefault(t, []).append(rule_cls) + return rule_cls + + return decorator + + +class NormalizerConfig(object): + normalizer_class = Normalizer + + def create_normalizer(self, grammar): + if self.normalizer_class is None: + return None + + return self.normalizer_class(grammar, self) + + +class Issue(object): + def __init__(self, node, code, message): + self._node = node + self.code = code + """ + An integer code that stands for the type of error. + """ + self.message = message + """ + A message (string) for the issue. + """ + self.start_pos = node.start_pos + """ + The start position position of the error as a tuple (line, column). As + always in |parso| the first line is 1 and the first column 0. + """ + + def __eq__(self, other): + return self.start_pos == other.start_pos and self.code == other.code + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash((self.code, self.start_pos)) + + def __repr__(self): + return '<%s: %s>' % (self.__class__.__name__, self.code) + + +class Rule(object): + code = None + message = None + + def __init__(self, normalizer): + self._normalizer = normalizer + + def is_issue(self, node): + raise NotImplementedError() + + def get_node(self, node): + return node + + def _get_message(self, message): + if message is None: + message = self.message + if message is None: + raise ValueError("The message on the class is not set.") + return message + + def add_issue(self, node, code=None, message=None): + if code is None: + code = self.code + if code is None: + raise ValueError("The error code on the class is not set.") + + message = self._get_message(message) + + self._normalizer.add_issue(node, code, message) + + def feed_node(self, node): + if self.is_issue(node): + issue_node = self.get_node(node) + self.add_issue(issue_node) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/parser.py b/vim/bundle/jedi-vim/pythonx/parso/parso/parser.py new file mode 100644 index 0000000..859e3f8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/parser.py @@ -0,0 +1,211 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. +# 99% of the code is different from pgen2, now. + +""" +The ``Parser`` tries to convert the available Python code in an easy to read +format, something like an abstract syntax tree. The classes who represent this +tree, are sitting in the :mod:`parso.tree` module. + +The Python module ``tokenize`` is a very important part in the ``Parser``, +because it splits the code into different words (tokens). Sometimes it looks a +bit messy. Sorry for that! You might ask now: "Why didn't you use the ``ast`` +module for this? Well, ``ast`` does a very good job understanding proper Python +code, but fails to work as soon as there's a single line of broken code. + +There's one important optimization that needs to be known: Statements are not +being parsed completely. ``Statement`` is just a representation of the tokens +within the statement. This lowers memory usage and cpu time and reduces the +complexity of the ``Parser`` (there's another parser sitting inside +``Statement``, which produces ``Array`` and ``Call``). +""" +from parso import tree +from parso.pgen2.generator import ReservedString + + +class ParserSyntaxError(Exception): + """ + Contains error information about the parser tree. + + May be raised as an exception. + """ + def __init__(self, message, error_leaf): + self.message = message + self.error_leaf = error_leaf + + +class InternalParseError(Exception): + """ + Exception to signal the parser is stuck and error recovery didn't help. + Basically this shouldn't happen. It's a sign that something is really + wrong. + """ + + def __init__(self, msg, type_, value, start_pos): + Exception.__init__(self, "%s: type=%r, value=%r, start_pos=%r" % + (msg, type_.name, value, start_pos)) + self.msg = msg + self.type = type + self.value = value + self.start_pos = start_pos + + +class Stack(list): + def _allowed_transition_names_and_token_types(self): + def iterate(): + # An API just for Jedi. + for stack_node in reversed(self): + for transition in stack_node.dfa.transitions: + if isinstance(transition, ReservedString): + yield transition.value + else: + yield transition # A token type + + if not stack_node.dfa.is_final: + break + + return list(iterate()) + + +class StackNode(object): + def __init__(self, dfa): + self.dfa = dfa + self.nodes = [] + + @property + def nonterminal(self): + return self.dfa.from_rule + + def __repr__(self): + return '%s(%s, %s)' % (self.__class__.__name__, self.dfa, self.nodes) + + +def _token_to_transition(grammar, type_, value): + # Map from token to label + if type_.contains_syntax: + # Check for reserved words (keywords) + try: + return grammar.reserved_syntax_strings[value] + except KeyError: + pass + + return type_ + + +class BaseParser(object): + """Parser engine. + + A Parser instance contains state pertaining to the current token + sequence, and should not be used concurrently by different threads + to parse separate token sequences. + + See python/tokenize.py for how to get input tokens by a string. + + When a syntax error occurs, error_recovery() is called. + """ + + node_map = {} + default_node = tree.Node + + leaf_map = { + } + default_leaf = tree.Leaf + + def __init__(self, pgen_grammar, start_nonterminal='file_input', error_recovery=False): + self._pgen_grammar = pgen_grammar + self._start_nonterminal = start_nonterminal + self._error_recovery = error_recovery + + def parse(self, tokens): + first_dfa = self._pgen_grammar.nonterminal_to_dfas[self._start_nonterminal][0] + self.stack = Stack([StackNode(first_dfa)]) + + for token in tokens: + self._add_token(token) + + while True: + tos = self.stack[-1] + if not tos.dfa.is_final: + # We never broke out -- EOF is too soon -- Unfinished statement. + # However, the error recovery might have added the token again, if + # the stack is empty, we're fine. + raise InternalParseError( + "incomplete input", token.type, token.value, token.start_pos + ) + + if len(self.stack) > 1: + self._pop() + else: + return self.convert_node(tos.nonterminal, tos.nodes) + + def error_recovery(self, token): + if self._error_recovery: + raise NotImplementedError("Error Recovery is not implemented") + else: + type_, value, start_pos, prefix = token + error_leaf = tree.ErrorLeaf(type_, value, start_pos, prefix) + raise ParserSyntaxError('SyntaxError: invalid syntax', error_leaf) + + def convert_node(self, nonterminal, children): + try: + node = self.node_map[nonterminal](children) + except KeyError: + node = self.default_node(nonterminal, children) + for c in children: + c.parent = node + return node + + def convert_leaf(self, type_, value, prefix, start_pos): + try: + return self.leaf_map[type_](value, start_pos, prefix) + except KeyError: + return self.default_leaf(value, start_pos, prefix) + + def _add_token(self, token): + """ + This is the only core function for parsing. Here happens basically + everything. Everything is well prepared by the parser generator and we + only apply the necessary steps here. + """ + grammar = self._pgen_grammar + stack = self.stack + type_, value, start_pos, prefix = token + transition = _token_to_transition(grammar, type_, value) + + while True: + try: + plan = stack[-1].dfa.transitions[transition] + break + except KeyError: + if stack[-1].dfa.is_final: + self._pop() + else: + self.error_recovery(token) + return + except IndexError: + raise InternalParseError("too much input", type_, value, start_pos) + + stack[-1].dfa = plan.next_dfa + + for push in plan.dfa_pushes: + stack.append(StackNode(push)) + + leaf = self.convert_leaf(type_, value, prefix, start_pos) + stack[-1].nodes.append(leaf) + + def _pop(self): + tos = self.stack.pop() + # If there's exactly one child, return that child instead of + # creating a new node. We still create expr_stmt and + # file_input though, because a lot of Jedi depends on its + # logic. + if len(tos.nodes) == 1: + new_node = tos.nodes[0] + else: + new_node = self.convert_node(tos.dfa.from_rule, tos.nodes) + + self.stack[-1].nodes.append(new_node) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.py new file mode 100644 index 0000000..d4d9dcd --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.py @@ -0,0 +1,10 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright 2006 Google, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. +# Copyright 2014 David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +from parso.pgen2.generator import generate_grammar diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.pyi new file mode 100644 index 0000000..46c149f --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__init__.pyi @@ -0,0 +1 @@ +from parso.pgen2.generator import generate_grammar as generate_grammar diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/__init__.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ed5a3b3dcd556567e615ead7075648ab1195789 GIT binary patch literal 197 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/grammar_parser.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/__pycache__/grammar_parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e3f3b3c2bd6ceaca9cbdb698bd3aad572478222 GIT binary patch literal 4252 zcmai1TW=f372cU$E|(M~%d#y?L7TFzZFucQDw?1$48xV1$VQNcH7p}enHZZjXGJYV zF6o(-K@(I_M1Jc9Xdj9K{RIK~i{>>?`3rjLcV@^XDa*(bb9Qb!ocYdoF7x5?a`n6a zeE$uG3>p#;DG_yyrGuQ+K;wuhc9t=aC~kQF`Nu(g|<+ zX!)XyRyir3xXl3VKvdAKn07@}_ndI)2dwRcOb2=YFv-$Ug8Jn_EL9S{N~B8rS)_8A zW^MGZK7O4a^s}cl^XcnBqFVIv^l?$yK~YVJ#A!0&G`V0+S8(CJahjgpT(e}i)%5Ll znq^THOBfGCO)TSG5m&?ovHFHJtKyS>I2)iLw)09Q&h(-h}bTDC!!-n2nvt$=R6Y*!T$({O=q+ z?%3&gCk|nazjqrW_rtB<0*=}gpfua>hb3K$US#{x5g1S)qY)lne(+E7xA*!RNbrEovP} znPhn+kGe^e#l1xHKR(t~i%ldCROm{=L$g@3kwMyuW$G*$2scqxs}K%fVJocWLh>4` z@zJG4=*;W_w-SAT@-d1ULg1Xv+?knR!0&x~;youP9Du>GThzSaow3{T#-JUL;i!40 z=5*}0PahkMiH7rQzx)W;yJK&k@68Y#hd#(?b{M63(o?$hD()U7I%qt6u$RYqBClYN zx*Q7;#j<7a3`+(axq%T$Ff@4_Yd$&)l)Q?un<(l%2nXO)S-`81+$D)O57;UjZ7c#d zQ^Nvk#5RN4V^ro(HoS`#46y@@Iym2ah2APtxI35JQ<`5dL(+yfZg z7#Iw1%x5OGM_-rc<~qmj*cGM2vixQWO|dG0XG!M*S}wmWX21^?wDKDUyHoc3l-<_s z761*gOL+?-3@lh=m4+Si64mHPa-9UBSYQr6*bBWgT(b+1@0(eq{3V)?P}KVnj={3V zRzR`<`1(K=Khqm{qs@0>TtH0l(w+?479jqp0K@6L6JqjJ23Q}!mr(-Zq#WiId|ibt zv!cewtg|#G8+RuD&nj@jO7zzR1r^`Sa3_JqYZ#86vT$_UdbUK=Z*FaEg>}R;@^SRG z?EF=|-OuaS)%JB2F8>JnhTlYOd5r{tY0TfMr54FJMX*n#?8}LRocVyWG{23Hzd@PU zKG7R0fm|cYhsz|D`0O3(Ak{Zoqz8KFO@7np;|VH+#@PBvP+ow3riXOmkxvxPVMXqs zkB=!DQ4Jy5;LJ~eB8`{`;~H~;wkTL{6j)wYQ`qWXU02UXm(CdhGYwuJU_Uclr-7qH zVJSM7tcLRV$OaFf;RBa7_(3A-=*k&-+J9c4W&uSVtK@VTSmiN5_}W8A1(_%hiQwQ& z7Qz}xIJ_(w<}#qInoX0-(xn$kJI$s$cJrfw_6IWAPlsofN%lHMQDhYkwmiCeW}DMw zrAV1*CRwR5ONq*u%R8@YhT?}UGgj1oF6!Kc?HWh_6C7*+1IZIX9C z47AtjrknvP4jM=B})F9I+pfcXL&r_HO#jj3E!x;_F~yq zvdWcfVv?AZh|rNFk8l=v0^@He6SBg`T(H|HlGp}p_db33I}$r2 z41(t&^Lvc`6-Cj$1171xfP;&U9Tar~;w>BkbCqGZ(wG|-t~7*9#rW33R%mG|bQ(h! z3ricEpMynL_GQ0ka#rG9O93fLQspj*+1`yp={*0U<*da5gp1RRZU)1GUTC7(z+F^~ z3k}pdybI5fnxh7zLW|`tTGyy$4KqhhV2ySXoS?z7uBIx@R32xoMBc%AdgXz_1uVxU z(HN19Ee~nLj|YP!69(96RQUu0=jxX7gMXtaAHrelWJ;^W!6r#+;VjAMNj>IRYp5Vn zAaZm_B1W&1kKm2b^1bWoZk@nIoV*{pxO+vdZmbk6%g}@X4w(ge5oa<}nG9qU{TFi# zN1R2d?Pv&8{Bt=+Cz79$n5}GTMvWAL|4A#;c@Z(aYRN#?2&>I2l(zSAk)xaT*7QV8xbM)-=g+JD F{{gkVd8_~c literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.py b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.py new file mode 100644 index 0000000..184afb3 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.py @@ -0,0 +1,358 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +""" +This module defines the data structures used to represent a grammar. + +Specifying grammars in pgen is possible with this grammar:: + + grammar: (NEWLINE | rule)* ENDMARKER + rule: NAME ':' rhs NEWLINE + rhs: items ('|' items)* + items: item+ + item: '[' rhs ']' | atom ['+' | '*'] + atom: '(' rhs ')' | NAME | STRING + +This grammar is self-referencing. + +This parser generator (pgen2) was created by Guido Rossum and used for lib2to3. +Most of the code has been refactored to make it more Pythonic. Since this was a +"copy" of the CPython Parser parser "pgen", there was some work needed to make +it more readable. It should also be slightly faster than the original pgen2, +because we made some optimizations. +""" + +from ast import literal_eval + +from parso.pgen2.grammar_parser import GrammarParser, NFAState + + +class Grammar(object): + """ + Once initialized, this class supplies the grammar tables for the + parsing engine implemented by parse.py. The parsing engine + accesses the instance variables directly. + + The only important part in this parsers are dfas and transitions between + dfas. + """ + + def __init__(self, start_nonterminal, rule_to_dfas, reserved_syntax_strings): + self.nonterminal_to_dfas = rule_to_dfas # Dict[str, List[DFAState]] + self.reserved_syntax_strings = reserved_syntax_strings + self.start_nonterminal = start_nonterminal + + +class DFAPlan(object): + """ + Plans are used for the parser to create stack nodes and do the proper + DFA state transitions. + """ + def __init__(self, next_dfa, dfa_pushes=[]): + self.next_dfa = next_dfa + self.dfa_pushes = dfa_pushes + + def __repr__(self): + return '%s(%s, %s)' % (self.__class__.__name__, self.next_dfa, self.dfa_pushes) + + +class DFAState(object): + """ + The DFAState object is the core class for pretty much anything. DFAState + are the vertices of an ordered graph while arcs and transitions are the + edges. + + Arcs are the initial edges, where most DFAStates are not connected and + transitions are then calculated to connect the DFA state machines that have + different nonterminals. + """ + def __init__(self, from_rule, nfa_set, final): + assert isinstance(nfa_set, set) + assert isinstance(next(iter(nfa_set)), NFAState) + assert isinstance(final, NFAState) + self.from_rule = from_rule + self.nfa_set = nfa_set + self.arcs = {} # map from terminals/nonterminals to DFAState + # In an intermediary step we set these nonterminal arcs (which has the + # same structure as arcs). These don't contain terminals anymore. + self.nonterminal_arcs = {} + + # Transitions are basically the only thing that the parser is using + # with is_final. Everyting else is purely here to create a parser. + self.transitions = {} #: Dict[Union[TokenType, ReservedString], DFAPlan] + self.is_final = final in nfa_set + + def add_arc(self, next_, label): + assert isinstance(label, str) + assert label not in self.arcs + assert isinstance(next_, DFAState) + self.arcs[label] = next_ + + def unifystate(self, old, new): + for label, next_ in self.arcs.items(): + if next_ is old: + self.arcs[label] = new + + def __eq__(self, other): + # Equality test -- ignore the nfa_set instance variable + assert isinstance(other, DFAState) + if self.is_final != other.is_final: + return False + # Can't just return self.arcs == other.arcs, because that + # would invoke this method recursively, with cycles... + if len(self.arcs) != len(other.arcs): + return False + for label, next_ in self.arcs.items(): + if next_ is not other.arcs.get(label): + return False + return True + + __hash__ = None # For Py3 compatibility. + + def __repr__(self): + return '<%s: %s is_final=%s>' % ( + self.__class__.__name__, self.from_rule, self.is_final + ) + + +class ReservedString(object): + """ + Most grammars will have certain keywords and operators that are mentioned + in the grammar as strings (e.g. "if") and not token types (e.g. NUMBER). + This class basically is the former. + """ + + def __init__(self, value): + self.value = value + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.value) + + +def _simplify_dfas(dfas): + """ + This is not theoretically optimal, but works well enough. + Algorithm: repeatedly look for two states that have the same + set of arcs (same labels pointing to the same nodes) and + unify them, until things stop changing. + + dfas is a list of DFAState instances + """ + changes = True + while changes: + changes = False + for i, state_i in enumerate(dfas): + for j in range(i + 1, len(dfas)): + state_j = dfas[j] + if state_i == state_j: + #print " unify", i, j + del dfas[j] + for state in dfas: + state.unifystate(state_j, state_i) + changes = True + break + + +def _make_dfas(start, finish): + """ + Uses the powerset construction algorithm to create DFA states from sets of + NFA states. + + Also does state reduction if some states are not needed. + """ + # To turn an NFA into a DFA, we define the states of the DFA + # to correspond to *sets* of states of the NFA. Then do some + # state reduction. + assert isinstance(start, NFAState) + assert isinstance(finish, NFAState) + + def addclosure(nfa_state, base_nfa_set): + assert isinstance(nfa_state, NFAState) + if nfa_state in base_nfa_set: + return + base_nfa_set.add(nfa_state) + for nfa_arc in nfa_state.arcs: + if nfa_arc.nonterminal_or_string is None: + addclosure(nfa_arc.next, base_nfa_set) + + base_nfa_set = set() + addclosure(start, base_nfa_set) + states = [DFAState(start.from_rule, base_nfa_set, finish)] + for state in states: # NB states grows while we're iterating + arcs = {} + # Find state transitions and store them in arcs. + for nfa_state in state.nfa_set: + for nfa_arc in nfa_state.arcs: + if nfa_arc.nonterminal_or_string is not None: + nfa_set = arcs.setdefault(nfa_arc.nonterminal_or_string, set()) + addclosure(nfa_arc.next, nfa_set) + + # Now create the dfa's with no None's in arcs anymore. All Nones have + # been eliminated and state transitions (arcs) are properly defined, we + # just need to create the dfa's. + for nonterminal_or_string, nfa_set in arcs.items(): + for nested_state in states: + if nested_state.nfa_set == nfa_set: + # The DFA state already exists for this rule. + break + else: + nested_state = DFAState(start.from_rule, nfa_set, finish) + states.append(nested_state) + + state.add_arc(nested_state, nonterminal_or_string) + return states # List of DFAState instances; first one is start + + +def _dump_nfa(start, finish): + print("Dump of NFA for", start.from_rule) + todo = [start] + for i, state in enumerate(todo): + print(" State", i, state is finish and "(final)" or "") + for label, next_ in state.arcs: + if next_ in todo: + j = todo.index(next_) + else: + j = len(todo) + todo.append(next_) + if label is None: + print(" -> %d" % j) + else: + print(" %s -> %d" % (label, j)) + + +def _dump_dfas(dfas): + print("Dump of DFA for", dfas[0].from_rule) + for i, state in enumerate(dfas): + print(" State", i, state.is_final and "(final)" or "") + for nonterminal, next_ in state.arcs.items(): + print(" %s -> %d" % (nonterminal, dfas.index(next_))) + + +def generate_grammar(bnf_grammar, token_namespace): + """ + ``bnf_text`` is a grammar in extended BNF (using * for repetition, + for + at-least-once repetition, [] for optional parts, | for alternatives and () + for grouping). + + It's not EBNF according to ISO/IEC 14977. It's a dialect Python uses in its + own parser. + """ + rule_to_dfas = {} + start_nonterminal = None + for nfa_a, nfa_z in GrammarParser(bnf_grammar).parse(): + #_dump_nfa(a, z) + dfas = _make_dfas(nfa_a, nfa_z) + #_dump_dfas(dfas) + # oldlen = len(dfas) + _simplify_dfas(dfas) + # newlen = len(dfas) + rule_to_dfas[nfa_a.from_rule] = dfas + #print(nfa_a.from_rule, oldlen, newlen) + + if start_nonterminal is None: + start_nonterminal = nfa_a.from_rule + + reserved_strings = {} + for nonterminal, dfas in rule_to_dfas.items(): + for dfa_state in dfas: + for terminal_or_nonterminal, next_dfa in dfa_state.arcs.items(): + if terminal_or_nonterminal in rule_to_dfas: + dfa_state.nonterminal_arcs[terminal_or_nonterminal] = next_dfa + else: + transition = _make_transition( + token_namespace, + reserved_strings, + terminal_or_nonterminal + ) + dfa_state.transitions[transition] = DFAPlan(next_dfa) + + _calculate_tree_traversal(rule_to_dfas) + return Grammar(start_nonterminal, rule_to_dfas, reserved_strings) + + +def _make_transition(token_namespace, reserved_syntax_strings, label): + """ + Creates a reserved string ("if", "for", "*", ...) or returns the token type + (NUMBER, STRING, ...) for a given grammar terminal. + """ + if label[0].isalpha(): + # A named token (e.g. NAME, NUMBER, STRING) + return getattr(token_namespace, label) + else: + # Either a keyword or an operator + assert label[0] in ('"', "'"), label + assert not label.startswith('"""') and not label.startswith("'''") + value = literal_eval(label) + try: + return reserved_syntax_strings[value] + except KeyError: + r = reserved_syntax_strings[value] = ReservedString(value) + return r + + +def _calculate_tree_traversal(nonterminal_to_dfas): + """ + By this point we know how dfas can move around within a stack node, but we + don't know how we can add a new stack node (nonterminal transitions). + """ + # Map from grammar rule (nonterminal) name to a set of tokens. + first_plans = {} + + nonterminals = list(nonterminal_to_dfas.keys()) + nonterminals.sort() + for nonterminal in nonterminals: + if nonterminal not in first_plans: + _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal) + + # Now that we have calculated the first terminals, we are sure that + # there is no left recursion or ambiguities. + + for dfas in nonterminal_to_dfas.values(): + for dfa_state in dfas: + for nonterminal, next_dfa in dfa_state.nonterminal_arcs.items(): + for transition, pushes in first_plans[nonterminal].items(): + dfa_state.transitions[transition] = DFAPlan(next_dfa, pushes) + + +def _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal): + """ + Calculates the first plan in the first_plans dictionary for every given + nonterminal. This is going to be used to know when to create stack nodes. + """ + dfas = nonterminal_to_dfas[nonterminal] + new_first_plans = {} + first_plans[nonterminal] = None # dummy to detect left recursion + # We only need to check the first dfa. All the following ones are not + # interesting to find first terminals. + state = dfas[0] + for transition, next_ in state.transitions.items(): + # It's a string. We have finally found a possible first token. + new_first_plans[transition] = [next_.next_dfa] + + for nonterminal2, next_ in state.nonterminal_arcs.items(): + # It's a nonterminal and we have either a left recursion issue + # in the grammar or we have to recurse. + try: + first_plans2 = first_plans[nonterminal2] + except KeyError: + first_plans2 = _calculate_first_plans(nonterminal_to_dfas, first_plans, nonterminal2) + else: + if first_plans2 is None: + raise ValueError("left recursion for rule %r" % nonterminal) + + for t, pushes in first_plans2.items(): + check = new_first_plans.get(t) + if check is not None: + raise ValueError( + "Rule %s is ambiguous; %s is the" + " start of the rule %s as well as %s." + % (nonterminal, t, nonterminal2, check[-1].from_rule) + ) + new_first_plans[t] = [next_] + pushes + + first_plans[nonterminal] = new_first_plans + return new_first_plans diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.pyi new file mode 100644 index 0000000..0d67a18 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/generator.pyi @@ -0,0 +1,38 @@ +from typing import Any, Generic, Mapping, Sequence, Set, TypeVar, Union + +from parso.pgen2.grammar_parser import NFAState + +_TokenTypeT = TypeVar("_TokenTypeT") + +class Grammar(Generic[_TokenTypeT]): + nonterminal_to_dfas: Mapping[str, Sequence[DFAState[_TokenTypeT]]] + reserved_syntax_strings: Mapping[str, ReservedString] + start_nonterminal: str + def __init__( + self, + start_nonterminal: str, + rule_to_dfas: Mapping[str, Sequence[DFAState]], + reserved_syntax_strings: Mapping[str, ReservedString], + ) -> None: ... + +class DFAPlan: + next_dfa: DFAState + dfa_pushes: Sequence[DFAState] + +class DFAState(Generic[_TokenTypeT]): + from_rule: str + nfa_set: Set[NFAState] + is_final: bool + arcs: Mapping[str, DFAState] # map from all terminals/nonterminals to DFAState + nonterminal_arcs: Mapping[str, DFAState] + transitions: Mapping[Union[_TokenTypeT, ReservedString], DFAPlan] + def __init__( + self, from_rule: str, nfa_set: Set[NFAState], final: NFAState + ) -> None: ... + +class ReservedString: + value: str + def __init__(self, value: str) -> None: ... + def __repr__(self) -> str: ... + +def generate_grammar(bnf_grammar: str, token_namespace: Any) -> Grammar[Any]: ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.py b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.py new file mode 100644 index 0000000..623a455 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.py @@ -0,0 +1,156 @@ +# Copyright 2004-2005 Elemental Security, Inc. All Rights Reserved. +# Licensed to PSF under a Contributor Agreement. + +# Modifications: +# Copyright David Halter and Contributors +# Modifications are dual-licensed: MIT and PSF. + +from parso.python.tokenize import tokenize +from parso.utils import parse_version_string +from parso.python.token import PythonTokenTypes + + +class GrammarParser(): + """ + The parser for Python grammar files. + """ + def __init__(self, bnf_grammar): + self._bnf_grammar = bnf_grammar + self.generator = tokenize( + bnf_grammar, + version_info=parse_version_string('3.6') + ) + self._gettoken() # Initialize lookahead + + def parse(self): + # grammar: (NEWLINE | rule)* ENDMARKER + while self.type != PythonTokenTypes.ENDMARKER: + while self.type == PythonTokenTypes.NEWLINE: + self._gettoken() + + # rule: NAME ':' rhs NEWLINE + self._current_rule_name = self._expect(PythonTokenTypes.NAME) + self._expect(PythonTokenTypes.OP, ':') + + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.NEWLINE) + + yield a, z + + def _parse_rhs(self): + # rhs: items ('|' items)* + a, z = self._parse_items() + if self.value != "|": + return a, z + else: + aa = NFAState(self._current_rule_name) + zz = NFAState(self._current_rule_name) + while True: + # Add the possibility to go into the state of a and come back + # to finish. + aa.add_arc(a) + z.add_arc(zz) + if self.value != "|": + break + + self._gettoken() + a, z = self._parse_items() + return aa, zz + + def _parse_items(self): + # items: item+ + a, b = self._parse_item() + while self.type in (PythonTokenTypes.NAME, PythonTokenTypes.STRING) \ + or self.value in ('(', '['): + c, d = self._parse_item() + # Need to end on the next item. + b.add_arc(c) + b = d + return a, b + + def _parse_item(self): + # item: '[' rhs ']' | atom ['+' | '*'] + if self.value == "[": + self._gettoken() + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.OP, ']') + # Make it also possible that there is no token and change the + # state. + a.add_arc(z) + return a, z + else: + a, z = self._parse_atom() + value = self.value + if value not in ("+", "*"): + return a, z + self._gettoken() + # Make it clear that we can go back to the old state and repeat. + z.add_arc(a) + if value == "+": + return a, z + else: + # The end state is the same as the beginning, nothing must + # change. + return a, a + + def _parse_atom(self): + # atom: '(' rhs ')' | NAME | STRING + if self.value == "(": + self._gettoken() + a, z = self._parse_rhs() + self._expect(PythonTokenTypes.OP, ')') + return a, z + elif self.type in (PythonTokenTypes.NAME, PythonTokenTypes.STRING): + a = NFAState(self._current_rule_name) + z = NFAState(self._current_rule_name) + # Make it clear that the state transition requires that value. + a.add_arc(z, self.value) + self._gettoken() + return a, z + else: + self._raise_error("expected (...) or NAME or STRING, got %s/%s", + self.type, self.value) + + def _expect(self, type_, value=None): + if self.type != type_: + self._raise_error("expected %s, got %s [%s]", + type_, self.type, self.value) + if value is not None and self.value != value: + self._raise_error("expected %s, got %s", value, self.value) + value = self.value + self._gettoken() + return value + + def _gettoken(self): + tup = next(self.generator) + self.type, self.value, self.begin, prefix = tup + + def _raise_error(self, msg, *args): + if args: + try: + msg = msg % args + except: + msg = " ".join([msg] + list(map(str, args))) + line = self._bnf_grammar.splitlines()[self.begin[0] - 1] + raise SyntaxError(msg, ('', self.begin[0], + self.begin[1], line)) + + +class NFAArc(object): + def __init__(self, next_, nonterminal_or_string): + self.next = next_ + self.nonterminal_or_string = nonterminal_or_string + + +class NFAState(object): + def __init__(self, from_rule): + self.from_rule = from_rule + self.arcs = [] # List[nonterminal (str), NFAState] + + def add_arc(self, next_, nonterminal_or_string=None): + assert nonterminal_or_string is None or isinstance(nonterminal_or_string, str) + assert isinstance(next_, NFAState) + self.arcs.append(NFAArc(next_, nonterminal_or_string)) + + def __repr__(self): + return '<%s: from %s>' % (self.__class__.__name__, self.from_rule) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.pyi new file mode 100644 index 0000000..b73a5a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/pgen2/grammar_parser.pyi @@ -0,0 +1,20 @@ +from typing import Generator, List, Optional, Tuple + +from parso.python.token import TokenType + +class GrammarParser: + generator: Generator[TokenType, None, None] + def __init__(self, bnf_grammar: str) -> None: ... + def parse(self) -> Generator[Tuple[NFAState, NFAState], None, None]: ... + +class NFAArc: + next: NFAState + nonterminal_or_string: Optional[str] + def __init__( + self, next_: NFAState, nonterminal_or_string: Optional[str] + ) -> None: ... + +class NFAState: + from_rule: str + arcs: List[NFAArc] + def __init__(self, from_rule: str) -> None: ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/__init__.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d776aa8d28c3be90ca6fb29afcb7f085cf2bf58 GIT binary patch literal 136 zcmXr!<>gvA<8dql5IhDEFu(|8H~?`m3y?@*2xib^^jpbL1QJFNzfAQr@^e%5vrTZlX-=vg$hcx4W&i+y C7$JTD literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/diff.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/diff.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7436046dfb6d87873cc0744d2dc1d6e37cce4638 GIT binary patch literal 16439 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/errors.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/errors.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3f4b029f7b0ad49dd903d9a0aa1c4137714c7c3d GIT binary patch literal 32286 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 literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/parser.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e56803b014fe7a66677505b916ba7b8fcf7f6c8e GIT binary patch literal 5345 zcma)APjlPG6~_V~2!ekk(TXg&v4c2&nK-hOv`r@CNn=}* zSJ1wS_BFJxqwR!M?+t$9E3MCXgg6lt(`D+dr^?4E{Jg|xSJ*Jh?MIFZmE2? zA4cMw8)j~{BVw0__d_mH>I~g52791Hl~U47j(gcy3ODJ4wci&~#F?A+5**&Dqc}f+ z{9x#g?uyvI3u+k153my9PCIV0JrKQ&BoNO#tM2tA;8@!Bz8is>y|k*NbxwOVu{V-_ znhmqUR?Fa`UsU_!xJQIT>-WQWG|s$wI2@tVCP&cb*s z%5Gf>>?kffjts(dI^pbxBH})M-LtufN{-qH>YToLH%hjH>3B0v;wb6Oy3R;Kds9BV zA+Rj9g=*NJ3VIM`JLQ<&Po^7m9_-L|%FSkSzhrHu`*F|jCBu;qPS1|QG*eWSl#HRG z#zilYL5A6C6b!ea8LysT^|MZEO89Yt?ei^Z!=HNO>GV)rK`~I$bEq;cW4U&y5A>Yn zMh-{&4SfEtmTSJDYLn}rD_n!w8D02oOGt@bNUY<&koyu|s&%ZQl8#51A>oDXE-%Bd^cC$cLu>HbFF~KwCVG4d^A*hB zr=xB$ArbA~|{CNaU{3=k>)bjx|@Jno4pt{nj?pp-D61XJK-38>QL zGQi=a8ZsU$dU<|0KkD8iw7?Gd?YfV zR(#G)6999dpxUJvO0d2?4kLcFOCWUE%c6aEJIS(S_||w-;wXKHoH2xpkZV37V|_#v z0E6Hp?0Z#(Fd%9)G7NTw^qQGSGsQrYkN%AZu4t12{b4XF>`%mgX?YD`PB4zh54k8T z*a*zBQz=cYe#|+6;s800>B3aJtXJCJkpUJBU=$selC_0Jrl(M8w$9q*hm~dJi?(i} z@8EZEVrrSk-|LZK(nBpFoHEdlLF6pcU{DuwVAy~S^j%Ay&5VJGK8)xP#)DqvaSvS9 zpo+JU+Z^hT$2+XssTF4T(v9_^=^qEC;-nP7{QH9YQ>deZiSMS8^j=hl$6$o=b17;GK&(vpT$c~E2{U92XYNhChdqu5;gi(_ISM`zD5k6QtvTm~m zYw0ch8Fdlg5sWqQ0^x%}Fa7~0Lf*`s6{u>0%>&SMUPn(q)Fwu3a@623xDJ(mld}O} zZD8%{>1T>2&;5oQIaIe>1qB6{l#<$joZ7%q-u})0vKniuu{xw+c47iO7J(j3pvNCe z^nl;5ey-)_pf#Ao7m>R)G}X4$`>hqtuYp=1SfxaDlXlQf|COD{78T$=R{}1#c=e$+ zspNp+fd-_q&@SZ`XD8A79h20bN{K(t*_Y;|I6OS61$IcpgV{nGsO3rVAnGI;-1zrPcHvAfPy;SZR zU-|XXzJYft2IQ_bbfD*LVE_oKZJG; z8IbeBm-?BZAjg$m`RN0X)ir-fmGxgbyPX@b?NwjVZ@}+N_(su_RFO z6^#9vwnXt?GfwFUP|Pt~6rRsbq2S2~x_VJ1XX%HlPY6+qM`nTKQl5pV|6O%l`4KVw z1Xa<5ry{)qbdvW-0x0=Isz~QWZN0m8sCL(HU%%E}moF2m9g96AMc}u?)bCSXQ#k1Qqj9<;(!%ir&dVq-SLnk> zalTB8T9h;Nc99Sa6Cg)nUF)iKERb+37>z{CWt(0kO!DT+`+x%T>(~*%8Q4@Fn;FPn z+G&6 zdVrFyq0)d_CU6TW2&hHoRN72u%LoLPK5w*Ca$>Q0-JWywdDhSy%rRPeo3)AGppY@I zA3XQHR&j)RPlSj*zR4NaA1Yr(_MuT`vPK9&_;)iy$S57Ca%T}K4;$d)cWnCj?~Qw{d*)`DtRZnDON1lo zs~6;Dkg`LSilaxt^gHJwxgv${5C4wolup~y4mwkfJZUA5{p9gmrE^zH+keJZx^QOs zDt(t0BX6N9%kC*VK36AaA_T^^DOP^z^j0Ce>7 zy4QJ^u3+TVz7O>9he$OMF#Mw7`}f8{G@YsXK2LhSU&4aDj{EN>@X@PWp??xQdjmIb z!mGl%p#*piZXvjKt5jx6Z_uTCewyWMX25^Cq5a>T-QDqU8*oLpA+OpM527#@asxdee9UhI z5=nB=+9+T5%f@SNlwzjB&{fhged*R#(KwpLjjpKACJ`_^XF3JZ@@-li`GC5P$v265 zpDF@J(J^SZ>*$fTZMhGwBZlQ<`(r3PR={pOS^*w9V-$ta5;t4$4 zvXrIlhE?LP)39fql4CRNHr!dSC1Gt~98gFXh$6(vW(gG^{>Y8d0Uvs6XnDJZ6ZQ`yQKyXt`~>p%A%9+d0QnF2DdY>vp0p+|Epd8^6LyrVwwj?o zAI?^ql`FoUaH76bTDSD+T2uKt8d{Y((P~cDuAq%~;d;ZLaHGM%ujuO4a-~`IgRrF| z?{uSeGfGTWTXTNYSDT${>9E|a%&ugnb!#?CR~wZeQ2un3n!etwN}@Jh4#L?m%HF(M zYxpLeo^I(l73y0imAP39ubQM6`g%4>%(ZU%dfDEyY`?f{e|XuRShg=M+Y8I~1IzaQ zW&0zMy?5E!yLZ_>xa=G}xNIL?b`Bq2c8(lbwmZxA?q&PsW&6oxd)KnFA4P|k?IX+1 zlTQKx&tX2uZ^!Qgc=qGji{~hwgLrn~*^Q@z=jA7t-NR_$9zjcYFVNhB2cL{`s#e9^ z1U{yC1~Zzj=quM}{bm?tg6o%qs;ZWdrLd$( z_m|7pu2&jdGvt!3%XPmRM)~JYU6?v^;@H{p@e9XJy#LfxH2Czf;!|gePxT5i$5AnP z_SodpSpVnFOr46-XP!NO_RNVhQ(v<5vly~~%OY(zfqe#ICm?&+G@@p zoU7=d)rC@aaL%85{J`8TeFBZ|!4qTw(snZbC*^Bq$VL58BJKlNnW4H@N~pAQl>4e( zN-9q!uy0Z-sZ#hgbCih&SItqerTk*m0}=l5my|h-U<{z+cvi+Z~sxy9A=JtuF96MoECW$vi&4d?uf!~;plGuRQR{8^=tS=DsCQBEQi5th!aV$2eT4*!B+Z3XWjMXUb*Sk>#>J z3A71YPvYk;~1QE*{8)`C61qXYJx$>`l3yKaSc-I;Op zy&Z@q90hy%Mo|bfV8)eoIe>RI!R?OI{I)YQ748~PtLgd@OcaQ)S|VJ z2-BTpm|1lCt)SEacHKh#OQ;tL*LGZFD!Y*CIQ2f@W1n@>_5PWp{*_J&i#f27`y?mn ztfaFT!yxxg^HH?PD|fTCkWn6RvuO1-Mf_|ts}h~esHDNPS<*neA-3yyt-t8F@-D+O z4$`b=U!XtZ+_rVTgH4MvlspFBE2FicAiLEQ#!40=ui;mwBRjjqjk0WKmhHmCh<*tf zEsM%&)Mp8}Eu+-cN>B+yoN|p?(~pM8EOXkwQEOcf%0enz3u?_E^Q3Y{diR^EJl6{J(=6gPn8=!KI>iDR zwG4Bl){NP{)(kb|ItCLBtQn~OASn(TLA1KRDAOBfX~dtOgY5TJnLV39tzvB9X|nxe zc!I+KmYwuGY_5LDXUE=TJ5JgjLn>=0-L#!eGSzQqQ(63`9Xx<}d)UqcuRXeop?i`H z`pM}DZ~fMjy>_=9#wmZ4qoKG-+p+{zBzu3{8~h6j0KL6sm)zH^X$8zQY-*$!#h0A6v~enMXYN&O)JXatGiI>fA=Wsyws z$_9}A;Im?yfP6iXxEuTF2CHoSJkeH!AIV+A6HDMxEPWbF-`>!jPR?*|-6xXk);vm; z%c@ny`9wm|Kzv?R{YC?2JznVcE4<0q;9%s$OoKD!#qQvTqeR&X(B%golL>vnizP0k zBX}VZ4IIb09zbus%AppkNi^Xfr8)VEa}{&|LaXCaqEg<<5%)6WqpgyVaw+9PCOMFD z2Smy_*Xo^A-Nhn#SgxnBoTwEUi5f^m)TzW~OC>g1A_<*l|7sjaHOlt{q_R~;Ul?bq z7-g_;jn=%xeW1$(A0l`eVCnz-m4)CLpDxPfapdSsqbmWCdZMnFG$EEU>dq)=7K) zcFrAh`jKyst(oi5O2Mn?MZ1*nq1vkCs}|Bw zZdF>;+>FYKn!82ys{ts$8EKPKgP@RAc{POEJ~gaH@Y}CO)du_ys4=w>zd6C(q&5S0 zPy}Nh6L3$IJAdl@>mM>>Pef}=a^!{qlQtK+mjP4xj?GSp5oth@0HXF^?lN#2T(SO{2bYtBC{t zrlt-UKF?XIYu80-UcTO1(e`z`%t9D^}vYW!TYj3avh= zxj}>4<%TaBB;=#9BBJ~nq_7oW01#Sh?2$5yN73*`@^RR_zP<+6;V7;&^C9DCV;;k%sl)V8h z4hkEjJXUrk(=|9e*4+7uzkp%#digELGMZS%SpSs~VYl~FWd3vT@2b?hG;0oH;e zCwNjngPe^M-3@utW7p4k`ZR1O>>uTP+}UiMv@Q+fyywe$lmpZTt{u8)-L{)0&`97| z`4nh)FaQ#DOC^ziGfWuSK!qQ4CRFC*P{B_^YAo9NO*3&StNKU_bcR8vAMO5V{tzf7 z(c^A0B`h_7($C>=OR1csIEthiRCyW2=Pp{!Z=>yysN~Pge=}~a;?{eim;CtJ+jz4i zv=&=sW<03w&b7ChS9mv=6ikgGmBvwMsSW7mZ5S7p8jDjYwNX;C*a~urJ)gI(y^X&4 z{#&H)&$DOs0L_d}rk=)pX7QU@==v+ABjyC3hVKi}!QZ3mz3WN~PxO$u*z&x|W| z>>;DJs%`9{6tU*dxma>d89F7wv`I{MVU-#LLAi_K!FN zSL}sByq~4+l@>I;xElM2voNUcTgcCUtTTw&zOgXW83JBG@b-1`7_FoC-FB|!)%JzF z)L~sw_Ch$Ic2Mf03|wPYl;y-Fo*8wJ4|AQNaBz`rLa8(Jw^QA3=8t9Mp=;kgFYqGY z7*citybuoIcce3dw!f*ii?qFfncgKMSO)iupr6q?)(RNkkvw(Nk&uVzM#*nts=kSe zPJKk}euHv;1gg#OZC59S=4P{HW4bU$r5)*Ve%)Yic+bahMxZaDEvL!W=F>t!srx{0 zbFalVw$QJxU^fdGJxTQjBoE`10&q9^2%{BZ2 zBr-gkL7~;ee||v(f2vWLy$pR{Q~9a#tl=L;6;DML21c#8lwYvHHxNfN4h7RSC>B&J z^hbaLlSlLzcx9Xehs01@r$Q`e4qx$Mrp@UizeA$z!L!=?*U6eylIy_XMym=sN3k2FVoL`q-h9=c z3v1sZp$B6^M7|6k7bviDUm<`US)0BU=Rpv*QxN(U6=kcfSsbagpw)~rm9RBiX0Lh# zoych&r9xeSJ6Oxy$i&qCgnf<2eVO)tfes>=TkLv##R%Us5oM?8O|CWPu7_gl)b8g> zZZ6`T&4FF0gas&Vh1PU|s8L_Q1FcKB1sh5~q-VUEvERyQ zbXZrOe0N(({dZCEV?6O1);`6t?S58#v4w_z!*9f#W)>(cgsr*WKw+)Hw*_{ghOYYv z`U$QBpwqv{G$(Qi3ja^^KQN^|w2Av0nRoICm4iBlIQ_0O{D8w4i^M8~HWO@ER=bhy9G)cXOV+_50= zH9g!CvCz~$#d#BLE7JiJYhjlgmF7&WbBTgBF=}j^Pm_oXK8g}D4Tj^mZKH%SlYW_L zk6a2HtEpxyn(lm$x}cegUm-%$xYG5PkdXvMXZ1#4$G8isP~S7*w!2g=4mpgUDux0Xzk zXScVnf2lj#+#xmO-RNxKyNPB8hb-O^`rHgGIAw1%o_RTRFl=FddXyuV?7*EK54)6I zac!>~y`~yk;Bdu&I(?!rK5yO?n2)b{+w@)EHpjVCgeH$i6h>?kF!jUg|8wtF<@k=Y^j$}5Wyo3%XF58Y$<6( zaH(&V434}i?W`2eodDtIC|Rk7a2iD}Tq~u%rtd4b)@dM@`WPuLBOY9ZOGyU3ZqE*u zp{|IhT@3Mn2YqlHgRq=Dq!T^P!;S}!GyTw%Wl5Gof+d|%NUTvv%^YMLB^KnCw*`5@ zM1A|-_4{XSS3Mc#qBqJg{swOYtTjw+YyJRtJ9YC*J80#B>FBB5i*O1z087B+&?T@5 zu5E$dZPgLjScKn1>gn;7I^^i-$bcF*7&jxs9g-Fs4(uHEAq)e1kGOSuP13-C=LBVM zAvFMuLCDs(;AphU`DR{fX)%6{ew8wUDD`ac?*NCSS6-8#k7XF!6#6=`p|z%qB0!^5 ztWN1B-uiUp`HkAN@wniC?fFx>#A)&gIoM8BUSCg3nBuTjz&|6 z+Xj`!t${`kGk`PEleg5)s49uP z{ShQDCYkPh9D+39g;h4uIDvFw!1PhnIPg(&Ngu^Rx#ACoIR&Yl1U|jW-=TL|C1BcL zMGEdgq`m=+B#u+K2+3&8myu8Dx59KCaBG6mI#BNe3%PVMzQO*cF}6{WqeoEJk7r=f67wHSEhF2YXfF1T$wA-T zgSN+Dq}loq;(m_2^JZy(D8}CcGhTW^+^=8tNtmM_y=)b%ufVvr!(4q3vf0x+;#^)N zbr@6FrtX#ZIEvaKIgf_X-)DQcl=`1Vl#xc~&|^5U!cnFfcf`A4#?^gq&=2q4cA9nM zQ|M_7+u67=Oz))eBh+ocnwj@!Ze`Vgzi8j~0*-J9=bNk`%;;x;wQ(Uc|3tV6=c5gn zsShpMm@!B1hUh>J*mQYr1T@ZoBU0`xWQ;Kn3Y&rb#dzl7{O+WX|2)c*Fo6qdyS)8F zc%QV)(x}>je&lTzdCqTSt9YkB%=C*fj2Y6+dI7GgRk>9hBZql8>F^G9&$AjQxmu^bT5{hVYefKemq63nR`;WaZoq_f*I>&*wxATdgDxm3hqft@Osbxsv{^P3=3&GXa^@b`)D5tOO7rvOTdY8G}4NTVlC)++Sb(Q{?I9OSz1qJOZ7@&wk6fXPW zP2X=8;wuOA)boU_?PSA|Df(JCm$-t5+cOM|v=h)WcLhs4!Q0zc+gG3~UZcWn*C_@M zO543Ov9R>hM1J5bCrV~AfLkFBm&3~h$IEB1m)!aJ`K4PV z@$lcM@A#rfOm&HIL(JP9qi)@J_d!#=U!u?PZX>_5@!DS7$vqP#uYQfG zS<)L?i7dt>C;E&@^+&|%*;O(xQG#C2vZm)s-lw#|NU`!|dOUj!Z*Ke8cLd`9724gx zf&|}20+)C2FAX;joJLSrX&BMLlZ5+c3|DjzoJUNHC1V0}F5E^imvX2}qO4yWK@LnN zIGe-)#Ja2m^*|4$qqq=6bvTQ3Kk0)u97t$O)tP}mUIoa(?8@3(@Q`vIed4$KARp(D z>Ua8Kq@fScOVSDDGUi5n_BQOY*LQL}QM0eoNaJ5JenjgguZXTevuq1ea5>=y25x06 zxJ{Z^j)bP*li-<&dmEnqGPFFwic4($Wks(DH5O{%pG1oH_bi5X#D|dxQypmJqQkRR zXtIpAJr?0Xf#wY_r%KVc0{S%eY}{bYbbF;PMqNP8&1}(Z8E&vC{U?C3&6b`<>U8Zd zDcX04Fb;8MHW0<-xl=eo{{cg|u(*94OyG*6>@(RrS4o5$Bg!#My@D1qo)~UgHpmx% zh5I^_Y|&%VQlG?}tF6ZM*=Cf)jZlP3qO>%F*jw+g`aT+G;QtGDAi*mkd2j^Q(xn@c ztGb1*Nc=PW^-i9*RlBaYxP2f<7Zw*g_z2)@)@$~(Lr>zX=>=T;lAPS2z+^*R{~7yr zIGDuTqEqV$L`fx%8l04cqJ8|dm|$2oy0BiSfAT8YxKN{GgX*@6sA-ZeDE+C>dmZ*W z>Je?lqP`hpcH^r~^M}Bso&IGkuA^de3P!{qo0e)2EcOR+tJt7I?LY2-iO}i z_e%NKW7;gY_1DqnD|mBUFGcP@nL3G}B8R%qqTPM+7RzxRqo%fAM%^ozj{&rEf*dGF zO8*D+za1DbqfGyzIy=D;&@ttoi0QnKE%hgQ_~(f)h7R5xhE5t>vQsF{Bb@{8yuA7S zYFDhZb9G`vr#XeO!1sc&{1V0@DVS!QsXb~!@E<}?dr2?&8pa|im@CBSnlpK|AI?vf z9Oz`E%`bzK4oaIp$EY1iyBf{{;2cs93QilGl!ucu!8k4qm&32yoh+~PGOZp$?QngB zYk=It3#pjz-eXq%bsObvjD1Kjuu9#OjKwBL5@Q|DJYrglusU3A#x~o!8uf~avWl+W##Z>&CrVD^SZitVh3kKgQln=66jJzL2-7mV^uI}O&#A6A zJsx#MGgya9xtL^Q0hn8iOaF`L4?oAiyK%p-ZP2~@d$1tXeclI-TYgVkJ{y|?s|RlS zx?Bry))2Uc@fuvMO^38j#B;Crpykq^viZb2Hu8o2Lv{@mo`nd4_ql_wFhK2<({>;fXzlhI(gh?w={)UgY3;5t=4eeA^4xeNGm zs(9+u$;tBM`C}(eMcEY&LMO-1OkF%Pd5V_6g=0Y0WM;HDcJ}PKi>8J6pCyibr^^37 z_(DG>VAxmxkl=R-I2Wb9ICxTi=%GhS{R~HUJ?0`I*N99?OHGa{Q2KlV3CqrTIgiT! zRw(~80T?~b#}G=GsOnVIsr-+M!kuSKSn^p!gf}6@h%w9fi~_QZDn0O_va=Oaj1-UI zmj*))m^lZEokz;;ZSN}odI6Rk2Asfi0#EQy@eVkKyVvE+RX1C`2Wru$Q0^>3-9ns^ zcdlLN;=KIEW1E-dsokH4UX7R|f*P($$DZaRF)mfN&MMqajGF~+CdM5`SyJ_(1b%80 zmVxS1Kr36W#{CsEdh`~i!^|{%b^0%2+Bw8Sna;{peGempU%FSDN6$Zy-aIv=hUL(v zClfJMHKInDhcfe3>4lf9Y>5JZ7U(>J*tu`xsM=GuPX0hUj3w0Qy zTn|LJh@mD%4&bj(s%@Jrxr7(zHZqrr z?DXN2iy`=aZN!1?`Y^rU;RrAIO*;z%@UfRL+WSEjR}*DqR((`GIFpFeT#tv;!|Yr1 zn)epveo16EBKurqpJ^Y8FEp8}IJC`p3q=*i8{_*5nK&(e=n?Oy_?y=&#{?p`}ybGNOq z2g91E{R`rb|FyWV`dZBi5$+PfuKhOK-8b1K&FfZyIU*`hQf6z?p!QqDdf>06-fJ*n zzS7(5?>6@Ilgx4HvhLmwNjeN(2UhipE|E!61YsfD*zw=iDWasBtvTRZt;;id4>UhxK) zYXqfBG4rp z4IuU}>|CSA+PDVkZWMjKG}OId*8TNYu8Qe2(R>2ATks{4!<{R9Hcf>VUtBP7Og%Nw z-z64RtSE5>`qZ4h%z|Gfcnx48XIv96vEVldAqW>D%n^>3NLrBnj#$%HQAdkOMgnzR*Q0e9Bhc|;hjC}mdfG~Yy zIpEVi^J0Pj`hdmok8%bSUeaDfBCq00?r>~A*2qR83*|3 z7^UcpR(HAhj3c+T2V zk#WhQrcoj`%F@R%nx)qOz()6xU3ftWAM<>i7)b(A-C9h&LLf>UUjf&k#JTiomVTY! zcUgMJCuVH$8(ff4B*ck?$?Z;X+8J}(o7PQYkMsDM;gCLwW~;s{dX8Dpv-B?z@Y0=e z4*xn+-yonFqiLMz?-Tqf0r|oV{u)y~uIUa~nCBH#Q4j}P0B~1tET8P3PAAh|_Tl~= z>5p1N>5b`&>BnUzszB-eab1t%k%rw*f_%5+sf>Kjj*ozNEp8$kjjnxJga`PM`G?SU ziA0J^=Kw`2R1-+?kH3836L^C607!@qcfWZ%O~cQ`8!HIcfjt1hGJxU;EyGQTbV8Qh zE$W{}+tY9ga`QwZcl)mO3TjHjmvO&irYw=I^5t5yqHpQ{h6;_iX7BSt*?_#uvr@G( zsViTU{T^37kH)wUDI1X*E&r|8EX_ppzA0Ju_)#Z#Y!|vHYFfH7DR+E=C~Fbro4t>o z%qR2mh0v-2tq6$iAjOkUJ_vzm@bHNj%hs$Xr~4?LHD4eqe37agtSQ}+_!d?1Yt&?v z6S+-K?y>MxQ`KGvv3C*XJ)N0-@R4QBB4K2}45>Or^R~7Tmgbv!^D%LcbL0OD0i?Oy z2mUr_#hyMyVS1oso{BG?TuvC+63Xv6CXg1rO}5bPt^PjGe>glmq;WOua=w zuag+u8VWGvJptqRnxS}&|H+P}e~ozj|MTdlm?E>vr)?%!Hp{Fg_$a|E1l&x*A9rJ> zD1F#m#6AKna}N-57RM^?I3uh;&*18R7D`ygBiwWI>HJ9k(R?nyIql^?YMFog@+1Ej DREQrr literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/prefix.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/prefix.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3dca1dddbdf1715f0c0c230463087802e19c94d0 GIT binary patch literal 2264 zcmZ`)OK;mo5Z+xbpOS3HcI-GogCJ>uDoAXgDbO5>Hhra+RyEMH1sJ7-!db>o!CmLYD6Bbf05~JsjIlbvDgs z_Ou+{xfhei>0{yGKDOdRG>U~BSSX+c7RZ-8w3M9V!8_RCf`{ig;6s4D3j)t;H^Ht} z!_mR+K$i{c#SZR65A_1um)MGJG?fi(-!IxF`;}L`ViB(dT2WbOtxBSmm5mntaAV%< zI?dAOMWJ*#%F?g3&UEAC1Fh1sk>z2o8vFSmnX1Mu@&f+&)dmEAMQ_q-_7e3TWY$h(>;-F$3Ht;tW*uB%3r=qS7wcgu;YmZdUNMad8=ia}{3-!pcOOukt`Re71THAPswVyydt2Yhz*9IpRZaE6ht zWMeZJui^j*8)lO5%&{HO*dEFa;oiiUT+ca6aQ`PkxQP6s=sNn$GlVD{F1g3wq2b&QLqwPEbv;ecn;?oN8B7yAw`oVw zv*{pN+~NX#_Hv!&Sb&Fm6JPZfnfJ(0?VK~j7EO7eA~W&yc;K~t&o#5N){RHM^wYlX z4oMKVfpQKzwx*fFt?9wIK?E5=s*gQntrQH$CFUL*e` ztL@qWt9B3msANf8#ai6A^k1bI6GwR^k3{WN98s}Kjo<=)cJtF}o)elS=y`f+riA?Eqas1E( z%~V%6FvW!8Y6PxvkW)|9L1Rw_WxS^?^u{?-+`?qDu|_Dt78bo;r(FZx!EUZBk}{w# z(GuIJ@j2P0WAz>Li8hPg;ZM^p@&rY7ev7Zr&-^Dbq%zT2@)f>>1sdQ;pxO$YyDo5E z&>YfDNb|+v`XgN1U2lX|Bn6=2LKFPvq7iizaFY1#GTT?_Xr>kb(G6YoMRIhqCu0?t zbF^NxU|<+TXZ#DjXhAoeB_2jZ#IO@(X>xd~Fj&(ItqCPbt-ej06QT1_qBQ*}n!BD0 pgsCf|z1}DD!u*tkrl6G`Z;Q4Ftd;A8^z0`n8lKpYXEWTB{{ph}{fz(s literal 0 HcmV?d00001 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/token.cpython-36.pyc b/vim/bundle/jedi-vim/pythonx/parso/parso/python/__pycache__/token.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2bc3ce603b6fe766288df4f98979520cab71e83 GIT binary patch literal 1345 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 1 + # Not reaching a suite means that we're dealing with file_input levels + # where there's no need for a valid statement in it. It can also be empty. + return True + + +def _is_flow_node(node): + if node.type == 'async_stmt': + node = node.children[1] + try: + value = node.children[0].value + except AttributeError: + return False + return value in ('if', 'for', 'while', 'try', 'with') + + +class _PositionUpdatingFinished(Exception): + pass + + +def _update_positions(nodes, line_offset, last_leaf): + for node in nodes: + try: + children = node.children + except AttributeError: + # Is a leaf + node.line += line_offset + if node is last_leaf: + raise _PositionUpdatingFinished + else: + _update_positions(children, line_offset, last_leaf) + + +class DiffParser(object): + """ + An advanced form of parsing a file faster. Unfortunately comes with huge + side effects. It changes the given module. + """ + def __init__(self, pgen_grammar, tokenizer, module): + self._pgen_grammar = pgen_grammar + self._tokenizer = tokenizer + self._module = module + + def _reset(self): + self._copy_count = 0 + self._parser_count = 0 + + self._nodes_tree = _NodesTree(self._module) + + def update(self, old_lines, new_lines): + ''' + The algorithm works as follows: + + Equal: + - Assure that the start is a newline, otherwise parse until we get + one. + - Copy from parsed_until_line + 1 to max(i2 + 1) + - Make sure that the indentation is correct (e.g. add DEDENT) + - Add old and change positions + Insert: + - Parse from parsed_until_line + 1 to min(j2 + 1), hopefully not + much more. + + Returns the new module node. + ''' + LOG.debug('diff parser start') + # Reset the used names cache so they get regenerated. + self._module._used_names = None + + self._parser_lines_new = new_lines + + self._reset() + + line_length = len(new_lines) + sm = difflib.SequenceMatcher(None, old_lines, self._parser_lines_new) + opcodes = sm.get_opcodes() + LOG.debug('line_lengths old: %s; new: %s' % (len(old_lines), line_length)) + + for operation, i1, i2, j1, j2 in opcodes: + LOG.debug('-> code[%s] old[%s:%s] new[%s:%s]', + operation, i1 + 1, i2, j1 + 1, j2) + + if j2 == line_length and new_lines[-1] == '': + # The empty part after the last newline is not relevant. + j2 -= 1 + + if operation == 'equal': + line_offset = j1 - i1 + self._copy_from_old_parser(line_offset, i2, j2) + elif operation == 'replace': + self._parse(until_line=j2) + elif operation == 'insert': + self._parse(until_line=j2) + else: + assert operation == 'delete' + + # With this action all change will finally be applied and we have a + # changed module. + self._nodes_tree.close() + + if DEBUG_DIFF_PARSER: + # If there is reasonable suspicion that the diff parser is not + # behaving well, this should be enabled. + try: + assert self._module.get_code() == ''.join(new_lines) + _assert_valid_graph(self._module) + except AssertionError: + print(_get_debug_error_message(self._module, old_lines, new_lines)) + raise + + last_pos = self._module.end_pos[0] + if last_pos != line_length: + raise Exception( + ('(%s != %s) ' % (last_pos, line_length)) + + _get_debug_error_message(self._module, old_lines, new_lines) + ) + LOG.debug('diff parser end') + return self._module + + def _enabled_debugging(self, old_lines, lines_new): + if self._module.get_code() != ''.join(lines_new): + LOG.warning('parser issue:\n%s\n%s', ''.join(old_lines), ''.join(lines_new)) + + def _copy_from_old_parser(self, line_offset, until_line_old, until_line_new): + last_until_line = -1 + while until_line_new > self._nodes_tree.parsed_until_line: + parsed_until_line_old = self._nodes_tree.parsed_until_line - line_offset + line_stmt = self._get_old_line_stmt(parsed_until_line_old + 1) + if line_stmt is None: + # Parse 1 line at least. We don't need more, because we just + # want to get into a state where the old parser has statements + # again that can be copied (e.g. not lines within parentheses). + self._parse(self._nodes_tree.parsed_until_line + 1) + else: + p_children = line_stmt.parent.children + index = p_children.index(line_stmt) + + from_ = self._nodes_tree.parsed_until_line + 1 + copied_nodes = self._nodes_tree.copy_nodes( + p_children[index:], + until_line_old, + line_offset + ) + # Match all the nodes that are in the wanted range. + if copied_nodes: + self._copy_count += 1 + + to = self._nodes_tree.parsed_until_line + + LOG.debug('copy old[%s:%s] new[%s:%s]', + copied_nodes[0].start_pos[0], + copied_nodes[-1].end_pos[0] - 1, from_, to) + else: + # We have copied as much as possible (but definitely not too + # much). Therefore we just parse a bit more. + self._parse(self._nodes_tree.parsed_until_line + 1) + # Since there are potential bugs that might loop here endlessly, we + # just stop here. + assert last_until_line != self._nodes_tree.parsed_until_line, last_until_line + last_until_line = self._nodes_tree.parsed_until_line + + def _get_old_line_stmt(self, old_line): + leaf = self._module.get_leaf_for_position((old_line, 0), include_prefixes=True) + + if _ends_with_newline(leaf): + leaf = leaf.get_next_leaf() + if leaf.get_start_pos_of_prefix()[0] == old_line: + node = leaf + while node.parent.type not in ('file_input', 'suite'): + node = node.parent + + # Make sure that if only the `else:` line of an if statement is + # copied that not the whole thing is going to be copied. + if node.start_pos[0] >= old_line: + return node + # Must be on the same line. Otherwise we need to parse that bit. + return None + + def _parse(self, until_line): + """ + Parses at least until the given line, but might just parse more until a + valid state is reached. + """ + last_until_line = 0 + while until_line > self._nodes_tree.parsed_until_line: + node = self._try_parse_part(until_line) + nodes = node.children + + self._nodes_tree.add_parsed_nodes(nodes) + LOG.debug( + 'parse_part from %s to %s (to %s in part parser)', + nodes[0].get_start_pos_of_prefix()[0], + self._nodes_tree.parsed_until_line, + node.end_pos[0] - 1 + ) + # Since the tokenizer sometimes has bugs, we cannot be sure that + # this loop terminates. Therefore assert that there's always a + # change. + assert last_until_line != self._nodes_tree.parsed_until_line, last_until_line + last_until_line = self._nodes_tree.parsed_until_line + + def _try_parse_part(self, until_line): + """ + Sets up a normal parser that uses a spezialized tokenizer to only parse + until a certain position (or a bit longer if the statement hasn't + ended. + """ + self._parser_count += 1 + # TODO speed up, shouldn't copy the whole list all the time. + # memoryview? + parsed_until_line = self._nodes_tree.parsed_until_line + lines_after = self._parser_lines_new[parsed_until_line:] + tokens = self._diff_tokenize( + lines_after, + until_line, + line_offset=parsed_until_line + ) + self._active_parser = Parser( + self._pgen_grammar, + error_recovery=True + ) + return self._active_parser.parse(tokens=tokens) + + def _diff_tokenize(self, lines, until_line, line_offset=0): + is_first_token = True + omitted_first_indent = False + indents = [] + tokens = self._tokenizer(lines, (1, 0)) + stack = self._active_parser.stack + for typ, string, start_pos, prefix in tokens: + start_pos = start_pos[0] + line_offset, start_pos[1] + if typ == PythonTokenTypes.INDENT: + indents.append(start_pos[1]) + if is_first_token: + omitted_first_indent = True + # We want to get rid of indents that are only here because + # we only parse part of the file. These indents would only + # get parsed as error leafs, which doesn't make any sense. + is_first_token = False + continue + is_first_token = False + + # In case of omitted_first_indent, it might not be dedented fully. + # However this is a sign for us that a dedent happened. + if typ == PythonTokenTypes.DEDENT \ + or typ == PythonTokenTypes.ERROR_DEDENT \ + and omitted_first_indent and len(indents) == 1: + indents.pop() + if omitted_first_indent and not indents: + # We are done here, only thing that can come now is an + # endmarker or another dedented code block. + typ, string, start_pos, prefix = next(tokens) + if '\n' in prefix or '\r' in prefix: + prefix = re.sub(r'[^\n\r]+\Z', '', prefix) + else: + assert start_pos[1] >= len(prefix), repr(prefix) + if start_pos[1] - len(prefix) == 0: + prefix = '' + yield PythonToken( + PythonTokenTypes.ENDMARKER, '', + (start_pos[0] + line_offset, 0), + prefix + ) + break + elif typ == PythonTokenTypes.NEWLINE and start_pos[0] >= until_line: + yield PythonToken(typ, string, start_pos, prefix) + # Check if the parser is actually in a valid suite state. + if _suite_or_file_input_is_valid(self._pgen_grammar, stack): + start_pos = start_pos[0] + 1, 0 + while len(indents) > int(omitted_first_indent): + indents.pop() + yield PythonToken(PythonTokenTypes.DEDENT, '', start_pos, '') + + yield PythonToken(PythonTokenTypes.ENDMARKER, '', start_pos, '') + break + else: + continue + + yield PythonToken(typ, string, start_pos, prefix) + + +class _NodesTreeNode(object): + _ChildrenGroup = namedtuple('_ChildrenGroup', 'prefix children line_offset last_line_offset_leaf') + + def __init__(self, tree_node, parent=None): + self.tree_node = tree_node + self._children_groups = [] + self.parent = parent + self._node_children = [] + + def finish(self): + children = [] + for prefix, children_part, line_offset, last_line_offset_leaf in self._children_groups: + first_leaf = _get_next_leaf_if_indentation( + children_part[0].get_first_leaf() + ) + + first_leaf.prefix = prefix + first_leaf.prefix + if line_offset != 0: + try: + _update_positions( + children_part, line_offset, last_line_offset_leaf) + except _PositionUpdatingFinished: + pass + children += children_part + self.tree_node.children = children + # Reset the parents + for node in children: + node.parent = self.tree_node + + for node_child in self._node_children: + node_child.finish() + + def add_child_node(self, child_node): + self._node_children.append(child_node) + + def add_tree_nodes(self, prefix, children, line_offset=0, last_line_offset_leaf=None): + if last_line_offset_leaf is None: + last_line_offset_leaf = children[-1].get_last_leaf() + group = self._ChildrenGroup(prefix, children, line_offset, last_line_offset_leaf) + self._children_groups.append(group) + + def get_last_line(self, suffix): + line = 0 + if self._children_groups: + children_group = self._children_groups[-1] + last_leaf = _get_previous_leaf_if_indentation( + children_group.last_line_offset_leaf + ) + + line = last_leaf.end_pos[0] + children_group.line_offset + + # Newlines end on the next line, which means that they would cover + # the next line. That line is not fully parsed at this point. + if _ends_with_newline(last_leaf, suffix): + line -= 1 + line += len(split_lines(suffix)) - 1 + + if suffix and not suffix.endswith('\n') and not suffix.endswith('\r'): + # This is the end of a file (that doesn't end with a newline). + line += 1 + + if self._node_children: + return max(line, self._node_children[-1].get_last_line(suffix)) + return line + + +class _NodesTree(object): + def __init__(self, module): + self._base_node = _NodesTreeNode(module) + self._working_stack = [self._base_node] + self._module = module + self._prefix_remainder = '' + self.prefix = '' + + @property + def parsed_until_line(self): + return self._working_stack[-1].get_last_line(self.prefix) + + def _get_insertion_node(self, indentation_node): + indentation = indentation_node.start_pos[1] + + # find insertion node + while True: + node = self._working_stack[-1] + tree_node = node.tree_node + if tree_node.type == 'suite': + # A suite starts with NEWLINE, ... + node_indentation = tree_node.children[1].start_pos[1] + + if indentation >= node_indentation: # Not a Dedent + # We might be at the most outer layer: modules. We + # don't want to depend on the first statement + # having the right indentation. + return node + + elif tree_node.type == 'file_input': + return node + + self._working_stack.pop() + + def add_parsed_nodes(self, tree_nodes): + old_prefix = self.prefix + tree_nodes = self._remove_endmarker(tree_nodes) + if not tree_nodes: + self.prefix = old_prefix + self.prefix + return + + assert tree_nodes[0].type != 'newline' + + node = self._get_insertion_node(tree_nodes[0]) + assert node.tree_node.type in ('suite', 'file_input') + node.add_tree_nodes(old_prefix, tree_nodes) + # tos = Top of stack + self._update_tos(tree_nodes[-1]) + + def _update_tos(self, tree_node): + if tree_node.type in ('suite', 'file_input'): + new_tos = _NodesTreeNode(tree_node) + new_tos.add_tree_nodes('', list(tree_node.children)) + + self._working_stack[-1].add_child_node(new_tos) + self._working_stack.append(new_tos) + + self._update_tos(tree_node.children[-1]) + elif _func_or_class_has_suite(tree_node): + self._update_tos(tree_node.children[-1]) + + def _remove_endmarker(self, tree_nodes): + """ + Helps cleaning up the tree nodes that get inserted. + """ + last_leaf = tree_nodes[-1].get_last_leaf() + is_endmarker = last_leaf.type == 'endmarker' + self._prefix_remainder = '' + if is_endmarker: + separation = max(last_leaf.prefix.rfind('\n'), last_leaf.prefix.rfind('\r')) + if separation > -1: + # Remove the whitespace part of the prefix after a newline. + # That is not relevant if parentheses were opened. Always parse + # until the end of a line. + last_leaf.prefix, self._prefix_remainder = \ + last_leaf.prefix[:separation + 1], last_leaf.prefix[separation + 1:] + + self.prefix = '' + + if is_endmarker: + self.prefix = last_leaf.prefix + + tree_nodes = tree_nodes[:-1] + return tree_nodes + + def copy_nodes(self, tree_nodes, until_line, line_offset): + """ + Copies tree nodes from the old parser tree. + + Returns the number of tree nodes that were copied. + """ + if tree_nodes[0].type in ('error_leaf', 'error_node'): + # Avoid copying errors in the beginning. Can lead to a lot of + # issues. + return [] + + self._get_insertion_node(tree_nodes[0]) + + new_nodes, self._working_stack, self.prefix = self._copy_nodes( + list(self._working_stack), + tree_nodes, + until_line, + line_offset, + self.prefix, + ) + return new_nodes + + def _copy_nodes(self, working_stack, nodes, until_line, line_offset, prefix=''): + new_nodes = [] + + new_prefix = '' + for node in nodes: + if node.start_pos[0] > until_line: + break + + if node.type == 'endmarker': + break + + if node.type == 'error_leaf' and node.token_type in ('DEDENT', 'ERROR_DEDENT'): + break + # TODO this check might take a bit of time for large files. We + # might want to change this to do more intelligent guessing or + # binary search. + if _get_last_line(node) > until_line: + # We can split up functions and classes later. + if _func_or_class_has_suite(node): + new_nodes.append(node) + break + + new_nodes.append(node) + + if not new_nodes: + return [], working_stack, prefix + + tos = working_stack[-1] + last_node = new_nodes[-1] + had_valid_suite_last = False + if _func_or_class_has_suite(last_node): + suite = last_node + while suite.type != 'suite': + suite = suite.children[-1] + + suite_tos = _NodesTreeNode(suite) + # Don't need to pass line_offset here, it's already done by the + # parent. + suite_nodes, new_working_stack, new_prefix = self._copy_nodes( + working_stack + [suite_tos], suite.children, until_line, line_offset + ) + if len(suite_nodes) < 2: + # A suite only with newline is not valid. + new_nodes.pop() + new_prefix = '' + else: + assert new_nodes + tos.add_child_node(suite_tos) + working_stack = new_working_stack + had_valid_suite_last = True + + if new_nodes: + last_node = new_nodes[-1] + if (last_node.type in ('error_leaf', 'error_node') or + _is_flow_node(new_nodes[-1])): + # Error leafs/nodes don't have a defined start/end. Error + # nodes might not end with a newline (e.g. if there's an + # open `(`). Therefore ignore all of them unless they are + # succeeded with valid parser state. + # If we copy flows at the end, they might be continued + # after the copy limit (in the new parser). + # In this while loop we try to remove until we find a newline. + new_prefix = '' + new_nodes.pop() + while new_nodes: + last_node = new_nodes[-1] + if last_node.get_last_leaf().type == 'newline': + break + new_nodes.pop() + + if new_nodes: + if not _ends_with_newline(new_nodes[-1].get_last_leaf()) and not had_valid_suite_last: + p = new_nodes[-1].get_next_leaf().prefix + # We are not allowed to remove the newline at the end of the + # line, otherwise it's going to be missing. This happens e.g. + # if a bracket is around before that moves newlines to + # prefixes. + new_prefix = split_lines(p, keepends=True)[0] + + if had_valid_suite_last: + last = new_nodes[-1] + if last.type == 'decorated': + last = last.children[-1] + if last.type in ('async_funcdef', 'async_stmt'): + last = last.children[-1] + last_line_offset_leaf = last.children[-2].get_last_leaf() + assert last_line_offset_leaf == ':' + else: + last_line_offset_leaf = new_nodes[-1].get_last_leaf() + tos.add_tree_nodes(prefix, new_nodes, line_offset, last_line_offset_leaf) + prefix = new_prefix + self._prefix_remainder = '' + + return new_nodes, working_stack, prefix + + def close(self): + self._base_node.finish() + + # Add an endmarker. + try: + last_leaf = self._module.get_last_leaf() + except IndexError: + end_pos = [1, 0] + else: + last_leaf = _skip_dedent_error_leaves(last_leaf) + end_pos = list(last_leaf.end_pos) + lines = split_lines(self.prefix) + assert len(lines) > 0 + if len(lines) == 1: + end_pos[1] += len(lines[0]) + else: + end_pos[0] += len(lines) - 1 + end_pos[1] = len(lines[-1]) + + endmarker = EndMarker('', tuple(end_pos), self.prefix + self._prefix_remainder) + endmarker.parent = self._module + self._module.children.append(endmarker) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/errors.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/errors.py new file mode 100644 index 0000000..b6e6e5e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/errors.py @@ -0,0 +1,1011 @@ +# -*- coding: utf-8 -*- +import codecs +import warnings +import re +from contextlib import contextmanager + +from parso.normalizer import Normalizer, NormalizerConfig, Issue, Rule +from parso.python.tree import search_ancestor + +_BLOCK_STMTS = ('if_stmt', 'while_stmt', 'for_stmt', 'try_stmt', 'with_stmt') +_STAR_EXPR_PARENTS = ('testlist_star_expr', 'testlist_comp', 'exprlist') +# This is the maximal block size given by python. +_MAX_BLOCK_SIZE = 20 +_MAX_INDENT_COUNT = 100 +ALLOWED_FUTURES = ( + 'all_feature_names', 'nested_scopes', 'generators', 'division', + 'absolute_import', 'with_statement', 'print_function', 'unicode_literals', +) +_COMP_FOR_TYPES = ('comp_for', 'sync_comp_for') + + +def _iter_stmts(scope): + """ + Iterates over all statements and splits up simple_stmt. + """ + for child in scope.children: + if child.type == 'simple_stmt': + for child2 in child.children: + if child2.type == 'newline' or child2 == ';': + continue + yield child2 + else: + yield child + + +def _get_comprehension_type(atom): + first, second = atom.children[:2] + if second.type == 'testlist_comp' and second.children[1].type in _COMP_FOR_TYPES: + if first == '[': + return 'list comprehension' + else: + return 'generator expression' + elif second.type == 'dictorsetmaker' and second.children[-1].type in _COMP_FOR_TYPES: + if second.children[1] == ':': + return 'dict comprehension' + else: + return 'set comprehension' + return None + + +def _is_future_import(import_from): + # It looks like a __future__ import that is relative is still a future + # import. That feels kind of odd, but whatever. + # if import_from.level != 0: + # return False + from_names = import_from.get_from_names() + return [n.value for n in from_names] == ['__future__'] + + +def _remove_parens(atom): + """ + Returns the inner part of an expression like `(foo)`. Also removes nested + parens. + """ + try: + children = atom.children + except AttributeError: + pass + else: + if len(children) == 3 and children[0] == '(': + return _remove_parens(atom.children[1]) + return atom + + +def _iter_params(parent_node): + return (n for n in parent_node.children if n.type == 'param') + + +def _is_future_import_first(import_from): + """ + Checks if the import is the first statement of a file. + """ + found_docstring = False + for stmt in _iter_stmts(import_from.get_root_node()): + if stmt.type == 'string' and not found_docstring: + continue + found_docstring = True + + if stmt == import_from: + return True + if stmt.type == 'import_from' and _is_future_import(stmt): + continue + return False + + +def _iter_definition_exprs_from_lists(exprlist): + for child in exprlist.children[::2]: + if child.type == 'atom' and child.children[0] in ('(', '['): + testlist_comp = child.children[0] + if testlist_comp.type == 'testlist_comp': + for expr in _iter_definition_exprs_from_lists(testlist_comp): + yield expr + continue + elif child.children[0] == '[': + yield testlist_comp + continue + + yield child + + +def _get_expr_stmt_definition_exprs(expr_stmt): + exprs = [] + for list_ in expr_stmt.children[:-2:2]: + if list_.type in ('testlist_star_expr', 'testlist'): + exprs += _iter_definition_exprs_from_lists(list_) + else: + exprs.append(list_) + return exprs + + +def _get_for_stmt_definition_exprs(for_stmt): + exprlist = for_stmt.children[1] + if exprlist.type != 'exprlist': + return [exprlist] + return list(_iter_definition_exprs_from_lists(exprlist)) + + +class _Context(object): + def __init__(self, node, add_syntax_error, parent_context=None): + self.node = node + self.blocks = [] + self.parent_context = parent_context + self._used_name_dict = {} + self._global_names = [] + self._nonlocal_names = [] + self._nonlocal_names_in_subscopes = [] + self._add_syntax_error = add_syntax_error + + def is_async_funcdef(self): + # Stupidly enough async funcdefs can have two different forms, + # depending if a decorator is used or not. + return self.is_function() \ + and self.node.parent.type in ('async_funcdef', 'async_stmt') + + def is_function(self): + return self.node.type == 'funcdef' + + def add_name(self, name): + parent_type = name.parent.type + if parent_type == 'trailer': + # We are only interested in first level names. + return + + if parent_type == 'global_stmt': + self._global_names.append(name) + elif parent_type == 'nonlocal_stmt': + self._nonlocal_names.append(name) + else: + self._used_name_dict.setdefault(name.value, []).append(name) + + def finalize(self): + """ + Returns a list of nonlocal names that need to be part of that scope. + """ + self._analyze_names(self._global_names, 'global') + self._analyze_names(self._nonlocal_names, 'nonlocal') + + # Python2.6 doesn't have dict comprehensions. + global_name_strs = dict((n.value, n) for n in self._global_names) + for nonlocal_name in self._nonlocal_names: + try: + global_name = global_name_strs[nonlocal_name.value] + except KeyError: + continue + + message = "name '%s' is nonlocal and global" % global_name.value + if global_name.start_pos < nonlocal_name.start_pos: + error_name = global_name + else: + error_name = nonlocal_name + self._add_syntax_error(error_name, message) + + nonlocals_not_handled = [] + for nonlocal_name in self._nonlocal_names_in_subscopes: + search = nonlocal_name.value + if search in global_name_strs or self.parent_context is None: + message = "no binding for nonlocal '%s' found" % nonlocal_name.value + self._add_syntax_error(nonlocal_name, message) + elif not self.is_function() or \ + nonlocal_name.value not in self._used_name_dict: + nonlocals_not_handled.append(nonlocal_name) + return self._nonlocal_names + nonlocals_not_handled + + def _analyze_names(self, globals_or_nonlocals, type_): + def raise_(message): + self._add_syntax_error(base_name, message % (base_name.value, type_)) + + params = [] + if self.node.type == 'funcdef': + params = self.node.get_params() + + for base_name in globals_or_nonlocals: + found_global_or_nonlocal = False + # Somehow Python does it the reversed way. + for name in reversed(self._used_name_dict.get(base_name.value, [])): + if name.start_pos > base_name.start_pos: + # All following names don't have to be checked. + found_global_or_nonlocal = True + + parent = name.parent + if parent.type == 'param' and parent.name == name: + # Skip those here, these definitions belong to the next + # scope. + continue + + if name.is_definition(): + if parent.type == 'expr_stmt' \ + and parent.children[1].type == 'annassign': + if found_global_or_nonlocal: + # If it's after the global the error seems to be + # placed there. + base_name = name + raise_("annotated name '%s' can't be %s") + break + else: + message = "name '%s' is assigned to before %s declaration" + else: + message = "name '%s' is used prior to %s declaration" + + if not found_global_or_nonlocal: + raise_(message) + # Only add an error for the first occurence. + break + + for param in params: + if param.name.value == base_name.value: + raise_("name '%s' is parameter and %s"), + + @contextmanager + def add_block(self, node): + self.blocks.append(node) + yield + self.blocks.pop() + + def add_context(self, node): + return _Context(node, self._add_syntax_error, parent_context=self) + + def close_child_context(self, child_context): + self._nonlocal_names_in_subscopes += child_context.finalize() + + +class ErrorFinder(Normalizer): + """ + Searches for errors in the syntax tree. + """ + def __init__(self, *args, **kwargs): + super(ErrorFinder, self).__init__(*args, **kwargs) + self._error_dict = {} + self.version = self.grammar.version_info + + def initialize(self, node): + def create_context(node): + if node is None: + return None + + parent_context = create_context(node.parent) + if node.type in ('classdef', 'funcdef', 'file_input'): + return _Context(node, self._add_syntax_error, parent_context) + return parent_context + + self.context = create_context(node) or _Context(node, self._add_syntax_error) + self._indentation_count = 0 + + def visit(self, node): + if node.type == 'error_node': + with self.visit_node(node): + # Don't need to investigate the inners of an error node. We + # might find errors in there that should be ignored, because + # the error node itself already shows that there's an issue. + return '' + return super(ErrorFinder, self).visit(node) + + @contextmanager + def visit_node(self, node): + self._check_type_rules(node) + + if node.type in _BLOCK_STMTS: + with self.context.add_block(node): + if len(self.context.blocks) == _MAX_BLOCK_SIZE: + self._add_syntax_error(node, "too many statically nested blocks") + yield + return + elif node.type == 'suite': + self._indentation_count += 1 + if self._indentation_count == _MAX_INDENT_COUNT: + self._add_indentation_error(node.children[1], "too many levels of indentation") + + yield + + if node.type == 'suite': + self._indentation_count -= 1 + elif node.type in ('classdef', 'funcdef'): + context = self.context + self.context = context.parent_context + self.context.close_child_context(context) + + def visit_leaf(self, leaf): + if leaf.type == 'error_leaf': + if leaf.token_type in ('INDENT', 'ERROR_DEDENT'): + # Indents/Dedents itself never have a prefix. They are just + # "pseudo" tokens that get removed by the syntax tree later. + # Therefore in case of an error we also have to check for this. + spacing = list(leaf.get_next_leaf()._split_prefix())[-1] + if leaf.token_type == 'INDENT': + message = 'unexpected indent' + else: + message = 'unindent does not match any outer indentation level' + self._add_indentation_error(spacing, message) + else: + if leaf.value.startswith('\\'): + message = 'unexpected character after line continuation character' + else: + match = re.match('\\w{,2}("{1,3}|\'{1,3})', leaf.value) + if match is None: + message = 'invalid syntax' + else: + if len(match.group(1)) == 1: + message = 'EOL while scanning string literal' + else: + message = 'EOF while scanning triple-quoted string literal' + self._add_syntax_error(leaf, message) + return '' + elif leaf.value == ':': + parent = leaf.parent + if parent.type in ('classdef', 'funcdef'): + self.context = self.context.add_context(parent) + + # The rest is rule based. + return super(ErrorFinder, self).visit_leaf(leaf) + + def _add_indentation_error(self, spacing, message): + self.add_issue(spacing, 903, "IndentationError: " + message) + + def _add_syntax_error(self, node, message): + self.add_issue(node, 901, "SyntaxError: " + message) + + def add_issue(self, node, code, message): + # Overwrite the default behavior. + # Check if the issues are on the same line. + line = node.start_pos[0] + args = (code, message, node) + self._error_dict.setdefault(line, args) + + def finalize(self): + self.context.finalize() + + for code, message, node in self._error_dict.values(): + self.issues.append(Issue(node, code, message)) + + +class IndentationRule(Rule): + code = 903 + + def _get_message(self, message): + message = super(IndentationRule, self)._get_message(message) + return "IndentationError: " + message + + +@ErrorFinder.register_rule(type='error_node') +class _ExpectIndentedBlock(IndentationRule): + message = 'expected an indented block' + + def get_node(self, node): + leaf = node.get_next_leaf() + return list(leaf._split_prefix())[-1] + + def is_issue(self, node): + # This is the beginning of a suite that is not indented. + return node.children[-1].type == 'newline' + + +class ErrorFinderConfig(NormalizerConfig): + normalizer_class = ErrorFinder + + +class SyntaxRule(Rule): + code = 901 + + def _get_message(self, message): + message = super(SyntaxRule, self)._get_message(message) + return "SyntaxError: " + message + + +@ErrorFinder.register_rule(type='error_node') +class _InvalidSyntaxRule(SyntaxRule): + message = "invalid syntax" + + def get_node(self, node): + return node.get_next_leaf() + + def is_issue(self, node): + # Error leafs will be added later as an error. + return node.get_next_leaf().type != 'error_leaf' + + +@ErrorFinder.register_rule(value='await') +class _AwaitOutsideAsync(SyntaxRule): + message = "'await' outside async function" + + def is_issue(self, leaf): + return not self._normalizer.context.is_async_funcdef() + + def get_error_node(self, node): + # Return the whole await statement. + return node.parent + + +@ErrorFinder.register_rule(value='break') +class _BreakOutsideLoop(SyntaxRule): + message = "'break' outside loop" + + def is_issue(self, leaf): + in_loop = False + for block in self._normalizer.context.blocks: + if block.type in ('for_stmt', 'while_stmt'): + in_loop = True + return not in_loop + + +@ErrorFinder.register_rule(value='continue') +class _ContinueChecks(SyntaxRule): + message = "'continue' not properly in loop" + message_in_finally = "'continue' not supported inside 'finally' clause" + + def is_issue(self, leaf): + in_loop = False + for block in self._normalizer.context.blocks: + if block.type in ('for_stmt', 'while_stmt'): + in_loop = True + if block.type == 'try_stmt': + last_block = block.children[-3] + if last_block == 'finally' and leaf.start_pos > last_block.start_pos: + self.add_issue(leaf, message=self.message_in_finally) + return False # Error already added + if not in_loop: + return True + + +@ErrorFinder.register_rule(value='from') +class _YieldFromCheck(SyntaxRule): + message = "'yield from' inside async function" + + def get_node(self, leaf): + return leaf.parent.parent # This is the actual yield statement. + + def is_issue(self, leaf): + return leaf.parent.type == 'yield_arg' \ + and self._normalizer.context.is_async_funcdef() + + +@ErrorFinder.register_rule(type='name') +class _NameChecks(SyntaxRule): + message = 'cannot assign to __debug__' + message_none = 'cannot assign to None' + + def is_issue(self, leaf): + self._normalizer.context.add_name(leaf) + + if leaf.value == '__debug__' and leaf.is_definition(): + return True + if leaf.value == 'None' and self._normalizer.version < (3, 0) \ + and leaf.is_definition(): + self.add_issue(leaf, message=self.message_none) + + +@ErrorFinder.register_rule(type='string') +class _StringChecks(SyntaxRule): + message = "bytes can only contain ASCII literal characters." + + def is_issue(self, leaf): + string_prefix = leaf.string_prefix.lower() + if 'b' in string_prefix \ + and self._normalizer.version >= (3, 0) \ + and any(c for c in leaf.value if ord(c) > 127): + # b'ä' + return True + + if 'r' not in string_prefix: + # Raw strings don't need to be checked if they have proper + # escaping. + is_bytes = self._normalizer.version < (3, 0) + if 'b' in string_prefix: + is_bytes = True + if 'u' in string_prefix: + is_bytes = False + + payload = leaf._get_payload() + if is_bytes: + payload = payload.encode('utf-8') + func = codecs.escape_decode + else: + func = codecs.unicode_escape_decode + + try: + with warnings.catch_warnings(): + # The warnings from parsing strings are not relevant. + warnings.filterwarnings('ignore') + func(payload) + except UnicodeDecodeError as e: + self.add_issue(leaf, message='(unicode error) ' + str(e)) + except ValueError as e: + self.add_issue(leaf, message='(value error) ' + str(e)) + + +@ErrorFinder.register_rule(value='*') +class _StarCheck(SyntaxRule): + message = "named arguments must follow bare *" + + def is_issue(self, leaf): + params = leaf.parent + if params.type == 'parameters' and params: + after = params.children[params.children.index(leaf) + 1:] + after = [child for child in after + if child not in (',', ')') and not child.star_count] + return len(after) == 0 + + +@ErrorFinder.register_rule(value='**') +class _StarStarCheck(SyntaxRule): + # e.g. {**{} for a in [1]} + # TODO this should probably get a better end_pos including + # the next sibling of leaf. + message = "dict unpacking cannot be used in dict comprehension" + + def is_issue(self, leaf): + if leaf.parent.type == 'dictorsetmaker': + comp_for = leaf.get_next_sibling().get_next_sibling() + return comp_for is not None and comp_for.type in _COMP_FOR_TYPES + + +@ErrorFinder.register_rule(value='yield') +@ErrorFinder.register_rule(value='return') +class _ReturnAndYieldChecks(SyntaxRule): + message = "'return' with value in async generator" + message_async_yield = "'yield' inside async function" + + def get_node(self, leaf): + return leaf.parent + + def is_issue(self, leaf): + if self._normalizer.context.node.type != 'funcdef': + self.add_issue(self.get_node(leaf), message="'%s' outside function" % leaf.value) + elif self._normalizer.context.is_async_funcdef() \ + and any(self._normalizer.context.node.iter_yield_exprs()): + if leaf.value == 'return' and leaf.parent.type == 'return_stmt': + return True + elif leaf.value == 'yield' \ + and leaf.get_next_leaf() != 'from' \ + and self._normalizer.version == (3, 5): + self.add_issue(self.get_node(leaf), message=self.message_async_yield) + + +@ErrorFinder.register_rule(type='strings') +class _BytesAndStringMix(SyntaxRule): + # e.g. 's' b'' + message = "cannot mix bytes and nonbytes literals" + + def _is_bytes_literal(self, string): + if string.type == 'fstring': + return False + return 'b' in string.string_prefix.lower() + + def is_issue(self, node): + first = node.children[0] + # In Python 2 it's allowed to mix bytes and unicode. + if self._normalizer.version >= (3, 0): + first_is_bytes = self._is_bytes_literal(first) + for string in node.children[1:]: + if first_is_bytes != self._is_bytes_literal(string): + return True + + +@ErrorFinder.register_rule(type='import_as_names') +class _TrailingImportComma(SyntaxRule): + # e.g. from foo import a, + message = "trailing comma not allowed without surrounding parentheses" + + def is_issue(self, node): + if node.children[-1] == ',': + return True + + +@ErrorFinder.register_rule(type='import_from') +class _ImportStarInFunction(SyntaxRule): + message = "import * only allowed at module level" + + def is_issue(self, node): + return node.is_star_import() and self._normalizer.context.parent_context is not None + + +@ErrorFinder.register_rule(type='import_from') +class _FutureImportRule(SyntaxRule): + message = "from __future__ imports must occur at the beginning of the file" + + def is_issue(self, node): + if _is_future_import(node): + if not _is_future_import_first(node): + return True + + for from_name, future_name in node.get_paths(): + name = future_name.value + allowed_futures = list(ALLOWED_FUTURES) + if self._normalizer.version >= (3, 5): + allowed_futures.append('generator_stop') + + if name == 'braces': + self.add_issue(node, message="not a chance") + elif name == 'barry_as_FLUFL': + m = "Seriously I'm not implementing this :) ~ Dave" + self.add_issue(node, message=m) + elif name not in ALLOWED_FUTURES: + message = "future feature %s is not defined" % name + self.add_issue(node, message=message) + + +@ErrorFinder.register_rule(type='star_expr') +class _StarExprRule(SyntaxRule): + message = "starred assignment target must be in a list or tuple" + message_iterable_unpacking = "iterable unpacking cannot be used in comprehension" + message_assignment = "can use starred expression only as assignment target" + + def is_issue(self, node): + if node.parent.type not in _STAR_EXPR_PARENTS: + return True + if node.parent.type == 'testlist_comp': + # [*[] for a in [1]] + if node.parent.children[1].type in _COMP_FOR_TYPES: + self.add_issue(node, message=self.message_iterable_unpacking) + if self._normalizer.version <= (3, 4): + n = search_ancestor(node, 'for_stmt', 'expr_stmt') + found_definition = False + if n is not None: + if n.type == 'expr_stmt': + exprs = _get_expr_stmt_definition_exprs(n) + else: + exprs = _get_for_stmt_definition_exprs(n) + if node in exprs: + found_definition = True + + if not found_definition: + self.add_issue(node, message=self.message_assignment) + + +@ErrorFinder.register_rule(types=_STAR_EXPR_PARENTS) +class _StarExprParentRule(SyntaxRule): + def is_issue(self, node): + if node.parent.type == 'del_stmt': + self.add_issue(node.parent, message="can't use starred expression here") + else: + def is_definition(node, ancestor): + if ancestor is None: + return False + + type_ = ancestor.type + if type_ == 'trailer': + return False + + if type_ == 'expr_stmt': + return node.start_pos < ancestor.children[-1].start_pos + + return is_definition(node, ancestor.parent) + + if is_definition(node, node.parent): + args = [c for c in node.children if c != ','] + starred = [c for c in args if c.type == 'star_expr'] + if len(starred) > 1: + message = "two starred expressions in assignment" + self.add_issue(starred[1], message=message) + elif starred: + count = args.index(starred[0]) + if count >= 256: + message = "too many expressions in star-unpacking assignment" + self.add_issue(starred[0], message=message) + + +@ErrorFinder.register_rule(type='annassign') +class _AnnotatorRule(SyntaxRule): + # True: int + # {}: float + message = "illegal target for annotation" + + def get_node(self, node): + return node.parent + + def is_issue(self, node): + type_ = None + lhs = node.parent.children[0] + lhs = _remove_parens(lhs) + try: + children = lhs.children + except AttributeError: + pass + else: + if ',' in children or lhs.type == 'atom' and children[0] == '(': + type_ = 'tuple' + elif lhs.type == 'atom' and children[0] == '[': + type_ = 'list' + trailer = children[-1] + + if type_ is None: + if not (lhs.type == 'name' + # subscript/attributes are allowed + or lhs.type in ('atom_expr', 'power') + and trailer.type == 'trailer' + and trailer.children[0] != '('): + return True + else: + # x, y: str + message = "only single target (not %s) can be annotated" + self.add_issue(lhs.parent, message=message % type_) + + +@ErrorFinder.register_rule(type='argument') +class _ArgumentRule(SyntaxRule): + def is_issue(self, node): + first = node.children[0] + if node.children[1] == '=' and first.type != 'name': + if first.type == 'lambdef': + # f(lambda: 1=1) + if self._normalizer.version < (3, 8): + message = "lambda cannot contain assignment" + else: + message = 'expression cannot contain assignment, perhaps you meant "=="?' + else: + # f(+x=1) + if self._normalizer.version < (3, 8): + message = "keyword can't be an expression" + else: + message = 'expression cannot contain assignment, perhaps you meant "=="?' + self.add_issue(first, message=message) + + +@ErrorFinder.register_rule(type='nonlocal_stmt') +class _NonlocalModuleLevelRule(SyntaxRule): + message = "nonlocal declaration not allowed at module level" + + def is_issue(self, node): + return self._normalizer.context.parent_context is None + + +@ErrorFinder.register_rule(type='arglist') +class _ArglistRule(SyntaxRule): + @property + def message(self): + if self._normalizer.version < (3, 7): + return "Generator expression must be parenthesized if not sole argument" + else: + return "Generator expression must be parenthesized" + + def is_issue(self, node): + first_arg = node.children[0] + if first_arg.type == 'argument' \ + and first_arg.children[1].type in _COMP_FOR_TYPES: + # e.g. foo(x for x in [], b) + return len(node.children) >= 2 + else: + arg_set = set() + kw_only = False + kw_unpacking_only = False + is_old_starred = False + # In python 3 this would be a bit easier (stars are part of + # argument), but we have to understand both. + for argument in node.children: + if argument == ',': + continue + + if argument in ('*', '**'): + # Python < 3.5 has the order engraved in the grammar + # file. No need to do anything here. + is_old_starred = True + continue + if is_old_starred: + is_old_starred = False + continue + + if argument.type == 'argument': + first = argument.children[0] + if first in ('*', '**'): + if first == '*': + if kw_unpacking_only: + # foo(**kwargs, *args) + message = "iterable argument unpacking " \ + "follows keyword argument unpacking" + self.add_issue(argument, message=message) + else: + kw_unpacking_only = True + else: # Is a keyword argument. + kw_only = True + if first.type == 'name': + if first.value in arg_set: + # f(x=1, x=2) + self.add_issue(first, message="keyword argument repeated") + else: + arg_set.add(first.value) + else: + if kw_unpacking_only: + # f(**x, y) + message = "positional argument follows keyword argument unpacking" + self.add_issue(argument, message=message) + elif kw_only: + # f(x=2, y) + message = "positional argument follows keyword argument" + self.add_issue(argument, message=message) + + +@ErrorFinder.register_rule(type='parameters') +@ErrorFinder.register_rule(type='lambdef') +class _ParameterRule(SyntaxRule): + # def f(x=3, y): pass + message = "non-default argument follows default argument" + + def is_issue(self, node): + param_names = set() + default_only = False + for p in _iter_params(node): + if p.name.value in param_names: + message = "duplicate argument '%s' in function definition" + self.add_issue(p.name, message=message % p.name.value) + param_names.add(p.name.value) + + if p.default is None and not p.star_count: + if default_only: + return True + else: + default_only = True + + +@ErrorFinder.register_rule(type='try_stmt') +class _TryStmtRule(SyntaxRule): + message = "default 'except:' must be last" + + def is_issue(self, try_stmt): + default_except = None + for except_clause in try_stmt.children[3::3]: + if except_clause in ('else', 'finally'): + break + if except_clause == 'except': + default_except = except_clause + elif default_except is not None: + self.add_issue(default_except, message=self.message) + + +@ErrorFinder.register_rule(type='fstring') +class _FStringRule(SyntaxRule): + _fstring_grammar = None + message_nested = "f-string: expressions nested too deeply" + message_conversion = "f-string: invalid conversion character: expected 's', 'r', or 'a'" + + def _check_format_spec(self, format_spec, depth): + self._check_fstring_contents(format_spec.children[1:], depth) + + def _check_fstring_expr(self, fstring_expr, depth): + if depth >= 2: + self.add_issue(fstring_expr, message=self.message_nested) + + conversion = fstring_expr.children[2] + if conversion.type == 'fstring_conversion': + name = conversion.children[1] + if name.value not in ('s', 'r', 'a'): + self.add_issue(name, message=self.message_conversion) + + format_spec = fstring_expr.children[-2] + if format_spec.type == 'fstring_format_spec': + self._check_format_spec(format_spec, depth + 1) + + def is_issue(self, fstring): + self._check_fstring_contents(fstring.children[1:-1]) + + def _check_fstring_contents(self, children, depth=0): + for fstring_content in children: + if fstring_content.type == 'fstring_expr': + self._check_fstring_expr(fstring_content, depth) + + +class _CheckAssignmentRule(SyntaxRule): + def _check_assignment(self, node, is_deletion=False): + error = None + type_ = node.type + if type_ == 'lambdef': + error = 'lambda' + elif type_ == 'atom': + first, second = node.children[:2] + error = _get_comprehension_type(node) + if error is None: + if second.type == 'dictorsetmaker': + if self._normalizer.version < (3, 8): + error = 'literal' + else: + if second.children[1] == ':': + error = 'dict display' + else: + error = 'set display' + elif first in ('(', '['): + if second.type == 'yield_expr': + error = 'yield expression' + elif second.type == 'testlist_comp': + # This is not a comprehension, they were handled + # further above. + for child in second.children[::2]: + self._check_assignment(child, is_deletion) + else: # Everything handled, must be useless brackets. + self._check_assignment(second, is_deletion) + elif type_ == 'keyword': + if self._normalizer.version < (3, 8): + error = 'keyword' + else: + error = str(node.value) + elif type_ == 'operator': + if node.value == '...': + error = 'Ellipsis' + elif type_ == 'comparison': + error = 'comparison' + elif type_ in ('string', 'number', 'strings'): + error = 'literal' + elif type_ == 'yield_expr': + # This one seems to be a slightly different warning in Python. + message = 'assignment to yield expression not possible' + self.add_issue(node, message=message) + elif type_ == 'test': + error = 'conditional expression' + elif type_ in ('atom_expr', 'power'): + if node.children[0] == 'await': + error = 'await expression' + elif node.children[-2] == '**': + error = 'operator' + else: + # Has a trailer + trailer = node.children[-1] + assert trailer.type == 'trailer' + if trailer.children[0] == '(': + error = 'function call' + elif type_ in ('testlist_star_expr', 'exprlist', 'testlist'): + for child in node.children[::2]: + self._check_assignment(child, is_deletion) + elif ('expr' in type_ and type_ != 'star_expr' # is a substring + or '_test' in type_ + or type_ in ('term', 'factor')): + error = 'operator' + + if error is not None: + cannot = "can't" if self._normalizer.version < (3, 8) else "cannot" + message = ' '.join([cannot, "delete" if is_deletion else "assign to", error]) + self.add_issue(node, message=message) + + +@ErrorFinder.register_rule(type='sync_comp_for') +class _CompForRule(_CheckAssignmentRule): + message = "asynchronous comprehension outside of an asynchronous function" + + def is_issue(self, node): + expr_list = node.children[1] + print(expr_list) + if expr_list.type != 'expr_list': # Already handled. + self._check_assignment(expr_list) + + return node.parent.children[0] == 'async' \ + and not self._normalizer.context.is_async_funcdef() + + +@ErrorFinder.register_rule(type='expr_stmt') +class _ExprStmtRule(_CheckAssignmentRule): + message = "illegal expression for augmented assignment" + + def is_issue(self, node): + for before_equal in node.children[:-2:2]: + self._check_assignment(before_equal) + + augassign = node.children[1] + if augassign != '=' and augassign.type != 'annassign': # Is augassign. + return node.children[0].type in ('testlist_star_expr', 'atom', 'testlist') + + +@ErrorFinder.register_rule(type='with_item') +class _WithItemRule(_CheckAssignmentRule): + def is_issue(self, with_item): + self._check_assignment(with_item.children[2]) + + +@ErrorFinder.register_rule(type='del_stmt') +class _DelStmtRule(_CheckAssignmentRule): + def is_issue(self, del_stmt): + child = del_stmt.children[1] + + if child.type != 'expr_list': # Already handled. + self._check_assignment(child, is_deletion=True) + + +@ErrorFinder.register_rule(type='expr_list') +class _ExprListRule(_CheckAssignmentRule): + def is_issue(self, expr_list): + for expr in expr_list.children[::2]: + self._check_assignment(expr) + + +@ErrorFinder.register_rule(type='for_stmt') +class _ForStmtRule(_CheckAssignmentRule): + def is_issue(self, for_stmt): + # Some of the nodes here are already used, so no else if + expr_list = for_stmt.children[1] + if expr_list.type != 'expr_list': # Already handled. + self._check_assignment(expr_list) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar26.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar26.txt new file mode 100644 index 0000000..d9cede2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar26.txt @@ -0,0 +1,159 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Commands for Kees Blom's railroad program +#diagram:token NAME +#diagram:token NUMBER +#diagram:token STRING +#diagram:token NEWLINE +#diagram:token ENDMARKER +#diagram:token INDENT +#diagram:output\input python.bla +#diagram:token DEDENT +#diagram:output\textwidth 20.04cm\oddsidemargin 0.0cm\evensidemargin 0.0cm +#diagram:rules + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ':' suite +parameters: '(' [varargslist] ')' +varargslist: ((fpdef ['=' test] ',')* + ('*' NAME [',' '**' NAME] | '**' NAME) | + fpdef ['=' test] (',' fpdef ['=' test])* [',']) +fpdef: NAME | '(' fplist ')' +fplist: fpdef (',' fpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist))*) +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test [',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item ':' suite +# Dave: Python2.6 actually defines a little bit of a different label called +# 'with_var'. However in 2.7+ this is the default. Apply it for +# consistency reasons. +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [('as' | ',') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [listmaker] ']' | + '{' [dictorsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | strings) +strings: STRING+ +listmaker: test ( list_for | (',' test)* [','] ) +# Dave: Renamed testlist_gexpr to testlist_comp, because in 2.7+ this is the +# default. It's more consistent like this. +testlist_comp: test ( gen_for | (',' test)* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: '.' '.' '.' | test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: expr (',' expr)* [','] +testlist: test (',' test)* [','] +# Dave: Rename from dictmaker to dictorsetmaker, because this is more +# consistent with the following grammars. +dictorsetmaker: test ':' test (',' test ':' test)* [','] + +classdef: 'class' NAME ['(' [testlist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +argument: test [gen_for] | test '=' test # Really [keyword '='] test + +list_iter: list_for | list_if +list_for: 'for' exprlist 'in' testlist_safe [list_iter] +list_if: 'if' old_test [list_iter] + +gen_iter: gen_for | gen_if +gen_for: 'for' exprlist 'in' or_test [gen_iter] +gen_if: 'if' old_test [gen_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [testlist] diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar27.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar27.txt new file mode 100644 index 0000000..ddb6847 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar27.txt @@ -0,0 +1,143 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() and input() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ':' suite +parameters: '(' [varargslist] ')' +varargslist: ((fpdef ['=' test] ',')* + ('*' NAME [',' '**' NAME] | '**' NAME) | + fpdef ['=' test] (',' fpdef ['=' test])* [',']) +fpdef: NAME | '(' fplist ')' +fplist: fpdef (',' fpdef)* [','] + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | exec_stmt | assert_stmt) +expr_stmt: testlist (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist))*) +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +print_stmt: 'print' ( [ test (',' test)* [','] ] | + '>>' test [ (',' test)+ [','] ] ) +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test [',' test [',' test]]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +import_from: ('from' ('.'* dotted_name | '.'+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +exec_stmt: 'exec' expr ['in' test [',' test]] +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test [('as' | ',') test]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +# Backward compatibility cruft to support: +# [ x for x in lambda: True, lambda: False if x() ] +# even while also allowing: +# lambda x: 5 if x else 2 +# (But not a mix of the two) +testlist_safe: old_test [(',' old_test)+ [',']] +old_test: or_test | old_lambdef +old_lambdef: 'lambda' [varargslist] ':' old_test + +test: or_test ['if' or_test 'else' test] | lambdef +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [listmaker] ']' | + '{' [dictorsetmaker] '}' | + '`' testlist1 '`' | + NAME | NUMBER | strings) +strings: STRING+ +listmaker: test ( list_for | (',' test)* [','] ) +testlist_comp: test ( sync_comp_for | (',' test)* [','] ) +lambdef: 'lambda' [varargslist] ':' test +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: '.' '.' '.' | test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: expr (',' expr)* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [testlist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test + +list_iter: list_for | list_if +list_for: 'for' exprlist 'in' testlist_safe [list_iter] +list_if: 'if' old_test [list_iter] + +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' old_test [comp_iter] + +testlist1: test (',' test)* + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [testlist] diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar33.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar33.txt new file mode 100644 index 0000000..787a166 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar33.txt @@ -0,0 +1,134 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed in PEP 306, +# "How to Change Python's Grammar" + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test # Really [keyword '='] test +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar34.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar34.txt new file mode 100644 index 0000000..2b497d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar34.txt @@ -0,0 +1,134 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef) +funcdef: 'def' NAME parameters ['->' test] ':' suite +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom trailer* ['**' factor] +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( (test ':' test (sync_comp_for | (',' test ':' test)* [','])) | + (test (sync_comp_for | (',' test)* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: (argument ',')* (argument [','] + |'*' test (',' argument)* [',' '**' test] + |'**' test) +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +argument: test [sync_comp_for] | test '=' test # Really [keyword '='] test +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar35.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar35.txt new file mode 100644 index 0000000..e2ee9c7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar35.txt @@ -0,0 +1,153 @@ +# Grammar for Python + +# Note: Changing the grammar specified in this file will most likely +# require corresponding changes in the parser module +# (../Modules/parsermodule.c). If you can't make the changes to +# that module yourself, please co-ordinate the required changes +# with someone who can; ask around on python-dev for help. Fred +# Drake will probably be listening there. + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +# NOTE: Reinoud Elhorst, using ASYNC/AWAIT keywords instead of tokens +# skipping python3.5 compatibility, in favour of 3.7 solution +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' + ['*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' '**' tfpdef] | '**' tfpdef) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' + ['*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' '**' vfpdef] | '**' vfpdef) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +strings: STRING+ +testlist_comp: (test|star_expr) ( sync_comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (sync_comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (sync_comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [sync_comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: sync_comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar36.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar36.txt new file mode 100644 index 0000000..3e1e3e2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar36.txt @@ -0,0 +1,158 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +# NOTE: Francisco Souza/Reinoud Elhorst, using ASYNC/'await' keywords instead of +# skipping python3.5+ compatibility, in favour of 3.7 solution +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist_comp [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar37.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar37.txt new file mode 100644 index 0000000..3090b93 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar37.txt @@ -0,0 +1,156 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://docs.python.org/devguide/grammar.html + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +tfpdef: NAME [':' test] +varargslist: (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite] +while_stmt: 'while' test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar38.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar38.txt new file mode 100644 index 0000000..1cea0fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/grammar38.txt @@ -0,0 +1,171 @@ +# Grammar for Python + +# NOTE WELL: You should also follow all the steps listed at +# https://devguide.python.org/grammar/ + +# Start symbols for the grammar: +# single_input is a single interactive statement; +# file_input is a module or sequence of commands read from an input file; +# eval_input is the input for the eval() functions. +# NB: compound_stmt in single_input is followed by extra NEWLINE! +single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE +file_input: (NEWLINE | stmt)* ENDMARKER +eval_input: testlist NEWLINE* ENDMARKER + +decorator: '@' dotted_name [ '(' [arglist] ')' ] NEWLINE +decorators: decorator+ +decorated: decorators (classdef | funcdef | async_funcdef) + +async_funcdef: 'async' funcdef +funcdef: 'def' NAME parameters ['->' test] ':' suite + +parameters: '(' [typedargslist] ')' +typedargslist: ( + (tfpdef ['=' test] (',' tfpdef ['=' test])* ',' '/' [',' [ tfpdef ['=' test] ( + ',' tfpdef ['=' test])* ([',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]]) + | '*' [tfpdef] (',' tfpdef ['=' test])* ([',' ['**' tfpdef [',']]]) + | '**' tfpdef [',']]] ) +| (tfpdef ['=' test] (',' tfpdef ['=' test])* [',' [ + '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']]] + | '*' [tfpdef] (',' tfpdef ['=' test])* [',' ['**' tfpdef [',']]] + | '**' tfpdef [',']) +) +tfpdef: NAME [':' test] +varargslist: vfpdef ['=' test ](',' vfpdef ['=' test])* ',' '/' [',' [ (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']) ]] | (vfpdef ['=' test] (',' vfpdef ['=' test])* [',' [ + '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [',']]] + | '*' [vfpdef] (',' vfpdef ['=' test])* [',' ['**' vfpdef [',']]] + | '**' vfpdef [','] +) +vfpdef: NAME + +stmt: simple_stmt | compound_stmt +simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE +small_stmt: (expr_stmt | del_stmt | pass_stmt | flow_stmt | + import_stmt | global_stmt | nonlocal_stmt | assert_stmt) +expr_stmt: testlist_star_expr (annassign | augassign (yield_expr|testlist) | + ('=' (yield_expr|testlist_star_expr))*) +annassign: ':' test ['=' test] +testlist_star_expr: (test|star_expr) (',' (test|star_expr))* [','] +augassign: ('+=' | '-=' | '*=' | '@=' | '/=' | '%=' | '&=' | '|=' | '^=' | + '<<=' | '>>=' | '**=' | '//=') +# For normal and annotated assignments, additional restrictions enforced by the interpreter +del_stmt: 'del' exprlist +pass_stmt: 'pass' +flow_stmt: break_stmt | continue_stmt | return_stmt | raise_stmt | yield_stmt +break_stmt: 'break' +continue_stmt: 'continue' +return_stmt: 'return' [testlist_star_expr] +yield_stmt: yield_expr +raise_stmt: 'raise' [test ['from' test]] +import_stmt: import_name | import_from +import_name: 'import' dotted_as_names +# note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS +import_from: ('from' (('.' | '...')* dotted_name | ('.' | '...')+) + 'import' ('*' | '(' import_as_names ')' | import_as_names)) +import_as_name: NAME ['as' NAME] +dotted_as_name: dotted_name ['as' NAME] +import_as_names: import_as_name (',' import_as_name)* [','] +dotted_as_names: dotted_as_name (',' dotted_as_name)* +dotted_name: NAME ('.' NAME)* +global_stmt: 'global' NAME (',' NAME)* +nonlocal_stmt: 'nonlocal' NAME (',' NAME)* +assert_stmt: 'assert' test [',' test] + +compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | with_stmt | funcdef | classdef | decorated | async_stmt +async_stmt: 'async' (funcdef | with_stmt | for_stmt) +if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite] +while_stmt: 'while' namedexpr_test ':' suite ['else' ':' suite] +for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] +try_stmt: ('try' ':' suite + ((except_clause ':' suite)+ + ['else' ':' suite] + ['finally' ':' suite] | + 'finally' ':' suite)) +with_stmt: 'with' with_item (',' with_item)* ':' suite +with_item: test ['as' expr] +# NB compile.c makes sure that the default except clause is last +except_clause: 'except' [test ['as' NAME]] +suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT + +namedexpr_test: test [':=' test] +test: or_test ['if' or_test 'else' test] | lambdef +test_nocond: or_test | lambdef_nocond +lambdef: 'lambda' [varargslist] ':' test +lambdef_nocond: 'lambda' [varargslist] ':' test_nocond +or_test: and_test ('or' and_test)* +and_test: not_test ('and' not_test)* +not_test: 'not' not_test | comparison +comparison: expr (comp_op expr)* +# <> isn't actually a valid comparison operator in Python. It's here for the +# sake of a __future__ import described in PEP 401 (which really works :-) +comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' +star_expr: '*' expr +expr: xor_expr ('|' xor_expr)* +xor_expr: and_expr ('^' and_expr)* +and_expr: shift_expr ('&' shift_expr)* +shift_expr: arith_expr (('<<'|'>>') arith_expr)* +arith_expr: term (('+'|'-') term)* +term: factor (('*'|'@'|'/'|'%'|'//') factor)* +factor: ('+'|'-'|'~') factor | power +power: atom_expr ['**' factor] +atom_expr: ['await'] atom trailer* +atom: ('(' [yield_expr|testlist_comp] ')' | + '[' [testlist_comp] ']' | + '{' [dictorsetmaker] '}' | + NAME | NUMBER | strings | '...' | 'None' | 'True' | 'False') +testlist_comp: (namedexpr_test|star_expr) ( comp_for | (',' (namedexpr_test|star_expr))* [','] ) +trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME +subscriptlist: subscript (',' subscript)* [','] +subscript: test | [test] ':' [test] [sliceop] +sliceop: ':' [test] +exprlist: (expr|star_expr) (',' (expr|star_expr))* [','] +testlist: test (',' test)* [','] +dictorsetmaker: ( ((test ':' test | '**' expr) + (comp_for | (',' (test ':' test | '**' expr))* [','])) | + ((test | star_expr) + (comp_for | (',' (test | star_expr))* [','])) ) + +classdef: 'class' NAME ['(' [arglist] ')'] ':' suite + +arglist: argument (',' argument)* [','] + +# The reason that keywords are test nodes instead of NAME is that using NAME +# results in an ambiguity. ast.c makes sure it's a NAME. +# "test '=' test" is really "keyword '=' test", but we have no such token. +# These need to be in a single rule to avoid grammar that is ambiguous +# to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, +# we explicitly match '*' here, too, to give it proper precedence. +# Illegal combinations and orderings are blocked in ast.c: +# multiple (test comp_for) arguments are blocked; keyword unpackings +# that precede iterable unpackings are blocked; etc. +argument: ( test [comp_for] | + test ':=' test | + test '=' test | + '**' test | + '*' test ) + +comp_iter: comp_for | comp_if +sync_comp_for: 'for' exprlist 'in' or_test [comp_iter] +comp_for: ['async'] sync_comp_for +comp_if: 'if' test_nocond [comp_iter] + +# not used in grammar, but may appear in "node" passed from Parser to Compiler +encoding_decl: NAME + +yield_expr: 'yield' [yield_arg] +yield_arg: 'from' test | testlist_star_expr + +strings: (STRING | fstring)+ +fstring: FSTRING_START fstring_content* FSTRING_END +fstring_content: FSTRING_STRING | fstring_expr +fstring_conversion: '!' NAME +fstring_expr: '{' testlist ['='] [ fstring_conversion ] [ fstring_format_spec ] '}' +fstring_format_spec: ':' fstring_content* diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/issue_list.txt b/vim/bundle/jedi-vim/pythonx/parso/parso/python/issue_list.txt new file mode 100644 index 0000000..e5e2c9d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/issue_list.txt @@ -0,0 +1,176 @@ +A list of syntax/indentation errors I've encountered in CPython. + +# Python/compile.c + "'continue' not properly in loop" + "'continue' not supported inside 'finally' clause" # Until loop + "default 'except:' must be last" + "from __future__ imports must occur at the beginning of the file" + "'return' outside function" + "'return' with value in async generator" + "'break' outside loop" + "two starred expressions in assignment" + "asynchronous comprehension outside of an asynchronous function" + "'yield' outside function" # For both yield and yield from + "'yield from' inside async function" + "'await' outside function" + "'await' outside async function" + "starred assignment target must be in a list or tuple" + "can't use starred expression here" + "too many statically nested blocks" # Max. 20 + # This is one of the few places in the cpython code base that I really + # don't understand. It feels a bit hacky if you look at the implementation + # of UNPACK_EX. + "too many expressions in star-unpacking assignment" + + # Just ignore this one, newer versions will not be affected anymore and + # it's a limit of 2^16 - 1. + "too many annotations" # Only python 3.0 - 3.5, 3.6 is not affected. + +# Python/ast.c + # used with_item exprlist expr_stmt + "can't %s %s" % ("assign to" or "delete", + "lambda" + "function call" # foo() + "generator expression" + "list comprehension" + "set comprehension" + "dict comprehension" + "keyword" + "Ellipsis" + "comparison" + Dict: Set: Num: Str: Bytes: JoinedStr: FormattedValue: + "literal" + BoolOp: BinOp: UnaryOp: + "operator" + Yield: YieldFrom: + "yield expression" + Await: + "await expression" + IfExp: + "conditional expression" + "assignment to keyword" # (keywords + __debug__) # None = 2 + "named arguments must follow bare *" # def foo(*): pass + "non-default argument follows default argument" # def f(x=3, y): pass + "iterable unpacking cannot be used in comprehension" # [*[] for a in [1]] + "dict unpacking cannot be used in dict comprehension" # {**{} for a in [1]} + "Generator expression must be parenthesized if not sole argument" # foo(x for x in [], b) + "positional argument follows keyword argument unpacking" # f(**x, y) >= 3.5 + "positional argument follows keyword argument" # f(x=2, y) >= 3.5 + "iterable argument unpacking follows keyword argument unpacking" # foo(**kwargs, *args) + "lambda cannot contain assignment" # f(lambda: 1=1) + "keyword can't be an expression" # f(+x=1) + "keyword argument repeated" # f(x=1, x=2) + "illegal expression for augmented assignment" # x, y += 1 + "only single target (not list) can be annotated" # [x, y]: int + "only single target (not tuple) can be annotated" # x, y: str + "illegal target for annotation" # True: 1` + "trailing comma not allowed without surrounding parentheses" # from foo import a, + "bytes can only contain ASCII literal characters." # b'ä' # prob. only python 3 + "cannot mix bytes and nonbytes literals" # 's' b'' + "assignment to yield expression not possible" # x = yield 1 = 3 + + "f-string: empty expression not allowed" # f'{}' + "f-string: single '}' is not allowed" # f'}' + "f-string: expressions nested too deeply" # f'{1:{5:{3}}}' + "f-string expression part cannot include a backslash" # f'{"\"}' or f'{"\\"}' + "f-string expression part cannot include '#'" # f'{#}' + "f-string: unterminated string" # f'{"}' + "f-string: mismatched '(', '{', or '['" + "f-string: invalid conversion character: expected 's', 'r', or 'a'" # f'{1!b}' + "f-string: unexpected end of string" # Doesn't really happen?! + "f-string: expecting '}'" # f'{' + "(unicode error) unknown error + "(value error) unknown error + "(unicode error) MESSAGE + MESSAGES = { + "\\ at end of string" + "truncated \\xXX escape" + "truncated \\uXXXX escape" + "truncated \\UXXXXXXXX escape" + "illegal Unicode character" # '\Uffffffff' + "malformed \\N character escape" # '\N{}' + "unknown Unicode character name" # '\N{foo}' + } + "(value error) MESSAGE # bytes + MESSAGES = { + "Trailing \\ in string" + "invalid \\x escape at position %d" + } + + "invalid escape sequence \\%c" # Only happens when used in `python -W error` + "unexpected node" # Probably irrelevant + "Unexpected node-type in from-import" # Irrelevant, doesn't happen. + "malformed 'try' statement" # Irrelevant, doesn't happen. + +# Python/symtable.c + "duplicate argument '%U' in function definition" + "name '%U' is assigned to before global declaration" + "name '%U' is assigned to before nonlocal declaration" + "name '%U' is used prior to global declaration" + "name '%U' is used prior to nonlocal declaration" + "annotated name '%U' can't be global" + "annotated name '%U' can't be nonlocal" + "import * only allowed at module level" + + "name '%U' is parameter and global", + "name '%U' is nonlocal and global", + "name '%U' is parameter and nonlocal", + + "nonlocal declaration not allowed at module level"); + "no binding for nonlocal '%U' found", + # RecursionError. Not handled. For all human written code, this is probably + # not an issue. eval("()"*x) with x>=2998 for example fails, but that's + # more than 2000 executions on one line. + "maximum recursion depth exceeded during compilation"); + +# Python/future.c + "not a chance" + "future feature %.100s is not defined" + "from __future__ imports must occur at the beginning of the file" # Also in compile.c + +# Parser/tokenizer.c + # All the following issues seem to be irrelevant for parso, because the + # encoding stuff is done before it reaches the tokenizer. It's already + # unicode at that point. + "encoding problem: %s" + "encoding problem: %s with BOM" + "Non-UTF-8 code starting with '\\x%.2x' in file %U on line %i, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details" + +# Parser/pythonrun.c + E_SYNTAX: "invalid syntax" + E_LINECONT: "unexpected character after line continuation character" + E_IDENTIFIER: "invalid character in identifier" + # Also just use 'invalid syntax'. Happens mostly with stuff like `(`. This + # message doesn't really help the user, because it only appears very + # randomly, e.g. `(or` wouldn't yield this error. + E_EOF: "unexpected EOF while parsing" + # Even in 3.6 this is implemented kind of shaky. Not implemented, I think + # cPython needs to fix this one first. + # e.g. `ast.parse('def x():\n\t if 1:\n \t \tpass')` works :/ + E_TABSPACE: "inconsistent use of tabs and spaces in indentation" + # Ignored, just shown as "invalid syntax". The error has mostly to do with + # numbers like 0b2 everywhere or 1.6_ in Python3.6. + E_TOKEN: "invalid token" + E_EOFS: "EOF while scanning triple-quoted string literal" + E_EOLS: "EOL while scanning string literal" + + # IndentationError + E_DEDENT: "unindent does not match any outer indentation level" + E_TOODEEP: "too many levels of indentation" # 100 levels + E_SYNTAX: "expected an indented block" + "unexpected indent" + # I don't think this actually ever happens. + "unexpected unindent" + + + # Irrelevant for parso for now. + E_OVERFLOW: "expression too long" + E_DECODE: "unknown decode error" + E_BADSINGLE: "multiple statements found while compiling a single statement" + + +Version specific: +Python 3.5: + 'yield' inside async function +Python 3.3/3.4: + can use starred expression only as assignment target diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/parser.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/parser.py new file mode 100644 index 0000000..46bdc77 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/parser.py @@ -0,0 +1,218 @@ +from parso.python import tree +from parso.python.token import PythonTokenTypes +from parso.parser import BaseParser + + +NAME = PythonTokenTypes.NAME +INDENT = PythonTokenTypes.INDENT +DEDENT = PythonTokenTypes.DEDENT + + +class Parser(BaseParser): + """ + This class is used to parse a Python file, it then divides them into a + class structure of different scopes. + + :param pgen_grammar: The grammar object of pgen2. Loaded by load_grammar. + """ + + node_map = { + 'expr_stmt': tree.ExprStmt, + 'classdef': tree.Class, + 'funcdef': tree.Function, + 'file_input': tree.Module, + 'import_name': tree.ImportName, + 'import_from': tree.ImportFrom, + 'break_stmt': tree.KeywordStatement, + 'continue_stmt': tree.KeywordStatement, + 'return_stmt': tree.ReturnStmt, + 'raise_stmt': tree.KeywordStatement, + 'yield_expr': tree.YieldExpr, + 'del_stmt': tree.KeywordStatement, + 'pass_stmt': tree.KeywordStatement, + 'global_stmt': tree.GlobalStmt, + 'nonlocal_stmt': tree.KeywordStatement, + 'print_stmt': tree.KeywordStatement, + 'assert_stmt': tree.AssertStmt, + 'if_stmt': tree.IfStmt, + 'with_stmt': tree.WithStmt, + 'for_stmt': tree.ForStmt, + 'while_stmt': tree.WhileStmt, + 'try_stmt': tree.TryStmt, + 'sync_comp_for': tree.SyncCompFor, + # Not sure if this is the best idea, but IMO it's the easiest way to + # avoid extreme amounts of work around the subtle difference of 2/3 + # grammar in list comoprehensions. + 'list_for': tree.SyncCompFor, + # Same here. This just exists in Python 2.6. + 'gen_for': tree.SyncCompFor, + 'decorator': tree.Decorator, + 'lambdef': tree.Lambda, + 'old_lambdef': tree.Lambda, + 'lambdef_nocond': tree.Lambda, + } + default_node = tree.PythonNode + + # Names/Keywords are handled separately + _leaf_map = { + PythonTokenTypes.STRING: tree.String, + PythonTokenTypes.NUMBER: tree.Number, + PythonTokenTypes.NEWLINE: tree.Newline, + PythonTokenTypes.ENDMARKER: tree.EndMarker, + PythonTokenTypes.FSTRING_STRING: tree.FStringString, + PythonTokenTypes.FSTRING_START: tree.FStringStart, + PythonTokenTypes.FSTRING_END: tree.FStringEnd, + } + + def __init__(self, pgen_grammar, error_recovery=True, start_nonterminal='file_input'): + super(Parser, self).__init__(pgen_grammar, start_nonterminal, + error_recovery=error_recovery) + + self.syntax_errors = [] + self._omit_dedent_list = [] + self._indent_counter = 0 + + def parse(self, tokens): + if self._error_recovery: + if self._start_nonterminal != 'file_input': + raise NotImplementedError + + tokens = self._recovery_tokenize(tokens) + + return super(Parser, self).parse(tokens) + + def convert_node(self, nonterminal, children): + """ + Convert raw node information to a PythonBaseNode instance. + + This is passed to the parser driver which calls it whenever a reduction of a + grammar rule produces a new complete node, so that the tree is build + strictly bottom-up. + """ + try: + node = self.node_map[nonterminal](children) + except KeyError: + if nonterminal == 'suite': + # We don't want the INDENT/DEDENT in our parser tree. Those + # leaves are just cancer. They are virtual leaves and not real + # ones and therefore have pseudo start/end positions and no + # prefixes. Just ignore them. + children = [children[0]] + children[2:-1] + elif nonterminal == 'list_if': + # Make transitioning from 2 to 3 easier. + nonterminal = 'comp_if' + elif nonterminal == 'listmaker': + # Same as list_if above. + nonterminal = 'testlist_comp' + node = self.default_node(nonterminal, children) + for c in children: + c.parent = node + return node + + def convert_leaf(self, type, value, prefix, start_pos): + # print('leaf', repr(value), token.tok_name[type]) + if type == NAME: + if value in self._pgen_grammar.reserved_syntax_strings: + return tree.Keyword(value, start_pos, prefix) + else: + return tree.Name(value, start_pos, prefix) + + return self._leaf_map.get(type, tree.Operator)(value, start_pos, prefix) + + def error_recovery(self, token): + tos_nodes = self.stack[-1].nodes + if tos_nodes: + last_leaf = tos_nodes[-1].get_last_leaf() + else: + last_leaf = None + + if self._start_nonterminal == 'file_input' and \ + (token.type == PythonTokenTypes.ENDMARKER + or token.type == DEDENT and '\n' not in last_leaf.value + and '\r' not in last_leaf.value): + # In Python statements need to end with a newline. But since it's + # possible (and valid in Python ) that there's no newline at the + # end of a file, we have to recover even if the user doesn't want + # error recovery. + if self.stack[-1].dfa.from_rule == 'simple_stmt': + try: + plan = self.stack[-1].dfa.transitions[PythonTokenTypes.NEWLINE] + except KeyError: + pass + else: + if plan.next_dfa.is_final and not plan.dfa_pushes: + # We are ignoring here that the newline would be + # required for a simple_stmt. + self.stack[-1].dfa = plan.next_dfa + self._add_token(token) + return + + if not self._error_recovery: + return super(Parser, self).error_recovery(token) + + def current_suite(stack): + # For now just discard everything that is not a suite or + # file_input, if we detect an error. + for until_index, stack_node in reversed(list(enumerate(stack))): + # `suite` can sometimes be only simple_stmt, not stmt. + if stack_node.nonterminal == 'file_input': + break + elif stack_node.nonterminal == 'suite': + # In the case where we just have a newline we don't want to + # do error recovery here. In all other cases, we want to do + # error recovery. + if len(stack_node.nodes) != 1: + break + return until_index + + until_index = current_suite(self.stack) + + if self._stack_removal(until_index + 1): + self._add_token(token) + else: + typ, value, start_pos, prefix = token + if typ == INDENT: + # For every deleted INDENT we have to delete a DEDENT as well. + # Otherwise the parser will get into trouble and DEDENT too early. + self._omit_dedent_list.append(self._indent_counter) + + error_leaf = tree.PythonErrorLeaf(typ.name, value, start_pos, prefix) + self.stack[-1].nodes.append(error_leaf) + + tos = self.stack[-1] + if tos.nonterminal == 'suite': + # Need at least one statement in the suite. This happend with the + # error recovery above. + try: + tos.dfa = tos.dfa.arcs['stmt'] + except KeyError: + # We're already in a final state. + pass + + def _stack_removal(self, start_index): + all_nodes = [node for stack_node in self.stack[start_index:] for node in stack_node.nodes] + + if all_nodes: + node = tree.PythonErrorNode(all_nodes) + for n in all_nodes: + n.parent = node + self.stack[start_index - 1].nodes.append(node) + + self.stack[start_index:] = [] + return bool(all_nodes) + + def _recovery_tokenize(self, tokens): + for token in tokens: + typ = token[0] + if typ == DEDENT: + # We need to count indents, because if we just omit any DEDENT, + # we might omit them in the wrong place. + o = self._omit_dedent_list + if o and o[-1] == self._indent_counter: + o.pop() + continue + + self._indent_counter -= 1 + elif typ == INDENT: + self._indent_counter += 1 + yield token diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/pep8.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/pep8.py new file mode 100644 index 0000000..2a037f9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/pep8.py @@ -0,0 +1,727 @@ +import re +from contextlib import contextmanager + +from parso.python.errors import ErrorFinder, ErrorFinderConfig +from parso.normalizer import Rule +from parso.python.tree import search_ancestor, Flow, Scope + + +_IMPORT_TYPES = ('import_name', 'import_from') +_SUITE_INTRODUCERS = ('classdef', 'funcdef', 'if_stmt', 'while_stmt', + 'for_stmt', 'try_stmt', 'with_stmt') +_NON_STAR_TYPES = ('term', 'import_from', 'power') +_OPENING_BRACKETS = '(', '[', '{' +_CLOSING_BRACKETS = ')', ']', '}' +_FACTOR = '+', '-', '~' +_ALLOW_SPACE = '*', '+', '-', '**', '/', '//', '@' +_BITWISE_OPERATOR = '<<', '>>', '|', '&', '^' +_NEEDS_SPACE = ('=', '%', '->', + '<', '>', '==', '>=', '<=', '<>', '!=', + '+=', '-=', '*=', '@=', '/=', '%=', '&=', '|=', '^=', '<<=', + '>>=', '**=', '//=') +_NEEDS_SPACE += _BITWISE_OPERATOR +_IMPLICIT_INDENTATION_TYPES = ('dictorsetmaker', 'argument') +_POSSIBLE_SLICE_PARENTS = ('subscript', 'subscriptlist', 'sliceop') + + +class IndentationTypes(object): + VERTICAL_BRACKET = object() + HANGING_BRACKET = object() + BACKSLASH = object() + SUITE = object() + IMPLICIT = object() + + +class IndentationNode(object): + type = IndentationTypes.SUITE + + def __init__(self, config, indentation, parent=None): + self.bracket_indentation = self.indentation = indentation + self.parent = parent + + def __repr__(self): + return '<%s>' % self.__class__.__name__ + + def get_latest_suite_node(self): + n = self + while n is not None: + if n.type == IndentationTypes.SUITE: + return n + + n = n.parent + + +class BracketNode(IndentationNode): + def __init__(self, config, leaf, parent, in_suite_introducer=False): + self.leaf = leaf + + # Figure out here what the indentation is. For chained brackets + # we can basically use the previous indentation. + previous_leaf = leaf + n = parent + if n.type == IndentationTypes.IMPLICIT: + n = n.parent + while True: + if hasattr(n, 'leaf') and previous_leaf.line != n.leaf.line: + break + + previous_leaf = previous_leaf.get_previous_leaf() + if not isinstance(n, BracketNode) or previous_leaf != n.leaf: + break + n = n.parent + parent_indentation = n.indentation + + + next_leaf = leaf.get_next_leaf() + if '\n' in next_leaf.prefix: + # This implies code like: + # foobarbaz( + # a, + # b, + # ) + self.bracket_indentation = parent_indentation \ + + config.closing_bracket_hanging_indentation + self.indentation = parent_indentation + config.indentation + self.type = IndentationTypes.HANGING_BRACKET + else: + # Implies code like: + # foobarbaz( + # a, + # b, + # ) + expected_end_indent = leaf.end_pos[1] + if '\t' in config.indentation: + self.indentation = None + else: + self.indentation = ' ' * expected_end_indent + self.bracket_indentation = self.indentation + self.type = IndentationTypes.VERTICAL_BRACKET + + if in_suite_introducer and parent.type == IndentationTypes.SUITE \ + and self.indentation == parent_indentation + config.indentation: + self.indentation += config.indentation + # The closing bracket should have the same indentation. + self.bracket_indentation = self.indentation + self.parent = parent + + +class ImplicitNode(BracketNode): + """ + Implicit indentation after keyword arguments, default arguments, + annotations and dict values. + """ + def __init__(self, config, leaf, parent): + super(ImplicitNode, self).__init__(config, leaf, parent) + self.type = IndentationTypes.IMPLICIT + + next_leaf = leaf.get_next_leaf() + if leaf == ':' and '\n' not in next_leaf.prefix: + self.indentation += ' ' + + +class BackslashNode(IndentationNode): + type = IndentationTypes.BACKSLASH + + def __init__(self, config, parent_indentation, containing_leaf, spacing, parent=None): + expr_stmt = search_ancestor(containing_leaf, 'expr_stmt') + if expr_stmt is not None: + equals = expr_stmt.children[-2] + + if '\t' in config.indentation: + # TODO unite with the code of BracketNode + self.indentation = None + else: + # If the backslash follows the equals, use normal indentation + # otherwise it should align with the equals. + if equals.end_pos == spacing.start_pos: + self.indentation = parent_indentation + config.indentation + else: + # +1 because there is a space. + self.indentation = ' ' * (equals.end_pos[1] + 1) + else: + self.indentation = parent_indentation + config.indentation + self.bracket_indentation = self.indentation + self.parent = parent + + +def _is_magic_name(name): + return name.value.startswith('__') and name.value.endswith('__') + + +class PEP8Normalizer(ErrorFinder): + def __init__(self, *args, **kwargs): + super(PEP8Normalizer, self).__init__(*args, **kwargs) + self._previous_part = None + self._previous_leaf = None + self._on_newline = True + self._newline_count = 0 + self._wanted_newline_count = None + self._max_new_lines_in_prefix = 0 + self._new_statement = True + self._implicit_indentation_possible = False + # The top of stack of the indentation nodes. + self._indentation_tos = self._last_indentation_tos = \ + IndentationNode(self._config, indentation='') + self._in_suite_introducer = False + + if ' ' in self._config.indentation: + self._indentation_type = 'spaces' + self._wrong_indentation_char = '\t' + else: + self._indentation_type = 'tabs' + self._wrong_indentation_char = ' ' + + @contextmanager + def visit_node(self, node): + with super(PEP8Normalizer, self).visit_node(node): + with self._visit_node(node): + yield + + @contextmanager + def _visit_node(self, node): + typ = node.type + + if typ in 'import_name': + names = node.get_defined_names() + if len(names) > 1: + for name in names[:1]: + self.add_issue(name, 401, 'Multiple imports on one line') + elif typ == 'lambdef': + expr_stmt = node.parent + # Check if it's simply defining a single name, not something like + # foo.bar or x[1], where using a lambda could make more sense. + if expr_stmt.type == 'expr_stmt' and any(n.type == 'name' for n in expr_stmt.children[:-2:2]): + self.add_issue(node, 731, 'Do not assign a lambda expression, use a def') + elif typ == 'try_stmt': + for child in node.children: + # Here we can simply check if it's an except, because otherwise + # it would be an except_clause. + if child.type == 'keyword' and child.value == 'except': + self.add_issue(child, 722, 'Do not use bare except, specify exception instead') + elif typ == 'comparison': + for child in node.children: + if child.type not in ('atom_expr', 'power'): + continue + if len(child.children) > 2: + continue + trailer = child.children[1] + atom = child.children[0] + if trailer.type == 'trailer' and atom.type == 'name' \ + and atom.value == 'type': + self.add_issue(node, 721, "Do not compare types, use 'isinstance()") + break + elif typ == 'file_input': + endmarker = node.children[-1] + prev = endmarker.get_previous_leaf() + prefix = endmarker.prefix + if (not prefix.endswith('\n') and ( + prefix or prev is None or prev.value != '\n')): + self.add_issue(endmarker, 292, "No newline at end of file") + + if typ in _IMPORT_TYPES: + simple_stmt = node.parent + module = simple_stmt.parent + #if module.type == 'simple_stmt': + if module.type == 'file_input': + index = module.children.index(simple_stmt) + for child in module.children[:index]: + children = [child] + if child.type == 'simple_stmt': + # Remove the newline. + children = child.children[:-1] + + found_docstring = False + for c in children: + if c.type == 'string' and not found_docstring: + continue + found_docstring = True + + if c.type == 'expr_stmt' and \ + all(_is_magic_name(n) for n in c.get_defined_names()): + continue + + if c.type in _IMPORT_TYPES or isinstance(c, Flow): + continue + + self.add_issue(node, 402, 'Module level import not at top of file') + break + else: + continue + break + + implicit_indentation_possible = typ in _IMPLICIT_INDENTATION_TYPES + in_introducer = typ in _SUITE_INTRODUCERS + if in_introducer: + self._in_suite_introducer = True + elif typ == 'suite': + if self._indentation_tos.type == IndentationTypes.BACKSLASH: + self._indentation_tos = self._indentation_tos.parent + + self._indentation_tos = IndentationNode( + self._config, + self._indentation_tos.indentation + self._config.indentation, + parent=self._indentation_tos + ) + elif implicit_indentation_possible: + self._implicit_indentation_possible = True + yield + if typ == 'suite': + assert self._indentation_tos.type == IndentationTypes.SUITE + self._indentation_tos = self._indentation_tos.parent + # If we dedent, no lines are needed anymore. + self._wanted_newline_count = None + elif implicit_indentation_possible: + self._implicit_indentation_possible = False + if self._indentation_tos.type == IndentationTypes.IMPLICIT: + self._indentation_tos = self._indentation_tos.parent + elif in_introducer: + self._in_suite_introducer = False + if typ in ('classdef', 'funcdef'): + self._wanted_newline_count = self._get_wanted_blank_lines_count() + + def _check_tabs_spaces(self, spacing): + if self._wrong_indentation_char in spacing.value: + self.add_issue(spacing, 101, 'Indentation contains ' + self._indentation_type) + return True + return False + + def _get_wanted_blank_lines_count(self): + suite_node = self._indentation_tos.get_latest_suite_node() + return int(suite_node.parent is None) + 1 + + def _reset_newlines(self, spacing, leaf, is_comment=False): + self._max_new_lines_in_prefix = \ + max(self._max_new_lines_in_prefix, self._newline_count) + + wanted = self._wanted_newline_count + if wanted is not None: + # Need to substract one + blank_lines = self._newline_count - 1 + if wanted > blank_lines and leaf.type != 'endmarker': + # In case of a comment we don't need to add the issue, yet. + if not is_comment: + # TODO end_pos wrong. + code = 302 if wanted == 2 else 301 + message = "expected %s blank line, found %s" \ + % (wanted, blank_lines) + self.add_issue(spacing, code, message) + self._wanted_newline_count = None + else: + self._wanted_newline_count = None + + if not is_comment: + wanted = self._get_wanted_blank_lines_count() + actual = self._max_new_lines_in_prefix - 1 + + val = leaf.value + needs_lines = ( + val == '@' and leaf.parent.type == 'decorator' + or ( + val == 'class' + or val == 'async' and leaf.get_next_leaf() == 'def' + or val == 'def' and self._previous_leaf != 'async' + ) and leaf.parent.parent.type != 'decorated' + ) + if needs_lines and actual < wanted: + func_or_cls = leaf.parent + suite = func_or_cls.parent + if suite.type == 'decorated': + suite = suite.parent + + # The first leaf of a file or a suite should not need blank + # lines. + if suite.children[int(suite.type == 'suite')] != func_or_cls: + code = 302 if wanted == 2 else 301 + message = "expected %s blank line, found %s" \ + % (wanted, actual) + self.add_issue(spacing, code, message) + + self._max_new_lines_in_prefix = 0 + + self._newline_count = 0 + + def visit_leaf(self, leaf): + super(PEP8Normalizer, self).visit_leaf(leaf) + for part in leaf._split_prefix(): + if part.type == 'spacing': + # This part is used for the part call after for. + break + self._visit_part(part, part.create_spacing_part(), leaf) + + self._analyse_non_prefix(leaf) + self._visit_part(leaf, part, leaf) + + # Cleanup + self._last_indentation_tos = self._indentation_tos + + self._new_statement = leaf.type == 'newline' + + # TODO does this work? with brackets and stuff? + if leaf.type == 'newline' and \ + self._indentation_tos.type == IndentationTypes.BACKSLASH: + self._indentation_tos = self._indentation_tos.parent + + if leaf.value == ':' and leaf.parent.type in _SUITE_INTRODUCERS: + self._in_suite_introducer = False + elif leaf.value == 'elif': + self._in_suite_introducer = True + + if not self._new_statement: + self._reset_newlines(part, leaf) + self._max_blank_lines = 0 + + self._previous_leaf = leaf + + return leaf.value + + def _visit_part(self, part, spacing, leaf): + value = part.value + type_ = part.type + if type_ == 'error_leaf': + return + + if value == ',' and part.parent.type == 'dictorsetmaker': + self._indentation_tos = self._indentation_tos.parent + + node = self._indentation_tos + + if type_ == 'comment': + if value.startswith('##'): + # Whole blocks of # should not raise an error. + if value.lstrip('#'): + self.add_issue(part, 266, "Too many leading '#' for block comment.") + elif self._on_newline: + if not re.match(r'#:? ', value) and not value == '#' \ + and not (value.startswith('#!') and part.start_pos == (1, 0)): + self.add_issue(part, 265, "Block comment should start with '# '") + else: + if not re.match(r'#:? [^ ]', value): + self.add_issue(part, 262, "Inline comment should start with '# '") + + self._reset_newlines(spacing, leaf, is_comment=True) + elif type_ == 'newline': + if self._newline_count > self._get_wanted_blank_lines_count(): + self.add_issue(part, 303, "Too many blank lines (%s)" % self._newline_count) + elif leaf in ('def', 'class') \ + and leaf.parent.parent.type == 'decorated': + self.add_issue(part, 304, "Blank lines found after function decorator") + + + self._newline_count += 1 + + if type_ == 'backslash': + # TODO is this enough checking? What about ==? + if node.type != IndentationTypes.BACKSLASH: + if node.type != IndentationTypes.SUITE: + self.add_issue(part, 502, 'The backslash is redundant between brackets') + else: + indentation = node.indentation + if self._in_suite_introducer and node.type == IndentationTypes.SUITE: + indentation += self._config.indentation + + self._indentation_tos = BackslashNode( + self._config, + indentation, + part, + spacing, + parent=self._indentation_tos + ) + elif self._on_newline: + indentation = spacing.value + if node.type == IndentationTypes.BACKSLASH \ + and self._previous_part.type == 'newline': + self._indentation_tos = self._indentation_tos.parent + + if not self._check_tabs_spaces(spacing): + should_be_indentation = node.indentation + if type_ == 'comment': + # Comments can be dedented. So we have to care for that. + n = self._last_indentation_tos + while True: + if len(indentation) > len(n.indentation): + break + + should_be_indentation = n.indentation + + self._last_indentation_tos = n + if n == node: + break + n = n.parent + + if self._new_statement: + if type_ == 'newline': + if indentation: + self.add_issue(spacing, 291, 'Trailing whitespace') + elif indentation != should_be_indentation: + s = '%s %s' % (len(self._config.indentation), self._indentation_type) + self.add_issue(part, 111, 'Indentation is not a multiple of ' + s) + else: + if value in '])}': + should_be_indentation = node.bracket_indentation + else: + should_be_indentation = node.indentation + if self._in_suite_introducer and indentation == \ + node.get_latest_suite_node().indentation \ + + self._config.indentation: + self.add_issue(part, 129, "Line with same indent as next logical block") + elif indentation != should_be_indentation: + if not self._check_tabs_spaces(spacing) and part.value != '\n': + if value in '])}': + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 124, "Closing bracket does not match visual indentation") + else: + self.add_issue(part, 123, "Losing bracket does not match indentation of opening bracket's line") + else: + if len(indentation) < len(should_be_indentation): + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 128, 'Continuation line under-indented for visual indent') + elif node.type == IndentationTypes.BACKSLASH: + self.add_issue(part, 122, 'Continuation line missing indentation or outdented') + elif node.type == IndentationTypes.IMPLICIT: + self.add_issue(part, 135, 'xxx') + else: + self.add_issue(part, 121, 'Continuation line under-indented for hanging indent') + else: + if node.type == IndentationTypes.VERTICAL_BRACKET: + self.add_issue(part, 127, 'Continuation line over-indented for visual indent') + elif node.type == IndentationTypes.IMPLICIT: + self.add_issue(part, 136, 'xxx') + else: + self.add_issue(part, 126, 'Continuation line over-indented for hanging indent') + else: + self._check_spacing(part, spacing) + + self._check_line_length(part, spacing) + # ------------------------------- + # Finalizing. Updating the state. + # ------------------------------- + if value and value in '()[]{}' and type_ != 'error_leaf' \ + and part.parent.type != 'error_node': + if value in _OPENING_BRACKETS: + self._indentation_tos = BracketNode( + self._config, part, + parent=self._indentation_tos, + in_suite_introducer=self._in_suite_introducer + ) + else: + assert node.type != IndentationTypes.IMPLICIT + self._indentation_tos = self._indentation_tos.parent + elif value in ('=', ':') and self._implicit_indentation_possible \ + and part.parent.type in _IMPLICIT_INDENTATION_TYPES: + indentation = node.indentation + self._indentation_tos = ImplicitNode( + self._config, part, parent=self._indentation_tos + ) + + self._on_newline = type_ in ('newline', 'backslash', 'bom') + + self._previous_part = part + self._previous_spacing = spacing + + def _check_line_length(self, part, spacing): + if part.type == 'backslash': + last_column = part.start_pos[1] + 1 + else: + last_column = part.end_pos[1] + if last_column > self._config.max_characters \ + and spacing.start_pos[1] <= self._config.max_characters : + # Special case for long URLs in multi-line docstrings or comments, + # but still report the error when the 72 first chars are whitespaces. + report = True + if part.type == 'comment': + splitted = part.value[1:].split() + if len(splitted) == 1 \ + and (part.end_pos[1] - len(splitted[0])) < 72: + report = False + if report: + self.add_issue( + part, + 501, + 'Line too long (%s > %s characters)' % + (last_column, self._config.max_characters), + ) + + def _check_spacing(self, part, spacing): + def add_if_spaces(*args): + if spaces: + return self.add_issue(*args) + + def add_not_spaces(*args): + if not spaces: + return self.add_issue(*args) + + spaces = spacing.value + prev = self._previous_part + if prev is not None and prev.type == 'error_leaf' or part.type == 'error_leaf': + return + + type_ = part.type + if '\t' in spaces: + self.add_issue(spacing, 223, 'Used tab to separate tokens') + elif type_ == 'comment': + if len(spaces) < self._config.spaces_before_comment: + self.add_issue(spacing, 261, 'At least two spaces before inline comment') + elif type_ == 'newline': + add_if_spaces(spacing, 291, 'Trailing whitespace') + elif len(spaces) > 1: + self.add_issue(spacing, 221, 'Multiple spaces used') + else: + if prev in _OPENING_BRACKETS: + message = "Whitespace after '%s'" % part.value + add_if_spaces(spacing, 201, message) + elif part in _CLOSING_BRACKETS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 202, message) + elif part in (',', ';') or part == ':' \ + and part.parent.type not in _POSSIBLE_SLICE_PARENTS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 203, message) + elif prev == ':' and prev.parent.type in _POSSIBLE_SLICE_PARENTS: + pass # TODO + elif prev in (',', ';', ':'): + add_not_spaces(spacing, 231, "missing whitespace after '%s'") + elif part == ':': # Is a subscript + # TODO + pass + elif part in ('*', '**') and part.parent.type not in _NON_STAR_TYPES \ + or prev in ('*', '**') \ + and prev.parent.type not in _NON_STAR_TYPES: + # TODO + pass + elif prev in _FACTOR and prev.parent.type == 'factor': + pass + elif prev == '@' and prev.parent.type == 'decorator': + pass # TODO should probably raise an error if there's a space here + elif part in _NEEDS_SPACE or prev in _NEEDS_SPACE: + if part == '=' and part.parent.type in ('argument', 'param') \ + or prev == '=' and prev.parent.type in ('argument', 'param'): + if part == '=': + param = part.parent + else: + param = prev.parent + if param.type == 'param' and param.annotation: + add_not_spaces(spacing, 252, 'Expected spaces around annotation equals') + else: + add_if_spaces(spacing, 251, 'Unexpected spaces around keyword / parameter equals') + elif part in _BITWISE_OPERATOR or prev in _BITWISE_OPERATOR: + add_not_spaces(spacing, 227, 'Missing whitespace around bitwise or shift operator') + elif part == '%' or prev == '%': + add_not_spaces(spacing, 228, 'Missing whitespace around modulo operator') + else: + message_225 = 'Missing whitespace between tokens' + add_not_spaces(spacing, 225, message_225) + elif type_ == 'keyword' or prev.type == 'keyword': + add_not_spaces(spacing, 275, 'Missing whitespace around keyword') + else: + prev_spacing = self._previous_spacing + if prev in _ALLOW_SPACE and spaces != prev_spacing.value \ + and '\n' not in self._previous_leaf.prefix: + message = "Whitespace before operator doesn't match with whitespace after" + self.add_issue(spacing, 229, message) + + if spaces and part not in _ALLOW_SPACE and prev not in _ALLOW_SPACE: + message_225 = 'Missing whitespace between tokens' + #print('xy', spacing) + #self.add_issue(spacing, 225, message_225) + # TODO why only brackets? + if part in _OPENING_BRACKETS: + message = "Whitespace before '%s'" % part.value + add_if_spaces(spacing, 211, message) + + def _analyse_non_prefix(self, leaf): + typ = leaf.type + if typ == 'name' and leaf.value in ('l', 'O', 'I'): + if leaf.is_definition(): + message = "Do not define %s named 'l', 'O', or 'I' one line" + if leaf.parent.type == 'class' and leaf.parent.name == leaf: + self.add_issue(leaf, 742, message % 'classes') + elif leaf.parent.type == 'function' and leaf.parent.name == leaf: + self.add_issue(leaf, 743, message % 'function') + else: + self.add_issuadd_issue(741, message % 'variables', leaf) + elif leaf.value == ':': + if isinstance(leaf.parent, (Flow, Scope)) and leaf.parent.type != 'lambdef': + next_leaf = leaf.get_next_leaf() + if next_leaf.type != 'newline': + if leaf.parent.type == 'funcdef': + self.add_issue(next_leaf, 704, 'Multiple statements on one line (def)') + else: + self.add_issue(next_leaf, 701, 'Multiple statements on one line (colon)') + elif leaf.value == ';': + if leaf.get_next_leaf().type in ('newline', 'endmarker'): + self.add_issue(leaf, 703, 'Statement ends with a semicolon') + else: + self.add_issue(leaf, 702, 'Multiple statements on one line (semicolon)') + elif leaf.value in ('==', '!='): + comparison = leaf.parent + index = comparison.children.index(leaf) + left = comparison.children[index - 1] + right = comparison.children[index + 1] + for node in left, right: + if node.type == 'keyword' or node.type == 'name': + if node.value == 'None': + message = "comparison to None should be 'if cond is None:'" + self.add_issue(leaf, 711, message) + break + elif node.value in ('True', 'False'): + message = "comparison to False/True should be 'if cond is True:' or 'if cond:'" + self.add_issue(leaf, 712, message) + break + elif leaf.value in ('in', 'is'): + comparison = leaf.parent + if comparison.type == 'comparison' and comparison.parent.type == 'not_test': + if leaf.value == 'in': + self.add_issue(leaf, 713, "test for membership should be 'not in'") + else: + self.add_issue(leaf, 714, "test for object identity should be 'is not'") + elif typ == 'string': + # Checking multiline strings + for i, line in enumerate(leaf.value.splitlines()[1:]): + indentation = re.match(r'[ \t]*', line).group(0) + start_pos = leaf.line + i, len(indentation) + # TODO check multiline indentation. + elif typ == 'endmarker': + if self._newline_count >= 2: + self.add_issue(leaf, 391, 'Blank line at end of file') + + def add_issue(self, node, code, message): + if self._previous_leaf is not None: + if search_ancestor(self._previous_leaf, 'error_node') is not None: + return + if self._previous_leaf.type == 'error_leaf': + return + if search_ancestor(node, 'error_node') is not None: + return + if code in (901, 903): + # 901 and 903 are raised by the ErrorFinder. + super(PEP8Normalizer, self).add_issue(node, code, message) + else: + # Skip ErrorFinder here, because it has custom behavior. + super(ErrorFinder, self).add_issue(node, code, message) + + +class PEP8NormalizerConfig(ErrorFinderConfig): + normalizer_class = PEP8Normalizer + """ + Normalizing to PEP8. Not really implemented, yet. + """ + def __init__(self, indentation=' ' * 4, hanging_indentation=None, + max_characters=79, spaces_before_comment=2): + self.indentation = indentation + if hanging_indentation is None: + hanging_indentation = indentation + self.hanging_indentation = hanging_indentation + self.closing_bracket_hanging_indentation = '' + self.break_after_binary = False + self.max_characters = max_characters + self.spaces_before_comment = spaces_before_comment + + +# TODO this is not yet ready. +#@PEP8Normalizer.register_rule(type='endmarker') +class BlankLineAtEnd(Rule): + code = 392 + message = 'Blank line at end of file' + + def is_issue(self, leaf): + return self._newline_count >= 2 diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/prefix.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/prefix.py new file mode 100644 index 0000000..b7f1e1b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/prefix.py @@ -0,0 +1,97 @@ +import re +from codecs import BOM_UTF8 + +from parso.python.tokenize import group + +unicode_bom = BOM_UTF8.decode('utf-8') + + +class PrefixPart(object): + def __init__(self, leaf, typ, value, spacing='', start_pos=None): + assert start_pos is not None + self.parent = leaf + self.type = typ + self.value = value + self.spacing = spacing + self.start_pos = start_pos + + @property + def end_pos(self): + if self.value.endswith('\n'): + return self.start_pos[0] + 1, 0 + if self.value == unicode_bom: + # The bom doesn't have a length at the start of a Python file. + return self.start_pos + return self.start_pos[0], self.start_pos[1] + len(self.value) + + def create_spacing_part(self): + column = self.start_pos[1] - len(self.spacing) + return PrefixPart( + self.parent, 'spacing', self.spacing, + start_pos=(self.start_pos[0], column) + ) + + def __repr__(self): + return '%s(%s, %s, %s)' % ( + self.__class__.__name__, + self.type, + repr(self.value), + self.start_pos + ) + + +_comment = r'#[^\n\r\f]*' +_backslash = r'\\\r?\n' +_newline = r'\r?\n' +_form_feed = r'\f' +_only_spacing = '$' +_spacing = r'[ \t]*' +_bom = unicode_bom + +_regex = group( + _comment, _backslash, _newline, _form_feed, _only_spacing, _bom, + capture=True +) +_regex = re.compile(group(_spacing, capture=True) + _regex) + + +_types = { + '#': 'comment', + '\\': 'backslash', + '\f': 'formfeed', + '\n': 'newline', + '\r': 'newline', + unicode_bom: 'bom' +} + + +def split_prefix(leaf, start_pos): + line, column = start_pos + start = 0 + value = spacing = '' + bom = False + while start != len(leaf.prefix): + match =_regex.match(leaf.prefix, start) + spacing = match.group(1) + value = match.group(2) + if not value: + break + type_ = _types[value[0]] + yield PrefixPart( + leaf, type_, value, spacing, + start_pos=(line, column + start - int(bom) + len(spacing)) + ) + if type_ == 'bom': + bom = True + + start = match.end(0) + if value.endswith('\n'): + line += 1 + column = -start + + if value: + spacing = '' + yield PrefixPart( + leaf, 'spacing', spacing, + start_pos=(line, column + start) + ) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.py new file mode 100644 index 0000000..bb86ec9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.py @@ -0,0 +1,27 @@ +from __future__ import absolute_import + + +class TokenType(object): + def __init__(self, name, contains_syntax=False): + self.name = name + self.contains_syntax = contains_syntax + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, self.name) + + +class TokenTypes(object): + """ + Basically an enum, but Python 2 doesn't have enums in the standard library. + """ + def __init__(self, names, contains_syntax): + for name in names: + setattr(self, name, TokenType(name, contains_syntax=name in contains_syntax)) + + +PythonTokenTypes = TokenTypes(( + 'STRING', 'NUMBER', 'NAME', 'ERRORTOKEN', 'NEWLINE', 'INDENT', 'DEDENT', + 'ERROR_DEDENT', 'FSTRING_STRING', 'FSTRING_START', 'FSTRING_END', 'OP', + 'ENDMARKER'), + contains_syntax=('NAME', 'OP'), +) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.pyi new file mode 100644 index 0000000..48e8dac --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/token.pyi @@ -0,0 +1,30 @@ +from typing import Container, Iterable + +class TokenType: + name: str + contains_syntax: bool + def __init__(self, name: str, contains_syntax: bool) -> None: ... + +class TokenTypes: + def __init__( + self, names: Iterable[str], contains_syntax: Container[str] + ) -> None: ... + +# not an actual class in the source code, but we need this class to type the fields of +# PythonTokenTypes +class _FakePythonTokenTypesClass(TokenTypes): + STRING: TokenType + NUMBER: TokenType + NAME: TokenType + ERRORTOKEN: TokenType + NEWLINE: TokenType + INDENT: TokenType + DEDENT: TokenType + ERROR_DEDENT: TokenType + FSTRING_STRING: TokenType + FSTRING_START: TokenType + FSTRING_END: TokenType + OP: TokenType + ENDMARKER: TokenType + +PythonTokenTypes: _FakePythonTokenTypesClass = ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.py new file mode 100644 index 0000000..48d128b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.py @@ -0,0 +1,686 @@ +# -*- coding: utf-8 -*- +""" +This tokenizer has been copied from the ``tokenize.py`` standard library +tokenizer. The reason was simple: The standard library tokenizer fails +if the indentation is not right. To make it possible to do error recovery the + tokenizer needed to be rewritten. + +Basically this is a stripped down version of the standard library module, so +you can read the documentation there. Additionally we included some speed and +memory optimizations here. +""" +from __future__ import absolute_import + +import sys +import string +import re +from collections import namedtuple +import itertools as _itertools +from codecs import BOM_UTF8 + +from parso.python.token import PythonTokenTypes +from parso._compatibility import py_version +from parso.utils import split_lines + + +# Maximum code point of Unicode 6.0: 0x10ffff (1,114,111) +MAX_UNICODE = '\U0010ffff' + +STRING = PythonTokenTypes.STRING +NAME = PythonTokenTypes.NAME +NUMBER = PythonTokenTypes.NUMBER +OP = PythonTokenTypes.OP +NEWLINE = PythonTokenTypes.NEWLINE +INDENT = PythonTokenTypes.INDENT +DEDENT = PythonTokenTypes.DEDENT +ENDMARKER = PythonTokenTypes.ENDMARKER +ERRORTOKEN = PythonTokenTypes.ERRORTOKEN +ERROR_DEDENT = PythonTokenTypes.ERROR_DEDENT +FSTRING_START = PythonTokenTypes.FSTRING_START +FSTRING_STRING = PythonTokenTypes.FSTRING_STRING +FSTRING_END = PythonTokenTypes.FSTRING_END + +TokenCollection = namedtuple( + 'TokenCollection', + 'pseudo_token single_quoted triple_quoted endpats whitespace ' + 'fstring_pattern_map always_break_tokens', +) + +BOM_UTF8_STRING = BOM_UTF8.decode('utf-8') + +_token_collection_cache = {} + +if py_version >= 30: + # Python 3 has str.isidentifier() to check if a char is a valid identifier + is_identifier = str.isidentifier +else: + # Python 2 doesn't, but it's not that important anymore and if you tokenize + # Python 2 code with this, it's still ok. It's just that parsing Python 3 + # code with this function is not 100% correct. + # This just means that Python 2 code matches a few identifiers too much, + # but that doesn't really matter. + def is_identifier(s): + return True + + +def group(*choices, **kwargs): + capture = kwargs.pop('capture', False) # Python 2, arrghhhhh :( + assert not kwargs + + start = '(' + if not capture: + start += '?:' + return start + '|'.join(choices) + ')' + + +def maybe(*choices): + return group(*choices) + '?' + + +# Return the empty string, plus all of the valid string prefixes. +def _all_string_prefixes(version_info, include_fstring=False, only_fstring=False): + def different_case_versions(prefix): + for s in _itertools.product(*[(c, c.upper()) for c in prefix]): + yield ''.join(s) + # The valid string prefixes. Only contain the lower case versions, + # and don't contain any permuations (include 'fr', but not + # 'rf'). The various permutations will be generated. + valid_string_prefixes = ['b', 'r', 'u'] + if version_info >= (3, 0): + valid_string_prefixes.append('br') + + result = set(['']) + if version_info >= (3, 6) and include_fstring: + f = ['f', 'fr'] + if only_fstring: + valid_string_prefixes = f + result = set() + else: + valid_string_prefixes += f + elif only_fstring: + return set() + + # if we add binary f-strings, add: ['fb', 'fbr'] + for prefix in valid_string_prefixes: + for t in _itertools.permutations(prefix): + # create a list with upper and lower versions of each + # character + result.update(different_case_versions(t)) + if version_info <= (2, 7): + # In Python 2 the order cannot just be random. + result.update(different_case_versions('ur')) + result.update(different_case_versions('br')) + return result + + +def _compile(expr): + return re.compile(expr, re.UNICODE) + + +def _get_token_collection(version_info): + try: + return _token_collection_cache[tuple(version_info)] + except KeyError: + _token_collection_cache[tuple(version_info)] = result = \ + _create_token_collection(version_info) + return result + + +fstring_string_single_line = _compile(r'(?:\{\{|\}\}|\\(?:\r\n?|\n)|[^{}\r\n])+') +fstring_string_multi_line = _compile(r'(?:[^{}]+|\{\{|\}\})+') +fstring_format_spec_single_line = _compile(r'(?:\\(?:\r\n?|\n)|[^{}\r\n])+') +fstring_format_spec_multi_line = _compile(r'[^{}]+') + + +def _create_token_collection(version_info): + # Note: we use unicode matching for names ("\w") but ascii matching for + # number literals. + Whitespace = r'[ \f\t]*' + whitespace = _compile(Whitespace) + Comment = r'#[^\r\n]*' + # Python 2 is pretty much not working properly anymore, we just ignore + # parsing unicode properly, which is fine, I guess. + if version_info[0] == 2: + Name = r'([A-Za-z_0-9]+)' + elif sys.version_info[0] == 2: + # Unfortunately the regex engine cannot deal with the regex below, so + # just use this one. + Name = r'(\w+)' + else: + Name = u'([A-Za-z_0-9\u0080-' + MAX_UNICODE + ']+)' + + if version_info >= (3, 6): + Hexnumber = r'0[xX](?:_?[0-9a-fA-F])+' + Binnumber = r'0[bB](?:_?[01])+' + Octnumber = r'0[oO](?:_?[0-7])+' + Decnumber = r'(?:0(?:_?0)*|[1-9](?:_?[0-9])*)' + Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber) + Exponent = r'[eE][-+]?[0-9](?:_?[0-9])*' + Pointfloat = group(r'[0-9](?:_?[0-9])*\.(?:[0-9](?:_?[0-9])*)?', + r'\.[0-9](?:_?[0-9])*') + maybe(Exponent) + Expfloat = r'[0-9](?:_?[0-9])*' + Exponent + Floatnumber = group(Pointfloat, Expfloat) + Imagnumber = group(r'[0-9](?:_?[0-9])*[jJ]', Floatnumber + r'[jJ]') + else: + Hexnumber = r'0[xX][0-9a-fA-F]+' + Binnumber = r'0[bB][01]+' + if version_info >= (3, 0): + Octnumber = r'0[oO][0-7]+' + else: + Octnumber = '0[oO]?[0-7]+' + Decnumber = r'(?:0+|[1-9][0-9]*)' + Intnumber = group(Hexnumber, Binnumber, Octnumber, Decnumber) + if version_info[0] < 3: + Intnumber += '[lL]?' + Exponent = r'[eE][-+]?[0-9]+' + Pointfloat = group(r'[0-9]+\.[0-9]*', r'\.[0-9]+') + maybe(Exponent) + Expfloat = r'[0-9]+' + Exponent + Floatnumber = group(Pointfloat, Expfloat) + Imagnumber = group(r'[0-9]+[jJ]', Floatnumber + r'[jJ]') + Number = group(Imagnumber, Floatnumber, Intnumber) + + # Note that since _all_string_prefixes includes the empty string, + # StringPrefix can be the empty string (making it optional). + possible_prefixes = _all_string_prefixes(version_info) + StringPrefix = group(*possible_prefixes) + StringPrefixWithF = group(*_all_string_prefixes(version_info, include_fstring=True)) + fstring_prefixes = _all_string_prefixes(version_info, include_fstring=True, only_fstring=True) + FStringStart = group(*fstring_prefixes) + + # Tail end of ' string. + Single = r"(?:\\.|[^'\\])*'" + # Tail end of " string. + Double = r'(?:\\.|[^"\\])*"' + # Tail end of ''' string. + Single3 = r"(?:\\.|'(?!'')|[^'\\])*'''" + # Tail end of """ string. + Double3 = r'(?:\\.|"(?!"")|[^"\\])*"""' + Triple = group(StringPrefixWithF + "'''", StringPrefixWithF + '"""') + + # Because of leftmost-then-longest match semantics, be sure to put the + # longest operators first (e.g., if = came before ==, == would get + # recognized as two instances of =). + Operator = group(r"\*\*=?", r">>=?", r"<<=?", + r"//=?", r"->", + r"[+\-*/%&@`|^!=<>]=?", + r"~") + + Bracket = '[][(){}]' + + special_args = [r'\r\n?', r'\n', r'[;.,@]'] + if version_info >= (3, 0): + special_args.insert(0, r'\.\.\.') + if version_info >= (3, 8): + special_args.insert(0, ":=?") + else: + special_args.insert(0, ":") + Special = group(*special_args) + + Funny = group(Operator, Bracket, Special) + + # First (or only) line of ' or " string. + ContStr = group(StringPrefix + r"'[^\r\n'\\]*(?:\\.[^\r\n'\\]*)*" + + group("'", r'\\(?:\r\n?|\n)'), + StringPrefix + r'"[^\r\n"\\]*(?:\\.[^\r\n"\\]*)*' + + group('"', r'\\(?:\r\n?|\n)')) + pseudo_extra_pool = [Comment, Triple] + all_quotes = '"', "'", '"""', "'''" + if fstring_prefixes: + pseudo_extra_pool.append(FStringStart + group(*all_quotes)) + + PseudoExtras = group(r'\\(?:\r\n?|\n)|\Z', *pseudo_extra_pool) + PseudoToken = group(Whitespace, capture=True) + \ + group(PseudoExtras, Number, Funny, ContStr, Name, capture=True) + + # For a given string prefix plus quotes, endpats maps it to a regex + # to match the remainder of that string. _prefix can be empty, for + # a normal single or triple quoted string (with no prefix). + endpats = {} + for _prefix in possible_prefixes: + endpats[_prefix + "'"] = _compile(Single) + endpats[_prefix + '"'] = _compile(Double) + endpats[_prefix + "'''"] = _compile(Single3) + endpats[_prefix + '"""'] = _compile(Double3) + + # A set of all of the single and triple quoted string prefixes, + # including the opening quotes. + single_quoted = set() + triple_quoted = set() + fstring_pattern_map = {} + for t in possible_prefixes: + for quote in '"', "'": + single_quoted.add(t + quote) + + for quote in '"""', "'''": + triple_quoted.add(t + quote) + + for t in fstring_prefixes: + for quote in all_quotes: + fstring_pattern_map[t + quote] = quote + + ALWAYS_BREAK_TOKENS = (';', 'import', 'class', 'def', 'try', 'except', + 'finally', 'while', 'with', 'return') + pseudo_token_compiled = _compile(PseudoToken) + return TokenCollection( + pseudo_token_compiled, single_quoted, triple_quoted, endpats, + whitespace, fstring_pattern_map, ALWAYS_BREAK_TOKENS + ) + + +class Token(namedtuple('Token', ['type', 'string', 'start_pos', 'prefix'])): + @property + def end_pos(self): + lines = split_lines(self.string) + if len(lines) > 1: + return self.start_pos[0] + len(lines) - 1, 0 + else: + return self.start_pos[0], self.start_pos[1] + len(self.string) + + +class PythonToken(Token): + def __repr__(self): + return ('TokenInfo(type=%s, string=%r, start_pos=%r, prefix=%r)' % + self._replace(type=self.type.name)) + + +class FStringNode(object): + def __init__(self, quote): + self.quote = quote + self.parentheses_count = 0 + self.previous_lines = '' + self.last_string_start_pos = None + # In the syntax there can be multiple format_spec's nested: + # {x:{y:3}} + self.format_spec_count = 0 + + def open_parentheses(self, character): + self.parentheses_count += 1 + + def close_parentheses(self, character): + self.parentheses_count -= 1 + if self.parentheses_count == 0: + # No parentheses means that the format spec is also finished. + self.format_spec_count = 0 + + def allow_multiline(self): + return len(self.quote) == 3 + + def is_in_expr(self): + return self.parentheses_count > self.format_spec_count + + def is_in_format_spec(self): + return not self.is_in_expr() and self.format_spec_count + + +def _close_fstring_if_necessary(fstring_stack, string, start_pos, additional_prefix): + for fstring_stack_index, node in enumerate(fstring_stack): + if string.startswith(node.quote): + token = PythonToken( + FSTRING_END, + node.quote, + start_pos, + prefix=additional_prefix, + ) + additional_prefix = '' + assert not node.previous_lines + del fstring_stack[fstring_stack_index:] + return token, '', len(node.quote) + return None, additional_prefix, 0 + + +def _find_fstring_string(endpats, fstring_stack, line, lnum, pos): + tos = fstring_stack[-1] + allow_multiline = tos.allow_multiline() + if tos.is_in_format_spec(): + if allow_multiline: + regex = fstring_format_spec_multi_line + else: + regex = fstring_format_spec_single_line + else: + if allow_multiline: + regex = fstring_string_multi_line + else: + regex = fstring_string_single_line + + match = regex.match(line, pos) + if match is None: + return tos.previous_lines, pos + + if not tos.previous_lines: + tos.last_string_start_pos = (lnum, pos) + + string = match.group(0) + for fstring_stack_node in fstring_stack: + end_match = endpats[fstring_stack_node.quote].match(string) + if end_match is not None: + string = end_match.group(0)[:-len(fstring_stack_node.quote)] + + new_pos = pos + new_pos += len(string) + # even if allow_multiline is False, we still need to check for trailing + # newlines, because a single-line f-string can contain line continuations + if string.endswith('\n') or string.endswith('\r'): + tos.previous_lines += string + string = '' + else: + string = tos.previous_lines + string + + return string, new_pos + + +def tokenize(code, version_info, start_pos=(1, 0)): + """Generate tokens from a the source code (string).""" + lines = split_lines(code, keepends=True) + return tokenize_lines(lines, version_info, start_pos=start_pos) + + +def _print_tokens(func): + """ + A small helper function to help debug the tokenize_lines function. + """ + def wrapper(*args, **kwargs): + for token in func(*args, **kwargs): + yield token + + return wrapper + + +# @_print_tokens +def tokenize_lines(lines, version_info, start_pos=(1, 0)): + """ + A heavily modified Python standard library tokenizer. + + Additionally to the default information, yields also the prefix of each + token. This idea comes from lib2to3. The prefix contains all information + that is irrelevant for the parser like newlines in parentheses or comments. + """ + def dedent_if_necessary(start): + while start < indents[-1]: + if start > indents[-2]: + yield PythonToken(ERROR_DEDENT, '', (lnum, 0), '') + break + yield PythonToken(DEDENT, '', spos, '') + indents.pop() + + pseudo_token, single_quoted, triple_quoted, endpats, whitespace, \ + fstring_pattern_map, always_break_tokens, = \ + _get_token_collection(version_info) + paren_level = 0 # count parentheses + indents = [0] + max = 0 + numchars = '0123456789' + contstr = '' + contline = None + # We start with a newline. This makes indent at the first position + # possible. It's not valid Python, but still better than an INDENT in the + # second line (and not in the first). This makes quite a few things in + # Jedi's fast parser possible. + new_line = True + prefix = '' # Should never be required, but here for safety + additional_prefix = '' + first = True + lnum = start_pos[0] - 1 + fstring_stack = [] + for line in lines: # loop over lines in stream + lnum += 1 + pos = 0 + max = len(line) + if first: + if line.startswith(BOM_UTF8_STRING): + additional_prefix = BOM_UTF8_STRING + line = line[1:] + max = len(line) + + # Fake that the part before was already parsed. + line = '^' * start_pos[1] + line + pos = start_pos[1] + max += start_pos[1] + + first = False + + if contstr: # continued string + endmatch = endprog.match(line) + if endmatch: + pos = endmatch.end(0) + yield PythonToken( + STRING, contstr + line[:pos], + contstr_start, prefix) + contstr = '' + contline = None + else: + contstr = contstr + line + contline = contline + line + continue + + while pos < max: + if fstring_stack: + tos = fstring_stack[-1] + if not tos.is_in_expr(): + string, pos = _find_fstring_string(endpats, fstring_stack, line, lnum, pos) + if string: + yield PythonToken( + FSTRING_STRING, string, + tos.last_string_start_pos, + # Never has a prefix because it can start anywhere and + # include whitespace. + prefix='' + ) + tos.previous_lines = '' + continue + if pos == max: + break + + rest = line[pos:] + fstring_end_token, additional_prefix, quote_length = _close_fstring_if_necessary( + fstring_stack, + rest, + (lnum, pos), + additional_prefix, + ) + pos += quote_length + if fstring_end_token is not None: + yield fstring_end_token + continue + + pseudomatch = pseudo_token.match(line, pos) + if not pseudomatch: # scan for tokens + match = whitespace.match(line, pos) + if pos == 0: + for t in dedent_if_necessary(match.end()): + yield t + pos = match.end() + new_line = False + yield PythonToken( + ERRORTOKEN, line[pos], (lnum, pos), + additional_prefix + match.group(0) + ) + additional_prefix = '' + pos += 1 + continue + + prefix = additional_prefix + pseudomatch.group(1) + additional_prefix = '' + start, pos = pseudomatch.span(2) + spos = (lnum, start) + token = pseudomatch.group(2) + if token == '': + assert prefix + additional_prefix = prefix + # This means that we have a line with whitespace/comments at + # the end, which just results in an endmarker. + break + initial = token[0] + + if new_line and initial not in '\r\n\\#': + new_line = False + if paren_level == 0 and not fstring_stack: + i = 0 + indent_start = start + while line[i] == '\f': + i += 1 + # TODO don't we need to change spos as well? + indent_start -= 1 + if indent_start > indents[-1]: + yield PythonToken(INDENT, '', spos, '') + indents.append(indent_start) + for t in dedent_if_necessary(indent_start): + yield t + + if (initial in numchars or # ordinary number + (initial == '.' and token != '.' and token != '...')): + yield PythonToken(NUMBER, token, spos, prefix) + elif pseudomatch.group(3) is not None: # ordinary name + if token in always_break_tokens: + fstring_stack[:] = [] + paren_level = 0 + # We only want to dedent if the token is on a new line. + if re.match(r'[ \f\t]*$', line[:start]): + while True: + indent = indents.pop() + if indent > start: + yield PythonToken(DEDENT, '', spos, '') + else: + indents.append(indent) + break + if is_identifier(token): + yield PythonToken(NAME, token, spos, prefix) + else: + for t in _split_illegal_unicode_name(token, spos, prefix): + yield t # yield from Python 2 + elif initial in '\r\n': + if any(not f.allow_multiline() for f in fstring_stack): + # Would use fstring_stack.clear, but that's not available + # in Python 2. + fstring_stack[:] = [] + + if not new_line and paren_level == 0 and not fstring_stack: + yield PythonToken(NEWLINE, token, spos, prefix) + else: + additional_prefix = prefix + token + new_line = True + elif initial == '#': # Comments + assert not token.endswith("\n") + additional_prefix = prefix + token + elif token in triple_quoted: + endprog = endpats[token] + endmatch = endprog.match(line, pos) + if endmatch: # all on one line + pos = endmatch.end(0) + token = line[start:pos] + yield PythonToken(STRING, token, spos, prefix) + else: + contstr_start = (lnum, start) # multiple lines + contstr = line[start:] + contline = line + break + + # Check up to the first 3 chars of the token to see if + # they're in the single_quoted set. If so, they start + # a string. + # We're using the first 3, because we're looking for + # "rb'" (for example) at the start of the token. If + # we switch to longer prefixes, this needs to be + # adjusted. + # Note that initial == token[:1]. + # Also note that single quote checking must come after + # triple quote checking (above). + elif initial in single_quoted or \ + token[:2] in single_quoted or \ + token[:3] in single_quoted: + if token[-1] in '\r\n': # continued string + # This means that a single quoted string ends with a + # backslash and is continued. + contstr_start = lnum, start + endprog = (endpats.get(initial) or endpats.get(token[1]) + or endpats.get(token[2])) + contstr = line[start:] + contline = line + break + else: # ordinary string + yield PythonToken(STRING, token, spos, prefix) + elif token in fstring_pattern_map: # The start of an fstring. + fstring_stack.append(FStringNode(fstring_pattern_map[token])) + yield PythonToken(FSTRING_START, token, spos, prefix) + elif initial == '\\' and line[start:] in ('\\\n', '\\\r\n', '\\\r'): # continued stmt + additional_prefix += prefix + line[start:] + break + else: + if token in '([{': + if fstring_stack: + fstring_stack[-1].open_parentheses(token) + else: + paren_level += 1 + elif token in ')]}': + if fstring_stack: + fstring_stack[-1].close_parentheses(token) + else: + if paren_level: + paren_level -= 1 + elif token == ':' and fstring_stack \ + and fstring_stack[-1].parentheses_count \ + - fstring_stack[-1].format_spec_count == 1: + fstring_stack[-1].format_spec_count += 1 + + yield PythonToken(OP, token, spos, prefix) + + if contstr: + yield PythonToken(ERRORTOKEN, contstr, contstr_start, prefix) + if contstr.endswith('\n') or contstr.endswith('\r'): + new_line = True + + end_pos = lnum, max + # As the last position we just take the maximally possible position. We + # remove -1 for the last new line. + for indent in indents[1:]: + yield PythonToken(DEDENT, '', end_pos, '') + yield PythonToken(ENDMARKER, '', end_pos, additional_prefix) + + +def _split_illegal_unicode_name(token, start_pos, prefix): + def create_token(): + return PythonToken(ERRORTOKEN if is_illegal else NAME, found, pos, prefix) + + found = '' + is_illegal = False + pos = start_pos + for i, char in enumerate(token): + if is_illegal: + if is_identifier(char): + yield create_token() + found = char + is_illegal = False + prefix = '' + pos = start_pos[0], start_pos[1] + i + else: + found += char + else: + new_found = found + char + if is_identifier(new_found): + found = new_found + else: + if found: + yield create_token() + prefix = '' + pos = start_pos[0], start_pos[1] + i + found = char + is_illegal = True + + if found: + yield create_token() + + +if __name__ == "__main__": + if len(sys.argv) >= 2: + path = sys.argv[1] + with open(path) as f: + code = f.read() + else: + code = sys.stdin.read() + + from parso.utils import python_bytes_to_unicode, parse_version_string + + if isinstance(code, bytes): + code = python_bytes_to_unicode(code) + + for token in tokenize(code, parse_version_string()): + print(token) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.pyi new file mode 100644 index 0000000..1870bc2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tokenize.pyi @@ -0,0 +1,24 @@ +from typing import Generator, Iterable, NamedTuple, Tuple + +from parso.python.token import TokenType +from parso.utils import PythonVersionInfo + +class Token(NamedTuple): + type: TokenType + string: str + start_pos: Tuple[int, int] + prefix: str + @property + def end_pos(self) -> Tuple[int, int]: ... + +class PythonToken(Token): + def __repr__(self) -> str: ... + +def tokenize( + code: str, version_info: PythonVersionInfo, start_pos: Tuple[int, int] = (1, 0) +) -> Generator[PythonToken, None, None]: ... +def tokenize_lines( + lines: Iterable[str], + version_info: PythonVersionInfo, + start_pos: Tuple[int, int] = (1, 0), +) -> Generator[PythonToken, None, None]: ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/python/tree.py b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tree.py new file mode 100644 index 0000000..7d4a490 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/python/tree.py @@ -0,0 +1,1245 @@ +""" +This is the syntax tree for Python syntaxes (2 & 3). The classes represent +syntax elements like functions and imports. + +All of the nodes can be traced back to the `Python grammar file +`_. If you want to know how +a tree is structured, just analyse that file (for each Python version it's a +bit different). + +There's a lot of logic here that makes it easier for Jedi (and other libraries) +to deal with a Python syntax tree. + +By using :py:meth:`parso.tree.NodeOrLeaf.get_code` on a module, you can get +back the 1-to-1 representation of the input given to the parser. This is +important if you want to refactor a parser tree. + +>>> from parso import parse +>>> parser = parse('import os') +>>> module = parser.get_root_node() +>>> module + + +Any subclasses of :class:`Scope`, including :class:`Module` has an attribute +:attr:`iter_imports `: + +>>> list(module.iter_imports()) +[] + +Changes to the Python Grammar +----------------------------- + +A few things have changed when looking at Python grammar files: + +- :class:`Param` does not exist in Python grammar files. It is essentially a + part of a ``parameters`` node. |parso| splits it up to make it easier to + analyse parameters. However this just makes it easier to deal with the syntax + tree, it doesn't actually change the valid syntax. +- A few nodes like `lambdef` and `lambdef_nocond` have been merged in the + syntax tree to make it easier to do deal with them. + +Parser Tree Classes +------------------- +""" + +import re +try: + from collections.abc import Mapping +except ImportError: + from collections import Mapping + +from parso._compatibility import utf8_repr, unicode +from parso.tree import Node, BaseNode, Leaf, ErrorNode, ErrorLeaf, \ + search_ancestor +from parso.python.prefix import split_prefix +from parso.utils import split_lines + +_FLOW_CONTAINERS = set(['if_stmt', 'while_stmt', 'for_stmt', 'try_stmt', + 'with_stmt', 'async_stmt', 'suite']) +_RETURN_STMT_CONTAINERS = set(['suite', 'simple_stmt']) | _FLOW_CONTAINERS +_FUNC_CONTAINERS = set(['suite', 'simple_stmt', 'decorated']) | _FLOW_CONTAINERS +_GET_DEFINITION_TYPES = set([ + 'expr_stmt', 'sync_comp_for', 'with_stmt', 'for_stmt', 'import_name', + 'import_from', 'param' +]) +_IMPORTS = set(['import_name', 'import_from']) + + +class DocstringMixin(object): + __slots__ = () + + def get_doc_node(self): + """ + Returns the string leaf of a docstring. e.g. ``r'''foo'''``. + """ + if self.type == 'file_input': + node = self.children[0] + elif self.type in ('funcdef', 'classdef'): + node = self.children[self.children.index(':') + 1] + if node.type == 'suite': # Normally a suite + node = node.children[1] # -> NEWLINE stmt + else: # ExprStmt + simple_stmt = self.parent + c = simple_stmt.parent.children + index = c.index(simple_stmt) + if not index: + return None + node = c[index - 1] + + if node.type == 'simple_stmt': + node = node.children[0] + if node.type == 'string': + return node + return None + + +class PythonMixin(object): + """ + Some Python specific utitilies. + """ + __slots__ = () + + def get_name_of_position(self, position): + """ + Given a (line, column) tuple, returns a :py:class:`Name` or ``None`` if + there is no name at that position. + """ + for c in self.children: + if isinstance(c, Leaf): + if c.type == 'name' and c.start_pos <= position <= c.end_pos: + return c + else: + result = c.get_name_of_position(position) + if result is not None: + return result + return None + + +class PythonLeaf(PythonMixin, Leaf): + __slots__ = () + + def _split_prefix(self): + return split_prefix(self, self.get_start_pos_of_prefix()) + + def get_start_pos_of_prefix(self): + """ + Basically calls :py:meth:`parso.tree.NodeOrLeaf.get_start_pos_of_prefix`. + """ + # TODO it is really ugly that we have to override it. Maybe change + # indent error leafs somehow? No idea how, though. + previous_leaf = self.get_previous_leaf() + if previous_leaf is not None and previous_leaf.type == 'error_leaf' \ + and previous_leaf.token_type in ('INDENT', 'DEDENT', 'ERROR_DEDENT'): + previous_leaf = previous_leaf.get_previous_leaf() + + if previous_leaf is None: # It's the first leaf. + lines = split_lines(self.prefix) + # + 1 is needed because split_lines always returns at least ['']. + return self.line - len(lines) + 1, 0 # It's the first leaf. + return previous_leaf.end_pos + + +class _LeafWithoutNewlines(PythonLeaf): + """ + Simply here to optimize performance. + """ + __slots__ = () + + @property + def end_pos(self): + return self.line, self.column + len(self.value) + + +# Python base classes +class PythonBaseNode(PythonMixin, BaseNode): + __slots__ = () + + +class PythonNode(PythonMixin, Node): + __slots__ = () + + +class PythonErrorNode(PythonMixin, ErrorNode): + __slots__ = () + + +class PythonErrorLeaf(ErrorLeaf, PythonLeaf): + __slots__ = () + + +class EndMarker(_LeafWithoutNewlines): + __slots__ = () + type = 'endmarker' + + @utf8_repr + def __repr__(self): + return "<%s: prefix=%s end_pos=%s>" % ( + type(self).__name__, repr(self.prefix), self.end_pos + ) + + +class Newline(PythonLeaf): + """Contains NEWLINE and ENDMARKER tokens.""" + __slots__ = () + type = 'newline' + + @utf8_repr + def __repr__(self): + return "<%s: %s>" % (type(self).__name__, repr(self.value)) + + +class Name(_LeafWithoutNewlines): + """ + A string. Sometimes it is important to know if the string belongs to a name + or not. + """ + type = 'name' + __slots__ = () + + def __repr__(self): + return "<%s: %s@%s,%s>" % (type(self).__name__, self.value, + self.line, self.column) + + def is_definition(self): + """ + Returns True if the name is being defined. + """ + return self.get_definition() is not None + + def get_definition(self, import_name_always=False): + """ + Returns None if there's on definition for a name. + + :param import_name_alway: Specifies if an import name is always a + definition. Normally foo in `from foo import bar` is not a + definition. + """ + node = self.parent + type_ = node.type + if type_ in ('power', 'atom_expr'): + # In `self.x = 3` self is not a definition, but x is. + return None + + if type_ in ('funcdef', 'classdef'): + if self == node.name: + return node + return None + + if type_ == 'except_clause': + # TODO in Python 2 this doesn't work correctly. See grammar file. + # I think we'll just let it be. Python 2 will be gone in a few + # years. + if self.get_previous_sibling() == 'as': + return node.parent # The try_stmt. + return None + + while node is not None: + if node.type == 'suite': + return None + if node.type in _GET_DEFINITION_TYPES: + if self in node.get_defined_names(): + return node + if import_name_always and node.type in _IMPORTS: + return node + return None + node = node.parent + return None + + +class Literal(PythonLeaf): + __slots__ = () + + +class Number(Literal): + type = 'number' + __slots__ = () + + +class String(Literal): + type = 'string' + __slots__ = () + + @property + def string_prefix(self): + return re.match(r'\w*(?=[\'"])', self.value).group(0) + + def _get_payload(self): + match = re.search( + r'''('{3}|"{3}|'|")(.*)$''', + self.value, + flags=re.DOTALL + ) + return match.group(2)[:-len(match.group(1))] + + +class FStringString(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_string' + __slots__ = () + + +class FStringStart(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_start' + __slots__ = () + + +class FStringEnd(PythonLeaf): + """ + f-strings contain f-string expressions and normal python strings. These are + the string parts of f-strings. + """ + type = 'fstring_end' + __slots__ = () + + +class _StringComparisonMixin(object): + def __eq__(self, other): + """ + Make comparisons with strings easy. + Improves the readability of the parser. + """ + if isinstance(other, (str, unicode)): + return self.value == other + + return self is other + + def __ne__(self, other): + """Python 2 compatibility.""" + return not self.__eq__(other) + + def __hash__(self): + return hash(self.value) + + +class Operator(_LeafWithoutNewlines, _StringComparisonMixin): + type = 'operator' + __slots__ = () + + +class Keyword(_LeafWithoutNewlines, _StringComparisonMixin): + type = 'keyword' + __slots__ = () + + +class Scope(PythonBaseNode, DocstringMixin): + """ + Super class for the parser tree, which represents the state of a python + text file. + A Scope is either a function, class or lambda. + """ + __slots__ = () + + def __init__(self, children): + super(Scope, self).__init__(children) + + def iter_funcdefs(self): + """ + Returns a generator of `funcdef` nodes. + """ + return self._search_in_scope('funcdef') + + def iter_classdefs(self): + """ + Returns a generator of `classdef` nodes. + """ + return self._search_in_scope('classdef') + + def iter_imports(self): + """ + Returns a generator of `import_name` and `import_from` nodes. + """ + return self._search_in_scope('import_name', 'import_from') + + def _search_in_scope(self, *names): + def scan(children): + for element in children: + if element.type in names: + yield element + if element.type in _FUNC_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def get_suite(self): + """ + Returns the part that is executed by the function. + """ + return self.children[-1] + + def __repr__(self): + try: + name = self.name.value + except AttributeError: + name = '' + + return "<%s: %s@%s-%s>" % (type(self).__name__, name, + self.start_pos[0], self.end_pos[0]) + + +class Module(Scope): + """ + The top scope, which is always a module. + Depending on the underlying parser this may be a full module or just a part + of a module. + """ + __slots__ = ('_used_names',) + type = 'file_input' + + def __init__(self, children): + super(Module, self).__init__(children) + self._used_names = None + + def _iter_future_import_names(self): + """ + :return: A list of future import names. + :rtype: list of str + """ + # In Python it's not allowed to use future imports after the first + # actual (non-future) statement. However this is not a linter here, + # just return all future imports. If people want to scan for issues + # they should use the API. + for imp in self.iter_imports(): + if imp.type == 'import_from' and imp.level == 0: + for path in imp.get_paths(): + names = [name.value for name in path] + if len(names) == 2 and names[0] == '__future__': + yield names[1] + + def _has_explicit_absolute_import(self): + """ + Checks if imports in this module are explicitly absolute, i.e. there + is a ``__future__`` import. + Currently not public, might be in the future. + :return bool: + """ + for name in self._iter_future_import_names(): + if name == 'absolute_import': + return True + return False + + def get_used_names(self): + """ + Returns all the :class:`Name` leafs that exist in this module. This + includes both definitions and references of names. + """ + if self._used_names is None: + # Don't directly use self._used_names to eliminate a lookup. + dct = {} + + def recurse(node): + try: + children = node.children + except AttributeError: + if node.type == 'name': + arr = dct.setdefault(node.value, []) + arr.append(node) + else: + for child in children: + recurse(child) + + recurse(self) + self._used_names = UsedNamesMapping(dct) + return self._used_names + + +class Decorator(PythonBaseNode): + type = 'decorator' + __slots__ = () + + +class ClassOrFunc(Scope): + __slots__ = () + + @property + def name(self): + """ + Returns the `Name` leaf that defines the function or class name. + """ + return self.children[1] + + def get_decorators(self): + """ + :rtype: list of :class:`Decorator` + """ + decorated = self.parent + if decorated.type == 'async_funcdef': + decorated = decorated.parent + + if decorated.type == 'decorated': + if decorated.children[0].type == 'decorators': + return decorated.children[0].children + else: + return decorated.children[:1] + else: + return [] + + +class Class(ClassOrFunc): + """ + Used to store the parsed contents of a python class. + """ + type = 'classdef' + __slots__ = () + + def __init__(self, children): + super(Class, self).__init__(children) + + def get_super_arglist(self): + """ + Returns the `arglist` node that defines the super classes. It returns + None if there are no arguments. + """ + if self.children[2] != '(': # Has no parentheses + return None + else: + if self.children[3] == ')': # Empty parentheses + return None + else: + return self.children[3] + + +def _create_params(parent, argslist_list): + """ + `argslist_list` is a list that can contain an argslist as a first item, but + most not. It's basically the items between the parameter brackets (which is + at most one item). + This function modifies the parser structure. It generates `Param` objects + from the normal ast. Those param objects do not exist in a normal ast, but + make the evaluation of the ast tree so much easier. + You could also say that this function replaces the argslist node with a + list of Param objects. + """ + def check_python2_nested_param(node): + """ + Python 2 allows params to look like ``def x(a, (b, c))``, which is + basically a way of unpacking tuples in params. Python 3 has ditched + this behavior. Jedi currently just ignores those constructs. + """ + return node.type == 'fpdef' and node.children[0] == '(' + + try: + first = argslist_list[0] + except IndexError: + return [] + + if first.type in ('name', 'fpdef'): + if check_python2_nested_param(first): + return [first] + else: + return [Param([first], parent)] + elif first == '*': + return [first] + else: # argslist is a `typedargslist` or a `varargslist`. + if first.type == 'tfpdef': + children = [first] + else: + children = first.children + new_children = [] + start = 0 + # Start with offset 1, because the end is higher. + for end, child in enumerate(children + [None], 1): + if child is None or child == ',': + param_children = children[start:end] + if param_children: # Could as well be comma and then end. + if param_children[0] == '*' \ + and (len(param_children) == 1 + or param_children[1] == ',') \ + or check_python2_nested_param(param_children[0]) \ + or param_children[0] == '/': + for p in param_children: + p.parent = parent + new_children += param_children + else: + new_children.append(Param(param_children, parent)) + start = end + return new_children + + +class Function(ClassOrFunc): + """ + Used to store the parsed contents of a python function. + + Children:: + + 0. + 1. + 2. parameter list (including open-paren and close-paren s) + 3. or 5. + 4. or 6. Node() representing function body + 3. -> (if annotation is also present) + 4. annotation (if present) + """ + type = 'funcdef' + + def __init__(self, children): + super(Function, self).__init__(children) + parameters = self.children[2] # After `def foo` + parameters.children[1:-1] = _create_params(parameters, parameters.children[1:-1]) + + def _get_param_nodes(self): + return self.children[2].children + + def get_params(self): + """ + Returns a list of `Param()`. + """ + return [p for p in self._get_param_nodes() if p.type == 'param'] + + @property + def name(self): + return self.children[1] # First token after `def` + + def iter_yield_exprs(self): + """ + Returns a generator of `yield_expr`. + """ + def scan(children): + for element in children: + if element.type in ('classdef', 'funcdef', 'lambdef'): + continue + + try: + nested_children = element.children + except AttributeError: + if element.value == 'yield': + if element.parent.type == 'yield_expr': + yield element.parent + else: + yield element + else: + for result in scan(nested_children): + yield result + + return scan(self.children) + + def iter_return_stmts(self): + """ + Returns a generator of `return_stmt`. + """ + def scan(children): + for element in children: + if element.type == 'return_stmt' \ + or element.type == 'keyword' and element.value == 'return': + yield element + if element.type in _RETURN_STMT_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def iter_raise_stmts(self): + """ + Returns a generator of `raise_stmt`. Includes raise statements inside try-except blocks + """ + def scan(children): + for element in children: + if element.type == 'raise_stmt' \ + or element.type == 'keyword' and element.value == 'raise': + yield element + if element.type in _RETURN_STMT_CONTAINERS: + for e in scan(element.children): + yield e + + return scan(self.children) + + def is_generator(self): + """ + :return bool: Checks if a function is a generator or not. + """ + return next(self.iter_yield_exprs(), None) is not None + + @property + def annotation(self): + """ + Returns the test node after `->` or `None` if there is no annotation. + """ + try: + if self.children[3] == "->": + return self.children[4] + assert self.children[3] == ":" + return None + except IndexError: + return None + + +class Lambda(Function): + """ + Lambdas are basically trimmed functions, so give it the same interface. + + Children:: + + 0. + *. for each argument x + -2. + -1. Node() representing body + """ + type = 'lambdef' + __slots__ = () + + def __init__(self, children): + # We don't want to call the Function constructor, call its parent. + super(Function, self).__init__(children) + # Everything between `lambda` and the `:` operator is a parameter. + self.children[1:-2] = _create_params(self, self.children[1:-2]) + + @property + def name(self): + """ + Raises an AttributeError. Lambdas don't have a defined name. + """ + raise AttributeError("lambda is not named.") + + def _get_param_nodes(self): + return self.children[1:-2] + + @property + def annotation(self): + """ + Returns `None`, lambdas don't have annotations. + """ + return None + + def __repr__(self): + return "<%s@%s>" % (self.__class__.__name__, self.start_pos) + + +class Flow(PythonBaseNode): + __slots__ = () + + +class IfStmt(Flow): + type = 'if_stmt' + __slots__ = () + + def get_test_nodes(self): + """ + E.g. returns all the `test` nodes that are named as x, below: + + if x: + pass + elif x: + pass + """ + for i, c in enumerate(self.children): + if c in ('elif', 'if'): + yield self.children[i + 1] + + def get_corresponding_test_node(self, node): + """ + Searches for the branch in which the node is and returns the + corresponding test node (see function above). However if the node is in + the test node itself and not in the suite return None. + """ + start_pos = node.start_pos + for check_node in reversed(list(self.get_test_nodes())): + if check_node.start_pos < start_pos: + if start_pos < check_node.end_pos: + return None + # In this case the node is within the check_node itself, + # not in the suite + else: + return check_node + + def is_node_after_else(self, node): + """ + Checks if a node is defined after `else`. + """ + for c in self.children: + if c == 'else': + if node.start_pos > c.start_pos: + return True + else: + return False + + +class WhileStmt(Flow): + type = 'while_stmt' + __slots__ = () + + +class ForStmt(Flow): + type = 'for_stmt' + __slots__ = () + + def get_testlist(self): + """ + Returns the input node ``y`` from: ``for x in y:``. + """ + return self.children[3] + + def get_defined_names(self): + return _defined_names(self.children[1]) + + +class TryStmt(Flow): + type = 'try_stmt' + __slots__ = () + + def get_except_clause_tests(self): + """ + Returns the ``test`` nodes found in ``except_clause`` nodes. + Returns ``[None]`` for except clauses without an exception given. + """ + for node in self.children: + if node.type == 'except_clause': + yield node.children[1] + elif node == 'except': + yield None + + +class WithStmt(Flow): + type = 'with_stmt' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the with statement defines. The + defined names are set after `as`. + """ + names = [] + for with_item in self.children[1:-2:2]: + # Check with items for 'as' names. + if with_item.type == 'with_item': + names += _defined_names(with_item.children[2]) + return names + + def get_test_node_from_name(self, name): + node = name.parent + if node.type != 'with_item': + raise ValueError('The name is not actually part of a with statement.') + return node.children[0] + + +class Import(PythonBaseNode): + __slots__ = () + + def get_path_for_name(self, name): + """ + The path is the list of names that leads to the searched name. + + :return list of Name: + """ + try: + # The name may be an alias. If it is, just map it back to the name. + name = self._aliases()[name] + except KeyError: + pass + + for path in self.get_paths(): + if name in path: + return path[:path.index(name) + 1] + raise ValueError('Name should be defined in the import itself') + + def is_nested(self): + return False # By default, sub classes may overwrite this behavior + + def is_star_import(self): + return self.children[-1] == '*' + + +class ImportFrom(Import): + type = 'import_from' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the import defines. The + defined names are set after `import` or in case an alias - `as` - is + present that name is returned. + """ + return [alias or name for name, alias in self._as_name_tuples()] + + def _aliases(self): + """Mapping from alias to its corresponding name.""" + return dict((alias, name) for name, alias in self._as_name_tuples() + if alias is not None) + + def get_from_names(self): + for n in self.children[1:]: + if n not in ('.', '...'): + break + if n.type == 'dotted_name': # from x.y import + return n.children[::2] + elif n == 'import': # from . import + return [] + else: # from x import + return [n] + + @property + def level(self): + """The level parameter of ``__import__``.""" + level = 0 + for n in self.children[1:]: + if n in ('.', '...'): + level += len(n.value) + else: + break + return level + + def _as_name_tuples(self): + last = self.children[-1] + if last == ')': + last = self.children[-2] + elif last == '*': + return # No names defined directly. + + if last.type == 'import_as_names': + as_names = last.children[::2] + else: + as_names = [last] + for as_name in as_names: + if as_name.type == 'name': + yield as_name, None + else: + yield as_name.children[::2] # yields x, y -> ``x as y`` + + def get_paths(self): + """ + The import paths defined in an import statement. Typically an array + like this: ``[, ]``. + + :return list of list of Name: + """ + dotted = self.get_from_names() + + if self.children[-1] == '*': + return [dotted] + return [dotted + [name] for name, alias in self._as_name_tuples()] + + +class ImportName(Import): + """For ``import_name`` nodes. Covers normal imports without ``from``.""" + type = 'import_name' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the import defines. The defined names + is always the first name after `import` or in case an alias - `as` - is + present that name is returned. + """ + return [alias or path[0] for path, alias in self._dotted_as_names()] + + @property + def level(self): + """The level parameter of ``__import__``.""" + return 0 # Obviously 0 for imports without from. + + def get_paths(self): + return [path for path, alias in self._dotted_as_names()] + + def _dotted_as_names(self): + """Generator of (list(path), alias) where alias may be None.""" + dotted_as_names = self.children[1] + if dotted_as_names.type == 'dotted_as_names': + as_names = dotted_as_names.children[::2] + else: + as_names = [dotted_as_names] + + for as_name in as_names: + if as_name.type == 'dotted_as_name': + alias = as_name.children[2] + as_name = as_name.children[0] + else: + alias = None + if as_name.type == 'name': + yield [as_name], alias + else: + # dotted_names + yield as_name.children[::2], alias + + def is_nested(self): + """ + This checks for the special case of nested imports, without aliases and + from statement:: + + import foo.bar + """ + return bool([1 for path, alias in self._dotted_as_names() + if alias is None and len(path) > 1]) + + def _aliases(self): + """ + :return list of Name: Returns all the alias + """ + return dict((alias, path[-1]) for path, alias in self._dotted_as_names() + if alias is not None) + + +class KeywordStatement(PythonBaseNode): + """ + For the following statements: `assert`, `del`, `global`, `nonlocal`, + `raise`, `return`, `yield`. + + `pass`, `continue` and `break` are not in there, because they are just + simple keywords and the parser reduces it to a keyword. + """ + __slots__ = () + + @property + def type(self): + """ + Keyword statements start with the keyword and end with `_stmt`. You can + crosscheck this with the Python grammar. + """ + return '%s_stmt' % self.keyword + + @property + def keyword(self): + return self.children[0].value + + +class AssertStmt(KeywordStatement): + __slots__ = () + + @property + def assertion(self): + return self.children[1] + + +class GlobalStmt(KeywordStatement): + __slots__ = () + + def get_global_names(self): + return self.children[1::2] + + +class ReturnStmt(KeywordStatement): + __slots__ = () + + +class YieldExpr(PythonBaseNode): + type = 'yield_expr' + __slots__ = () + + +def _defined_names(current): + """ + A helper function to find the defined names in statements, for loops and + list comprehensions. + """ + names = [] + if current.type in ('testlist_star_expr', 'testlist_comp', 'exprlist', 'testlist'): + for child in current.children[::2]: + names += _defined_names(child) + elif current.type in ('atom', 'star_expr'): + names += _defined_names(current.children[1]) + elif current.type in ('power', 'atom_expr'): + if current.children[-2] != '**': # Just if there's no operation + trailer = current.children[-1] + if trailer.children[0] == '.': + names.append(trailer.children[1]) + else: + names.append(current) + return names + + +class ExprStmt(PythonBaseNode, DocstringMixin): + type = 'expr_stmt' + __slots__ = () + + def get_defined_names(self): + """ + Returns a list of `Name` defined before the `=` sign. + """ + names = [] + if self.children[1].type == 'annassign': + names = _defined_names(self.children[0]) + return [ + name + for i in range(0, len(self.children) - 2, 2) + if '=' in self.children[i + 1].value + for name in _defined_names(self.children[i]) + ] + names + + def get_rhs(self): + """Returns the right-hand-side of the equals.""" + return self.children[-1] + + def yield_operators(self): + """ + Returns a generator of `+=`, `=`, etc. or None if there is no operation. + """ + first = self.children[1] + if first.type == 'annassign': + if len(first.children) <= 2: + return # No operator is available, it's just PEP 484. + + first = first.children[2] + yield first + + for operator in self.children[3::2]: + yield operator + + +class Param(PythonBaseNode): + """ + It's a helper class that makes business logic with params much easier. The + Python grammar defines no ``param`` node. It defines it in a different way + that is not really suited to working with parameters. + """ + type = 'param' + + def __init__(self, children, parent): + super(Param, self).__init__(children) + self.parent = parent + for child in children: + child.parent = self + + @property + def star_count(self): + """ + Is `0` in case of `foo`, `1` in case of `*foo` or `2` in case of + `**foo`. + """ + first = self.children[0] + if first in ('*', '**'): + return len(first.value) + return 0 + + @property + def default(self): + """ + The default is the test node that appears after the `=`. Is `None` in + case no default is present. + """ + has_comma = self.children[-1] == ',' + try: + if self.children[-2 - int(has_comma)] == '=': + return self.children[-1 - int(has_comma)] + except IndexError: + return None + + @property + def annotation(self): + """ + The default is the test node that appears after `:`. Is `None` in case + no annotation is present. + """ + tfpdef = self._tfpdef() + if tfpdef.type == 'tfpdef': + assert tfpdef.children[1] == ":" + assert len(tfpdef.children) == 3 + annotation = tfpdef.children[2] + return annotation + else: + return None + + def _tfpdef(self): + """ + tfpdef: see e.g. grammar36.txt. + """ + offset = int(self.children[0] in ('*', '**')) + return self.children[offset] + + @property + def name(self): + """ + The `Name` leaf of the param. + """ + if self._tfpdef().type == 'tfpdef': + return self._tfpdef().children[0] + else: + return self._tfpdef() + + def get_defined_names(self): + return [self.name] + + @property + def position_index(self): + """ + Property for the positional index of a paramter. + """ + index = self.parent.children.index(self) + try: + keyword_only_index = self.parent.children.index('*') + if index > keyword_only_index: + # Skip the ` *, ` + index -= 2 + except ValueError: + pass + try: + keyword_only_index = self.parent.children.index('/') + if index > keyword_only_index: + # Skip the ` /, ` + index -= 2 + except ValueError: + pass + return index - 1 + + def get_parent_function(self): + """ + Returns the function/lambda of a parameter. + """ + return search_ancestor(self, 'funcdef', 'lambdef') + + def get_code(self, include_prefix=True, include_comma=True): + """ + Like all the other get_code functions, but includes the param + `include_comma`. + + :param include_comma bool: If enabled includes the comma in the string output. + """ + if include_comma: + return super(Param, self).get_code(include_prefix) + + children = self.children + if children[-1] == ',': + children = children[:-1] + return self._get_code_for_children( + children, + include_prefix=include_prefix + ) + + def __repr__(self): + default = '' if self.default is None else '=%s' % self.default.get_code() + return '<%s: %s>' % (type(self).__name__, str(self._tfpdef()) + default) + + +class SyncCompFor(PythonBaseNode): + type = 'sync_comp_for' + __slots__ = () + + def get_defined_names(self): + """ + Returns the a list of `Name` that the comprehension defines. + """ + # allow async for + return _defined_names(self.children[1]) + + +# This is simply here so an older Jedi version can work with this new parso +# version. Can be deleted in the next release. +CompFor = SyncCompFor + + +class UsedNamesMapping(Mapping): + """ + This class exists for the sole purpose of creating an immutable dict. + """ + def __init__(self, dct): + self._dict = dct + + def __getitem__(self, key): + return self._dict[key] + + def __len__(self): + return len(self._dict) + + def __iter__(self): + return iter(self._dict) + + def __hash__(self): + return id(self) + + def __eq__(self, other): + # Comparing these dicts does not make sense. + return self is other diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/tree.py b/vim/bundle/jedi-vim/pythonx/parso/parso/tree.py new file mode 100644 index 0000000..f5871a6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/tree.py @@ -0,0 +1,366 @@ +from abc import abstractmethod, abstractproperty + +from parso._compatibility import utf8_repr, encoding, py_version +from parso.utils import split_lines + + +def search_ancestor(node, *node_types): + """ + Recursively looks at the parents of a node and returns the first found node + that matches node_types. Returns ``None`` if no matching node is found. + + :param node: The ancestors of this node will be checked. + :param node_types: type names that are searched for. + :type node_types: tuple of str + """ + while True: + node = node.parent + if node is None or node.type in node_types: + return node + + +class NodeOrLeaf(object): + """ + The base class for nodes and leaves. + """ + __slots__ = () + type = None + ''' + The type is a string that typically matches the types of the grammar file. + ''' + + def get_root_node(self): + """ + Returns the root node of a parser tree. The returned node doesn't have + a parent node like all the other nodes/leaves. + """ + scope = self + while scope.parent is not None: + scope = scope.parent + return scope + + def get_next_sibling(self): + """ + Returns the node immediately following this node in this parent's + children list. If this node does not have a next sibling, it is None + """ + # Can't use index(); we need to test by identity + for i, child in enumerate(self.parent.children): + if child is self: + try: + return self.parent.children[i + 1] + except IndexError: + return None + + def get_previous_sibling(self): + """ + Returns the node immediately preceding this node in this parent's + children list. If this node does not have a previous sibling, it is + None. + """ + # Can't use index(); we need to test by identity + for i, child in enumerate(self.parent.children): + if child is self: + if i == 0: + return None + return self.parent.children[i - 1] + + def get_previous_leaf(self): + """ + Returns the previous leaf in the parser tree. + Returns `None` if this is the first element in the parser tree. + """ + node = self + while True: + c = node.parent.children + i = c.index(node) + if i == 0: + node = node.parent + if node.parent is None: + return None + else: + node = c[i - 1] + break + + while True: + try: + node = node.children[-1] + except AttributeError: # A Leaf doesn't have children. + return node + + def get_next_leaf(self): + """ + Returns the next leaf in the parser tree. + Returns None if this is the last element in the parser tree. + """ + node = self + while True: + c = node.parent.children + i = c.index(node) + if i == len(c) - 1: + node = node.parent + if node.parent is None: + return None + else: + node = c[i + 1] + break + + while True: + try: + node = node.children[0] + except AttributeError: # A Leaf doesn't have children. + return node + + @abstractproperty + def start_pos(self): + """ + Returns the starting position of the prefix as a tuple, e.g. `(3, 4)`. + + :return tuple of int: (line, column) + """ + + @abstractproperty + def end_pos(self): + """ + Returns the end position of the prefix as a tuple, e.g. `(3, 4)`. + + :return tuple of int: (line, column) + """ + + @abstractmethod + def get_start_pos_of_prefix(self): + """ + Returns the start_pos of the prefix. This means basically it returns + the end_pos of the last prefix. The `get_start_pos_of_prefix()` of the + prefix `+` in `2 + 1` would be `(1, 1)`, while the start_pos is + `(1, 2)`. + + :return tuple of int: (line, column) + """ + + @abstractmethod + def get_first_leaf(self): + """ + Returns the first leaf of a node or itself if this is a leaf. + """ + + @abstractmethod + def get_last_leaf(self): + """ + Returns the last leaf of a node or itself if this is a leaf. + """ + + @abstractmethod + def get_code(self, include_prefix=True): + """ + Returns the code that was input the input for the parser for this node. + + :param include_prefix: Removes the prefix (whitespace and comments) of + e.g. a statement. + """ + + +class Leaf(NodeOrLeaf): + ''' + Leafs are basically tokens with a better API. Leafs exactly know where they + were defined and what text preceeds them. + ''' + __slots__ = ('value', 'parent', 'line', 'column', 'prefix') + + def __init__(self, value, start_pos, prefix=''): + self.value = value + ''' + :py:func:`str` The value of the current token. + ''' + self.start_pos = start_pos + self.prefix = prefix + ''' + :py:func:`str` Typically a mixture of whitespace and comments. Stuff + that is syntactically irrelevant for the syntax tree. + ''' + self.parent = None + ''' + The parent :class:`BaseNode` of this leaf. + ''' + + @property + def start_pos(self): + return self.line, self.column + + @start_pos.setter + def start_pos(self, value): + self.line = value[0] + self.column = value[1] + + def get_start_pos_of_prefix(self): + previous_leaf = self.get_previous_leaf() + if previous_leaf is None: + lines = split_lines(self.prefix) + # + 1 is needed because split_lines always returns at least ['']. + return self.line - len(lines) + 1, 0 # It's the first leaf. + return previous_leaf.end_pos + + def get_first_leaf(self): + return self + + def get_last_leaf(self): + return self + + def get_code(self, include_prefix=True): + if include_prefix: + return self.prefix + self.value + else: + return self.value + + @property + def end_pos(self): + lines = split_lines(self.value) + end_pos_line = self.line + len(lines) - 1 + # Check for multiline token + if self.line == end_pos_line: + end_pos_column = self.column + len(lines[-1]) + else: + end_pos_column = len(lines[-1]) + return end_pos_line, end_pos_column + + @utf8_repr + def __repr__(self): + value = self.value + if not value: + value = self.type + return "<%s: %s>" % (type(self).__name__, value) + + +class TypedLeaf(Leaf): + __slots__ = ('type',) + + def __init__(self, type, value, start_pos, prefix=''): + super(TypedLeaf, self).__init__(value, start_pos, prefix) + self.type = type + + +class BaseNode(NodeOrLeaf): + """ + The super class for all nodes. + A node has children, a type and possibly a parent node. + """ + __slots__ = ('children', 'parent') + type = None + + def __init__(self, children): + self.children = children + """ + A list of :class:`NodeOrLeaf` child nodes. + """ + self.parent = None + ''' + The parent :class:`BaseNode` of this leaf. + None if this is the root node. + ''' + + @property + def start_pos(self): + return self.children[0].start_pos + + def get_start_pos_of_prefix(self): + return self.children[0].get_start_pos_of_prefix() + + @property + def end_pos(self): + return self.children[-1].end_pos + + def _get_code_for_children(self, children, include_prefix): + if include_prefix: + return "".join(c.get_code() for c in children) + else: + first = children[0].get_code(include_prefix=False) + return first + "".join(c.get_code() for c in children[1:]) + + def get_code(self, include_prefix=True): + return self._get_code_for_children(self.children, include_prefix) + + def get_leaf_for_position(self, position, include_prefixes=False): + """ + Get the :py:class:`parso.tree.Leaf` at ``position`` + + :param tuple position: A position tuple, row, column. Rows start from 1 + :param bool include_prefixes: If ``False``, ``None`` will be returned if ``position`` falls + on whitespace or comments before a leaf + :return: :py:class:`parso.tree.Leaf` at ``position``, or ``None`` + """ + def binary_search(lower, upper): + if lower == upper: + element = self.children[lower] + if not include_prefixes and position < element.start_pos: + # We're on a prefix. + return None + # In case we have prefixes, a leaf always matches + try: + return element.get_leaf_for_position(position, include_prefixes) + except AttributeError: + return element + + + index = int((lower + upper) / 2) + element = self.children[index] + if position <= element.end_pos: + return binary_search(lower, index) + else: + return binary_search(index + 1, upper) + + if not ((1, 0) <= position <= self.children[-1].end_pos): + raise ValueError('Please provide a position that exists within this node.') + return binary_search(0, len(self.children) - 1) + + def get_first_leaf(self): + return self.children[0].get_first_leaf() + + def get_last_leaf(self): + return self.children[-1].get_last_leaf() + + @utf8_repr + def __repr__(self): + code = self.get_code().replace('\n', ' ').replace('\r', ' ').strip() + if not py_version >= 30: + code = code.encode(encoding, 'replace') + return "<%s: %s@%s,%s>" % \ + (type(self).__name__, code, self.start_pos[0], self.start_pos[1]) + + +class Node(BaseNode): + """Concrete implementation for interior nodes.""" + __slots__ = ('type',) + + def __init__(self, type, children): + super(Node, self).__init__(children) + self.type = type + + def __repr__(self): + return "%s(%s, %r)" % (self.__class__.__name__, self.type, self.children) + + +class ErrorNode(BaseNode): + """ + A node that contains valid nodes/leaves that we're follow by a token that + was invalid. This basically means that the leaf after this node is where + Python would mark a syntax error. + """ + __slots__ = () + type = 'error_node' + + +class ErrorLeaf(Leaf): + """ + A leaf that is either completely invalid in a language (like `$` in Python) + or is invalid at that position. Like the star in `1 +* 1`. + """ + __slots__ = ('token_type',) + type = 'error_leaf' + + def __init__(self, token_type, value, start_pos, prefix=''): + super(ErrorLeaf, self).__init__(value, start_pos, prefix) + self.token_type = token_type + + def __repr__(self): + return "<%s: %s:%s, %s>" % \ + (type(self).__name__, self.token_type, repr(self.value), self.start_pos) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/utils.py b/vim/bundle/jedi-vim/pythonx/parso/parso/utils.py new file mode 100644 index 0000000..579c4cc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/utils.py @@ -0,0 +1,175 @@ +from collections import namedtuple +import re +import sys +from ast import literal_eval + +from parso._compatibility import unicode, total_ordering + +# The following is a list in Python that are line breaks in str.splitlines, but +# not in Python. In Python only \r (Carriage Return, 0xD) and \n (Line Feed, +# 0xA) are allowed to split lines. +_NON_LINE_BREAKS = ( + u'\v', # Vertical Tabulation 0xB + u'\f', # Form Feed 0xC + u'\x1C', # File Separator + u'\x1D', # Group Separator + u'\x1E', # Record Separator + u'\x85', # Next Line (NEL - Equivalent to CR+LF. + # Used to mark end-of-line on some IBM mainframes.) + u'\u2028', # Line Separator + u'\u2029', # Paragraph Separator +) + +Version = namedtuple('Version', 'major, minor, micro') + + +def split_lines(string, keepends=False): + r""" + Intended for Python code. In contrast to Python's :py:meth:`str.splitlines`, + looks at form feeds and other special characters as normal text. Just + splits ``\n`` and ``\r\n``. + Also different: Returns ``[""]`` for an empty string input. + + In Python 2.7 form feeds are used as normal characters when using + str.splitlines. However in Python 3 somewhere there was a decision to split + also on form feeds. + """ + if keepends: + lst = string.splitlines(True) + + # We have to merge lines that were broken by form feed characters. + merge = [] + for i, line in enumerate(lst): + try: + last_chr = line[-1] + except IndexError: + pass + else: + if last_chr in _NON_LINE_BREAKS: + merge.append(i) + + for index in reversed(merge): + try: + lst[index] = lst[index] + lst[index + 1] + del lst[index + 1] + except IndexError: + # index + 1 can be empty and therefore there's no need to + # merge. + pass + + # The stdlib's implementation of the end is inconsistent when calling + # it with/without keepends. One time there's an empty string in the + # end, one time there's none. + if string.endswith('\n') or string.endswith('\r') or string == '': + lst.append('') + return lst + else: + return re.split(r'\n|\r\n|\r', string) + + +def python_bytes_to_unicode(source, encoding='utf-8', errors='strict'): + """ + Checks for unicode BOMs and PEP 263 encoding declarations. Then returns a + unicode object like in :py:meth:`bytes.decode`. + + :param encoding: See :py:meth:`bytes.decode` documentation. + :param errors: See :py:meth:`bytes.decode` documentation. ``errors`` can be + ``'strict'``, ``'replace'`` or ``'ignore'``. + """ + def detect_encoding(): + """ + For the implementation of encoding definitions in Python, look at: + - http://www.python.org/dev/peps/pep-0263/ + - http://docs.python.org/2/reference/lexical_analysis.html#encoding-declarations + """ + byte_mark = literal_eval(r"b'\xef\xbb\xbf'") + if source.startswith(byte_mark): + # UTF-8 byte-order mark + return 'utf-8' + + first_two_lines = re.match(br'(?:[^\n]*\n){0,2}', source).group(0) + possible_encoding = re.search(br"coding[=:]\s*([-\w.]+)", + first_two_lines) + if possible_encoding: + return possible_encoding.group(1) + else: + # the default if nothing else has been set -> PEP 263 + return encoding + + if isinstance(source, unicode): + # only cast str/bytes + return source + + encoding = detect_encoding() + if not isinstance(encoding, unicode): + encoding = unicode(encoding, 'utf-8', 'replace') + + # Cast to unicode + return unicode(source, encoding, errors) + + +def version_info(): + """ + Returns a namedtuple of parso's version, similar to Python's + ``sys.version_info``. + """ + from parso import __version__ + tupl = re.findall(r'[a-z]+|\d+', __version__) + return Version(*[x if i == 3 else int(x) for i, x in enumerate(tupl)]) + + +def _parse_version(version): + match = re.match(r'(\d+)(?:\.(\d)(?:\.\d+)?)?$', version) + if match is None: + raise ValueError('The given version is not in the right format. ' + 'Use something like "3.2" or "3".') + + major = int(match.group(1)) + minor = match.group(2) + if minor is None: + # Use the latest Python in case it's not exactly defined, because the + # grammars are typically backwards compatible? + if major == 2: + minor = "7" + elif major == 3: + minor = "6" + else: + raise NotImplementedError("Sorry, no support yet for those fancy new/old versions.") + minor = int(minor) + return PythonVersionInfo(major, minor) + + +@total_ordering +class PythonVersionInfo(namedtuple('Version', 'major, minor')): + def __gt__(self, other): + if isinstance(other, tuple): + if len(other) != 2: + raise ValueError("Can only compare to tuples of length 2.") + return (self.major, self.minor) > other + super(PythonVersionInfo, self).__gt__(other) + + return (self.major, self.minor) + + def __eq__(self, other): + if isinstance(other, tuple): + if len(other) != 2: + raise ValueError("Can only compare to tuples of length 2.") + return (self.major, self.minor) == other + super(PythonVersionInfo, self).__eq__(other) + + def __ne__(self, other): + return not self.__eq__(other) + + +def parse_version_string(version=None): + """ + Checks for a valid version number (e.g. `3.2` or `2.7.1` or `3`) and + returns a corresponding version info that is always two characters long in + decimal. + """ + if version is None: + version = '%s.%s' % sys.version_info[:2] + if not isinstance(version, (unicode, str)): + raise TypeError("version must be a string like 3.2.") + + return _parse_version(version) diff --git a/vim/bundle/jedi-vim/pythonx/parso/parso/utils.pyi b/vim/bundle/jedi-vim/pythonx/parso/parso/utils.pyi new file mode 100644 index 0000000..12c77da --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/parso/utils.pyi @@ -0,0 +1,29 @@ +from typing import NamedTuple, Optional, Sequence, Union + +class Version(NamedTuple): + major: int + minor: int + micro: int + +def split_lines(string: str, keepends: bool = ...) -> Sequence[str]: ... +def python_bytes_to_unicode( + source: Union[str, bytes], encoding: str = ..., errors: str = ... +) -> str: ... +def version_info() -> Version: + """ + Returns a namedtuple of parso's version, similar to Python's + ``sys.version_info``. + """ + ... + +class PythonVersionInfo(NamedTuple): + major: int + minor: int + +def parse_version_string(version: Optional[str]) -> PythonVersionInfo: + """ + Checks for a valid version number (e.g. `3.2` or `2.7.1` or `3`) and + returns a corresponding version info that is always two characters long in + decimal. + """ + ... diff --git a/vim/bundle/jedi-vim/pythonx/parso/pytest.ini b/vim/bundle/jedi-vim/pythonx/parso/pytest.ini new file mode 100644 index 0000000..cd6a4af --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/pytest.ini @@ -0,0 +1,12 @@ +[pytest] +addopts = --doctest-modules + +testpaths = parso test + +# Ignore broken files inblackbox test directories +norecursedirs = .* docs scripts normalizer_issue_files build + +# Activate `clean_jedi_cache` fixture for all tests. This should be +# fine as long as we are using `clean_jedi_cache` as a session scoped +# fixture. +usefixtures = clean_parso_cache diff --git a/vim/bundle/jedi-vim/pythonx/parso/scripts/diff_parser_profile.py b/vim/bundle/jedi-vim/pythonx/parso/scripts/diff_parser_profile.py new file mode 100755 index 0000000..a152a3e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/scripts/diff_parser_profile.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +""" +Profile a piece of Python code with ``cProfile`` that uses the diff parser. + +Usage: + profile.py [-d] [-s ] + profile.py -h | --help + +Options: + -h --help Show this screen. + -d --debug Enable Jedi internal debugging. + -s Sort the profile results, e.g. cumtime, name [default: time]. +""" + +import cProfile + +from docopt import docopt +from jedi.parser.python import load_grammar +from jedi.parser.diff import DiffParser +from jedi.parser.python import ParserWithRecovery +from jedi._compatibility import u +from jedi.common import splitlines +import jedi + + +def run(parser, lines): + diff_parser = DiffParser(parser) + diff_parser.update(lines) + # Make sure used_names is loaded + parser.module.used_names + + +def main(args): + if args['--debug']: + jedi.set_debug_function(notices=True) + + with open(args['']) as f: + code = f.read() + grammar = load_grammar() + parser = ParserWithRecovery(grammar, u(code)) + # Make sure used_names is loaded + parser.module.used_names + + code = code + '\na\n' # Add something so the diff parser needs to run. + lines = splitlines(code, keepends=True) + cProfile.runctx('run(parser, lines)', globals(), locals(), sort=args['-s']) + +if __name__ == '__main__': + args = docopt(__doc__) + main(args) diff --git a/vim/bundle/jedi-vim/pythonx/parso/setup.cfg b/vim/bundle/jedi-vim/pythonx/parso/setup.cfg new file mode 100644 index 0000000..1295389 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/setup.cfg @@ -0,0 +1,12 @@ +[bdist_wheel] +universal=1 + +[flake8] +max-line-length = 100 +ignore = + # do not use bare 'except' + E722, + # don't know why this was ever even an option, 1+1 should be possible. + E226, + # line break before binary operator + W503, diff --git a/vim/bundle/jedi-vim/pythonx/parso/setup.py b/vim/bundle/jedi-vim/pythonx/parso/setup.py new file mode 100755 index 0000000..0d70dbc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/setup.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +from __future__ import with_statement + +from setuptools import setup, find_packages + +import parso + + +__AUTHOR__ = 'David Halter' +__AUTHOR_EMAIL__ = 'davidhalter88@gmail.com' + +readme = open('README.rst').read() + '\n\n' + open('CHANGELOG.rst').read() + +setup(name='parso', + version=parso.__version__, + description='A Python Parser', + author=__AUTHOR__, + author_email=__AUTHOR_EMAIL__, + include_package_data=True, + maintainer=__AUTHOR__, + maintainer_email=__AUTHOR_EMAIL__, + url='https://github.com/davidhalter/parso', + license='MIT', + keywords='python parser parsing', + long_description=readme, + packages=find_packages(exclude=['test']), + package_data={'parso': ['python/grammar*.txt']}, + platforms=['any'], + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: Plugins', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Text Editors :: Integrated Development Environments (IDE)', + 'Topic :: Utilities', + ], + extras_require={ + 'testing': [ + 'pytest>=3.0.7', + 'docopt', + ], + }, + ) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/__init__.py b/vim/bundle/jedi-vim/pythonx/parso/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/failing_examples.py b/vim/bundle/jedi-vim/pythonx/parso/test/failing_examples.py new file mode 100644 index 0000000..c15cbf8 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/failing_examples.py @@ -0,0 +1,321 @@ +# -*- coding: utf-8 -*- +import sys +from textwrap import dedent + + +def indent(code): + lines = code.splitlines(True) + return ''.join([' ' * 2 + line for line in lines]) + + +def build_nested(code, depth, base='def f():\n'): + if depth == 0: + return code + + new_code = base + indent(code) + return build_nested(new_code, depth - 1, base=base) + + +FAILING_EXAMPLES = [ + '1 +', + '?', + 'continue', + 'break', + 'return', + 'yield', + + # SyntaxError from Python/ast.c + 'f(x for x in bar, 1)', + 'from foo import a,', + 'from __future__ import whatever', + 'from __future__ import braces', + 'from .__future__ import whatever', + 'def f(x=3, y): pass', + 'lambda x=3, y: x', + '__debug__ = 1', + 'with x() as __debug__: pass', + # Mostly 3.6 relevant + '[]: int', + '[a, b]: int', + '(): int', + '(()): int', + '((())): int', + '{}: int', + 'True: int', + '(a, b): int', + '*star,: int', + 'a, b: int = 3', + 'foo(+a=3)', + 'f(lambda: 1=1)', + 'f(x=1, x=2)', + 'f(**x, y)', + 'f(x=2, y)', + 'f(**x, *y)', + 'f(**x, y=3, z)', + 'a, b += 3', + '(a, b) += 3', + '[a, b] += 3', + # All assignment tests + 'lambda a: 1 = 1', + '[x for x in y] = 1', + '{x for x in y} = 1', + '{x:x for x in y} = 1', + '(x for x in y) = 1', + 'None = 1', + '... = 1', + 'a == b = 1', + '{a, b} = 1', + '{a: b} = 1', + '1 = 1', + '"" = 1', + 'b"" = 1', + 'b"" = 1', + '"" "" = 1', + '1 | 1 = 3', + '1**1 = 3', + '~ 1 = 3', + 'not 1 = 3', + '1 and 1 = 3', + 'def foo(): (yield 1) = 3', + 'def foo(): x = yield 1 = 3', + 'async def foo(): await x = 3', + '(a if a else a) = a', + 'a, 1 = x', + 'foo() = 1', + # Cases without the equals but other assignments. + 'with x as foo(): pass', + 'del bar, 1', + 'for x, 1 in []: pass', + 'for (not 1) in []: pass', + '[x for 1 in y]', + '[x for a, 3 in y]', + '(x for 1 in y)', + '{x for 1 in y}', + '{x:x for 1 in y}', + # Unicode/Bytes issues. + r'u"\x"', + r'u"\"', + r'u"\u"', + r'u"""\U"""', + r'u"\Uffffffff"', + r"u'''\N{}'''", + r"u'\N{foo}'", + r'b"\x"', + r'b"\"', + '*a, *b = 3, 3', + 'async def foo(): yield from []', + 'yield from []', + '*a = 3', + 'del *a, b', + 'def x(*): pass', + '(%s *d) = x' % ('a,' * 256), + '{**{} for a in [1]}', + + # Parser/tokenize.c + r'"""', + r'"', + r"'''", + r"'", + r"\blub", + # IndentationError: too many levels of indentation + build_nested('pass', 100), + + # SyntaxErrors from Python/symtable.c + 'def f(x, x): pass', + 'nonlocal a', + + # IndentationError + ' foo', + 'def x():\n 1\n 2', + 'def x():\n 1\n 2', + 'if 1:\nfoo', + 'if 1: blubb\nif 1:\npass\nTrue and False', + + # f-strings + 'f"{}"', + r'f"{\}"', + 'f"{\'\\\'}"', + 'f"{#}"', + "f'{1!b}'", + "f'{1:{5:{3}}}'", + "f'{'", + "f'{'", + "f'}'", + "f'{\"}'", + "f'{\"}'", + # Now nested parsing + "f'{continue}'", + "f'{1;1}'", + "f'{a;}'", + "f'{b\"\" \"\"}'", +] + +GLOBAL_NONLOCAL_ERROR = [ + dedent(''' + def glob(): + x = 3 + x.z + global x'''), + dedent(''' + def glob(): + x = 3 + global x'''), + dedent(''' + def glob(): + x + global x'''), + dedent(''' + def glob(): + x = 3 + x.z + nonlocal x'''), + dedent(''' + def glob(): + x = 3 + nonlocal x'''), + dedent(''' + def glob(): + x + nonlocal x'''), + # Annotation issues + dedent(''' + def glob(): + x[0]: foo + global x'''), + dedent(''' + def glob(): + x.a: foo + global x'''), + dedent(''' + def glob(): + x: foo + global x'''), + dedent(''' + def glob(): + x: foo = 5 + global x'''), + dedent(''' + def glob(): + x: foo = 5 + x + global x'''), + dedent(''' + def glob(): + global x + x: foo = 3 + '''), + # global/nonlocal + param + dedent(''' + def glob(x): + global x + '''), + dedent(''' + def glob(x): + nonlocal x + '''), + dedent(''' + def x(): + a =3 + def z(): + nonlocal a + a = 3 + nonlocal a + '''), + dedent(''' + def x(): + a = 4 + def y(): + global a + nonlocal a + '''), + # Missing binding of nonlocal + dedent(''' + def x(): + nonlocal a + '''), + dedent(''' + def x(): + def y(): + nonlocal a + '''), + dedent(''' + def x(): + a = 4 + def y(): + global a + print(a) + def z(): + nonlocal a + '''), +] + +if sys.version_info >= (3, 6): + FAILING_EXAMPLES += GLOBAL_NONLOCAL_ERROR +if sys.version_info >= (3, 5): + FAILING_EXAMPLES += [ + # Raises different errors so just ignore them for now. + '[*[] for a in [1]]', + # Raises multiple errors in previous versions. + 'async def bla():\n def x(): await bla()', + ] +if sys.version_info >= (3, 4): + # Before that del None works like del list, it gives a NameError. + FAILING_EXAMPLES.append('del None') +if sys.version_info >= (3,): + FAILING_EXAMPLES += [ + # Unfortunately assigning to False and True do not raise an error in + # 2.x. + '(True,) = x', + '([False], a) = x', + # A symtable error that raises only a SyntaxWarning in Python 2. + 'def x(): from math import *', + # unicode chars in bytes are allowed in python 2 + 'b"ä"', + # combining strings and unicode is allowed in Python 2. + '"s" b""', + '"s" b"" ""', + 'b"" "" b"" ""', + ] +if sys.version_info >= (3, 6): + FAILING_EXAMPLES += [ + # Same as above, but for f-strings. + 'f"s" b""', + 'b"s" f""', + ] +if sys.version_info >= (2, 7): + # This is something that raises a different error in 2.6 than in the other + # versions. Just skip it for 2.6. + FAILING_EXAMPLES.append('[a, 1] += 3') + +if sys.version_info[:2] == (3, 5): + # yields are not allowed in 3.5 async functions. Therefore test them + # separately, here. + FAILING_EXAMPLES += [ + 'async def foo():\n yield x', + 'async def foo():\n yield x', + ] +else: + FAILING_EXAMPLES += [ + 'async def foo():\n yield x\n return 1', + 'async def foo():\n yield x\n return 1', + ] + + +if sys.version_info[:2] <= (3, 4): + # Python > 3.4 this is valid code. + FAILING_EXAMPLES += [ + 'a = *[1], 2', + '(*[1], 2)', + ] + +if sys.version_info[:2] < (3, 8): + FAILING_EXAMPLES += [ + # Python/compile.c + dedent('''\ + for a in [1]: + try: + pass + finally: + continue + '''), # 'continue' not supported inside 'finally' clause" + ] diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/fuzz_diff_parser.py b/vim/bundle/jedi-vim/pythonx/parso/test/fuzz_diff_parser.py new file mode 100644 index 0000000..7e7098a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/fuzz_diff_parser.py @@ -0,0 +1,290 @@ +""" +A script to find bugs in the diff parser. + +This script is extremely useful if changes are made to the diff parser. By +running a few thousand iterations, we can assure that the diff parser is in +good shape. + +Usage: + fuzz_diff_parser.py [--pdb|--ipdb] [-l] [-n=] [-x=] random [] + fuzz_diff_parser.py [--pdb|--ipdb] [-l] redo [-o=] [-p] + fuzz_diff_parser.py -h | --help + +Options: + -h --help Show this screen + -n, --maxtries= Maximum of random tries [default: 1000] + -x, --changes= Amount of changes to be done to a file per try [default: 5] + -l, --logging Prints all the logs + -o, --only-last= Only runs the last n iterations; Defaults to running all + -p, --print-code Print all test diffs + --pdb Launch pdb when error is raised + --ipdb Launch ipdb when error is raised +""" + +from __future__ import print_function +import logging +import sys +import os +import random +import pickle + +import parso +from parso.utils import split_lines +from test.test_diff_parser import _check_error_leaves_nodes + +_latest_grammar = parso.load_grammar(version='3.8') +_python_reserved_strings = tuple( + # Keywords are ususally only interesting in combination with spaces after + # them. We don't put a space before keywords, to avoid indentation errors. + s + (' ' if s.isalpha() else '') + for s in _latest_grammar._pgen_grammar.reserved_syntax_strings.keys() +) +_random_python_fragments = _python_reserved_strings + ( + ' ', '\t', '\n', '\r', '\f', 'f"', 'F"""', "fr'", "RF'''", '"', '"""', "'", + "'''", ';', ' some_random_word ', '\\', '#', +) + + +def find_python_files_in_tree(file_path): + if not os.path.isdir(file_path): + yield file_path + return + for root, dirnames, filenames in os.walk(file_path): + for name in filenames: + if name.endswith('.py'): + yield os.path.join(root, name) + + +def _print_copyable_lines(lines): + for line in lines: + line = repr(line)[1:-1] + if line.endswith(r'\n'): + line = line[:-2] + '\n' + print(line, end='') + + +def _get_first_error_start_pos_or_none(module): + error_leaf = _check_error_leaves_nodes(module) + return None if error_leaf is None else error_leaf.start_pos + + +class LineReplacement: + def __init__(self, line_nr, new_line): + self._line_nr = line_nr + self._new_line = new_line + + def apply(self, code_lines): + # print(repr(self._new_line)) + code_lines[self._line_nr] = self._new_line + + +class LineDeletion: + def __init__(self, line_nr): + self.line_nr = line_nr + + def apply(self, code_lines): + del code_lines[self.line_nr] + + +class LineCopy: + def __init__(self, copy_line, insertion_line): + self._copy_line = copy_line + self._insertion_line = insertion_line + + def apply(self, code_lines): + code_lines.insert( + self._insertion_line, + # Use some line from the file. This doesn't feel totally + # random, but for the diff parser it will feel like it. + code_lines[self._copy_line] + ) + + +class FileModification: + @classmethod + def generate(cls, code_lines, change_count): + return cls( + list(cls._generate_line_modifications(code_lines, change_count)), + # work with changed trees more than with normal ones. + check_original=random.random() > 0.8, + ) + + @staticmethod + def _generate_line_modifications(lines, change_count): + def random_line(include_end=False): + return random.randint(0, len(lines) - (not include_end)) + + lines = list(lines) + for _ in range(change_count): + rand = random.randint(1, 4) + if rand == 1: + if len(lines) == 1: + # We cannot delete every line, that doesn't make sense to + # fuzz and it would be annoying to rewrite everything here. + continue + l = LineDeletion(random_line()) + elif rand == 2: + # Copy / Insertion + # Make it possible to insert into the first and the last line + l = LineCopy(random_line(), random_line(include_end=True)) + elif rand in (3, 4): + # Modify a line in some weird random ways. + line_nr = random_line() + line = lines[line_nr] + column = random.randint(0, len(line)) + random_string = '' + for _ in range(random.randint(1, 3)): + if random.random() > 0.8: + # The lower characters cause way more issues. + unicode_range = 0x1f if random.randint(0, 1) else 0x3000 + random_string += chr(random.randint(0, unicode_range)) + else: + # These insertions let us understand how random + # keyword/operator insertions work. Theoretically this + # could also be done with unicode insertions, but the + # fuzzer is just way more effective here. + random_string += random.choice(_random_python_fragments) + if random.random() > 0.5: + # In this case we insert at a very random place that + # probably breaks syntax. + line = line[:column] + random_string + line[column:] + else: + # Here we have better chances to not break syntax, because + # we really replace the line with something that has + # indentation. + line = ' ' * random.randint(0, 12) + random_string + '\n' + l = LineReplacement(line_nr, line) + l.apply(lines) + yield l + + def __init__(self, modification_list, check_original): + self._modification_list = modification_list + self._check_original = check_original + + def _apply(self, code_lines): + changed_lines = list(code_lines) + for modification in self._modification_list: + modification.apply(changed_lines) + return changed_lines + + def run(self, grammar, code_lines, print_code): + code = ''.join(code_lines) + modified_lines = self._apply(code_lines) + modified_code = ''.join(modified_lines) + + if print_code: + if self._check_original: + print('Original:') + _print_copyable_lines(code_lines) + + print('\nModified:') + _print_copyable_lines(modified_lines) + print() + + if self._check_original: + m = grammar.parse(code, diff_cache=True) + start1 = _get_first_error_start_pos_or_none(m) + + grammar.parse(modified_code, diff_cache=True) + + if self._check_original: + # Also check if it's possible to "revert" the changes. + m = grammar.parse(code, diff_cache=True) + start2 = _get_first_error_start_pos_or_none(m) + assert start1 == start2, (start1, start2) + + +class FileTests: + def __init__(self, file_path, test_count, change_count): + self._path = file_path + with open(file_path) as f: + code = f.read() + self._code_lines = split_lines(code, keepends=True) + self._test_count = test_count + self._code_lines = self._code_lines + self._change_count = change_count + self._file_modifications = [] + + def _run(self, grammar, file_modifications, debugger, print_code=False): + try: + for i, fm in enumerate(file_modifications, 1): + fm.run(grammar, self._code_lines, print_code=print_code) + print('.', end='') + sys.stdout.flush() + print() + except Exception: + print("Issue in file: %s" % self._path) + if debugger: + einfo = sys.exc_info() + pdb = __import__(debugger) + pdb.post_mortem(einfo[2]) + raise + + def redo(self, grammar, debugger, only_last, print_code): + mods = self._file_modifications + if only_last is not None: + mods = mods[-only_last:] + self._run(grammar, mods, debugger, print_code=print_code) + + def run(self, grammar, debugger): + def iterate(): + for _ in range(self._test_count): + fm = FileModification.generate(self._code_lines, self._change_count) + self._file_modifications.append(fm) + yield fm + + self._run(grammar, iterate(), debugger) + + +def main(arguments): + debugger = 'pdb' if arguments['--pdb'] else \ + 'ipdb' if arguments['--ipdb'] else None + redo_file = os.path.join(os.path.dirname(__file__), 'fuzz-redo.pickle') + + if arguments['--logging']: + root = logging.getLogger() + root.setLevel(logging.DEBUG) + + ch = logging.StreamHandler(sys.stdout) + ch.setLevel(logging.DEBUG) + root.addHandler(ch) + + grammar = parso.load_grammar() + parso.python.diff.DEBUG_DIFF_PARSER = True + if arguments['redo']: + with open(redo_file, 'rb') as f: + file_tests_obj = pickle.load(f) + only_last = arguments['--only-last'] and int(arguments['--only-last']) + file_tests_obj.redo( + grammar, + debugger, + only_last=only_last, + print_code=arguments['--print-code'] + ) + elif arguments['random']: + # A random file is used to do diff parser checks if no file is given. + # This helps us to find errors in a lot of different files. + file_paths = list(find_python_files_in_tree(arguments[''] or '.')) + max_tries = int(arguments['--maxtries']) + tries = 0 + try: + while tries < max_tries: + path = random.choice(file_paths) + print("Checking %s: %s tries" % (path, tries)) + now_tries = min(1000, max_tries - tries) + file_tests_obj = FileTests(path, now_tries, int(arguments['--changes'])) + file_tests_obj.run(grammar, debugger) + tries += now_tries + except Exception: + with open(redo_file, 'wb') as f: + pickle.dump(file_tests_obj, f) + raise + else: + raise NotImplementedError('Command is not implemented') + + +if __name__ == '__main__': + from docopt import docopt + + arguments = docopt(__doc__) + main(arguments) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E10.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E10.py new file mode 100644 index 0000000..38d7a19 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E10.py @@ -0,0 +1,51 @@ +for a in 'abc': + for b in 'xyz': + hello(a) # indented with 8 spaces + #: E903:0 + hello(b) # indented with 1 tab +if True: + #: E101:0 + pass + +#: E122+1 +change_2_log = \ +"""Change 2 by slamb@testclient on 2006/04/13 21:46:23 + + creation +""" + +p4change = { + 2: change_2_log, +} + + +class TestP4Poller(unittest.TestCase): + def setUp(self): + self.setUpGetProcessOutput() + return self.setUpChangeSource() + + def tearDown(self): + pass + + +# +if True: + #: E101:0 E101+1:0 + foo(1, + 2) + + +def test_keys(self): + """areas.json - All regions are accounted for.""" + expected = set([ + #: E101:0 + u'Norrbotten', + #: E101:0 + u'V\xe4sterbotten', + ]) + + +if True: + hello(""" + tab at start of this line +""") diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E101.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E101.py new file mode 100644 index 0000000..cc24719 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E101.py @@ -0,0 +1,137 @@ +# Used to be the file for W191 + +#: E101+1 +if False: + print # indented with 1 tab + +#: E101+1 +y = x == 2 \ + or x == 3 +#: E101+5 +if ( + x == ( + 3 + ) or + y == 4): + pass +#: E101+3 +if x == 2 \ + or y > 1 \ + or x == 3: + pass +#: E101+3 +if x == 2 \ + or y > 1 \ + or x == 3: + pass + +#: E101+1 +if (foo == bar and baz == frop): + pass +#: E101+1 +if (foo == bar and baz == frop): + pass + +#: E101+2 E101+3 +if start[1] > end_col and not ( + over_indent == 4 and indent_next): + assert (0, "E121 continuation line over-" + "indented for visual indent") + + +#: E101+3 +def long_function_name( + var_one, var_two, var_three, + var_four): + hello(var_one) + + +#: E101+2 +if ((row < 0 or self.moduleCount <= row or + col < 0 or self.moduleCount <= col)): + raise Exception("%s,%s - %s" % (row, col, self.moduleCount)) +#: E101+1 E101+2 E101+3 E101+4 E101+5 E101+6 +if bar: + assert ( + start, 'E121 lines starting with a ' + 'closing bracket should be indented ' + "to match that of the opening " + "bracket's line" + ) + +# you want vertical alignment, so use a parens +#: E101+3 +if ((foo.bar("baz") and + foo.bar("frop") + )): + hello("yes") +#: E101+3 +# also ok, but starting to look like LISP +if ((foo.bar("baz") and + foo.bar("frop"))): + hello("yes") +#: E101+1 +if (a == 2 or b == "abc def ghi" "jkl mno"): + assert True +#: E101+2 +if (a == 2 or b == """abc def ghi +jkl mno"""): + assert True +#: E101+1 E101+2 +if length > options.max_line_length: + assert options.max_line_length, \ + "E501 line too long (%d characters)" % length + + +#: E101+1 E101+2 +if os.path.exists(os.path.join(path, PEP8_BIN)): + cmd = ([os.path.join(path, PEP8_BIN)] + + self._pep8_options(targetfile)) +# TODO Tabs in docstrings shouldn't be there, use \t. +''' + multiline string with tab in it''' +# Same here. +'''multiline string + with tabs + and spaces +''' +# Okay +'''sometimes, you just need to go nuts in a multiline string + and allow all sorts of crap + like mixed tabs and spaces + +or trailing whitespace +or long long long long long long long long long long long long long long long long long lines +''' # noqa +# Okay +'''this one + will get no warning +even though the noqa comment is not immediately after the string +''' + foo # noqa + +#: E101+2 +if foo is None and bar is "frop" and \ + blah == 'yeah': + blah = 'yeahnah' + + +#: E101+1 E101+2 E101+3 +if True: + foo( + 1, + 2) + + +#: E101+1 E101+2 E101+3 E101+4 E101+5 +def test_keys(self): + """areas.json - All regions are accounted for.""" + expected = set([ + u'Norrbotten', + u'V\xe4sterbotten', + ]) + + +#: E101+1 +x = [ + 'abc' +] diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E11.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E11.py new file mode 100644 index 0000000..9b97f39 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E11.py @@ -0,0 +1,60 @@ +if x > 2: + #: E111:2 + hello(x) +if True: + #: E111:5 + print + #: E111:6 + # + #: E111:2 + # what + # Comment is fine +# Comment is also fine + +if False: + pass +print +print +#: E903:0 + print +mimetype = 'application/x-directory' +#: E111:5 + # 'httpd/unix-directory' +create_date = False + + +def start(self): + # foo + #: E111:8 + # bar + if True: # Hello + self.master.start() # Comment + # try: + #: E111:12 + # self.master.start() + # except MasterExit: + #: E111:12 + # self.shutdown() + # finally: + #: E111:12 + # sys.exit() + # Dedent to the first level + #: E111:6 + # error +# Dedent to the base level +#: E111:2 + # Also wrongly indented. +# Indent is correct. + + +def start(self): # Correct comment + if True: + #: E111:0 +# try: + #: E111:0 +# self.master.start() + #: E111:0 +# except MasterExit: + #: E111:0 +# self.shutdown() + self.master.start() # comment diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_first.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_first.py new file mode 100644 index 0000000..8dc65a5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_first.py @@ -0,0 +1,78 @@ +abc = "E121", ( + #: E121:2 + "dent") +abc = "E122", ( + #: E121:0 +"dent") +my_list = [ + 1, 2, 3, + 4, 5, 6, + #: E123 + ] +abc = "E124", ("visual", + "indent_two" + #: E124:14 + ) +abc = "E124", ("visual", + "indent_five" + #: E124:0 +) +a = (123, + #: E124:0 +) +#: E129+1:4 +if (row < 0 or self.moduleCount <= row or + col < 0 or self.moduleCount <= col): + raise Exception("%s,%s - %s" % (row, col, self.moduleCount)) + +abc = "E126", ( + #: E126:12 + "dent") +abc = "E126", ( + #: E126:8 + "dent") +abc = "E127", ("over-", + #: E127:18 + "over-indent") +abc = "E128", ("visual", + #: E128:4 + "hanging") +abc = "E128", ("under-", + #: E128:14 + "under-indent") + + +my_list = [ + 1, 2, 3, + 4, 5, 6, + #: E123:5 + ] +result = { + #: E121:3 + 'key1': 'value', + #: E121:3 + 'key2': 'value', +} +rv.update(dict.fromkeys(( + 'qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), + #: E128:10 + '?'), + "foo") + +abricot = 3 + \ + 4 + \ + 5 + 6 +abc = "hello", ( + + "there", + #: E126:5 + # "john", + "dude") +part = set_mimetype(( + a.get('mime_type', 'text')), + 'default') +part = set_mimetype(( + a.get('mime_type', 'text')), + #: E127:21 + 'default') diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_first.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_first.py new file mode 100644 index 0000000..fc3b5f9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_first.py @@ -0,0 +1,356 @@ +# The issue numbers described in this file are part of the pycodestyle tracker +# and not of parso. +# Originally there were no issues in here, I (dave) added the ones that were +# necessary and IMO useful. +if ( + x == ( + 3 + ) or + y == 4): + pass + +y = x == 2 \ + or x == 3 + +#: E129+1:4 +if x == 2 \ + or y > 1 \ + or x == 3: + pass + +if x == 2 \ + or y > 1 \ + or x == 3: + pass + + +if (foo == bar and + baz == frop): + pass + +#: E129+1:4 E129+2:4 E123+3 +if ( + foo == bar and + baz == frop +): + pass + +if ( + foo == bar and + baz == frop + #: E129:4 + ): + pass + +a = ( +) + +a = (123, + ) + + +if start[1] > end_col and not ( + over_indent == 4 and indent_next): + assert (0, "E121 continuation line over-" + "indented for visual indent") + + +abc = "OK", ("visual", + "indent") + +abc = "Okay", ("visual", + "indent_three" + ) + +abc = "a-ok", ( + "there", + "dude", +) + +abc = "hello", ( + "there", + "dude") + +abc = "hello", ( + + "there", + # "john", + "dude") + +abc = "hello", ( + "there", "dude") + +abc = "hello", ( + "there", "dude", +) + +# Aligned with opening delimiter +foo = long_function_name(var_one, var_two, + var_three, var_four) + +# Extra indentation is not necessary. +foo = long_function_name( + var_one, var_two, + var_three, var_four) + + +arm = 'AAA' \ + 'BBB' \ + 'CCC' + +bbb = 'AAA' \ + 'BBB' \ + 'CCC' + +cc = ('AAA' + 'BBB' + 'CCC') + +cc = {'text': 'AAA' + 'BBB' + 'CCC'} + +cc = dict(text='AAA' + 'BBB') + +sat = 'AAA' \ + 'BBB' \ + 'iii' \ + 'CCC' + +abricot = (3 + + 4 + + 5 + 6) + +#: E122+1:4 +abricot = 3 + \ + 4 + \ + 5 + 6 + +part = [-1, 2, 3, + 4, 5, 6] + +#: E128+1:8 +part = [-1, (2, 3, + 4, 5, 6), 7, + 8, 9, 0] + +fnct(1, 2, 3, + 4, 5, 6) + +fnct(1, 2, 3, + 4, 5, 6, + 7, 8, 9, + 10, 11) + + +def long_function_name( + var_one, var_two, var_three, + var_four): + hello(var_one) + + +if ((row < 0 or self.moduleCount <= row or + col < 0 or self.moduleCount <= col)): + raise Exception("%s,%s - %s" % (row, col, self.moduleCount)) + + +result = { + 'foo': [ + 'bar', { + 'baz': 'frop', + } + ] +} + + +foo = my.func({ + "foo": "bar", +}, "baz") + + +fooff(aaaa, + cca( + vvv, + dadd + ), fff, + ggg) + +fooff(aaaa, + abbb, + cca( + vvv, + aaa, + dadd), + "visual indentation is not a multiple of four",) + +if bar: + assert ( + start, 'E121 lines starting with a ' + 'closing bracket should be indented ' + "to match that of the opening " + "bracket's line" + ) + +# you want vertical alignment, so use a parens +if ((foo.bar("baz") and + foo.bar("frop") + )): + hello("yes") + +# also ok, but starting to look like LISP +if ((foo.bar("baz") and + foo.bar("frop"))): + hello("yes") + +#: E129+1:4 E127+2:9 +if (a == 2 or + b == "abc def ghi" + "jkl mno"): + assert True + +#: E129+1:4 +if (a == 2 or + b == """abc def ghi +jkl mno"""): + assert True + +if length > options.max_line_length: + assert options.max_line_length, \ + "E501 line too long (%d characters)" % length + + +# blub + + +asd = 'l.{line}\t{pos}\t{name}\t{text}'.format( + line=token[2][0], + pos=pos, + name=tokenize.tok_name[token[0]], + text=repr(token[1]), +) + +#: E121+1:6 E121+2:6 +hello('%-7d %s per second (%d total)' % ( + options.counters[key] / elapsed, key, + options.counters[key])) + + +if os.path.exists(os.path.join(path, PEP8_BIN)): + cmd = ([os.path.join(path, PEP8_BIN)] + + self._pep8_options(targetfile)) + + +fixed = (re.sub(r'\t+', ' ', target[c::-1], 1)[::-1] + + target[c + 1:]) + +fixed = ( + re.sub(r'\t+', ' ', target[c::-1], 1)[::-1] + + target[c + 1:] +) + + +if foo is None and bar is "frop" and \ + blah == 'yeah': + blah = 'yeahnah' + + +"""This is a multi-line + docstring.""" + + +if blah: + # is this actually readable? :) + multiline_literal = """ +while True: + if True: + 1 +""".lstrip() + multiline_literal = ( + """ +while True: + if True: + 1 +""".lstrip() + ) + multiline_literal = ( + """ +while True: + if True: + 1 +""" + .lstrip() + ) + + +if blah: + multiline_visual = (""" +while True: + if True: + 1 +""" + .lstrip()) + + +rv = {'aaa': 42} +rv.update(dict.fromkeys(( + #: E121:4 E121+1:4 + 'qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), '?')) + +rv.update(dict.fromkeys(('qualif_nr', 'reasonComment_en', + 'reasonComment_fr', 'reasonComment_de', + 'reasonComment_it'), '?')) + +#: E128+1:10 +rv.update(dict.fromkeys(('qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), '?')) + + +rv.update(dict.fromkeys( + ('qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), '?' + ), "foo", context={ + 'alpha': 4, 'beta': 53242234, 'gamma': 17, + }) + + +rv.update( + dict.fromkeys(( + 'qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), '?'), + "foo", + context={ + 'alpha': 4, 'beta': 53242234, 'gamma': 17, + }, +) + + +event_obj.write(cursor, user_id, { + 'user': user, + 'summary': text, + 'data': data, + }) + +event_obj.write(cursor, user_id, { + 'user': user, + 'summary': text, + 'data': {'aaa': 1, 'bbb': 2}, + }) + +event_obj.write(cursor, user_id, { + 'user': user, + 'summary': text, + 'data': { + 'aaa': 1, + 'bbb': 2}, + }) + +event_obj.write(cursor, user_id, { + 'user': user, + 'summary': text, + 'data': {'timestamp': now, 'content': { + 'aaa': 1, + 'bbb': 2 + }}, + }) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_second.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_second.py new file mode 100644 index 0000000..e7c18e0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_not_second.py @@ -0,0 +1,294 @@ + +def qualify_by_address( + self, cr, uid, ids, context=None, + params_to_check=frozenset(QUALIF_BY_ADDRESS_PARAM)): + """ This gets called by the web server """ + + +def qualify_by_address(self, cr, uid, ids, context=None, + params_to_check=frozenset(QUALIF_BY_ADDRESS_PARAM)): + """ This gets called by the web server """ + + +_ipv4_re = re.compile('^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' + '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$') + + +fct(""" + AAA """ + status_2_string) + + +if context: + msg = """\ +action: GET-CONFIG +payload: + ip_address: "%(ip)s" + username: "%(username)s" +""" % context + + +if context: + msg = """\ +action: \ +GET-CONFIG +""" % context + + +if context: + #: E122+2:0 + msg = """\ +action: """\ +"""GET-CONFIG +""" % context + + +def unicode2html(s): + """Convert the characters &<>'" in string s to HTML-safe sequences. + Convert newline to
    too.""" + #: E127+1:28 + return unicode((s or '').replace('&', '&') + .replace('\n', '
    \n')) + + +parser.add_option('--count', action='store_true', + help="print total number of errors and warnings " + "to standard error and set exit code to 1 if " + "total is not null") + +parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE, + help="exclude files or directories which match these " + "comma separated patterns (default: %s)" % + DEFAULT_EXCLUDE) + +add_option('--count', + #: E135+1 + help="print total number of errors " + "to standard error total is not null") + +add_option('--count', + #: E135+2:11 + help="print total number of errors " + "to standard error " + "total is not null") + + +help = ("print total number of errors " + + "to standard error") + +help = "print total number of errors " \ + "to standard error" + +help = u"print total number of errors " \ + u"to standard error" + +help = b"print total number of errors " \ + b"to standard error" + +#: E122+1:5 +help = br"print total number of errors " \ + br"to standard error" + +d = dict('foo', help="exclude files or directories which match these " + #: E135:9 + "comma separated patterns (default: %s)" % DEFAULT_EXCLUDE) + +d = dict('foo', help=u"exclude files or directories which match these " + u"comma separated patterns (default: %s)" + % DEFAULT_EXCLUDE) + +#: E135+1:9 E135+2:9 +d = dict('foo', help=b"exclude files or directories which match these " + b"comma separated patterns (default: %s)" + % DEFAULT_EXCLUDE) + +d = dict('foo', help=br"exclude files or directories which match these " + br"comma separated patterns (default: %s)" % + DEFAULT_EXCLUDE) + +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s)" % + DEFAULT_EXCLUDE) + +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s, %s)" % + (DEFAULT_EXCLUDE, DEFAULT_IGNORE) + ) + +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s, %s)" % + # who knows what might happen here? + (DEFAULT_EXCLUDE, DEFAULT_IGNORE) + ) + +# parens used to allow the indenting. +troublefree_hash = { + "hash": "value", + "long": ("the quick brown fox jumps over the lazy dog before doing a " + "somersault"), + "long key that tends to happen more when you're indented": ( + "stringwithalongtoken you don't want to break" + ), +} + +# another accepted form +troublefree_hash = { + "hash": "value", + "long": "the quick brown fox jumps over the lazy dog before doing " + "a somersault", + ("long key that tends to happen more " + "when you're indented"): "stringwithalongtoken you don't want to break", +} +# confusing but accepted... don't do that +troublesome_hash = { + "hash": "value", + "long": "the quick brown fox jumps over the lazy dog before doing a " + #: E135:4 + "somersault", + "longer": + "the quick brown fox jumps over the lazy dog before doing a " + "somersaulty", + "long key that tends to happen more " + "when you're indented": "stringwithalongtoken you don't want to break", +} + +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s)" % + DEFAULT_EXCLUDE + ) +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s)" % DEFAULT_EXCLUDE, + foobar="this clearly should work, because it is at " + "the right indent level", + ) + +rv.update(dict.fromkeys( + ('qualif_nr', 'reasonComment_en', 'reasonComment_fr', + 'reasonComment_de', 'reasonComment_it'), + '?'), "foo", + context={'alpha': 4, 'beta': 53242234, 'gamma': 17}) + + +def f(): + try: + if not Debug: + hello(''' +If you would like to see debugging output, +try: %s -d5 +''' % sys.argv[0]) + + +# The try statement above was not finished. +#: E901 +d = { # comment + 1: 2 +} + +# issue 138 (we won't allow this in parso) +#: E126+2:9 +[ + 12, # this is a multi-line inline + # comment +] +# issue 151 +#: E122+1:3 +if a > b and \ + c > d: + moo_like_a_cow() + +my_list = [ + 1, 2, 3, + 4, 5, 6, +] + +my_list = [1, 2, 3, + 4, 5, 6, + ] + +result = some_function_that_takes_arguments( + 'a', 'b', 'c', + 'd', 'e', 'f', +) + +result = some_function_that_takes_arguments('a', 'b', 'c', + 'd', 'e', 'f', + ) + +# issue 203 +dica = { + ('abc' + 'def'): ( + 'abc'), +} + +(abcdef[0] + [1]) = ( + 'abc') + +('abc' + 'def') == ( + 'abc') + +# issue 214 +bar( + 1).zap( + 2) + +bar( + 1).zap( + 2) + +if True: + + def example_issue254(): + return [node.copy( + ( + replacement + # First, look at all the node's current children. + for child in node.children + # Replace them. + for replacement in replace(child) + ), + dict(name=token.undefined) + )] + + +def valid_example(): + return [node.copy(properties=dict( + (key, val if val is not None else token.undefined) + for key, val in node.items() + ))] + + +foo([ + 'bug' +]) + +# issue 144, finally! +some_hash = { + "long key that tends to happen more when you're indented": + "stringwithalongtoken you don't want to break", +} + +{ + 1: + 999999 if True + else 0, +} + + +abc = dedent( + ''' + mkdir -p ./{build}/ + mv ./build/ ./{build}/%(revision)s/ + '''.format( + build='build', + # more stuff + ) +) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_second.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_second.py new file mode 100644 index 0000000..5488ea4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_second.py @@ -0,0 +1,195 @@ +if True: + result = some_function_that_takes_arguments( + 'a', 'b', 'c', + 'd', 'e', 'f', + #: E123:0 +) +#: E122+1 +if some_very_very_very_long_variable_name or var \ +or another_very_long_variable_name: + raise Exception() +#: E122+1 +if some_very_very_very_long_variable_name or var[0] \ +or another_very_long_variable_name: + raise Exception() +if True: + #: E122+1 + if some_very_very_very_long_variable_name or var \ + or another_very_long_variable_name: + raise Exception() +if True: + #: E122+1 + if some_very_very_very_long_variable_name or var[0] \ + or another_very_long_variable_name: + raise Exception() + +#: E901+1:8 +dictionary = [ + "is": { + # Might be a E122:4, but is not because the code is invalid Python. + "nested": yes(), + }, +] +setup('', + scripts=[''], + classifiers=[ + #: E121:6 + 'Development Status :: 4 - Beta', + 'Environment :: Console', + 'Intended Audience :: Developers', + ]) + + +#: E123+2:4 E291:15 +abc = "E123", ( + "bad", "hanging", "close" + ) + +result = { + 'foo': [ + 'bar', { + 'baz': 'frop', + #: E123 + } + #: E123 + ] + #: E123 + } +result = some_function_that_takes_arguments( + 'a', 'b', 'c', + 'd', 'e', 'f', + #: E123 + ) +my_list = [1, 2, 3, + 4, 5, 6, + #: E124:0 +] +my_list = [1, 2, 3, + 4, 5, 6, + #: E124:19 + ] +#: E124+2 +result = some_function_that_takes_arguments('a', 'b', 'c', + 'd', 'e', 'f', +) +fooff(aaaa, + cca( + vvv, + dadd + ), fff, + #: E124:0 +) +fooff(aaaa, + ccaaa( + vvv, + dadd + ), + fff, + #: E124:0 +) +d = dict('foo', + help="exclude files or directories which match these " + "comma separated patterns (default: %s)" % DEFAULT_EXCLUDE + #: E124:14 + ) + +if line_removed: + self.event(cr, uid, + #: E128:8 + name="Removing the option for contract", + #: E128:8 + description="contract line has been removed", + #: E124:8 + ) + +#: E129+1:4 +if foo is None and bar is "frop" and \ + blah == 'yeah': + blah = 'yeahnah' + + +#: E129+1:4 E129+2:4 +def long_function_name( + var_one, var_two, var_three, + var_four): + hello(var_one) + + +def qualify_by_address( + #: E129:4 E129+1:4 + self, cr, uid, ids, context=None, + params_to_check=frozenset(QUALIF_BY_ADDRESS_PARAM)): + """ This gets called by the web server """ + + +#: E129+1:4 E129+2:4 +if (a == 2 or + b == "abc def ghi" + "jkl mno"): + True + +my_list = [ + 1, 2, 3, + 4, 5, 6, + #: E123:8 + ] + +abris = 3 + \ + 4 + \ + 5 + 6 + +fixed = re.sub(r'\t+', ' ', target[c::-1], 1)[::-1] + \ + target[c + 1:] + +rv.update(dict.fromkeys(( + 'qualif_nr', 'reasonComment_en', 'reasonComment_fr', + #: E121:12 + 'reasonComment_de', 'reasonComment_it'), + '?'), + #: E128:4 + "foo") +#: E126+1:8 +eat_a_dict_a_day({ + "foo": "bar", +}) +#: E129+1:4 +if ( + x == ( + 3 + #: E129:4 + ) or + y == 4): + pass +#: E129+1:4 E121+2:8 E129+3:4 +if ( + x == ( + 3 + ) or + x == ( + # This one has correct indentation. + 3 + #: E129:4 + ) or + y == 4): + pass +troublesome_hash = { + "hash": "value", + #: E135+1:8 + "long": "the quick brown fox jumps over the lazy dog before doing a " + "somersault", +} + +# Arguments on first line forbidden when not using vertical alignment +#: E128+1:4 +foo = long_function_name(var_one, var_two, + var_three, var_four) + +#: E128+1:4 +hello('l.%s\t%s\t%s\t%r' % + (token[2][0], pos, tokenize.tok_name[token[0]], token[1])) + + +def qualify_by_address(self, cr, uid, ids, context=None, + #: E128:8 + params_to_check=frozenset(QUALIF_BY_ADDRESS_PARAM)): + """ This gets called by the web server """ diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_third.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_third.py new file mode 100644 index 0000000..26697fe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E12_third.py @@ -0,0 +1,116 @@ +#: E128+1 +foo(1, 2, 3, +4, 5, 6) +#: E128+1:1 +foo(1, 2, 3, + 4, 5, 6) +#: E128+1:2 +foo(1, 2, 3, + 4, 5, 6) +#: E128+1:3 +foo(1, 2, 3, + 4, 5, 6) +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:5 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:6 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:7 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:8 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:9 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:10 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:11 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:12 +foo(1, 2, 3, + 4, 5, 6) +#: E127+1:13 +foo(1, 2, 3, + 4, 5, 6) +if line_removed: + #: E128+1:14 E128+2:14 + self.event(cr, uid, + name="Removing the option for contract", + description="contract line has been removed", + ) + +if line_removed: + self.event(cr, uid, + #: E127:16 + name="Removing the option for contract", + #: E127:16 + description="contract line has been removed", + #: E124:16 + ) +rv.update(d=('a', 'b', 'c'), + #: E127:13 + e=42) + +#: E135+2:17 +rv.update(d=('a' + 'b', 'c'), + e=42, f=42 + + 42) +rv.update(d=('a' + 'b', 'c'), + e=42, f=42 + + 42) +#: E127+1:26 +input1 = {'a': {'calc': 1 + 2}, 'b': 1 + + 42} +#: E128+2:17 +rv.update(d=('a' + 'b', 'c'), + e=42, f=(42 + + 42)) + +if True: + def example_issue254(): + #: + return [node.copy( + ( + #: E121:16 E121+3:20 + replacement + # First, look at all the node's current children. + for child in node.children + for replacement in replace(child) + ), + dict(name=token.undefined) + )] +# TODO multiline docstring are currently not handled. E125+1:4? +if (""" + """): + pass + +# TODO same +for foo in """ + abc + 123 + """.strip().split(): + hello(foo) +abc = dedent( + ''' + mkdir -p ./{build}/ + mv ./build/ ./{build}/%(revision)s/ + '''.format( + #: E121:4 E121+1:4 E123+2:0 + build='build', + # more stuff +) +) +#: E701+1: E122+1 +if True:\ +hello(True) + +#: E128+1 +foobar(a +, end=' ') diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E20.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E20.py new file mode 100644 index 0000000..44986fa --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E20.py @@ -0,0 +1,52 @@ +#: E201:5 +spam( ham[1], {eggs: 2}) +#: E201:9 +spam(ham[ 1], {eggs: 2}) +#: E201:14 +spam(ham[1], { eggs: 2}) + +# Okay +spam(ham[1], {eggs: 2}) + + +#: E202:22 +spam(ham[1], {eggs: 2} ) +#: E202:21 +spam(ham[1], {eggs: 2 }) +#: E202:10 +spam(ham[1 ], {eggs: 2}) +# Okay +spam(ham[1], {eggs: 2}) + +result = func( + arg1='some value', + arg2='another value', +) + +result = func( + arg1='some value', + arg2='another value' +) + +result = [ + item for item in items + if item > 5 +] + +#: E203:9 +if x == 4 : + foo(x, y) + x, y = y, x +if x == 4: + #: E203:12 E702:13 + a = x, y ; x, y = y, x +if x == 4: + foo(x, y) + #: E203:12 + x, y = y , x +# Okay +if x == 4: + foo(x, y) + x, y = y, x +a[b1, :1] == 3 +b = a[:, b1] diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E21.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E21.py new file mode 100644 index 0000000..f65616e --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E21.py @@ -0,0 +1,16 @@ +#: E211:4 +spam (1) +#: E211:4 E211:19 +dict ['key'] = list [index] +#: E211:11 +dict['key'] ['subkey'] = list[index] +# Okay +spam(1) +dict['key'] = list[index] + + +# This is not prohibited by PEP8, but avoid it. +# Dave: I think this is extremely stupid. Use the same convention everywhere. +#: E211:9 +class Foo (Bar, Baz): + pass diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E22.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E22.py new file mode 100644 index 0000000..82ff6a4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E22.py @@ -0,0 +1,156 @@ +a = 12 + 3 +#: E221:5 E229:8 +b = 4 + 5 +#: E221:1 +x = 1 +#: E221:1 +y = 2 +long_variable = 3 +#: E221:4 +x[0] = 1 +#: E221:4 +x[1] = 2 +long_variable = 3 +#: E221:8 E229:19 +x = f(x) + 1 +y = long_variable + 2 +#: E221:8 E229:19 +z = x[0] + 3 +#: E221+2:13 +text = """ + bar + foo %s""" % rofl +# Okay +x = 1 +y = 2 +long_variable = 3 + + +#: E221:7 +a = a + 1 +b = b + 10 +#: E221:3 +x = -1 +#: E221:3 +y = -2 +long_variable = 3 +#: E221:6 +x[0] = 1 +#: E221:6 +x[1] = 2 +long_variable = 3 + + +#: E223+1:1 +foobart = 4 +a = 3 # aligned with tab + + +#: E223:4 +a += 1 +b += 1000 + + +#: E225:12 +submitted +=1 +#: E225:9 +submitted+= 1 +#: E225:3 +c =-1 +#: E229:7 +x = x /2 - 1 +#: E229:11 +c = alpha -4 +#: E229:10 +c = alpha- 4 +#: E229:8 +z = x **y +#: E229:14 +z = (x + 1) **y +#: E229:13 +z = (x + 1)** y +#: E227:14 +_1kB = _1MB >>10 +#: E227:11 +_1kB = _1MB>> 10 +#: E225:1 E225:2 E229:4 +i=i+ 1 +#: E225:1 E225:2 E229:5 +i=i +1 +#: E225:1 E225:2 +i=i+1 +#: E225:3 +i =i+1 +#: E225:1 +i= i+1 +#: E229:8 +c = (a +b)*(a - b) +#: E229:7 +c = (a+ b)*(a - b) + +z = 2//30 +c = (a+b) * (a-b) +x = x*2 - 1 +x = x/2 - 1 +# TODO whitespace should be the other way around according to pep8. +x = x / 2-1 + +hypot2 = x*x + y*y +c = (a + b)*(a - b) + + +def halves(n): + return (i//2 for i in range(n)) + + +#: E227:11 E227:13 +_1kB = _1MB>>10 +#: E227:11 E227:13 +_1MB = _1kB<<10 +#: E227:5 E227:6 +a = b|c +#: E227:5 E227:6 +b = c&a +#: E227:5 E227:6 +c = b^a +#: E228:5 E228:6 +a = b%c +#: E228:9 E228:10 +msg = fmt%(errno, errmsg) +#: E228:25 E228:26 +msg = "Error %d occurred"%errno + +#: E228:7 +a = b %c +a = b % c + +# Okay +i = i + 1 +submitted += 1 +x = x * 2 - 1 +hypot2 = x * x + y * y +c = (a + b) * (a - b) +_1MiB = 2 ** 20 +_1TiB = 2**30 +foo(bar, key='word', *args, **kwargs) +baz(**kwargs) +negative = -1 +spam(-1) +-negative +func1(lambda *args, **kw: (args, kw)) +func2(lambda a, b=h[:], c=0: (a, b, c)) +if not -5 < x < +5: + #: E227:12 + print >>sys.stderr, "x is out of range." +print >> sys.stdout, "x is an integer." +x = x / 2 - 1 + + +def squares(n): + return (i**2 for i in range(n)) + + +ENG_PREFIXES = { + -6: "\u03bc", # Greek letter mu + -3: "m", +} diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E23.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E23.py new file mode 100644 index 0000000..47f1447 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E23.py @@ -0,0 +1,16 @@ +#: E231:7 +a = (1,2) +#: E231:5 +a[b1,:] +#: E231:10 +a = [{'a':''}] +# Okay +a = (4,) +#: E202:7 +b = (5, ) +c = {'text': text[5:]} + +result = { + 'key1': 'value', + 'key2': 'value', +} diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E25.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E25.py new file mode 100644 index 0000000..8cf5314 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E25.py @@ -0,0 +1,36 @@ +#: E251:11 E251:13 +def foo(bar = False): + '''Test function with an error in declaration''' + pass + + +#: E251:8 +foo(bar= True) +#: E251:7 +foo(bar =True) +#: E251:7 E251:9 +foo(bar = True) +#: E251:13 +y = bar(root= "sdasd") +parser.add_argument('--long-option', + #: E135+1:20 + default= + "/rather/long/filesystem/path/here/blah/blah/blah") +parser.add_argument('--long-option', + default= + "/rather/long/filesystem") +# TODO this looks so stupid. +parser.add_argument('--long-option', default + ="/rather/long/filesystem/path/here/blah/blah/blah") +#: E251+2:7 E251+2:9 +foo(True, + baz=(1, 2), + biz = 'foo' + ) +# Okay +foo(bar=(1 == 1)) +foo(bar=(1 != 1)) +foo(bar=(1 >= 1)) +foo(bar=(1 <= 1)) +(options, args) = parser.parse_args() +d[type(None)] = _deepcopy_atomic diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E26.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E26.py new file mode 100644 index 0000000..4774852 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E26.py @@ -0,0 +1,78 @@ +#: E261:4 +pass # an inline comment +#: E261:4 +pass# an inline comment + +# Okay +pass # an inline comment +pass # an inline comment +#: E262:11 +x = x + 1 #Increment x +#: E262:11 +x = x + 1 # Increment x +#: E262:11 +x = y + 1 #: Increment x +#: E265 +#Block comment +a = 1 +#: E265+1 +m = 42 +#! This is important +mx = 42 - 42 + +# Comment without anything is not an issue. +# +# However if there are comments at the end without anything it obviously +# doesn't make too much sense. +#: E262:9 +foo = 1 # + + +#: E266+2:4 E266+5:4 +def how_it_feel(r): + + ### This is a variable ### + a = 42 + + ### Of course it is unused + return + + +#: E266 E266+1 +##if DEBUG: +## logging.error() +#: E266 +######################################### + +# Not at the beginning of a file +#: E265 +#!/usr/bin/env python + +# Okay + +pass # an inline comment +x = x + 1 # Increment x +y = y + 1 #: Increment x + +# Block comment +a = 1 + +# Block comment1 + +# Block comment2 +aaa = 1 + + +# example of docstring (not parsed) +def oof(): + """ + #foo not parsed + """ + + ########################################################################### + # A SEPARATOR # + ########################################################################### + + # ####################################################################### # + # ########################## another separator ########################## # + # ####################################################################### # diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E27.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E27.py new file mode 100644 index 0000000..9149f0a --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E27.py @@ -0,0 +1,49 @@ +# Okay +from u import (a, b) +from v import c, d +#: E221:13 +from w import (e, f) +#: E275:13 +from w import(e, f) +#: E275:29 +from importable.module import(e, f) +try: + #: E275:33 + from importable.module import(e, f) +except ImportError: + pass +# Okay +True and False +#: E221:8 +True and False +#: E221:4 +True and False +#: E221:2 +if 1: + pass +# Syntax Error, no indentation +#: E903+1 +if 1: +pass +#: E223:8 +True and False +#: E223:4 E223:9 +True and False +#: E221:5 +a and b +#: E221:5 +1 and b +#: E221:5 +a and 2 +#: E221:1 E221:6 +1 and b +#: E221:1 E221:6 +a and 2 +#: E221:4 +this and False +#: E223:5 +a and b +#: E223:1 +a and b +#: E223:4 E223:9 +this and False diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E29.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E29.py new file mode 100644 index 0000000..cebbb7b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E29.py @@ -0,0 +1,15 @@ +# Okay +# 情 +#: W291:5 +print + + +#: W291+1 +class Foo(object): + + bang = 12 + + +#: W291+1:34 +'''multiline +string with trailing whitespace''' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30.py new file mode 100644 index 0000000..31e241c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30.py @@ -0,0 +1,177 @@ +#: E301+4 +class X: + + def a(): + pass + def b(): + pass + + +#: E301+5 +class X: + + def a(): + pass + # comment + def b(): + pass + + +# -*- coding: utf-8 -*- +def a(): + pass + + +#: E302+1:0 +"""Main module.""" +def _main(): + pass + + +#: E302+1:0 +foo = 1 +def get_sys_path(): + return sys.path + + +#: E302+3:0 +def a(): + pass + +def b(): + pass + + +#: E302+5:0 +def a(): + pass + +# comment + +def b(): + pass + + +#: E303+3:0 +print + + + +#: E303+3:0 E303+4:0 +print + + + + +print +#: E303+3:0 +print + + + +# comment + +print + + +#: E303+3 E303+6 +def a(): + print + + + # comment + + + # another comment + + print + + +#: E302+2 +a = 3 +#: E304+1 +@decorator + +def function(): + pass + + +#: E303+3 +# something + + + +"""This class docstring comes on line 5. +It gives error E303: too many blank lines (3) +""" + + +#: E302+6 +def a(): + print + + # comment + + # another comment +a() + + +#: E302+7 +def a(): + print + + # comment + + # another comment + +try: + a() +except Exception: + pass + + +#: E302+4 +def a(): + print + +# Two spaces before comments, too. +if a(): + a() + + +#: E301+2 +def a(): + x = 1 + def b(): + pass + + +#: E301+2 E301+4 +def a(): + x = 2 + def b(): + x = 1 + def c(): + pass + + +#: E301+2 E301+4 E301+5 +def a(): + x = 1 + class C: + pass + x = 2 + def b(): + pass + + +#: E302+7 +# Example from https://github.com/PyCQA/pycodestyle/issues/400 +foo = 2 + + +def main(): + blah, blah + +if __name__ == '__main__': + main() diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30not.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30not.py new file mode 100644 index 0000000..c0c005c --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E30not.py @@ -0,0 +1,175 @@ +# Okay +class X: + pass +# Okay + + +def foo(): + pass + + +# Okay +# -*- coding: utf-8 -*- +class X: + pass + + +# Okay +# -*- coding: utf-8 -*- +def foo(): + pass + + +# Okay +class X: + + def a(): + pass + + # comment + def b(): + pass + + # This is a + # ... multi-line comment + + def c(): + pass + + +# This is a +# ... multi-line comment + +@some_decorator +class Y: + + def a(): + pass + + # comment + + def b(): + pass + + @property + def c(): + pass + + +try: + from nonexistent import Bar +except ImportError: + class Bar(object): + """This is a Bar replacement""" + + +def with_feature(f): + """Some decorator""" + wrapper = f + if has_this_feature(f): + def wrapper(*args): + call_feature(args[0]) + return f(*args) + return wrapper + + +try: + next +except NameError: + def next(iterator, default): + for item in iterator: + return item + return default + + +def a(): + pass + + +class Foo(): + """Class Foo""" + + def b(): + + pass + + +# comment +def c(): + pass + + +# comment + + +def d(): + pass + +# This is a +# ... multi-line comment + +# And this one is +# ... a second paragraph +# ... which spans on 3 lines + + +# Function `e` is below +# NOTE: Hey this is a testcase + +def e(): + pass + + +def a(): + print + + # comment + + print + + print + +# Comment 1 + +# Comment 2 + + +# Comment 3 + +def b(): + + pass + + +# Okay +def foo(): + pass + + +def bar(): + pass + + +class Foo(object): + pass + + +class Bar(object): + pass + + +if __name__ == '__main__': + foo() +# Okay +classification_errors = None +# Okay +defined_properly = True +# Okay +defaults = {} +defaults.update({}) + + +# Okay +def foo(x): + classification = x + definitely = not classification diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E40.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E40.py new file mode 100644 index 0000000..93a2ccf --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E40.py @@ -0,0 +1,39 @@ +#: E401:7 +import os, sys +# Okay +import os +import sys + +from subprocess import Popen, PIPE + +from myclass import MyClass +from foo.bar.yourclass import YourClass + +import myclass +import foo.bar.yourclass +# All Okay from here until the definition of VERSION +__all__ = ['abc'] + +import foo +__version__ = "42" + +import foo +__author__ = "Simon Gomizelj" + +import foo +try: + import foo +except ImportError: + pass +else: + hello('imported foo') +finally: + hello('made attempt to import foo') + +import bar +VERSION = '1.2.3' + +#: E402 +import foo +#: E402 +import foo diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E50.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E50.py new file mode 100644 index 0000000..67fd558 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E50.py @@ -0,0 +1,126 @@ +#: E501:4 +a = '12345678901234567890123456789012345678901234567890123456789012345678901234567890' +#: E501:80 +a = '1234567890123456789012345678901234567890123456789012345678901234567890' or \ + 6 +#: E501+1:80 +a = 7 or \ + '1234567890123456789012345678901234567890123456789012345678901234567890' or \ + 6 +#: E501+1:80 E501+2:80 +a = 7 or \ + '1234567890123456789012345678901234567890123456789012345678901234567890' or \ + '1234567890123456789012345678901234567890123456789012345678901234567890' or \ + 6 +#: E501:78 +a = '1234567890123456789012345678901234567890123456789012345678901234567890' # \ +#: E502:78 +a = ('123456789012345678901234567890123456789012345678901234567890123456789' \ + '01234567890') +#: E502+1:11 +a = ('AAA \ + BBB' \ + 'CCC') +#: E502:38 +if (foo is None and bar is "e000" and \ + blah == 'yeah'): + blah = 'yeahnah' +# +# Okay +a = ('AAA' + 'BBB') + +a = ('AAA \ + BBB' + 'CCC') + +a = 'AAA' \ + 'BBB' \ + 'CCC' + +a = ('AAA\ +BBBBBBBBB\ +CCCCCCCCC\ +DDDDDDDDD') +# +# Okay +if aaa: + pass +elif bbb or \ + ccc: + pass + +ddd = \ + ccc + +('\ + ' + ' \ +') +(''' + ''' + ' \ +') +#: E501:67 E225:21 E225:22 +very_long_identifiers=and_terrible_whitespace_habits(are_no_excuse+for_long_lines) +# +# TODO Long multiline strings are not handled. E501? +'''multiline string +with a long long long long long long long long long long long long long long long long line +''' +#: E501 +'''same thing, but this time without a terminal newline in the string +long long long long long long long long long long long long long long long long line''' +# +# issue 224 (unavoidable long lines in docstrings) +# Okay +""" +I'm some great documentation. Because I'm some great documentation, I'm +going to give you a reference to some valuable information about some API +that I'm calling: + + http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx +""" +#: E501 +""" +longnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaces""" + + +# Regression test for #622 +def foo(): + """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pulvinar vitae + """ + + +# Okay +""" +This + almost_empty_line +""" + +""" +This + almost_empty_line +""" +# A basic comment +#: E501 +# with a long long long long long long long long long long long long long long long long line + +# +# Okay +# I'm some great comment. Because I'm so great, I'm going to give you a +# reference to some valuable information about some API that I'm calling: +# +# http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx + +x = 3 + +# longnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaceslongnospaces + +# +# Okay +# This +# almost_empty_line + +# +#: E501+1 +# This +# almost_empty_line diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E70.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E70.py new file mode 100644 index 0000000..be11fb1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E70.py @@ -0,0 +1,25 @@ +#: E701:6 +if a: a = False +#: E701:41 +if not header or header[:6] != 'bytes=': pass +#: E702:9 +a = False; b = True +#: E702:16 E402 +import bdist_egg; bdist_egg.write_safety_flag(cmd.egg_info, safe) +#: E703:12 E402 +import shlex; +#: E702:8 E703:22 +del a[:]; a.append(42); + + +#: E704:10 +def f(x): return 2 + + +#: E704:10 +def f(x): return 2 * x + + +while all is round: + #: E704:14 + def f(x): return 2 * x diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E71.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E71.py new file mode 100644 index 0000000..109dcd6 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E71.py @@ -0,0 +1,93 @@ +#: E711:7 +if res == None: + pass +#: E711:7 +if res != None: + pass +#: E711:8 +if None == res: + pass +#: E711:8 +if None != res: + pass +#: E711:10 +if res[1] == None: + pass +#: E711:10 +if res[1] != None: + pass +#: E711:8 +if None != res[1]: + pass +#: E711:8 +if None == res[1]: + pass + +# +#: E712:7 +if res == True: + pass +#: E712:7 +if res != False: + pass +#: E712:8 +if True != res: + pass +#: E712:9 +if False == res: + pass +#: E712:10 +if res[1] == True: + pass +#: E712:10 +if res[1] != False: + pass + +if x is False: + pass + +# +#: E713:9 +if not X in Y: + pass +#: E713:11 +if not X.B in Y: + pass +#: E713:9 +if not X in Y and Z == "zero": + pass +#: E713:24 +if X == "zero" or not Y in Z: + pass + +# +#: E714:9 +if not X is Y: + pass +#: E714:11 +if not X.B is Y: + pass + +# +# Okay +if x not in y: + pass + +if not (X in Y or X is Z): + pass + +if not (X in Y): + pass + +if x is not y: + pass + +if TrueElement.get_element(True) == TrueElement.get_element(False): + pass + +if (True) == TrueElement or x == TrueElement: + pass + +assert (not foo) in bar +assert {'x': not foo} in bar +assert [42, not foo] in bar diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E72.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E72.py new file mode 100644 index 0000000..2e9ef91 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E72.py @@ -0,0 +1,79 @@ +#: E721:3 +if type(res) == type(42): + pass +#: E721:3 +if type(res) != type(""): + pass + +import types + +if res == types.IntType: + pass + +import types + +#: E721:3 +if type(res) is not types.ListType: + pass +#: E721:7 E721:35 +assert type(res) == type(False) or type(res) == type(None) +#: E721:7 +assert type(res) == type([]) +#: E721:7 +assert type(res) == type(()) +#: E721:7 +assert type(res) == type((0,)) +#: E721:7 +assert type(res) == type((0)) +#: E721:7 +assert type(res) != type((1,)) +#: E721:7 +assert type(res) is type((1,)) +#: E721:7 +assert type(res) is not type((1,)) + +# Okay +#: E402 +import types + +if isinstance(res, int): + pass +if isinstance(res, str): + pass +if isinstance(res, types.MethodType): + pass + +#: E721:3 E721:25 +if type(a) != type(b) or type(a) == type(ccc): + pass +#: E721 +type(a) != type(b) +#: E721 +1 != type(b) +#: E721 +type(b) != 1 +1 != 1 + +try: + pass +#: E722 +except: + pass +try: + pass +except Exception: + pass +#: E722 +except: + pass +# Okay +fake_code = """" +try: + do_something() +except: + pass +""" +try: + pass +except Exception: + pass diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E73.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E73.py new file mode 100644 index 0000000..77e2e90 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/E73.py @@ -0,0 +1,16 @@ +#: E731:4 +f = lambda x: 2 * x +while False: + #: E731:10 + foo = lambda y, z: 2 * x +# Okay +f = object() +f.method = lambda: 'Method' + +f = {} +f['a'] = lambda x: x ** 2 + +f = [] +f.append(lambda x: x ** 2) + +lambda: 'no-op' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/LICENSE b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/LICENSE new file mode 100644 index 0000000..142a508 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/LICENSE @@ -0,0 +1,29 @@ +Copyright © 2006-2009 Johann C. Rocholl +Copyright © 2009-2014 Florent Xicluna +Copyright © 2014-2016 Ian Lee +Copyright © 2017-???? Dave Halter + +Dave: The files in this folder were ported from pydocstyle and some +modifications where made. + +Licensed under the terms of the Expat License + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation files +(the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, +and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax.py new file mode 100644 index 0000000..9ac0a6d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax.py @@ -0,0 +1,53 @@ +""" +Some syntax errors are a bit complicated and need exact checking. Here we +gather some of the potentially dangerous ones. +""" + +from __future__ import division + +# With a dot it's not a future import anymore. +from .__future__ import absolute_import + +'' '' +''r''u'' +b'' BR'' + +for x in [1]: + try: + continue # Only the other continue and pass is an error. + finally: + #: E901 + continue + + +for x in [1]: + break + continue + +try: + pass +except ZeroDivisionError: + pass + #: E722:0 +except: + pass + +try: + pass + #: E722:0 E901:0 +except: + pass +except ZeroDivisionError: + pass + + +r'\n' +r'\x' +b'\n' + + +a = 3 + + +def x(b=a): + global a diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python2.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python2.py new file mode 100644 index 0000000..81736bc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python2.py @@ -0,0 +1,2 @@ +'s' b'' +u's' b'ä' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.4.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.4.py new file mode 100644 index 0000000..1759575 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.4.py @@ -0,0 +1,3 @@ +*foo, a = (1,) +*foo[0], a = (1,) +*[], a = (1,) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.5.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.5.py new file mode 100644 index 0000000..cc0385b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.5.py @@ -0,0 +1,23 @@ +""" +Mostly allowed syntax in Python 3.5. +""" + + +async def foo(): + await bar() + #: E901 + yield from [] + return + #: E901 + return '' + + +# With decorator it's a different statement. +@bla +async def foo(): + await bar() + #: E901 + yield from [] + return + #: E901 + return '' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.6.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.6.py new file mode 100644 index 0000000..1bbe071 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/allowed_syntax_python3.6.py @@ -0,0 +1,45 @@ +foo: int = 4 +(foo): int = 3 +((foo)): int = 3 +foo.bar: int +foo[3]: int + + +def glob(): + global x + y: foo = x + + +def c(): + a = 3 + + def d(): + class X(): + nonlocal a + + +def x(): + a = 3 + + def y(): + nonlocal a + + +def x(): + def y(): + nonlocal a + + a = 3 + + +def x(): + a = 3 + + def y(): + class z(): + nonlocal a + + +a = *args, *args +error[(*args, *args)] = 3 +*args, *args diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/latin-1.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/latin-1.py new file mode 100644 index 0000000..8328cfb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/latin-1.py @@ -0,0 +1,6 @@ +# -*- coding: latin-1 -*- +# Test non-UTF8 encoding +latin1 = ('' + '') + +c = ("w") diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python2.7.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python2.7.py new file mode 100644 index 0000000..5d10739 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python2.7.py @@ -0,0 +1,14 @@ +import sys + +print 1, 2 >> sys.stdout + + +foo = ur'This is not possible in Python 3.' + +# This is actually printing a tuple. +#: E275:5 +print(1, 2) + +# True and False are not keywords in Python 2 and therefore there's no need for +# a space. +norman = True+False diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python3.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python3.py new file mode 100644 index 0000000..566e903 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/python3.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python3 +from typing import ClassVar, List + +print(1, 2) + + +# Annotated function (Issue #29) +def foo(x: int) -> int: + return x + 1 + + +# Annotated variables #575 +CONST: int = 42 + + +class Class: + cls_var: ClassVar[str] + + def m(self): + xs: List[int] = [] + + +# True and False are keywords in Python 3 and therefore need a space. +#: E275:13 E275:14 +norman = True+False + + +#: E302+3:0 +def a(): + pass + +async def b(): + pass + + +# Okay +async def add(a: int = 0, b: int = 0) -> int: + return a + b + + +# Previously E251 four times +#: E221:5 +async def add(a: int = 0, b: int = 0) -> int: + return a + b + + +# Previously just E272+1:5 E272+4:5 +#: E302+3 E221:5 E221+3:5 +async def x(): + pass + +async def x(y: int = 1): + pass + + +#: E704:16 +async def f(x): return 2 + + +a[b1, :] == a[b1, ...] + + +# Annotated Function Definitions +# Okay +def munge(input: AnyStr, sep: AnyStr = None, limit=1000, + extra: Union[str, dict] = None) -> AnyStr: + pass + + +#: E225:24 E225:26 +def x(b: tuple = (1, 2))->int: + return a + b + + +#: E252:11 E252:12 E231:8 +def b(a:int=1): + pass + + +if alpha[:-i]: + *a, b = (1, 2, 3) + + +# Named only arguments +def foo(*, asdf): + pass + + +def foo2(bar, *, asdf=2): + pass diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8-bom.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8-bom.py new file mode 100644 index 0000000..9c065c9 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8-bom.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +hello = 'こんにちわ' + +# EOF diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8.py b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8.py new file mode 100644 index 0000000..73ea9a2 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/normalizer_issue_files/utf-8.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- + +# Some random text with multi-byte characters (utf-8 encoded) +# +# Εδώ μάτσο κειμένων τη, τρόπο πιθανό διευθυντές ώρα μη. Νέων απλό παράγει ροή +# κι, το επί δεδομένη καθορίζουν. Πάντως ζητήσεις περιβάλλοντος ένα με, τη +# ξέχασε αρπάζεις φαινόμενο όλη. Τρέξει εσφαλμένη χρησιμοποίησέ νέα τι. Θα όρο +# πετάνε φακέλους, άρα με διακοπής λαμβάνουν εφαμοργής. Λες κι μειώσει +# καθυστερεί. + +# 79 narrow chars +# 01 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 [79] + +# 78 narrow chars (Na) + 1 wide char (W) +# 01 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8情 + +# 3 narrow chars (Na) + 40 wide chars (W) +# 情 情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情 + +# 3 narrow chars (Na) + 76 wide chars (W) +# 情 情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情 + +# +# 80 narrow chars (Na) +#: E501 +# 01 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 [80] +# +# 78 narrow chars (Na) + 2 wide char (W) +#: E501 +# 01 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8情情 +# +# 3 narrow chars (Na) + 77 wide chars (W) +#: E501 +# 情 情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情情 +# diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_absolute_import.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_absolute_import.py new file mode 100644 index 0000000..c959ea5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_absolute_import.py @@ -0,0 +1,29 @@ +""" +Tests ``from __future__ import absolute_import`` (only important for +Python 2.X) +""" +from parso import parse + + +def test_explicit_absolute_imports(): + """ + Detect modules with ``from __future__ import absolute_import``. + """ + module = parse("from __future__ import absolute_import") + assert module._has_explicit_absolute_import() + + +def test_no_explicit_absolute_imports(): + """ + Detect modules without ``from __future__ import absolute_import``. + """ + assert not parse("1")._has_explicit_absolute_import() + + +def test_dont_break_imports_without_namespaces(): + """ + The code checking for ``from __future__ import absolute_import`` shouldn't + assume that all imports have non-``None`` namespaces. + """ + src = "from __future__ import absolute_import\nimport xyzzy" + assert parse(src)._has_explicit_absolute_import() diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_cache.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_cache.py new file mode 100644 index 0000000..7fef203 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_cache.py @@ -0,0 +1,89 @@ +""" +Test all things related to the ``jedi.cache`` module. +""" + +from os import unlink + +import pytest + +from parso.cache import _NodeCacheItem, save_module, load_module, \ + _get_hashed_path, parser_cache, _load_from_file_system, _save_to_file_system +from parso import load_grammar +from parso import cache +from parso import file_io + + +@pytest.fixture() +def isolated_jedi_cache(monkeypatch, tmpdir): + """ + Set `jedi.settings.cache_directory` to a temporary directory during test. + + Same as `clean_jedi_cache`, but create the temporary directory for + each test case (scope='function'). + """ + monkeypatch.setattr(cache, '_default_cache_path', str(tmpdir)) + + +def test_modulepickling_change_cache_dir(tmpdir): + """ + ParserPickling should not save old cache when cache_directory is changed. + + See: `#168 `_ + """ + dir_1 = str(tmpdir.mkdir('first')) + dir_2 = str(tmpdir.mkdir('second')) + + item_1 = _NodeCacheItem('bla', []) + item_2 = _NodeCacheItem('bla', []) + path_1 = 'fake path 1' + path_2 = 'fake path 2' + + hashed_grammar = load_grammar()._hashed + _save_to_file_system(hashed_grammar, path_1, item_1, cache_path=dir_1) + parser_cache.clear() + cached = load_stored_item(hashed_grammar, path_1, item_1, cache_path=dir_1) + assert cached == item_1.node + + _save_to_file_system(hashed_grammar, path_2, item_2, cache_path=dir_2) + cached = load_stored_item(hashed_grammar, path_1, item_1, cache_path=dir_2) + assert cached is None + + +def load_stored_item(hashed_grammar, path, item, cache_path): + """Load `item` stored at `path` in `cache`.""" + item = _load_from_file_system(hashed_grammar, path, item.change_time - 1, cache_path) + return item + + +@pytest.mark.usefixtures("isolated_jedi_cache") +def test_modulepickling_simulate_deleted_cache(tmpdir): + """ + Tests loading from a cache file after it is deleted. + According to macOS `dev docs`__, + + Note that the system may delete the Caches/ directory to free up disk + space, so your app must be able to re-create or download these files as + needed. + + It is possible that other supported platforms treat cache files the same + way. + + __ https://developer.apple.com/library/content/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html + """ + grammar = load_grammar() + module = 'fake parser' + + # Create the file + path = tmpdir.dirname + '/some_path' + with open(path, 'w'): + pass + io = file_io.FileIO(path) + + save_module(grammar._hashed, io, module, lines=[]) + assert load_module(grammar._hashed, io) == module + + unlink(_get_hashed_path(grammar._hashed, path)) + parser_cache.clear() + + cached2 = load_module(grammar._hashed, io) + assert cached2 is None diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_diff_parser.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_diff_parser.py new file mode 100644 index 0000000..04e1ca0 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_diff_parser.py @@ -0,0 +1,1288 @@ +# -*- coding: utf-8 -*- +from textwrap import dedent +import logging +import sys + +import pytest + +from parso.utils import split_lines +from parso import cache +from parso import load_grammar +from parso.python.diff import DiffParser, _assert_valid_graph +from parso import parse + +ANY = object() + + +def test_simple(): + """ + The diff parser reuses modules. So check for that. + """ + grammar = load_grammar() + module_a = grammar.parse('a', diff_cache=True) + assert grammar.parse('b', diff_cache=True) == module_a + + +def _check_error_leaves_nodes(node): + if node.type in ('error_leaf', 'error_node'): + return node + + try: + children = node.children + except AttributeError: + pass + else: + for child in children: + x_node = _check_error_leaves_nodes(child) + if x_node is not None: + return x_node + return None + + +class Differ(object): + grammar = load_grammar() + + def initialize(self, code): + logging.debug('differ: initialize') + try: + del cache.parser_cache[self.grammar._hashed][None] + except KeyError: + pass + + self.lines = split_lines(code, keepends=True) + self.module = parse(code, diff_cache=True, cache=True) + assert code == self.module.get_code() + _assert_valid_graph(self.module) + return self.module + + def parse(self, code, copies=0, parsers=0, expect_error_leaves=False): + logging.debug('differ: parse copies=%s parsers=%s', copies, parsers) + lines = split_lines(code, keepends=True) + diff_parser = DiffParser( + self.grammar._pgen_grammar, + self.grammar._tokenizer, + self.module, + ) + new_module = diff_parser.update(self.lines, lines) + self.lines = lines + assert code == new_module.get_code() + + _assert_valid_graph(new_module) + + error_node = _check_error_leaves_nodes(new_module) + assert expect_error_leaves == (error_node is not None), error_node + if parsers is not ANY: + assert diff_parser._parser_count == parsers + if copies is not ANY: + assert diff_parser._copy_count == copies + return new_module + + +@pytest.fixture() +def differ(): + return Differ() + + +def test_change_and_undo(differ): + func_before = 'def func():\n pass\n' + # Parse the function and a. + differ.initialize(func_before + 'a') + # Parse just b. + differ.parse(func_before + 'b', copies=1, parsers=1) + # b has changed to a again, so parse that. + differ.parse(func_before + 'a', copies=1, parsers=1) + # Same as before parsers should not be used. Just a simple copy. + differ.parse(func_before + 'a', copies=1) + + # Now that we have a newline at the end, everything is easier in Python + # syntax, we can parse once and then get a copy. + differ.parse(func_before + 'a\n', copies=1, parsers=1) + differ.parse(func_before + 'a\n', copies=1) + + # Getting rid of an old parser: Still no parsers used. + differ.parse('a\n', copies=1) + # Now the file has completely changed and we need to parse. + differ.parse('b\n', parsers=1) + # And again. + differ.parse('a\n', parsers=1) + + +def test_positions(differ): + func_before = 'class A:\n pass\n' + m = differ.initialize(func_before + 'a') + assert m.start_pos == (1, 0) + assert m.end_pos == (3, 1) + + m = differ.parse('a', copies=1) + assert m.start_pos == (1, 0) + assert m.end_pos == (1, 1) + + m = differ.parse('a\n\n', parsers=1) + assert m.end_pos == (3, 0) + m = differ.parse('a\n\n ', copies=1, parsers=2) + assert m.end_pos == (3, 1) + m = differ.parse('a ', parsers=1) + assert m.end_pos == (1, 2) + + +def test_if_simple(differ): + src = dedent('''\ + if 1: + a = 3 + ''') + else_ = "else:\n a = ''\n" + + differ.initialize(src + 'a') + differ.parse(src + else_ + "a", copies=0, parsers=1) + + differ.parse(else_, parsers=1, copies=1, expect_error_leaves=True) + differ.parse(src + else_, parsers=1) + + +def test_func_with_for_and_comment(differ): + # The first newline is important, leave it. It should not trigger another + # parser split. + src = dedent("""\ + + def func(): + pass + + + for a in [1]: + # COMMENT + a""") + differ.initialize(src) + differ.parse('a\n' + src, copies=1, parsers=2) + + +def test_one_statement_func(differ): + src = dedent("""\ + first + def func(): a + """) + differ.initialize(src + 'second') + differ.parse(src + 'def second():\n a', parsers=1, copies=1) + + +def test_for_on_one_line(differ): + src = dedent("""\ + foo = 1 + for x in foo: pass + + def hi(): + pass + """) + differ.initialize(src) + + src = dedent("""\ + def hi(): + for x in foo: pass + pass + + pass + """) + differ.parse(src, parsers=2) + + src = dedent("""\ + def hi(): + for x in foo: pass + pass + + def nested(): + pass + """) + # The second parser is for parsing the `def nested()` which is an `equal` + # operation in the SequenceMatcher. + differ.parse(src, parsers=1, copies=1) + + +def test_open_parentheses(differ): + func = 'def func():\n a\n' + code = 'isinstance(\n\n' + func + new_code = 'isinstance(\n' + func + differ.initialize(code) + + differ.parse(new_code, parsers=1, expect_error_leaves=True) + + new_code = 'a = 1\n' + new_code + differ.parse(new_code, parsers=2, expect_error_leaves=True) + + func += 'def other_func():\n pass\n' + differ.initialize('isinstance(\n' + func) + # Cannot copy all, because the prefix of the function is once a newline and + # once not. + differ.parse('isinstance()\n' + func, parsers=2, copies=1) + + +def test_open_parentheses_at_end(differ): + code = "a['" + differ.initialize(code) + differ.parse(code, parsers=1, expect_error_leaves=True) + + +def test_backslash(differ): + src = dedent(r""" + a = 1\ + if 1 else 2 + def x(): + pass + """) + differ.initialize(src) + + src = dedent(r""" + def x(): + a = 1\ + if 1 else 2 + def y(): + pass + """) + differ.parse(src, parsers=2) + + src = dedent(r""" + def first(): + if foo \ + and bar \ + or baz: + pass + def second(): + pass + """) + differ.parse(src, parsers=1) + + +def test_full_copy(differ): + code = 'def foo(bar, baz):\n pass\n bar' + differ.initialize(code) + differ.parse(code, copies=1) + + +def test_wrong_whitespace(differ): + code = ''' + hello + ''' + differ.initialize(code) + differ.parse(code + 'bar\n ', parsers=3) + + code += """abc(\npass\n """ + differ.parse(code, parsers=2, copies=1, expect_error_leaves=True) + + +def test_issues_with_error_leaves(differ): + code = dedent(''' + def ints(): + str.. + str + ''') + code2 = dedent(''' + def ints(): + str. + str + ''') + differ.initialize(code) + differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) + + +def test_unfinished_nodes(differ): + code = dedent(''' + class a(): + def __init__(self, a): + self.a = a + def p(self): + a(1) + ''') + code2 = dedent(''' + class a(): + def __init__(self, a): + self.a = a + def p(self): + self + a(1) + ''') + differ.initialize(code) + differ.parse(code2, parsers=1, copies=2) + + +def test_nested_if_and_scopes(differ): + code = dedent(''' + class a(): + if 1: + def b(): + 2 + ''') + code2 = code + ' else:\n 3' + differ.initialize(code) + differ.parse(code2, parsers=1, copies=0) + + +def test_word_before_def(differ): + code1 = 'blub def x():\n' + code2 = code1 + ' s' + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=0, expect_error_leaves=True) + + +def test_classes_with_error_leaves(differ): + code1 = dedent(''' + class X(): + def x(self): + blablabla + assert 3 + self. + + class Y(): + pass + ''') + code2 = dedent(''' + class X(): + def x(self): + blablabla + assert 3 + str( + + class Y(): + pass + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True) + + +def test_totally_wrong_whitespace(differ): + code1 = ''' + class X(): + raise n + + class Y(): + pass + ''' + code2 = ''' + class X(): + raise n + str( + + class Y(): + pass + ''' + + differ.initialize(code1) + differ.parse(code2, parsers=4, copies=0, expect_error_leaves=True) + + +def test_node_insertion(differ): + code1 = dedent(''' + class X(): + def y(self): + a = 1 + b = 2 + + c = 3 + d = 4 + ''') + code2 = dedent(''' + class X(): + def y(self): + a = 1 + b = 2 + str + + c = 3 + d = 4 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=2) + + +def test_whitespace_at_end(differ): + code = dedent('str\n\n') + + differ.initialize(code) + differ.parse(code + '\n', parsers=1, copies=1) + + +def test_endless_while_loop(differ): + """ + This was a bug in Jedi #878. + """ + code = '#dead' + differ.initialize(code) + module = differ.parse(code, parsers=1) + assert module.end_pos == (1, 5) + + code = '#dead\n' + differ.initialize(code) + module = differ.parse(code + '\n', parsers=1) + assert module.end_pos == (3, 0) + + +def test_in_class_movements(differ): + code1 = dedent("""\ + class PlaybookExecutor: + p + b + def run(self): + 1 + try: + x + except: + pass + """) + code2 = dedent("""\ + class PlaybookExecutor: + b + def run(self): + 1 + try: + x + except: + pass + """) + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1) + + +def test_in_parentheses_newlines(differ): + code1 = dedent(""" + x = str( + True) + + a = 1 + + def foo(): + pass + + b = 2""") + + code2 = dedent(""" + x = str(True) + + a = 1 + + def foo(): + pass + + b = 2""") + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=1) + + +def test_indentation_issue(differ): + code1 = dedent(""" + import module + """) + + code2 = dedent(""" + class L1: + class L2: + class L3: + def f(): pass + def f(): pass + def f(): pass + def f(): pass + """) + + differ.initialize(code1) + differ.parse(code2, parsers=1) + + +def test_endmarker_newline(differ): + code1 = dedent('''\ + docu = None + # some comment + result = codet + incomplete_dctassign = { + "module" + + if "a": + x = 3 # asdf + ''') + + code2 = code1.replace('codet', 'coded') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True) + + +def test_newlines_at_end(differ): + differ.initialize('a\n\n') + differ.parse('a\n', copies=1) + + +def test_end_newline_with_decorator(differ): + code = dedent('''\ + @staticmethod + def spam(): + import json + json.l''') + + differ.initialize(code) + module = differ.parse(code + '\n', copies=1, parsers=1) + decorated, endmarker = module.children + assert decorated.type == 'decorated' + decorator, func = decorated.children + suite = func.children[-1] + assert suite.type == 'suite' + newline, first_stmt, second_stmt = suite.children + assert first_stmt.get_code() == ' import json\n' + assert second_stmt.get_code() == ' json.l\n' + + +def test_invalid_to_valid_nodes(differ): + code1 = dedent('''\ + def a(): + foo = 3 + def b(): + la = 3 + else: + la + return + foo + base + ''') + code2 = dedent('''\ + def a(): + foo = 3 + def b(): + la = 3 + if foo: + latte = 3 + else: + la + return + foo + base + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=3) + + +def test_if_removal_and_reappearence(differ): + code1 = dedent('''\ + la = 3 + if foo: + latte = 3 + else: + la + pass + ''') + + code2 = dedent('''\ + la = 3 + latte = 3 + else: + la + pass + ''') + + code3 = dedent('''\ + la = 3 + if foo: + latte = 3 + else: + la + ''') + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=4, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1) + differ.parse(code3, parsers=1, copies=1) + + +def test_add_error_indentation(differ): + code = 'if x:\n 1\n' + differ.initialize(code) + differ.parse(code + ' 2\n', parsers=1, copies=0, expect_error_leaves=True) + + +def test_differing_docstrings(differ): + code1 = dedent('''\ + def foobar(x, y): + 1 + return x + + def bazbiz(): + foobar() + lala + ''') + + code2 = dedent('''\ + def foobar(x, y): + 2 + return x + y + + def bazbiz(): + z = foobar() + lala + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=3, copies=1) + differ.parse(code1, parsers=3, copies=1) + + +def test_one_call_in_function_change(differ): + code1 = dedent('''\ + def f(self): + mro = [self] + for a in something: + yield a + + def g(self): + return C( + a=str, + b=self, + ) + ''') + + code2 = dedent('''\ + def f(self): + mro = [self] + + def g(self): + return C( + a=str, + t + b=self, + ) + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=2, copies=1) + + +def test_function_deletion(differ): + code1 = dedent('''\ + class C(list): + def f(self): + def iterate(): + for x in b: + break + + return list(iterate()) + ''') + + code2 = dedent('''\ + class C(): + def f(self): + for x in b: + break + + return list(iterate()) + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=0, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=0) + + +def test_docstring_removal(differ): + code1 = dedent('''\ + class E(Exception): + """ + 1 + 2 + 3 + """ + + class S(object): + @property + def f(self): + return cmd + def __repr__(self): + return cmd2 + ''') + + code2 = dedent('''\ + class E(Exception): + """ + 1 + 3 + """ + + class S(object): + @property + def f(self): + return cmd + return cmd2 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=2) + differ.parse(code1, parsers=2, copies=1) + + +def test_paren_in_strange_position(differ): + code1 = dedent('''\ + class C: + """ ha """ + def __init__(self, message): + self.message = message + ''') + + code2 = dedent('''\ + class C: + """ ha """ + ) + def __init__(self, message): + self.message = message + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=2, expect_error_leaves=True) + differ.parse(code1, parsers=0, copies=2) + + +def insert_line_into_code(code, index, line): + lines = split_lines(code, keepends=True) + lines.insert(index, line) + return ''.join(lines) + + +def test_paren_before_docstring(differ): + code1 = dedent('''\ + # comment + """ + The + """ + from parso import tree + from parso import python + ''') + + code2 = insert_line_into_code(code1, 1, ' ' * 16 + 'raise InternalParseError(\n') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=2, copies=1) + + +def test_parentheses_before_method(differ): + code1 = dedent('''\ + class A: + def a(self): + pass + + class B: + def b(self): + if 1: + pass + ''') + + code2 = dedent('''\ + class A: + def a(self): + pass + Exception.__init__(self, "x" % + + def b(self): + if 1: + pass + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1) + + +def test_indentation_issues(differ): + code1 = dedent('''\ + class C: + def f(): + 1 + if 2: + return 3 + + def g(): + to_be_removed + pass + ''') + + code2 = dedent('''\ + class C: + def f(): + 1 + ``something``, very ``weird``). + if 2: + return 3 + + def g(): + to_be_removed + pass + ''') + + code3 = dedent('''\ + class C: + def f(): + 1 + if 2: + return 3 + + def g(): + pass + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=2, expect_error_leaves=True) + differ.parse(code1, copies=2) + differ.parse(code3, parsers=2, copies=1) + differ.parse(code1, parsers=1, copies=2) + + +def test_error_dedent_issues(differ): + code1 = dedent('''\ + while True: + try: + 1 + except KeyError: + if 2: + 3 + except IndexError: + 4 + + 5 + ''') + + code2 = dedent('''\ + while True: + try: + except KeyError: + 1 + except KeyError: + if 2: + 3 + except IndexError: + 4 + + something_inserted + 5 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=6, copies=2, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=0) + + +def test_random_text_insertion(differ): + code1 = dedent('''\ +class C: + def f(): + return node + + def g(): + try: + 1 + except KeyError: + 2 + ''') + + code2 = dedent('''\ +class C: + def f(): + return node +Some'random text: yeah + for push in plan.dfa_pushes: + + def g(): + try: + 1 + except KeyError: + 2 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=1, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1) + + +def test_many_nested_ifs(differ): + code1 = dedent('''\ + class C: + def f(self): + def iterate(): + if 1: + yield t + else: + yield + return + + def g(): + 3 + ''') + + code2 = dedent('''\ + def f(self): + def iterate(): + if 1: + yield t + hahahaha + if 2: + else: + yield + return + + def g(): + 3 + ''') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=1, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1) + + +@pytest.mark.skipif(sys.version_info < (3, 5), reason="Async starts working in 3.5") +@pytest.mark.parametrize('prefix', ['', 'async ']) +def test_with_and_funcdef_in_call(differ, prefix): + code1 = prefix + dedent('''\ + with x: + la = C( + a=1, + b=2, + c=3, + ) + ''') + + code2 = insert_line_into_code(code1, 3, 'def y(self, args):\n') + + differ.initialize(code1) + differ.parse(code2, parsers=3, expect_error_leaves=True) + differ.parse(code1, parsers=1) + + +def test_wrong_backslash(differ): + code1 = dedent('''\ + def y(): + 1 + for x in y: + continue + ''') + + code2 = insert_line_into_code(code1, 3, '\\.whl$\n') + + differ.initialize(code1) + differ.parse(code2, parsers=2, copies=2, expect_error_leaves=True) + differ.parse(code1, parsers=1, copies=1) + + +def test_comment_change(differ): + differ.initialize('') + + +def test_random_unicode_characters(differ): + """ + Those issues were all found with the fuzzer. + """ + differ.initialize('') + differ.parse(u'\x1dĔBϞɛˁşʑ˳˻ȣſéÎ\x90̕ȟòwʘ\x1dĔBϞɛˁşʑ˳˻ȣſéÎ', parsers=1, + expect_error_leaves=True) + differ.parse(u'\r\r', parsers=1) + differ.parse(u"˟Ę\x05À\r rúƣ@\x8a\x15r()\n", parsers=1, expect_error_leaves=True) + differ.parse(u'a\ntaǁ\rGĒōns__\n\nb', parsers=1, + expect_error_leaves=sys.version_info[0] == 2) + s = ' if not (self, "_fi\x02\x0e\x08\n\nle"):' + differ.parse(s, parsers=1, expect_error_leaves=True) + differ.parse('') + differ.parse(s + '\n', parsers=1, expect_error_leaves=True) + differ.parse(u' result = (\r\f\x17\t\x11res)', parsers=2, expect_error_leaves=True) + differ.parse('') + differ.parse(' a( # xx\ndef', parsers=2, expect_error_leaves=True) + + +@pytest.mark.skipif(sys.version_info < (2, 7), reason="No set literals in Python 2.6") +def test_dedent_end_positions(differ): + code1 = dedent('''\ + if 1: + if b: + 2 + c = { + 5} + ''') + code2 = dedent('''\ + if 1: + if ⌟ഒᜈྡྷṭb: + 2 + 'l': ''} + c = { + 5} + ''') + differ.initialize(code1) + differ.parse(code2, parsers=1, expect_error_leaves=True) + differ.parse(code1, parsers=1) + + +def test_special_no_newline_ending(differ): + code1 = dedent('''\ + 1 + ''') + code2 = dedent('''\ + 1 + is ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=0) + + +def test_random_character_insertion(differ): + code1 = dedent('''\ + def create(self): + 1 + if self.path is not None: + return + # 3 + # 4 + ''') + code2 = dedent('''\ + def create(self): + 1 + if 2: + x return + # 3 + # 4 + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=3, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=1) + + +def test_import_opening_bracket(differ): + code1 = dedent('''\ + 1 + 2 + from bubu import (X, + ''') + code2 = dedent('''\ + 11 + 2 + from bubu import (X, + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=2, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=2, expect_error_leaves=True) + + +def test_opening_bracket_at_end(differ): + code1 = dedent('''\ + class C: + 1 + [ + ''') + code2 = dedent('''\ + 3 + class C: + 1 + [ + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=2, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=1, expect_error_leaves=True) + + +def test_all_sorts_of_indentation(differ): + code1 = dedent('''\ + class C: + 1 + def f(): + 'same' + + if foo: + a = b + end + ''') + code2 = dedent('''\ + class C: + 1 + def f(yield await %|( + 'same' + + \x02\x06\x0f\x1c\x11 + if foo: + a = b + + end + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=4, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=3) + + code3 = dedent('''\ + if 1: + a + b + c + d + \x00 + ''') + differ.parse(code3, parsers=2, expect_error_leaves=True) + differ.parse('') + + +def test_dont_copy_dedents_in_beginning(differ): + code1 = dedent('''\ + a + 4 + ''') + code2 = dedent('''\ + 1 + 2 + 3 + 4 + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code1, parsers=2) + + +def test_dont_copy_error_leaves(differ): + code1 = dedent('''\ + def f(n): + x + if 2: + 3 + ''') + code2 = dedent('''\ + def f(n): + def if 1: + indent + x + if 2: + 3 + ''') + differ.initialize(code1) + differ.parse(code2, parsers=1, expect_error_leaves=True) + differ.parse(code1, parsers=2) + + +def test_error_dedent_in_between(differ): + code1 = dedent('''\ + class C: + def f(): + a + if something: + x + z + ''') + code2 = dedent('''\ + class C: + def f(): + a + dedent + if other_thing: + b + if something: + x + z + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=2) + + +def test_some_other_indentation_issues(differ): + code1 = dedent('''\ + class C: + x + def f(): + "" + copied + a + ''') + code2 = dedent('''\ + try: + de + a + b + c + d + def f(): + "" + copied + a + ''') + differ.initialize(code1) + differ.parse(code2, copies=2, parsers=1, expect_error_leaves=True) + differ.parse(code1, copies=2, parsers=2) + + +def test_open_bracket_case1(differ): + code1 = dedent('''\ + class C: + 1 + 2 # ha + ''') + code2 = insert_line_into_code(code1, 2, ' [str\n') + code3 = insert_line_into_code(code2, 4, ' str\n') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code3, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code1, copies=1, parsers=1) + + +def test_open_bracket_case2(differ): + code1 = dedent('''\ + class C: + def f(self): + ( + b + c + + def g(self): + d + ''') + code2 = dedent('''\ + class C: + def f(self): + ( + b + c + self. + + def g(self): + d + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=2, expect_error_leaves=True) + differ.parse(code1, copies=2, parsers=0, expect_error_leaves=True) + + +def test_some_weird_removals(differ): + code1 = dedent('''\ + class C: + 1 + ''') + code2 = dedent('''\ + class C: + 1 + @property + A + return + # x + omega + ''') + code3 = dedent('''\ + class C: + 1 + ; + omega + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1, expect_error_leaves=True) + differ.parse(code3, copies=1, parsers=2, expect_error_leaves=True) + differ.parse(code1, copies=1) + + +@pytest.mark.skipif(sys.version_info < (3, 5), reason="Async starts working in 3.5") +def test_async_copy(differ): + code1 = dedent('''\ + async def main(): + x = 3 + print( + ''') + code2 = dedent('''\ + async def main(): + x = 3 + print() + ''') + differ.initialize(code1) + differ.parse(code2, copies=1, parsers=1) + differ.parse(code1, copies=1, parsers=1, expect_error_leaves=True) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_error_recovery.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_error_recovery.py new file mode 100644 index 0000000..b7d897d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_error_recovery.py @@ -0,0 +1,85 @@ +from parso import parse, load_grammar + + +def test_with_stmt(): + module = parse('with x: f.\na') + assert module.children[0].type == 'with_stmt' + w, with_item, colon, f = module.children[0].children + assert f.type == 'error_node' + assert f.get_code(include_prefix=False) == 'f.' + + assert module.children[2].type == 'name' + + +def test_one_line_function(each_version): + module = parse('def x(): f.', version=each_version) + assert module.children[0].type == 'funcdef' + def_, name, parameters, colon, f = module.children[0].children + assert f.type == 'error_node' + + module = parse('def x(a:', version=each_version) + func = module.children[0] + assert func.type == 'error_node' + if each_version.startswith('2'): + assert func.children[-1].value == 'a' + else: + assert func.children[-1] == ':' + + +def test_if_else(): + module = parse('if x:\n f.\nelse:\n g(') + if_stmt = module.children[0] + if_, test, colon, suite1, else_, colon, suite2 = if_stmt.children + f = suite1.children[1] + assert f.type == 'error_node' + assert f.children[0].value == 'f' + assert f.children[1].value == '.' + g = suite2.children[1] + assert g.children[0].value == 'g' + assert g.children[1].value == '(' + + +def test_if_stmt(): + module = parse('if x: f.\nelse: g(') + if_stmt = module.children[0] + assert if_stmt.type == 'if_stmt' + if_, test, colon, f = if_stmt.children + assert f.type == 'error_node' + assert f.children[0].value == 'f' + assert f.children[1].value == '.' + + assert module.children[1].type == 'newline' + assert module.children[1].value == '\n' + assert module.children[2].type == 'error_leaf' + assert module.children[2].value == 'else' + assert module.children[3].type == 'error_leaf' + assert module.children[3].value == ':' + + in_else_stmt = module.children[4] + assert in_else_stmt.type == 'error_node' + assert in_else_stmt.children[0].value == 'g' + assert in_else_stmt.children[1].value == '(' + + +def test_invalid_token(): + module = parse('a + ? + b') + error_node, q, plus_b, endmarker = module.children + assert error_node.get_code() == 'a +' + assert q.value == '?' + assert q.type == 'error_leaf' + assert plus_b.type == 'factor' + assert plus_b.get_code() == ' + b' + + +def test_invalid_token_in_fstr(): + module = load_grammar(version='3.6').parse('f"{a + ? + b}"') + error_node, q, plus_b, error1, error2, endmarker = module.children + assert error_node.get_code() == 'f"{a +' + assert q.value == '?' + assert q.type == 'error_leaf' + assert plus_b.type == 'error_node' + assert plus_b.get_code() == ' + b' + assert error1.value == '}' + assert error1.type == 'error_leaf' + assert error2.value == '"' + assert error2.type == 'error_leaf' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_file_python_errors.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_file_python_errors.py new file mode 100644 index 0000000..7083dfe --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_file_python_errors.py @@ -0,0 +1,23 @@ +import os + +import parso + + +def get_python_files(path): + for dir_path, dir_names, file_names in os.walk(path): + for file_name in file_names: + if file_name.endswith('.py'): + yield os.path.join(dir_path, file_name) + + +def test_on_itself(each_version): + """ + There are obviously no syntax erros in the Python code of parso. However + parso should output the same for all versions. + """ + grammar = parso.load_grammar(version=each_version) + path = os.path.dirname(os.path.dirname(__file__)) + '/parso' + for file in get_python_files(path): + tree = grammar.parse(path=file) + errors = list(grammar.iter_errors(tree)) + assert not errors diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_fstring.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_fstring.py new file mode 100644 index 0000000..2a07ce7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_fstring.py @@ -0,0 +1,138 @@ +import pytest +from textwrap import dedent + +from parso import load_grammar, ParserSyntaxError +from parso.python.tokenize import tokenize + + +@pytest.fixture +def grammar(): + return load_grammar(version='3.8') + + +@pytest.mark.parametrize( + 'code', [ + # simple cases + 'f"{1}"', + 'f"""{1}"""', + 'f"{foo} {bar}"', + + # empty string + 'f""', + 'f""""""', + + # empty format specifier is okay + 'f"{1:}"', + + # use of conversion options + 'f"{1!a}"', + 'f"{1!a:1}"', + + # format specifiers + 'f"{1:1}"', + 'f"{1:1.{32}}"', + 'f"{1::>4}"', + 'f"{x:{y}}"', + 'f"{x:{y:}}"', + 'f"{x:{y:1}}"', + + # Escapes + 'f"{{}}"', + 'f"{{{1}}}"', + 'f"{{{1}"', + 'f"1{{2{{3"', + 'f"}}"', + + # New Python 3.8 syntax f'{a=}' + 'f"{a=}"', + 'f"{a()=}"', + + # multiline f-string + 'f"""abc\ndef"""', + 'f"""abc{\n123}def"""', + + # a line continuation inside of an fstring_string + 'f"abc\\\ndef"', + 'f"\\\n{123}\\\n"', + + # a line continuation inside of an fstring_expr + 'f"{\\\n123}"', + + # a line continuation inside of an format spec + 'f"{123:.2\\\nf}"', + ] +) +def test_valid(code, grammar): + module = grammar.parse(code, error_recovery=False) + fstring = module.children[0] + assert fstring.type == 'fstring' + assert fstring.get_code() == code + + +@pytest.mark.parametrize( + 'code', [ + # an f-string can't contain unmatched curly braces + 'f"}"', + 'f"{"', + 'f"""}"""', + 'f"""{"""', + + # invalid conversion characters + 'f"{1!{a}}"', + 'f"{!{a}}"', + + # The curly braces must contain an expression + 'f"{}"', + 'f"{:}"', + 'f"{:}}}"', + 'f"{:1}"', + 'f"{!:}"', + 'f"{!}"', + 'f"{!a}"', + + # invalid (empty) format specifiers + 'f"{1:{}}"', + 'f"{1:{:}}"', + + # a newline without a line continuation inside a single-line string + 'f"abc\ndef"', + ] +) +def test_invalid(code, grammar): + with pytest.raises(ParserSyntaxError): + grammar.parse(code, error_recovery=False) + + # It should work with error recovery. + grammar.parse(code, error_recovery=True) + + +@pytest.mark.parametrize( + ('code', 'positions'), [ + # 2 times 2, 5 because python expr and endmarker. + ('f"}{"', [(1, 0), (1, 2), (1, 3), (1, 4), (1, 5)]), + ('f" :{ 1 : } "', [(1, 0), (1, 2), (1, 4), (1, 6), (1, 8), (1, 9), + (1, 10), (1, 11), (1, 12), (1, 13)]), + ('f"""\n {\nfoo\n }"""', [(1, 0), (1, 4), (2, 1), (3, 0), (4, 1), + (4, 2), (4, 5)]), + ] +) +def test_tokenize_start_pos(code, positions): + tokens = list(tokenize(code, version_info=(3, 6))) + assert positions == [p.start_pos for p in tokens] + + +@pytest.mark.parametrize( + 'code', [ + dedent("""\ + f'''s{ + str.uppe + ''' + """), + 'f"foo', + 'f"""foo', + 'f"abc\ndef"', + ] +) +def test_roundtrip(grammar, code): + tree = grammar.parse(code) + assert tree.get_code() == code diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_get_code.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_get_code.py new file mode 100644 index 0000000..2f2260d --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_get_code.py @@ -0,0 +1,120 @@ +import difflib + +import pytest + +from parso import parse + +code_basic_features = ''' +"""A mod docstring""" + +def a_function(a_argument, a_default = "default"): + """A func docstring""" + + a_result = 3 * a_argument + print(a_result) # a comment + b = """ +from +to""" + "huhu" + + + if a_default == "default": + return str(a_result) + else + return None +''' + + +def diff_code_assert(a, b, n=4): + if a != b: + diff = "\n".join(difflib.unified_diff( + a.splitlines(), + b.splitlines(), + n=n, + lineterm="" + )) + assert False, "Code does not match:\n%s\n\ncreated code:\n%s" % ( + diff, + b + ) + pass + + +def test_basic_parsing(): + """Validate the parsing features""" + + m = parse(code_basic_features) + diff_code_assert( + code_basic_features, + m.get_code() + ) + + +def test_operators(): + src = '5 * 3' + module = parse(src) + diff_code_assert(src, module.get_code()) + + +def test_get_code(): + """Use the same code that the parser also generates, to compare""" + s = '''"""a docstring""" +class SomeClass(object, mixin): + def __init__(self): + self.xy = 3.0 + """statement docstr""" + def some_method(self): + return 1 + def yield_method(self): + while hasattr(self, 'xy'): + yield True + for x in [1, 2]: + yield x + def empty(self): + pass +class Empty: + pass +class WithDocstring: + """class docstr""" + pass +def method_with_docstring(): + """class docstr""" + pass +''' + assert parse(s).get_code() == s + + +def test_end_newlines(): + """ + The Python grammar explicitly needs a newline at the end. Jedi though still + wants to be able, to return the exact same code without the additional new + line the parser needs. + """ + def test(source, end_pos): + module = parse(source) + assert module.get_code() == source + assert module.end_pos == end_pos + + test('a', (1, 1)) + test('a\n', (2, 0)) + test('a\nb', (2, 1)) + test('a\n#comment\n', (3, 0)) + test('a\n#comment', (2, 8)) + test('a#comment', (1, 9)) + test('def a():\n pass', (2, 5)) + + test('def a(', (1, 6)) + + +@pytest.mark.parametrize(('code', 'types'), [ + ('\r', ['endmarker']), + ('\n\r', ['endmarker']) +]) +def test_carriage_return_at_end(code, types): + """ + By adding an artificial newline this created weird side effects for + \r at the end of files. + """ + tree = parse(code) + assert tree.get_code() == code + assert [c.type for c in tree.children] == types + assert tree.end_pos == (len(code) + 1, 0) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_grammar.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_grammar.py new file mode 100644 index 0000000..60a249b --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_grammar.py @@ -0,0 +1,8 @@ +import parso + +import pytest + + +def test_non_unicode(): + with pytest.raises(UnicodeDecodeError): + parso.parse(b'\xe4') diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_load_grammar.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_load_grammar.py new file mode 100644 index 0000000..70dd807 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_load_grammar.py @@ -0,0 +1,31 @@ +import pytest +from parso.grammar import load_grammar +from parso import utils + + +def test_load_inexisting_grammar(): + # This version shouldn't be out for a while, but if we ever do, wow! + with pytest.raises(NotImplementedError): + load_grammar(version='15.8') + # The same is true for very old grammars (even though this is probably not + # going to be an issue. + with pytest.raises(NotImplementedError): + load_grammar(version='1.5') + + +@pytest.mark.parametrize(('string', 'result'), [ + ('2', (2, 7)), ('3', (3, 6)), ('1.1', (1, 1)), ('1.1.1', (1, 1)), ('300.1.31', (300, 1)) +]) +def test_parse_version(string, result): + assert utils._parse_version(string) == result + + +@pytest.mark.parametrize('string', ['1.', 'a', '#', '1.3.4.5', '1.12']) +def test_invalid_grammar_version(string): + with pytest.raises(ValueError): + load_grammar(version=string) + + +def test_grammar_int_version(): + with pytest.raises(TypeError): + load_grammar(version=3.2) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_normalizer_issues_files.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_normalizer_issues_files.py new file mode 100644 index 0000000..7f692d1 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_normalizer_issues_files.py @@ -0,0 +1,70 @@ +""" +To easily verify if our normalizer raises the right error codes, just use the +tests of pydocstyle. +""" + +import difflib +import re + +import parso +from parso._compatibility import total_ordering +from parso.utils import python_bytes_to_unicode + + +@total_ordering +class WantedIssue(object): + def __init__(self, code, line, column): + self.code = code + self._line = line + self._column = column + + def __eq__(self, other): + return self.code == other.code and self.start_pos == other.start_pos + + def __lt__(self, other): + return self.start_pos < other.start_pos or self.code < other.code + + def __hash__(self): + return hash(str(self.code) + str(self._line) + str(self._column)) + + @property + def start_pos(self): + return self._line, self._column + + +def collect_errors(code): + for line_nr, line in enumerate(code.splitlines(), 1): + match = re.match(r'(\s*)#: (.*)$', line) + if match is not None: + codes = match.group(2) + for code in codes.split(): + code, _, add_indent = code.partition(':') + column = int(add_indent or len(match.group(1))) + + code, _, add_line = code.partition('+') + l = line_nr + 1 + int(add_line or 0) + + yield WantedIssue(code[1:], l, column) + + +def test_normalizer_issue(normalizer_issue_case): + def sort(issues): + issues = sorted(issues, key=lambda i: (i.start_pos, i.code)) + return ["(%s, %s): %s" % (i.start_pos[0], i.start_pos[1], i.code) + for i in issues] + + with open(normalizer_issue_case.path, 'rb') as f: + code = python_bytes_to_unicode(f.read()) + + desired = sort(collect_errors(code)) + + grammar = parso.load_grammar(version=normalizer_issue_case.python_version) + module = grammar.parse(code) + issues = grammar._get_normalizer_issues(module) + actual = sort(issues) + + diff = '\n'.join(difflib.ndiff(desired, actual)) + # To make the pytest -v diff a bit prettier, stop pytest to rewrite assert + # statements by executing the comparison earlier. + _bool = desired == actual + assert _bool, '\n' + diff diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_old_fast_parser.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_old_fast_parser.py new file mode 100644 index 0000000..7e12a03 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_old_fast_parser.py @@ -0,0 +1,210 @@ +""" +These tests test the cases that the old fast parser tested with the normal +parser. + +The old fast parser doesn't exist anymore and was replaced with a diff parser. +However the tests might still be relevant for the parser. +""" + +from textwrap import dedent + +from parso._compatibility import u +from parso import parse + + +def test_carriage_return_splitting(): + source = u(dedent(''' + + + + "string" + + class Foo(): + pass + ''')) + source = source.replace('\n', '\r\n') + module = parse(source) + assert [n.value for lst in module.get_used_names().values() for n in lst] == ['Foo'] + + +def check_p(src, number_parsers_used, number_of_splits=None, number_of_misses=0): + if number_of_splits is None: + number_of_splits = number_parsers_used + + module_node = parse(src) + + assert src == module_node.get_code() + return module_node + + +def test_for(): + src = dedent("""\ + for a in [1,2]: + a + + for a1 in 1,"": + a1 + """) + check_p(src, 1) + + +def test_class_with_class_var(): + src = dedent("""\ + class SuperClass: + class_super = 3 + def __init__(self): + self.foo = 4 + pass + """) + check_p(src, 3) + + +def test_func_with_if(): + src = dedent("""\ + def recursion(a): + if foo: + return recursion(a) + else: + if bar: + return inexistent + else: + return a + """) + check_p(src, 1) + + +def test_decorator(): + src = dedent("""\ + class Decorator(): + @memoize + def dec(self, a): + return a + """) + check_p(src, 2) + + +def test_nested_funcs(): + src = dedent("""\ + def memoize(func): + def wrapper(*args, **kwargs): + return func(*args, **kwargs) + return wrapper + """) + check_p(src, 3) + + +def test_multi_line_params(): + src = dedent("""\ + def x(a, + b): + pass + + foo = 1 + """) + check_p(src, 2) + + +def test_class_func_if(): + src = dedent("""\ + class Class: + def func(self): + if 1: + a + else: + b + + pass + """) + check_p(src, 3) + + +def test_multi_line_for(): + src = dedent("""\ + for x in [1, + 2]: + pass + + pass + """) + check_p(src, 1) + + +def test_wrong_indentation(): + src = dedent("""\ + def func(): + a + b + a + """) + #check_p(src, 1) + + src = dedent("""\ + def complex(): + def nested(): + a + b + a + + def other(): + pass + """) + check_p(src, 3) + + +def test_strange_parentheses(): + src = dedent(""" + class X(): + a = (1 + if 1 else 2) + def x(): + pass + """) + check_p(src, 2) + + +def test_fake_parentheses(): + """ + The fast parser splitting counts parentheses, but not as correct tokens. + Therefore parentheses in string tokens are included as well. This needs to + be accounted for. + """ + src = dedent(r""" + def x(): + a = (')' + if 1 else 2) + def y(): + pass + def z(): + pass + """) + check_p(src, 3, 2, 1) + + +def test_additional_indent(): + source = dedent('''\ + int( + def x(): + pass + ''') + + check_p(source, 2) + + +def test_round_trip(): + code = dedent(''' + def x(): + """hahaha""" + func''') + + assert parse(code).get_code() == code + + +def test_parentheses_in_string(): + code = dedent(''' + def x(): + '(' + + import abc + + abc.''') + check_p(code, 2, 1, 1) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_param_splitting.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_param_splitting.py new file mode 100644 index 0000000..f04fea7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_param_splitting.py @@ -0,0 +1,47 @@ +''' +To make the life of any analysis easier, we are generating Param objects +instead of simple parser objects. +''' + +from textwrap import dedent + +from parso import parse + + +def assert_params(param_string, version=None, **wanted_dct): + source = dedent(''' + def x(%s): + pass + ''') % param_string + + module = parse(source, version=version) + funcdef = next(module.iter_funcdefs()) + dct = dict((p.name.value, p.default and p.default.get_code()) + for p in funcdef.get_params()) + assert dct == wanted_dct + assert module.get_code() == source + + +def test_split_params_with_separation_star(): + assert_params(u'x, y=1, *, z=3', x=None, y='1', z='3', version='3.5') + assert_params(u'*, x', x=None, version='3.5') + assert_params(u'*', version='3.5') + + +def test_split_params_with_stars(): + assert_params(u'x, *args', x=None, args=None) + assert_params(u'**kwargs', kwargs=None) + assert_params(u'*args, **kwargs', args=None, kwargs=None) + + +def test_kw_only_no_kw(works_ge_py3): + """ + Parsing this should be working. In CPython the parser also parses this and + in a later step the AST complains. + """ + module = works_ge_py3.parse('def test(arg, *):\n pass') + if module is not None: + func = module.children[0] + open_, p1, asterisk, close = func._get_param_nodes() + assert p1.get_code('arg,') + assert asterisk.value == '*' diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_parser.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_parser.py new file mode 100644 index 0000000..e36ad50 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_parser.py @@ -0,0 +1,210 @@ +# -*- coding: utf-8 -*- +from textwrap import dedent + +import pytest + +from parso._compatibility import u +from parso import parse +from parso.python import tree +from parso.utils import split_lines + + +def test_basic_parsing(each_version): + def compare(string): + """Generates the AST object and then regenerates the code.""" + assert parse(string, version=each_version).get_code() == string + + compare('\na #pass\n') + compare('wblabla* 1\t\n') + compare('def x(a, b:3): pass\n') + compare('assert foo\n') + + +def test_subscope_names(each_version): + def get_sub(source): + return parse(source, version=each_version).children[0] + + name = get_sub('class Foo: pass').name + assert name.start_pos == (1, len('class ')) + assert name.end_pos == (1, len('class Foo')) + assert name.value == 'Foo' + + name = get_sub('def foo(): pass').name + assert name.start_pos == (1, len('def ')) + assert name.end_pos == (1, len('def foo')) + assert name.value == 'foo' + + +def test_import_names(each_version): + def get_import(source): + return next(parse(source, version=each_version).iter_imports()) + + imp = get_import('import math\n') + names = imp.get_defined_names() + assert len(names) == 1 + assert names[0].value == 'math' + assert names[0].start_pos == (1, len('import ')) + assert names[0].end_pos == (1, len('import math')) + + assert imp.start_pos == (1, 0) + assert imp.end_pos == (1, len('import math')) + + +def test_end_pos(each_version): + s = dedent(''' + x = ['a', 'b', 'c'] + def func(): + y = None + ''') + parser = parse(s, version=each_version) + scope = next(parser.iter_funcdefs()) + assert scope.start_pos == (3, 0) + assert scope.end_pos == (5, 0) + + +def test_carriage_return_statements(each_version): + source = dedent(''' + foo = 'ns1!' + + # this is a namespace package + ''') + source = source.replace('\n', '\r\n') + stmt = parse(source, version=each_version).children[0] + assert '#' not in stmt.get_code() + + +def test_incomplete_list_comprehension(each_version): + """ Shouldn't raise an error, same bug as #418. """ + # With the old parser this actually returned a statement. With the new + # parser only valid statements generate one. + children = parse('(1 for def', version=each_version).children + assert [c.type for c in children] == \ + ['error_node', 'error_node', 'endmarker'] + + +def test_newline_positions(each_version): + endmarker = parse('a\n', version=each_version).children[-1] + assert endmarker.end_pos == (2, 0) + new_line = endmarker.get_previous_leaf() + assert new_line.start_pos == (1, 1) + assert new_line.end_pos == (2, 0) + + +def test_end_pos_error_correction(each_version): + """ + Source code without ending newline are given one, because the Python + grammar needs it. However, they are removed again. We still want the right + end_pos, even if something breaks in the parser (error correction). + """ + s = 'def x():\n .' + m = parse(s, version=each_version) + func = m.children[0] + assert func.type == 'funcdef' + assert func.end_pos == (2, 2) + assert m.end_pos == (2, 2) + + +def test_param_splitting(each_version): + """ + Jedi splits parameters into params, this is not what the grammar does, + but Jedi does this to simplify argument parsing. + """ + def check(src, result): + # Python 2 tuple params should be ignored for now. + m = parse(src, version=each_version) + if each_version.startswith('2'): + # We don't want b and c to be a part of the param enumeration. Just + # ignore them, because it's not what we want to support in the + # future. + func = next(m.iter_funcdefs()) + assert [param.name.value for param in func.get_params()] == result + else: + assert not list(m.iter_funcdefs()) + + check('def x(a, (b, c)):\n pass', ['a']) + check('def x((b, c)):\n pass', []) + + +def test_unicode_string(): + s = tree.String(None, u('bö'), (0, 0)) + assert repr(s) # Should not raise an Error! + + +def test_backslash_dos_style(each_version): + assert parse('\\\r\n', version=each_version) + + +def test_started_lambda_stmt(each_version): + m = parse(u'lambda a, b: a i', version=each_version) + assert m.children[0].type == 'error_node' + + +def test_python2_octal(each_version): + module = parse('0660', version=each_version) + first = module.children[0] + if each_version.startswith('2'): + assert first.type == 'number' + else: + assert first.type == 'error_node' + + +@pytest.mark.parametrize('code', ['foo "', 'foo """\n', 'foo """\nbar']) +def test_open_string_literal(each_version, code): + """ + Testing mostly if removing the last newline works. + """ + lines = split_lines(code, keepends=True) + end_pos = (len(lines), len(lines[-1])) + module = parse(code, version=each_version) + assert module.get_code() == code + assert module.end_pos == end_pos == module.children[1].end_pos + + +def test_too_many_params(): + with pytest.raises(TypeError): + parse('asdf', hello=3) + + +def test_dedent_at_end(each_version): + code = dedent(''' + for foobar in [1]: + foobar''') + module = parse(code, version=each_version) + assert module.get_code() == code + suite = module.children[0].children[-1] + foobar = suite.children[-1] + assert foobar.type == 'name' + + +def test_no_error_nodes(each_version): + def check(node): + assert node.type not in ('error_leaf', 'error_node') + + try: + children = node.children + except AttributeError: + pass + else: + for child in children: + check(child) + + check(parse("if foo:\n bar", version=each_version)) + + +def test_named_expression(works_ge_py38): + works_ge_py38.parse("(a := 1, a + 1)") + + +@pytest.mark.parametrize( + 'param_code', [ + 'a=1, /', + 'a, /', + 'a=1, /, b=3', + 'a, /, b', + 'a, /, b', + 'a, /, *, b', + 'a, /, **kwargs', + ] +) +def test_positional_only_arguments(works_ge_py38, param_code): + works_ge_py38.parse("def x(%s): pass" % param_code) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_parser_tree.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_parser_tree.py new file mode 100644 index 0000000..69cfe76 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_parser_tree.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 # This file contains Unicode characters. + +from textwrap import dedent + +import pytest + +from parso import parse +from parso.python import tree + + +class TestsFunctionAndLambdaParsing(object): + + FIXTURES = [ + ('def my_function(x, y, z) -> str:\n return x + y * z\n', { + 'name': 'my_function', + 'call_sig': 'my_function(x, y, z)', + 'params': ['x', 'y', 'z'], + 'annotation': "str", + }), + ('lambda x, y, z: x + y * z\n', { + 'name': '', + 'call_sig': '(x, y, z)', + 'params': ['x', 'y', 'z'], + }), + ] + + @pytest.fixture(params=FIXTURES) + def node(self, request): + parsed = parse(dedent(request.param[0]), version='3.5') + request.keywords['expected'] = request.param[1] + child = parsed.children[0] + if child.type == 'simple_stmt': + child = child.children[0] + return child + + @pytest.fixture() + def expected(self, request, node): + return request.keywords['expected'] + + def test_name(self, node, expected): + if node.type != 'lambdef': + assert isinstance(node.name, tree.Name) + assert node.name.value == expected['name'] + + def test_params(self, node, expected): + assert isinstance(node.get_params(), list) + assert all(isinstance(x, tree.Param) for x in node.get_params()) + assert [str(x.name.value) for x in node.get_params()] == [x for x in expected['params']] + + def test_is_generator(self, node, expected): + assert node.is_generator() is expected.get('is_generator', False) + + def test_yields(self, node, expected): + assert node.is_generator() == expected.get('yields', False) + + def test_annotation(self, node, expected): + expected_annotation = expected.get('annotation', None) + if expected_annotation is None: + assert node.annotation is None + else: + assert node.annotation.value == expected_annotation + + +def test_end_pos_line(each_version): + # jedi issue #150 + s = "x()\nx( )\nx( )\nx ( )\n" + + module = parse(s, version=each_version) + for i, simple_stmt in enumerate(module.children[:-1]): + expr_stmt = simple_stmt.children[0] + assert expr_stmt.end_pos == (i + 1, i + 3) + + +def test_default_param(each_version): + func = parse('def x(foo=42): pass', version=each_version).children[0] + param, = func.get_params() + assert param.default.value == '42' + assert param.annotation is None + assert not param.star_count + + +def test_annotation_param(each_py3_version): + func = parse('def x(foo: 3): pass', version=each_py3_version).children[0] + param, = func.get_params() + assert param.default is None + assert param.annotation.value == '3' + assert not param.star_count + + +def test_annotation_params(each_py3_version): + func = parse('def x(foo: 3, bar: 4): pass', version=each_py3_version).children[0] + param1, param2 = func.get_params() + + assert param1.default is None + assert param1.annotation.value == '3' + assert not param1.star_count + + assert param2.default is None + assert param2.annotation.value == '4' + assert not param2.star_count + + +def test_default_and_annotation_param(each_py3_version): + func = parse('def x(foo:3=42): pass', version=each_py3_version).children[0] + param, = func.get_params() + assert param.default.value == '42' + assert param.annotation.value == '3' + assert not param.star_count + + +def test_ellipsis_py2(each_py2_version): + module = parse('[0][...]', version=each_py2_version, error_recovery=False) + expr = module.children[0] + trailer = expr.children[-1] + subscript = trailer.children[1] + assert subscript.type == 'subscript' + assert [leaf.value for leaf in subscript.children] == ['.', '.', '.'] + + +def get_yield_exprs(code, version): + return list(parse(code, version=version).children[0].iter_yield_exprs()) + + +def get_return_stmts(code): + return list(parse(code).children[0].iter_return_stmts()) + + +def get_raise_stmts(code, child): + return list(parse(code).children[child].iter_raise_stmts()) + + +def test_yields(each_version): + y, = get_yield_exprs('def x(): yield', each_version) + assert y.value == 'yield' + assert y.type == 'keyword' + + y, = get_yield_exprs('def x(): (yield 1)', each_version) + assert y.type == 'yield_expr' + + y, = get_yield_exprs('def x(): [1, (yield)]', each_version) + assert y.type == 'keyword' + + +def test_yield_from(): + y, = get_yield_exprs('def x(): (yield from 1)', '3.3') + assert y.type == 'yield_expr' + + +def test_returns(): + r, = get_return_stmts('def x(): return') + assert r.value == 'return' + assert r.type == 'keyword' + + r, = get_return_stmts('def x(): return 1') + assert r.type == 'return_stmt' + + +def test_raises(): + code = """ +def single_function(): + raise Exception +def top_function(): + def inner_function(): + raise NotImplementedError() + inner_function() + raise Exception +def top_function_three(): + try: + raise NotImplementedError() + except NotImplementedError: + pass + raise Exception + """ + + r = get_raise_stmts(code, 0) # Lists in a simple Function + assert len(list(r)) == 1 + + r = get_raise_stmts(code, 1) # Doesn't Exceptions list in closures + assert len(list(r)) == 1 + + r = get_raise_stmts(code, 2) # Lists inside try-catch + assert len(list(r)) == 2 diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_pep8.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_pep8.py new file mode 100644 index 0000000..44c11f4 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_pep8.py @@ -0,0 +1,39 @@ +import parso + + +def issues(code): + grammar = parso.load_grammar() + module = parso.parse(code) + return grammar._get_normalizer_issues(module) + + +def test_eof_newline(): + def assert_issue(code): + found = issues(code) + assert len(found) == 1 + issue, = found + assert issue.code == 292 + + assert not issues('asdf = 1\n') + assert_issue('asdf = 1') + assert_issue('asdf = 1\n# foo') + assert_issue('# foobar') + assert_issue('') + assert_issue('foo = 1 # comment') + + +def test_eof_blankline(): + def assert_issue(code): + found = issues(code) + assert len(found) == 1 + issue, = found + assert issue.code == 391 + + assert_issue('asdf = 1\n\n') + assert_issue('# foobar\n\n') + assert_issue('\n\n') + +def test_shebang(): + assert not issues('#!\n') + assert not issues('#!/foo\n') + assert not issues('#! python\n') diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_pgen2.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_pgen2.py new file mode 100644 index 0000000..c83dff7 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_pgen2.py @@ -0,0 +1,303 @@ +"""Test suite for 2to3's parser and grammar files. + +This is the place to add tests for changes to 2to3's grammar, such as those +merging the grammars for Python 2 and 3. In addition to specific tests for +parts of the grammar we've changed, we also make sure we can parse the +test_grammar.py files from both Python 2 and Python 3. +""" + +from textwrap import dedent + +import pytest + +from parso import load_grammar +from parso import ParserSyntaxError +from parso.pgen2 import generate_grammar +from parso.python import tokenize + + +def _parse(code, version=None): + code = dedent(code) + "\n\n" + grammar = load_grammar(version=version) + return grammar.parse(code, error_recovery=False) + + +def _invalid_syntax(code, version=None, **kwargs): + with pytest.raises(ParserSyntaxError): + module = _parse(code, version=version, **kwargs) + # For debugging + print(module.children) + + +def test_formfeed(each_py2_version): + s = u"""print 1\n\x0Cprint 2\n""" + t = _parse(s, each_py2_version) + assert t.children[0].children[0].type == 'print_stmt' + assert t.children[1].children[0].type == 'print_stmt' + s = u"""1\n\x0C\x0C2\n""" + t = _parse(s, each_py2_version) + + +def test_matrix_multiplication_operator(works_ge_py35): + works_ge_py35.parse("a @ b") + works_ge_py35.parse("a @= b") + + +def test_yield_from(works_ge_py3, each_version): + works_ge_py3.parse("yield from x") + works_ge_py3.parse("(yield from x) + y") + _invalid_syntax("yield from", each_version) + + +def test_await_expr(works_ge_py35): + works_ge_py35.parse("""async def foo(): + await x + """) + + works_ge_py35.parse("""async def foo(): + + def foo(): pass + + def foo(): pass + + await x + """) + + works_ge_py35.parse("""async def foo(): return await a""") + + works_ge_py35.parse("""def foo(): + def foo(): pass + async def foo(): await x + """) + + +@pytest.mark.skipif('sys.version_info[:2] < (3, 5)') +@pytest.mark.xfail(reason="acting like python 3.7") +def test_async_var(): + _parse("""async = 1""", "3.5") + _parse("""await = 1""", "3.5") + _parse("""def async(): pass""", "3.5") + + +def test_async_for(works_ge_py35): + works_ge_py35.parse("async def foo():\n async for a in b: pass") + + +def test_async_with(works_ge_py35): + works_ge_py35.parse("async def foo():\n async with a: pass") + + @pytest.mark.skipif('sys.version_info[:2] < (3, 5)') + @pytest.mark.xfail(reason="acting like python 3.7") + def test_async_with_invalid(): + _invalid_syntax("""def foo(): + async with a: pass""", version="3.5") + + +def test_raise_3x_style_1(each_version): + _parse("raise", each_version) + + +def test_raise_2x_style_2(works_in_py2): + works_in_py2.parse("raise E, V") + +def test_raise_2x_style_3(works_in_py2): + works_in_py2.parse("raise E, V, T") + +def test_raise_2x_style_invalid_1(each_version): + _invalid_syntax("raise E, V, T, Z", version=each_version) + +def test_raise_3x_style(works_ge_py3): + works_ge_py3.parse("raise E1 from E2") + +def test_raise_3x_style_invalid_1(each_version): + _invalid_syntax("raise E, V from E1", each_version) + +def test_raise_3x_style_invalid_2(each_version): + _invalid_syntax("raise E from E1, E2", each_version) + +def test_raise_3x_style_invalid_3(each_version): + _invalid_syntax("raise from E1, E2", each_version) + +def test_raise_3x_style_invalid_4(each_version): + _invalid_syntax("raise E from", each_version) + + +# Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testFuncdef +def test_annotation_1(works_ge_py3): + works_ge_py3.parse("""def f(x) -> list: pass""") + +def test_annotation_2(works_ge_py3): + works_ge_py3.parse("""def f(x:int): pass""") + +def test_annotation_3(works_ge_py3): + works_ge_py3.parse("""def f(*x:str): pass""") + +def test_annotation_4(works_ge_py3): + works_ge_py3.parse("""def f(**x:float): pass""") + +def test_annotation_5(works_ge_py3): + works_ge_py3.parse("""def f(x, y:1+2): pass""") + +def test_annotation_6(each_py3_version): + _invalid_syntax("""def f(a, (b:1, c:2, d)): pass""", each_py3_version) + +def test_annotation_7(each_py3_version): + _invalid_syntax("""def f(a, (b:1, c:2, d), e:3=4, f=5, *g:6): pass""", each_py3_version) + +def test_annotation_8(each_py3_version): + s = """def f(a, (b:1, c:2, d), e:3=4, f=5, + *g:6, h:7, i=8, j:9=10, **k:11) -> 12: pass""" + _invalid_syntax(s, each_py3_version) + + +def test_except_new(each_version): + s = dedent(""" + try: + x + except E as N: + y""") + _parse(s, each_version) + +def test_except_old(works_in_py2): + s = dedent(""" + try: + x + except E, N: + y""") + works_in_py2.parse(s) + + +# Adapted from Python 3's Lib/test/test_grammar.py:GrammarTests.testAtoms +def test_set_literal_1(works_ge_py27): + works_ge_py27.parse("""x = {'one'}""") + +def test_set_literal_2(works_ge_py27): + works_ge_py27.parse("""x = {'one', 1,}""") + +def test_set_literal_3(works_ge_py27): + works_ge_py27.parse("""x = {'one', 'two', 'three'}""") + +def test_set_literal_4(works_ge_py27): + works_ge_py27.parse("""x = {2, 3, 4,}""") + + +def test_new_octal_notation(each_version): + _parse("""0o7777777777777""", each_version) + _invalid_syntax("""0o7324528887""", each_version) + + +def test_old_octal_notation(works_in_py2): + works_in_py2.parse("07") + + +def test_long_notation(works_in_py2): + works_in_py2.parse("0xFl") + works_in_py2.parse("0xFL") + works_in_py2.parse("0b1l") + works_in_py2.parse("0B1L") + works_in_py2.parse("0o7l") + works_in_py2.parse("0O7L") + works_in_py2.parse("0l") + works_in_py2.parse("0L") + works_in_py2.parse("10l") + works_in_py2.parse("10L") + + +def test_new_binary_notation(each_version): + _parse("""0b101010""", each_version) + _invalid_syntax("""0b0101021""", each_version) + + +def test_class_new_syntax(works_ge_py3): + works_ge_py3.parse("class B(t=7): pass") + works_ge_py3.parse("class B(t, *args): pass") + works_ge_py3.parse("class B(t, **kwargs): pass") + works_ge_py3.parse("class B(t, *args, **kwargs): pass") + works_ge_py3.parse("class B(t, y=9, *args, **kwargs): pass") + + +def test_parser_idempotency_extended_unpacking(works_ge_py3): + """A cut-down version of pytree_idempotency.py.""" + works_ge_py3.parse("a, *b, c = x\n") + works_ge_py3.parse("[*a, b] = x\n") + works_ge_py3.parse("(z, *y, w) = m\n") + works_ge_py3.parse("for *z, m in d: pass\n") + + +def test_multiline_bytes_literals(each_version): + """ + It's not possible to get the same result when using \xaa in Python 2/3, + because it's treated differently. + """ + s = u""" + md5test(b"\xaa" * 80, + (b"Test Using Larger Than Block-Size Key " + b"and Larger Than One Block-Size Data"), + "6f630fad67cda0ee1fb1f562db3aa53e") + """ + _parse(s, each_version) + + +def test_multiline_bytes_tripquote_literals(each_version): + s = ''' + b""" + + + """ + ''' + _parse(s, each_version) + + +def test_ellipsis(works_ge_py3, each_version): + works_ge_py3.parse("...") + _parse("[0][...]", version=each_version) + + +def test_dict_unpacking(works_ge_py35): + works_ge_py35.parse("{**dict(a=3), foo:2}") + + +def test_multiline_str_literals(each_version): + s = u""" + md5test("\xaa" * 80, + ("Test Using Larger Than Block-Size Key " + "and Larger Than One Block-Size Data"), + "6f630fad67cda0ee1fb1f562db3aa53e") + """ + _parse(s, each_version) + + +def test_py2_backticks(works_in_py2): + works_in_py2.parse("`1`") + + +def test_py2_string_prefixes(works_in_py2): + works_in_py2.parse("ur'1'") + works_in_py2.parse("Ur'1'") + works_in_py2.parse("UR'1'") + _invalid_syntax("ru'1'", works_in_py2.version) + + +def py_br(each_version): + _parse('br""', each_version) + + +def test_py3_rb(works_ge_py3): + works_ge_py3.parse("rb'1'") + works_ge_py3.parse("RB'1'") + + +def test_left_recursion(): + with pytest.raises(ValueError, match='left recursion'): + generate_grammar('foo: foo NAME\n', tokenize.PythonTokenTypes) + + +def test_ambiguities(): + with pytest.raises(ValueError, match='ambiguous'): + generate_grammar('foo: bar | baz\nbar: NAME\nbaz: NAME\n', tokenize.PythonTokenTypes) + + with pytest.raises(ValueError, match='ambiguous'): + generate_grammar('''foo: bar | baz\nbar: 'x'\nbaz: "x"\n''', tokenize.PythonTokenTypes) + + with pytest.raises(ValueError, match='ambiguous'): + generate_grammar('''foo: bar | 'x'\nbar: 'x'\n''', tokenize.PythonTokenTypes) diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_prefix.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_prefix.py new file mode 100644 index 0000000..0c79958 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_prefix.py @@ -0,0 +1,79 @@ +try: + from itertools import zip_longest +except ImportError: + # Python 2 + from itertools import izip_longest as zip_longest + +from codecs import BOM_UTF8 + +import pytest + +import parso + +unicode_bom = BOM_UTF8.decode('utf-8') + + +@pytest.mark.parametrize(('string', 'tokens'), [ + ('', ['']), + ('#', ['#', '']), + (' # ', ['# ', '']), + (' # \n', ['# ', '\n', '']), + (' # \f\n', ['# ', '\f', '\n', '']), + (' \n', ['\n', '']), + (' \n ', ['\n', ' ']), + (' \f ', ['\f', ' ']), + (' \f ', ['\f', ' ']), + (' \r\n', ['\r\n', '']), + ('\\\n', ['\\\n', '']), + ('\\\r\n', ['\\\r\n', '']), + ('\t\t\n\t', ['\n', '\t']), +]) +def test_simple_prefix_splitting(string, tokens): + tree = parso.parse(string) + leaf = tree.children[0] + assert leaf.type == 'endmarker' + + parsed_tokens = list(leaf._split_prefix()) + start_pos = (1, 0) + for pt, expected in zip_longest(parsed_tokens, tokens): + assert pt.value == expected + + # Calculate the estimated end_pos + if expected.endswith('\n'): + end_pos = start_pos[0] + 1, 0 + else: + end_pos = start_pos[0], start_pos[1] + len(expected) + len(pt.spacing) + + #assert start_pos == pt.start_pos + assert end_pos == pt.end_pos + start_pos = end_pos + + +@pytest.mark.parametrize(('string', 'types'), [ + ('# ', ['comment', 'spacing']), + ('\r\n', ['newline', 'spacing']), + ('\f', ['formfeed', 'spacing']), + ('\\\n', ['backslash', 'spacing']), + (' \t', ['spacing']), + (' \t ', ['spacing']), + (unicode_bom + ' # ', ['bom', 'comment', 'spacing']), +]) +def test_prefix_splitting_types(string, types): + tree = parso.parse(string) + leaf = tree.children[0] + assert leaf.type == 'endmarker' + parsed_tokens = list(leaf._split_prefix()) + assert [t.type for t in parsed_tokens] == types + + +def test_utf8_bom(): + tree = parso.parse(unicode_bom + 'a = 1') + expr_stmt = tree.children[0] + assert expr_stmt.start_pos == (1, 0) + + tree = parso.parse(unicode_bom + '\n') + endmarker = tree.children[0] + parts = list(endmarker._split_prefix()) + assert [p.type for p in parts] == ['bom', 'newline', 'spacing'] + assert [p.start_pos for p in parts] == [(1, 0), (1, 0), (2, 0)] + assert [p.end_pos for p in parts] == [(1, 0), (2, 0), (2, 0)] diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_python_errors.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_python_errors.py new file mode 100644 index 0000000..71a67eb --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_python_errors.py @@ -0,0 +1,309 @@ +""" +Testing if parso finds syntax errors and indentation errors. +""" +import sys +import warnings + +import pytest + +import parso +from parso._compatibility import is_pypy +from .failing_examples import FAILING_EXAMPLES, indent, build_nested + + +if is_pypy: + # The errors in PyPy might be different. Just skip the module for now. + pytestmark = pytest.mark.skip() + + +def _get_error_list(code, version=None): + grammar = parso.load_grammar(version=version) + tree = grammar.parse(code) + return list(grammar.iter_errors(tree)) + + +def assert_comparison(code, error_code, positions): + errors = [(error.start_pos, error.code) for error in _get_error_list(code)] + assert [(pos, error_code) for pos in positions] == errors + + +@pytest.mark.parametrize('code', FAILING_EXAMPLES) +def test_python_exception_matches(code): + wanted, line_nr = _get_actual_exception(code) + + errors = _get_error_list(code) + actual = None + if errors: + error, = errors + actual = error.message + assert actual in wanted + # Somehow in Python3.3 the SyntaxError().lineno is sometimes None + assert line_nr is None or line_nr == error.start_pos[0] + + +def test_non_async_in_async(): + """ + This example doesn't work with FAILING_EXAMPLES, because the line numbers + are not always the same / incorrect in Python 3.8. + """ + if sys.version_info[:2] < (3, 5): + pytest.skip() + + # Raises multiple errors in previous versions. + code = 'async def foo():\n def nofoo():[x async for x in []]' + wanted, line_nr = _get_actual_exception(code) + + errors = _get_error_list(code) + if errors: + error, = errors + actual = error.message + assert actual in wanted + if sys.version_info[:2] < (3, 8): + assert line_nr == error.start_pos[0] + else: + assert line_nr == 0 # For whatever reason this is zero in Python 3.8+ + + +@pytest.mark.parametrize( + ('code', 'positions'), [ + ('1 +', [(1, 3)]), + ('1 +\n', [(1, 3)]), + ('1 +\n2 +', [(1, 3), (2, 3)]), + ('x + 2', []), + ('[\n', [(2, 0)]), + ('[\ndef x(): pass', [(2, 0)]), + ('[\nif 1: pass', [(2, 0)]), + ('1+?', [(1, 2)]), + ('?', [(1, 0)]), + ('??', [(1, 0)]), + ('? ?', [(1, 0)]), + ('?\n?', [(1, 0), (2, 0)]), + ('? * ?', [(1, 0)]), + ('1 + * * 2', [(1, 4)]), + ('?\n1\n?', [(1, 0), (3, 0)]), + ] +) +def test_syntax_errors(code, positions): + assert_comparison(code, 901, positions) + + +@pytest.mark.parametrize( + ('code', 'positions'), [ + (' 1', [(1, 0)]), + ('def x():\n 1\n 2', [(3, 0)]), + ('def x():\n 1\n 2', [(3, 0)]), + ('def x():\n1', [(2, 0)]), + ] +) +def test_indentation_errors(code, positions): + assert_comparison(code, 903, positions) + + +def _get_actual_exception(code): + with warnings.catch_warnings(): + # We don't care about warnings where locals/globals misbehave here. + # It's as simple as either an error or not. + warnings.filterwarnings('ignore', category=SyntaxWarning) + try: + compile(code, '', 'exec') + except (SyntaxError, IndentationError) as e: + wanted = e.__class__.__name__ + ': ' + e.msg + line_nr = e.lineno + except ValueError as e: + # The ValueError comes from byte literals in Python 2 like '\x' + # that are oddly enough not SyntaxErrors. + wanted = 'SyntaxError: (value error) ' + str(e) + line_nr = None + else: + assert False, "The piece of code should raise an exception." + + # SyntaxError + # Python 2.6 has a bit different error messages here, so skip it. + if sys.version_info[:2] == (2, 6) and wanted == 'SyntaxError: unexpected EOF while parsing': + wanted = 'SyntaxError: invalid syntax' + + if wanted == 'SyntaxError: non-keyword arg after keyword arg': + # The python 3.5+ way, a bit nicer. + wanted = 'SyntaxError: positional argument follows keyword argument' + elif wanted == 'SyntaxError: assignment to keyword': + return [wanted, "SyntaxError: can't assign to keyword", + 'SyntaxError: cannot assign to __debug__'], line_nr + elif wanted == 'SyntaxError: assignment to None': + # Python 2.6 does has a slightly different error. + wanted = 'SyntaxError: cannot assign to None' + elif wanted == 'SyntaxError: can not assign to __debug__': + # Python 2.6 does has a slightly different error. + wanted = 'SyntaxError: cannot assign to __debug__' + elif wanted == 'SyntaxError: can use starred expression only as assignment target': + # Python 3.4/3.4 have a bit of a different warning than 3.5/3.6 in + # certain places. But in others this error makes sense. + return [wanted, "SyntaxError: can't use starred expression here"], line_nr + elif wanted == 'SyntaxError: f-string: unterminated string': + wanted = 'SyntaxError: EOL while scanning string literal' + elif wanted == 'SyntaxError: f-string expression part cannot include a backslash': + return [ + wanted, + "SyntaxError: EOL while scanning string literal", + "SyntaxError: unexpected character after line continuation character", + ], line_nr + elif wanted == "SyntaxError: f-string: expecting '}'": + wanted = 'SyntaxError: EOL while scanning string literal' + elif wanted == 'SyntaxError: f-string: empty expression not allowed': + wanted = 'SyntaxError: invalid syntax' + elif wanted == "SyntaxError: f-string expression part cannot include '#'": + wanted = 'SyntaxError: invalid syntax' + elif wanted == "SyntaxError: f-string: single '}' is not allowed": + wanted = 'SyntaxError: invalid syntax' + return [wanted], line_nr + + +def test_default_except_error_postition(): + # For this error the position seemed to be one line off, but that doesn't + # really matter. + code = 'try: pass\nexcept: pass\nexcept X: pass' + wanted, line_nr = _get_actual_exception(code) + error, = _get_error_list(code) + assert error.message in wanted + assert line_nr != error.start_pos[0] + # I think this is the better position. + assert error.start_pos[0] == 2 + + +def test_statically_nested_blocks(): + def build(code, depth): + if depth == 0: + return code + + new_code = 'if 1:\n' + indent(code) + return build(new_code, depth - 1) + + def get_error(depth, add_func=False): + code = build('foo', depth) + if add_func: + code = 'def bar():\n' + indent(code) + errors = _get_error_list(code) + if errors: + assert errors[0].message == 'SyntaxError: too many statically nested blocks' + return errors[0] + return None + + assert get_error(19) is None + assert get_error(19, add_func=True) is None + + assert get_error(20) + assert get_error(20, add_func=True) + + +def test_future_import_first(): + def is_issue(code, *args): + code = code % args + return bool(_get_error_list(code)) + + i1 = 'from __future__ import division' + i2 = 'from __future__ import absolute_import' + assert not is_issue(i1) + assert not is_issue(i1 + ';' + i2) + assert not is_issue(i1 + '\n' + i2) + assert not is_issue('"";' + i1) + assert not is_issue('"";' + i1) + assert not is_issue('""\n' + i1) + assert not is_issue('""\n%s\n%s', i1, i2) + assert not is_issue('""\n%s;%s', i1, i2) + assert not is_issue('"";%s;%s ', i1, i2) + assert not is_issue('"";%s\n%s ', i1, i2) + assert is_issue('1;' + i1) + assert is_issue('1\n' + i1) + assert is_issue('"";1\n' + i1) + assert is_issue('""\n%s\nfrom x import a\n%s', i1, i2) + assert is_issue('%s\n""\n%s', i1, i2) + + +def test_named_argument_issues(works_not_in_py): + message = works_not_in_py.get_error_message('def foo(*, **dict): pass') + message = works_not_in_py.get_error_message('def foo(*): pass') + if works_not_in_py.version.startswith('2'): + assert message == 'SyntaxError: invalid syntax' + else: + assert message == 'SyntaxError: named arguments must follow bare *' + + works_not_in_py.assert_no_error_in_passing('def foo(*, name): pass') + works_not_in_py.assert_no_error_in_passing('def foo(bar, *, name=1): pass') + works_not_in_py.assert_no_error_in_passing('def foo(bar, *, name=1, **dct): pass') + + +def test_escape_decode_literals(each_version): + """ + We are using internal functions to assure that unicode/bytes escaping is + without syntax errors. Here we make a bit of quality assurance that this + works through versions, because the internal function might change over + time. + """ + def get_msg(end, to=1): + base = "SyntaxError: (unicode error) 'unicodeescape' " \ + "codec can't decode bytes in position 0-%s: " % to + return base + end + + def get_msgs(escape): + return (get_msg('end of string in escape sequence'), + get_msg(r"truncated %s escape" % escape)) + + error, = _get_error_list(r'u"\x"', version=each_version) + assert error.message in get_msgs(r'\xXX') + + error, = _get_error_list(r'u"\u"', version=each_version) + assert error.message in get_msgs(r'\uXXXX') + + error, = _get_error_list(r'u"\U"', version=each_version) + assert error.message in get_msgs(r'\UXXXXXXXX') + + error, = _get_error_list(r'u"\N{}"', version=each_version) + assert error.message == get_msg(r'malformed \N character escape', to=2) + + error, = _get_error_list(r'u"\N{foo}"', version=each_version) + assert error.message == get_msg(r'unknown Unicode character name', to=6) + + # Finally bytes. + error, = _get_error_list(r'b"\x"', version=each_version) + wanted = r'SyntaxError: (value error) invalid \x escape' + if sys.version_info >= (3, 0): + # The positioning information is only available in Python 3. + wanted += ' at position 0' + assert error.message == wanted + + +def test_too_many_levels_of_indentation(): + assert not _get_error_list(build_nested('pass', 99)) + assert _get_error_list(build_nested('pass', 100)) + base = 'def x():\n if x:\n' + assert not _get_error_list(build_nested('pass', 49, base=base)) + assert _get_error_list(build_nested('pass', 50, base=base)) + + +@pytest.mark.parametrize( + 'code', [ + "f'{*args,}'", + r'f"\""', + r'f"\\\""', + r'fr"\""', + r'fr"\\\""', + r"print(f'Some {x:.2f} and some {y}')", + ] +) +def test_valid_fstrings(code): + assert not _get_error_list(code, version='3.6') + + +@pytest.mark.parametrize( + ('code', 'message'), [ + ("f'{1+}'", ('invalid syntax')), + (r'f"\"', ('invalid syntax')), + (r'fr"\"', ('invalid syntax')), + ] +) +def test_invalid_fstrings(code, message): + """ + Some fstring errors are handled differntly in 3.6 and other versions. + Therefore check specifically for these errors here. + """ + error, = _get_error_list(code, version='3.6') + assert message in error.message diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_tokenize.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_tokenize.py new file mode 100644 index 0000000..bf703dc --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_tokenize.py @@ -0,0 +1,392 @@ +# -*- coding: utf-8 # This file contains Unicode characters. + +import sys +from textwrap import dedent + +import pytest + +from parso._compatibility import py_version +from parso.utils import split_lines, parse_version_string +from parso.python.token import PythonTokenTypes +from parso.python import tokenize +from parso import parse +from parso.python.tokenize import PythonToken + + +# To make it easier to access some of the token types, just put them here. +NAME = PythonTokenTypes.NAME +NEWLINE = PythonTokenTypes.NEWLINE +STRING = PythonTokenTypes.STRING +NUMBER = PythonTokenTypes.NUMBER +INDENT = PythonTokenTypes.INDENT +DEDENT = PythonTokenTypes.DEDENT +ERRORTOKEN = PythonTokenTypes.ERRORTOKEN +OP = PythonTokenTypes.OP +ENDMARKER = PythonTokenTypes.ENDMARKER +ERROR_DEDENT = PythonTokenTypes.ERROR_DEDENT +FSTRING_START = PythonTokenTypes.FSTRING_START +FSTRING_STRING = PythonTokenTypes.FSTRING_STRING +FSTRING_END = PythonTokenTypes.FSTRING_END + + +def _get_token_list(string, version=None): + # Load the current version. + version_info = parse_version_string(version) + return list(tokenize.tokenize(string, version_info)) + + +def test_end_pos_one_line(): + parsed = parse(dedent(''' + def testit(): + a = "huhu" + ''')) + simple_stmt = next(parsed.iter_funcdefs()).get_suite().children[-1] + string = simple_stmt.children[0].get_rhs() + assert string.end_pos == (3, 14) + + +def test_end_pos_multi_line(): + parsed = parse(dedent(''' + def testit(): + a = """huhu + asdfasdf""" + "h" + ''')) + expr_stmt = next(parsed.iter_funcdefs()).get_suite().children[1].children[0] + string_leaf = expr_stmt.get_rhs().children[0] + assert string_leaf.end_pos == (4, 11) + + +def test_simple_no_whitespace(): + # Test a simple one line string, no preceding whitespace + simple_docstring = '"""simple one line docstring"""' + token_list = _get_token_list(simple_docstring) + _, value, _, prefix = token_list[0] + assert prefix == '' + assert value == '"""simple one line docstring"""' + + +def test_simple_with_whitespace(): + # Test a simple one line string with preceding whitespace and newline + simple_docstring = ' """simple one line docstring""" \r\n' + token_list = _get_token_list(simple_docstring) + assert token_list[0][0] == INDENT + typ, value, start_pos, prefix = token_list[1] + assert prefix == ' ' + assert value == '"""simple one line docstring"""' + assert typ == STRING + typ, value, start_pos, prefix = token_list[2] + assert prefix == ' ' + assert typ == NEWLINE + + +def test_function_whitespace(): + # Test function definition whitespace identification + fundef = dedent(''' + def test_whitespace(*args, **kwargs): + x = 1 + if x > 0: + print(True) + ''') + token_list = _get_token_list(fundef) + for _, value, _, prefix in token_list: + if value == 'test_whitespace': + assert prefix == ' ' + if value == '(': + assert prefix == '' + if value == '*': + assert prefix == '' + if value == '**': + assert prefix == ' ' + if value == 'print': + assert prefix == ' ' + if value == 'if': + assert prefix == ' ' + + +def test_tokenize_multiline_I(): + # Make sure multiline string having newlines have the end marker on the + # next line + fundef = '''""""\n''' + token_list = _get_token_list(fundef) + assert token_list == [PythonToken(ERRORTOKEN, '""""\n', (1, 0), ''), + PythonToken(ENDMARKER , '', (2, 0), '')] + + +def test_tokenize_multiline_II(): + # Make sure multiline string having no newlines have the end marker on + # same line + fundef = '''""""''' + token_list = _get_token_list(fundef) + assert token_list == [PythonToken(ERRORTOKEN, '""""', (1, 0), ''), + PythonToken(ENDMARKER, '', (1, 4), '')] + + +def test_tokenize_multiline_III(): + # Make sure multiline string having newlines have the end marker on the + # next line even if several newline + fundef = '''""""\n\n''' + token_list = _get_token_list(fundef) + assert token_list == [PythonToken(ERRORTOKEN, '""""\n\n', (1, 0), ''), + PythonToken(ENDMARKER, '', (3, 0), '')] + + +def test_identifier_contains_unicode(): + fundef = dedent(''' + def 我あφ(): + pass + ''') + token_list = _get_token_list(fundef) + unicode_token = token_list[1] + if py_version >= 30: + assert unicode_token[0] == NAME + else: + # Unicode tokens in Python 2 seem to be identified as operators. + # They will be ignored in the parser, that's ok. + assert unicode_token[0] == ERRORTOKEN + + +def test_quoted_strings(): + string_tokens = [ + 'u"test"', + 'u"""test"""', + 'U"""test"""', + "u'''test'''", + "U'''test'''", + ] + + for s in string_tokens: + module = parse('''a = %s\n''' % s) + simple_stmt = module.children[0] + expr_stmt = simple_stmt.children[0] + assert len(expr_stmt.children) == 3 + string_tok = expr_stmt.children[2] + assert string_tok.type == 'string' + assert string_tok.value == s + + +def test_ur_literals(): + """ + Decided to parse `u''` literals regardless of Python version. This makes + probably sense: + + - Python 3+ doesn't support it, but it doesn't hurt + not be. While this is incorrect, it's just incorrect for one "old" and in + the future not very important version. + - All the other Python versions work very well with it. + """ + def check(literal, is_literal=True): + token_list = _get_token_list(literal) + typ, result_literal, _, _ = token_list[0] + if is_literal: + if typ != FSTRING_START: + assert typ == STRING + assert result_literal == literal + else: + assert typ == NAME + + check('u""') + check('ur""', is_literal=not py_version >= 30) + check('Ur""', is_literal=not py_version >= 30) + check('UR""', is_literal=not py_version >= 30) + check('bR""') + # Starting with Python 3.3 this ordering is also possible. + if py_version >= 33: + check('Rb""') + + # Starting with Python 3.6 format strings where introduced. + check('fr""', is_literal=py_version >= 36) + check('rF""', is_literal=py_version >= 36) + check('f""', is_literal=py_version >= 36) + check('F""', is_literal=py_version >= 36) + + +def test_error_literal(): + error_token, newline, endmarker = _get_token_list('"\n') + assert error_token.type == ERRORTOKEN + assert error_token.string == '"' + assert newline.type == NEWLINE + assert endmarker.type == ENDMARKER + assert endmarker.prefix == '' + + bracket, error_token, endmarker = _get_token_list('( """') + assert error_token.type == ERRORTOKEN + assert error_token.prefix == ' ' + assert error_token.string == '"""' + assert endmarker.type == ENDMARKER + assert endmarker.prefix == '' + + +def test_endmarker_end_pos(): + def check(code): + tokens = _get_token_list(code) + lines = split_lines(code) + assert tokens[-1].end_pos == (len(lines), len(lines[-1])) + + check('#c') + check('#c\n') + check('a\n') + check('a') + check(r'a\\n') + check('a\\') + + +xfail_py2 = dict(marks=[pytest.mark.xfail(sys.version_info[0] == 2, reason='Python 2')]) + + +@pytest.mark.parametrize( + ('code', 'types'), [ + # Indentation + (' foo', [INDENT, NAME, DEDENT]), + (' foo\n bar', [INDENT, NAME, NEWLINE, ERROR_DEDENT, NAME, DEDENT]), + (' foo\n bar \n baz', [INDENT, NAME, NEWLINE, ERROR_DEDENT, NAME, + NEWLINE, ERROR_DEDENT, NAME, DEDENT]), + (' foo\nbar', [INDENT, NAME, NEWLINE, DEDENT, NAME]), + + # Name stuff + ('1foo1', [NUMBER, NAME]), + pytest.param( + u'மெல்லினம்', [NAME], + **xfail_py2), + pytest.param(u'²', [ERRORTOKEN], **xfail_py2), + pytest.param(u'ä²ö', [NAME, ERRORTOKEN, NAME], **xfail_py2), + pytest.param(u'ää²¹öö', [NAME, ERRORTOKEN, NAME], **xfail_py2), + ] +) +def test_token_types(code, types): + actual_types = [t.type for t in _get_token_list(code)] + assert actual_types == types + [ENDMARKER] + + +def test_error_string(): + t1, newline, endmarker = _get_token_list(' "\n') + assert t1.type == ERRORTOKEN + assert t1.prefix == ' ' + assert t1.string == '"' + assert newline.type == NEWLINE + assert endmarker.prefix == '' + assert endmarker.string == '' + + +def test_indent_error_recovery(): + code = dedent("""\ + str( + from x import a + def + """) + lst = _get_token_list(code) + expected = [ + # `str(` + INDENT, NAME, OP, + # `from parso` + NAME, NAME, + # `import a` on same line as the previous from parso + NAME, NAME, NEWLINE, + # Dedent happens, because there's an import now and the import + # statement "breaks" out of the opening paren on the first line. + DEDENT, + # `b` + NAME, NEWLINE, ENDMARKER] + assert [t.type for t in lst] == expected + + +def test_error_token_after_dedent(): + code = dedent("""\ + class C: + pass + $foo + """) + lst = _get_token_list(code) + expected = [ + NAME, NAME, OP, NEWLINE, INDENT, NAME, NEWLINE, DEDENT, + # $foo\n + ERRORTOKEN, NAME, NEWLINE, ENDMARKER + ] + assert [t.type for t in lst] == expected + + +def test_brackets_no_indentation(): + """ + There used to be an issue that the parentheses counting would go below + zero. This should not happen. + """ + code = dedent("""\ + } + { + } + """) + lst = _get_token_list(code) + assert [t.type for t in lst] == [OP, NEWLINE, OP, OP, NEWLINE, ENDMARKER] + + +def test_form_feed(): + error_token, endmarker = _get_token_list(dedent('''\ + \f"""''')) + assert error_token.prefix == '\f' + assert error_token.string == '"""' + assert endmarker.prefix == '' + + +def test_carriage_return(): + lst = _get_token_list(' =\\\rclass') + assert [t.type for t in lst] == [INDENT, OP, DEDENT, NAME, ENDMARKER] + + +def test_backslash(): + code = '\\\n# 1 \n' + endmarker, = _get_token_list(code) + assert endmarker.prefix == code + + +@pytest.mark.parametrize( + ('code', 'types'), [ + ('f"', [FSTRING_START]), + ('f""', [FSTRING_START, FSTRING_END]), + ('f" {}"', [FSTRING_START, FSTRING_STRING, OP, OP, FSTRING_END]), + ('f" "{}', [FSTRING_START, FSTRING_STRING, FSTRING_END, OP, OP]), + (r'f"\""', [FSTRING_START, FSTRING_STRING, FSTRING_END]), + (r'f"\""', [FSTRING_START, FSTRING_STRING, FSTRING_END]), + + # format spec + (r'f"Some {x:.2f}{y}"', [FSTRING_START, FSTRING_STRING, OP, NAME, OP, + FSTRING_STRING, OP, OP, NAME, OP, FSTRING_END]), + + # multiline f-string + ('f"""abc\ndef"""', [FSTRING_START, FSTRING_STRING, FSTRING_END]), + ('f"""abc{\n123}def"""', [ + FSTRING_START, FSTRING_STRING, OP, NUMBER, OP, FSTRING_STRING, + FSTRING_END + ]), + + # a line continuation inside of an fstring_string + ('f"abc\\\ndef"', [ + FSTRING_START, FSTRING_STRING, FSTRING_END + ]), + ('f"\\\n{123}\\\n"', [ + FSTRING_START, FSTRING_STRING, OP, NUMBER, OP, FSTRING_STRING, + FSTRING_END + ]), + + # a line continuation inside of an fstring_expr + ('f"{\\\n123}"', [FSTRING_START, OP, NUMBER, OP, FSTRING_END]), + + # a line continuation inside of an format spec + ('f"{123:.2\\\nf}"', [ + FSTRING_START, OP, NUMBER, OP, FSTRING_STRING, OP, FSTRING_END + ]), + + # a newline without a line continuation inside a single-line string is + # wrong, and will generate an ERRORTOKEN + ('f"abc\ndef"', [ + FSTRING_START, FSTRING_STRING, NEWLINE, NAME, ERRORTOKEN + ]), + + # a more complex example + (r'print(f"Some {x:.2f}a{y}")', [ + NAME, OP, FSTRING_START, FSTRING_STRING, OP, NAME, OP, + FSTRING_STRING, OP, FSTRING_STRING, OP, NAME, OP, FSTRING_END, OP + ]), + ] +) +def test_fstring(code, types, version_ge_py36): + actual_types = [t.type for t in _get_token_list(code, version_ge_py36)] + assert types + [ENDMARKER] == actual_types diff --git a/vim/bundle/jedi-vim/pythonx/parso/test/test_utils.py b/vim/bundle/jedi-vim/pythonx/parso/test/test_utils.py new file mode 100644 index 0000000..3078151 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/test/test_utils.py @@ -0,0 +1,65 @@ +from codecs import BOM_UTF8 + +from parso.utils import split_lines, python_bytes_to_unicode +import parso + +import pytest + + +@pytest.mark.parametrize( + ('string', 'expected_result', 'keepends'), [ + ('asd\r\n', ['asd', ''], False), + ('asd\r\n', ['asd\r\n', ''], True), + ('asd\r', ['asd', ''], False), + ('asd\r', ['asd\r', ''], True), + ('asd\n', ['asd', ''], False), + ('asd\n', ['asd\n', ''], True), + + ('asd\r\n\f', ['asd', '\f'], False), + ('asd\r\n\f', ['asd\r\n', '\f'], True), + + ('\fasd\r\n', ['\fasd', ''], False), + ('\fasd\r\n', ['\fasd\r\n', ''], True), + + ('', [''], False), + ('', [''], True), + + ('\n', ['', ''], False), + ('\n', ['\n', ''], True), + + ('\r', ['', ''], False), + ('\r', ['\r', ''], True), + + # Invalid line breaks + ('a\vb', ['a\vb'], False), + ('a\vb', ['a\vb'], True), + ('\x1C', ['\x1C'], False), + ('\x1C', ['\x1C'], True), + ] +) +def test_split_lines(string, expected_result, keepends): + assert split_lines(string, keepends=keepends) == expected_result + + +def test_python_bytes_to_unicode_unicode_text(): + source = ( + b"# vim: fileencoding=utf-8\n" + b"# \xe3\x81\x82\xe3\x81\x84\xe3\x81\x86\xe3\x81\x88\xe3\x81\x8a\n" + ) + actual = python_bytes_to_unicode(source) + expected = source.decode('utf-8') + assert actual == expected + + +def test_utf8_bom(): + unicode_bom = BOM_UTF8.decode('utf-8') + + module = parso.parse(unicode_bom) + endmarker = module.children[0] + assert endmarker.type == 'endmarker' + assert unicode_bom == endmarker.prefix + + module = parso.parse(unicode_bom + 'foo = 1') + expr_stmt = module.children[0] + assert expr_stmt.type == 'expr_stmt' + assert unicode_bom == expr_stmt.get_first_leaf().prefix diff --git a/vim/bundle/jedi-vim/pythonx/parso/tox.ini b/vim/bundle/jedi-vim/pythonx/parso/tox.ini new file mode 100644 index 0000000..3df09d5 --- /dev/null +++ b/vim/bundle/jedi-vim/pythonx/parso/tox.ini @@ -0,0 +1,17 @@ +[tox] +envlist = {py26,py27,py33,py34,py35,py36,py37} +[testenv] +extras = testing +deps = + py26,py33: pytest>=3.0.7,<3.3 + py27,py34: pytest<5 + py26,py33: setuptools<37 + coverage: coverage +setenv = +# https://github.com/tomchristie/django-rest-framework/issues/1957 +# tox corrupts __pycache__, solution from here: + PYTHONDONTWRITEBYTECODE=1 + coverage: TOX_TESTENV_COMMAND=coverage run -m pytest +commands = + {env:TOX_TESTENV_COMMAND:pytest} {posargs} + coverage: coverage report